diff --git a/src/actionfilenodesync.c b/src/actionfilenodesync.c index ef770d8..d82bea3 100644 --- a/src/actionfilenodesync.c +++ b/src/actionfilenodesync.c @@ -2,12 +2,12 @@ #include #include -#include "util.h" -#include "crc.h" -#include "fileutil.h" -#include "filenode.h" #include "actionfilenode.h" #include "actionfilenodesync.h" +#include "crc.h" +#include "filenode.h" +#include "fileutil.h" +#include "util.h" #define MaxDeltaTime 0 @@ -96,6 +96,12 @@ void AccionFileNode_SyncPair(FileNode fileNodeLeft, FileNode fileNodeRight, if (fileNodeRight->status == FileStatus_Deleted && fileNodeLeft->status == FileStatus_Deleted) { actionFileNodeNew->action = ActionFileCmp_Nothing; + } else if (fileNodeLeft->status == FileStatus_Undeleted && + fileNodeRight->status == FileStatus_Deleted) { + actionFileNodeNew->action = ActionFileCmp_LeftToRight; + } else if (fileNodeLeft->status == FileStatus_Deleted && + fileNodeRight->status == FileStatus_Undeleted) { + actionFileNodeNew->action = ActionFileCmp_RightToLeft; } else if (fileNodeRight->status == FileStatus_Deleted) { actionFileNodeNew->action = ActionFileCmp_DeleteLeft; } else if (fileNodeLeft->status == FileStatus_Deleted) { @@ -161,6 +167,12 @@ void AccionFileNode_SyncPair(FileNode fileNodeLeft, FileNode fileNodeRight, if (fileNodeRight->status == FileStatus_Deleted && fileNodeLeft->status == FileStatus_Deleted) { actionFileNodeNew->action = ActionFileCmp_Nothing; + } else if (fileNodeLeft->status == FileStatus_Undeleted && + fileNodeRight->status == FileStatus_Deleted) { + actionFileNodeNew->action = ActionFileCmp_LeftToRight; + } else if (fileNodeLeft->status == FileStatus_Deleted && + fileNodeRight->status == FileStatus_Undeleted) { + actionFileNodeNew->action = ActionFileCmp_RightToLeft; } else if (fileNodeRight->status == FileStatus_Deleted) { actionFileNodeNew->action = ActionFileCmp_DeleteLeft; } else if (fileNodeLeft->status == FileStatus_Deleted) { diff --git a/src/filenode.c b/src/filenode.c index ba60e4f..c0734bc 100644 --- a/src/filenode.c +++ b/src/filenode.c @@ -105,12 +105,7 @@ FileNode FileNode_GetRoot(FileNode fileNode) { void FileNode_SetStatusRec(FileNode fileNode, FileStatus status) { FileNode fileNodeChild; - if (status == FileStatus_Deleted && fileNode->status != status) { - FileNode fileNodeRoot = FileNode_GetRoot(fileNode); - fileNode->fileTime = fileNodeRoot->fileTime; - ; - fileNode->flags |= FileFlag_HasTime; - } + fileNode->status = status; fileNodeChild = fileNode->child; while (fileNodeChild) { @@ -384,7 +379,10 @@ void FileNode_PrintNode(FileNode fileNode) { Print(" Modified"); } if (fileNode->status == FileStatus_Deleted) { - Print(" Deleted!!!"); + Print(" Deleted"); + } + if (fileNode->status == FileStatus_Undeleted) { + Print(" Undeleted"); } Print("\n"); @@ -497,7 +495,7 @@ FileNode FileNode_Refresh(FileNode fileNode, char *filePath) { // Check directory data fileTime = FileTime_Get(filePath); if (fileNode->status == FileStatus_Deleted) { - fileNode->status = FileStatus_Modified; + fileNode->status = FileStatus_Undeleted; fileNode->fileTime = fileTime; } if (!(fileNode->flags & FileFlag_Directory)) { @@ -533,7 +531,7 @@ FileNode FileNode_Refresh(FileNode fileNode, char *filePath) { // Comprar datos de los ficheros File_GetSizeAndTime(filePath, &size, &fileTime); if (fileNode->status == FileStatus_Deleted) { - fileNode->status = FileStatus_Modified; + fileNode->status = FileStatus_Undeleted; fileNode->fileTime = fileTime; } if (!(fileNode->flags & FileFlag_Normal)) { diff --git a/src/filenode.h b/src/filenode.h index 374bd41..da1b7fd 100644 --- a/src/filenode.h +++ b/src/filenode.h @@ -5,7 +5,7 @@ #define FileNode_Filename "nodesFile.fs" -#define FileNode_Version 4 +#define FileNode_Version 5 #define FileFlag_Root 1 #define FileFlag_Normal 2 @@ -20,7 +20,8 @@ typedef enum EFileStatus { FileStatus_None, FileStatus_New, FileStatus_Modified, - FileStatus_Deleted + FileStatus_Deleted, + FileStatus_Undeleted } FileStatus; typedef struct TFileNode TFileNode, *FileNode;