aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Services/Connectors/Inventory
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Services/Connectors/Inventory')
-rw-r--r--OpenSim/Services/Connectors/Inventory/HGInventoryServiceConnector.cs43
-rw-r--r--OpenSim/Services/Connectors/Inventory/ISessionAuthInventoryService.cs16
-rw-r--r--OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs175
-rw-r--r--OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs13
4 files changed, 209 insertions, 38 deletions
diff --git a/OpenSim/Services/Connectors/Inventory/HGInventoryServiceConnector.cs b/OpenSim/Services/Connectors/Inventory/HGInventoryServiceConnector.cs
index 94b4ad9..1004fb9 100644
--- a/OpenSim/Services/Connectors/Inventory/HGInventoryServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Inventory/HGInventoryServiceConnector.cs
@@ -201,6 +201,19 @@ namespace OpenSim.Services.Connectors.Inventory
201 return false; 201 return false;
202 } 202 }
203 203
204 public bool DeleteFolders(string id, List<UUID> folders, UUID sessionID)
205 {
206 string url = string.Empty;
207 string userID = string.Empty;
208
209 if (StringToUrlAndUserID(id, out url, out userID))
210 {
211 ISessionAuthInventoryService connector = GetConnector(url);
212 return connector.DeleteFolders(userID, folders, sessionID);
213 }
214 return false;
215 }
216
204 public bool PurgeFolder(string id, InventoryFolderBase folder, UUID sessionID) 217 public bool PurgeFolder(string id, InventoryFolderBase folder, UUID sessionID)
205 { 218 {
206 string url = string.Empty; 219 string url = string.Empty;
@@ -214,6 +227,19 @@ namespace OpenSim.Services.Connectors.Inventory
214 return false; 227 return false;
215 } 228 }
216 229
230 public List<InventoryItemBase> GetFolderItems(string id, UUID folderID, UUID sessionID)
231 {
232 string url = string.Empty;
233 string userID = string.Empty;
234
235 if (StringToUrlAndUserID(id, out url, out userID))
236 {
237 ISessionAuthInventoryService connector = GetConnector(url);
238 return connector.GetFolderItems(userID, folderID, sessionID);
239 }
240 return new List<InventoryItemBase>();
241 }
242
217 public bool AddItem(string id, InventoryItemBase item, UUID sessionID) 243 public bool AddItem(string id, InventoryItemBase item, UUID sessionID)
218 { 244 {
219 string url = string.Empty; 245 string url = string.Empty;
@@ -240,7 +266,7 @@ namespace OpenSim.Services.Connectors.Inventory
240 return false; 266 return false;
241 } 267 }
242 268
243 public bool DeleteItem(string id, InventoryItemBase item, UUID sessionID) 269 public bool MoveItems(string id, List<InventoryItemBase> items, UUID sessionID)
244 { 270 {
245 string url = string.Empty; 271 string url = string.Empty;
246 string userID = string.Empty; 272 string userID = string.Empty;
@@ -248,7 +274,20 @@ namespace OpenSim.Services.Connectors.Inventory
248 if (StringToUrlAndUserID(id, out url, out userID)) 274 if (StringToUrlAndUserID(id, out url, out userID))
249 { 275 {
250 ISessionAuthInventoryService connector = GetConnector(url); 276 ISessionAuthInventoryService connector = GetConnector(url);
251 return connector.UpdateItem(userID, item, sessionID); 277 return connector.MoveItems(userID, items, sessionID);
278 }
279 return false;
280 }
281
282 public bool DeleteItems(string id, List<UUID> itemIDs, UUID sessionID)
283 {
284 string url = string.Empty;
285 string userID = string.Empty;
286
287 if (StringToUrlAndUserID(id, out url, out userID))
288 {
289 ISessionAuthInventoryService connector = GetConnector(url);
290 return connector.DeleteItems(userID, itemIDs, sessionID);
252 } 291 }
253 return false; 292 return false;
254 } 293 }
diff --git a/OpenSim/Services/Connectors/Inventory/ISessionAuthInventoryService.cs b/OpenSim/Services/Connectors/Inventory/ISessionAuthInventoryService.cs
index f50bcf5..da8c7e2 100644
--- a/OpenSim/Services/Connectors/Inventory/ISessionAuthInventoryService.cs
+++ b/OpenSim/Services/Connectors/Inventory/ISessionAuthInventoryService.cs
@@ -89,6 +89,11 @@ namespace OpenSim.Services.Connectors
89 bool MoveFolder(string userID, InventoryFolderBase folder, UUID session_id); 89 bool MoveFolder(string userID, InventoryFolderBase folder, UUID session_id);
90 90
91 /// <summary> 91 /// <summary>
92 /// Delete a list of inventory folders (from trash)
93 /// </summary>
94 bool DeleteFolders(string userID, List<UUID> folders, UUID session_id);
95
96 /// <summary>
92 /// Purge an inventory folder of all its items and subfolders. 97 /// Purge an inventory folder of all its items and subfolders.
93 /// </summary> 98 /// </summary>
94 /// <param name="folder"></param> 99 /// <param name="folder"></param>
@@ -96,6 +101,13 @@ namespace OpenSim.Services.Connectors
96 bool PurgeFolder(string userID, InventoryFolderBase folder, UUID session_id); 101 bool PurgeFolder(string userID, InventoryFolderBase folder, UUID session_id);
97 102
98 /// <summary> 103 /// <summary>
104 /// Get items from a folder.
105 /// </summary>
106 /// <param name="folder"></param>
107 /// <returns>true if the folder was successfully purged</returns>
108 List<InventoryItemBase> GetFolderItems(string userID, UUID folderID, UUID session_id);
109
110 /// <summary>
99 /// Add a new item to the user's inventory 111 /// Add a new item to the user's inventory
100 /// </summary> 112 /// </summary>
101 /// <param name="item"></param> 113 /// <param name="item"></param>
@@ -109,12 +121,14 @@ namespace OpenSim.Services.Connectors
109 /// <returns>true if the item was successfully updated</returns> 121 /// <returns>true if the item was successfully updated</returns>
110 bool UpdateItem(string userID, InventoryItemBase item, UUID session_id); 122 bool UpdateItem(string userID, InventoryItemBase item, UUID session_id);
111 123
124 bool MoveItems(string userID, List<InventoryItemBase> items, UUID session_id);
125
112 /// <summary> 126 /// <summary>
113 /// Delete an item from the user's inventory 127 /// Delete an item from the user's inventory
114 /// </summary> 128 /// </summary>
115 /// <param name="item"></param> 129 /// <param name="item"></param>
116 /// <returns>true if the item was successfully deleted</returns> 130 /// <returns>true if the item was successfully deleted</returns>
117 bool DeleteItem(string userID, InventoryItemBase item, UUID session_id); 131 bool DeleteItems(string userID, List<UUID> itemIDs, UUID session_id);
118 132
119 InventoryItemBase QueryItem(string userID, InventoryItemBase item, UUID session_id); 133 InventoryItemBase QueryItem(string userID, InventoryItemBase item, UUID session_id);
120 134
diff --git a/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs b/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs
index 5d94eac..a2261ba 100644
--- a/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs
@@ -178,30 +178,36 @@ namespace OpenSim.Services.Connectors
178 catch (Exception e) 178 catch (Exception e)
179 { 179 {
180 // Maybe we're talking to an old inventory server. Try this other thing. 180 // Maybe we're talking to an old inventory server. Try this other thing.
181 m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetSystemFolders operation failed, {0} {1}. Trying RootFolders.", 181 m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetSystemFolders operation failed, {0} {1} (old sever?). Trying GetInventory.",
182 e.Source, e.Message); 182 e.Source, e.Message);
183 183
184 try 184 try
185 { 185 {
186 folders = SynchronousRestSessionObjectPoster<Guid, List<InventoryFolderBase>>.BeginPostObject( 186 InventoryCollection inventory = SynchronousRestSessionObjectPoster<Guid, InventoryCollection>.BeginPostObject(
187 "POST", m_ServerURI + "/RootFolders/", new Guid(userID), sessionID.ToString(), userID.ToString()); 187 "POST", m_ServerURI + "/GetInventory/", new Guid(userID), sessionID.ToString(), userID.ToString());
188 folders = inventory.Folders;
188 } 189 }
189 catch (Exception ex) 190 catch (Exception ex)
190 { 191 {
191 m_log.ErrorFormat("[INVENTORY CONNECTOR]: RootFolders operation also failed, {0} {1}. Give up.", 192 m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetInventory operation also failed, {0} {1}. Giving up.",
192 e.Source, ex.Message); 193 e.Source, ex.Message);
193 } 194 }
194 195
195 if ((folders != null) && (folders.Count > 0)) 196 if ((folders != null) && (folders.Count > 0))
196 { 197 {
197 dFolders[AssetType.Folder] = folders[0]; // Root folder is the first one 198 m_log.DebugFormat("[INVENTORY CONNECTOR]: Received entire inventory ({0} folders) for user {1}",
198 folders.RemoveAt(0); 199 folders.Count, userID);
199 foreach (InventoryFolderBase f in folders) 200 foreach (InventoryFolderBase f in folders)
200 { 201 {
201 if ((f.Type != (short)AssetType.Folder) && (f.Type != (short)AssetType.Unknown)) 202 if ((f.Type != (short)AssetType.Folder) && (f.Type != (short)AssetType.Unknown))
202 dFolders[(AssetType)f.Type] = f; 203 dFolders[(AssetType)f.Type] = f;
203 } 204 }
204 205
206 UUID rootFolderID = dFolders[AssetType.Animation].ParentID;
207 InventoryFolderBase rootFolder = new InventoryFolderBase(rootFolderID, new UUID(userID));
208 rootFolder = QueryFolder(userID, rootFolder, sessionID);
209 dFolders[AssetType.Folder] = rootFolder;
210 m_log.DebugFormat("[INVENTORY CONNECTOR]: {0} system folders for user {1}", dFolders.Count, userID);
205 return dFolders; 211 return dFolders;
206 } 212 }
207 } 213 }
@@ -223,51 +229,56 @@ namespace OpenSim.Services.Connectors
223 return SynchronousRestSessionObjectPoster<Guid, InventoryCollection>.BeginPostObject( 229 return SynchronousRestSessionObjectPoster<Guid, InventoryCollection>.BeginPostObject(
224 "POST", m_ServerURI + "/GetFolderContent/", folderID.Guid, sessionID.ToString(), userID.ToString()); 230 "POST", m_ServerURI + "/GetFolderContent/", folderID.Guid, sessionID.ToString(), userID.ToString());
225 } 231 }
232 catch (TimeoutException e)
233 {
234 m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetFolderContent operation to {0} timed out {0} {1}.", m_ServerURI,
235 e.Source, e.Message);
236 }
226 catch (Exception e) 237 catch (Exception e)
227 { 238 {
228 // Maybe we're talking to an old inventory server. Try this other thing. 239 // Maybe we're talking to an old inventory server. Try this other thing.
229 m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetFolderForType operation failed, {0} {1}. Trying RootFolders and GetItems.", 240 m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetFolderContent operation failed, {0} {1} (old server?). Trying GetInventory.",
230 e.Source, e.Message); 241 e.Source, e.Message);
231 242
243 InventoryCollection inventory;
232 List<InventoryFolderBase> folders = null; 244 List<InventoryFolderBase> folders = null;
233 try 245 try
234 { 246 {
235 folders = SynchronousRestSessionObjectPoster<Guid, List<InventoryFolderBase>>.BeginPostObject( 247 inventory = SynchronousRestSessionObjectPoster<Guid, InventoryCollection>.BeginPostObject(
236 "POST", m_ServerURI + "/RootFolders/", new Guid(userID), sessionID.ToString(), userID.ToString()); 248 "POST", m_ServerURI + "/GetInventory/", new Guid(userID), sessionID.ToString(), userID.ToString());
249 if (inventory != null)
250 folders = inventory.Folders;
237 } 251 }
238 catch (Exception ex) 252 catch (Exception ex)
239 { 253 {
240 m_log.ErrorFormat("[INVENTORY CONNECTOR]: RootFolders operation also failed, {0} {1}. Give up.", 254 m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetInventory operation also failed, {0} {1}. Giving up.",
241 e.Source, ex.Message); 255 e.Source, ex.Message);
256 return new InventoryCollection();
242 } 257 }
243 258
244 if ((folders != null) && (folders.Count > 0)) 259 if ((folders != null) && (folders.Count > 0))
245 { 260 {
246 folders = folders.FindAll(delegate (InventoryFolderBase f) { return f.ParentID == folderID ; }); 261 m_log.DebugFormat("[INVENTORY CONNECTOR]: Received entire inventory ({0} folders) for user {1}",
247 262 folders.Count, userID);
248 try
249 {
250 List<InventoryItemBase> items = SynchronousRestSessionObjectPoster<Guid, List<InventoryItemBase>>.BeginPostObject(
251 "POST", m_ServerURI + "/GetItems/", folderID.Guid, sessionID.ToString(), userID.ToString());
252 263
253 if (items != null) 264 folders = folders.FindAll(delegate(InventoryFolderBase f) { return f.ParentID == folderID; });
254 { 265 List<InventoryItemBase> items = inventory.Items;
255 InventoryCollection result = new InventoryCollection(); 266 if (items != null)
256 result.Folders = folders;
257 result.Items = items;
258 result.UserID = new UUID(userID);
259 return result;
260 }
261 }
262 catch (Exception ex)
263 { 267 {
264 m_log.ErrorFormat("[INVENTORY CONNECTOR]: QueryFolder and GetItems operation failed, {0} {1}. Give up.", 268 items = items.FindAll(delegate(InventoryItemBase i) { return i.Folder == folderID; });
265 e.Source, ex.Message);
266 } 269 }
270
271 inventory.Items = items;
272 inventory.Folders = folders;
273 return inventory;
267 } 274 }
268 } 275 }
269 276
270 return null; 277 InventoryCollection nullCollection = new InventoryCollection();
278 nullCollection.Folders = new List<InventoryFolderBase>();
279 nullCollection.Items = new List<InventoryItemBase>();
280 nullCollection.UserID = new UUID(userID);
281 return nullCollection;
271 } 282 }
272 283
273 public bool AddFolder(string userID, InventoryFolderBase folder, UUID sessionID) 284 public bool AddFolder(string userID, InventoryFolderBase folder, UUID sessionID)
@@ -302,6 +313,25 @@ namespace OpenSim.Services.Connectors
302 return false; 313 return false;
303 } 314 }
304 315
316 public bool DeleteFolders(string userID, List<UUID> folderIDs, UUID sessionID)
317 {
318 try
319 {
320 List<Guid> guids = new List<Guid>();
321 foreach (UUID u in folderIDs)
322 guids.Add(u.Guid);
323 return SynchronousRestSessionObjectPoster<List<Guid>, bool>.BeginPostObject(
324 "POST", m_ServerURI + "/DeleteFolders/", guids, sessionID.ToString(), userID);
325 }
326 catch (Exception e)
327 {
328 m_log.ErrorFormat("[INVENTORY CONNECTOR]: Delete inventory folders operation failed, {0} {1}",
329 e.Source, e.Message);
330 }
331
332 return false;
333 }
334
305 public bool MoveFolder(string userID, InventoryFolderBase folder, UUID sessionID) 335 public bool MoveFolder(string userID, InventoryFolderBase folder, UUID sessionID)
306 { 336 {
307 try 337 try
@@ -334,6 +364,23 @@ namespace OpenSim.Services.Connectors
334 return false; 364 return false;
335 } 365 }
336 366
367 public List<InventoryItemBase> GetFolderItems(string userID, UUID folderID, UUID sessionID)
368 {
369 try
370 {
371 InventoryFolderBase folder = new InventoryFolderBase(folderID, new UUID(userID));
372 return SynchronousRestSessionObjectPoster<InventoryFolderBase, List<InventoryItemBase>>.BeginPostObject(
373 "POST", m_ServerURI + "/GetItems/", folder, sessionID.ToString(), userID);
374 }
375 catch (Exception e)
376 {
377 m_log.ErrorFormat("[INVENTORY CONNECTOR]: Get folder items operation failed, {0} {1}",
378 e.Source, e.Message);
379 }
380
381 return null;
382 }
383
337 public bool AddItem(string userID, InventoryItemBase item, UUID sessionID) 384 public bool AddItem(string userID, InventoryItemBase item, UUID sessionID)
338 { 385 {
339 try 386 try
@@ -366,12 +413,72 @@ namespace OpenSim.Services.Connectors
366 return false; 413 return false;
367 } 414 }
368 415
369 public bool DeleteItem(string userID, InventoryItemBase item, UUID sessionID) 416 /**
417 * MoveItems Async group
418 */
419
420 delegate void MoveItemsDelegate(string userID, List<InventoryItemBase> items, UUID sessionID);
421
422 private void MoveItemsAsync(string userID, List<InventoryItemBase> items, UUID sessionID)
370 { 423 {
424 if (items == null)
425 {
426 m_log.WarnFormat("[INVENTORY CONNECTOR]: request to move items got a null list.");
427 return;
428 }
429
371 try 430 try
372 { 431 {
373 return SynchronousRestSessionObjectPoster<InventoryItemBase, bool>.BeginPostObject( 432 //SynchronousRestSessionObjectPoster<List<InventoryItemBase>, bool>.BeginPostObject(
374 "POST", m_ServerURI + "/DeleteItem/", item, sessionID.ToString(), item.Owner.ToString()); 433 // "POST", m_ServerURI + "/MoveItems/", items, sessionID.ToString(), userID.ToString());
434
435 //// Success
436 //return;
437 string uri = m_ServerURI + "/inventory/" + userID;
438 if (SynchronousRestObjectRequester.
439 MakeRequest<List<InventoryItemBase>, bool>("PUT", uri, items))
440 m_log.DebugFormat("[INVENTORY CONNECTOR]: move {0} items poster succeeded {1}", items.Count, uri);
441 else
442 m_log.DebugFormat("[INVENTORY CONNECTOR]: move {0} items poster failed {1}", items.Count, uri); ;
443
444 return;
445
446 }
447 catch (Exception e)
448 {
449 m_log.ErrorFormat("[INVENTORY CONNECTOR]: Move inventory items operation failed, {0} {1} (old server?). Trying slow way.",
450 e.Source, e.Message);
451 }
452
453 foreach (InventoryItemBase item in items)
454 {
455 InventoryItemBase itm = this.QueryItem(userID, item, sessionID);
456 itm.Name = item.Name;
457 itm.Folder = item.Folder;
458 this.UpdateItem(userID, itm, sessionID);
459 }
460 }
461
462 private void MoveItemsCompleted(IAsyncResult iar)
463 {
464 }
465
466 public bool MoveItems(string userID, List<InventoryItemBase> items, UUID sessionID)
467 {
468 MoveItemsDelegate d = MoveItemsAsync;
469 d.BeginInvoke(userID, items, sessionID, MoveItemsCompleted, d);
470 return true;
471 }
472
473 public bool DeleteItems(string userID, List<UUID> items, UUID sessionID)
474 {
475 try
476 {
477 List<Guid> guids = new List<Guid>();
478 foreach (UUID u in items)
479 guids.Add(u.Guid);
480 return SynchronousRestSessionObjectPoster<List<Guid>, bool>.BeginPostObject(
481 "POST", m_ServerURI + "/DeleteItem/", guids, sessionID.ToString(), userID);
375 } 482 }
376 catch (Exception e) 483 catch (Exception e)
377 { 484 {
@@ -398,12 +505,12 @@ namespace OpenSim.Services.Connectors
398 return null; 505 return null;
399 } 506 }
400 507
401 public InventoryFolderBase QueryFolder(string userID, InventoryFolderBase item, UUID sessionID) 508 public InventoryFolderBase QueryFolder(string userID, InventoryFolderBase folder, UUID sessionID)
402 { 509 {
403 try 510 try
404 { 511 {
405 return SynchronousRestSessionObjectPoster<InventoryFolderBase, InventoryFolderBase>.BeginPostObject( 512 return SynchronousRestSessionObjectPoster<InventoryFolderBase, InventoryFolderBase>.BeginPostObject(
406 "POST", m_ServerURI + "/QueryFolder/", item, sessionID.ToString(), item.Owner.ToString()); 513 "POST", m_ServerURI + "/QueryFolder/", folder, sessionID.ToString(), userID);
407 } 514 }
408 catch (Exception e) 515 catch (Exception e)
409 { 516 {
diff --git a/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs b/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs
index 5cbd307..a7aa138 100644
--- a/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs
@@ -136,6 +136,12 @@ namespace OpenSim.Services.Connectors
136 return false; 136 return false;
137 } 137 }
138 138
139 public bool DeleteFolders(UUID ownerID, List<UUID> folderIDs)
140 {
141 return false;
142 }
143
144
139 public bool PurgeFolder(InventoryFolderBase folder) 145 public bool PurgeFolder(InventoryFolderBase folder)
140 { 146 {
141 return false; 147 return false;
@@ -151,7 +157,12 @@ namespace OpenSim.Services.Connectors
151 return false; 157 return false;
152 } 158 }
153 159
154 public bool DeleteItem(InventoryItemBase item) 160 public bool MoveItems(UUID ownerID, List<InventoryItemBase> items)
161 {
162 return false;
163 }
164
165 public bool DeleteItems(UUID owner, List<UUID> itemIDs)
155 { 166 {
156 return false; 167 return false;
157 } 168 }