/* * $Id: finde_rrors.c,v 1.4 2003/05/01 01:37:47 pinkfish Exp $ */ /* finderrors command -*- LPC -*- * Handles bugreports in a collection of dirs for a creator */ #include <log.h> #include <board.h> #include <mail.h> inherit "/cmds/base"; // #define HELPER "/w/taffyd/handlers/finderror_helper" #define HELPER "/obj/handlers/finderror_helper" #define ERROR_CMD "/cmds/creator/errors" private void finished_count_errors( object player, int status, mixed data ) { int *count; string *paths; mapping errors = ([ ]); int *total = ({ 0, 0, 0 }); string txt; // tell_creator( player, "%O, %O\n", status, data ); foreach( mapping direc in data ) { count = errors[ direc[ "Directory" ] ]; if ( undefinedp( count ) ) { count = ({ 0, 0, 0 }); } switch( direc[ "Type" ] ) { case "BUG": count[ 0 ] = direc[ "COUNT(Id)" ]; total[ 0 ] += count[ 0 ]; break; case "TYPO": count[ 1 ] = direc[ "COUNT(Id)" ]; total[ 1 ] += count[ 1 ]; break; case "IDEA": default: count[ 2 ] = direc[ "COUNT(Id)" ]; total[ 2 ] += count[ 2 ]; } errors[ direc[ "Directory" ] ] = count; } paths = sort_array( keys( errors ), 1 ); txt = "$P$finderrors$P$BUGS TYPO IDEA\n"; foreach( string key in paths ) { txt += sprintf( "%4d %4d %4d %s\n", errors[ key ][ 0 ], errors[ key ][ 1 ], errors[ key ][ 2 ], key ); } txt += "-------------\n"; txt += sprintf( "%4d %4d %4d\n", total[ 0 ], total[ 1 ], total[ 2 ] ); tell_object( player, txt ); } /* finished_count_errors() */ private int count_errors() { int result; result = HELPER->query_dirs_count( this_player(), (: finished_count_errors :) ); if ( result ) { add_succeeded_mess( ({ "Retrieving error count, this may take several " "seconds.\n", "" }) ); return 1; } add_failed_mess( "You have no finderrors directories defined. " "Add them with 'finderrors add'\n" ); return -1; } /* count_errors() */ private void finished_next_dir( object player, int status, mixed data ) { // tell_creator( player, "%O, %O\n", status, data ); if ( sizeof( data ) != 1 || !mapp( data[0] ) ) { tell_object( player, "Unable to find the next directory " "with errors.\n" ); } else { //start_error_command( player, data[ 0 ][ "Directory" ] ); ERROR_CMD->errors_in_dir(data[0]["Directory"], 0); } } /* finished_next_dir() */ private int get_next_error() { HELPER->query_next_dir( this_player(), (: finished_next_dir :) ); add_succeeded_mess( ({ "Retrieving error count, this may take several " "seconds.\n", "" }) ); return 1; } /* cmd() */ private int list_error_directories() { string *dirs; dirs = HELPER->query_directories( this_player()->query_name() ); if ( sizeof( dirs ) ) { tell_object( this_player(), "$P$finderrors list$P$" + implode( dirs, "\n" ) + "\n" ); add_succeeded_mess( "" ); return 1; } else { add_failed_mess( "No directories have been added to finderrors.\n" ); return -1; } } /* list_error_directories() */ private int add_directory( string directory, int recursive ) { if ( directory[ <1 ] != '/' ) { directory += "/"; } if ( file_size( directory ) != -2 ) { add_failed_mess( directory + " is not a directory.\n" ); return -1; } HELPER->add_directory( this_player(), directory, recursive ); return 1; } /* add_directory() */ private int remove_directory( string directory, int recursive ) { int result; result = HELPER->remove_directory( this_player(), directory, recursive ); if ( result ) { add_succeeded_mess( "Directory removed successfully.\n" ); return 1; } add_failed_mess( "Could not remove directory. Was it on your " "finderrors list?\n" ); return -1; } /* remove_directory() */ public mixed *query_patterns() { return ({ "add <word>", (: add_directory( $4[ 0 ], 0 ) :), "add <word> recursive", (: add_directory( $4[ 0 ], 1 ) :), "remove <word>", (: remove_directory( $4[ 0 ], 0 ) :), "remove <word> recursive", (: remove_directory( $4[ 0 ], 1 ) :), "list", (: list_error_directories :), "count", (: count_errors :), "", (: get_next_error :) }); } /* query_patterns() */