private XInventoryFolder GetSuitcaseXFolder(UUID principalID) { // Warp! Root folder for travelers XInventoryFolder[] folders = m_Database.GetFolders( new string[] { "agentID", "type" }, new string[] { principalID.ToString(), "100" }); // This is a special folder type... if (folders != null && folders.Length > 0) return folders[0]; // check to see if we have the old Suitcase folder folders = m_Database.GetFolders( new string[] { "agentID", "folderName", "parentFolderID" }, new string[] { principalID.ToString(), "My Suitcase", UUID.Zero.ToString() }); if (folders != null && folders.Length > 0) { // Move it to under the root folder XInventoryFolder root = GetRootXFolder(principalID); folders[0].parentFolderID = root.folderID; folders[0].type = 100; m_Database.StoreFolder(folders[0]); return folders[0]; } return null; }
/// <summary> /// Return true if the folderID is a subfolder of the Suitcase or the suitcase folder itself /// </summary> /// <param name="folderID"></param> /// <param name="root"></param> /// <param name="suitcase"></param> /// <returns></returns> private bool IsWithinSuitcaseTree(UUID principalID, UUID folderID) { XInventoryFolder suitcase = GetSuitcaseXFolder(principalID); if (suitcase == null) { m_log.WarnFormat("[HG SUITCASE INVENTORY SERVICE]: User {0} does not have a Suitcase folder", principalID); return(false); } List <XInventoryFolder> tree = new List <XInventoryFolder>(); tree.Add(suitcase); // Warp! the tree is the real root folder plus the children of the suitcase folder tree.AddRange(GetFolderTree(principalID, suitcase.folderID)); XInventoryFolder f = tree.Find(delegate(XInventoryFolder fl) { if (fl.folderID == folderID) { return(true); } else { return(false); } }); if (f == null) { return(false); } else { return(true); } }
public override InventoryFolderBase GetRootFolder(UUID principalID) { m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: GetRootFolder for {0}", principalID); // Let's find out the local root folder XInventoryFolder root = GetRootXFolder(principalID); ; if (root == null) { m_log.WarnFormat("[HG SUITCASE INVENTORY SERVICE]: Unable to retrieve local root folder for user {0}", principalID); return null; } // Warp! Root folder for travelers is the suitcase folder XInventoryFolder suitcase = GetSuitcaseXFolder(principalID); if (suitcase == null) { m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: User {0} does not have a Suitcase folder. Creating it...", principalID); // make one, and let's add it to the user's inventory as a direct child of the root folder // In the DB we tag it as type 100, but we use -1 (Unknown) outside suitcase = CreateFolder(principalID, root.folderID, 100, "My Suitcase"); if (suitcase == null) m_log.ErrorFormat("[HG SUITCASE INVENTORY SERVICE]: Unable to create suitcase folder"); m_Database.StoreFolder(suitcase); // Create System folders CreateSystemFolders(principalID, suitcase.folderID); } SetAsNormalFolder(suitcase); return ConvertToOpenSim(suitcase); }
public override InventoryFolderBase GetFolderForType(UUID principalID, FolderType type) { //m_log.DebugFormat("[HG INVENTORY SERVICE]: GetFolderForType for {0} {0}", principalID, type); XInventoryFolder suitcase = GetSuitcaseXFolder(principalID); if (suitcase == null) { m_log.WarnFormat("[HG SUITCASE INVENTORY SERVICE]: Found no suitcase folder for user {0} when looking for child type folder {1}", principalID, type); return(null); } XInventoryFolder[] folders = m_Database.GetFolders( new string[] { "agentID", "type", "parentFolderID" }, new string[] { principalID.ToString(), ((int)type).ToString(), suitcase.folderID.ToString() }); if (folders.Length == 0) { m_log.WarnFormat("[HG SUITCASE INVENTORY SERVICE]: Found no folder for type {0} for user {1}", type, principalID); return(null); } m_log.DebugFormat( "[HG SUITCASE INVENTORY SERVICE]: Found folder {0} {1} for type {2} for user {3}", folders[0].folderName, folders[0].folderID, type, principalID); return(ConvertToOpenSim(folders[0])); }
public override List <InventoryFolderBase> GetInventorySkeleton(UUID principalID) { XInventoryFolder suitcase = GetSuitcaseXFolder(principalID); if (suitcase == null) { m_log.WarnFormat("[HG SUITCASE INVENTORY SERVICE]: Found no suitcase folder for user {0} when looking for inventory skeleton", principalID); return(null); } List <XInventoryFolder> tree = GetFolderTree(principalID, suitcase.folderID); if (tree.Count == 0) { return(null); } List <InventoryFolderBase> folders = new List <InventoryFolderBase>(); foreach (XInventoryFolder x in tree) { folders.Add(ConvertToOpenSim(x)); } SetAsNormalFolder(suitcase); folders.Add(ConvertToOpenSim(suitcase)); return(folders); }
public virtual InventoryFolderBase GetRootFolder(UUID principalID) { XInventoryFolder[] folders = m_Database.GetFolders( new string[] { "agentID", "parentFolderID" }, new string[] { principalID.ToString(), UUID.Zero.ToString() }); if (folders.Length == 0) { return(null); } XInventoryFolder root = null; foreach (XInventoryFolder folder in folders) { if (folder.folderName == "My Inventory") { root = folder; break; } } if (root == null) // oops { root = folders[0]; } return(ConvertToOpenSim(root)); }
public override InventoryFolderBase GetRootFolder(UUID principalID) { m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: GetRootFolder for {0}", principalID); // Let's find out the local root folder XInventoryFolder root = GetRootXFolder(principalID); if (root == null) { m_log.WarnFormat("[HG SUITCASE INVENTORY SERVICE]: Unable to retrieve local root folder for user {0}", principalID); return(null); } // Warp! Root folder for travelers is the suitcase folder XInventoryFolder suitcase = GetSuitcaseXFolder(principalID); if (suitcase == null) { m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: User {0} does not have a Suitcase folder. Creating it...", principalID); // Create the My Suitcase folder under the user's root folder. // In the DB we tag it as type 100, but we use type 8 (Folder) outside, as this affects the sort order. suitcase = CreateFolder(principalID, root.folderID, (int)FolderType.Suitcase, InventoryFolderBase.SUITCASE_FOLDER_NAME); if (suitcase == null) { m_log.ErrorFormat("[HG SUITCASE INVENTORY SERVICE]: Unable to create suitcase folder"); return(null); } CreateSystemFolders(principalID, suitcase.folderID); } SetAsNormalFolder(suitcase); return(ConvertToOpenSim(suitcase)); }
public virtual bool UpdateFolder(InventoryFolderBase folder) { XInventoryFolder xFolder = ConvertFromOpenSim(folder); InventoryFolderBase check = GetFolder(folder); if (check == null) { return(AddFolder(folder)); } if (check.Type != -1 || xFolder.type != -1) { if (xFolder.version > check.Version) { return(false); } check.Version = (ushort)xFolder.version; xFolder = ConvertFromOpenSim(check); return(m_Database.StoreFolder(xFolder)); } if (xFolder.version < check.Version) { xFolder.version = check.Version; } xFolder.folderID = check.ID; return(m_Database.StoreFolder(xFolder)); }
private XInventoryFolder GetSuitcaseXFolder(UUID principalID) { // Warp! Root folder for travelers XInventoryFolder[] folders = m_Database.GetFolders( new string[] { "agentID", "type" }, new string[] { principalID.ToString(), ((int)FolderType.Suitcase).ToString() }); if (folders != null && folders.Length > 0) { return(folders[0]); } // check to see if we have the old Suitcase folder folders = m_Database.GetFolders( new string[] { "agentID", "folderName", "parentFolderID" }, new string[] { principalID.ToString(), InventoryFolderBase.SUITCASE_FOLDER_NAME, UUID.Zero.ToString() }); if (folders != null && folders.Length > 0) { // Move it to under the root folder XInventoryFolder root = GetRootXFolder(principalID); folders[0].parentFolderID = root.folderID; folders[0].type = (int)FolderType.Suitcase; m_Database.StoreFolder(folders[0]); return(folders[0]); } return(null); }
/// <summary> /// Return true if the folderID is a subfolder of the Suitcase or the suitcase folder itself /// </summary> /// <param name="folderID"></param> /// <param name="root"></param> /// <param name="suitcase"></param> /// <returns></returns> private bool IsWithinSuitcaseTree(UUID principalID, UUID folderID) { XInventoryFolder suitcase = GetSuitcaseXFolder(principalID); if (suitcase == null) { m_log.WarnFormat("[HG SUITCASE INVENTORY SERVICE]: User {0} does not have a Suitcase folder", principalID); return(false); } List <XInventoryFolder> tree = new List <XInventoryFolder>(); tree.Add(suitcase); // Warp! the tree is the real root folder plus the children of the suitcase folder tree.AddRange(GetFolderTree(principalID, suitcase.folderID)); // Also add the Current Outfit folder to the list of available folders XInventoryFolder folder = GetCurrentOutfitXFolder(principalID); if (folder != null) { tree.Add(folder); } XInventoryFolder f = tree.Find(delegate(XInventoryFolder fl) { return(fl.folderID == folderID); }); return(f != null); }
public bool StoreFolder(XInventoryFolder folder) { if (folder.folderName.Length > 64) { folder.folderName = folder.folderName.Substring(0, 64); } return(m_Folders.Store(folder)); }
public bool StoreFolder(XInventoryFolder folder) { m_allFolders[folder.folderID] = folder.Clone(); // Console.WriteLine("Added folder {0} {1}", folder.folderName, folder.folderID); return(true); }
public override InventoryCollection GetUserInventory(UUID userID) { m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: Get Suitcase inventory for user {0}", userID); InventoryCollection userInventory = new InventoryCollection(); userInventory.UserID = userID; userInventory.Folders = new List <InventoryFolderBase>(); userInventory.Items = new List <InventoryItemBase>(); XInventoryFolder suitcase = GetSuitcaseXFolder(userID); if (suitcase == null) { m_log.WarnFormat("[HG SUITCASE INVENTORY SERVICE]: Found no suitcase folder for user {0} when looking for user inventory", userID); return(null); } List <XInventoryFolder> tree = GetFolderTree(userID, suitcase.folderID); if (tree == null || (tree != null && tree.Count == 0)) { SetAsNormalFolder(suitcase); userInventory.Folders.Add(ConvertToOpenSim(suitcase)); return(userInventory); } List <InventoryItemBase> items; foreach (XInventoryFolder f in tree) { // Add the items of this subfolder items = GetFolderItems(userID, f.folderID); if (items != null && items.Count > 0) { userInventory.Items.AddRange(items); } // Add the folder itself userInventory.Folders.Add(ConvertToOpenSim(f)); } items = GetFolderItems(userID, suitcase.folderID); if (items != null && items.Count > 0) { userInventory.Items.AddRange(items); } SetAsNormalFolder(suitcase); userInventory.Folders.Add(ConvertToOpenSim(suitcase)); m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: GetUserInventory for user {0} returning {1} folders and {2} items", userID, userInventory.Folders.Count, userInventory.Items.Count); return(userInventory); }
public virtual bool AddFolder(InventoryFolderBase folder) { InventoryFolderBase check = GetFolder(folder); if (check != null) { return(false); } XInventoryFolder xFolder = ConvertFromOpenSim(folder); return(m_Database.StoreFolder(xFolder)); }
// CM Helpers // protected InventoryFolderBase ConvertToOpenSim(XInventoryFolder folder) { InventoryFolderBase newFolder = new InventoryFolderBase(); newFolder.ParentID = folder.parentFolderID; newFolder.Type = (short)folder.type; newFolder.Version = (ushort)folder.version; newFolder.Name = folder.folderName; newFolder.Owner = folder.agentID; newFolder.ID = folder.folderID; return(newFolder); }
protected XInventoryFolder ConvertFromOpenSim(InventoryFolderBase folder) { XInventoryFolder newFolder = new XInventoryFolder(); newFolder.parentFolderID = folder.ParentID; newFolder.type = (int)folder.Type; newFolder.version = (int)folder.Version; newFolder.folderName = folder.Name; newFolder.agentID = folder.Owner; newFolder.folderID = folder.ID; return(newFolder); }
protected XInventoryFolder CreateFolder(UUID principalID, UUID parentID, int type, string name) { XInventoryFolder newFolder = new XInventoryFolder(); newFolder.folderName = name; newFolder.type = type; newFolder.version = 1; newFolder.folderID = UUID.Random(); newFolder.agentID = principalID; newFolder.parentFolderID = parentID; m_Database.StoreFolder(newFolder); return(newFolder); }
// CM Helpers // protected InventoryFolderBase ConvertToOpenSim(XInventoryFolder folder) { InventoryFolderBase newFolder = new InventoryFolderBase(); newFolder.ParentID = folder.parentFolderID; newFolder.Type = (short)folder.type; //// Viewer can't understand anything that's not in it's LLFolderType enum //if (newFolder.Type == InventoryItemBase.SUITCASE_FOLDER_TYPE) // newFolder.Type = InventoryItemBase.SUITCASE_FOLDER_FAKE_TYPE; newFolder.Version = (ushort)folder.version; newFolder.Name = folder.folderName; newFolder.Owner = folder.agentID; newFolder.ID = folder.folderID; return(newFolder); }
public override InventoryFolderBase GetRootFolder(UUID principalID) { // Warp! Root folder for travelers XInventoryFolder[] folders = m_Database.GetFolders( new string[] { "agentID", "folderName" }, new string[] { principalID.ToString(), "My Suitcase" }); if (folders.Length > 0) { return(ConvertToOpenSim(folders[0])); } // make one XInventoryFolder suitcase = CreateFolder(principalID, UUID.Zero, (int)AssetType.Folder, "My Suitcase"); return(ConvertToOpenSim(suitcase)); }
public virtual bool AddFolder(InventoryFolderBase folder) { // m_log.DebugFormat("[XINVENTORY]: Add folder {0} type {1} in parent {2}", folder.Name, folder.Type, folder.ParentID); InventoryFolderBase check = GetFolder(folder); if (check != null) { return(false); } if (folder.Type != (short)AssetType.Folder && folder.Type != (short)AssetType.Unknown) { InventoryFolderBase rootFolder = GetRootFolder(folder.Owner); if (rootFolder == null) { m_log.WarnFormat( "[XINVENTORY]: Found no root folder for {0} in AddFolder() when looking for {1}", folder.Owner, folder.Type); return(false); } // Check we're not trying to add this as a system folder. if (folder.ParentID == rootFolder.ID) { InventoryFolderBase existingSystemFolder = GetSystemFolderForType(rootFolder, (AssetType)folder.Type); if (existingSystemFolder != null) { m_log.WarnFormat( "[XINVENTORY]: System folder of type {0} already exists when tried to add {1} to {2} for {3}", folder.Type, folder.Name, folder.ParentID, folder.Owner); return(false); } } } XInventoryFolder xFolder = ConvertFromOpenSim(folder); return(m_Database.StoreFolder(xFolder)); }
public override InventoryFolderBase GetRootFolder(UUID principalID) { //m_log.DebugFormat("[HG INVENTORY SERVICE]: GetRootFolder for {0}", principalID); // Warp! Root folder for travelers XInventoryFolder[] folders = m_Database.GetFolders( new string[] { "agentID", "folderName" }, new string[] { principalID.ToString(), "My Suitcase" }); if (folders.Length > 0) { return(ConvertToOpenSim(folders[0])); } // make one XInventoryFolder suitcase = CreateFolder(principalID, UUID.Zero, (int)FolderType.Suitcase, "My Suitcase"); return(ConvertToOpenSim(suitcase)); }
// CM Helpers // protected InventoryFolderBase ConvertToOpenSim(XInventoryFolder folder) { InventoryFolderBase newFolder = new InventoryFolderBase(); newFolder.ParentID = folder.parentFolderID; newFolder.Type = (short)folder.type; // Viewer can't understand anything that's not in it's LLFolderType enum if (newFolder.Type == 100) { newFolder.Type = -1; } newFolder.Version = (ushort)folder.version; newFolder.Name = folder.folderName; newFolder.Owner = folder.agentID; newFolder.ID = folder.folderID; return(newFolder); }
public override List<InventoryFolderBase> GetInventorySkeleton(UUID principalID) { XInventoryFolder suitcase = GetSuitcaseXFolder(principalID); List<XInventoryFolder> tree = GetFolderTree(principalID, suitcase.folderID); if (tree == null || (tree != null && tree.Count == 0)) return null; List<InventoryFolderBase> folders = new List<InventoryFolderBase>(); foreach (XInventoryFolder x in tree) { folders.Add(ConvertToOpenSim(x)); } SetAsNormalFolder(suitcase); folders.Add(ConvertToOpenSim(suitcase)); return folders; }
private XInventoryFolder GetCurrentOutfitXFolder(UUID userID) { XInventoryFolder root = GetRootXFolder(userID); if (root == null) { return(null); } XInventoryFolder[] folders = m_Database.GetFolders( new string[] { "agentID", "type", "parentFolderID" }, new string[] { userID.ToString(), ((int)FolderType.CurrentOutfit).ToString(), root.folderID.ToString() }); if (folders.Length == 0) { return(null); } return(folders[0]); }
public virtual bool UpdateFolder(InventoryFolderBase folder) { // m_log.DebugFormat("[XINVENTORY]: Update folder {0} {1} ({2})", folder.Name, folder.Type, folder.ID); XInventoryFolder xFolder = ConvertFromOpenSim(folder); InventoryFolderBase check = GetFolder(folder); if (check == null) { return(AddFolder(folder)); } if ((check.Type != (short)AssetType.Unknown || xFolder.type != (short)AssetType.Unknown) && (check.Type != (short)AssetType.OutfitFolder || xFolder.type != (short)AssetType.OutfitFolder)) { if (xFolder.version < check.Version) { // m_log.DebugFormat("[XINVENTORY]: {0} < {1} can't do", xFolder.version, check.Version); return(false); } check.Version = (ushort)xFolder.version; xFolder = ConvertFromOpenSim(check); // m_log.DebugFormat( // "[XINVENTORY]: Storing version only update to system folder {0} {1} {2}", // xFolder.folderName, xFolder.version, xFolder.type); return(m_Database.StoreFolder(xFolder)); } if (xFolder.version < check.Version) { xFolder.version = check.Version; } xFolder.folderID = check.ID; return(m_Database.StoreFolder(xFolder)); }
public bool MoveFolder(string id, string newParent) { // Don't use GetFolders() here - it takes a clone! XInventoryFolder folder = m_allFolders[new UUID(id)]; if (folder == null) return false; folder.parentFolderID = new UUID(newParent); // XInventoryFolder[] newParentFolders // = GetFolders(new string[] { "folderID" }, new string[] { folder.parentFolderID.ToString() }); // Console.WriteLine( // "Moved folder {0} {1}, to {2} {3}", // folder.folderName, folder.folderID, newParentFolders[0].folderName, folder.parentFolderID); // TODO: Really need to implement folder version incrementing, though this should be common code anyway, // not reimplemented in each db plugin. return true; }
private void SetAsNormalFolder(XInventoryFolder suitcase) { //suitcase.type = InventoryItemBase.SUITCASE_FOLDER_FAKE_TYPE; }
public virtual bool CreateUserInventory(UUID principalID) { // This is braindeaad. We can't ever communicate that we fixed // an existing inventory. Well, just return root folder status, // but check sanity anyway. // bool result = false; InventoryFolderBase rootFolder = GetRootFolder(principalID); if (rootFolder == null) { rootFolder = ConvertToOpenSim(CreateFolder(principalID, UUID.Zero, (int)AssetType.RootFolder, "My Inventory")); result = true; } XInventoryFolder[] sysFolders = GetSystemFolders(principalID, rootFolder.ID); if (!Array.Exists(sysFolders, delegate(XInventoryFolder f) { if (f.type == (int)AssetType.Animation) { return(true); } return(false); })) { CreateFolder(principalID, rootFolder.ID, (int)AssetType.Animation, "Animations"); } if (!Array.Exists(sysFolders, delegate(XInventoryFolder f) { if (f.type == (int)AssetType.Bodypart) { return(true); } return(false); })) { CreateFolder(principalID, rootFolder.ID, (int)AssetType.Bodypart, "Body Parts"); } if (!Array.Exists(sysFolders, delegate(XInventoryFolder f) { if (f.type == (int)AssetType.CallingCard) { return(true); } return(false); })) { XInventoryFolder folder = CreateFolder(principalID, rootFolder.ID, (int)AssetType.CallingCard, "Calling Cards"); folder = CreateFolder(principalID, folder.folderID, (int)AssetType.CallingCard, "Friends"); CreateFolder(principalID, folder.folderID, (int)AssetType.CallingCard, "All"); } if (!Array.Exists(sysFolders, delegate(XInventoryFolder f) { if (f.type == (int)AssetType.Clothing) { return(true); } return(false); })) { CreateFolder(principalID, rootFolder.ID, (int)AssetType.Clothing, "Clothing"); } if (!Array.Exists(sysFolders, delegate(XInventoryFolder f) { if (f.type == (int)AssetType.CurrentOutfitFolder) { return(true); } return(false); })) { CreateFolder(principalID, rootFolder.ID, (int)AssetType.CurrentOutfitFolder, "Current Outfit"); } if (!Array.Exists(sysFolders, delegate(XInventoryFolder f) { if (f.type == (int)AssetType.FavoriteFolder) { return(true); } return(false); })) { CreateFolder(principalID, rootFolder.ID, (int)AssetType.FavoriteFolder, "Favorites"); } if (!Array.Exists(sysFolders, delegate(XInventoryFolder f) { if (f.type == (int)AssetType.Gesture) { return(true); } return(false); })) { CreateFolder(principalID, rootFolder.ID, (int)AssetType.Gesture, "Gestures"); } if (!Array.Exists(sysFolders, delegate(XInventoryFolder f) { if (f.type == (int)AssetType.Landmark) { return(true); } return(false); })) { CreateFolder(principalID, rootFolder.ID, (int)AssetType.Landmark, "Landmarks"); } if (!Array.Exists(sysFolders, delegate(XInventoryFolder f) { if (f.type == (int)AssetType.LostAndFoundFolder) { return(true); } return(false); })) { CreateFolder(principalID, rootFolder.ID, (int)AssetType.LostAndFoundFolder, "Lost And Found"); } if (!Array.Exists(sysFolders, delegate(XInventoryFolder f) { if (f.type == (int)AssetType.Notecard) { return(true); } return(false); })) { CreateFolder(principalID, rootFolder.ID, (int)AssetType.Notecard, "Notecards"); } if (!Array.Exists(sysFolders, delegate(XInventoryFolder f) { if (f.type == (int)AssetType.Object) { return(true); } return(false); })) { CreateFolder(principalID, rootFolder.ID, (int)AssetType.Object, "Objects"); } if (!Array.Exists(sysFolders, delegate(XInventoryFolder f) { if (f.type == (int)AssetType.SnapshotFolder) { return(true); } return(false); })) { CreateFolder(principalID, rootFolder.ID, (int)AssetType.SnapshotFolder, "Photo Album"); } if (!Array.Exists(sysFolders, delegate(XInventoryFolder f) { if (f.type == (int)AssetType.LSLText) { return(true); } return(false); })) { CreateFolder(principalID, rootFolder.ID, (int)AssetType.LSLText, "Scripts"); } if (!Array.Exists(sysFolders, delegate(XInventoryFolder f) { if (f.type == (int)AssetType.Sound) { return(true); } return(false); })) { CreateFolder(principalID, rootFolder.ID, (int)AssetType.Sound, "Sounds"); } if (!Array.Exists(sysFolders, delegate(XInventoryFolder f) { if (f.type == (int)AssetType.Texture) { return(true); } return(false); })) { CreateFolder(principalID, rootFolder.ID, (int)AssetType.Texture, "Textures"); } if (!Array.Exists(sysFolders, delegate(XInventoryFolder f) { if (f.type == (int)AssetType.TrashFolder) { return(true); } return(false); })) { CreateFolder(principalID, rootFolder.ID, (int)AssetType.TrashFolder, "Trash"); } return(result); }
public bool StoreFolder(XInventoryFolder folder) { return(m_Folders.Store(folder)); }
private void SetAsNormalFolder(XInventoryFolder suitcase) { suitcase.type = (short)AssetType.Folder; }