public void LockFolder(FolderNode folder, bool subs, List<LockError> errors) { string path = folder.GetPath(); string wholepath = Storages.GetRootPath(UserID, ProjectID) + path; List<string> stillLocked = new List<string>(); foreach (FileItem file in folder.Files.Values) if (!file.Temp) { Storages.LockFileCompletely(UserID, ProjectID, path, file.Archived, errors); string filepath = wholepath + Path.DirectorySeparatorChar + file.Details.Name; if (File.Exists(filepath)) stillLocked.Add(filepath); } folder.Details.RemoveFlag(StorageFlags.Unlocked); folder.Update(); if (subs) foreach (FolderNode subfolder in folder.Folders.Values) if (!subfolder.Temp) LockFolder(subfolder, subs, errors); Storages.DeleteFolder(wholepath, errors, stillLocked); }
public void UnlockFolder(FolderNode folder, bool subs, List<LockError> errors) { string path = folder.GetPath(); string root = Storages.GetRootPath(UserID, ProjectID); if(!Storages.CreateFolder(root + path, errors, subs)) return; if (Directory.Exists(root + path)) { // set flag folder.Details.SetFlag(StorageFlags.Unlocked); folder.Update(); // unlock files foreach (FileItem file in folder.Files.Values) if (!file.Temp && !file.Details.IsFlagged(StorageFlags.Archived)) Storages.UnlockFile(UserID, ProjectID, path, (StorageFile)file.Details, false, errors); // unlock subfolders if (subs) foreach (FolderNode subfolder in folder.Folders.Values) if (!subfolder.Details.IsFlagged(StorageFlags.Archived)) UnlockFolder(subfolder, subs, errors); } }
private void UnloadWorking(FolderNode parent, FolderNode folder) { // need to leave ghosts of removed working files because we dont know what diffs applied // had the same hash has the file being unloaded (exists but never added to change log) // to be safe, we remove most everything and set everything as temp folder.Details = folder.Details.Clone(); folder.Details.RemoveFlag(StorageFlags.Modified); folder.Archived.SafeClear(); folder.Temp = true; if (parent.Nodes.Contains(folder)) if (folder.Details.IsFlagged(StorageFlags.Archived) && !GhostsButton.Checked) parent.Nodes.Remove(folder); else folder.Update(); foreach (FolderNode sub in folder.Folders.Values) UnloadWorking(folder, sub); foreach (FileItem file in folder.Files.Values) { file.Details = ((StorageFile)file.Details).Clone(); file.Details.RemoveFlag(StorageFlags.Modified); file.Archived.SafeClear(); file.Temp = true; } }