/// <summary> /// Find an appropriate folder for the given asset type /// </summary> /// <param name="type"></param> /// <returns>null if no appropriate folder exists</returns> public InventoryFolderBase FindFolderForType(int type) { InventoryFolderBase bestFolderForType; lock (_folderTypeCache) { _folderTypeCache.TryGetValue(type, out bestFolderForType); if (bestFolderForType != null) { return(bestFolderForType); } } IInventoryProviderSelector inventorySelect = ProviderRegistry.Instance.Get <IInventoryProviderSelector>(); IInventoryStorage provider = inventorySelect.GetProvider(m_userProfile.ID); try { bestFolderForType = provider.FindFolderForType(m_userProfile.ID, (AssetType)type); } catch { } if (bestFolderForType == null) { //next best folder will be the user root folder, it has to exist try { bestFolderForType = provider.FindFolderForType(m_userProfile.ID, (AssetType)FolderType.Root); } catch { } if (bestFolderForType == null) { throw new InventoryStorageException( String.Format("Can not retrieve a destination folder for types, user {0} has no root folder", m_userProfile.ID)); } } lock (_folderTypeCache) { if (_folderTypeCache.ContainsKey(type)) { _folderTypeCache[type] = bestFolderForType; } else { _folderTypeCache.Add(type, bestFolderForType); } } return(bestFolderForType); }
public InventoryFolderBase FindFolderForType(UUID owner, AssetType type) { return(_storage.FindFolderForType(owner, type)); }