From 33f5d0d1e90c3e63e06a200043a01c32768335c1 Mon Sep 17 00:00:00 2001 From: John Hurliman Date: Mon, 15 Mar 2010 14:17:17 -0700 Subject: * UuidGatherer now tracks asset types for assets it discovers. The asset types are inferred from context * OAR saving will attempt to correct unknown asset types before writing broken assets to the OAR file --- .../CoreModules/World/Archiver/AssetsRequest.cs | 23 +++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'OpenSim/Region/CoreModules/World/Archiver/AssetsRequest.cs') diff --git a/OpenSim/Region/CoreModules/World/Archiver/AssetsRequest.cs b/OpenSim/Region/CoreModules/World/Archiver/AssetsRequest.cs index c9fce91..4215f97 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/AssetsRequest.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/AssetsRequest.cs @@ -74,7 +74,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver /// /// uuids to request /// - protected ICollection m_uuids; + protected IDictionary m_uuids; /// /// Callback used when all the assets requested have been received. @@ -104,7 +104,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver protected AssetsArchiver m_assetsArchiver; protected internal AssetsRequest( - AssetsArchiver assetsArchiver, ICollection uuids, + AssetsArchiver assetsArchiver, IDictionary uuids, IAssetService assetService, AssetsRequestCallback assetsRequestCallback) { m_assetsArchiver = assetsArchiver; @@ -132,9 +132,9 @@ namespace OpenSim.Region.CoreModules.World.Archiver return; } - foreach (UUID uuid in m_uuids) + foreach (KeyValuePair kvp in m_uuids) { - m_assetService.Get(uuid.ToString(), this, AssetRequestCallback); + m_assetService.Get(kvp.Key.ToString(), kvp.Value, PreAssetRequestCallback); } m_requestCallbackTimer.Enabled = true; @@ -157,7 +157,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver // Calculate which uuids were not found. This is an expensive way of doing it, but this is a failure // case anyway. List uuids = new List(); - foreach (UUID uuid in m_uuids) + foreach (UUID uuid in m_uuids.Keys) { uuids.Add(uuid); } @@ -200,6 +200,19 @@ namespace OpenSim.Region.CoreModules.World.Archiver } } + protected void PreAssetRequestCallback(string fetchedAssetID, object assetType, AssetBase fetchedAsset) + { + // Check for broken asset types and fix them with the AssetType gleaned by UuidGatherer + if (fetchedAsset != null && fetchedAsset.Type == (sbyte)AssetType.Unknown) + { + AssetType type = (AssetType)assetType; + m_log.InfoFormat("[ARCHIVER]: Rewriting broken asset type for {0} to {1}", fetchedAsset.ID, type); + fetchedAsset.Type = (sbyte)type; + } + + AssetRequestCallback(fetchedAssetID, this, fetchedAsset); + } + /// /// Called back by the asset cache when it has the asset /// -- cgit v1.1