예제 #1
0
        /// <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));
 }