Skip to content

Commit

Permalink
Fixed findUserTopLevelFolderFor. Fixes wrong folder for rezzed Take.
Browse files Browse the repository at this point in the history
  • Loading branch information
appurist committed Dec 17, 2018
1 parent f7903cf commit 0f91179
Showing 1 changed file with 32 additions and 9 deletions.
41 changes: 32 additions & 9 deletions Halcyon/Halcyon.Data.Inventory.MySQL/MysqlStorageImpl.cs
Original file line number Diff line number Diff line change
Expand Up @@ -96,21 +96,18 @@ public InventoryFolderBase findUserFolderForType(UUID owner, int typeId)
}

/// <summary>
/// Returns the most appropriate folder for the given inventory type, or null if one could not be found
/// Returns the folder info for the given folder, or null if one could not be found.
/// </summary>
/// <param name="userId"></param>
/// <param name="type"></param>
/// <returns></returns>
public InventoryFolderBase findUserTopLevelFolderFor(UUID owner, UUID folderID)
public InventoryFolderBase findFolder(UUID owner, UUID folderID)
{
InventoryFolderBase rootFolder = getUserRootFolder(owner);

string query = "SELECT * FROM inventoryfolders WHERE agentID = ?agentId AND folderId = ?folderId AND parentFolderId = ?rootId;";
string query = "SELECT * FROM inventoryfolders WHERE agentID = ?agentId AND folderId = ?folderId;";

Dictionary<string, object> parms = new Dictionary<string, object>();
parms.Add("?agentId", owner);
parms.Add("?folderId", folderID);
parms.Add("?rootId", rootFolder.ID);

try
{
Expand All @@ -121,9 +118,7 @@ public InventoryFolderBase findUserTopLevelFolderFor(UUID owner, UUID folderID)
if (reader.Read())
{
// A null item (because something went wrong) breaks everything in the folder
InventoryFolderBase folder = readInventoryFolder(reader);
folder.Level = InventoryFolderBase.FolderLevel.TopLevel;
return folder;
return readInventoryFolder(reader);
}
else
{
Expand All @@ -140,6 +135,34 @@ public InventoryFolderBase findUserTopLevelFolderFor(UUID owner, UUID folderID)
}
}

/// <summary>
/// Works its way up the parentage and returns the most top-level folder for the given folder, or null if one could not be found.
/// </summary>
/// <param name="userId"></param>
/// <param name="type"></param>
/// <returns></returns>
public InventoryFolderBase findUserTopLevelFolderFor(UUID owner, UUID folderID)
{
InventoryFolderBase rootFolder = getUserRootFolder(owner);
if (folderID == rootFolder.ID)
return rootFolder;

InventoryFolderBase folder = findFolder(owner, folderID);
while (folder != null) {
InventoryFolderBase parentFolder = findFolder(owner, folder.ParentID);
if (parentFolder == null) return null;

if (parentFolder.ID == rootFolder.ID)
{
folder.Level = InventoryFolderBase.FolderLevel.TopLevel;
return folder;
}
// walk up the parentage chain
folder = findFolder(owner, folder.ParentID);
}
return null; // top-level folder not found
}

/// <summary>
/// Returns a list of items in the given folders
/// </summary>
Expand Down

0 comments on commit 0f91179

Please sign in to comment.