corrade-vassal – Rev 1

Subversion Repositories:
Rev:
using System;
using System.Text.RegularExpressions;
using OpenMetaverse;

namespace OpenMetaverse.TestClient
{
    public class PrimRegexCommand : Command
    {
        public PrimRegexCommand(TestClient testClient)
        {
            Name = "primregex";
            Description = "Find prim by text predicat. " +
                "Usage: primregex [text predicat] (eg findprim .away.)";
            Category = CommandCategory.Objects;
        }

        public override string Execute(string[] args, UUID fromAgentID)
        {
            if (args.Length < 1)
                return "Usage: primregex [text predicat]";

            try
            {
                // Build the predicat from the args list
                string predicatPrim = string.Empty;
                for (int i = 0; i < args.Length; i++)
                    predicatPrim += args[i] + " ";
                predicatPrim = predicatPrim.TrimEnd();

                // Build Regex
                Regex regexPrimName = new Regex(predicatPrim.ToLower());

                // Print result
                Logger.Log(string.Format("Searching prim for [{0}] ({1} prims loaded in simulator)\n", predicatPrim,
                    Client.Network.CurrentSim.ObjectsPrimitives.Count), Helpers.LogLevel.Info, Client);

                Client.Network.CurrentSim.ObjectsPrimitives.ForEach(
                    delegate(Primitive prim)
                    {
                        bool match = false;
                        string name = "(unknown)";
                        string description = "(unknown)";


                        match = (prim.Text != null && regexPrimName.IsMatch(prim.Text.ToLower()));

                        if (prim.Properties != null && !match)
                        {
                            match = regexPrimName.IsMatch(prim.Properties.Name.ToLower());
                            if (!match)
                                match = regexPrimName.IsMatch(prim.Properties.Description.ToLower());
                        }

                        if (match)
                        {
                            if (prim.Properties != null)
                            {
                                name = prim.Properties.Name;
                                description = prim.Properties.Description;
                            }
                            Logger.Log(string.Format("\nNAME={0}\nID = {1}\nFLAGS = {2}\nTEXT = '{3}'\nDESC='{4}'", name,
                                prim.ID, prim.Flags.ToString(), prim.Text, description), Helpers.LogLevel.Info, Client);
                        }
                    }
                );
            }
            catch (System.Exception e)
            {
                Logger.Log(e.Message, Helpers.LogLevel.Error, Client, e);
                return "Error searching";
            }

            return "Done searching";
        }
    }
}