Changeset 767a148 for root_commands.c


Ignore:
Timestamp:
2010-03-21T16:06:31Z (9 years ago)
Author:
Wilmer van der Gaast <wilmer@…>
Branches:
master
Children:
1cc0df3, 85693e6
Parents:
545d7c0 (diff), a81d679 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merging in file transfer support. Most important points from my review
are fixed now, time to let it settle in and get people to try it.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • root_commands.c

    r545d7c0 r767a148  
    11541154        {
    11551155                irc_usermsg( irc, "Unknown command: %s %s. Please use \x02help commands\x02 to get a list of available commands.", "chat", cmd[1] );
     1156        }
     1157}
     1158
     1159static void cmd_transfer( irc_t *irc, char **cmd )
     1160{
     1161        GSList *files = irc->file_transfers;
     1162        enum { LIST, REJECT, CANCEL };
     1163        int subcmd = LIST;
     1164        int fid;
     1165
     1166        if( !files )
     1167        {
     1168                irc_usermsg( irc, "No pending transfers" );
     1169                return;
     1170        }
     1171
     1172        if( cmd[1] && ( strcmp( cmd[1], "reject" ) == 0 ) )
     1173        {
     1174                subcmd = REJECT;
     1175        }
     1176        else if( cmd[1] && ( strcmp( cmd[1], "cancel" ) == 0 ) &&
     1177                 cmd[2] && ( sscanf( cmd[2], "%d", &fid ) == 1 ) )
     1178        {
     1179                subcmd = CANCEL;
     1180        }
     1181
     1182        for( ; files; files = g_slist_next( files ) )
     1183        {
     1184                file_transfer_t *file = files->data;
     1185               
     1186                switch( subcmd ) {
     1187                case LIST:
     1188                        if ( file->status == FT_STATUS_LISTENING )
     1189                                irc_usermsg( irc,
     1190                                        "Pending file(id %d): %s (Listening...)", file->local_id, file->file_name);
     1191                        else
     1192                        {
     1193                                int kb_per_s = 0;
     1194                                time_t diff = time( NULL ) - file->started ? : 1;
     1195                                if ( ( file->started > 0 ) && ( file->bytes_transferred > 0 ) )
     1196                                        kb_per_s = file->bytes_transferred / 1024 / diff;
     1197                                       
     1198                                irc_usermsg( irc,
     1199                                        "Pending file(id %d): %s (%10zd/%zd kb, %d kb/s)", file->local_id, file->file_name,
     1200                                        file->bytes_transferred/1024, file->file_size/1024, kb_per_s);
     1201                        }
     1202                        break;
     1203                case REJECT:
     1204                        if( file->status == FT_STATUS_LISTENING )
     1205                        {
     1206                                irc_usermsg( irc, "Rejecting file transfer for %s", file->file_name );
     1207                                imcb_file_canceled( file, "Denied by user" );
     1208                        }
     1209                        break;
     1210                case CANCEL:
     1211                        if( file->local_id == fid )
     1212                        {
     1213                                irc_usermsg( irc, "Canceling file transfer for %s", file->file_name );
     1214                                imcb_file_canceled( file, "Canceled by user" );
     1215                        }
     1216                        break;
     1217                }
    11561218        }
    11571219}
     
    11781240        { "join_chat",      2, cmd_join_chat,      0 },
    11791241        { "chat",           1, cmd_chat,           0 },
     1242        { "transfer",       0, cmd_transfer,       0 },
    11801243        { NULL }
    11811244};
Note: See TracChangeset for help on using the changeset viewer.