From 304c78bbbbc9a176d70d2967a3f703f2e545565c Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Sun, 6 Sep 2009 19:30:03 +0100
Subject: Temporarily re-enable save iar test by manually insert the item into
the old cache during the test
---
.../Inventory/Archiver/InventoryArchiveWriteRequest.cs | 7 +++++++
.../Inventory/Archiver/Tests/InventoryArchiverTests.cs | 15 ++++++++++-----
2 files changed, 17 insertions(+), 5 deletions(-)
(limited to 'OpenSim/Region/CoreModules/Avatar/Inventory/Archiver')
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
index 18728c6..6653516 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
@@ -207,6 +207,13 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
InventoryFolderImpl inventoryFolder = null;
InventoryItemBase inventoryItem = null;
+ // XXX: Very temporarily, drop and refetch inventory to make sure we have any newly created items in cache
+ // This will disappear very soon once we stop using the old cached inventory.
+ /*
+ m_userInfo.DropInventory();
+ m_userInfo.FetchInventory();
+ */
+
if (!m_userInfo.HasReceivedInventory)
{
// If the region server has access to the user admin service (by which users are created),
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
index a151c9d..2ad6f1a 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
@@ -77,7 +77,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
///
// Commenting for now! The mock inventory service needs more beef, at least for
// GetFolderForType
- //[Test]
+ [Test]
public void TestSaveIarV0_1()
{
TestHelper.InMethod();
@@ -93,11 +93,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
string userFirstName = "Jock";
string userLastName = "Stirrup";
UUID userId = UUID.Parse("00000000-0000-0000-0000-000000000020");
- // CachedUserInfo userInfo;
+ CachedUserInfo userInfo;
lock (this)
{
- UserProfileTestUtils.CreateUserWithInventory(
+ userInfo = UserProfileTestUtils.CreateUserWithInventory(
cm, userFirstName, userLastName, userId, InventoryReceived);
Monitor.Wait(this, 60000);
}
@@ -136,18 +136,23 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
item1.Name = "My Little Dog";
item1.AssetID = asset1.FullID;
item1.ID = item1Id;
- //userInfo.RootFolder.FindFolderByPath("Objects").ID;
+ InventoryFolderImpl objsFolder = userInfo.RootFolder.FindFolderByPath("Objects");
//InventoryFolderBase objsFolder = scene.InventoryService.GetFolderForType(userId, AssetType.Object);
Console.WriteLine("here2");
+ /*
IInventoryService inventoryService = scene.InventoryService;
InventoryFolderBase rootFolder = inventoryService.GetRootFolder(userId);
InventoryCollection rootContents = inventoryService.GetFolderContent(userId, rootFolder.ID);
+ */
+ /*
InventoryFolderBase objsFolder = null;
foreach (InventoryFolderBase folder in rootContents.Folders)
if (folder.Name == "Objects")
objsFolder = folder;
+ */
item1.Folder = objsFolder.ID;
scene.AddInventoryItem(userId, item1);
+ userInfo.AddItem(item1);
MemoryStream archiveWriteStream = new MemoryStream();
archiverModule.OnInventoryArchiveSaved += SaveCompleted;
@@ -155,7 +160,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
mre.Reset();
archiverModule.ArchiveInventory(
Guid.NewGuid(), userFirstName, userLastName, "Objects", archiveWriteStream);
- mre.WaitOne();
+ mre.WaitOne(60000, false);
byte[] archive = archiveWriteStream.ToArray();
MemoryStream archiveReadStream = new MemoryStream(archive);
--
cgit v1.1
From 8616230fcffbc5c8a919e4ee721be7f871d9f698 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Sun, 6 Sep 2009 20:04:18 +0100
Subject: refactor: replace some uses of iar module reference with scene
instead
---
.../Archiver/InventoryArchiveWriteRequest.cs | 22 ++++++++++++++++------
.../Inventory/Archiver/InventoryArchiverModule.cs | 4 ++--
2 files changed, 18 insertions(+), 8 deletions(-)
(limited to 'OpenSim/Region/CoreModules/Avatar/Inventory/Archiver')
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
index 6653516..da54469 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
@@ -39,6 +39,7 @@ using OpenSim.Framework.Serialization.External;
using OpenSim.Framework.Communications;
using OpenSim.Framework.Communications.Cache;
using OpenSim.Framework.Communications.Osp;
+using OpenSim.Region.Framework.Scenes;
using OpenSim.Region.CoreModules.World.Archiver;
using OpenSim.Region.Framework.Scenes;
@@ -60,6 +61,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
protected UuidGatherer m_assetGatherer;
///
+ /// We only use this to request modules
+ ///
+ protected Scene m_scene;
+
+ ///
/// ID of this request
///
protected Guid m_id;
@@ -83,10 +89,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
/// Constructor
///
public InventoryArchiveWriteRequest(
- Guid id, InventoryArchiverModule module, CachedUserInfo userInfo, string invPath, string savePath)
+ Guid id, InventoryArchiverModule module, Scene scene,
+ CachedUserInfo userInfo, string invPath, string savePath)
: this(
id,
module,
+ scene,
userInfo,
invPath,
new GZipStream(new FileStream(savePath, FileMode.Create), CompressionMode.Compress))
@@ -97,10 +105,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
/// Constructor
///
public InventoryArchiveWriteRequest(
- Guid id, InventoryArchiverModule module, CachedUserInfo userInfo, string invPath, Stream saveStream)
+ Guid id, InventoryArchiverModule module, Scene scene,
+ CachedUserInfo userInfo, string invPath, Stream saveStream)
{
m_id = id;
m_module = module;
+ m_scene = scene;
m_userInfo = userInfo;
m_invPath = invPath;
m_saveStream = saveStream;
@@ -135,7 +145,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
m_userUuids[inventoryItem.CreatorIdAsUuid] = 1;
InventoryItemBase saveItem = (InventoryItemBase)inventoryItem.Clone();
- saveItem.CreatorId = OspResolver.MakeOspa(saveItem.CreatorIdAsUuid, m_module.CommsManager);
+ saveItem.CreatorId = OspResolver.MakeOspa(saveItem.CreatorIdAsUuid, m_scene.CommsManager);
string serialization = UserInventoryItemSerializer.Serialize(saveItem);
m_archiveWriter.WriteFile(filename, serialization);
@@ -222,7 +232,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
//
// FIXME: FetchInventory should probably be assumed to by async anyway, since even standalones might
// use a remote inventory service, though this is vanishingly rare at the moment.
- if (null == m_module.CommsManager.UserAdminService)
+ if (null == m_scene.CommsManager.UserAdminService)
{
m_log.ErrorFormat(
"[INVENTORY ARCHIVER]: Have not yet received inventory info for user {0} {1}",
@@ -313,7 +323,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
SaveUsers();
new AssetsRequest(
new AssetsArchiver(m_archiveWriter), m_assetUuids.Keys,
- m_module.AssetService, ReceivedAllAssets).Execute();
+ m_scene.AssetService, ReceivedAllAssets).Execute();
}
///
@@ -327,7 +337,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
{
// Record the creator of this item
CachedUserInfo creator
- = m_module.CommsManager.UserProfileCacheService.GetUserDetails(creatorId);
+ = m_scene.CommsManager.UserProfileCacheService.GetUserDetails(creatorId);
if (creator != null)
{
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs
index 55d7997..36e17b4 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs
@@ -126,7 +126,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
CachedUserInfo userInfo = GetUserInfo(firstName, lastName);
if (userInfo != null)
- new InventoryArchiveWriteRequest(id, this, userInfo, invPath, saveStream).Execute();
+ new InventoryArchiveWriteRequest(id, this, m_aScene, userInfo, invPath, saveStream).Execute();
}
}
@@ -137,7 +137,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
CachedUserInfo userInfo = GetUserInfo(firstName, lastName);
if (userInfo != null)
- new InventoryArchiveWriteRequest(id, this, userInfo, invPath, savePath).Execute();
+ new InventoryArchiveWriteRequest(id, this, m_aScene, userInfo, invPath, savePath).Execute();
}
}
--
cgit v1.1
From 79c22651d7673b61a0c62786eb16f8b6433d6928 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Sun, 6 Sep 2009 20:16:56 +0100
Subject: refactor: use direct scene reference in inventory archive read
request
---
.../Archiver/InventoryArchiveReadRequest.cs | 26 ++++++++++++----------
.../Archiver/InventoryArchiveWriteRequest.cs | 3 +--
.../Inventory/Archiver/InventoryArchiverModule.cs | 20 +++++------------
.../Archiver/Tests/InventoryArchiverTests.cs | 2 +-
4 files changed, 21 insertions(+), 30 deletions(-)
(limited to 'OpenSim/Region/CoreModules/Avatar/Inventory/Archiver')
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
index 38bd149..bb40450 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
@@ -42,6 +42,7 @@ using OpenSim.Framework.Communications.Osp;
using OpenSim.Framework.Serialization;
using OpenSim.Framework.Serialization.External;
using OpenSim.Region.CoreModules.World.Archiver;
+using OpenSim.Region.Framework.Scenes;
using OpenSim.Services.Interfaces;
namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
@@ -56,31 +57,32 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
private string m_invPath;
///
+ /// We only use this to request modules
+ ///
+ protected Scene m_scene;
+
+ ///
/// The stream from which the inventory archive will be loaded.
///
private Stream m_loadStream;
- protected CommunicationsManager m_commsManager;
- protected IAssetService m_assetService;
-
public InventoryArchiveReadRequest(
- CachedUserInfo userInfo, string invPath, string loadPath, CommunicationsManager commsManager, IAssetService assetService)
+ Scene scene, CachedUserInfo userInfo, string invPath, string loadPath)
: this(
+ scene,
userInfo,
invPath,
- new GZipStream(new FileStream(loadPath, FileMode.Open), CompressionMode.Decompress),
- commsManager, assetService)
+ new GZipStream(new FileStream(loadPath, FileMode.Open), CompressionMode.Decompress))
{
}
public InventoryArchiveReadRequest(
- CachedUserInfo userInfo, string invPath, Stream loadStream, CommunicationsManager commsManager, IAssetService assetService)
+ Scene scene, CachedUserInfo userInfo, string invPath, Stream loadStream)
{
+ m_scene = scene;
m_userInfo = userInfo;
m_invPath = invPath;
m_loadStream = loadStream;
- m_commsManager = commsManager;
- m_assetService = assetService;
}
///
@@ -106,7 +108,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
//
// FIXME: FetchInventory should probably be assumed to by async anyway, since even standalones might
// use a remote inventory service, though this is vanishingly rare at the moment.
- if (null == m_commsManager.UserAdminService)
+ if (null == m_scene.CommsManager.UserAdminService)
{
m_log.ErrorFormat(
"[INVENTORY ARCHIVER]: Have not yet received inventory info for user {0} {1}",
@@ -167,7 +169,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
// Don't use the item ID that's in the file
item.ID = UUID.Random();
- UUID ospResolvedId = OspResolver.ResolveOspa(item.CreatorId, m_commsManager);
+ UUID ospResolvedId = OspResolver.ResolveOspa(item.CreatorId, m_scene.CommsManager);
if (UUID.Zero != ospResolvedId)
item.CreatorIdAsUuid = ospResolvedId;
@@ -371,7 +373,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
asset.Type = assetType;
asset.Data = data;
- m_assetService.Store(asset);
+ m_scene.AssetService.Store(asset);
return true;
}
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
index da54469..badabe0 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
@@ -39,7 +39,6 @@ using OpenSim.Framework.Serialization.External;
using OpenSim.Framework.Communications;
using OpenSim.Framework.Communications.Cache;
using OpenSim.Framework.Communications.Osp;
-using OpenSim.Region.Framework.Scenes;
using OpenSim.Region.CoreModules.World.Archiver;
using OpenSim.Region.Framework.Scenes;
@@ -114,7 +113,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
m_userInfo = userInfo;
m_invPath = invPath;
m_saveStream = saveStream;
- m_assetGatherer = new UuidGatherer(m_module.AssetService);
+ m_assetGatherer = new UuidGatherer(m_scene.AssetService);
}
protected void ReceivedAllAssets(ICollection assetsFoundUuids, ICollection assetsNotFoundUuids)
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs
index 36e17b4..2c36270 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs
@@ -69,19 +69,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
///
private Dictionary m_scenes = new Dictionary();
private Scene m_aScene;
-
- ///
- /// The comms manager we will use for all comms requests
- ///
- protected internal CommunicationsManager CommsManager;
- protected internal IAssetService AssetService;
public void Initialise(Scene scene, IConfigSource source)
{
if (m_scenes.Count == 0)
{
scene.RegisterModuleInterface(this);
- CommsManager = scene.CommsManager;
OnInventoryArchiveSaved += SaveInvConsoleCommandCompleted;
scene.AddCommand(
@@ -99,11 +92,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
m_scenes[scene.RegionInfo.RegionID] = scene;
}
-
- public void PostInitialise()
- {
- AssetService = m_aScene.AssetService;
- }
+
+ public void PostInitialise() {}
public void Close() {}
@@ -150,7 +140,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
if (userInfo != null)
{
InventoryArchiveReadRequest request =
- new InventoryArchiveReadRequest(userInfo, invPath, loadStream, CommsManager, AssetService);
+ new InventoryArchiveReadRequest(m_aScene, userInfo, invPath, loadStream);
UpdateClientWithLoadedNodes(userInfo, request.Execute());
}
}
@@ -165,7 +155,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
if (userInfo != null)
{
InventoryArchiveReadRequest request =
- new InventoryArchiveReadRequest(userInfo, invPath, loadPath, CommsManager, AssetService);
+ new InventoryArchiveReadRequest(m_aScene, userInfo, invPath, loadPath);
UpdateClientWithLoadedNodes(userInfo, request.Execute());
}
}
@@ -261,7 +251,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
///
protected CachedUserInfo GetUserInfo(string firstName, string lastName)
{
- CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(firstName, lastName);
+ CachedUserInfo userInfo = m_aScene.CommsManager.UserProfileCacheService.GetUserDetails(firstName, lastName);
if (null == userInfo)
{
m_log.ErrorFormat(
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
index 2ad6f1a..cf9fcaa 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
@@ -412,7 +412,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
Console.WriteLine("userInfo.RootFolder 2: {0}", userInfo.RootFolder);
- new InventoryArchiveReadRequest(userInfo, null, (Stream)null, null, null)
+ new InventoryArchiveReadRequest(scene, userInfo, null, (Stream)null)
.ReplicateArchivePathToUserInventory(
itemArchivePath, false, userInfo.RootFolder, foldersCreated, nodesLoaded);
--
cgit v1.1
From 881051c8ccef7b49031d0f9a087390336ecc53b5 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Sun, 6 Sep 2009 21:14:42 +0100
Subject: Convert iar write request to use inventory service requests rather
than cache
---
.../Inventory/Archiver/InventoryArchiveUtils.cs | 146 +++++++++++++++++++++
.../Archiver/InventoryArchiveWriteRequest.cs | 30 +++--
2 files changed, 164 insertions(+), 12 deletions(-)
create mode 100644 OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveUtils.cs
(limited to 'OpenSim/Region/CoreModules/Avatar/Inventory/Archiver')
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveUtils.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveUtils.cs
new file mode 100644
index 0000000..6d598d1
--- /dev/null
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveUtils.cs
@@ -0,0 +1,146 @@
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the OpenSimulator Project nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+using System.Collections.Generic;
+using OpenSim.Framework;
+using OpenSim.Services.Interfaces;
+
+namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
+{
+ ///
+ /// Utility methods for inventory archiving
+ ///
+ public static class InventoryArchiveUtils
+ {
+ public static readonly string PATH_DELIMITER = "/";
+
+ ///
+ /// Find a folder given a PATH_DELIMITER delimited path starting from this folder
+ ///
+ ///
+ /// This method does not handle paths that contain multiple delimitors
+ ///
+ /// FIXME: We do not yet handle situations where folders have the same name. We could handle this by some
+ /// XPath like expression
+ ///
+ /// FIXME: Delimitors which occur in names themselves are not currently escapable.
+ ///
+ ///
+ /// Inventory service to query
+ ///
+ ///
+ /// The folder from which the path starts
+ ///
+ ///
+ /// The path to the required folder.
+ /// It this is empty or consists only of the PATH_DELIMTER then this folder itself is returned.
+ ///
+ /// null if the folder is not found
+ public static InventoryFolderBase FindFolderByPath(
+ IInventoryService inventoryService, InventoryFolderBase startFolder, string path)
+ {
+ if (path == string.Empty)
+ return startFolder;
+
+ path = path.Trim();
+
+ if (path == PATH_DELIMITER)
+ return startFolder;
+
+ InventoryFolderBase foundFolder = null;
+
+ string[] components = path.Split(new string[] { PATH_DELIMITER }, 2, StringSplitOptions.None);
+ InventoryCollection contents = inventoryService.GetFolderContent(startFolder.Owner, startFolder.ID);
+
+ foreach (InventoryFolderBase folder in contents.Folders)
+ {
+ if (folder.Name == components[0])
+ {
+ if (components.Length > 1)
+ return FindFolderByPath(inventoryService, foundFolder, components[1]);
+ else
+ return folder;
+ }
+ }
+
+ // We didn't find a folder with the right name
+ return null;
+ }
+
+ ///
+ /// Find an item given a PATH_DELIMITOR delimited path starting from this folder.
+ ///
+ /// This method does not handle paths that contain multiple delimitors
+ ///
+ /// FIXME: We do not yet handle situations where folders or items have the same name. We could handle this by some
+ /// XPath like expression
+ ///
+ /// FIXME: Delimitors which occur in names themselves are not currently escapable.
+ ///
+ ///
+ ///
+ /// Inventory service to query
+ ///
+ ///
+ /// The folder from which the path starts
+ ///
+ ///
+ ///
+ /// The path to the required item.
+ ///
+ /// null if the item is not found
+ public static InventoryItemBase FindItemByPath(
+ IInventoryService inventoryService, InventoryFolderBase startFolder, string path)
+ {
+ string[] components = path.Split(new string[] { PATH_DELIMITER }, 2, StringSplitOptions.None);
+
+ if (components.Length == 1)
+ {
+ List items = inventoryService.GetFolderItems(startFolder.Owner, startFolder.ID);
+ foreach (InventoryItemBase item in items)
+ {
+ if (item.Name == components[0])
+ return item;
+ }
+ }
+ else
+ {
+ InventoryCollection contents = inventoryService.GetFolderContent(startFolder.Owner, startFolder.ID);
+
+ foreach (InventoryFolderBase folder in contents.Folders)
+ {
+ if (folder.Name == components[0])
+ return FindItemByPath(inventoryService, folder, components[1]);
+ }
+ }
+
+ // We didn't find an item or intermediate folder with the given name
+ return null;
+ }
+ }
+}
\ No newline at end of file
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
index badabe0..dee4a5d 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
@@ -158,7 +158,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
/// The inventory folder to save
/// The path to which the folder should be saved
/// If true, save this folder itself. If false, only saves contents
- protected void SaveInvFolder(InventoryFolderImpl inventoryFolder, string path, bool saveThisFolderItself)
+ protected void SaveInvFolder(InventoryFolderBase inventoryFolder, string path, bool saveThisFolderItself)
{
if (saveThisFolderItself)
{
@@ -173,15 +173,16 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
m_archiveWriter.WriteDir(path);
}
- List childFolders = inventoryFolder.RequestListOfFolderImpls();
- List items = inventoryFolder.RequestListOfItems();
+ InventoryCollection contents
+ = m_scene.InventoryService.GetFolderContent(inventoryFolder.Owner, inventoryFolder.ID);
+ //List childFolders = inventoryFolder.RequestListOfFolderImpls();
+ //List items = inventoryFolder.RequestListOfItems();
/*
Dictionary identicalFolderNames = new Dictionary();
foreach (InventoryFolderImpl folder in inventories)
{
-
if (!identicalFolderNames.ContainsKey(folder.Name))
identicalFolderNames[folder.Name] = 0;
else
@@ -197,12 +198,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
}
*/
- foreach (InventoryFolderImpl childFolder in childFolders)
+ foreach (InventoryFolderBase childFolder in contents.Folders)
{
SaveInvFolder(childFolder, path, true);
}
- foreach (InventoryItemBase item in items)
+ foreach (InventoryItemBase item in contents.Items)
{
SaveInvItem(item, path);
}
@@ -213,8 +214,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
///
public void Execute()
{
- InventoryFolderImpl inventoryFolder = null;
+ InventoryFolderBase inventoryFolder = null;
InventoryItemBase inventoryItem = null;
+ InventoryFolderBase rootFolder = m_scene.InventoryService.GetRootFolder(m_userInfo.UserProfile.ID);
// XXX: Very temporarily, drop and refetch inventory to make sure we have any newly created items in cache
// This will disappear very soon once we stop using the old cached inventory.
@@ -223,6 +225,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
m_userInfo.FetchInventory();
*/
+ /*
if (!m_userInfo.HasReceivedInventory)
{
// If the region server has access to the user admin service (by which users are created),
@@ -244,11 +247,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
m_userInfo.FetchInventory();
}
}
+ */
bool foundStar = false;
- // Eliminate double slashes and any leading / on the path. This might be better done within InventoryFolderImpl
- // itself (possibly at a small loss in efficiency).
+ // Eliminate double slashes and any leading / on the path.
string[] components
= m_invPath.Split(
new string[] { InventoryFolderImpl.PATH_DELIMITER }, StringSplitOptions.RemoveEmptyEntries);
@@ -273,18 +276,21 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
// Therefore if we still start with a / after the split, then we need the root folder
if (m_invPath.Length == 0)
{
- inventoryFolder = m_userInfo.RootFolder;
+ inventoryFolder = rootFolder;
}
else
{
m_invPath = m_invPath.Remove(m_invPath.LastIndexOf(InventoryFolderImpl.PATH_DELIMITER));
- inventoryFolder = m_userInfo.RootFolder.FindFolderByPath(m_invPath);
+ inventoryFolder
+ = InventoryArchiveUtils.FindFolderByPath(m_scene.InventoryService, rootFolder, m_invPath);
+ //inventoryFolder = m_userInfo.RootFolder.FindFolderByPath(m_invPath);
}
// The path may point to an item instead
if (inventoryFolder == null)
{
- inventoryItem = m_userInfo.RootFolder.FindItemByPath(m_invPath);
+ inventoryItem = InventoryArchiveUtils.FindItemByPath(m_scene.InventoryService, rootFolder, m_invPath);
+ //inventoryItem = m_userInfo.RootFolder.FindItemByPath(m_invPath);
}
m_archiveWriter = new TarArchiveWriter(m_saveStream);
--
cgit v1.1
From d8316810a1699ebe912e96f85a85c1e879540ecf Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Sun, 6 Sep 2009 21:20:41 +0100
Subject: remove now unnecessary parts of save iar test
---
.../Archiver/Tests/InventoryArchiverTests.cs | 21 ++++-----------------
1 file changed, 4 insertions(+), 17 deletions(-)
(limited to 'OpenSim/Region/CoreModules/Avatar/Inventory/Archiver')
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
index cf9fcaa..5eca4e4 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
@@ -93,11 +93,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
string userFirstName = "Jock";
string userLastName = "Stirrup";
UUID userId = UUID.Parse("00000000-0000-0000-0000-000000000020");
- CachedUserInfo userInfo;
lock (this)
{
- userInfo = UserProfileTestUtils.CreateUserWithInventory(
+ UserProfileTestUtils.CreateUserWithInventory(
cm, userFirstName, userLastName, userId, InventoryReceived);
Monitor.Wait(this, 60000);
}
@@ -136,23 +135,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
item1.Name = "My Little Dog";
item1.AssetID = asset1.FullID;
item1.ID = item1Id;
- InventoryFolderImpl objsFolder = userInfo.RootFolder.FindFolderByPath("Objects");
- //InventoryFolderBase objsFolder = scene.InventoryService.GetFolderForType(userId, AssetType.Object);
- Console.WriteLine("here2");
- /*
- IInventoryService inventoryService = scene.InventoryService;
- InventoryFolderBase rootFolder = inventoryService.GetRootFolder(userId);
- InventoryCollection rootContents = inventoryService.GetFolderContent(userId, rootFolder.ID);
- */
- /*
- InventoryFolderBase objsFolder = null;
- foreach (InventoryFolderBase folder in rootContents.Folders)
- if (folder.Name == "Objects")
- objsFolder = folder;
- */
+ InventoryFolderBase objsFolder
+ = InventoryArchiveUtils.FindFolderByPath(
+ scene.InventoryService, scene.InventoryService.GetRootFolder(userId), "Objects");
item1.Folder = objsFolder.ID;
scene.AddInventoryItem(userId, item1);
- userInfo.AddItem(item1);
MemoryStream archiveWriteStream = new MemoryStream();
archiverModule.OnInventoryArchiveSaved += SaveCompleted;
--
cgit v1.1
From a92afe8dcafd55a394c113d67a5b75bac82a6730 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Sun, 6 Sep 2009 21:26:27 +0100
Subject: change load iar test to use non-cache find item by path function
---
.../Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
(limited to 'OpenSim/Region/CoreModules/Avatar/Inventory/Archiver')
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
index 5eca4e4..bdc2802 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
@@ -267,7 +267,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
CachedUserInfo userInfo
= scene.CommsManager.UserProfileCacheService.GetUserDetails(userFirstName, userLastName);
- InventoryItemBase foundItem = userInfo.RootFolder.FindItemByPath(itemName);
+ //InventoryItemBase foundItem = userInfo.RootFolder.FindItemByPath(itemName);
+ InventoryItemBase foundItem
+ = InventoryArchiveUtils.FindItemByPath(
+ scene.InventoryService, scene.InventoryService.GetRootFolder(userInfo.UserProfile.ID), itemName);
Assert.That(foundItem, Is.Not.Null, "Didn't find loaded item");
Assert.That(
foundItem.CreatorId, Is.EqualTo(item1.CreatorId),
--
cgit v1.1
From 5640cac8e09531437e1769f884d880ee49c19f02 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Sun, 6 Sep 2009 21:34:20 +0100
Subject: Add convenience functions to InventoryArchiveUtils for locating
folders by assuming we're starting from the root Change test methods to use
convenience functions
---
.../Inventory/Archiver/InventoryArchiveUtils.cs | 66 ++++++++++++++++++++++
.../Archiver/Tests/InventoryArchiverTests.cs | 8 +--
2 files changed, 69 insertions(+), 5 deletions(-)
(limited to 'OpenSim/Region/CoreModules/Avatar/Inventory/Archiver')
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveUtils.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveUtils.cs
index 6d598d1..2eeb637 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveUtils.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveUtils.cs
@@ -27,6 +27,7 @@
using System;
using System.Collections.Generic;
+using OpenMetaverse;
using OpenSim.Framework;
using OpenSim.Services.Interfaces;
@@ -38,6 +39,39 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
public static class InventoryArchiveUtils
{
public static readonly string PATH_DELIMITER = "/";
+
+ ///
+ /// Find a folder given a PATH_DELIMITER delimited path starting from a user's root folder
+ ///
+ ///
+ /// This method does not handle paths that contain multiple delimitors
+ ///
+ /// FIXME: We do not yet handle situations where folders have the same name. We could handle this by some
+ /// XPath like expression
+ ///
+ /// FIXME: Delimitors which occur in names themselves are not currently escapable.
+ ///
+ ///
+ /// Inventory service to query
+ ///
+ ///
+ /// User id to search
+ ///
+ ///
+ /// The path to the required folder.
+ /// It this is empty or consists only of the PATH_DELIMTER then this folder itself is returned.
+ ///
+ /// null if the folder is not found
+ public static InventoryFolderBase FindFolderByPath(
+ IInventoryService inventoryService, UUID userId, string path)
+ {
+ InventoryFolderBase rootFolder = inventoryService.GetRootFolder(userId);
+
+ if (null == rootFolder)
+ return null;
+
+ return FindFolderByPath(inventoryService, rootFolder, path);
+ }
///
/// Find a folder given a PATH_DELIMITER delimited path starting from this folder
@@ -91,6 +125,38 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
// We didn't find a folder with the right name
return null;
}
+
+ ///
+ /// Find an item given a PATH_DELIMITOR delimited path starting from the user's root folder.
+ ///
+ /// This method does not handle paths that contain multiple delimitors
+ ///
+ /// FIXME: We do not yet handle situations where folders or items have the same name. We could handle this by some
+ /// XPath like expression
+ ///
+ /// FIXME: Delimitors which occur in names themselves are not currently escapable.
+ ///
+ ///
+ ///
+ /// Inventory service to query
+ ///
+ ///
+ /// The user to search
+ ///
+ ///
+ /// The path to the required item.
+ ///
+ /// null if the item is not found
+ public static InventoryItemBase FindItemByPath(
+ IInventoryService inventoryService, UUID userId, string path)
+ {
+ InventoryFolderBase rootFolder = inventoryService.GetRootFolder(userId);
+
+ if (null == rootFolder)
+ return null;
+
+ return FindItemByPath(inventoryService, rootFolder, path);
+ }
///
/// Find an item given a PATH_DELIMITOR delimited path starting from this folder.
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
index bdc2802..50fd2b0 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
@@ -136,8 +136,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
item1.AssetID = asset1.FullID;
item1.ID = item1Id;
InventoryFolderBase objsFolder
- = InventoryArchiveUtils.FindFolderByPath(
- scene.InventoryService, scene.InventoryService.GetRootFolder(userId), "Objects");
+ = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, userId, "Objects");
item1.Folder = objsFolder.ID;
scene.AddInventoryItem(userId, item1);
@@ -267,10 +266,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
CachedUserInfo userInfo
= scene.CommsManager.UserProfileCacheService.GetUserDetails(userFirstName, userLastName);
- //InventoryItemBase foundItem = userInfo.RootFolder.FindItemByPath(itemName);
InventoryItemBase foundItem
- = InventoryArchiveUtils.FindItemByPath(
- scene.InventoryService, scene.InventoryService.GetRootFolder(userInfo.UserProfile.ID), itemName);
+ = InventoryArchiveUtils.FindItemByPath( scene.InventoryService, userInfo.UserProfile.ID, itemName);
+
Assert.That(foundItem, Is.Not.Null, "Didn't find loaded item");
Assert.That(
foundItem.CreatorId, Is.EqualTo(item1.CreatorId),
--
cgit v1.1
From 61c286f5d66c4bf44d04c4aac991ba350deb62ea Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Sun, 6 Sep 2009 22:07:35 +0100
Subject: change iar load to make discrete inventory service requests rather
than the cache
---
.../Archiver/InventoryArchiveReadRequest.cs | 65 +++++++++++++---------
.../Archiver/Tests/InventoryArchiverTests.cs | 21 ++++---
2 files changed, 52 insertions(+), 34 deletions(-)
(limited to 'OpenSim/Region/CoreModules/Avatar/Inventory/Archiver')
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
index bb40450..ff583e5 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
@@ -100,6 +100,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
int successfulItemRestores = 0;
List nodesLoaded = new List();
+ /*
if (!m_userInfo.HasReceivedInventory)
{
// If the region server has access to the user admin service (by which users are created),
@@ -127,8 +128,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
}
}
}
-
- InventoryFolderImpl rootDestinationFolder = m_userInfo.RootFolder.FindFolderByPath(m_invPath);
+ */
+
+ //InventoryFolderImpl rootDestinationFolder = m_userInfo.RootFolder.FindFolderByPath(m_invPath);
+ InventoryFolderBase rootDestinationFolder
+ = InventoryArchiveUtils.FindFolderByPath(
+ m_scene.InventoryService, m_userInfo.UserProfile.ID, m_invPath);
if (null == rootDestinationFolder)
{
@@ -142,7 +147,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
// In order to load identically named folders, we need to keep track of the folders that we have already
// created
- Dictionary foldersCreated = new Dictionary();
+ Dictionary foldersCreated = new Dictionary();
byte[] data;
TarArchiveReader.TarEntryType entryType;
@@ -157,7 +162,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
}
else if (filePath.StartsWith(ArchiveConstants.INVENTORY_PATH))
{
- InventoryFolderImpl foundFolder
+ InventoryFolderBase foundFolder
= ReplicateArchivePathToUserInventory(
filePath, TarArchiveReader.TarEntryType.TYPE_DIRECTORY == entryType,
rootDestinationFolder, foldersCreated, nodesLoaded);
@@ -178,7 +183,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
// Reset folder ID to the one in which we want to load it
item.Folder = foundFolder.ID;
- m_userInfo.AddItem(item);
+ //m_userInfo.AddItem(item);
+ m_scene.InventoryService.AddItem(item);
successfulItemRestores++;
// If we're loading an item directly into the given destination folder then we need to record
@@ -211,11 +217,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
/// chain, only the root node needs to be recorded
///
/// The last user inventory folder created or found for the archive path
- public InventoryFolderImpl ReplicateArchivePathToUserInventory(
+ public InventoryFolderBase ReplicateArchivePathToUserInventory(
string fsPath,
bool isDir,
- InventoryFolderImpl rootDestinationFolder,
- Dictionary foldersCreated,
+ InventoryFolderBase rootDestFolder,
+ Dictionary foldersCreated,
List nodesLoaded)
{
fsPath = fsPath.Substring(ArchiveConstants.INVENTORY_PATH.Length);
@@ -228,17 +234,17 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
m_log.DebugFormat("[INVENTORY ARCHIVER]: Loading to folder {0}", fsPath);
- InventoryFolderImpl foundFolder = null;
+ InventoryFolderBase destFolder = null;
// XXX: Nasty way of dealing with a path that has no directory component
if (fsPath.Length > 0)
{
- while (null == foundFolder && fsPath.Length > 0)
+ while (null == destFolder && fsPath.Length > 0)
{
if (foldersCreated.ContainsKey(fsPath))
{
m_log.DebugFormat("[INVENTORY ARCHIVER]: Found previously created fs path {0}", fsPath);
- foundFolder = foldersCreated[fsPath];
+ destFolder = foldersCreated[fsPath];
}
else
{
@@ -255,14 +261,14 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
"[INVENTORY ARCHIVER]: Found no previously created fs path for {0}",
originalFsPath);
fsPath = string.Empty;
- foundFolder = rootDestinationFolder;
+ destFolder = rootDestFolder;
}
}
}
}
else
{
- foundFolder = rootDestinationFolder;
+ destFolder = rootDestFolder;
}
string fsPathSectionToCreate = originalFsPath.Substring(fsPath.Length);
@@ -277,30 +283,39 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
int identicalNameIdentifierIndex
= rawDirsToCreate[i].LastIndexOf(
ArchiveConstants.INVENTORY_NODE_NAME_COMPONENT_SEPARATOR);
- string folderName = rawDirsToCreate[i].Remove(identicalNameIdentifierIndex);
+ string newFolderName = rawDirsToCreate[i].Remove(identicalNameIdentifierIndex);
UUID newFolderId = UUID.Random();
- m_userInfo.CreateFolder(
- folderName, newFolderId, (ushort)AssetType.Folder, foundFolder.ID);
-
- m_log.DebugFormat("[INVENTORY ARCHIVER]: Retrieving newly created folder {0}", folderName);
- foundFolder = foundFolder.GetChildFolder(newFolderId);
- m_log.DebugFormat(
- "[INVENTORY ARCHIVER]: Retrieved newly created folder {0} with ID {1}",
- foundFolder.Name, foundFolder.ID);
+
+ destFolder
+ = new InventoryFolderBase(
+ newFolderId, newFolderName, m_userInfo.UserProfile.ID,
+ (short)AssetType.Folder, destFolder.ID, 0);
+ m_scene.InventoryService.AddFolder(destFolder);
+
+// UUID newFolderId = UUID.Random();
+// m_scene.InventoryService.AddFolder(
+// m_userInfo.CreateFolder(
+// folderName, newFolderId, (ushort)AssetType.Folder, foundFolder.ID);
+
+// m_log.DebugFormat("[INVENTORY ARCHIVER]: Retrieving newly created folder {0}", folderName);
+// foundFolder = foundFolder.GetChildFolder(newFolderId);
+// m_log.DebugFormat(
+// "[INVENTORY ARCHIVER]: Retrieved newly created folder {0} with ID {1}",
+// foundFolder.Name, foundFolder.ID);
// Record that we have now created this folder
fsPath += rawDirsToCreate[i] + "/";
m_log.DebugFormat("[INVENTORY ARCHIVER]: Recording creation of fs path {0}", fsPath);
- foldersCreated[fsPath] = foundFolder;
+ foldersCreated[fsPath] = destFolder;
if (0 == i)
- nodesLoaded.Add(foundFolder);
+ nodesLoaded.Add(destFolder);
i++;
}
- return foundFolder;
+ return destFolder;
/*
string[] rawFolders = filePath.Split(new char[] { '/' });
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
index 50fd2b0..c21adef 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
@@ -267,7 +267,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
= scene.CommsManager.UserProfileCacheService.GetUserDetails(userFirstName, userLastName);
InventoryItemBase foundItem
- = InventoryArchiveUtils.FindItemByPath( scene.InventoryService, userInfo.UserProfile.ID, itemName);
+ = InventoryArchiveUtils.FindItemByPath(scene.InventoryService, userInfo.UserProfile.ID, itemName);
Assert.That(foundItem, Is.Not.Null, "Didn't find loaded item");
Assert.That(
@@ -378,9 +378,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
Monitor.Wait(this, 60000);
}
- Console.WriteLine("userInfo.RootFolder 1: {0}", userInfo.RootFolder);
+ //Console.WriteLine("userInfo.RootFolder 1: {0}", userInfo.RootFolder);
- Dictionary foldersCreated = new Dictionary();
+ Dictionary foldersCreated = new Dictionary();
List nodesLoaded = new List();
string folder1Name = "a";
@@ -398,17 +398,20 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
"{0}{1}/{2}/{3}",
ArchiveConstants.INVENTORY_PATH, folder1ArchiveName, folder2ArchiveName, itemName);
- Console.WriteLine("userInfo.RootFolder 2: {0}", userInfo.RootFolder);
+ //Console.WriteLine("userInfo.RootFolder 2: {0}", userInfo.RootFolder);
new InventoryArchiveReadRequest(scene, userInfo, null, (Stream)null)
.ReplicateArchivePathToUserInventory(
- itemArchivePath, false, userInfo.RootFolder, foldersCreated, nodesLoaded);
+ itemArchivePath, false, scene.InventoryService.GetRootFolder(userInfo.UserProfile.ID),
+ foldersCreated, nodesLoaded);
- Console.WriteLine("userInfo.RootFolder 3: {0}", userInfo.RootFolder);
- InventoryFolderImpl folder1 = userInfo.RootFolder.FindFolderByPath("a");
+ //Console.WriteLine("userInfo.RootFolder 3: {0}", userInfo.RootFolder);
+ //InventoryFolderImpl folder1 = userInfo.RootFolder.FindFolderByPath("a");
+ InventoryFolderBase folder1
+ = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, userInfo.UserProfile.ID, "a");
Assert.That(folder1, Is.Not.Null, "Could not find folder a");
- InventoryFolderImpl folder2 = folder1.FindFolderByPath("b");
+ InventoryFolderBase folder2 = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1, "b");
Assert.That(folder2, Is.Not.Null, "Could not find folder b");
}
}
-}
+}
\ No newline at end of file
--
cgit v1.1
From 10b075a33da1105ae440a57d5488baa9c161e444 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Mon, 7 Sep 2009 18:42:53 +0100
Subject: change default iar filename
---
.../CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'OpenSim/Region/CoreModules/Avatar/Inventory/Archiver')
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs
index 2c36270..3869de2 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs
@@ -57,7 +57,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
///
/// The file to load and save inventory if no filename has been specified
///
- protected const string DEFAULT_INV_BACKUP_FILENAME = "user-inventory_iar.tar.gz";
+ protected const string DEFAULT_INV_BACKUP_FILENAME = "user-inventory.iar";
///
/// Pending save completions initiated from the console
--
cgit v1.1
From fa1d79533e22266f8ee7f1aa4d93a3f7fba0e230 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Mon, 7 Sep 2009 19:57:44 +0100
Subject: Only allow iar load/save if user is logged in to the region simulator
---
.../Inventory/Archiver/InventoryArchiverModule.cs | 128 +++++++++++++++++----
.../Archiver/Tests/InventoryArchiverTests.cs | 10 +-
2 files changed, 110 insertions(+), 28 deletions(-)
(limited to 'OpenSim/Region/CoreModules/Avatar/Inventory/Archiver')
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs
index 3869de2..2340fad 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs
@@ -51,6 +51,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
public string Name { get { return "Inventory Archiver Module"; } }
public bool IsSharedModule { get { return true; } }
+
+ ///
+ /// Enable or disable checking whether the iar user is actually logged in
+ ///
+ public bool DisablePresenceChecks { get; set; }
public event InventoryArchiveSaved OnInventoryArchiveSaved;
@@ -70,6 +75,13 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
private Dictionary m_scenes = new Dictionary();
private Scene m_aScene;
+ public InventoryArchiverModule() {}
+
+ public InventoryArchiverModule(bool disablePresenceChecks)
+ {
+ DisablePresenceChecks = disablePresenceChecks;
+ }
+
public void Initialise(Scene scene, IConfigSource source)
{
if (m_scenes.Count == 0)
@@ -109,29 +121,57 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
handlerInventoryArchiveSaved(id, succeeded, userInfo, invPath, saveStream, reportedException);
}
- public void ArchiveInventory(Guid id, string firstName, string lastName, string invPath, Stream saveStream)
+ public bool ArchiveInventory(Guid id, string firstName, string lastName, string invPath, Stream saveStream)
{
if (m_scenes.Count > 0)
{
CachedUserInfo userInfo = GetUserInfo(firstName, lastName);
if (userInfo != null)
- new InventoryArchiveWriteRequest(id, this, m_aScene, userInfo, invPath, saveStream).Execute();
- }
+ {
+ if (CheckPresence(userInfo.UserProfile.ID))
+ {
+ new InventoryArchiveWriteRequest(id, this, m_aScene, userInfo, invPath, saveStream).Execute();
+ return true;
+ }
+ else
+ {
+ m_log.ErrorFormat(
+ "[INVENTORY ARCHIVER]: User {0} {1} not logged in to this region simulator",
+ userInfo.UserProfile.Name, userInfo.UserProfile.ID);
+ }
+ }
+ }
+
+ return false;
}
- public void ArchiveInventory(Guid id, string firstName, string lastName, string invPath, string savePath)
+ public bool ArchiveInventory(Guid id, string firstName, string lastName, string invPath, string savePath)
{
if (m_scenes.Count > 0)
{
CachedUserInfo userInfo = GetUserInfo(firstName, lastName);
if (userInfo != null)
- new InventoryArchiveWriteRequest(id, this, m_aScene, userInfo, invPath, savePath).Execute();
- }
+ {
+ if (CheckPresence(userInfo.UserProfile.ID))
+ {
+ new InventoryArchiveWriteRequest(id, this, m_aScene, userInfo, invPath, savePath).Execute();
+ return true;
+ }
+ else
+ {
+ m_log.ErrorFormat(
+ "[INVENTORY ARCHIVER]: User {0} {1} not logged in to this region simulator",
+ userInfo.UserProfile.Name, userInfo.UserProfile.ID);
+ }
+ }
+ }
+
+ return false;
}
- public void DearchiveInventory(string firstName, string lastName, string invPath, Stream loadStream)
+ public bool DearchiveInventory(string firstName, string lastName, string invPath, Stream loadStream)
{
if (m_scenes.Count > 0)
{
@@ -139,14 +179,27 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
if (userInfo != null)
{
- InventoryArchiveReadRequest request =
- new InventoryArchiveReadRequest(m_aScene, userInfo, invPath, loadStream);
- UpdateClientWithLoadedNodes(userInfo, request.Execute());
+ if (CheckPresence(userInfo.UserProfile.ID))
+ {
+ InventoryArchiveReadRequest request =
+ new InventoryArchiveReadRequest(m_aScene, userInfo, invPath, loadStream);
+ UpdateClientWithLoadedNodes(userInfo, request.Execute());
+
+ return true;
+ }
+ else
+ {
+ m_log.ErrorFormat(
+ "[INVENTORY ARCHIVER]: User {0} {1} not logged in to this region simulator",
+ userInfo.UserProfile.Name, userInfo.UserProfile.ID);
+ }
}
- }
+ }
+
+ return false;
}
- public void DearchiveInventory(string firstName, string lastName, string invPath, string loadPath)
+ public bool DearchiveInventory(string firstName, string lastName, string invPath, string loadPath)
{
if (m_scenes.Count > 0)
{
@@ -154,11 +207,24 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
if (userInfo != null)
{
- InventoryArchiveReadRequest request =
- new InventoryArchiveReadRequest(m_aScene, userInfo, invPath, loadPath);
- UpdateClientWithLoadedNodes(userInfo, request.Execute());
- }
- }
+ if (CheckPresence(userInfo.UserProfile.ID))
+ {
+ InventoryArchiveReadRequest request =
+ new InventoryArchiveReadRequest(m_aScene, userInfo, invPath, loadPath);
+ UpdateClientWithLoadedNodes(userInfo, request.Execute());
+
+ return true;
+ }
+ else
+ {
+ m_log.ErrorFormat(
+ "[INVENTORY ARCHIVER]: User {0} {1} not logged in to this region simulator",
+ userInfo.UserProfile.Name, userInfo.UserProfile.ID);
+ }
+ }
+ }
+
+ return false;
}
///
@@ -183,11 +249,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
"[INVENTORY ARCHIVER]: Loading archive {0} to inventory path {1} for {2} {3}",
loadPath, invPath, firstName, lastName);
- DearchiveInventory(firstName, lastName, invPath, loadPath);
-
- m_log.InfoFormat(
- "[INVENTORY ARCHIVER]: Loaded archive {0} for {1} {2}",
- loadPath, firstName, lastName);
+ if (DearchiveInventory(firstName, lastName, invPath, loadPath))
+ m_log.InfoFormat(
+ "[INVENTORY ARCHIVER]: Loaded archive {0} for {1} {2}",
+ loadPath, firstName, lastName);
}
///
@@ -291,5 +356,24 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
}
}
}
+
+ ///
+ /// Check if the given user is present in any of the scenes.
+ ///
+ /// The user to check
+ /// true if the user is in any of the scenes, false otherwise
+ protected bool CheckPresence(UUID userId)
+ {
+ if (DisablePresenceChecks)
+ return true;
+
+ foreach (Scene scene in m_scenes.Values)
+ {
+ if (scene.GetScenePresence(userId) != null)
+ return true;
+ }
+
+ return false;
+ }
}
}
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
index c21adef..d579a81 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
@@ -83,7 +83,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
TestHelper.InMethod();
log4net.Config.XmlConfigurator.Configure();
- InventoryArchiverModule archiverModule = new InventoryArchiverModule();
+ InventoryArchiverModule archiverModule = new InventoryArchiverModule(true);
Scene scene = SceneSetupHelpers.SetupScene("Inventory");
SceneSetupHelpers.SetupSceneModules(scene, archiverModule);
@@ -100,9 +100,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
cm, userFirstName, userLastName, userId, InventoryReceived);
Monitor.Wait(this, 60000);
}
-
- Console.WriteLine("here");
-
+
// Create asset
SceneObjectGroup object1;
SceneObjectPart part1;
@@ -248,7 +246,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
MemoryStream archiveReadStream = new MemoryStream(archiveWriteStream.ToArray());
SerialiserModule serialiserModule = new SerialiserModule();
- InventoryArchiverModule archiverModule = new InventoryArchiverModule();
+ InventoryArchiverModule archiverModule = new InventoryArchiverModule(true);
// Annoyingly, we have to set up a scene even though inventory loading has nothing to do with a scene
Scene scene = SceneSetupHelpers.SetupScene("inventory");
@@ -318,7 +316,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
MemoryStream archiveReadStream = new MemoryStream(archiveWriteStream.ToArray());
SerialiserModule serialiserModule = new SerialiserModule();
- InventoryArchiverModule archiverModule = new InventoryArchiverModule();
+ InventoryArchiverModule archiverModule = new InventoryArchiverModule(true);
// Annoyingly, we have to set up a scene even though inventory loading has nothing to do with a scene
Scene scene = SceneSetupHelpers.SetupScene();
--
cgit v1.1