Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        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;
            }
        }