2 using System.Collections.Generic;
5 using System.Threading;
11 public class FolderCopy
13 RadegastInstance Instance;
16 public FolderCopy(RadegastInstance instance)
18 this.Instance = instance;
19 this.Client = this.Instance.Client;
22 public void GetFolders(string folder)
24 var f = FindFolder(folder, Client.Inventory.Store.LibraryRootNode);
25 if (f == null) return;
27 UUID dest = Client.Inventory.FindFolderForType(AssetType.Clothing);
28 if (dest == UUID.Zero) return;
30 var destFolder = (InventoryFolder)Client.Inventory.Store[dest];
32 WorkPool.QueueUserWorkItem(sync =>
34 Instance.TabConsole.DisplayNotificationInChat("Starting copy operation...");
35 foreach (var node in f.Nodes.Values)
37 if (node.Data is InventoryFolder)
39 var s = (InventoryFolder)node.Data;
40 Instance.TabConsole.DisplayNotificationInChat(string.Format(" Copying {0} to {1}", s.Name, destFolder.Name));
41 CopyFolder(destFolder, s);
44 Instance.TabConsole.DisplayNotificationInChat("Done.");
48 public void CopyFolder(InventoryFolder dest, InventoryFolder folder)
50 UUID newFolderID = Client.Inventory.CreateFolder(dest.UUID, folder.Name, FolderType.None);
52 var items = Client.Inventory.FolderContents(folder.UUID, folder.OwnerID, true, true, InventorySortOrder.ByDate, 45 * 1000);
53 AutoResetEvent copied = new AutoResetEvent(false);
54 foreach (var item in items)
56 if (item is InventoryItem)
59 Client.Inventory.RequestCopyItem(item.UUID, newFolderID, item.Name, folder.OwnerID, (InventoryBase target) =>
61 Instance.TabConsole.DisplayNotificationInChat(string.Format(" * Copied {0} to {1}", item.Name, dest.Name));
64 copied.WaitOne(15 * 1000, false);
69 public InventoryNode FindFolder(string folder, InventoryNode start)
71 if (start.Data.Name == folder)
76 foreach (var node in start.Nodes.Values)
78 if (node.Data is InventoryFolder)
80 var n = FindFolder(folder, node);