Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
sdottaka committed Jan 20, 2025
1 parent 79996a6 commit f774817
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 26 deletions.
17 changes: 8 additions & 9 deletions Src/DirActions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -252,10 +252,11 @@ UPDATEITEM_TYPE UpdateDiffAfterOperation(const FileActionItem & act, CDiffContex
// UI dependent.
switch (act.UIResult)
{
case FileActionItem::UI_SYNC:
case FileActionItem::UI_COPY:
case FileActionItem::UI_COPY_DIFFITEMS:
bUpdateSrc = true;
bUpdateDest = true;
CopyDiffSideAndProperties(ctxt, di, act.UIOrigin, act.UIDestination);
CopyDiffSideAndProperties(ctxt, di, act.UIOrigin, act.UIDestination, act.UIResult);
if (ctxt.GetCompareDirs() > 2)
SetDiffCompare(di, DIFFCODE::NOCMP);
else
Expand All @@ -266,7 +267,7 @@ UPDATEITEM_TYPE UpdateDiffAfterOperation(const FileActionItem & act, CDiffContex
case FileActionItem::UI_MOVE:
bUpdateSrc = true;
bUpdateDest = true;
CopyDiffSideAndProperties(ctxt, di, act.UIOrigin, act.UIDestination);
CopyDiffSideAndProperties(ctxt, di, act.UIOrigin, act.UIDestination, act.UIResult);
UnsetDiffSide(ctxt, di, act.UIOrigin);
SetDiffCompare(di, DIFFCODE::NOCMP);
break;
Expand Down Expand Up @@ -1083,9 +1084,10 @@ int GetColImage(const DIFFITEM &di)
* @note This does not update UI - ReloadItemStatus() does
* @sa CDirDoc::ReloadItemStatus()
*/
void CopyDiffSideAndProperties(CDiffContext& ctxt, DIFFITEM& di, int src, int dst)
void CopyDiffSideAndProperties(CDiffContext& ctxt, DIFFITEM& di, int src, int dst, int action)
{
if (di.diffcode.exists(src))
if (di.diffcode.exists(src) &&
action != FileActionItem::UI_COPY_DIFFITEMS || di.diffcode.isResultDiff())
{
di.diffcode.diffcode |= (DIFFCODE::FIRST << dst);
// copy file properties other than ctime
Expand All @@ -1099,10 +1101,7 @@ void CopyDiffSideAndProperties(CDiffContext& ctxt, DIFFITEM& di, int src, int ds
if (di.HasChildren())
{
for (DIFFITEM* pdic = di.GetFirstChild(); pdic; pdic = pdic->GetFwdSiblingLink())
{
CopyDiffSideAndProperties(ctxt, *pdic, src, dst);
UpdateStatusFromDisk(ctxt, di, dst);
}
CopyDiffSideAndProperties(ctxt, *pdic, src, dst, action);
}
}

Expand Down
18 changes: 6 additions & 12 deletions Src/DirActions.h
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ int GetColImage(const DIFFITEM &di);

void SetDiffStatus(DIFFITEM& di, unsigned diffcode, unsigned mask);
void SetDiffCompare(DIFFITEM& di, unsigned diffcode);
void CopyDiffSideAndProperties(CDiffContext& ctxt, DIFFITEM& di, int src, int dst);
void CopyDiffSideAndProperties(CDiffContext& ctxt, DIFFITEM& di, int src, int dst, int action);
void UnsetDiffSide(const CDiffContext& ctxt, DIFFITEM& di, int index);
void UpdateStatusFromDisk(CDiffContext& ctxt, DIFFITEM& di, int index);
int UpdateCompareFlagsAfterSync(DIFFITEM& di, bool bRecursive);
Expand Down Expand Up @@ -366,12 +366,10 @@ struct DirActions
{
if (!di.HasChildren())
return (di.diffcode.diffcode != 0 && (di.diffcode.isResultSame() || di.diffcode.isResultFiltered() || di.diffcode.isResultError()));
DIFFITEM* pdi = di.GetFirstChild();
while (pdi)
for (DIFFITEM* pdic = di.GetFirstChild(); pdic; pdic = pdic->GetFwdSiblingLink())
{
if (IsItemIdenticalOrSkipped(*pdi))
if (IsItemIdenticalOrSkipped(*pdic))
return true;
pdi = pdi->GetFwdSiblingLink();
}
return false;
}
Expand All @@ -385,12 +383,8 @@ struct DirActions
{
if (!includeIdenticalOrSkipped && it.second->HasChildren())
{
const DIFFITEM* pdi = it.second->GetFirstChild();
while (pdi)
{
CopyItem(pscript, { it.first, pdi }, includeIdenticalOrSkipped, src, dst);
pdi = pdi->GetFwdSiblingLink();
}
for (DIFFITEM* pdic = di.GetFirstChild(); pdic; pdic = pdic->GetFwdSiblingLink())
CopyItem(pscript, { it.first, pdic }, includeIdenticalOrSkipped, src, dst);
return pscript;
}
FileActionItem act;
Expand All @@ -404,7 +398,7 @@ struct DirActions
act.context = it.first;
act.dirflag = di.diffcode.isDirectory();
act.atype = FileAction::ACT_COPY;
act.UIResult = FileActionItem::UI_SYNC;
act.UIResult = includeIdenticalOrSkipped ? FileActionItem::UI_COPY : FileActionItem::UI_COPY_DIFFITEMS;
act.UIOrigin = srcidx;
act.UIDestination = dstidx;
pscript->AddActionItem(act);
Expand Down
11 changes: 6 additions & 5 deletions Src/FileActionScript.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,11 +64,12 @@ struct FileActionItem : public FileAction
*/
enum UI_RESULT
{
UI_SYNC = 1, /**< Make items identical (synchronized). */
UI_MOVE, /**< Move items. */
UI_DEL, /**< Remove left item. */
UI_DONT_CARE, /**< Ignore the GUI change. */
UI_RENAME /**< Rename item. */
UI_COPY = 1, /**< Copy items. */
UI_COPY_DIFFITEMS, /**< Copy diff items. */
UI_MOVE, /**< Move items. */
UI_DEL, /**< Remove left item. */
UI_DONT_CARE, /**< Ignore the GUI change. */
UI_RENAME /**< Rename item. */
};

/**
Expand Down

0 comments on commit f774817

Please sign in to comment.