2021-07-25 11:10:52 -05:00
using System.Linq ;
2007-11-20 04:13:40 +00:00
using System.Text.RegularExpressions ;
2008-07-21 21:12:59 +00:00
namespace OpenMetaverse.TestClient
2007-11-20 04:13:40 +00:00
{
public class PrimRegexCommand : Command
{
public PrimRegexCommand ( TestClient testClient )
{
Name = "primregex" ;
Description = "Find prim by text predicat. " +
"Usage: primregex [text predicat] (eg findprim .away.)" ;
2008-07-25 08:55:36 +00:00
Category = CommandCategory . Objects ;
2007-11-20 04:13:40 +00:00
}
2008-07-25 05:15:05 +00:00
public override string Execute ( string [ ] args , UUID fromAgentID )
2007-11-20 04:13:40 +00:00
{
if ( args . Length < 1 )
return "Usage: primregex [text predicat]" ;
try
{
// Build the predicat from the args list
2021-07-25 11:10:52 -05:00
string predicatPrim = args . Aggregate ( string . Empty , ( current , t ) = > current + ( t + " " ) ) ;
2007-11-20 04:13:40 +00:00
predicatPrim = predicatPrim . TrimEnd ( ) ;
// Build Regex
Regex regexPrimName = new Regex ( predicatPrim . ToLower ( ) ) ;
// Print result
2022-02-25 19:38:11 -06:00
Logger . Log (
$"Searching prim for [{predicatPrim}] ({Client.Network.CurrentSim.ObjectsPrimitives.Count} prims loaded in simulator)\n" , Helpers . LogLevel . Info , Client ) ;
2008-05-06 23:57:26 +00:00
2008-01-03 21:55:49 +00:00
Client . Network . CurrentSim . ObjectsPrimitives . ForEach (
2007-11-20 04:13:40 +00:00
delegate ( Primitive prim )
{
2009-02-17 19:00:08 +00:00
bool match = false ;
string name = "(unknown)" ;
string description = "(unknown)" ;
match = ( prim . Text ! = null & & regexPrimName . IsMatch ( prim . Text . ToLower ( ) ) ) ;
if ( prim . Properties ! = null & & ! match )
2007-11-20 04:33:12 +00:00
{
2009-02-17 19:00:08 +00:00
match = regexPrimName . IsMatch ( prim . Properties . Name . ToLower ( ) ) ;
if ( ! match )
match = regexPrimName . IsMatch ( prim . Properties . Description . ToLower ( ) ) ;
2007-11-20 04:33:12 +00:00
}
2009-02-17 19:00:08 +00:00
if ( match )
2007-11-20 04:33:12 +00:00
{
2009-02-17 19:00:08 +00:00
if ( prim . Properties ! = null )
{
name = prim . Properties . Name ;
description = prim . Properties . Description ;
}
2022-02-25 19:38:11 -06:00
Logger . Log (
$"\nNAME={name}\nID = {prim.ID}\nFLAGS = {prim.Flags.ToString()}\nTEXT = '{prim.Text}'\nDESC='{description}'" , Helpers . LogLevel . Info , Client ) ;
2007-11-20 04:33:12 +00:00
}
2007-11-20 04:13:40 +00:00
}
) ;
}
catch ( System . Exception e )
{
2008-05-06 23:57:26 +00:00
Logger . Log ( e . Message , Helpers . LogLevel . Error , Client , e ) ;
2007-11-20 04:13:40 +00:00
return "Error searching" ;
}
return "Done searching" ;
}
}
}