aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorBrian McBee2007-12-15 04:57:14 +0000
committerBrian McBee2007-12-15 04:57:14 +0000
commit8a8c89a0f32b528bd588715bdbfc875c852e7187 (patch)
treeb46cb20d03dfdb21a5cbdfa514a8e745070a3713
parentSet svn:eol-style. Cleaned up set-eol-style.sh a bit. (diff)
downloadopensim-SC-8a8c89a0f32b528bd588715bdbfc875c852e7187.zip
opensim-SC-8a8c89a0f32b528bd588715bdbfc875c852e7187.tar.gz
opensim-SC-8a8c89a0f32b528bd588715bdbfc875c852e7187.tar.bz2
opensim-SC-8a8c89a0f32b528bd588715bdbfc875c852e7187.tar.xz
Grid Inventory feature upgrade: renaming folders should now be correct, subfolders work, moving folders works.
Tested only in MYSQL, but may work in MSSQL and sqlite. Probably not working in standalone mode.
-rw-r--r--OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs10
-rw-r--r--OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs32
-rw-r--r--OpenSim/Framework/Communications/IInventoryServices.cs1
-rw-r--r--OpenSim/Framework/Communications/InventoryServiceBase.cs20
-rw-r--r--OpenSim/Framework/Data.MSSQL/MSSQLInventoryData.cs28
-rw-r--r--OpenSim/Framework/Data.MySQL/MySQLInventoryData.cs22
-rw-r--r--OpenSim/Framework/Data.SQLite/SQLiteInventoryStore.cs32
-rw-r--r--OpenSim/Framework/IClientAPI.cs6
-rw-r--r--OpenSim/Framework/InventoryItemBase.cs6
-rw-r--r--OpenSim/Grid/InventoryServer/GridInventoryService.cs59
-rw-r--r--OpenSim/Grid/InventoryServer/Main.cs4
-rw-r--r--OpenSim/Region/ClientStack/ClientView.cs63
-rw-r--r--OpenSim/Region/Communications/Local/LocalInventoryService.cs5
-rw-r--r--OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs10
-rw-r--r--OpenSim/Region/Environment/Scenes/Scene.cs1
-rw-r--r--OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs3
16 files changed, 281 insertions, 21 deletions
diff --git a/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs b/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs
index c07a15b..1d2c920 100644
--- a/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs
+++ b/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs
@@ -142,5 +142,15 @@ namespace OpenSim.Framework.Communications.Cache
142 } 142 }
143 return itemList; 143 return itemList;
144 } 144 }
145
146 public List<InventoryFolderBase> RequestListOfFolders()
147 {
148 List<InventoryFolderBase> folderList = new List<InventoryFolderBase>();
149 foreach (InventoryFolderBase folder in SubFolders.Values)
150 {
151 folderList.Add(folder);
152 }
153 return folderList;
154 }
145 } 155 }
146} 156}
diff --git a/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs b/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs
index 32d941c..bf7f5c1 100644
--- a/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs
+++ b/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs
@@ -147,6 +147,23 @@ namespace OpenSim.Framework.Communications.Cache
147 } 147 }
148 } 148 }
149 149
150 public void HandleMoveInventoryFolder(IClientAPI remoteClient, LLUUID folderID, LLUUID parentID)
151 {
152 CachedUserInfo userProfile;
153
154 if (m_userProfiles.TryGetValue(remoteClient.AgentId, out userProfile))
155 {
156 if (userProfile.RootFolder != null)
157 {
158 InventoryFolderBase baseFolder = new InventoryFolderBase();
159 baseFolder.agentID = remoteClient.AgentId;
160 baseFolder.folderID = folderID;
161 baseFolder.parentID = parentID;
162 m_parent.InventoryService.MoveInventoryFolder(remoteClient.AgentId, baseFolder);
163 }
164 }
165 }
166
150 /// <summary> 167 /// <summary>
151 /// Tell the client about the various child items and folders contained in the requested folder. 168 /// Tell the client about the various child items and folders contained in the requested folder.
152 /// </summary> 169 /// </summary>
@@ -163,14 +180,15 @@ namespace OpenSim.Framework.Communications.Cache
163 if (folderID == libraryRoot.folderID) 180 if (folderID == libraryRoot.folderID)
164 { 181 {
165 remoteClient.SendInventoryFolderDetails(libraryRoot.agentID, libraryRoot.folderID, 182 remoteClient.SendInventoryFolderDetails(libraryRoot.agentID, libraryRoot.folderID,
166 libraryRoot.RequestListOfItems(), libraryRoot.SubFoldersCount); 183 libraryRoot.RequestListOfItems(), libraryRoot.RequestListOfFolders(), libraryRoot.SubFoldersCount);
167 184
168 return; 185 return;
169 } 186 }
170 187
171 if ((fold = libraryRoot.HasSubFolder(folderID)) != null) 188 if ((fold = libraryRoot.HasSubFolder(folderID)) != null)
172 { 189 {
173 remoteClient.SendInventoryFolderDetails(libraryRoot.agentID, folderID, fold.RequestListOfItems(), fold.SubFoldersCount); 190 System.Console.WriteLine("fetching librarysubfolder");
191 remoteClient.SendInventoryFolderDetails(libraryRoot.agentID, folderID, fold.RequestListOfItems(), fold.RequestListOfFolders(), fold.SubFoldersCount);
174 192
175 return; 193 return;
176 } 194 }
@@ -182,19 +200,19 @@ namespace OpenSim.Framework.Communications.Cache
182 { 200 {
183 if (userProfile.RootFolder.folderID == folderID) 201 if (userProfile.RootFolder.folderID == folderID)
184 { 202 {
203 System.Console.Write("fetching root folder");
185 if (fetchItems) 204 if (fetchItems)
186 { 205 {
187 remoteClient.SendInventoryFolderDetails(remoteClient.AgentId, folderID, 206 remoteClient.SendInventoryFolderDetails(remoteClient.AgentId, folderID,
188 userProfile.RootFolder.RequestListOfItems(), userProfile.RootFolder.SubFoldersCount); 207 userProfile.RootFolder.RequestListOfItems(), userProfile.RootFolder.RequestListOfFolders(), userProfile.RootFolder.SubFoldersCount);
189 } 208 }
190 } 209 }
191 else 210 else
192 { 211 {
193 InventoryFolderImpl folder = userProfile.RootFolder.HasSubFolder(folderID); 212 if ((fold = userProfile.RootFolder.HasSubFolder(folderID)) != null)
194
195 if (fetchItems && folder != null)
196 { 213 {
197 remoteClient.SendInventoryFolderDetails(remoteClient.AgentId, folderID, folder.RequestListOfItems(), folder.SubFoldersCount); 214 remoteClient.SendInventoryFolderDetails(remoteClient.AgentId, folderID, fold.RequestListOfItems(), fold.RequestListOfFolders(), fold.SubFoldersCount);
215 return;
198 } 216 }
199 } 217 }
200 } 218 }
diff --git a/OpenSim/Framework/Communications/IInventoryServices.cs b/OpenSim/Framework/Communications/IInventoryServices.cs
index 191cdf2..9c493d4 100644
--- a/OpenSim/Framework/Communications/IInventoryServices.cs
+++ b/OpenSim/Framework/Communications/IInventoryServices.cs
@@ -40,6 +40,7 @@ namespace OpenSim.Framework.Communications
40 { 40 {
41 void RequestInventoryForUser(LLUUID userID, InventoryFolderInfo folderCallBack, InventoryItemInfo itemCallBack); 41 void RequestInventoryForUser(LLUUID userID, InventoryFolderInfo folderCallBack, InventoryItemInfo itemCallBack);
42 void AddNewInventoryFolder(LLUUID userID, InventoryFolderBase folder); 42 void AddNewInventoryFolder(LLUUID userID, InventoryFolderBase folder);
43 void MoveInventoryFolder(LLUUID userID, InventoryFolderBase folder);
43 void AddNewInventoryItem(LLUUID userID, InventoryItemBase item); 44 void AddNewInventoryItem(LLUUID userID, InventoryItemBase item);
44 void DeleteInventoryItem(LLUUID userID, InventoryItemBase item); 45 void DeleteInventoryItem(LLUUID userID, InventoryItemBase item);
45 void CreateNewUserInventory(LLUUID user); 46 void CreateNewUserInventory(LLUUID user);
diff --git a/OpenSim/Framework/Communications/InventoryServiceBase.cs b/OpenSim/Framework/Communications/InventoryServiceBase.cs
index 28b81d4..1e13031 100644
--- a/OpenSim/Framework/Communications/InventoryServiceBase.cs
+++ b/OpenSim/Framework/Communications/InventoryServiceBase.cs
@@ -130,6 +130,17 @@ namespace OpenSim.Framework.Communications
130 /// <summary> 130 /// <summary>
131 /// 131 ///
132 /// </summary> 132 /// </summary>
133 public void MoveInventoryFolder(LLUUID userID, InventoryFolderBase folder)
134 {
135 foreach (KeyValuePair<string, IInventoryData> plugin in m_plugins)
136 {
137 plugin.Value.moveInventoryFolder(folder);
138 }
139 }
140
141 /// <summary>
142 ///
143 /// </summary>
133 /// <param name="parentFolderID"></param> 144 /// <param name="parentFolderID"></param>
134 /// <returns></returns> 145 /// <returns></returns>
135 public List<InventoryFolderBase> RequestSubFolders(LLUUID parentFolderID) 146 public List<InventoryFolderBase> RequestSubFolders(LLUUID parentFolderID)
@@ -161,6 +172,14 @@ namespace OpenSim.Framework.Communications
161 } 172 }
162 } 173 }
163 174
175 public void MoveFolder(InventoryFolderBase folder)
176 {
177 foreach (KeyValuePair<string, IInventoryData> plugin in m_plugins)
178 {
179 plugin.Value.moveInventoryFolder(folder);
180 }
181 }
182
164 public void AddItem(InventoryItemBase item) 183 public void AddItem(InventoryItemBase item)
165 { 184 {
166 foreach (KeyValuePair<string, IInventoryData> plugin in m_plugins) 185 foreach (KeyValuePair<string, IInventoryData> plugin in m_plugins)
@@ -251,6 +270,7 @@ namespace OpenSim.Framework.Communications
251 InventoryItemInfo itemCallBack); 270 InventoryItemInfo itemCallBack);
252 271
253 public abstract void AddNewInventoryFolder(LLUUID userID, InventoryFolderBase folder); 272 public abstract void AddNewInventoryFolder(LLUUID userID, InventoryFolderBase folder);
273 public abstract void MoveExistingInventoryFolder(InventoryFolderBase folder);
254 public abstract void AddNewInventoryItem(LLUUID userID, InventoryItemBase item); 274 public abstract void AddNewInventoryItem(LLUUID userID, InventoryItemBase item);
255 public abstract void DeleteInventoryItem(LLUUID userID, InventoryItemBase item); 275 public abstract void DeleteInventoryItem(LLUUID userID, InventoryItemBase item);
256 } 276 }
diff --git a/OpenSim/Framework/Data.MSSQL/MSSQLInventoryData.cs b/OpenSim/Framework/Data.MSSQL/MSSQLInventoryData.cs
index ef2a0f3..69b53a3 100644
--- a/OpenSim/Framework/Data.MSSQL/MSSQLInventoryData.cs
+++ b/OpenSim/Framework/Data.MSSQL/MSSQLInventoryData.cs
@@ -604,6 +604,34 @@ namespace OpenSim.Framework.Data.MSSQL
604 604
605 } 605 }
606 606
607 /// <summary>
608 /// Updates an inventory folder
609 /// </summary>
610 /// <param name="folder">Folder to update</param>
611
612 public void moveInventoryFolder(InventoryFolderBase folder)
613 {
614 SqlCommand command = new SqlCommand("UPDATE inventoryfolders set folderID = @folderID, " +
615 "parentFolderID = @parentFolderID," +
616 "folderID = @keyFolderID;", database.getConnection());
617 SqlParameter param1 = new SqlParameter("@folderID", folder.folderID.ToStringHyphenated());
618 SqlParameter param2 = new SqlParameter("@parentFolderID", folder.parentID.ToStringHyphenated());
619 SqlParameter param3 = new SqlParameter("@keyFolderID", folder.folderID.ToStringHyphenated());
620 command.Parameters.Add(param1);
621 command.Parameters.Add(param2);
622 command.Parameters.Add(param3);
623
624 try
625 {
626 command.ExecuteNonQuery();
627 }
628 catch (Exception e)
629 {
630 MainLog.Instance.Error(e.ToString());
631 }
632
633
634 }
607 635
608 /// <summary> 636 /// <summary>
609 /// Append a list of all the child folders of a parent folder 637 /// Append a list of all the child folders of a parent folder
diff --git a/OpenSim/Framework/Data.MySQL/MySQLInventoryData.cs b/OpenSim/Framework/Data.MySQL/MySQLInventoryData.cs
index edf7c43..6828f66 100644
--- a/OpenSim/Framework/Data.MySQL/MySQLInventoryData.cs
+++ b/OpenSim/Framework/Data.MySQL/MySQLInventoryData.cs
@@ -529,6 +529,28 @@ namespace OpenSim.Framework.Data.MySQL
529 addInventoryFolder(folder); 529 addInventoryFolder(folder);
530 } 530 }
531 531
532 /// Creates a new inventory folder
533 /// </summary>
534 /// <param name="folder">Folder to create</param>
535 public void moveInventoryFolder(InventoryFolderBase folder)
536 {
537 string sql =
538 "UPDATE inventoryfolders SET parentFolderID=?parentFolderID WHERE folderID=?folderID";
539
540 MySqlCommand cmd = new MySqlCommand(sql, database.Connection);
541 cmd.Parameters.AddWithValue("?folderID", folder.folderID.ToStringHyphenated());
542 cmd.Parameters.AddWithValue("?parentFolderID", folder.parentID.ToStringHyphenated());
543
544
545 try
546 {
547 cmd.ExecuteNonQuery();
548 }
549 catch (Exception e)
550 {
551 MainLog.Instance.Error(e.ToString());
552 }
553 }
532 554
533 /// <summary> 555 /// <summary>
534 /// Append a list of all the child folders of a parent folder 556 /// Append a list of all the child folders of a parent folder
diff --git a/OpenSim/Framework/Data.SQLite/SQLiteInventoryStore.cs b/OpenSim/Framework/Data.SQLite/SQLiteInventoryStore.cs
index b9a1daa..fe27e32 100644
--- a/OpenSim/Framework/Data.SQLite/SQLiteInventoryStore.cs
+++ b/OpenSim/Framework/Data.SQLite/SQLiteInventoryStore.cs
@@ -141,6 +141,24 @@ namespace OpenSim.Framework.Data.SQLite
141 invFoldersDa.Update(ds, "inventoryfolders"); 141 invFoldersDa.Update(ds, "inventoryfolders");
142 } 142 }
143 143
144 private void moveFolder(InventoryFolderBase folder)
145 {
146 DataTable inventoryFolderTable = ds.Tables["inventoryfolders"];
147
148 DataRow inventoryRow = inventoryFolderTable.Rows.Find(folder.folderID);
149 if (inventoryRow == null)
150 {
151 inventoryRow = inventoryFolderTable.NewRow();
152 fillFolderRow(inventoryRow, folder);
153 inventoryFolderTable.Rows.Add(inventoryRow);
154 }
155 else
156 {
157 moveFolderRow(inventoryRow, folder);
158 }
159
160 invFoldersDa.Update(ds, "inventoryfolders");
161 }
144 private void addItem(InventoryItemBase item) 162 private void addItem(InventoryItemBase item)
145 { 163 {
146 DataTable inventoryItemTable = ds.Tables["inventoryitems"]; 164 DataTable inventoryItemTable = ds.Tables["inventoryitems"];
@@ -404,6 +422,15 @@ namespace OpenSim.Framework.Data.SQLite
404 } 422 }
405 423
406 /// <summary> 424 /// <summary>
425 /// Moves a folder based on its ID with folder
426 /// </summary>
427 /// <param name="folder">The inventory folder</param>
428 public void moveInventoryFolder(InventoryFolderBase folder)
429 {
430 moveFolder(folder);
431 }
432
433 /// <summary>
407 /// Delete a folder 434 /// Delete a folder
408 /// </summary> 435 /// </summary>
409 /// <remarks> 436 /// <remarks>
@@ -534,6 +561,11 @@ namespace OpenSim.Framework.Data.SQLite
534 row["version"] = folder.version; 561 row["version"] = folder.version;
535 } 562 }
536 563
564 private void moveFolderRow(DataRow row, InventoryFolderBase folder)
565 {
566 row["UUID"] = folder.folderID;
567 row["parentID"] = folder.parentID;
568 }
537 569
538 /*********************************************************************** 570 /***********************************************************************
539 * 571 *
diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs
index 8075d0d..738df13 100644
--- a/OpenSim/Framework/IClientAPI.cs
+++ b/OpenSim/Framework/IClientAPI.cs
@@ -330,6 +330,9 @@ namespace OpenSim.Framework
330 public delegate void UpdateInventoryFolder( 330 public delegate void UpdateInventoryFolder(
331 IClientAPI remoteClient, LLUUID folderID, ushort type, string name, LLUUID parentID); 331 IClientAPI remoteClient, LLUUID folderID, ushort type, string name, LLUUID parentID);
332 332
333 public delegate void MoveInventoryFolder(
334 IClientAPI remoteClient, LLUUID folderID, LLUUID parentID);
335
333 public delegate void CreateNewInventoryItem( 336 public delegate void CreateNewInventoryItem(
334 IClientAPI remoteClient, LLUUID transActionID, LLUUID folderID, uint callbackID, string description, string name, 337 IClientAPI remoteClient, LLUUID transActionID, LLUUID folderID, uint callbackID, string description, string name,
335 sbyte invType, sbyte type, byte wearableType, uint nextOwnerMask); 338 sbyte invType, sbyte type, byte wearableType, uint nextOwnerMask);
@@ -432,6 +435,7 @@ namespace OpenSim.Framework
432 event CreateNewInventoryItem OnCreateNewInventoryItem; 435 event CreateNewInventoryItem OnCreateNewInventoryItem;
433 event CreateInventoryFolder OnCreateNewInventoryFolder; 436 event CreateInventoryFolder OnCreateNewInventoryFolder;
434 event UpdateInventoryFolder OnUpdateInventoryFolder; 437 event UpdateInventoryFolder OnUpdateInventoryFolder;
438 event MoveInventoryFolder OnMoveInventoryFolder;
435 event FetchInventoryDescendents OnFetchInventoryDescendents; 439 event FetchInventoryDescendents OnFetchInventoryDescendents;
436 event PurgeInventoryDescendents OnPurgeInventoryDescendents; 440 event PurgeInventoryDescendents OnPurgeInventoryDescendents;
437 event FetchInventory OnFetchInventory; 441 event FetchInventory OnFetchInventory;
@@ -522,7 +526,7 @@ namespace OpenSim.Framework
522 void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, 526 void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position,
523 LLQuaternion rotation, LLVector3 velocity, LLVector3 rotationalvelocity); 527 LLQuaternion rotation, LLVector3 velocity, LLVector3 rotationalvelocity);
524 528
525 void SendInventoryFolderDetails(LLUUID ownerID, LLUUID folderID, List<InventoryItemBase> items, int subFoldersCount); 529 void SendInventoryFolderDetails(LLUUID ownerID, LLUUID folderID, List<InventoryItemBase> items, List<InventoryFolderBase> folders, int subFoldersCount);
526 void SendInventoryItemDetails(LLUUID ownerID, InventoryItemBase item); 530 void SendInventoryItemDetails(LLUUID ownerID, InventoryItemBase item);
527 531
528 /// <summary> 532 /// <summary>
diff --git a/OpenSim/Framework/InventoryItemBase.cs b/OpenSim/Framework/InventoryItemBase.cs
index adcc289..8cb3e73 100644
--- a/OpenSim/Framework/InventoryItemBase.cs
+++ b/OpenSim/Framework/InventoryItemBase.cs
@@ -239,6 +239,12 @@ namespace OpenSim.Framework
239 void updateInventoryFolder(InventoryFolderBase folder); 239 void updateInventoryFolder(InventoryFolderBase folder);
240 240
241 /// <summary> 241 /// <summary>
242 /// Updates a folder based on its ID with folder
243 /// </summary>
244 /// <param name="folder">The inventory folder</param>
245 void moveInventoryFolder(InventoryFolderBase folder);
246
247 /// <summary>
242 /// Deletes a folder based on its ID with folder 248 /// Deletes a folder based on its ID with folder
243 /// </summary> 249 /// </summary>
244 /// <param name="folder">The id of the folder</param> 250 /// <param name="folder">The id of the folder</param>
diff --git a/OpenSim/Grid/InventoryServer/GridInventoryService.cs b/OpenSim/Grid/InventoryServer/GridInventoryService.cs
index 8756ecb..6ae1d82 100644
--- a/OpenSim/Grid/InventoryServer/GridInventoryService.cs
+++ b/OpenSim/Grid/InventoryServer/GridInventoryService.cs
@@ -45,22 +45,33 @@ namespace OpenSim.Grid.InventoryServer
45 45
46 private bool TryGetUsersInventory(LLUUID userID, out List<InventoryFolderBase> folderList, out List<InventoryItemBase> itemsList) 46 private bool TryGetUsersInventory(LLUUID userID, out List<InventoryFolderBase> folderList, out List<InventoryItemBase> itemsList)
47 { 47 {
48 List<InventoryFolderBase> folders = RequestFirstLevelFolders(userID); 48 List<InventoryFolderBase> rootFolders = RequestFirstLevelFolders(userID);
49 List<InventoryItemBase> allItems = new List<InventoryItemBase>(); 49 List<InventoryItemBase> allItems = new List<InventoryItemBase>();
50 List<InventoryFolderBase> allFolders = new List<InventoryFolderBase>();
50 51
51 if (folders != null) 52 if (rootFolders != null)
52 { 53 {
53 foreach (InventoryFolderBase folder in folders) 54 allFolders.InsertRange(0, rootFolders);
55 foreach (InventoryFolderBase subfolder in rootFolders)
54 { 56 {
55 List<InventoryItemBase> items = RequestFolderItems(folder.folderID); 57 List<InventoryFolderBase> subFolders = GetAllFolders(subfolder.folderID);
56 if (items != null) 58 if (subFolders != null)
57 { 59 {
58 allItems.InsertRange(0, items); 60 allFolders.InsertRange(0, subFolders);
59 } 61 }
60 } 62 }
61 } 63 }
62 64
63 folderList = folders; 65 foreach (InventoryFolderBase folder in allFolders)
66 {
67 List<InventoryItemBase> items = RequestFolderItems(folder.folderID);
68 if (items != null)
69 {
70 allItems.InsertRange(0, items);
71 }
72 }
73
74 folderList = allFolders;
64 itemsList = allItems; 75 itemsList = allItems;
65 if (folderList != null) 76 if (folderList != null)
66 { 77 {
@@ -72,6 +83,26 @@ namespace OpenSim.Grid.InventoryServer
72 } 83 }
73 } 84 }
74 85
86 private List<InventoryFolderBase> GetAllFolders(LLUUID folder)
87 {
88 List<InventoryFolderBase> allFolders = new List<InventoryFolderBase>();
89 List<InventoryFolderBase> folders = RequestSubFolders(folder);
90 if (folders != null)
91 {
92 allFolders.InsertRange(0, folders);
93 foreach (InventoryFolderBase subfolder in folders)
94 {
95 List<InventoryFolderBase> subFolders = GetAllFolders(subfolder.folderID);
96 if (subFolders != null)
97 {
98 allFolders.InsertRange(0, subFolders);
99 }
100 }
101 }
102 return allFolders;
103 }
104
105
75 public InventoryCollection GetUserInventory(Guid rawUserID) 106 public InventoryCollection GetUserInventory(Guid rawUserID)
76 { 107 {
77 Console.WriteLine("Request for Inventory for " + rawUserID.ToString()); 108 Console.WriteLine("Request for Inventory for " + rawUserID.ToString());
@@ -104,6 +135,11 @@ namespace OpenSim.Grid.InventoryServer
104 AddFolder(folder); 135 AddFolder(folder);
105 } 136 }
106 137
138 public override void MoveExistingInventoryFolder(InventoryFolderBase folder)
139 {
140 MoveFolder(folder);
141 }
142
107 public override void AddNewInventoryItem(LLUUID userID, InventoryItemBase item) 143 public override void AddNewInventoryItem(LLUUID userID, InventoryItemBase item)
108 { 144 {
109 AddItem(item); 145 AddItem(item);
@@ -111,11 +147,16 @@ namespace OpenSim.Grid.InventoryServer
111 147
112 public bool AddInventoryFolder( InventoryFolderBase folder) 148 public bool AddInventoryFolder( InventoryFolderBase folder)
113 { 149 {
114 Console.WriteLine("creating new folder for " + folder.agentID.ToString());
115 AddNewInventoryFolder(folder.agentID, folder); 150 AddNewInventoryFolder(folder.agentID, folder);
116 return true; 151 return true;
117 } 152 }
118 153
154 public bool MoveInventoryFolder(InventoryFolderBase folder)
155 {
156 MoveExistingInventoryFolder(folder);
157 return true;
158 }
159
119 public bool AddInventoryItem( InventoryItemBase item) 160 public bool AddInventoryItem( InventoryItemBase item)
120 { 161 {
121 Console.WriteLine("creating new item for " + item.avatarID.ToString()); 162 Console.WriteLine("creating new item for " + item.avatarID.ToString());
diff --git a/OpenSim/Grid/InventoryServer/Main.cs b/OpenSim/Grid/InventoryServer/Main.cs
index 58b63f4..df854f9 100644
--- a/OpenSim/Grid/InventoryServer/Main.cs
+++ b/OpenSim/Grid/InventoryServer/Main.cs
@@ -88,6 +88,10 @@ namespace OpenSim.Grid.InventoryServer
88 m_inventoryService.AddInventoryFolder)); 88 m_inventoryService.AddInventoryFolder));
89 89
90 httpServer.AddStreamHandler( 90 httpServer.AddStreamHandler(
91 new RestDeserialisehandler<InventoryFolderBase, bool>("POST", "/MoveFolder/",
92 m_inventoryService.MoveInventoryFolder));
93
94 httpServer.AddStreamHandler(
91 new RestDeserialisehandler<InventoryItemBase, bool>("POST", "/NewItem/", 95 new RestDeserialisehandler<InventoryItemBase, bool>("POST", "/NewItem/",
92 m_inventoryService.AddInventoryItem)); 96 m_inventoryService.AddInventoryItem));
93 httpServer.AddStreamHandler( 97 httpServer.AddStreamHandler(
diff --git a/OpenSim/Region/ClientStack/ClientView.cs b/OpenSim/Region/ClientStack/ClientView.cs
index 0514df5..1746db8 100644
--- a/OpenSim/Region/ClientStack/ClientView.cs
+++ b/OpenSim/Region/ClientStack/ClientView.cs
@@ -502,6 +502,7 @@ namespace OpenSim.Region.ClientStack
502 public event CreateNewInventoryItem OnCreateNewInventoryItem; 502 public event CreateNewInventoryItem OnCreateNewInventoryItem;
503 public event CreateInventoryFolder OnCreateNewInventoryFolder; 503 public event CreateInventoryFolder OnCreateNewInventoryFolder;
504 public event UpdateInventoryFolder OnUpdateInventoryFolder; 504 public event UpdateInventoryFolder OnUpdateInventoryFolder;
505 public event MoveInventoryFolder OnMoveInventoryFolder;
505 public event FetchInventoryDescendents OnFetchInventoryDescendents; 506 public event FetchInventoryDescendents OnFetchInventoryDescendents;
506 public event PurgeInventoryDescendents OnPurgeInventoryDescendents; 507 public event PurgeInventoryDescendents OnPurgeInventoryDescendents;
507 public event FetchInventory OnFetchInventory; 508 public event FetchInventory OnFetchInventory;
@@ -892,7 +893,7 @@ namespace OpenSim.Region.ClientStack
892 /// <param name="subFoldersCount">The number of subfolders contained in the given folder. This is necessary since 893 /// <param name="subFoldersCount">The number of subfolders contained in the given folder. This is necessary since
893 /// the client is expecting inventory packets which incorporate this number into the descendents field, even though 894 /// the client is expecting inventory packets which incorporate this number into the descendents field, even though
894 /// we send back no details of the folders themselves (only the items).</param> 895 /// we send back no details of the folders themselves (only the items).</param>
895 public void SendInventoryFolderDetails(LLUUID ownerID, LLUUID folderID, List<InventoryItemBase> items, int subFoldersCount) 896 public void SendInventoryFolderDetails(LLUUID ownerID, LLUUID folderID, List<InventoryItemBase> items, List<InventoryFolderBase> folders, int subFoldersCount)
896 { 897 {
897 Encoding enc = Encoding.ASCII; 898 Encoding enc = Encoding.ASCII;
898 uint FULL_MASK_PERMISSIONS = 2147483647; 899 uint FULL_MASK_PERMISSIONS = 2147483647;
@@ -931,14 +932,14 @@ namespace OpenSim.Region.ClientStack
931 descend.ItemData[i].FolderID = item.parentFolderID; 932 descend.ItemData[i].FolderID = item.parentFolderID;
932 descend.ItemData[i].GroupID = new LLUUID("00000000-0000-0000-0000-000000000000"); 933 descend.ItemData[i].GroupID = new LLUUID("00000000-0000-0000-0000-000000000000");
933 descend.ItemData[i].GroupMask = 0; 934 descend.ItemData[i].GroupMask = 0;
934 descend.ItemData[i].InvType = (sbyte) item.invType; 935 descend.ItemData[i].InvType = (sbyte)item.invType;
935 descend.ItemData[i].Name = Helpers.StringToField(item.inventoryName); 936 descend.ItemData[i].Name = Helpers.StringToField(item.inventoryName);
936 descend.ItemData[i].NextOwnerMask = item.inventoryNextPermissions; 937 descend.ItemData[i].NextOwnerMask = item.inventoryNextPermissions;
937 descend.ItemData[i].OwnerID = item.avatarID; 938 descend.ItemData[i].OwnerID = item.avatarID;
938 descend.ItemData[i].OwnerMask = item.inventoryCurrentPermissions; 939 descend.ItemData[i].OwnerMask = item.inventoryCurrentPermissions;
939 descend.ItemData[i].SalePrice = 0; 940 descend.ItemData[i].SalePrice = 0;
940 descend.ItemData[i].SaleType = 0; 941 descend.ItemData[i].SaleType = 0;
941 descend.ItemData[i].Type = (sbyte) item.assetType; 942 descend.ItemData[i].Type = (sbyte)item.assetType;
942 descend.ItemData[i].CRC = 943 descend.ItemData[i].CRC =
943 944
944 Helpers.InventoryCRC(descend.ItemData[i].CreationDate, descend.ItemData[i].SaleType, 945 Helpers.InventoryCRC(descend.ItemData[i].CreationDate, descend.ItemData[i].SaleType,
@@ -976,6 +977,47 @@ namespace OpenSim.Region.ClientStack
976 { 977 {
977 OutPacket(descend, ThrottleOutPacketType.Asset); 978 OutPacket(descend, ThrottleOutPacketType.Asset);
978 } 979 }
980
981 //send subfolders
982 descend = CreateInventoryDescendentsPacket(ownerID, folderID);
983 descend.FolderData = new InventoryDescendentsPacket.FolderDataBlock[folders.Count];
984 i = 0;
985 count = 0;
986 foreach (InventoryFolderBase folder in folders)
987 {
988 descend.FolderData[i] = new InventoryDescendentsPacket.FolderDataBlock();
989 descend.FolderData[i].FolderID = folder.folderID;
990 descend.FolderData[i].Name = Helpers.StringToField(folder.name);
991 descend.FolderData[i].ParentID = folder.parentID;
992 descend.FolderData[i].Type = (sbyte)folder.type;
993 i++;
994 count++;
995 if (i == 40)
996 {
997 OutPacket(descend, ThrottleOutPacketType.Asset);
998
999 if ((folders.Count - count) > 0)
1000 {
1001 descend = CreateInventoryDescendentsPacket(ownerID, folderID);
1002 if ((folders.Count - count) < 40)
1003 {
1004 descend.FolderData = new InventoryDescendentsPacket.FolderDataBlock[items.Count - count];
1005 descend.AgentData.Descendents = folders.Count - count;
1006 }
1007 else
1008 {
1009 descend.FolderData = new InventoryDescendentsPacket.FolderDataBlock[40];
1010 descend.AgentData.Descendents = 40;
1011 }
1012 i = 0;
1013 }
1014 }
1015 }
1016
1017 if (i < 40)
1018 {
1019 OutPacket(descend, ThrottleOutPacketType.Asset);
1020 }
979 } 1021 }
980 1022
981 private InventoryDescendentsPacket CreateInventoryDescendentsPacket(LLUUID ownerID, LLUUID folderID) 1023 private InventoryDescendentsPacket CreateInventoryDescendentsPacket(LLUUID ownerID, LLUUID folderID)
@@ -2821,6 +2863,17 @@ namespace OpenSim.Region.ClientStack
2821 } 2863 }
2822 } 2864 }
2823 break; 2865 break;
2866 case PacketType.MoveInventoryFolder:
2867 if (OnMoveInventoryFolder != null)
2868 {
2869 MoveInventoryFolderPacket invFolder = (MoveInventoryFolderPacket)Pack;
2870 for (int i = 0; i < invFolder.InventoryData.Length; i++)
2871 {
2872 OnMoveInventoryFolder(this, invFolder.InventoryData[i].FolderID,
2873 invFolder.InventoryData[i].ParentID);
2874 }
2875 }
2876 break;
2824 case PacketType.CreateInventoryItem: 2877 case PacketType.CreateInventoryItem:
2825 CreateInventoryItemPacket createItem = (CreateInventoryItemPacket) Pack; 2878 CreateInventoryItemPacket createItem = (CreateInventoryItemPacket) Pack;
2826 if (OnCreateNewInventoryItem != null) 2879 if (OnCreateNewInventoryItem != null)
@@ -3267,6 +3320,10 @@ namespace OpenSim.Region.ClientStack
3267 // TODO: handle this packet 3320 // TODO: handle this packet
3268 MainLog.Instance.Warn("CLIENT", "unhandled RequestRegionInfo packet"); 3321 MainLog.Instance.Warn("CLIENT", "unhandled RequestRegionInfo packet");
3269 break; 3322 break;
3323 case PacketType.InventoryDescendents:
3324 // TODO: handle this packet
3325 MainLog.Instance.Warn("CLIENT", "unhandled InventoryDescent packet");
3326 break;
3270 default: 3327 default:
3271 MainLog.Instance.Warn("CLIENT", "unhandled packet " + Pack.ToString()); 3328 MainLog.Instance.Warn("CLIENT", "unhandled packet " + Pack.ToString());
3272 break; 3329 break;
diff --git a/OpenSim/Region/Communications/Local/LocalInventoryService.cs b/OpenSim/Region/Communications/Local/LocalInventoryService.cs
index e82d267..08bd850 100644
--- a/OpenSim/Region/Communications/Local/LocalInventoryService.cs
+++ b/OpenSim/Region/Communications/Local/LocalInventoryService.cs
@@ -68,6 +68,11 @@ namespace OpenSim.Region.Communications.Local
68 AddFolder(folder); 68 AddFolder(folder);
69 } 69 }
70 70
71 public override void MoveExistingInventoryFolder(InventoryFolderBase folder)
72 {
73 MoveFolder(folder);
74 }
75
71 public override void AddNewInventoryItem(LLUUID userID, InventoryItemBase item) 76 public override void AddNewInventoryItem(LLUUID userID, InventoryItemBase item)
72 { 77 {
73 AddItem(item); 78 AddItem(item);
diff --git a/OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs b/OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs
index d45e150..4f5d9ab 100644
--- a/OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs
+++ b/OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs
@@ -126,6 +126,16 @@ namespace OpenSim.Region.Communications.OGS1
126 } 126 }
127 } 127 }
128 128
129 public void MoveInventoryFolder(LLUUID userID, InventoryFolderBase folder)
130 {
131 try
132 {
133 RestObjectPoster.BeginPostObject<InventoryFolderBase>(_inventoryServerUrl + "/MoveFolder/", folder);
134 }
135 catch (Exception)
136 {
137 }
138 }
129 public void AddNewInventoryItem(LLUUID userID, InventoryItemBase item) 139 public void AddNewInventoryItem(LLUUID userID, InventoryItemBase item)
130 { 140 {
131 try 141 try
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
index 59548a2..aad977a 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -1102,6 +1102,7 @@ namespace OpenSim.Region.Environment.Scenes
1102 client.OnCreateNewInventoryItem += CreateNewInventoryItem; 1102 client.OnCreateNewInventoryItem += CreateNewInventoryItem;
1103 client.OnCreateNewInventoryFolder += CommsManager.UserProfileCacheService.HandleCreateInventoryFolder; 1103 client.OnCreateNewInventoryFolder += CommsManager.UserProfileCacheService.HandleCreateInventoryFolder;
1104 client.OnUpdateInventoryFolder += CommsManager.UserProfileCacheService.HandleUpdateInventoryFolder; 1104 client.OnUpdateInventoryFolder += CommsManager.UserProfileCacheService.HandleUpdateInventoryFolder;
1105 client.OnMoveInventoryFolder += CommsManager.UserProfileCacheService.HandleMoveInventoryFolder;
1105 client.OnFetchInventoryDescendents += CommsManager.UserProfileCacheService.HandleFetchInventoryDescendents; 1106 client.OnFetchInventoryDescendents += CommsManager.UserProfileCacheService.HandleFetchInventoryDescendents;
1106 client.OnPurgeInventoryDescendents += CommsManager.UserProfileCacheService.HandlePurgeInventoryDescendents; 1107 client.OnPurgeInventoryDescendents += CommsManager.UserProfileCacheService.HandlePurgeInventoryDescendents;
1107 client.OnRequestTaskInventory += RequestTaskInventory; 1108 client.OnRequestTaskInventory += RequestTaskInventory;
diff --git a/OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs b/OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs
index 9864074..9b2cdda 100644
--- a/OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs
+++ b/OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs
@@ -108,6 +108,7 @@ namespace SimpleApp
108 public event CreateNewInventoryItem OnCreateNewInventoryItem; 108 public event CreateNewInventoryItem OnCreateNewInventoryItem;
109 public event CreateInventoryFolder OnCreateNewInventoryFolder; 109 public event CreateInventoryFolder OnCreateNewInventoryFolder;
110 public event UpdateInventoryFolder OnUpdateInventoryFolder; 110 public event UpdateInventoryFolder OnUpdateInventoryFolder;
111 public event MoveInventoryFolder OnMoveInventoryFolder;
111 public event FetchInventoryDescendents OnFetchInventoryDescendents; 112 public event FetchInventoryDescendents OnFetchInventoryDescendents;
112 public event PurgeInventoryDescendents OnPurgeInventoryDescendents; 113 public event PurgeInventoryDescendents OnPurgeInventoryDescendents;
113 public event FetchInventory OnFetchInventory; 114 public event FetchInventory OnFetchInventory;
@@ -317,7 +318,7 @@ namespace SimpleApp
317 { 318 {
318 } 319 }
319 320
320 public virtual void SendInventoryFolderDetails(LLUUID ownerID, LLUUID folderID, List<InventoryItemBase> items, int subFoldersCount) 321 public virtual void SendInventoryFolderDetails(LLUUID ownerID, LLUUID folderID, List<InventoryItemBase> items, List<InventoryFolderBase> folders, int subFoldersCount)
321 { 322 {
322 } 323 }
323 324