OSDN Git Service

Pass-through rebake throgh COF handler
authorLatif Khalifa <latifer@streamgrid.net>
Thu, 18 Jul 2013 11:59:27 +0000 (13:59 +0200)
committerLatif Khalifa <latifer@streamgrid.net>
Thu, 18 Jul 2013 11:59:27 +0000 (13:59 +0200)
Radegast/GUI/Consoles/Inventory/CurrentOutfitFolder.cs
Radegast/GUI/Consoles/Inventory/FolderCopy.cs [new file with mode: 0755]
Radegast/GUI/Consoles/Inventory/InventoryConsole.cs
Radegast/GUI/Dialogs/MainForm.cs

index 3bbf0a8..bb4b010 100644 (file)
@@ -671,6 +671,14 @@ namespace Radegast
             return false;
         }
 
+        /// <summary>
+        /// Force rebaking textures
+        /// </summary>
+        public void RebakeTextures()
+        {
+            Client.Appearance.RequestSetAppearance(true);
+        }
+
         #endregion Public methods
     }
 }
diff --git a/Radegast/GUI/Consoles/Inventory/FolderCopy.cs b/Radegast/GUI/Consoles/Inventory/FolderCopy.cs
new file mode 100755 (executable)
index 0000000..d0cb962
--- /dev/null
@@ -0,0 +1,91 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using OpenMetaverse;
+
+namespace Radegast
+{
+
+    public class FolderCopy
+    {
+        RadegastInstance Instance;
+        GridClient Client;
+
+        public FolderCopy(RadegastInstance instance)
+        {
+            this.Instance = instance;
+            this.Client = this.Instance.Client;
+        }
+
+        public void GetFolders(string folder)
+        {
+            var f = FindFolder(folder, Client.Inventory.Store.LibraryRootNode);
+            if (f == null) return;
+
+            UUID dest = Client.Inventory.FindFolderForType(AssetType.Clothing);
+            if (dest == UUID.Zero) return;
+
+            var destFolder = (InventoryFolder)Client.Inventory.Store[dest];
+
+            ThreadPool.QueueUserWorkItem(sync =>
+            {
+                Instance.TabConsole.DisplayNotificationInChat("Starting copy operation...");
+                foreach (var node in f.Nodes.Values)
+                {
+                    if (node.Data is InventoryFolder)
+                    {
+                        var s = (InventoryFolder)node.Data;
+                        Instance.TabConsole.DisplayNotificationInChat(string.Format("  Copying {0} to {1}", s.Name, destFolder.Name));
+                        CopyFolder(destFolder, s);
+                    }
+                }
+                Instance.TabConsole.DisplayNotificationInChat("Done.");
+            });
+        }
+
+        public void CopyFolder(InventoryFolder dest, InventoryFolder folder)
+        {
+            UUID newFolderID = Client.Inventory.CreateFolder(dest.UUID, folder.Name, AssetType.Unknown);
+            Thread.Sleep(500);
+            var items = Client.Inventory.FolderContents(folder.UUID, folder.OwnerID, true, true, InventorySortOrder.ByDate, 45 * 1000);
+            AutoResetEvent copied = new AutoResetEvent(false);
+            foreach (var item in items)
+            {
+                if (item is InventoryItem)
+                {
+                    copied.Reset();
+                    Client.Inventory.RequestCopyItem(item.UUID, newFolderID, item.Name, folder.OwnerID, (InventoryBase target) =>
+                    {
+                        Instance.TabConsole.DisplayNotificationInChat(string.Format("    * Copied {0} to {1}", item.Name, dest.Name));
+                        copied.Set();
+                    });
+                    copied.WaitOne(15 * 1000, false);
+                }
+            }
+        }
+
+        public InventoryNode FindFolder(string folder, InventoryNode start)
+        {
+            if (start.Data.Name == folder)
+            {
+                return start;
+            }
+
+            foreach (var node in start.Nodes.Values)
+            {
+                if (node.Data is InventoryFolder)
+                {
+                    var n = FindFolder(folder, node);
+                    if (n != null)
+                    {
+                        return n;
+                    }
+                }
+            }
+
+            return null;
+        }
+    }
+}
index 7549ff0..ad1773e 100644 (file)
@@ -2645,6 +2645,12 @@ namespace Radegast
             txtInvID.SelectAll();
         }
 
+        private void copyInitialOutfitsToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            var c = new FolderCopy(instance);
+            c.GetFolders("Initial Outfits");
+        }
+
 
     }
 
index 585d45a..b66f346 100644 (file)
@@ -1127,7 +1127,7 @@ namespace Radegast
 
         private void rebakeTexturesToolStripMenuItem_Click(object sender, EventArgs e)
         {
-            client.Appearance.RequestSetAppearance(true);
+            instance.COF.RebakeTextures();
         }
 
         public void MapToCurrentLocation()