Exemple #1
0
 public void CallFileUpdate(uint project, string dir, ulong uid, WorkingChange action)
 {
     if (WorkingFileUpdate != null)
     {
         Core.RunInGuiThread(WorkingFileUpdate, project, dir, uid, action);
     }
 }
Exemple #2
0
        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);
             }
        }
Exemple #3
0
        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);
            }
        }
Exemple #4
0
 public void CallFolderUpdate(uint project, string dir, ulong uid, WorkingChange action)
 {
     if (WorkingFolderUpdate != null)
         Core.RunInGuiThread(WorkingFolderUpdate, project, dir, uid, action);
 }