also allow purge/delete of LostAndFound folder, or we can not clean it with recent viewers

master
UbitUmarov 2020-06-09 04:20:18 +01:00
parent 5b338fb31a
commit 444a6b707b
1 changed files with 32 additions and 2 deletions

View File

@ -456,7 +456,8 @@ namespace OpenSim.Services.InventoryService
//
foreach (UUID id in folderIDs)
{
if (onlyIfTrash && !ParentIsTrash(id))
//if (onlyIfTrash && !ParentIsTrash(id))
if (onlyIfTrash && !ParentIsTrashOrLost(id))
continue;
//m_log.InfoFormat("[XINVENTORY SERVICE]: Delete folder {0}", id);
InventoryFolderBase f = new InventoryFolderBase();
@ -478,7 +479,8 @@ namespace OpenSim.Services.InventoryService
if (!m_AllowDelete)
return false;
if (onlyIfTrash && !ParentIsTrash(folder.ID))
//if (onlyIfTrash && !ParentIsTrash(folder.ID))
if (onlyIfTrash && !ParentIsTrashOrLost(folder.ID))
return false;
XInventoryFolder[] subFolders = m_Database.GetFolders(
@ -781,5 +783,33 @@ namespace OpenSim.Services.InventoryService
}
return false;
}
private bool ParentIsTrashOrLost(UUID folderID)
{
XInventoryFolder[] folder = m_Database.GetFolders(new string[] { "folderID" }, new string[] { folderID.ToString() });
if (folder.Length < 1)
return false;
if (folder[0].type == (int)FolderType.Trash || folder[0].type == (int)FolderType.LostAndFound)
return true;
UUID parentFolder = folder[0].parentFolderID;
while (parentFolder != UUID.Zero)
{
XInventoryFolder[] parent = m_Database.GetFolders(new string[] { "folderID" }, new string[] { parentFolder.ToString() });
if (parent.Length < 1)
return false;
if (parent[0].type == (int)FolderType.Trash || folder[0].type == (int)FolderType.LostAndFound)
return true;
if (parent[0].type == (int)FolderType.Root)
return false;
parentFolder = parent[0].parentFolderID;
}
return false;
}
}
}