* Implement proper emptying of trashcan on standalone

* On standalone, folders (and their items) should now be persistently deleted on trash emptying, as well as immediate child items
* An implementation for grid mode will follow.
This commit is contained in:
Justin Clarke Casey
2008-04-23 17:04:15 +00:00
parent 2a3bdde0fa
commit 4db839c3b8
10 changed files with 115 additions and 15 deletions

View File

@@ -496,6 +496,11 @@ namespace OpenSim.Framework.Communications.Cache
return new List<InventoryItemBase>();
}
/// <summary>
/// This should delete all the items and folders in the given directory.
/// </summary>
/// <param name="remoteClient"></param>
/// <param name="folderID"></param>
public void HandlePurgeInventoryDescendents(IClientAPI remoteClient, LLUUID folderID)
{
// m_log.InfoFormat("[AGENT INVENTORY]: Purging folder {0} for {1} uuid {2}",
@@ -506,14 +511,28 @@ namespace OpenSim.Framework.Communications.Cache
{
if (userProfile.HasInventory)
{
InventoryFolderImpl subFolder = userProfile.RootFolder.HasSubFolder(folderID);
if (subFolder != null)
{
List<InventoryItemBase> items = subFolder.RequestListOfItems();
InventoryFolderImpl purgedFolder = userProfile.RootFolder.HasSubFolder(folderID);
if (purgedFolder != null)
{
// XXX Nasty - have to create a new object to hold details we already have
InventoryFolderBase purgedBaseFolder = new InventoryFolderBase();
purgedBaseFolder.Owner = purgedFolder.Owner;
purgedBaseFolder.ID = purgedFolder.ID;
purgedBaseFolder.Name = purgedFolder.Name;
purgedBaseFolder.ParentID = purgedFolder.ParentID;
purgedBaseFolder.Type = purgedFolder.Type;
purgedBaseFolder.Version = purgedFolder.Version;
m_commsManager.InventoryService.PurgeInventoryFolder(remoteClient.AgentId, purgedBaseFolder);
// XXX Remains temporarily so that we still delete items in the grid case.
List<InventoryItemBase> items = purgedFolder.RequestListOfItems();
foreach (InventoryItemBase item in items)
{
userProfile.DeleteItem(remoteClient.AgentId, item);
}
}
purgedFolder.Purge();
}
}
else