From 8143c597fc5f62ec0d931d2d5b887730e06aec04 Mon Sep 17 00:00:00 2001
From: lbsa71
Date: Thu, 27 Sep 2007 13:25:45 +0000
Subject: * Tleiades grid mode inventory (#444) - thanx Tleiades! * updated
to rev 1413 on libsecondlife.dll and libsecondlife.dll.config (#423)
---
OpenSim/Framework/Communications/CAPSService.cs | 1 -
.../Communications/Cache/CachedUserInfo.cs | 14 +-
.../Communications/Cache/InventoryFolder.cs | 12 +-
.../Communications/Cache/UserProfileCache.cs | 32 ++-
.../Framework/Communications/IInventoryServices.cs | 16 +-
.../Communications/InventoryServiceBase.cs | 255 ++++++++++++++++-----
OpenSim/Framework/Communications/LoginResponse.cs | 48 ++--
OpenSim/Framework/Communications/LoginService.cs | 134 +++++------
OpenSim/Framework/Data.MySQL/MySQLInventoryData.cs | 58 ++---
OpenSim/Framework/Data.MySQL/MySQLManager.cs | 58 +++--
.../Framework/Data.SQLite/SQLiteInventoryStore.cs | 61 +++--
OpenSim/Framework/Data/InventoryData.cs | 33 ++-
.../General/Configuration/InventoryConfig.cs | 67 ++++++
.../Framework/General/Configuration/UserConfig.cs | 11 +
.../Framework/General/Types/NetworkServersInfo.cs | 5 +-
OpenSim/Framework/General/Types/UUID.cs | 4 +-
16 files changed, 543 insertions(+), 266 deletions(-)
create mode 100644 OpenSim/Framework/General/Configuration/InventoryConfig.cs
(limited to 'OpenSim/Framework')
diff --git a/OpenSim/Framework/Communications/CAPSService.cs b/OpenSim/Framework/Communications/CAPSService.cs
index a8eac26..40d8d37 100644
--- a/OpenSim/Framework/Communications/CAPSService.cs
+++ b/OpenSim/Framework/Communications/CAPSService.cs
@@ -8,7 +8,6 @@ using Nwc.XmlRpc;
using OpenSim.Framework.Console;
using OpenSim.Framework.Data;
using OpenSim.Framework.Interfaces;
-using OpenSim.Framework.Inventory;
using OpenSim.Framework.Utilities;
using OpenSim.Framework.Servers;
diff --git a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs
index 99dc45a..9e8c239 100644
--- a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs
+++ b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs
@@ -38,7 +38,7 @@ using OpenSim.Framework.Utilities;
namespace OpenSim.Framework.Communications.Caches
{
- public class CachedUserInfo
+ public class CachedUserInfo : MarshalByRefObject
{
private CommunicationsManager m_parentCommsManager;
// Fields
@@ -51,7 +51,7 @@ namespace OpenSim.Framework.Communications.Caches
}
// Methods
- public void FolderReceive(LLUUID userID, InventoryFolder folderInfo)
+ public void FolderReceive(LLUUID userID, InventoryFolderBase folderInfo)
{
if (userID == this.UserProfile.UUID)
{
@@ -59,19 +59,19 @@ namespace OpenSim.Framework.Communications.Caches
{
if (folderInfo.parentID == LLUUID.Zero)
{
- this.RootFolder = folderInfo;
+ this.RootFolder = new InventoryFolder(folderInfo);
}
}
else if (this.RootFolder.folderID == folderInfo.parentID)
{
- this.RootFolder.SubFolders.Add(folderInfo.folderID, folderInfo);
+ this.RootFolder.SubFolders.Add(folderInfo.folderID, new InventoryFolder(folderInfo));
}
else
{
InventoryFolder folder = this.RootFolder.HasSubFolder(folderInfo.parentID);
if (folder != null)
{
- folder.SubFolders.Add(folderInfo.folderID, folderInfo);
+ folder.SubFolders.Add(folderInfo.folderID, new InventoryFolder(folderInfo));
}
}
}
@@ -131,3 +131,7 @@ namespace OpenSim.Framework.Communications.Caches
}
+
+
+
+
diff --git a/OpenSim/Framework/Communications/Cache/InventoryFolder.cs b/OpenSim/Framework/Communications/Cache/InventoryFolder.cs
index 885cffc..a212614 100644
--- a/OpenSim/Framework/Communications/Cache/InventoryFolder.cs
+++ b/OpenSim/Framework/Communications/Cache/InventoryFolder.cs
@@ -35,6 +35,9 @@ using OpenSim.Framework.Interfaces;
using OpenSim.Framework.Data;
using OpenSim.Framework.Types;
using OpenSim.Framework.Utilities;
+using OpenSim.Framework.Console;
+
+using InventoryCategory = OpenSim.Framework.Data.InventoryCategory;
namespace OpenSim.Framework.Communications.Caches
{
@@ -60,7 +63,7 @@ namespace OpenSim.Framework.Communications.Caches
}
// Methods
- public InventoryFolder CreateNewSubFolder(LLUUID folderID, string folderName, ushort type)
+ public InventoryFolder CreateNewSubFolder(LLUUID folderID, string folderName, ushort type, InventoryCategory category)
{
InventoryFolder subFold = new InventoryFolder();
subFold.name = folderName;
@@ -68,7 +71,12 @@ namespace OpenSim.Framework.Communications.Caches
subFold.type = (short) type;
subFold.parentID = this.folderID;
subFold.agentID = this.agentID;
- this.SubFolders.Add(subFold.folderID, subFold);
+ subFold.category = category;
+ if (!SubFolders.ContainsKey(subFold.folderID))
+ this.SubFolders.Add(subFold.folderID, subFold);
+ else
+ MainLog.Instance.Warn("INVENTORYCACHE", "Attempt to create a duplicate folder {0} {1}", folderName, folderID);
+
return subFold;
}
diff --git a/OpenSim/Framework/Communications/Cache/UserProfileCache.cs b/OpenSim/Framework/Communications/Cache/UserProfileCache.cs
index 390b938..3dadf9c 100644
--- a/OpenSim/Framework/Communications/Cache/UserProfileCache.cs
+++ b/OpenSim/Framework/Communications/Cache/UserProfileCache.cs
@@ -35,10 +35,11 @@ using OpenSim.Framework.Interfaces;
using OpenSim.Framework.Types;
using OpenSim.Framework.Utilities;
using OpenSim.Framework.Data;
+using InventoryCategory = OpenSim.Framework.Data.InventoryCategory;
namespace OpenSim.Framework.Communications.Caches
{
- public class UserProfileCache
+ public class UserProfileCache : MarshalByRefObject
{
// Fields
private CommunicationsManager m_parent;
@@ -103,7 +104,7 @@ namespace OpenSim.Framework.Communications.Caches
CachedUserInfo info = this.UserProfiles[remoteClient.AgentId];
if (info.RootFolder.folderID == parentID)
{
- InventoryFolder createdFolder = info.RootFolder.CreateNewSubFolder(folderID, folderName, folderType);
+ InventoryFolder createdFolder = info.RootFolder.CreateNewSubFolder(folderID, folderName, folderType, InventoryCategory.User);
if (createdFolder != null)
{
this.m_parent.InventoryService.AddNewInventoryFolder(remoteClient.AgentId, createdFolder);
@@ -114,7 +115,7 @@ namespace OpenSim.Framework.Communications.Caches
InventoryFolder folder = info.RootFolder.HasSubFolder(parentID);
if (folder != null)
{
- folder.CreateNewSubFolder(folderID, folderName, folderType);
+ folder.CreateNewSubFolder(folderID, folderName, folderType, InventoryCategory.User);
}
}
}
@@ -124,16 +125,21 @@ namespace OpenSim.Framework.Communications.Caches
public void HandleFecthInventoryDescendents(IClientAPI remoteClient, LLUUID folderID, LLUUID ownerID, bool fetchFolders, bool fetchItems, int sortOrder)
{
InventoryFolder fold = null;
+
if (folderID == libraryRoot.folderID )
{
+ // we are looking for the root of the shared inventory
remoteClient.SendInventoryFolderDetails(libraryRoot.agentID, libraryRoot.folderID, libraryRoot.RequestListOfItems());
}
else if (( fold = libraryRoot.HasSubFolder(folderID)) != null)
{
+ // we are looking for a sub folder of the shared inventory
remoteClient.SendInventoryFolderDetails(libraryRoot.agentID, folderID, fold.RequestListOfItems());
}
else if (this.UserProfiles.ContainsKey(remoteClient.AgentId))
{
+ //if we get here, we are looking the inventory of an agent in this sim
+ //now we need to see if we already have the inventory cached
if (this.UserProfiles[remoteClient.AgentId].RootFolder != null)
{
CachedUserInfo info = this.UserProfiles[remoteClient.AgentId];
@@ -153,9 +159,23 @@ namespace OpenSim.Framework.Communications.Caches
}
}
}
+ else
+ {
+ //nope, inventory wasn't cached, so go to the inventory server and ask for the inventory
+ m_parent.InventoryService.RequestInventoryForUser(remoteClient.AgentId, ReceiveFolderInfo, ReceiveItemInfo);
+ }
}
}
+ public void ReceiveFolderInfo(LLUUID userID, InventoryFolderBase folderInfo)
+ {
+ }
+
+ public void ReceiveItemInfo(LLUUID userID, InventoryItemBase itemInfo)
+ {
+ }
+
+
public void HandleFetchInventory(IClientAPI remoteClient, LLUUID itemID, LLUUID ownerID)
{
if (ownerID == libraryRoot.agentID)
@@ -181,7 +201,7 @@ namespace OpenSim.Framework.Communications.Caches
///
private void RequestInventoryForUser(LLUUID userID, CachedUserInfo userInfo)
{
- this.m_parent.InventoryService.RequestInventoryForUser(userID, userInfo.FolderReceive, userInfo.ItemReceive);
+ this.m_parent.InventoryService.RequestInventoryForUser(userID, userInfo.FolderReceive, userInfo.ItemReceive);
}
///
@@ -221,3 +241,7 @@ namespace OpenSim.Framework.Communications.Caches
}
}
+
+
+
+
diff --git a/OpenSim/Framework/Communications/IInventoryServices.cs b/OpenSim/Framework/Communications/IInventoryServices.cs
index 80c2e64..7b2948f 100644
--- a/OpenSim/Framework/Communications/IInventoryServices.cs
+++ b/OpenSim/Framework/Communications/IInventoryServices.cs
@@ -1,29 +1,31 @@
using System;
-using System.Collections.Generic;
using System.Text;
-using OpenSim.Framework.Data;
+using System.Collections.Generic;
+
using libsecondlife;
+using OpenSim.Framework.Data;
using OpenSim.Framework.Communications.Caches;
-using InventoryFolder = OpenSim.Framework.Communications.Caches.InventoryFolder;
namespace OpenSim.Framework.Communications
{
- public delegate void InventoryFolderInfo(LLUUID userID, InventoryFolder folderInfo);
+ public delegate void InventoryFolderInfo(LLUUID userID, InventoryFolderBase folderInfo);
public delegate void InventoryItemInfo(LLUUID userID, InventoryItemBase itemInfo);
public interface IInventoryServices
{
void RequestInventoryForUser(LLUUID userID, InventoryFolderInfo folderCallBack, InventoryItemInfo itemCallBack);
- void AddNewInventoryFolder(LLUUID userID, InventoryFolder folder);
+ void AddNewInventoryFolder(LLUUID userID, InventoryFolderBase folder);
void AddNewInventoryItem(LLUUID userID, InventoryItemBase item);
void DeleteInventoryItem(LLUUID userID, InventoryItemBase item);
- void CreateNewUserInventory(LLUUID user);
+ void CreateNewUserInventory(LLUUID libraryRootId, LLUUID user);
+ void GetRootFoldersForUser(LLUUID user, out LLUUID libraryFolder, out LLUUID personalFolder);
///
/// Returns the root folder plus any folders in root (so down one level in the Inventory folders tree)
///
///
///
- List RequestFirstLevelFolders(LLUUID userID);
+ List RequestFirstLevelFolders(LLUUID folderID);
+ List RequestFolderItems(LLUUID folderID);
}
}
diff --git a/OpenSim/Framework/Communications/InventoryServiceBase.cs b/OpenSim/Framework/Communications/InventoryServiceBase.cs
index da7a0ce..6283b60 100644
--- a/OpenSim/Framework/Communications/InventoryServiceBase.cs
+++ b/OpenSim/Framework/Communications/InventoryServiceBase.cs
@@ -1,4 +1,9 @@
using System;
+using System.Text;
+using System.IO;
+using System.Xml;
+using System.Xml.Serialization;
+using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using libsecondlife;
@@ -6,21 +11,20 @@ using OpenSim.Framework.Communications;
using OpenSim.Framework.Console;
using OpenSim.Framework.Data;
using InventoryFolder=OpenSim.Framework.Communications.Caches.InventoryFolder;
+using InventoryCategory = OpenSim.Framework.Data.InventoryCategory;
namespace OpenSim.Framework.Communications
{
- public abstract class InventoryServiceBase : IInventoryServices
+ public abstract class InventoryServiceBase : MarshalByRefObject, IInventoryServices
{
- protected Dictionary m_plugins = new Dictionary();
- //protected IAssetServer m_assetServer;
+ protected IInventoryData _databasePlugin;
public InventoryServiceBase()
{
- //m_assetServer = assetServer;
}
///
- /// Adds a new user server plugin - plugins will be requested in the order they were loaded.
+ /// Adds a new inventory data server plugin
///
/// The filename to the user server plugin DLL
public void AddPlugin(string FileName)
@@ -41,8 +45,13 @@ namespace OpenSim.Framework.Communications
IInventoryData plug =
(IInventoryData)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
plug.Initialise();
- this.m_plugins.Add(plug.getName(), plug);
+ this._databasePlugin = plug;
+
+ //TODO! find a better place to create inventory skeletons
+ loadInventoryFromXmlFile(InventoryCategory.Library, "Inventory_Library.xml");
+ loadInventoryFromXmlFile(InventoryCategory.Default, "Inventory_Default.xml");
MainLog.Instance.Verbose("Inventorystorage: Added IInventoryData Interface");
+ break;
}
}
}
@@ -54,20 +63,20 @@ namespace OpenSim.Framework.Communications
///
///
///
- public List RequestFirstLevelFolders(LLUUID userID)
+ public List RequestFirstLevelFolders(LLUUID folderID)
{
- List inventoryList = new List();
- foreach (KeyValuePair plugin in m_plugins)
+ InventoryFolderBase root = _databasePlugin.getInventoryFolder(folderID);
+
+ List folders = new List();
+ if (root != null)
{
- InventoryFolderBase rootFolder = plugin.Value.getUserRootFolder(userID);
- if (rootFolder != null)
- {
- inventoryList = plugin.Value.getInventoryFolders(rootFolder.folderID);
- inventoryList.Insert(0, rootFolder);
- return inventoryList;
- }
+ folders.Add(root);
+
+ List subFolders = _databasePlugin.getInventoryFolders(root.folderID);
+ foreach (InventoryFolderBase f in subFolders)
+ folders.Add(f);
}
- return inventoryList;
+ return folders;
}
///
@@ -75,11 +84,7 @@ namespace OpenSim.Framework.Communications
///
public InventoryFolderBase RequestUsersRoot(LLUUID userID)
{
- foreach (KeyValuePair plugin in m_plugins)
- {
- return plugin.Value.getUserRootFolder(userID);
- }
- return null;
+ return _databasePlugin.getInventoryFolder(userID); // the id of the root folder, is the user id
}
///
@@ -89,47 +94,27 @@ namespace OpenSim.Framework.Communications
///
public List RequestSubFolders(LLUUID parentFolderID)
{
- List inventoryList = new List();
- foreach (KeyValuePair plugin in m_plugins)
- {
- return plugin.Value.getInventoryFolders(parentFolderID);
- }
- return inventoryList;
+ return _databasePlugin.getInventoryFolders(parentFolderID);
}
public List RequestFolderItems(LLUUID folderID)
{
- List itemsList = new List();
- foreach (KeyValuePair plugin in m_plugins)
- {
- itemsList = plugin.Value.getInventoryInFolder(folderID);
- return itemsList;
- }
- return itemsList;
+ return _databasePlugin.getInventoryInFolder(folderID);
}
public void AddFolder(InventoryFolderBase folder)
{
- foreach (KeyValuePair plugin in m_plugins)
- {
- plugin.Value.addInventoryFolder(folder);
- }
+ _databasePlugin.addInventoryFolder(folder);
}
public void AddItem(InventoryItemBase item)
{
- foreach (KeyValuePair plugin in m_plugins)
- {
- plugin.Value.addInventoryItem(item);
- }
+ _databasePlugin.addInventoryItem(item);
}
public void deleteItem(InventoryItemBase item)
{
- foreach (KeyValuePair plugin in m_plugins)
- {
- plugin.Value.deleteInventoryItem(item);
- }
+ _databasePlugin.deleteInventoryItem(item);
}
///
@@ -144,11 +129,53 @@ namespace OpenSim.Framework.Communications
}
}
- public void CreateNewUserInventory(LLUUID user)
+ public void CreateNewUserInventory(LLUUID defaultFolders, LLUUID user)
{
- UsersInventory inven = new UsersInventory();
- inven.CreateNewInventorySet(user);
- this.AddNewInventorySet(inven);
+ try
+ {
+ // Get Default folder set from the database
+ //TODO! We need to get the whole hierachy and not just one level down
+ List folders = this.RequestFirstLevelFolders(LLUUID.Parse("00000112-000f-0000-0000-000100bba000"));
+
+ // create an index list, where each of the elements has the index of its parent in the hierachy
+ // this algorithm is pretty shoddy O(n^2), but it is only executed once per user.
+ int[] parentIdx = new int[folders.Count];
+ for (int i = 0; i < folders.Count; i++)
+ parentIdx[i] = -1;
+
+ for (int i = 0; i < folders.Count; i++)
+ for (int j = 0; j < folders.Count; j++)
+ if (folders[i].folderID == folders[j].parentID)
+ parentIdx[j] = i;
+
+
+ //assign a new owerid and a new to the folders
+ foreach (InventoryFolderBase ifb in folders)
+ {
+ if (ifb.parentID == LLUUID.Zero)
+ ifb.folderID = user;
+ else
+ ifb.folderID = LLUUID.Random();
+
+ ifb.agentID = user;
+ ifb.category = InventoryCategory.User;
+ }
+
+ // correct the parent id
+ for (int i = 0; i < folders.Count; i++)
+ {
+ if (folders[i].parentID != LLUUID.Zero)
+ folders[i].parentID = folders[parentIdx[i]].folderID; // root folder id is the same as the user id
+ }
+
+ // the list is structurally sound, using new folder id's, so save it
+ foreach (InventoryFolderBase ifb in folders)
+ _databasePlugin.addInventoryFolder(ifb);
+ }
+ catch (Exception e)
+ {
+ MainLog.Instance.Error(e.ToString());
+ }
}
public class UsersInventory
@@ -166,10 +193,11 @@ namespace OpenSim.Framework.Communications
InventoryFolderBase folder = new InventoryFolderBase();
folder.parentID = LLUUID.Zero;
folder.agentID = user;
- folder.folderID = LLUUID.Random();
+ folder.folderID = user; // id of root folder is the same as the agent id
folder.name = "My Inventory";
folder.type = 8;
folder.version = 1;
+ folder.category = InventoryCategory.User;
Folders.Add(folder.folderID, folder);
LLUUID rootFolder = folder.folderID;
@@ -181,6 +209,7 @@ namespace OpenSim.Framework.Communications
folder.name = "Textures";
folder.type = 0;
folder.version = 1;
+ folder.category = InventoryCategory.User;
Folders.Add(folder.folderID, folder);
folder = new InventoryFolderBase();
@@ -190,6 +219,7 @@ namespace OpenSim.Framework.Communications
folder.name = "Objects";
folder.type = 6;
folder.version = 1;
+ folder.category = InventoryCategory.User;
Folders.Add(folder.folderID, folder);
folder = new InventoryFolderBase();
@@ -199,13 +229,130 @@ namespace OpenSim.Framework.Communications
folder.name = "Clothes";
folder.type = 5;
folder.version = 1;
+ folder.category = InventoryCategory.User;
Folders.Add(folder.folderID, folder);
}
}
+
+ public void GetRootFoldersForUser(LLUUID user, out LLUUID libraryFolder, out LLUUID personalFolder)
+ {
+ List folders = _databasePlugin.getUserRootFolders(user);
+ libraryFolder = LLUUID.Zero;
+ personalFolder = LLUUID.Zero;
+
+ for (int i = 0; i < folders.Count; i++)
+ {
+ if (folders[i].category == InventoryCategory.Library)
+ libraryFolder = folders[i].folderID;
+ else if (folders[i].category == InventoryCategory.User)
+ personalFolder = folders[i].folderID;
+ }
+ }
+
+ /*
+ * Dot net has some issues, serializing a dictionary, so we cannot reuse the InventoryFolder
+ * class defined in Communications.Framework.Communications.Caches. So we serialize/deserialize
+ * into this simpler class, and then use that.
+ */
+ [XmlRoot(ElementName = "inventory", IsNullable = true)]
+ public class SerializedInventory
+ {
+ [XmlRoot(ElementName = "folder", IsNullable = true)]
+ public class SerializedFolder : InventoryFolderBase
+ {
+ [XmlArray(ElementName = "folders", IsNullable = true)]
+ [XmlArrayItem(ElementName = "folder", IsNullable = true, Type = typeof(SerializedFolder))]
+ public ArrayList SubFolders;
+
+ [XmlArray(ElementName = "items", IsNullable = true)]
+ [XmlArrayItem(ElementName = "item", IsNullable = true, Type = typeof(InventoryItemBase))]
+ public ArrayList Items;
+ }
+
+ [XmlElement(ElementName = "folder", IsNullable = true)]
+ public SerializedFolder root;
+ }
+
+ public void uploadInventory(SerializedInventory.SerializedFolder folder)
+ {
+ foreach (InventoryItemBase iib in folder.Items)
+ {
+ // assign default values, if they haven't assigned
+ iib.avatarID = folder.agentID;
+ if (iib.assetID == LLUUID.Zero)
+ iib.assetID = LLUUID.Random();
+ if (iib.creatorsID == LLUUID.Zero)
+ iib.creatorsID = folder.agentID;
+ if (iib.inventoryID == LLUUID.Zero)
+ iib.inventoryID = LLUUID.Random();
+ if (iib.inventoryName == null || iib.inventoryName.Length == 0)
+ iib.inventoryName = "new item";
+ iib.parentFolderID = folder.folderID;
+
+ _databasePlugin.addInventoryItem(iib);
+ }
+
+ foreach (SerializedInventory.SerializedFolder sf in folder.SubFolders)
+ {
+ // assign default values, if they haven't assigned
+ sf.agentID = folder.agentID;
+ sf.category = folder.category;
+ if (sf.folderID == LLUUID.Zero)
+ sf.folderID = LLUUID.Random();
+ if (sf.name == null || sf.name.Length == 0)
+ sf.name = "new folder";
+ sf.parentID = folder.folderID;
+
+ _databasePlugin.addInventoryFolder(sf);
+ uploadInventory(sf);
+ }
+ }
+
+ public void loadInventoryFromXmlFile(InventoryCategory inventoryCategory, string fileName)
+ {
+ _databasePlugin.deleteInventoryCategory(inventoryCategory);
+
+ FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
+ XmlReader reader = new XmlTextReader(fs);
+ XmlSerializer x = new XmlSerializer(typeof(SerializedInventory));
+ SerializedInventory inventory = (SerializedInventory)x.Deserialize(reader);
+
+ // the library and default inventories has no owner, so we use a random guid.
+ if (inventory.root.category == InventoryCategory.Library || inventory.root.category == InventoryCategory.Default)
+ {
+ if (inventory.root.folderID != LLUUID.Zero)
+ inventory.root.agentID = inventory.root.folderID;
+ else
+ inventory.root.agentID = LLUUID.Random();
+ }
+ else if (inventory.root.category == InventoryCategory.User)
+ {
+ if (inventory.root.agentID == LLUUID.Zero)
+ inventory.root.agentID = LLUUID.Random();
+ }
+
+ inventory.root.folderID = inventory.root.agentID; // the root folder always has the same id as the owning agent
+ inventory.root.parentID = LLUUID.Zero;
+ inventory.root.version = 0;
+ inventory.root.category = inventoryCategory;
+
+ _databasePlugin.addInventoryFolder(inventory.root);
+ uploadInventory(inventory.root);
+ }
+
+ protected void saveInventoryToXmlFile(SerializedInventory inventory, string fileName)
+ {
+ FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write);
+ XmlTextWriter writer = new XmlTextWriter(fs, Encoding.UTF8);
+ writer.Formatting = Formatting.Indented;
+ XmlSerializer x = new XmlSerializer(typeof(SerializedInventory));
+ x.Serialize(writer, inventory);
+ }
+
public abstract void RequestInventoryForUser(LLUUID userID, InventoryFolderInfo folderCallBack, InventoryItemInfo itemCallBack);
- public abstract void AddNewInventoryFolder(LLUUID userID, InventoryFolder folder);
+ public abstract void AddNewInventoryFolder(LLUUID userID, InventoryFolderBase folder);
public abstract void AddNewInventoryItem(LLUUID userID, InventoryItemBase item);
public abstract void DeleteInventoryItem(LLUUID userID, InventoryItemBase item);
}
-}
\ No newline at end of file
+}
diff --git a/OpenSim/Framework/Communications/LoginResponse.cs b/OpenSim/Framework/Communications/LoginResponse.cs
index b5a4184..b4280e7 100644
--- a/OpenSim/Framework/Communications/LoginResponse.cs
+++ b/OpenSim/Framework/Communications/LoginResponse.cs
@@ -26,9 +26,10 @@ namespace OpenSim.Framework.UserManagement
private ArrayList classifiedCategories;
private ArrayList inventoryRoot;
private ArrayList initialOutfit;
- private ArrayList agentInventory;
+ private ArrayList inventorySkeleton;
private ArrayList inventoryLibraryOwner;
- private ArrayList inventoryLibrary;
+ private ArrayList inventoryLibraryRoot;
+ private ArrayList inventoryLibrarySkeleton;
private UserInfo userProfile;
@@ -86,11 +87,13 @@ namespace OpenSim.Framework.UserManagement
this.defaultXmlRpcResponse = new XmlRpcResponse();
this.userProfile = new UserInfo();
- this.inventoryRoot = new ArrayList();
+
this.initialOutfit = new ArrayList();
- this.agentInventory = new ArrayList();
- this.inventoryLibrary = new ArrayList();
+ this.inventoryRoot = new ArrayList();
+ this.inventorySkeleton = new ArrayList();
+ this.inventoryLibrarySkeleton = new ArrayList();
this.inventoryLibraryOwner = new ArrayList();
+ this.inventoryLibraryRoot = new ArrayList();
this.xmlRpcResponse = new XmlRpcResponse();
this.defaultXmlRpcResponse = new XmlRpcResponse();
@@ -237,12 +240,15 @@ namespace OpenSim.Framework.UserManagement
responseData["classified_categories"] = this.classifiedCategories;
responseData["ui-config"] = this.uiConfig;
- responseData["inventory-skeleton"] = this.agentInventory;
- responseData["inventory-skel-lib"] = this.inventoryLibrary;
+ responseData["inventory-skeleton"] = this.inventorySkeleton;
+ responseData["inventory-skel-lib"] = this.inventoryLibrarySkeleton;
responseData["inventory-root"] = this.inventoryRoot;
- responseData["gestures"] = new ArrayList(); // todo
responseData["inventory-lib-owner"] = this.inventoryLibraryOwner;
+ responseData["inventory-lib-root"] = this.inventoryLibraryRoot;
+
+ responseData["gestures"] = new ArrayList(); // todo
responseData["initial-outfit"] = this.initialOutfit;
+
responseData["start_location"] = this.startLocation;
responseData["seed_capability"] = this.seedCapability;
responseData["home"] = this.home;
@@ -596,23 +602,23 @@ namespace OpenSim.Framework.UserManagement
{
get
{
- return this.agentInventory;
+ return this.inventorySkeleton;
}
set
{
- this.agentInventory = value;
+ this.inventorySkeleton = value;
}
}
- public ArrayList InventoryLibrary
+ public ArrayList InventoryLibrarySkeleton
{
get
{
- return this.inventoryLibrary;
+ return this.inventoryLibrarySkeleton;
}
set
{
- this.inventoryLibrary = value;
+ this.inventoryLibrarySkeleton = value;
}
}
@@ -628,6 +634,18 @@ namespace OpenSim.Framework.UserManagement
}
}
+ public ArrayList InventoryLibraryRoot
+ {
+ get
+ {
+ return this.inventoryLibraryRoot;
+ }
+ set
+ {
+ this.inventoryLibraryRoot = value;
+ }
+ }
+
public string Home
{
get
@@ -665,3 +683,7 @@ namespace OpenSim.Framework.UserManagement
}
}
+
+
+
+
diff --git a/OpenSim/Framework/Communications/LoginService.cs b/OpenSim/Framework/Communications/LoginService.cs
index 8e7cf80..64e323d 100644
--- a/OpenSim/Framework/Communications/LoginService.cs
+++ b/OpenSim/Framework/Communications/LoginService.cs
@@ -8,11 +8,10 @@ using Nwc.XmlRpc;
using OpenSim.Framework.Console;
using OpenSim.Framework.Data;
using OpenSim.Framework.Interfaces;
-using OpenSim.Framework.Inventory;
using OpenSim.Framework.Utilities;
-
+using OpenSim.Framework.Communications;
using OpenSim.Framework.Configuration;
-using InventoryFolder = OpenSim.Framework.Inventory.InventoryFolder;
+
namespace OpenSim.Framework.UserManagement
{
@@ -20,10 +19,12 @@ namespace OpenSim.Framework.UserManagement
{
protected string m_welcomeMessage = "Welcome to OpenSim";
protected UserManagerBase m_userManager = null;
+ protected IInventoryServices m_inventoryServer = null;
- public LoginService(UserManagerBase userManager, string welcomeMess)
+ public LoginService(UserManagerBase userManager, IInventoryServices inventoryServer, string welcomeMess)
{
m_userManager = userManager;
+ m_inventoryServer = inventoryServer;
if (welcomeMess != "")
{
m_welcomeMessage = welcomeMess;
@@ -37,7 +38,6 @@ namespace OpenSim.Framework.UserManagement
/// The response to send
public XmlRpcResponse XmlRpcLoginMethod(XmlRpcRequest request)
{
-
System.Console.WriteLine("Attempting login now...");
XmlRpcResponse response = new XmlRpcResponse();
Hashtable requestData = (Hashtable)request.Params[0];
@@ -85,15 +85,41 @@ namespace OpenSim.Framework.UserManagement
{
LLUUID agentID = userProfile.UUID;
- // Inventory Library Section
- InventoryData inventData = this.CreateInventoryData(agentID);
- ArrayList AgentInventoryArray = inventData.InventoryArray;
+ LLUUID libraryFolderID;
+ LLUUID personalFolderID;
+
+ m_inventoryServer.GetRootFoldersForUser(agentID, out libraryFolderID, out personalFolderID);
+ if (personalFolderID == LLUUID.Zero)
+ {
+ m_inventoryServer.CreateNewUserInventory(libraryFolderID, agentID);
+ m_inventoryServer.GetRootFoldersForUser(agentID, out libraryFolderID, out personalFolderID);
+ }
+
+ // The option "inventory-lib-owner" requires that we return the id of the
+ // owner of the library inventory.
+ Hashtable dynamicStruct = new Hashtable();
+ dynamicStruct["agent_id"] = libraryFolderID.ToStringHyphenated();
+ logResponse.InventoryLibraryOwner.Add(dynamicStruct);
+
+ // The option "inventory-lib-root" requires that we return the id of the
+ // root folder of the library inventory.
+ dynamicStruct = new Hashtable();
+ dynamicStruct["folder_id"] = libraryFolderID.ToStringHyphenated();
+ logResponse.InventoryLibraryRoot.Add(dynamicStruct);
- Hashtable InventoryRootHash = new Hashtable();
- InventoryRootHash["folder_id"] = inventData.RootFolderID.ToStringHyphenated();
- ArrayList InventoryRoot = new ArrayList();
- InventoryRoot.Add(InventoryRootHash);
- userProfile.rootInventoryFolderID = inventData.RootFolderID;
+ // The option "inventory-root" requires that we return the id of the
+ // root folder of the users inventory.
+ dynamicStruct = new Hashtable();
+ dynamicStruct["folder_id"] = personalFolderID.ToStringHyphenated();
+ logResponse.InventoryRoot.Add(dynamicStruct);
+
+ // The option "inventory-skeleton" requires that we return the structure of the
+ // users folder hierachy
+ logResponse.InventorySkeleton = GetInventorySkeleton(personalFolderID);
+
+ // The option "inventory-skel-lib" requires that we return the structure of the
+ // library folder hierachy
+ logResponse.InventoryLibrarySkeleton = GetInventorySkeleton(libraryFolderID);
// Circuit Code
uint circode = (uint)(Util.RandomClass.Next());
@@ -103,10 +129,6 @@ namespace OpenSim.Framework.UserManagement
logResponse.AgentID = agentID.ToStringHyphenated();
logResponse.SessionID = userProfile.currentAgent.sessionID.ToStringHyphenated();
logResponse.SecureSessionID = userProfile.currentAgent.secureSessionID.ToStringHyphenated();
- logResponse.InventoryRoot = InventoryRoot;
- logResponse.InventorySkeleton = AgentInventoryArray;
- logResponse.InventoryLibrary = this.GetInventoryLibrary();
- logResponse.InventoryLibraryOwner = this.GetLibraryOwner();
logResponse.CircuitCode = (Int32)circode;
//logResponse.RegionX = 0; //overwritten
//logResponse.RegionY = 0; //overwritten
@@ -212,76 +234,30 @@ namespace OpenSim.Framework.UserManagement
}
///
- ///
- ///
- ///
- protected virtual ArrayList GetInventoryLibrary()
- {
- //return new ArrayList();
- Hashtable TempHash = new Hashtable();
- TempHash["name"] = "OpenSim Library";
- TempHash["parent_id"] = LLUUID.Zero.ToStringHyphenated();
- TempHash["version"] = 1;
- TempHash["type_default"] = -1;
- TempHash["folder_id"] = "00000112-000f-0000-0000-000100bba000";
- ArrayList temp = new ArrayList();
- temp.Add(TempHash);
-
- TempHash = new Hashtable();
- TempHash["name"] = "Texture Library";
- TempHash["parent_id"] = "00000112-000f-0000-0000-000100bba000";
- TempHash["version"] = 1;
- TempHash["type_default"] = -1;
- TempHash["folder_id"] = "00000112-000f-0000-0000-000100bba001";
- temp.Add(TempHash);
- return temp;
- }
-
- ///
- ///
+ /// Create a structure of the generic inventory structure of a specified folder
///
///
- protected virtual ArrayList GetLibraryOwner()
+ protected virtual ArrayList GetInventorySkeleton(LLUUID folderID)
{
- //for now create random inventory library owner
- Hashtable TempHash = new Hashtable();
- TempHash["agent_id"] = "11111111-1111-0000-0000-000100bba000";
- ArrayList inventoryLibOwner = new ArrayList();
- inventoryLibOwner.Add(TempHash);
- return inventoryLibOwner;
- }
- protected virtual InventoryData CreateInventoryData(LLUUID userID)
- {
- AgentInventory userInventory = new AgentInventory();
- userInventory.CreateRootFolder(userID, false);
+ List folders = m_inventoryServer.RequestFirstLevelFolders(folderID);
- ArrayList AgentInventoryArray = new ArrayList();
- Hashtable TempHash;
- foreach (InventoryFolder InvFolder in userInventory.InventoryFolders.Values)
+ ArrayList temp = new ArrayList();
+ foreach (InventoryFolderBase ifb in folders)
{
- TempHash = new Hashtable();
- TempHash["name"] = InvFolder.FolderName;
- TempHash["parent_id"] = InvFolder.ParentID.ToStringHyphenated();
- TempHash["version"] = (Int32)InvFolder.Version;
- TempHash["type_default"] = (Int32)InvFolder.DefaultType;
- TempHash["folder_id"] = InvFolder.FolderID.ToStringHyphenated();
- AgentInventoryArray.Add(TempHash);
+ LLUUID tempFolderID = ifb.folderID;
+ LLUUID tempParentID = ifb.parentID;
+
+ Hashtable TempHash = new Hashtable();
+ TempHash["folder_id"] = tempFolderID.ToStringHyphenated();
+ TempHash["name"] = ifb.name;
+ TempHash["parent_id"] = tempParentID.ToStringHyphenated();
+ TempHash["type_default"] = ifb.type;
+ TempHash["version"] = ifb.version+1;
+ temp.Add(TempHash);
}
- return new InventoryData(AgentInventoryArray, userInventory.InventoryRoot.FolderID);
- }
-
- public class InventoryData
- {
- public ArrayList InventoryArray = null;
- public LLUUID RootFolderID = LLUUID.Zero;
-
- public InventoryData(ArrayList invList, LLUUID rootID)
- {
- InventoryArray = invList;
- RootFolderID = rootID;
- }
+ return temp;
}
}
}
diff --git a/OpenSim/Framework/Data.MySQL/MySQLInventoryData.cs b/OpenSim/Framework/Data.MySQL/MySQLInventoryData.cs
index 5009d9e..8a7e869 100644
--- a/OpenSim/Framework/Data.MySQL/MySQLInventoryData.cs
+++ b/OpenSim/Framework/Data.MySQL/MySQLInventoryData.cs
@@ -132,7 +132,7 @@ namespace OpenSim.Framework.Data.MySQL
param["?uuid"] = user.ToStringHyphenated();
param["?zero"] = LLUUID.Zero.ToStringHyphenated();
- IDbCommand result = database.Query("SELECT * FROM inventoryfolders WHERE parentFolderID = ?zero AND agentID = ?uuid", param);
+ IDbCommand result = database.Query("SELECT * FROM inventoryfolders WHERE parentFolderID = ?zero AND (agentID = ?uuid OR category = 0)", param);
IDataReader reader = result.ExecuteReader();
List items = database.readInventoryFolders(reader);
@@ -152,40 +152,6 @@ namespace OpenSim.Framework.Data.MySQL
}
///
- /// Returns the users inventory root folder.
- ///
- ///
- ///
- public InventoryFolderBase getUserRootFolder(LLUUID user)
- {
- try
- {
- lock (database)
- {
- Dictionary param = new Dictionary();
- param["?uuid"] = user.ToStringHyphenated();
- param["?zero"] = LLUUID.Zero.ToStringHyphenated();
-
- IDbCommand result = database.Query("SELECT * FROM inventoryfolders WHERE parentFolderID = ?zero AND agentID = ?uuid", param);
- IDataReader reader = result.ExecuteReader();
-
- List items = database.readInventoryFolders(reader);
- InventoryFolderBase rootFolder = items[0]; //should only be one folder with parent set to zero (the root one).
- reader.Close();
- result.Dispose();
-
- return rootFolder;
- }
- }
- catch (Exception e)
- {
- database.Reconnect();
- Console.WriteLine(e.ToString());
- return null;
- }
- }
-
- ///
/// Returns a list of folders in a users inventory contained within the specified folder
///
/// The folder to search
@@ -348,5 +314,27 @@ namespace OpenSim.Framework.Data.MySQL
{
addInventoryFolder(folder);
}
+
+ public void deleteInventoryCategory(InventoryCategory inventoryCategory)
+ {
+ try
+ {
+ lock (database) {
+ IDbCommand cmd = database.Query(string.Format("DELETE FROM inventoryitems WHERE parentFolderID IN (SELECT folderId FROM inventoryfolders WHERE category={0})", (byte)inventoryCategory), null);
+ cmd.ExecuteNonQuery();
+
+
+ cmd = database.Query(string.Format("DELETE FROM inventoryfolders WHERE category={0}", (byte)inventoryCategory), null);
+ cmd.ExecuteNonQuery();
+ }
+
+ }
+ catch (Exception e)
+ {
+ database.Reconnect();
+ Console.WriteLine(e.ToString());
+ }
+ }
+
}
}
diff --git a/OpenSim/Framework/Data.MySQL/MySQLManager.cs b/OpenSim/Framework/Data.MySQL/MySQLManager.cs
index 5037f98..e55606e 100644
--- a/OpenSim/Framework/Data.MySQL/MySQLManager.cs
+++ b/OpenSim/Framework/Data.MySQL/MySQLManager.cs
@@ -41,7 +41,7 @@ namespace OpenSim.Framework.Data.MySQL
///
/// The database connection object
///
- IDbConnection dbcon;
+ MySqlConnection dbcon;
///
/// Connection string for ADO.net
///
@@ -115,10 +115,11 @@ namespace OpenSim.Framework.Data.MySQL
{
MySqlCommand dbcommand = (MySqlCommand)dbcon.CreateCommand();
dbcommand.CommandText = sql;
- foreach (KeyValuePair param in parameters)
- {
- dbcommand.Parameters.Add(param.Key, param.Value);
- }
+ if(parameters != null)
+ foreach (KeyValuePair param in parameters)
+ {
+ dbcommand.Parameters.Add(param.Key, param.Value);
+ }
return (IDbCommand)dbcommand;
}
@@ -149,10 +150,11 @@ namespace OpenSim.Framework.Data.MySQL
{
MySqlCommand dbcommand = (MySqlCommand)dbcon.CreateCommand();
dbcommand.CommandText = sql;
- foreach (KeyValuePair param in parameters)
- {
- dbcommand.Parameters.Add(param.Key, param.Value);
- }
+ if(parameters != null)
+ foreach (KeyValuePair param in parameters)
+ {
+ dbcommand.Parameters.Add(param.Key, param.Value);
+ }
return (IDbCommand)dbcommand;
}
@@ -370,6 +372,8 @@ namespace OpenSim.Framework.Data.MySQL
folder.parentID = new LLUUID((string)reader["parentFolderID"]);
folder.folderID = new LLUUID((string)reader["folderID"]);
folder.name = (string)reader["folderName"];
+ folder.category = (InventoryCategory)((Int16)reader["category"]);
+ folder.type = (Int16)reader["folderType"];
rows.Add(folder);
}
@@ -509,24 +513,32 @@ namespace OpenSim.Framework.Data.MySQL
/// Success?
public bool insertFolder(InventoryFolderBase folder)
{
- string sql = "REPLACE INTO inventoryfolders (folderID, agentID, parentFolderID, folderName) VALUES ";
- sql += "(?folderID, ?agentID, ?parentFolderID, ?folderName)";
-
- Dictionary parameters = new Dictionary();
- parameters["?folderID"] = folder.folderID.ToStringHyphenated();
- parameters["?agentID"] = folder.agentID.ToStringHyphenated();
- parameters["?parentFolderID"] = folder.parentID.ToStringHyphenated();
- parameters["?folderName"] = folder.name;
-
+ string sql = "REPLACE INTO inventoryfolders (folderID, agentID, parentFolderID, folderName, category, folderType) VALUES ";
+ sql += "(?folderID, ?agentID, ?parentFolderID, ?folderName, ?category, ?folderType)";
+
+ MySqlCommand dbcmd = dbcon.CreateCommand();
+ dbcmd.CommandText = sql;
+
+ LLUUID tmpID = folder.folderID;
+ dbcmd.Parameters.Add(new MySqlParameter("?folderID", tmpID.ToStringHyphenated()));
+ dbcmd.Parameters.Add(new MySqlParameter("?folderID", tmpID.ToStringHyphenated()));
+ tmpID = folder.agentID;
+ dbcmd.Parameters.Add(new MySqlParameter("?agentID", tmpID.ToStringHyphenated()));
+ tmpID = folder.parentID;
+ dbcmd.Parameters.Add(new MySqlParameter("?parentFolderID", tmpID.ToStringHyphenated()));
+ dbcmd.Parameters.Add(new MySqlParameter("?folderName", folder.name));
+ MySqlParameter p = dbcmd.Parameters.Add(new MySqlParameter("?category", MySqlDbType.Byte));
+ p.Value = (byte)folder.category;
+
+ p = dbcmd.Parameters.Add(new MySqlParameter("?folderType", MySqlDbType.Byte));
+ p.Value = (byte)folder.type;
+
+
bool returnval = false;
try
{
- IDbCommand result = Query(sql, parameters);
-
- if (result.ExecuteNonQuery() == 1)
+ if (dbcmd.ExecuteNonQuery() == 1)
returnval = true;
-
- result.Dispose();
}
catch (Exception e)
{
diff --git a/OpenSim/Framework/Data.SQLite/SQLiteInventoryStore.cs b/OpenSim/Framework/Data.SQLite/SQLiteInventoryStore.cs
index d3d752f..cac992c 100644
--- a/OpenSim/Framework/Data.SQLite/SQLiteInventoryStore.cs
+++ b/OpenSim/Framework/Data.SQLite/SQLiteInventoryStore.cs
@@ -61,6 +61,7 @@ namespace OpenSim.Framework.Data.SQLite
MainLog.Instance.Verbose("DATASTORE", "Populated Intentory Items Definitions");
ds.AcceptChanges();
+
return;
}
@@ -195,43 +196,16 @@ namespace OpenSim.Framework.Data.SQLite
/// A list of folder objects
public List getUserRootFolders(LLUUID user)
{
- return null;
- }
-
- ///
- /// Returns the users inventory root folder.
- ///
- /// The UUID of the user who is having inventory being returned
- /// Root inventory folder
- public InventoryFolderBase getUserRootFolder(LLUUID user)
- {
List folders = new List();
DataTable inventoryFolderTable = ds.Tables["inventoryfolders"];
- string selectExp = "agentID = '" + user.ToString() + "' AND parentID = '" + LLUUID.Zero.ToString() + "'";
+
+ string selectExp = "parentID = '" + LLUUID.Zero.ToString() + "' AND (agentID = '" + user.ToString() + "' OR category = 0)";
DataRow[] rows = inventoryFolderTable.Select(selectExp);
foreach (DataRow row in rows)
{
folders.Add(this.buildFolder(row));
}
-
- if (folders.Count == 1)
- {
- //we found the root
- //System.Console.WriteLine("found root inventory folder");
- return folders[0];
- }
- else if (folders.Count > 1)
- {
- //err shouldn't be more than one root
- //System.Console.WriteLine("found more than one root inventory folder");
- }
- else if (folders.Count == 0)
- {
- // no root?
- //System.Console.WriteLine("couldn't find root inventory folder");
- }
-
- return null;
+ return folders;
}
///
@@ -270,7 +244,14 @@ namespace OpenSim.Framework.Data.SQLite
/// A class containing folder information
public InventoryFolderBase getInventoryFolder(LLUUID folder)
{
- return null;
+ DataTable inventoryFolderTable = ds.Tables["inventoryfolders"];
+ string selectExp = "UUID = '" + folder.ToString() + "'";
+ DataRow[] rows = inventoryFolderTable.Select(selectExp);
+
+ if (rows.Length == 1)
+ return this.buildFolder(rows[0]);
+ else
+ return null;
}
///
@@ -308,6 +289,11 @@ namespace OpenSim.Framework.Data.SQLite
this.invItemsDa.Update(ds, "inventoryitems");
}
+ //TODO! Implement SQLite deleteInventoryCategory
+ public void deleteInventoryCategory(InventoryCategory inventoryCategory)
+ {
+ }
+
///
/// Adds a new folder specified by folder
///
@@ -326,6 +312,11 @@ namespace OpenSim.Framework.Data.SQLite
this.addFolder(folder);
}
+ //TODO! implement CreateNewUserInventory
+ public void CreateNewUserInventory(LLUUID user)
+ {
+ throw new Exception("Function not implemented");
+ }
/***********************************************************************
*
@@ -350,6 +341,7 @@ namespace OpenSim.Framework.Data.SQLite
createCol(inv, "parentFolderID", typeof(System.String));
createCol(inv, "avatarID", typeof(System.String));
createCol(inv, "creatorsID", typeof(System.String));
+ createCol(inv, "category", typeof(System.Byte));
createCol(inv, "inventoryName", typeof(System.String));
createCol(inv, "inventoryDescription", typeof(System.String));
@@ -373,6 +365,7 @@ namespace OpenSim.Framework.Data.SQLite
createCol(fol, "parentID", typeof(System.String));
createCol(fol, "type", typeof(System.Int32));
createCol(fol, "version", typeof(System.Int32));
+ createCol(fol, "category", typeof(System.Byte));
fol.PrimaryKey = new DataColumn[] { fol.Columns["UUID"] };
return fol;
@@ -415,6 +408,7 @@ namespace OpenSim.Framework.Data.SQLite
folder.parentID = new LLUUID((string)row["parentID"]);
folder.type = Convert.ToInt16(row["type"]);
folder.version = Convert.ToUInt16(row["version"]);
+ folder.category = (InventoryCategory)Convert.ToByte(row["category"]);
return folder;
}
@@ -426,6 +420,7 @@ namespace OpenSim.Framework.Data.SQLite
row["parentID"] = folder.parentID;
row["type"] = folder.type;
row["version"] = folder.version;
+ row["category"] = folder.category;
}
@@ -644,3 +639,7 @@ namespace OpenSim.Framework.Data.SQLite
}
}
+
+
+
+
diff --git a/OpenSim/Framework/Data/InventoryData.cs b/OpenSim/Framework/Data/InventoryData.cs
index 2df26e1..dc857d8 100644
--- a/OpenSim/Framework/Data/InventoryData.cs
+++ b/OpenSim/Framework/Data/InventoryData.cs
@@ -25,15 +25,19 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
+using System;
+using System.Xml.Serialization;
using System.Collections.Generic;
using libsecondlife;
namespace OpenSim.Framework.Data
{
+
+ public enum InventoryCategory : byte { Library, Default, User };
///
/// Inventory Item - contains all the properties associated with an individual inventory piece.
///
- public class InventoryItemBase
+ public class InventoryItemBase : MarshalByRefObject
{
///
/// A UUID containing the ID for the inventory item itself
@@ -66,10 +70,12 @@ namespace OpenSim.Framework.Data
///
/// The name of the inventory item (must be less than 64 characters)
///
+ [XmlElement(ElementName="name")]
public string inventoryName;
///
/// The description of the inventory item (must be less than 64 characters)
///
+ [XmlElement(ElementName = "description")]
public string inventoryDescription;
///
/// A mask containing the permissions for the next owner (cannot be enforced)
@@ -92,7 +98,7 @@ namespace OpenSim.Framework.Data
///
/// A Class for folders which contain users inventory
///
- public class InventoryFolderBase
+ public class InventoryFolderBase : MarshalByRefObject
{
///
/// The name of the folder (64 characters or less)
@@ -118,6 +124,10 @@ namespace OpenSim.Framework.Data
///
///
public ushort version;
+ ///
+ /// Inventory category, Library, Default, System
+ ///
+ public InventoryCategory category;
}
///
@@ -162,13 +172,6 @@ namespace OpenSim.Framework.Data
List getUserRootFolders(LLUUID user);
///
- /// Returns the users inventory root folder.
- ///
- /// The UUID of the user who is having inventory being returned
- /// Root inventory folder
- InventoryFolderBase getUserRootFolder(LLUUID user);
-
- ///
/// Returns a list of inventory folders contained in the folder 'parentID'
///
/// The folder to get subfolders for
@@ -218,5 +221,17 @@ namespace OpenSim.Framework.Data
///
/// The inventory folder
void updateInventoryFolder(InventoryFolderBase folder);
+
+ ///
+ /// Delete a complete inventory category
+ ///
+ /// What folder category shout be deleted
+ void deleteInventoryCategory(InventoryCategory inventoryCategory);
+
+ ///
+ /// Setup the initial folderset of a user
+ ///
+ ///
+ //void CreateNewUserInventory(LLUUID user);
}
}
diff --git a/OpenSim/Framework/General/Configuration/InventoryConfig.cs b/OpenSim/Framework/General/Configuration/InventoryConfig.cs
new file mode 100644
index 0000000..d84609b
--- /dev/null
+++ b/OpenSim/Framework/General/Configuration/InventoryConfig.cs
@@ -0,0 +1,67 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace OpenSim.Framework.Configuration
+{
+ ///
+ /// UserConfig -- For User Server Configuration
+ ///
+ public class InventoryConfig
+ {
+ public string DefaultStartupMsg = "";
+ public string UserServerURL = "";
+ public string UserSendKey = "";
+ public string UserRecvKey = "";
+
+ public string DatabaseProvider = "";
+
+ public int RemotingPort = 8004;
+
+ private ConfigurationMember configMember;
+
+ public InventoryConfig(string description, string filename)
+ {
+ configMember = new ConfigurationMember(filename, description, this.loadConfigurationOptions, this.handleIncomingConfiguration);
+ configMember.performConfigurationRetrieve();
+ }
+
+ public void loadConfigurationOptions()
+ {
+ configMember.addConfigurationOption("default_startup_message", ConfigurationOption.ConfigurationTypes.TYPE_STRING_NOT_EMPTY, "Default Startup Message", "Welcome to OGS", false);
+ configMember.addConfigurationOption("default_user_server", ConfigurationOption.ConfigurationTypes.TYPE_STRING_NOT_EMPTY, "Default User Server URI", "http://127.0.0.1:8002/", false);
+ configMember.addConfigurationOption("user_send_key", ConfigurationOption.ConfigurationTypes.TYPE_STRING, "Key to send to user server", "null", false);
+ configMember.addConfigurationOption("user_recv_key", ConfigurationOption.ConfigurationTypes.TYPE_STRING, "Key to expect from user server", "null", false);
+ configMember.addConfigurationOption("database_provider", ConfigurationOption.ConfigurationTypes.TYPE_STRING, "DLL for database provider", "OpenSim.Framework.Data.MySQL.dll", false);
+ configMember.addConfigurationOption("remoting_port", ConfigurationOption.ConfigurationTypes.TYPE_INT32, "Remoting Listener port", "8004", false);
+
+ }
+
+ public bool handleIncomingConfiguration(string configuration_key, object configuration_result)
+ {
+ switch (configuration_key)
+ {
+ case "default_startup_message":
+ this.DefaultStartupMsg = (string)configuration_result;
+ break;
+ case "default_user_server":
+ this.UserServerURL = (string)configuration_result;
+ break;
+ case "user_send_key":
+ this.UserSendKey = (string)configuration_result;
+ break;
+ case "user_recv_key":
+ this.UserRecvKey = (string)configuration_result;
+ break;
+ case "database_provider":
+ this.DatabaseProvider = (string)configuration_result;
+ break;
+ case "remoting_port":
+ RemotingPort = (int)configuration_result;
+ break;
+ }
+
+ return true;
+ }
+ }
+}
diff --git a/OpenSim/Framework/General/Configuration/UserConfig.cs b/OpenSim/Framework/General/Configuration/UserConfig.cs
index 776b911..16a7de4 100644
--- a/OpenSim/Framework/General/Configuration/UserConfig.cs
+++ b/OpenSim/Framework/General/Configuration/UserConfig.cs
@@ -18,6 +18,9 @@ namespace OpenSim.Framework.Configuration
public uint HttpPort = 8002;
+ public int InventoryServerPort;
+ public string InventoryServerName;
+
private ConfigurationMember configMember;
public UserConfig(string description, string filename)
@@ -37,6 +40,8 @@ namespace OpenSim.Framework.Configuration
configMember.addConfigurationOption("http_port", ConfigurationOption.ConfigurationTypes.TYPE_UINT32, "Http Listener port", "8002", false);
+ configMember.addConfigurationOption("inventory_server_port", ConfigurationOption.ConfigurationTypes.TYPE_INT32, "Portnumber inventory is listening on", "8004", false);
+ configMember.addConfigurationOption("inventory_server_name", ConfigurationOption.ConfigurationTypes.TYPE_STRING, "DNS name of the inventory server", "127.0.0.1", false);
}
public bool handleIncomingConfiguration(string configuration_key, object configuration_result)
@@ -59,6 +64,12 @@ namespace OpenSim.Framework.Configuration
this.DatabaseProvider = (string)configuration_result;
break;
+ case "inventory_server_port":
+ this.InventoryServerPort = (int)configuration_result;
+ break;
+ case "inventory_server_name":
+ this.InventoryServerName = (string)configuration_result;
+ break;
case "http_port":
HttpPort = (uint)configuration_result;
break;
diff --git a/OpenSim/Framework/General/Types/NetworkServersInfo.cs b/OpenSim/Framework/General/Types/NetworkServersInfo.cs
index b65488a..cf194fc 100644
--- a/OpenSim/Framework/General/Types/NetworkServersInfo.cs
+++ b/OpenSim/Framework/General/Types/NetworkServersInfo.cs
@@ -49,6 +49,8 @@ namespace OpenSim.Framework.Types
public int HttpListenerPort = 9000;
public int RemotingListenerPort = 8895;
+ public int InventoryServerPort;
+ public string InventoryServerName = "";
public NetworkServersInfo()
{
@@ -86,7 +88,8 @@ namespace OpenSim.Framework.Types
UserSendKey = config.Configs["Network"].GetString("user_send_key", "null");
UserRecvKey = config.Configs["Network"].GetString("user_recv_key", "null");
AssetURL = config.Configs["Network"].GetString("asset_server_url", "http://127.0.0.1:8003");
-
+ InventoryServerPort = config.Configs["Network"].GetInt("inventory_server_port", 8004);
+ InventoryServerName = config.Configs["Network"].GetString("inventory_server_name", "127.0.0.1");
}
}
}
diff --git a/OpenSim/Framework/General/Types/UUID.cs b/OpenSim/Framework/General/Types/UUID.cs
index 9e9654d..feae4ae 100644
--- a/OpenSim/Framework/General/Types/UUID.cs
+++ b/OpenSim/Framework/General/Types/UUID.cs
@@ -91,12 +91,12 @@ namespace OpenSim.Framework.Types
public void Combine(UUID other)
{
- llUUID.Combine(other.GetLLUUID());
+ LLUUID.Combine(llUUID, other.GetLLUUID());
}
public void Combine(LLUUID other)
{
- llUUID.Combine(other);
+ LLUUID.Combine(llUUID, other);
}
public override bool Equals(Object other)
--
cgit v1.1