mantis 8651: try to improve notecards HG sharing ( not tested)
parent
7a79a6ddfe
commit
8060d132b9
|
@ -29,6 +29,7 @@ using OpenMetaverse;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
namespace OpenSim.Framework
|
namespace OpenSim.Framework
|
||||||
{
|
{
|
||||||
|
@ -795,5 +796,68 @@ namespace OpenSim.Framework
|
||||||
item.ID = UUID.Random();
|
item.ID = UUID.Random();
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static List<UUID> GetEmbeddedAssetIDs(byte[] data)
|
||||||
|
{
|
||||||
|
if (data == null || data.Length < 60)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
string note = Util.UTF8.GetString(data);
|
||||||
|
if (String.IsNullOrWhiteSpace(note))
|
||||||
|
return null;
|
||||||
|
|
||||||
|
// waste some time checking rigid versions
|
||||||
|
string tmpStr = note.Substring(0, 21);
|
||||||
|
if (!tmpStr.Equals("Linden text version 2"))
|
||||||
|
return null;
|
||||||
|
|
||||||
|
tmpStr = note.Substring(24, 25);
|
||||||
|
if (!tmpStr.Equals("LLEmbeddedItems version 1"))
|
||||||
|
return null;
|
||||||
|
|
||||||
|
tmpStr = note.Substring(52,5);
|
||||||
|
if (!tmpStr.Equals("count"))
|
||||||
|
return null;
|
||||||
|
|
||||||
|
int limit = note.Length - 57 - 2;
|
||||||
|
if (limit > 8)
|
||||||
|
limit = 8;
|
||||||
|
|
||||||
|
int indx = note.IndexOfAny(seps, 57, limit);
|
||||||
|
if(indx < 0)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
if (!int.TryParse(note.Substring(57, indx - 57), out int count))
|
||||||
|
return null;
|
||||||
|
|
||||||
|
List<UUID> ids = new List<UUID>();
|
||||||
|
while(count > 0)
|
||||||
|
{
|
||||||
|
string valuestr;
|
||||||
|
UUID assetID = UUID.Zero;
|
||||||
|
indx = note.IndexOf('}'); // skip to end of permissions
|
||||||
|
indx = getField(note, indx, "asset_id", false, out valuestr);
|
||||||
|
if (indx < 0)
|
||||||
|
{
|
||||||
|
indx = getField(note, indx, "shadow_id", false, out valuestr);
|
||||||
|
if (indx < 0)
|
||||||
|
return null;
|
||||||
|
if (!UUID.TryParse(valuestr, out assetID))
|
||||||
|
return null;
|
||||||
|
assetID = deMoronize(assetID);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!UUID.TryParse(valuestr, out assetID))
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
ids.Add(assetID);
|
||||||
|
--count;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(ids.Count == 0)
|
||||||
|
return null;
|
||||||
|
return ids;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -364,7 +364,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
else if ((sbyte)AssetType.Notecard == assetType)
|
else if ((sbyte)AssetType.Notecard == assetType)
|
||||||
{
|
{
|
||||||
RecordTextEmbeddedAssetUuids(assetBase);
|
RecordNoteCardEmbeddedAssetUuids(assetBase);
|
||||||
}
|
}
|
||||||
else if ((sbyte)AssetType.LSLText == assetType)
|
else if ((sbyte)AssetType.LSLText == assetType)
|
||||||
{
|
{
|
||||||
|
@ -546,6 +546,22 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void RecordNoteCardEmbeddedAssetUuids(AssetBase textAsset)
|
||||||
|
{
|
||||||
|
List<UUID> ids = SLUtil.GetEmbeddedAssetIDs(textAsset.Data);
|
||||||
|
if(ids == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for(int i = 0; i < ids.Count; ++i)
|
||||||
|
{
|
||||||
|
if (ids[i] == UUID.Zero)
|
||||||
|
continue;
|
||||||
|
if (!UncertainAssetsUUIDs.Contains(ids[i]))
|
||||||
|
UncertainAssetsUUIDs.Add(ids[i]);
|
||||||
|
AddForInspection(ids[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Record the uuids referenced by the given wearable asset
|
/// Record the uuids referenced by the given wearable asset
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
Loading…
Reference in New Issue