From 74f1401b5a340793e022da1446523889030fa6c4 Mon Sep 17 00:00:00 2001 From: Christopher Date: Fri, 10 Jul 2020 18:22:04 +0200 Subject: [PATCH] add noteCardReader --- src/helper/NoteCardReader.cs | 103 +++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 src/helper/NoteCardReader.cs diff --git a/src/helper/NoteCardReader.cs b/src/helper/NoteCardReader.cs new file mode 100644 index 0000000..7f5ff55 --- /dev/null +++ b/src/helper/NoteCardReader.cs @@ -0,0 +1,103 @@ +using OpenMetaverse; +using OpenSim.Framework; +using OpenSim.Region.Framework.Scenes; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OpenSim.Modules.Appearance2Avatar.helper +{ + class NoteCardReader + { + private Scene World = null; + private SceneObjectPart m_host = null; + + public NoteCardReader(Scene scene, SceneObjectPart host) + { + World = scene; + m_host = host; + } + + public string LoadNotecard(string notecardNameOrUuid) + { + UUID assetID = CacheNotecard(notecardNameOrUuid); + + if (assetID != UUID.Zero) + { + StringBuilder notecardData = new StringBuilder(); + + for (int count = 0; count < NotecardCache.GetLines(assetID); count++) + { + string line = NotecardCache.GetLine(assetID, count) + "\n"; + + // m_log.DebugFormat("[OSSL]: From notecard {0} loading line {1}", notecardNameOrUuid, line); + + notecardData.Append(line); + } + + return notecardData.ToString(); + } + + return null; + } + protected UUID CacheNotecard(string notecardNameOrUuid) + { + UUID assetID = UUID.Zero; + + bool notecardNameIsUUID = UUID.TryParse(notecardNameOrUuid, out assetID); + + if (!notecardNameIsUUID) + { + assetID = SearchTaskInventoryForAssetId(notecardNameOrUuid); + } + + if (assetID == UUID.Zero) + return UUID.Zero; + + if (!NotecardCache.IsCached(assetID)) + { + AssetBase a = World.AssetService.Get(assetID.ToString()); + + if (a == null) + { + // Whoops, it's still possible here that the notecard name was properly + // formatted like a UUID but isn't an asset UUID so lets look it up by name after all + assetID = SearchTaskInventoryForAssetId(notecardNameOrUuid); + if (assetID == UUID.Zero) + return UUID.Zero; + + if (!NotecardCache.IsCached(assetID)) + { + a = World.AssetService.Get(assetID.ToString()); + + if (a == null) + { + return UUID.Zero; + } + } + } + + NotecardCache.Cache(assetID, a.Data); + }; + + return assetID; + } + protected UUID SearchTaskInventoryForAssetId(string name) + { + UUID assetId = UUID.Zero; + m_host.TaskInventory.LockItemsForRead(true); + foreach (TaskInventoryItem item in m_host.TaskInventory.Values) + { + if (item.Type == 7 && item.Name == name) + { + assetId = item.AssetID; + } + } + m_host.TaskInventory.LockItemsForRead(false); + return assetId; + } + + } +}