public void CallFileUpdate(uint project, string dir, ulong uid, WorkingChange action) { if (WorkingFileUpdate != null) { Core.RunInGuiThread(WorkingFileUpdate, project, dir, uid, action); } }
void Storages_WorkingFileUpdate(uint project, string dir, ulong uid, WorkingChange action) { if (project != ProjectID) return; try { LocalFolder workingFolder = Working.GetLocalFolder(dir); FolderNode treeFolder = GetFolderNode(dir); if (treeFolder == null || workingFolder == null) return; if (action == WorkingChange.Created) { LocalFile workingFile; if (workingFolder.Files.SafeTryGetValue(uid, out workingFile)) { FileItem treeFile = new FileItem(this, treeFolder, workingFile.Info, false); treeFile.Archived = workingFile.Archived; treeFolder.Files[treeFile.Details.UID] = treeFile; } } else if (action == WorkingChange.Updated) { FileItem treeFile; treeFolder.Files.TryGetValue(uid, out treeFile); LocalFile workingFile; if (workingFolder.Files.SafeTryGetValue(uid, out workingFile)) if (treeFile != null) { treeFile.Details = workingFile.Info; treeFile.Archived = workingFile.Archived; treeFile.UpdateInterface(); UpdateListItems(); if (treeFile == SelectedInfo.CurrentFile) SelectedInfo.ShowItem(SelectedFolder, treeFile); } // not there, add else { treeFile = new FileItem(this, treeFolder, workingFile.Info, false); treeFile.Archived = workingFile.Archived; treeFolder.Files[treeFile.Details.UID] = treeFile; } } else if (action == WorkingChange.Removed) { FileItem treeFile; treeFolder.Files.TryGetValue(uid, out treeFile); if (treeFile != null && treeFolder.Files.ContainsKey(treeFile.Details.UID)) treeFolder.Files.Remove(treeFile.Details.UID); } if (treeFolder == SelectedFolder) SelectFolder(treeFolder); // doesnt CheckWorkingStatus(); } catch (Exception ex) { Core.Network.UpdateLog("Storage", "Interface:WorkingFileUpdate: " + ex.Message); } }
void Storages_WorkingFolderUpdate(uint project, string parent, ulong uid, WorkingChange action) { if (project != ProjectID) return; try { LocalFolder workingParent = Working.GetLocalFolder(parent); FolderNode treeParent = GetFolderNode(parent); LocalFolder workingFolder; workingParent.Folders.SafeTryGetValue(uid, out workingFolder); FolderNode treeFolder; treeParent.Folders.TryGetValue(uid, out treeFolder); // working folder can only be null on update or remove action if (action == WorkingChange.Created) { // create if (treeFolder == null) { LoadWorking(treeParent, workingFolder); } // convert else if(treeFolder.Temp) { treeFolder.Temp = false; treeFolder.Details = workingFolder.Info; treeFolder.Archived = workingFolder.Archived; // changes remains the same treeFolder.Update(); } } else if (action == WorkingChange.Updated) { if (workingFolder != null) { if (treeFolder != null) { // check if should be removed if (workingFolder.Info.IsFlagged(StorageFlags.Archived) && !GhostsButton.Checked) { if (treeParent.Nodes.Contains(treeFolder)) { treeParent.Nodes.Remove(treeFolder); if (SelectedFolder == treeFolder) SelectFolder(treeParent); } } // update else { treeFolder.Details = workingFolder.Info; treeFolder.Archived = workingFolder.Archived; // loop through working, if folder doesnt exist in tree, create it workingFolder.Folders.LockReading(delegate() { foreach (ulong id in workingFolder.Folders.Keys) if (!treeFolder.Folders.ContainsKey(id)) LoadWorking(treeFolder, workingFolder); }); // loop through tree, if folder doesnt exist in working, delete it List<FolderNode> unload = new List<FolderNode>(); foreach (ulong id in treeFolder.Folders.Keys) if (!workingFolder.Folders.SafeContainsKey(id)) unload.Add(treeFolder.Folders[id]); foreach (FolderNode remove in unload) UnloadWorking(treeFolder, remove); treeFolder.Update(); if (!SelectedInfo.IsFile && treeFolder == SelectedInfo.CurrentFolder) SelectedInfo.ShowItem(treeFolder, null); } } // check if should be added else if (!workingFolder.Info.IsFlagged(StorageFlags.Archived) || GhostsButton.Checked) { LoadWorking(treeParent, workingFolder); MarkRescanFolder(workingFolder.Info.UID, treeParent.GetPath(), null, true); } } // local temp folder else { // check if folder a child of selected, refresh view if so if ((treeParent != null && treeParent == SelectedFolder) || (treeFolder != null && treeFolder == SelectedFolder)) // re-naming un-tracked { RefreshFileList(); return; } } } else if (action == WorkingChange.Removed) { // rescan only needed here because changes aren't kept for similar files, so if folder is removed // a rescan needs to be done to re-build changes for sub directories / files string reselectPath = null; if (SelectedFolder.ParentPathContains(treeFolder.Details.UID)) reselectPath = SelectedFolder.GetPath(); if (treeParent != null && treeParent.Folders.ContainsKey(treeFolder.Details.UID)) { treeParent.Folders.Remove(treeFolder.Details.UID); treeParent.Nodes.Remove(treeFolder); } // if selected folders parent's contains deleted uid, reselect if (reselectPath != null) { FolderNode node = null; while (node == null) { node = GetFolderNode(reselectPath); if (node != null) { SelectFolder(node); break; } else if (reselectPath == "") { SelectFolder(RootFolder); break; } reselectPath = Utilities.StripOneLevel(reselectPath); } } if(treeParent != null) MarkRescanFolder(treeFolder.Details.UID, treeParent.GetPath(), null, true); } if (treeParent != null && treeParent == SelectedFolder) RefreshFileList(); FolderTreeView.Invalidate(); CheckWorkingStatus(); } catch (Exception ex) { Core.Network.UpdateLog("Storage", "Interface:WorkingFolderUpdate: " + ex.Message); } }
public void CallFolderUpdate(uint project, string dir, ulong uid, WorkingChange action) { if (WorkingFolderUpdate != null) Core.RunInGuiThread(WorkingFolderUpdate, project, dir, uid, action); }