CmisSync.Lib.Consumer.SituationSolver.RemoteObjectDeleted.DeleteLocalObjectIfHasBeenSyncedBefore C# (CSharp) Méthode

DeleteLocalObjectIfHasBeenSyncedBefore() private méthode

private DeleteLocalObjectIfHasBeenSyncedBefore ( IFileSystemInfo fsInfo ) : bool
fsInfo IFileSystemInfo
Résultat bool
        private bool DeleteLocalObjectIfHasBeenSyncedBefore(IFileSystemInfo fsInfo) {
            bool delete = true;
            string reason;
            Guid? uuid = fsInfo.Uuid;
            IMappedObject obj = null;
            if (uuid != null) {
                obj = this.Storage.GetObjectByGuid((Guid)uuid);
            } else {
                obj = this.Storage.GetObjectByLocalPath(fsInfo);
            }

            if (fsInfo is IFileInfo) {
                if (obj != null && fsInfo.LastWriteTimeUtc.Equals(obj.LastLocalWriteTimeUtc)) {
                    (fsInfo as IFileInfo).Delete();
                    OperationsLogger.Info(string.Format("Deleted local file {0} because the mapped remote object {0} has been deleted", fsInfo.FullName, obj.RemoteObjectId));
                } else {
                    fsInfo.Uuid = null;
                    return false;
                }
            } else if (fsInfo is IDirectoryInfo) {
                var dir = fsInfo as IDirectoryInfo;
                if (obj != null && obj.Ignored) {
                    dir.Delete(true);
                    return true;
                }

                if (!this.filters.FolderNamesFilter.CheckFolderName(dir.Name, out reason)) {
                    foreach (var folder in dir.GetDirectories()) {
                        if (!this.DeleteLocalObjectIfHasBeenSyncedBefore(folder)) {
                            delete = false;
                        }
                    }

                    foreach (var file in dir.GetFiles()) {
                        if (!this.filters.FileNamesFilter.CheckFile(file.Name, out reason)) {
                            if (!this.DeleteLocalObjectIfHasBeenSyncedBefore(file)) {
                                delete = false;
                            }
                        } else {
                            file.Delete();
                            OperationsLogger.Info(string.Format("Deleted local ignored file {0} because the mapped remote parent object {0} has been deleted", fsInfo.FullName, obj.RemoteObjectId));
                        }
                    }

                    if (delete) {
                        try {
                            (fsInfo as IDirectoryInfo).Delete(false);
                            OperationsLogger.Info(string.Format("Deleted local folder {0} because the mapped remote folder has been deleted", fsInfo.FullName));
                        } catch (IOException) {
                            fsInfo.Uuid = null;
                            return false;
                        }
                    } else {
                        fsInfo.Uuid = null;
                    }
                } else {
                    try {
                        (fsInfo as IDirectoryInfo).Delete(true);
                        OperationsLogger.Info(string.Format("Deleted locally ignored folder {0} because the parent mapped remote folder has been deleted", fsInfo.FullName));
                    } catch (IOException e) {
                        OperationsLogger.Info(string.Format("Deletion of locally ignored folder {0} failed", fsInfo.FullName), e);
                        return false;
                    }
                }
            }

            return delete;
        }
    }