Remove old InventoryService, which has for a long time been replaced by XInventoryService.
parent
314de0fc49
commit
41b76c4b9e
|
@ -1,700 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) Contributors, http://opensimulator.org/
|
||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the OpenSimulator Project nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using log4net;
|
||||
using Nini.Config;
|
||||
using OpenMetaverse;
|
||||
using OpenSim.Data;
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Services.Interfaces;
|
||||
|
||||
namespace OpenSim.Services.InventoryService
|
||||
{
|
||||
/// <summary>
|
||||
/// The Inventory service reference implementation
|
||||
/// </summary>
|
||||
public class InventoryService : InventoryServiceBase, IInventoryService
|
||||
{
|
||||
private static readonly ILog m_log
|
||||
= LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
public InventoryService(IConfigSource config) : base(config)
|
||||
{
|
||||
m_log.Debug("[INVENTORY SERVICE]: Initialized.");
|
||||
}
|
||||
|
||||
#region IInventoryServices methods
|
||||
|
||||
public string Host
|
||||
{
|
||||
get { return "default"; }
|
||||
}
|
||||
|
||||
public List<InventoryFolderBase> GetInventorySkeleton(UUID userId)
|
||||
{
|
||||
m_log.DebugFormat("[INVENTORY SERVICE]: Getting inventory skeleton for {0}", userId);
|
||||
|
||||
InventoryFolderBase rootFolder = GetRootFolder(userId);
|
||||
|
||||
// Agent has no inventory structure yet.
|
||||
if (null == rootFolder)
|
||||
{
|
||||
m_log.DebugFormat("[INVENTORY SERVICE]: No root folder");
|
||||
return null;
|
||||
}
|
||||
|
||||
List<InventoryFolderBase> userFolders = new List<InventoryFolderBase>();
|
||||
|
||||
userFolders.Add(rootFolder);
|
||||
|
||||
IList<InventoryFolderBase> folders = m_Database.getFolderHierarchy(rootFolder.ID);
|
||||
userFolders.AddRange(folders);
|
||||
|
||||
// m_log.DebugFormat("[INVENTORY SERVICE]: Got folder {0} {1}", folder.name, folder.folderID);
|
||||
|
||||
return userFolders;
|
||||
}
|
||||
|
||||
public virtual bool HasInventoryForUser(UUID userID)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// See IInventoryServices
|
||||
public virtual InventoryFolderBase GetRootFolder(UUID userID)
|
||||
{
|
||||
//m_log.DebugFormat("[INVENTORY SERVICE]: Getting root folder for {0}", userID);
|
||||
|
||||
// Retrieve the first root folder we get from the DB.
|
||||
InventoryFolderBase rootFolder = m_Database.getUserRootFolder(userID);
|
||||
if (rootFolder != null)
|
||||
return rootFolder;
|
||||
|
||||
// Return nothing if the plugin was unable to supply a root folder
|
||||
return null;
|
||||
}
|
||||
|
||||
// See IInventoryServices
|
||||
public bool CreateUserInventory(UUID user)
|
||||
{
|
||||
InventoryFolderBase existingRootFolder;
|
||||
try
|
||||
{
|
||||
existingRootFolder = GetRootFolder(user);
|
||||
}
|
||||
catch /*(Exception e)*/
|
||||
{
|
||||
// Munch the exception, it has already been reported
|
||||
//
|
||||
return false;
|
||||
}
|
||||
|
||||
if (null != existingRootFolder)
|
||||
{
|
||||
m_log.WarnFormat(
|
||||
"[INVENTORY SERVICE]: Did not create a new inventory for user {0} since they already have "
|
||||
+ "a root inventory folder with id {1}",
|
||||
user, existingRootFolder.ID);
|
||||
}
|
||||
else
|
||||
{
|
||||
UsersInventory inven = new UsersInventory();
|
||||
inven.CreateNewInventorySet(user);
|
||||
AddNewInventorySet(inven);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// See IInventoryServices
|
||||
|
||||
/// <summary>
|
||||
/// Return a user's entire inventory synchronously
|
||||
/// </summary>
|
||||
/// <param name="rawUserID"></param>
|
||||
/// <returns>The user's inventory. If an inventory cannot be found then an empty collection is returned.</returns>
|
||||
public InventoryCollection GetUserInventory(UUID userID)
|
||||
{
|
||||
m_log.InfoFormat("[INVENTORY SERVICE]: Processing request for inventory of {0}", userID);
|
||||
|
||||
// Uncomment me to simulate a slow responding inventory server
|
||||
//Thread.Sleep(16000);
|
||||
|
||||
InventoryCollection invCollection = new InventoryCollection();
|
||||
|
||||
List<InventoryFolderBase> allFolders = GetInventorySkeleton(userID);
|
||||
|
||||
if (null == allFolders)
|
||||
{
|
||||
m_log.WarnFormat("[INVENTORY SERVICE]: No inventory found for user {0}", userID);
|
||||
|
||||
return invCollection;
|
||||
}
|
||||
|
||||
List<InventoryItemBase> allItems = new List<InventoryItemBase>();
|
||||
|
||||
foreach (InventoryFolderBase folder in allFolders)
|
||||
{
|
||||
List<InventoryItemBase> items = GetFolderItems(userID, folder.ID);
|
||||
|
||||
if (items != null)
|
||||
{
|
||||
allItems.InsertRange(0, items);
|
||||
}
|
||||
}
|
||||
|
||||
invCollection.UserID = userID;
|
||||
invCollection.Folders = allFolders;
|
||||
invCollection.Items = allItems;
|
||||
|
||||
// foreach (InventoryFolderBase folder in invCollection.Folders)
|
||||
// {
|
||||
// m_log.DebugFormat("[GRID INVENTORY SERVICE]: Sending back folder {0} {1}", folder.Name, folder.ID);
|
||||
// }
|
||||
//
|
||||
// foreach (InventoryItemBase item in invCollection.Items)
|
||||
// {
|
||||
// m_log.DebugFormat("[GRID INVENTORY SERVICE]: Sending back item {0} {1}, folder {2}", item.Name, item.ID, item.Folder);
|
||||
// }
|
||||
|
||||
m_log.InfoFormat(
|
||||
"[INVENTORY SERVICE]: Sending back inventory response to user {0} containing {1} folders and {2} items",
|
||||
invCollection.UserID, invCollection.Folders.Count, invCollection.Items.Count);
|
||||
|
||||
return invCollection;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Asynchronous inventory fetch.
|
||||
/// </summary>
|
||||
/// <param name="userID"></param>
|
||||
/// <param name="callback"></param>
|
||||
public void GetUserInventory(UUID userID, InventoryReceiptCallback callback)
|
||||
{
|
||||
m_log.InfoFormat("[INVENTORY SERVICE]: Requesting inventory for user {0}", userID);
|
||||
|
||||
List<InventoryFolderImpl> folders = new List<InventoryFolderImpl>();
|
||||
List<InventoryItemBase> items = new List<InventoryItemBase>();
|
||||
|
||||
List<InventoryFolderBase> skeletonFolders = GetInventorySkeleton(userID);
|
||||
|
||||
if (skeletonFolders != null)
|
||||
{
|
||||
InventoryFolderImpl rootFolder = null;
|
||||
|
||||
// Need to retrieve the root folder on the first pass
|
||||
foreach (InventoryFolderBase folder in skeletonFolders)
|
||||
{
|
||||
if (folder.ParentID == UUID.Zero)
|
||||
{
|
||||
rootFolder = new InventoryFolderImpl(folder);
|
||||
folders.Add(rootFolder);
|
||||
items.AddRange(GetFolderItems(userID, rootFolder.ID));
|
||||
break; // Only 1 root folder per user
|
||||
}
|
||||
}
|
||||
|
||||
if (rootFolder != null)
|
||||
{
|
||||
foreach (InventoryFolderBase folder in skeletonFolders)
|
||||
{
|
||||
if (folder.ID != rootFolder.ID)
|
||||
{
|
||||
folders.Add(new InventoryFolderImpl(folder));
|
||||
items.AddRange(GetFolderItems(userID, folder.ID));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_log.InfoFormat(
|
||||
"[INVENTORY SERVICE]: Received inventory response for user {0} containing {1} folders and {2} items",
|
||||
userID, folders.Count, items.Count);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_log.WarnFormat("[INVENTORY SERVICE]: User {0} inventory not available", userID);
|
||||
}
|
||||
|
||||
Util.FireAndForget(delegate { callback(folders, items); });
|
||||
}
|
||||
|
||||
public InventoryCollection GetFolderContent(UUID userID, UUID folderID)
|
||||
{
|
||||
// Uncomment me to simulate a slow responding inventory server
|
||||
//Thread.Sleep(16000);
|
||||
|
||||
InventoryCollection invCollection = new InventoryCollection();
|
||||
|
||||
List<InventoryItemBase> items = GetFolderItems(userID, folderID);
|
||||
List<InventoryFolderBase> folders = RequestSubFolders(folderID);
|
||||
|
||||
invCollection.UserID = userID;
|
||||
invCollection.Folders = folders;
|
||||
invCollection.Items = items;
|
||||
|
||||
m_log.DebugFormat("[INVENTORY SERVICE]: Found {0} items and {1} folders in folder {2}", items.Count, folders.Count, folderID);
|
||||
|
||||
return invCollection;
|
||||
}
|
||||
|
||||
public InventoryFolderBase GetFolderForType(UUID userID, AssetType type)
|
||||
{
|
||||
// m_log.DebugFormat("[INVENTORY SERVICE]: Looking for folder type {0} for user {1}", type, userID);
|
||||
|
||||
InventoryFolderBase root = m_Database.getUserRootFolder(userID);
|
||||
if (root != null)
|
||||
{
|
||||
List<InventoryFolderBase> folders = RequestSubFolders(root.ID);
|
||||
|
||||
foreach (InventoryFolderBase folder in folders)
|
||||
{
|
||||
if (folder.Type == (short)type)
|
||||
{
|
||||
// m_log.DebugFormat(
|
||||
// "[INVENTORY SERVICE]: Found folder {0} type {1}", folder.Name, (AssetType)folder.Type);
|
||||
|
||||
return folder;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// we didn't find any folder of that type. Return the root folder
|
||||
// hopefully the root folder is not null. If it is, too bad
|
||||
return root;
|
||||
}
|
||||
|
||||
public Dictionary<AssetType, InventoryFolderBase> GetSystemFolders(UUID userID)
|
||||
{
|
||||
InventoryFolderBase root = GetRootFolder(userID);
|
||||
if (root != null)
|
||||
{
|
||||
InventoryCollection content = GetFolderContent(userID, root.ID);
|
||||
if (content != null)
|
||||
{
|
||||
Dictionary<AssetType, InventoryFolderBase> folders = new Dictionary<AssetType, InventoryFolderBase>();
|
||||
foreach (InventoryFolderBase folder in content.Folders)
|
||||
{
|
||||
if ((folder.Type != (short)AssetType.Folder) && (folder.Type != (short)AssetType.Unknown))
|
||||
folders[(AssetType)folder.Type] = folder;
|
||||
}
|
||||
m_log.DebugFormat("[INVENTORY SERVICE]: Got {0} system folders for {1}", folders.Count, userID);
|
||||
return folders;
|
||||
}
|
||||
}
|
||||
m_log.WarnFormat("[INVENTORY SERVICE]: System folders for {0} not found", userID);
|
||||
return new Dictionary<AssetType, InventoryFolderBase>();
|
||||
}
|
||||
|
||||
public List<InventoryItemBase> GetActiveGestures(UUID userId)
|
||||
{
|
||||
List<InventoryItemBase> activeGestures = new List<InventoryItemBase>();
|
||||
activeGestures.AddRange(m_Database.fetchActiveGestures(userId));
|
||||
|
||||
return activeGestures;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods used by GridInventoryService
|
||||
|
||||
public List<InventoryFolderBase> RequestSubFolders(UUID parentFolderID)
|
||||
{
|
||||
List<InventoryFolderBase> inventoryList = new List<InventoryFolderBase>();
|
||||
|
||||
inventoryList.AddRange(m_Database.getInventoryFolders(parentFolderID));
|
||||
|
||||
return inventoryList;
|
||||
}
|
||||
|
||||
public List<InventoryItemBase> GetFolderItems(UUID userID, UUID folderID)
|
||||
{
|
||||
List<InventoryItemBase> itemsList = new List<InventoryItemBase>();
|
||||
|
||||
itemsList.AddRange(m_Database.getInventoryInFolder(folderID));
|
||||
|
||||
// m_log.DebugFormat(
|
||||
// "[INVENTORY SERVICE]: Found {0} items in folder {1} for {2}", itemsList.Count, folderID, userID);
|
||||
|
||||
return itemsList;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
// See IInventoryServices
|
||||
public virtual bool AddFolder(InventoryFolderBase folder)
|
||||
{
|
||||
m_log.DebugFormat(
|
||||
"[INVENTORY SERVICE]: Adding folder {0} {1} to folder {2}", folder.Name, folder.ID, folder.ParentID);
|
||||
|
||||
m_Database.addInventoryFolder(folder);
|
||||
|
||||
// FIXME: Should return false on failure
|
||||
return true;
|
||||
}
|
||||
|
||||
// See IInventoryServices
|
||||
public virtual bool UpdateFolder(InventoryFolderBase folder)
|
||||
{
|
||||
m_log.DebugFormat(
|
||||
"[INVENTORY SERVICE]: Updating folder {0} {1} to folder {2}", folder.Name, folder.ID, folder.ParentID);
|
||||
|
||||
m_Database.updateInventoryFolder(folder);
|
||||
|
||||
// FIXME: Should return false on failure
|
||||
return true;
|
||||
}
|
||||
|
||||
// See IInventoryServices
|
||||
public virtual bool MoveFolder(InventoryFolderBase folder)
|
||||
{
|
||||
m_log.DebugFormat(
|
||||
"[INVENTORY SERVICE]: Moving folder {0} {1} to folder {2}", folder.Name, folder.ID, folder.ParentID);
|
||||
|
||||
m_Database.moveInventoryFolder(folder);
|
||||
|
||||
// FIXME: Should return false on failure
|
||||
return true;
|
||||
}
|
||||
|
||||
// See IInventoryServices
|
||||
public virtual bool AddItem(InventoryItemBase item)
|
||||
{
|
||||
// m_log.DebugFormat(
|
||||
// "[INVENTORY SERVICE]: Adding item {0} {1} to folder {2} for {3}",
|
||||
// item.Name, item.ID, item.Folder, item.Owner);
|
||||
|
||||
m_Database.addInventoryItem(item);
|
||||
|
||||
// FIXME: Should return false on failure
|
||||
return true;
|
||||
}
|
||||
|
||||
// See IInventoryServices
|
||||
public virtual bool UpdateItem(InventoryItemBase item)
|
||||
{
|
||||
m_log.InfoFormat(
|
||||
"[INVENTORY SERVICE]: Updating item {0} {1} in folder {2}", item.Name, item.ID, item.Folder);
|
||||
|
||||
m_Database.updateInventoryItem(item);
|
||||
|
||||
// FIXME: Should return false on failure
|
||||
return true;
|
||||
}
|
||||
|
||||
public virtual bool MoveItems(UUID ownerID, List<InventoryItemBase> items)
|
||||
{
|
||||
m_log.InfoFormat(
|
||||
"[INVENTORY SERVICE]: Moving {0} items from user {1}", items.Count, ownerID);
|
||||
|
||||
InventoryItemBase itm = null;
|
||||
foreach (InventoryItemBase item in items)
|
||||
{
|
||||
itm = GetInventoryItem(item.ID);
|
||||
itm.Folder = item.Folder;
|
||||
if ((item.Name != null) && !item.Name.Equals(string.Empty))
|
||||
itm.Name = item.Name;
|
||||
m_Database.updateInventoryItem(itm);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// See IInventoryServices
|
||||
public virtual bool DeleteItems(UUID owner, List<UUID> itemIDs)
|
||||
{
|
||||
m_log.InfoFormat(
|
||||
"[INVENTORY SERVICE]: Deleting {0} items from user {1}", itemIDs.Count, owner);
|
||||
|
||||
// uhh.....
|
||||
foreach (UUID uuid in itemIDs)
|
||||
m_Database.deleteInventoryItem(uuid);
|
||||
|
||||
// FIXME: Should return false on failure
|
||||
return true;
|
||||
}
|
||||
|
||||
public virtual InventoryItemBase GetItem(InventoryItemBase item)
|
||||
{
|
||||
InventoryItemBase result = m_Database.getInventoryItem(item.ID);
|
||||
if (result != null)
|
||||
return result;
|
||||
m_log.DebugFormat("[INVENTORY SERVICE]: GetItem failed to find item {0}", item.ID);
|
||||
return null;
|
||||
}
|
||||
|
||||
public virtual InventoryFolderBase GetFolder(InventoryFolderBase folder)
|
||||
{
|
||||
InventoryFolderBase result = m_Database.getInventoryFolder(folder.ID);
|
||||
if (result != null)
|
||||
return result;
|
||||
|
||||
m_log.DebugFormat("[INVENTORY SERVICE]: GetFolder failed to find folder {0}", folder.ID);
|
||||
return null;
|
||||
}
|
||||
|
||||
public virtual bool DeleteFolders(UUID ownerID, List<UUID> folderIDs)
|
||||
{
|
||||
m_log.InfoFormat("[INVENTORY SERVICE]: Deleting {0} folders from user {1}", folderIDs.Count, ownerID);
|
||||
foreach (UUID id in folderIDs)
|
||||
{
|
||||
InventoryFolderBase folder = new InventoryFolderBase(id, ownerID);
|
||||
PurgeFolder(folder);
|
||||
m_Database.deleteInventoryFolder(id);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Purge a folder of all items items and subfolders.
|
||||
///
|
||||
/// FIXME: Really nasty in a sense, because we have to query the database to get information we may
|
||||
/// already know... Needs heavy refactoring.
|
||||
/// </summary>
|
||||
/// <param name="folder"></param>
|
||||
public virtual bool PurgeFolder(InventoryFolderBase folder)
|
||||
{
|
||||
m_log.DebugFormat(
|
||||
"[INVENTORY SERVICE]: Purging folder {0} {1} of its contents", folder.Name, folder.ID);
|
||||
|
||||
List<InventoryFolderBase> subFolders = RequestSubFolders(folder.ID);
|
||||
|
||||
foreach (InventoryFolderBase subFolder in subFolders)
|
||||
{
|
||||
// m_log.DebugFormat("[INVENTORY SERVICE]: Deleting folder {0} {1}", subFolder.Name, subFolder.ID);
|
||||
|
||||
m_Database.deleteInventoryFolder(subFolder.ID);
|
||||
}
|
||||
|
||||
List<InventoryItemBase> items = GetFolderItems(folder.Owner, folder.ID);
|
||||
|
||||
List<UUID> uuids = new List<UUID>();
|
||||
foreach (InventoryItemBase item in items)
|
||||
{
|
||||
uuids.Add(item.ID);
|
||||
}
|
||||
DeleteItems(folder.Owner, uuids);
|
||||
|
||||
// FIXME: Should return false on failure
|
||||
return true;
|
||||
}
|
||||
|
||||
private void AddNewInventorySet(UsersInventory inventory)
|
||||
{
|
||||
foreach (InventoryFolderBase folder in inventory.Folders.Values)
|
||||
{
|
||||
AddFolder(folder);
|
||||
}
|
||||
}
|
||||
|
||||
public InventoryItemBase GetInventoryItem(UUID itemID)
|
||||
{
|
||||
InventoryItemBase item = m_Database.getInventoryItem(itemID);
|
||||
if (item != null)
|
||||
return item;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public int GetAssetPermissions(UUID userID, UUID assetID)
|
||||
{
|
||||
InventoryFolderBase parent = GetRootFolder(userID);
|
||||
return FindAssetPerms(parent, assetID);
|
||||
}
|
||||
|
||||
private int FindAssetPerms(InventoryFolderBase folder, UUID assetID)
|
||||
{
|
||||
InventoryCollection contents = GetFolderContent(folder.Owner, folder.ID);
|
||||
|
||||
int perms = 0;
|
||||
foreach (InventoryItemBase item in contents.Items)
|
||||
{
|
||||
if (item.AssetID == assetID)
|
||||
perms = (int)item.CurrentPermissions | perms;
|
||||
}
|
||||
|
||||
foreach (InventoryFolderBase subfolder in contents.Folders)
|
||||
perms = perms | FindAssetPerms(subfolder, assetID);
|
||||
|
||||
return perms;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Used to create a new user inventory.
|
||||
/// </summary>
|
||||
private class UsersInventory
|
||||
{
|
||||
public Dictionary<UUID, InventoryFolderBase> Folders = new Dictionary<UUID, InventoryFolderBase>();
|
||||
public Dictionary<UUID, InventoryItemBase> Items = new Dictionary<UUID, InventoryItemBase>();
|
||||
|
||||
public virtual void CreateNewInventorySet(UUID user)
|
||||
{
|
||||
InventoryFolderBase folder = new InventoryFolderBase();
|
||||
|
||||
folder.ParentID = UUID.Zero;
|
||||
folder.Owner = user;
|
||||
folder.ID = UUID.Random();
|
||||
folder.Name = "My Inventory";
|
||||
folder.Type = (short)AssetType.Folder;
|
||||
folder.Version = 1;
|
||||
Folders.Add(folder.ID, folder);
|
||||
|
||||
UUID rootFolder = folder.ID;
|
||||
|
||||
folder = new InventoryFolderBase();
|
||||
folder.ParentID = rootFolder;
|
||||
folder.Owner = user;
|
||||
folder.ID = UUID.Random();
|
||||
folder.Name = "Animations";
|
||||
folder.Type = (short)AssetType.Animation;
|
||||
folder.Version = 1;
|
||||
Folders.Add(folder.ID, folder);
|
||||
|
||||
folder = new InventoryFolderBase();
|
||||
folder.ParentID = rootFolder;
|
||||
folder.Owner = user;
|
||||
folder.ID = UUID.Random();
|
||||
folder.Name = "Body Parts";
|
||||
folder.Type = (short)AssetType.Bodypart;
|
||||
folder.Version = 1;
|
||||
Folders.Add(folder.ID, folder);
|
||||
|
||||
folder = new InventoryFolderBase();
|
||||
folder.ParentID = rootFolder;
|
||||
folder.Owner = user;
|
||||
folder.ID = UUID.Random();
|
||||
folder.Name = "Calling Cards";
|
||||
folder.Type = (short)AssetType.CallingCard;
|
||||
folder.Version = 1;
|
||||
Folders.Add(folder.ID, folder);
|
||||
|
||||
folder = new InventoryFolderBase();
|
||||
folder.ParentID = rootFolder;
|
||||
folder.Owner = user;
|
||||
folder.ID = UUID.Random();
|
||||
folder.Name = "Clothing";
|
||||
folder.Type = (short)AssetType.Clothing;
|
||||
folder.Version = 1;
|
||||
Folders.Add(folder.ID, folder);
|
||||
|
||||
folder = new InventoryFolderBase();
|
||||
folder.ParentID = rootFolder;
|
||||
folder.Owner = user;
|
||||
folder.ID = UUID.Random();
|
||||
folder.Name = "Gestures";
|
||||
folder.Type = (short)AssetType.Gesture;
|
||||
folder.Version = 1;
|
||||
Folders.Add(folder.ID, folder);
|
||||
|
||||
folder = new InventoryFolderBase();
|
||||
folder.ParentID = rootFolder;
|
||||
folder.Owner = user;
|
||||
folder.ID = UUID.Random();
|
||||
folder.Name = "Landmarks";
|
||||
folder.Type = (short)AssetType.Landmark;
|
||||
folder.Version = 1;
|
||||
Folders.Add(folder.ID, folder);
|
||||
|
||||
folder = new InventoryFolderBase();
|
||||
folder.ParentID = rootFolder;
|
||||
folder.Owner = user;
|
||||
folder.ID = UUID.Random();
|
||||
folder.Name = "Lost And Found";
|
||||
folder.Type = (short)AssetType.LostAndFoundFolder;
|
||||
folder.Version = 1;
|
||||
Folders.Add(folder.ID, folder);
|
||||
|
||||
folder = new InventoryFolderBase();
|
||||
folder.ParentID = rootFolder;
|
||||
folder.Owner = user;
|
||||
folder.ID = UUID.Random();
|
||||
folder.Name = "Notecards";
|
||||
folder.Type = (short)AssetType.Notecard;
|
||||
folder.Version = 1;
|
||||
Folders.Add(folder.ID, folder);
|
||||
|
||||
folder = new InventoryFolderBase();
|
||||
folder.ParentID = rootFolder;
|
||||
folder.Owner = user;
|
||||
folder.ID = UUID.Random();
|
||||
folder.Name = "Objects";
|
||||
folder.Type = (short)AssetType.Object;
|
||||
folder.Version = 1;
|
||||
Folders.Add(folder.ID, folder);
|
||||
|
||||
folder = new InventoryFolderBase();
|
||||
folder.ParentID = rootFolder;
|
||||
folder.Owner = user;
|
||||
folder.ID = UUID.Random();
|
||||
folder.Name = "Photo Album";
|
||||
folder.Type = (short)AssetType.SnapshotFolder;
|
||||
folder.Version = 1;
|
||||
Folders.Add(folder.ID, folder);
|
||||
|
||||
folder = new InventoryFolderBase();
|
||||
folder.ParentID = rootFolder;
|
||||
folder.Owner = user;
|
||||
folder.ID = UUID.Random();
|
||||
folder.Name = "Scripts";
|
||||
folder.Type = (short)AssetType.LSLText;
|
||||
folder.Version = 1;
|
||||
Folders.Add(folder.ID, folder);
|
||||
|
||||
folder = new InventoryFolderBase();
|
||||
folder.ParentID = rootFolder;
|
||||
folder.Owner = user;
|
||||
folder.ID = UUID.Random();
|
||||
folder.Name = "Sounds";
|
||||
folder.Type = (short)AssetType.Sound;
|
||||
folder.Version = 1;
|
||||
Folders.Add(folder.ID, folder);
|
||||
|
||||
folder = new InventoryFolderBase();
|
||||
folder.ParentID = rootFolder;
|
||||
folder.Owner = user;
|
||||
folder.ID = UUID.Random();
|
||||
folder.Name = "Textures";
|
||||
folder.Type = (short)AssetType.Texture;
|
||||
folder.Version = 1;
|
||||
Folders.Add(folder.ID, folder);
|
||||
|
||||
folder = new InventoryFolderBase();
|
||||
folder.ParentID = rootFolder;
|
||||
folder.Owner = user;
|
||||
folder.ID = UUID.Random();
|
||||
folder.Name = "Trash";
|
||||
folder.Type = (short)AssetType.TrashFolder;
|
||||
folder.Version = 1;
|
||||
Folders.Add(folder.ID, folder);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,82 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) Contributors, http://opensimulator.org/
|
||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the OpenSimulator Project nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using Nini.Config;
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Data;
|
||||
using OpenSim.Services.Interfaces;
|
||||
using OpenSim.Services.Base;
|
||||
|
||||
namespace OpenSim.Services.InventoryService
|
||||
{
|
||||
public class InventoryServiceBase : ServiceBase
|
||||
{
|
||||
protected IInventoryDataPlugin m_Database = null;
|
||||
|
||||
public InventoryServiceBase(IConfigSource config) : base(config)
|
||||
{
|
||||
string dllName = String.Empty;
|
||||
string connString = String.Empty;
|
||||
|
||||
//
|
||||
// Try reading the [DatabaseService] section first, if it exists
|
||||
//
|
||||
IConfig dbConfig = config.Configs["DatabaseService"];
|
||||
if (dbConfig != null)
|
||||
{
|
||||
dllName = dbConfig.GetString("StorageProvider", String.Empty);
|
||||
connString = dbConfig.GetString("ConnectionString", String.Empty);
|
||||
}
|
||||
|
||||
//
|
||||
// Try reading the more specific [InventoryService] section, if it exists
|
||||
//
|
||||
IConfig inventoryConfig = config.Configs["InventoryService"];
|
||||
if (inventoryConfig != null)
|
||||
{
|
||||
dllName = inventoryConfig.GetString("StorageProvider", dllName);
|
||||
connString = inventoryConfig.GetString("ConnectionString", connString);
|
||||
}
|
||||
|
||||
//
|
||||
// We tried, but this doesn't exist. We can't proceed.
|
||||
//
|
||||
if (dllName.Equals(String.Empty))
|
||||
throw new Exception("No InventoryService configuration");
|
||||
|
||||
m_Database = LoadPlugin<IInventoryDataPlugin>(dllName);
|
||||
if (m_Database == null)
|
||||
throw new Exception("Could not find a storage interface in the given module");
|
||||
|
||||
m_Database.Initialise(connString);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue