private static void UpdateFolder(IXenObject ixmo) { InvokeHelper.AssertOnEventThread(); IXenConnection connection = ixmo.Connection; XenRef <Folder> oldPath = new XenRef <Folder>(ixmo.Path); Folder oldFolder = connection.Resolve(oldPath); String newPath = GetPathFromOtherConfig(ixmo); if (oldPath.opaque_ref.Equals(newPath) && (newPath.Trim().Length == 0 || oldFolder != null)) { return; } Folder newFolder = GetOrCreateFolder(connection, newPath); if (newFolder != null) { newFolder.AddObject(ixmo); } if (oldFolder != null) { oldFolder.RemoveObject(ixmo); PotentiallyRemoveFolder(oldFolder); } ixmo.Path = newPath; }
private static void PurgeEmptyFolders(String[] emptyFolders, Folder folder) { List <Folder> toRemove = new List <Folder>(); foreach (IXenObject ixmo in folder.XenObjects) { Folder subFolder = ixmo as Folder; if (subFolder == null) { continue; } PurgeEmptyFolders(emptyFolders, subFolder); if (subFolder.XenObjectsCount <= 0 && Array.BinarySearch <String>(emptyFolders, subFolder.opaque_ref) < 0) { toRemove.Add(subFolder); continue; } } foreach (Folder subFolder in toRemove) { folder.RemoveObject(subFolder); folder.Connection.Cache.RemoveFolder(new XenRef <Folder>(subFolder.opaque_ref)); } }
private static void RemoveObject(IXenObject ixmo) { InvokeHelper.AssertOnEventThread(); XenRef <Folder> path = new XenRef <Folder>(ixmo.Path); Folder folder = ixmo.Connection.Resolve(path); if (folder != null) { folder.RemoveObject(ixmo); PotentiallyRemoveFolder(folder); } }