diff options
Diffstat (limited to 'OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs')
-rw-r--r-- | OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs | 117 |
1 files changed, 101 insertions, 16 deletions
diff --git a/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs b/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs index e41b427..5d94eac 100644 --- a/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs +++ b/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs | |||
@@ -163,21 +163,48 @@ namespace OpenSim.Services.Connectors | |||
163 | /// <returns></returns> | 163 | /// <returns></returns> |
164 | public Dictionary<AssetType, InventoryFolderBase> GetSystemFolders(string userID, UUID sessionID) | 164 | public Dictionary<AssetType, InventoryFolderBase> GetSystemFolders(string userID, UUID sessionID) |
165 | { | 165 | { |
166 | // !!! Not just yet. | 166 | List<InventoryFolderBase> folders = null; |
167 | //try | 167 | Dictionary<AssetType, InventoryFolderBase> dFolders = new Dictionary<AssetType, InventoryFolderBase>(); |
168 | //{ | 168 | try |
169 | // List<InventoryFolderBase> folders = SynchronousRestSessionObjectPoster<Guid, List<InventoryFolderBase>>.BeginPostObject( | 169 | { |
170 | // "POST", m_ServerURI + "/SystemFolders/", new Guid(userID), sessionID.ToString(), userID.ToString()); | 170 | folders = SynchronousRestSessionObjectPoster<Guid, List<InventoryFolderBase>>.BeginPostObject( |
171 | // Dictionary<AssetType, InventoryFolderBase> dFolders = new Dictionary<AssetType, InventoryFolderBase>(); | 171 | "POST", m_ServerURI + "/SystemFolders/", new Guid(userID), sessionID.ToString(), userID.ToString()); |
172 | // foreach (InventoryFolderBase f in folders) | 172 | |
173 | // dFolders[(AssetType)f.Type] = f; | 173 | foreach (InventoryFolderBase f in folders) |
174 | // return dFolders; | 174 | dFolders[(AssetType)f.Type] = f; |
175 | //} | 175 | |
176 | //catch (Exception e) | 176 | return dFolders; |
177 | //{ | 177 | } |
178 | // m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetSystemFolders operation failed, {0} {1}", | 178 | catch (Exception e) |
179 | // e.Source, e.Message); | 179 | { |
180 | //} | 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.", | ||
182 | e.Source, e.Message); | ||
183 | |||
184 | try | ||
185 | { | ||
186 | folders = SynchronousRestSessionObjectPoster<Guid, List<InventoryFolderBase>>.BeginPostObject( | ||
187 | "POST", m_ServerURI + "/RootFolders/", new Guid(userID), sessionID.ToString(), userID.ToString()); | ||
188 | } | ||
189 | catch (Exception ex) | ||
190 | { | ||
191 | m_log.ErrorFormat("[INVENTORY CONNECTOR]: RootFolders operation also failed, {0} {1}. Give up.", | ||
192 | e.Source, ex.Message); | ||
193 | } | ||
194 | |||
195 | if ((folders != null) && (folders.Count > 0)) | ||
196 | { | ||
197 | dFolders[AssetType.Folder] = folders[0]; // Root folder is the first one | ||
198 | folders.RemoveAt(0); | ||
199 | foreach (InventoryFolderBase f in folders) | ||
200 | { | ||
201 | if ((f.Type != (short)AssetType.Folder) && (f.Type != (short)AssetType.Unknown)) | ||
202 | dFolders[(AssetType)f.Type] = f; | ||
203 | } | ||
204 | |||
205 | return dFolders; | ||
206 | } | ||
207 | } | ||
181 | 208 | ||
182 | return new Dictionary<AssetType, InventoryFolderBase>(); | 209 | return new Dictionary<AssetType, InventoryFolderBase>(); |
183 | } | 210 | } |
@@ -192,13 +219,52 @@ namespace OpenSim.Services.Connectors | |||
192 | { | 219 | { |
193 | try | 220 | try |
194 | { | 221 | { |
222 | // normal case | ||
195 | return SynchronousRestSessionObjectPoster<Guid, InventoryCollection>.BeginPostObject( | 223 | return SynchronousRestSessionObjectPoster<Guid, InventoryCollection>.BeginPostObject( |
196 | "POST", m_ServerURI + "/GetFolderContent/", folderID.Guid, sessionID.ToString(), userID.ToString()); | 224 | "POST", m_ServerURI + "/GetFolderContent/", folderID.Guid, sessionID.ToString(), userID.ToString()); |
197 | } | 225 | } |
198 | catch (Exception e) | 226 | catch (Exception e) |
199 | { | 227 | { |
200 | m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetFolderForType operation failed, {0} {1}", | 228 | // 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.", | ||
201 | e.Source, e.Message); | 230 | e.Source, e.Message); |
231 | |||
232 | List<InventoryFolderBase> folders = null; | ||
233 | try | ||
234 | { | ||
235 | folders = SynchronousRestSessionObjectPoster<Guid, List<InventoryFolderBase>>.BeginPostObject( | ||
236 | "POST", m_ServerURI + "/RootFolders/", new Guid(userID), sessionID.ToString(), userID.ToString()); | ||
237 | } | ||
238 | catch (Exception ex) | ||
239 | { | ||
240 | m_log.ErrorFormat("[INVENTORY CONNECTOR]: RootFolders operation also failed, {0} {1}. Give up.", | ||
241 | e.Source, ex.Message); | ||
242 | } | ||
243 | |||
244 | if ((folders != null) && (folders.Count > 0)) | ||
245 | { | ||
246 | folders = folders.FindAll(delegate (InventoryFolderBase f) { return f.ParentID == folderID ; }); | ||
247 | |||
248 | try | ||
249 | { | ||
250 | List<InventoryItemBase> items = SynchronousRestSessionObjectPoster<Guid, List<InventoryItemBase>>.BeginPostObject( | ||
251 | "POST", m_ServerURI + "/GetItems/", folderID.Guid, sessionID.ToString(), userID.ToString()); | ||
252 | |||
253 | if (items != null) | ||
254 | { | ||
255 | InventoryCollection result = new InventoryCollection(); | ||
256 | result.Folders = folders; | ||
257 | result.Items = items; | ||
258 | result.UserID = new UUID(userID); | ||
259 | return result; | ||
260 | } | ||
261 | } | ||
262 | catch (Exception ex) | ||
263 | { | ||
264 | m_log.ErrorFormat("[INVENTORY CONNECTOR]: QueryFolder and GetItems operation failed, {0} {1}. Give up.", | ||
265 | e.Source, ex.Message); | ||
266 | } | ||
267 | } | ||
202 | } | 268 | } |
203 | 269 | ||
204 | return null; | 270 | return null; |
@@ -348,6 +414,25 @@ namespace OpenSim.Services.Connectors | |||
348 | return null; | 414 | return null; |
349 | } | 415 | } |
350 | 416 | ||
417 | public int GetAssetPermissions(string userID, UUID assetID, UUID sessionID) | ||
418 | { | ||
419 | try | ||
420 | { | ||
421 | InventoryItemBase item = new InventoryItemBase(); | ||
422 | item.Owner = new UUID(userID); | ||
423 | item.AssetID = assetID; | ||
424 | return SynchronousRestSessionObjectPoster<InventoryItemBase, int>.BeginPostObject( | ||
425 | "POST", m_ServerURI + "/AssetPermissions/", item, sessionID.ToString(), userID); | ||
426 | } | ||
427 | catch (Exception e) | ||
428 | { | ||
429 | m_log.ErrorFormat("[INVENTORY CONNECTOR]: AssetPermissions operation failed, {0} {1}", | ||
430 | e.Source, e.Message); | ||
431 | } | ||
432 | |||
433 | return 0; | ||
434 | } | ||
435 | |||
351 | #endregion | 436 | #endregion |
352 | 437 | ||
353 | /// <summary> | 438 | /// <summary> |