174 lines
5.2 KiB
C#
174 lines
5.2 KiB
C#
using System;
|
|
using OpenMetaverse;
|
|
using OpenMetaverse.StructuredData;
|
|
|
|
namespace LibreMetaverse
|
|
{
|
|
class InventoryAISClient
|
|
{
|
|
readonly string INVENTORY_CAP_NAME = "InventoryAPIv3";
|
|
readonly string LIBRARY_CAP_NAME = "LibraryAPIv3";
|
|
|
|
enum CommandType {
|
|
COPYINVENTORY,
|
|
SLAMFOLDER,
|
|
REMOVECATEGORY,
|
|
REMOVEITEM,
|
|
PURGEDESCENDENTS,
|
|
UPDATECATEGORY,
|
|
UPDATEITEM,
|
|
COPYLIBRARYCATEGORY
|
|
}
|
|
|
|
[NonSerialized]
|
|
private GridClient Client;
|
|
|
|
public InventoryAISClient(GridClient client)
|
|
{
|
|
Client = client;
|
|
|
|
}
|
|
|
|
public bool IsAvailable => (Client.Network.CurrentSim.Caps != null &&
|
|
Client.Network.CurrentSim.Caps.CapabilityURI(INVENTORY_CAP_NAME) != null);
|
|
|
|
public void CreateInventory(UUID parentUuid, OSD newInventory, Action callback)
|
|
{
|
|
var cap = getInventoryCap();
|
|
if (cap == null)
|
|
{
|
|
Logger.Log("No AIS3 Capability!", Helpers.LogLevel.Warning, Client);
|
|
return;
|
|
}
|
|
|
|
UUID tid = new UUID();
|
|
string url = $"{cap}/category/{parentUuid}?tid={tid}";
|
|
Logger.Log("url: " + url, Helpers.LogLevel.Debug, Client);
|
|
// Enqueue
|
|
}
|
|
|
|
public void SlamFolder(UUID folderUuid, OSD newInventory, Action callback)
|
|
{
|
|
var cap = getInventoryCap();
|
|
if (cap == null)
|
|
{
|
|
Logger.Log("No AIS3 Capability!", Helpers.LogLevel.Warning, Client);
|
|
return;
|
|
}
|
|
|
|
UUID tid = new UUID();
|
|
string url = $"{cap}/category/{folderUuid}/links?tid={tid}";
|
|
Logger.Log("url: " + url, Helpers.LogLevel.Debug, Client);
|
|
// Enqueue
|
|
}
|
|
|
|
public void RemoveCategory(UUID categoryUuid, Action callback)
|
|
{
|
|
var cap = getInventoryCap();
|
|
if (cap == null)
|
|
{
|
|
Logger.Log("No AIS3 Capability!", Helpers.LogLevel.Warning, Client);
|
|
return;
|
|
}
|
|
|
|
UUID tid = new UUID();
|
|
string url = $"{cap}/category/{categoryUuid}";
|
|
Logger.Log("url: " + url, Helpers.LogLevel.Debug, Client);
|
|
// Enqueue
|
|
}
|
|
|
|
public void RemoveItem(UUID itemUuid, Action callback)
|
|
{
|
|
var cap = getInventoryCap();
|
|
if (cap == null)
|
|
{
|
|
Logger.Log("No AIS3 Capability!", Helpers.LogLevel.Warning, Client);
|
|
return;
|
|
}
|
|
|
|
string url = $"{cap}/item/{itemUuid}";
|
|
Logger.Log("url: " + url, Helpers.LogLevel.Debug, Client);
|
|
// Enqueue
|
|
}
|
|
|
|
public void CopyLibraryCategory(UUID sourceUuid, UUID destUuid, bool copySubfolders, Action callback)
|
|
{
|
|
var cap = getLibraryCap();
|
|
if (cap == null)
|
|
{
|
|
Logger.Log("No AIS3 Capability!", Helpers.LogLevel.Warning, Client);
|
|
return;
|
|
}
|
|
|
|
UUID tid = new UUID();
|
|
string url = $"{cap}/category/{sourceUuid}?tid={tid}";
|
|
if (copySubfolders)
|
|
url += ",depth=0";
|
|
Logger.Log("url: " + url, Helpers.LogLevel.Debug, Client);
|
|
// Enqueue
|
|
}
|
|
|
|
public void PurgeDescendents(UUID categoryUuid, Action callback)
|
|
{
|
|
var cap = getInventoryCap();
|
|
if (cap == null)
|
|
{
|
|
Logger.Log("No AIS3 Capability!", Helpers.LogLevel.Warning, Client);
|
|
return;
|
|
}
|
|
|
|
string url = $"{cap}/category/{categoryUuid}/children";
|
|
Logger.Log("url: " + url, Helpers.LogLevel.Debug, Client);
|
|
// Enqueue
|
|
}
|
|
|
|
public void UpdateCategory(UUID categoryUuid, OSD updates, Action callback)
|
|
{
|
|
var cap = getInventoryCap();
|
|
if (cap == null)
|
|
{
|
|
Logger.Log("No AIS3 Capability!", Helpers.LogLevel.Warning, Client);
|
|
return;
|
|
}
|
|
|
|
string url = $"{cap}/category/{categoryUuid}";
|
|
Logger.Log("url: " + url, Helpers.LogLevel.Debug, Client);
|
|
// Enqueue
|
|
}
|
|
|
|
public void UpdateItem(UUID itemUuid, OSD updates, Action callback)
|
|
{
|
|
var cap = getInventoryCap();
|
|
if (cap == null)
|
|
{
|
|
Logger.Log("No AIS3 Capability!", Helpers.LogLevel.Warning, Client);
|
|
return;
|
|
}
|
|
|
|
string url = $"{cap}/item/{itemUuid}";
|
|
Logger.Log("url: " + url, Helpers.LogLevel.Debug, Client);
|
|
// Enqueue
|
|
}
|
|
|
|
private Uri getInventoryCap()
|
|
{
|
|
Uri cap = null;
|
|
if (Client.Network.CurrentSim.Caps != null)
|
|
{
|
|
cap = Client.Network.CurrentSim.Caps.CapabilityURI(INVENTORY_CAP_NAME);
|
|
}
|
|
return cap;
|
|
}
|
|
|
|
private Uri getLibraryCap()
|
|
{
|
|
Uri cap = null;
|
|
if (Client.Network.CurrentSim.Caps != null)
|
|
{
|
|
cap = Client.Network.CurrentSim.Caps.CapabilityURI(LIBRARY_CAP_NAME);
|
|
}
|
|
return cap;
|
|
}
|
|
}
|
|
}
|