diff options
Merge branch 'avination' into careminster
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs')
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs | 46 |
1 files changed, 35 insertions, 11 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index d6ce069..10ec34d 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs | |||
@@ -1857,17 +1857,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1857 | { | 1857 | { |
1858 | UUID assetID = UUID.Zero; | 1858 | UUID assetID = UUID.Zero; |
1859 | 1859 | ||
1860 | if (!UUID.TryParse(notecardNameOrUuid, out assetID)) | 1860 | bool notecardNameIsUUID = UUID.TryParse(notecardNameOrUuid, out assetID); |
1861 | |||
1862 | if (!notecardNameIsUUID) | ||
1861 | { | 1863 | { |
1862 | m_host.TaskInventory.LockItemsForRead(true); | 1864 | assetID = SearchTaskInventoryForAssetId(notecardNameOrUuid); |
1863 | foreach (TaskInventoryItem item in m_host.TaskInventory.Values) | ||
1864 | { | ||
1865 | if (item.Type == 7 && item.Name == notecardNameOrUuid) | ||
1866 | { | ||
1867 | assetID = item.AssetID; | ||
1868 | } | ||
1869 | } | ||
1870 | m_host.TaskInventory.LockItemsForRead(false); | ||
1871 | } | 1865 | } |
1872 | 1866 | ||
1873 | if (assetID == UUID.Zero) | 1867 | if (assetID == UUID.Zero) |
@@ -1878,7 +1872,23 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1878 | AssetBase a = World.AssetService.Get(assetID.ToString()); | 1872 | AssetBase a = World.AssetService.Get(assetID.ToString()); |
1879 | 1873 | ||
1880 | if (a == null) | 1874 | if (a == null) |
1881 | return UUID.Zero; | 1875 | { |
1876 | // Whoops, it's still possible here that the notecard name was properly | ||
1877 | // formatted like a UUID but isn't an asset UUID so lets look it up by name after all | ||
1878 | assetID = SearchTaskInventoryForAssetId(notecardNameOrUuid); | ||
1879 | if (assetID == UUID.Zero) | ||
1880 | return UUID.Zero; | ||
1881 | |||
1882 | if (!NotecardCache.IsCached(assetID)) | ||
1883 | { | ||
1884 | a = World.AssetService.Get(assetID.ToString()); | ||
1885 | |||
1886 | if (a == null) | ||
1887 | { | ||
1888 | return UUID.Zero; | ||
1889 | } | ||
1890 | } | ||
1891 | } | ||
1882 | 1892 | ||
1883 | string data = Encoding.UTF8.GetString(a.Data); | 1893 | string data = Encoding.UTF8.GetString(a.Data); |
1884 | NotecardCache.Cache(assetID, data); | 1894 | NotecardCache.Cache(assetID, data); |
@@ -1886,6 +1896,20 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1886 | 1896 | ||
1887 | return assetID; | 1897 | return assetID; |
1888 | } | 1898 | } |
1899 | protected UUID SearchTaskInventoryForAssetId(string name) | ||
1900 | { | ||
1901 | UUID assetId = UUID.Zero; | ||
1902 | m_host.TaskInventory.LockItemsForRead(true); | ||
1903 | foreach (TaskInventoryItem item in m_host.TaskInventory.Values) | ||
1904 | { | ||
1905 | if (item.Type == 7 && item.Name == name) | ||
1906 | { | ||
1907 | assetId = item.AssetID; | ||
1908 | } | ||
1909 | } | ||
1910 | m_host.TaskInventory.LockItemsForRead(false); | ||
1911 | return assetId; | ||
1912 | } | ||
1889 | 1913 | ||
1890 | /// <summary> | 1914 | /// <summary> |
1891 | /// Directly get an entire notecard at once. | 1915 | /// Directly get an entire notecard at once. |