LIBOMV-359 Reverting InventoryManager/Inventory system to old inventory system based on r2020, Disabled GUI library in prebuild.xml as its based on the new inventory system and needs to be rewritten to be used with the old inventorymanager (or re-enabled when new inventory system is added back to trunk
git-svn-id: http://libopenmetaverse.googlecode.com/svn/trunk@2126 52acb1d6-8a22-11de-b505-999d5b087335
This commit is contained in:
@@ -61,7 +61,7 @@ namespace OpenMetaverse.TestClient
|
||||
#endregion AvatarAppearance to AgentSetAppearance
|
||||
|
||||
// Detach everything we are currently wearing
|
||||
Client.Appearance.AddAttachments(new List<ItemData>(0), true);
|
||||
Client.Appearance.AddAttachments(new List<InventoryBase>(), true);
|
||||
|
||||
// Send the new appearance packet
|
||||
Client.Network.SendPacket(set);
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
using System;
|
||||
using OpenMetaverse;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace OpenMetaverse.TestClient
|
||||
{
|
||||
public class WearCommand : Command
|
||||
{
|
||||
public WearCommand(TestClient testClient)
|
||||
public WearCommand(TestClient testClient)
|
||||
{
|
||||
Client = testClient;
|
||||
Name = "wear";
|
||||
@@ -17,7 +16,7 @@ namespace OpenMetaverse.TestClient
|
||||
public override string Execute(string[] args, UUID fromAgentID)
|
||||
{
|
||||
if (args.Length < 1)
|
||||
return "Usage: wear [outfit name] [nobake] eg: 'wear \"/Clothing/My Outfit\" [nobake]'";
|
||||
return "Usage: wear [outfit name] eg: 'wear /My Outfit/Dance Party";
|
||||
|
||||
string target = String.Empty;
|
||||
bool bake = true;
|
||||
@@ -30,13 +29,11 @@ namespace OpenMetaverse.TestClient
|
||||
target = target + args[ct] + " ";
|
||||
}
|
||||
|
||||
List<InventoryBase> results = Client.InventoryStore.InventoryFromPath(target, Client.CurrentDirectory, true);
|
||||
if (results.Count == 0 || !(results[0] is InventoryFolder))
|
||||
return "Unable to find folder at " + target;
|
||||
target = target.TrimEnd();
|
||||
|
||||
try
|
||||
{
|
||||
Client.Appearance.WearOutfit(results[0] as InventoryFolder, bake);
|
||||
Client.Appearance.WearOutfit(target.Split('/'), bake);
|
||||
}
|
||||
catch (InvalidOutfitException ex)
|
||||
{
|
||||
|
||||
@@ -155,7 +155,7 @@ namespace OpenMetaverse.TestClient
|
||||
|
||||
BackupWorker = new BackgroundWorker();
|
||||
BackupWorker.WorkerSupportsCancellation = true;
|
||||
BackupWorker.DoWork +=new DoWorkEventHandler(bwBackup_DoWork);
|
||||
BackupWorker.DoWork += new DoWorkEventHandler(bwBackup_DoWork);
|
||||
BackupWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bwBackup_RunWorkerCompleted);
|
||||
|
||||
BackupWorker.RunWorkerAsync(args);
|
||||
@@ -202,7 +202,7 @@ namespace OpenMetaverse.TestClient
|
||||
qdi.IsRequested = true;
|
||||
qdi.TransferID = Client.Assets.RequestInventoryAsset(
|
||||
qdi.AssetID, qdi.ItemID, qdi.TaskID, qdi.OwnerID, qdi.Type, true);
|
||||
|
||||
|
||||
lock (CurrentDownloads) CurrentDownloads.Add(qdi);
|
||||
}
|
||||
}
|
||||
@@ -229,7 +229,7 @@ namespace OpenMetaverse.TestClient
|
||||
|
||||
TextItemsFound = 0;
|
||||
|
||||
args = (string[]) e.Argument;
|
||||
args = (string[])e.Argument;
|
||||
|
||||
lock (CurrentDownloads) CurrentDownloads.Clear();
|
||||
|
||||
@@ -240,7 +240,7 @@ namespace OpenMetaverse.TestClient
|
||||
DirectoryInfo di = new DirectoryInfo(args[1]);
|
||||
|
||||
// recurse on the root folder into the entire inventory
|
||||
BackupFolder(Client.InventoryStore.RootFolder, di.FullName);
|
||||
BackupFolder(Client.Inventory.Store.RootNode, di.FullName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -248,43 +248,42 @@ namespace OpenMetaverse.TestClient
|
||||
/// </summary>
|
||||
/// <param name="folder">The current leaf in the inventory tree</param>
|
||||
/// <param name="sPathSoFar">path so far, in the form @"c:\here" -- this needs to be "clean" for the current filesystem</param>
|
||||
private void BackupFolder(InventoryFolder folder, string sPathSoFar)
|
||||
private void BackupFolder(InventoryNode folder, string sPathSoFar)
|
||||
{
|
||||
StringBuilder sbRequests = new StringBuilder();
|
||||
|
||||
|
||||
if (folder.IsStale)
|
||||
folder.DownloadContents(TimeSpan.FromSeconds(10));
|
||||
// FIXME:
|
||||
//Client.Inventory.RequestFolderContents(folder.Data.UUID, Client.Self.AgentID, true, true, false,
|
||||
// InventorySortOrder.ByName);
|
||||
|
||||
// first scan this folder for text
|
||||
|
||||
foreach (InventoryBase ib in folder)
|
||||
foreach (InventoryNode iNode in folder.Nodes.Values)
|
||||
{
|
||||
if (BackupWorker.CancellationPending)
|
||||
return;
|
||||
if (ib is InventoryItem)
|
||||
if (iNode.Data is OpenMetaverse.InventoryItem)
|
||||
{
|
||||
InventoryItem ii = ib as InventoryItem;
|
||||
if (ii.Data.AssetType == AssetType.LSLText || ii.Data.AssetType == AssetType.Notecard)
|
||||
InventoryItem ii = iNode.Data as InventoryItem;
|
||||
if (ii.AssetType == AssetType.LSLText || ii.AssetType == AssetType.Notecard)
|
||||
{
|
||||
// check permissions on scripts
|
||||
if (ii.Data.AssetType == AssetType.LSLText)
|
||||
if (ii.AssetType == AssetType.LSLText)
|
||||
{
|
||||
if ((ii.Data.Permissions.OwnerMask & PermissionMask.Modify) == PermissionMask.None)
|
||||
if ((ii.Permissions.OwnerMask & PermissionMask.Modify) == PermissionMask.None)
|
||||
{
|
||||
// skip this one
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
string sExtension = (ii.Data.AssetType == AssetType.LSLText) ? ".lsl" : ".txt";
|
||||
string sExtension = (ii.AssetType == AssetType.LSLText) ? ".lsl" : ".txt";
|
||||
// make the output file
|
||||
string sPath = sPathSoFar + @"\" + MakeValid(ii.Name.Trim()) + sExtension;
|
||||
|
||||
// create the new qdi
|
||||
QueuedDownloadInfo qdi = new QueuedDownloadInfo(sPath, ii.Data.AssetUUID, ii.UUID, UUID.Zero,
|
||||
Client.Self.AgentID, ii.Data.AssetType);
|
||||
|
||||
QueuedDownloadInfo qdi = new QueuedDownloadInfo(sPath, ii.AssetUUID, iNode.Data.UUID, UUID.Zero,
|
||||
Client.Self.AgentID, ii.AssetType);
|
||||
|
||||
// add it to the queue
|
||||
lock (PendingDownloads)
|
||||
{
|
||||
@@ -296,12 +295,12 @@ namespace OpenMetaverse.TestClient
|
||||
}
|
||||
|
||||
// now run any subfolders
|
||||
foreach (InventoryBase ib in folder)
|
||||
foreach (InventoryNode i in folder.Nodes.Values)
|
||||
{
|
||||
if (BackupWorker.CancellationPending)
|
||||
return;
|
||||
else if (ib is InventoryFolder)
|
||||
BackupFolder(ib as InventoryFolder, sPathSoFar + @"\" + MakeValid(ib.Name.Trim()));
|
||||
else if (i.Data is OpenMetaverse.InventoryFolder)
|
||||
BackupFolder(i, sPathSoFar + @"\" + MakeValid(i.Data.Name.Trim()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -336,7 +335,7 @@ namespace OpenMetaverse.TestClient
|
||||
else
|
||||
{
|
||||
TextItemErrors++;
|
||||
Console.WriteLine("{0}: Download of asset {1} ({2}) failed with status {3}", Name, r.FileName,
|
||||
Console.WriteLine("{0}: Download of asset {1} ({2}) failed with status {3}", Name, r.FileName,
|
||||
r.AssetID.ToString(), asset.Status.ToString());
|
||||
}
|
||||
|
||||
|
||||
@@ -19,34 +19,68 @@ namespace OpenMetaverse.TestClient.Commands.Inventory.Shell
|
||||
public override string Execute(string[] args, UUID fromAgentID)
|
||||
{
|
||||
Manager = Client.Inventory;
|
||||
Inventory = Client.InventoryStore;
|
||||
Inventory = Client.Inventory.Store;
|
||||
|
||||
if (args.Length > 1)
|
||||
return "Usage: cd [path-to-folder]";
|
||||
string pathStr = "";
|
||||
string[] path = null;
|
||||
if (args.Length == 0)
|
||||
return "Current folder: " + Client.CurrentDirectory.Name;
|
||||
|
||||
string path = args[0];
|
||||
for(int i = 1; i < args.Length; ++i)
|
||||
{
|
||||
path += " " + args[i];
|
||||
path = new string[] { "" };
|
||||
// cd without any arguments doesn't do anything.
|
||||
}
|
||||
|
||||
List<InventoryBase> results = Inventory.InventoryFromPath(path, Client.CurrentDirectory, true);
|
||||
if (results.Count == 0)
|
||||
return "Can not find inventory at: " + path;
|
||||
InventoryFolder destFolder = null;
|
||||
foreach (InventoryBase ib in results)
|
||||
else if (args.Length == 1)
|
||||
{
|
||||
if (ib is InventoryFolder)
|
||||
pathStr = args[0];
|
||||
path = pathStr.Split(new char[] { '/' });
|
||||
// Use '/' as a path seperator.
|
||||
}
|
||||
InventoryFolder currentFolder = Client.CurrentDirectory;
|
||||
if (pathStr.StartsWith("/"))
|
||||
currentFolder = Inventory.RootFolder;
|
||||
|
||||
if (currentFolder == null) // We need this to be set to something.
|
||||
return "Error: Client not logged in.";
|
||||
|
||||
// Traverse the path, looking for the
|
||||
for (int i = 0; i < path.Length; ++i)
|
||||
{
|
||||
string nextName = path[i];
|
||||
if (string.IsNullOrEmpty(nextName) || nextName == ".")
|
||||
continue; // Ignore '.' and blanks, stay in the current directory.
|
||||
if (nextName == ".." && currentFolder != Inventory.RootFolder)
|
||||
{
|
||||
destFolder = ib as InventoryFolder;
|
||||
break;
|
||||
// If we encounter .., move to the parent folder.
|
||||
currentFolder = Inventory[currentFolder.ParentUUID] as InventoryFolder;
|
||||
}
|
||||
else
|
||||
{
|
||||
List<InventoryBase> currentContents = Inventory.GetContents(currentFolder);
|
||||
// Try and find an InventoryBase with the corresponding name.
|
||||
bool found = false;
|
||||
foreach (InventoryBase item in currentContents)
|
||||
{
|
||||
// Allow lookup by UUID as well as name:
|
||||
if (item.Name == nextName || item.UUID.ToString() == nextName)
|
||||
{
|
||||
found = true;
|
||||
if (item is InventoryFolder)
|
||||
{
|
||||
currentFolder = item as InventoryFolder;
|
||||
}
|
||||
else
|
||||
{
|
||||
return item.Name + " is not a folder.";
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!found)
|
||||
return nextName + " not found in " + currentFolder.Name;
|
||||
}
|
||||
}
|
||||
if (destFolder == null)
|
||||
return path + " is not a folder.";
|
||||
|
||||
Client.CurrentDirectory = destFolder;
|
||||
return "Current folder: " + Client.CurrentDirectory.Name;
|
||||
Client.CurrentDirectory = currentFolder;
|
||||
return "Current folder: " + currentFolder.Name;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -16,19 +16,19 @@ namespace OpenMetaverse.TestClient
|
||||
|
||||
void OnNoteUpdate(bool success, string status, UUID itemID, UUID assetID)
|
||||
{
|
||||
if (success)
|
||||
Console.WriteLine("Notecard successfully uploaded, ItemID {0} AssetID {1}", itemID, assetID);
|
||||
if (success)
|
||||
Console.WriteLine("Notecard successfully uploaded, ItemID {0} AssetID {1}", itemID, assetID);
|
||||
}
|
||||
|
||||
public override string Execute(string[] args, UUID fromAgentID)
|
||||
{
|
||||
if(args.Length < 1)
|
||||
if (args.Length < 1)
|
||||
return "Usage: createnotecard filename.txt";
|
||||
|
||||
string file = String.Empty;
|
||||
for (int ct = 0; ct < args.Length; ct++)
|
||||
file = file + args[ct] + " ";
|
||||
file = file.TrimEnd();
|
||||
for (int ct = 0; ct < args.Length; ct++)
|
||||
file = file + args[ct] + " ";
|
||||
file = file.TrimEnd();
|
||||
|
||||
Console.WriteLine("Filename: {0}", file);
|
||||
if (!File.Exists(file))
|
||||
@@ -45,9 +45,10 @@ namespace OpenMetaverse.TestClient
|
||||
|
||||
Client.Inventory.RequestCreateItem(Client.Inventory.FindFolderForType(AssetType.Notecard),
|
||||
file, desc, AssetType.Notecard, UUID.Random(), InventoryType.Notecard, PermissionMask.All,
|
||||
delegate(bool success, ItemData item) {
|
||||
if(success) // upload the asset
|
||||
Client.Inventory.RequestUploadNotecardAsset(CreateNotecardAsset(body), item.UUID, new InventoryManager.NotecardUploadedAssetCallback(OnNoteUpdate));
|
||||
delegate(bool success, InventoryItem item)
|
||||
{
|
||||
if (success) // upload the asset
|
||||
Client.Inventory.RequestUploadNotecardAsset(CreateNotecardAsset(body), item.UUID, new InventoryManager.NotecardUploadedAssetCallback(OnNoteUpdate));
|
||||
}
|
||||
);
|
||||
return "Done";
|
||||
@@ -83,4 +84,4 @@ namespace OpenMetaverse.TestClient
|
||||
return assetData;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -14,7 +14,7 @@ namespace OpenMetaverse.TestClient
|
||||
/// </summary>
|
||||
public class DeleteFolderCommand : Command
|
||||
{
|
||||
public DeleteFolderCommand(TestClient testClient)
|
||||
public DeleteFolderCommand(TestClient testClient)
|
||||
{
|
||||
Name = "deleteFolder";
|
||||
Description = "Moves a folder to the Trash Folder";
|
||||
@@ -27,27 +27,19 @@ namespace OpenMetaverse.TestClient
|
||||
string target = String.Empty;
|
||||
for (int ct = 0; ct < args.Length; ct++)
|
||||
target = target + args[ct] + " ";
|
||||
target = target.TrimEnd();
|
||||
|
||||
// initialize results list
|
||||
List<InventoryBase> found = new List<InventoryBase>();
|
||||
try
|
||||
{
|
||||
// find the folder
|
||||
|
||||
found = Client.InventoryStore.InventoryFromPath(target, Client.CurrentDirectory, true);
|
||||
if (found.Count > 0)
|
||||
found = Client.Inventory.LocalFind(Client.Inventory.Store.RootFolder.UUID, target.Split('/'), 0, true);
|
||||
if (found.Count.Equals(1))
|
||||
{
|
||||
InventoryBase item = found[0];
|
||||
InventoryFolder trash = Client.InventoryStore[Client.Inventory.FindFolderForType(AssetType.TrashFolder)] as InventoryFolder;
|
||||
if (trash != null)
|
||||
{
|
||||
item.Move(trash);
|
||||
return String.Format("Moved folder {0} ({1}) to Trash", item.Name, item.UUID);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return String.Format("Unable to locate {0}", target);
|
||||
// move the folder to the trash folder
|
||||
Client.Inventory.MoveFolder(found[0].UUID, Client.Inventory.FindFolderForType(AssetType.TrashFolder));
|
||||
return String.Format("Moved folder {0} to Trash", found[0].Name);
|
||||
}
|
||||
}
|
||||
catch (InvalidOutfitException ex)
|
||||
@@ -55,6 +47,6 @@ namespace OpenMetaverse.TestClient
|
||||
return "Folder Not Found: (" + ex.Message + ")";
|
||||
}
|
||||
return string.Empty;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -26,24 +26,34 @@ namespace OpenMetaverse.TestClient.Commands.Inventory.Shell
|
||||
return "First argument expected agent UUID.";
|
||||
}
|
||||
Manager = Client.Inventory;
|
||||
Inventory = Client.InventoryStore;
|
||||
Inventory = Manager.Store;
|
||||
string ret = "";
|
||||
string nl = "\n";
|
||||
for (int i = 1; i < args.Length; ++i)
|
||||
{
|
||||
string itemPath = args[i];
|
||||
|
||||
List<InventoryBase> results = Inventory.InventoryFromPath(itemPath, Client.CurrentDirectory, true);
|
||||
|
||||
if (results.Count == 0)
|
||||
string inventoryName = args[i];
|
||||
// WARNING: Uses local copy of inventory contents, need to download them first.
|
||||
List<InventoryBase> contents = Inventory.GetContents(Client.CurrentDirectory);
|
||||
bool found = false;
|
||||
foreach (InventoryBase b in contents)
|
||||
{
|
||||
ret += "No inventory item at " + itemPath + " found." + nl;
|
||||
}
|
||||
else
|
||||
{
|
||||
results[0].Give(dest, true);
|
||||
ret += "Gave " + results[0].Name + nl;
|
||||
if (inventoryName == b.Name || inventoryName == b.UUID.ToString())
|
||||
{
|
||||
found = true;
|
||||
if (b is InventoryItem)
|
||||
{
|
||||
InventoryItem item = b as InventoryItem;
|
||||
Manager.GiveItem(item.UUID, item.Name, item.AssetType, dest, true);
|
||||
ret += "Gave " + item.Name + nl;
|
||||
}
|
||||
else
|
||||
{
|
||||
ret += "Unable to give folder " + b.Name + nl;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!found)
|
||||
ret += "No inventory item named " + inventoryName + " found." + nl;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -14,8 +14,8 @@ namespace OpenMetaverse.TestClient
|
||||
{
|
||||
private Inventory Inventory;
|
||||
private InventoryManager Manager;
|
||||
|
||||
public InventoryCommand(TestClient testClient)
|
||||
|
||||
public InventoryCommand(TestClient testClient)
|
||||
{
|
||||
Name = "i";
|
||||
Description = "Prints out inventory.";
|
||||
@@ -25,7 +25,7 @@ namespace OpenMetaverse.TestClient
|
||||
public override string Execute(string[] args, UUID fromAgentID)
|
||||
{
|
||||
Manager = Client.Inventory;
|
||||
Inventory = Client.InventoryStore;
|
||||
Inventory = Manager.Store;
|
||||
|
||||
StringBuilder result = new StringBuilder();
|
||||
|
||||
@@ -35,29 +35,17 @@ namespace OpenMetaverse.TestClient
|
||||
return result.ToString();
|
||||
}
|
||||
|
||||
void PrintFolder(InventoryFolder folder, StringBuilder result, int indent)
|
||||
void PrintFolder(InventoryFolder f, StringBuilder result, int indent)
|
||||
{
|
||||
folder.DownloadContents(TimeSpan.FromSeconds(10));
|
||||
foreach (InventoryBase b in folder)
|
||||
foreach (InventoryBase i in Manager.FolderContents(f.UUID, Client.Self.AgentID, true, true, InventorySortOrder.ByName, 3000))
|
||||
{
|
||||
if (b is InventoryFolder)
|
||||
result.AppendFormat("{0}{1} ({2})\n", new String(' ', indent * 2), i.Name, i.UUID);
|
||||
if (i is InventoryFolder)
|
||||
{
|
||||
result.Append(Print(b as InventoryFolder, indent));
|
||||
PrintFolder(b as InventoryFolder, result, indent + 1);
|
||||
}
|
||||
else if (b is InventoryItem)
|
||||
{
|
||||
result.Append(Print(b as InventoryItem, indent));
|
||||
InventoryFolder folder = (InventoryFolder)i;
|
||||
PrintFolder(folder, result, indent + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
string Print(InventoryItem item, int indent)
|
||||
{
|
||||
return string.Format("{0}{1} ({2})\n", new String(' ', indent * 2), item.Data.Name, item.UUID);
|
||||
}
|
||||
string Print(InventoryFolder folder, int indent)
|
||||
{
|
||||
return string.Format("{0}{1} ({2})\n", new String(' ', indent * 2), folder.Data.Name, folder.UUID);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -17,49 +17,20 @@ namespace OpenMetaverse.TestClient.Commands.Inventory.Shell
|
||||
}
|
||||
public override string Execute(string[] args, UUID fromAgentID)
|
||||
{
|
||||
Manager = Client.Inventory;
|
||||
Inventory = Client.InventoryStore;
|
||||
if (args.Length > 1)
|
||||
return "Usage: ls [-l] [directory path]";
|
||||
return "Usage: ls [-l]";
|
||||
bool longDisplay = false;
|
||||
InventoryFolder directory = Client.CurrentDirectory;
|
||||
if (args.Length > 0)
|
||||
{
|
||||
int start = 0;
|
||||
if (args[0] == "-l")
|
||||
{
|
||||
longDisplay = true;
|
||||
start = 1;
|
||||
}
|
||||
if (start < args.Length)
|
||||
{
|
||||
string path = args[start];
|
||||
for (int i = start + 1; i < args.Length; ++i)
|
||||
{
|
||||
path += " " + args[i];
|
||||
}
|
||||
bool found = false;
|
||||
List<InventoryBase> results = Inventory.InventoryFromPath(path, Client.CurrentDirectory, true);
|
||||
foreach (InventoryBase ib in results)
|
||||
{
|
||||
if (ib is InventoryFolder)
|
||||
{
|
||||
directory = ib as InventoryFolder;
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
if (!found)
|
||||
return "Unable to find directory at path: " + path;
|
||||
}
|
||||
}
|
||||
|
||||
if (directory.IsStale)
|
||||
directory.DownloadContents(TimeSpan.FromSeconds(30));
|
||||
if (args.Length > 0 && args[0] == "-l")
|
||||
longDisplay = true;
|
||||
|
||||
Manager = Client.Inventory;
|
||||
Inventory = Manager.Store;
|
||||
// WARNING: Uses local copy of inventory contents, need to download them first.
|
||||
List<InventoryBase> contents = Inventory.GetContents(Client.CurrentDirectory);
|
||||
string displayString = "";
|
||||
string nl = "\n"; // New line character
|
||||
// Pretty simple, just print out the contents.
|
||||
foreach (InventoryBase b in directory)
|
||||
foreach (InventoryBase b in contents)
|
||||
{
|
||||
if (longDisplay)
|
||||
{
|
||||
@@ -80,17 +51,16 @@ namespace OpenMetaverse.TestClient.Commands.Inventory.Shell
|
||||
{
|
||||
InventoryItem item = b as InventoryItem;
|
||||
displayString += "-";
|
||||
displayString += PermMaskString(item.Data.Permissions.OwnerMask);
|
||||
displayString += PermMaskString(item.Data.Permissions.GroupMask);
|
||||
displayString += PermMaskString(item.Data.Permissions.EveryoneMask);
|
||||
displayString += PermMaskString(item.Permissions.OwnerMask);
|
||||
displayString += PermMaskString(item.Permissions.GroupMask);
|
||||
displayString += PermMaskString(item.Permissions.EveryoneMask);
|
||||
displayString += " " + item.UUID;
|
||||
displayString += " " + item.Name;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
string name = b.Name;
|
||||
displayString += name;
|
||||
displayString += b.Name;
|
||||
}
|
||||
displayString += nl;
|
||||
}
|
||||
@@ -106,7 +76,8 @@ namespace OpenMetaverse.TestClient.Commands.Inventory.Shell
|
||||
/// </summary>
|
||||
/// <param name="mask"></param>
|
||||
/// <returns></returns>
|
||||
private static string PermMaskString(PermissionMask mask) {
|
||||
private static string PermMaskString(PermissionMask mask)
|
||||
{
|
||||
string str = "";
|
||||
if (((uint)mask | (uint)PermissionMask.Copy) == (uint)PermissionMask.Copy)
|
||||
str += "C";
|
||||
|
||||
@@ -29,22 +29,24 @@ namespace OpenMetaverse.TestClient
|
||||
else
|
||||
return "Couldn't find prim " + objectID.ToString();
|
||||
|
||||
List<ItemData> items;
|
||||
List<FolderData> folders;
|
||||
Client.Inventory.GetTaskInventory(objectID, objectLocalID, TimeSpan.FromMilliseconds(1000 * 30), out items, out folders);
|
||||
List<InventoryBase> items = Client.Inventory.GetTaskInventory(objectID, objectLocalID, 1000 * 30);
|
||||
|
||||
if (items != null)
|
||||
{
|
||||
string result = String.Empty;
|
||||
|
||||
foreach (ItemData item in items)
|
||||
for (int i = 0; i < items.Count; i++)
|
||||
{
|
||||
result += String.Format("[Item] Name: {0} Desc: {1} Type: {2}", item.Name, item.Description,
|
||||
if (items[i] is InventoryFolder)
|
||||
{
|
||||
result += String.Format("[Folder] Name: {0}", items[i].Name) + Environment.NewLine;
|
||||
}
|
||||
else
|
||||
{
|
||||
InventoryItem item = (InventoryItem)items[i];
|
||||
result += String.Format("[Item] Name: {0} Desc: {1} Type: {2}", item.Name, item.Description,
|
||||
item.AssetType) + Environment.NewLine;
|
||||
}
|
||||
foreach (FolderData folder in folders)
|
||||
{
|
||||
result += String.Format("[Folder] Name: {0}", folder.Name) + Environment.NewLine;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
@@ -131,18 +131,20 @@ namespace OpenMetaverse.TestClient
|
||||
{
|
||||
if ((prim.Flags & LLObject.ObjectFlags.InventoryEmpty) == 0)
|
||||
{
|
||||
List<ItemData> items;
|
||||
List<FolderData> folders;
|
||||
Client.Inventory.GetTaskInventory(prim.ID, prim.LocalID, TimeSpan.FromSeconds(30), out items, out folders);
|
||||
List<InventoryBase> items = Client.Inventory.GetTaskInventory(prim.ID, prim.LocalID, 1000 * 30);
|
||||
|
||||
if (items != null)
|
||||
{
|
||||
foreach (ItemData item in items)
|
||||
for (int i = 0; i < items.Count; i++)
|
||||
{
|
||||
ItemData iitem = item;
|
||||
iitem.Permissions.NextOwnerMask = Perms;
|
||||
Client.Inventory.UpdateTaskInventory(prim.LocalID, iitem);
|
||||
++taskItems;
|
||||
if (!(items[i] is InventoryFolder))
|
||||
{
|
||||
InventoryItem item = (InventoryItem)items[i];
|
||||
item.Permissions.NextOwnerMask = Perms;
|
||||
|
||||
Client.Inventory.UpdateTaskInventory(prim.LocalID, item);
|
||||
++taskItems;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,14 +12,14 @@ namespace OpenMetaverse.TestClient
|
||||
{
|
||||
public UUID GroupID = UUID.Zero;
|
||||
public Dictionary<UUID, GroupMember> GroupMembers;
|
||||
public Dictionary<UUID, AvatarAppearancePacket> Appearances = new Dictionary<UUID, AvatarAppearancePacket>();
|
||||
public Dictionary<string, Command> Commands = new Dictionary<string,Command>();
|
||||
public bool Running = true;
|
||||
public Dictionary<UUID, AvatarAppearancePacket> Appearances = new Dictionary<UUID, AvatarAppearancePacket>();
|
||||
public Dictionary<string, Command> Commands = new Dictionary<string, Command>();
|
||||
public bool Running = true;
|
||||
public bool GroupCommands = false;
|
||||
public string MasterName = String.Empty;
|
||||
public UUID MasterKey = UUID.Zero;
|
||||
public bool AllowObjectMaster = false;
|
||||
public ClientManager ClientManager;
|
||||
public ClientManager ClientManager;
|
||||
public VoiceManager VoiceManager;
|
||||
// Shell-like inventory commands need to be aware of the 'current' inventory folder.
|
||||
public InventoryFolder CurrentDirectory = null;
|
||||
@@ -35,7 +35,7 @@ namespace OpenMetaverse.TestClient
|
||||
/// </summary>
|
||||
public TestClient(ClientManager manager)
|
||||
{
|
||||
ClientManager = manager;
|
||||
ClientManager = manager;
|
||||
|
||||
updateTimer = new System.Timers.Timer(500);
|
||||
updateTimer.Elapsed += new System.Timers.ElapsedEventHandler(updateTimer_Elapsed);
|
||||
@@ -60,6 +60,7 @@ namespace OpenMetaverse.TestClient
|
||||
Network.RegisterCallback(PacketType.AlertMessage, new NetworkManager.PacketCallback(AlertMessageHandler));
|
||||
|
||||
VoiceManager = new VoiceManager(this);
|
||||
|
||||
updateTimer.Start();
|
||||
}
|
||||
|
||||
@@ -68,16 +69,12 @@ namespace OpenMetaverse.TestClient
|
||||
/// </summary>
|
||||
/// <param name="login">The status of the login</param>
|
||||
/// <param name="message">Error message on failure, MOTD on success.</param>
|
||||
public void LoginHandler(LoginStatus login, string message)
|
||||
public void LoginHandler(LoginStatus login, string message)
|
||||
{
|
||||
if (login == LoginStatus.Success)
|
||||
{
|
||||
// Create the stores:
|
||||
InventoryStore = new Inventory(Inventory, Inventory.InventorySkeleton);
|
||||
LibraryStore = new Inventory(Inventory, Inventory.LibrarySkeleton);
|
||||
|
||||
// Start in the inventory root folder:
|
||||
CurrentDirectory = InventoryStore.RootFolder;
|
||||
// Start in the inventory root folder.
|
||||
CurrentDirectory = Inventory.Store.RootFolder;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -103,17 +100,18 @@ namespace OpenMetaverse.TestClient
|
||||
|
||||
public void RegisterCommand(Command command)
|
||||
{
|
||||
command.Client = this;
|
||||
if (!Commands.ContainsKey(command.Name.ToLower()))
|
||||
{
|
||||
command.Client = this;
|
||||
if (!Commands.ContainsKey(command.Name.ToLower()))
|
||||
{
|
||||
Commands.Add(command.Name.ToLower(), command);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//breaks up large responses to deal with the max IM size
|
||||
private void SendResponseIM(GridClient client, UUID fromAgentID, string data)
|
||||
{
|
||||
for ( int i = 0 ; i < data.Length ; i += 1024 ) {
|
||||
for (int i = 0; i < data.Length; i += 1024)
|
||||
{
|
||||
int y;
|
||||
if ((i + 1023) > data.Length)
|
||||
{
|
||||
@@ -128,33 +126,33 @@ namespace OpenMetaverse.TestClient
|
||||
}
|
||||
}
|
||||
|
||||
public void DoCommand(string cmd, UUID fromAgentID)
|
||||
public void DoCommand(string cmd, UUID fromAgentID)
|
||||
{
|
||||
string[] tokens;
|
||||
string[] tokens;
|
||||
|
||||
try { tokens = Parsing.ParseArguments(cmd); }
|
||||
catch (FormatException ex) { Console.WriteLine(ex.Message); return; }
|
||||
|
||||
if (tokens.Length == 0)
|
||||
return;
|
||||
|
||||
string firstToken = tokens[0].ToLower();
|
||||
|
||||
string firstToken = tokens[0].ToLower();
|
||||
|
||||
// "all balance" will send the balance command to all currently logged in bots
|
||||
if (firstToken == "all" && tokens.Length > 1)
|
||||
{
|
||||
cmd = String.Empty;
|
||||
if (firstToken == "all" && tokens.Length > 1)
|
||||
{
|
||||
cmd = String.Empty;
|
||||
|
||||
// Reserialize all of the arguments except for "all"
|
||||
for (int i = 1; i < tokens.Length; i++)
|
||||
{
|
||||
cmd += tokens[i] + " ";
|
||||
}
|
||||
// Reserialize all of the arguments except for "all"
|
||||
for (int i = 1; i < tokens.Length; i++)
|
||||
{
|
||||
cmd += tokens[i] + " ";
|
||||
}
|
||||
|
||||
ClientManager.DoCommandAll(cmd, fromAgentID);
|
||||
ClientManager.DoCommandAll(cmd, fromAgentID);
|
||||
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (Commands.ContainsKey(firstToken))
|
||||
{
|
||||
@@ -220,10 +218,7 @@ namespace OpenMetaverse.TestClient
|
||||
|
||||
bool groupIM = im.GroupIM && GroupMembers != null && GroupMembers.ContainsKey(im.FromAgentID) ? true : false;
|
||||
|
||||
if ((im.Dialog == InstantMessageDialog.MessageFromObject) && !AllowObjectMaster)
|
||||
return;
|
||||
|
||||
if (im.FromAgentID == MasterKey || im.FromAgentName == MasterName || (GroupCommands && groupIM))
|
||||
if (im.FromAgentID == MasterKey || (GroupCommands && groupIM))
|
||||
{
|
||||
// Received an IM from someone that is authenticated
|
||||
Console.WriteLine("<{0} ({1})> {2}: {3} (@{4}:{5})", im.GroupIM ? "GroupIM" : "IM", im.Dialog, im.FromAgentName, im.Message, im.RegionID, im.Position);
|
||||
@@ -248,31 +243,23 @@ namespace OpenMetaverse.TestClient
|
||||
im.RegionID, im.Position);
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private UUID Inventory_OnInventoryObjectReceived(InstantMessage offer, AssetType type,
|
||||
private bool Inventory_OnInventoryObjectReceived(InstantMessage offer, AssetType type,
|
||||
UUID objectID, bool fromTask)
|
||||
{
|
||||
if (MasterKey != UUID.Zero)
|
||||
{
|
||||
if (offer.FromAgentID != MasterKey)
|
||||
return UUID.Zero;
|
||||
return false;
|
||||
}
|
||||
else if (GroupMembers != null && !GroupMembers.ContainsKey(offer.FromAgentID))
|
||||
{
|
||||
return UUID.Zero;
|
||||
}
|
||||
else if (MasterName != String.Empty)
|
||||
{
|
||||
if (offer.FromAgentName != MasterName)
|
||||
return UUID.Zero;
|
||||
}
|
||||
else if (fromTask && !AllowObjectMaster)
|
||||
{
|
||||
return UUID.Zero;
|
||||
return false;
|
||||
}
|
||||
|
||||
return Inventory.FindFolderForType(type);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user