Changeset 2103


Ignore:
Timestamp:
Jun 16, 2007, 9:25:58 PM (15 years ago)
Author:
charles
Message:

another work-in-progress commit to touch base with BMW. The backend interfaces should be good, but the progress func doesn't get called as it should (yet)

Location:
branches/file_selection
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/file_selection/cli/transmissioncli.c

    r2097 r2103  
    3636#endif
    3737
     38/* macro to shut up "unused parameter" warnings */
     39#ifdef __GNUC__
     40#define UNUSED                  __attribute__((unused))
     41#else
     42#define UNUSED
     43#endif
     44
    3845const char * USAGE =
    3946"Usage: %s [options] file.torrent [options]\n\n"
     
    8693#define LINEWIDTH 80
    8794
     95static void
     96progress_func( const meta_info_builder_t * builder     UNUSED,
     97               size_t                      pieceIndex,
     98               size_t                      pieceCount,
     99               int                       * abortFlag   UNUSED,
     100               void                      * userData    UNUSED )
     101{
     102    double percent = (double)pieceIndex / pieceCount;
     103    printf( "%d%% done (on block %lu of %lu)\n",
     104            (int)(100.0*percent + 0.5),
     105            pieceIndex, pieceCount );
     106}
     107
     108
    88109int main( int argc, char ** argv )
    89110{
     
    136157    {
    137158        meta_info_builder_t* builder = tr_metaInfoBuilderCreate( sourceFile );
    138         int ret = tr_makeMetaInfo( builder, NULL, announce, comment, isPrivate );
     159        int ret = tr_makeMetaInfo( builder,
     160                                   progress_func, NULL,
     161                                   NULL, announce, comment, isPrivate );
    139162        tr_metaInfoBuilderFree( builder );
    140163        return ret;
  • branches/file_selection/gtk/make-meta-ui.c

    r2097 r2103  
    4545
    4646static void
    47 response_cb( GtkDialog* d, int response, gpointer user_data UNUSED )
    48 {
    49     if( response == GTK_RESPONSE_ACCEPT )
     47cancel_cb( GtkDialog *d UNUSED, int response UNUSED, gpointer cancel_flag )
     48{
     49    *(int*)cancel_flag = TRUE;
     50}
     51
     52static void
     53progress_cb( const meta_info_builder_t  * builder    UNUSED,
     54             size_t                       pieceIndex,
     55             size_t                       pieceCount,
     56             int                        * abortFlag,
     57             void                       * user_data  UNUSED)
     58{
     59    g_message ("%lu of %lu", pieceIndex, pieceCount);
     60
     61    *abortFlag = *(gboolean*)user_data;
     62}
     63
     64static void
     65response_cb( GtkDialog* d, int response, gpointer user_data )
     66{
     67    int ret;
     68    gboolean cancelFlag = FALSE;
     69    MakeMetaUI * ui = (MakeMetaUI*) user_data;
     70    GtkWidget *w, *l, *p;
     71    char *tmp, *name;
     72
     73    if( response != GTK_RESPONSE_ACCEPT )
    5074    {
    51         g_message( "go for it!");
    52     }
    53 
    54     gtk_widget_destroy( GTK_WIDGET( d ) );
     75        gtk_widget_destroy( GTK_WIDGET( d ) );
     76        return;
     77    }
     78
     79    w = gtk_dialog_new_with_buttons( _("Making Torrent..."),
     80                                     GTK_WINDOW(d),
     81                                     GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
     82                                     GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
     83                                     NULL );
     84    g_signal_connect( w, "response", G_CALLBACK(cancel_cb), &cancelFlag );
     85
     86    tmp = g_path_get_basename (ui->builder->top);
     87    name = g_strdup_printf ( "%s.torrent", tmp );
     88    l = gtk_label_new( name );
     89    gtk_box_pack_start_defaults ( GTK_BOX(GTK_DIALOG(w)->vbox), l );
     90    p = gtk_progress_bar_new ();
     91    gtk_box_pack_start_defaults ( GTK_BOX(GTK_DIALOG(w)->vbox), l );
     92    gtk_widget_show_all ( w );
     93    g_free( name );
     94    g_free( tmp );
     95
     96    ret = tr_makeMetaInfo( ui->builder,
     97                           progress_cb, &cancelFlag,
     98                           NULL,
     99                           gtk_entry_get_text( GTK_ENTRY( ui->announce_entry ) ),
     100                           gtk_entry_get_text( GTK_ENTRY( ui->comment_entry ) ),
     101                           gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( ui->private_check ) ) );
     102    if( !ret )
     103      gtk_widget_destroy( GTK_WIDGET( d ) );
    55104}
    56105
     
    118167                                     GTK_STOCK_NEW, GTK_RESPONSE_ACCEPT,
    119168                                     NULL );
    120     g_signal_connect( d, "response", G_CALLBACK(response_cb), NULL );
     169    g_signal_connect( d, "response", G_CALLBACK(response_cb), ui );
    121170    g_object_set_data_full( G_OBJECT(d), "ui", ui, g_free );
    122171
  • branches/file_selection/libtransmission/makemeta.c

    r2099 r2103  
    159159        base = basename( basebuf );
    160160        files = getFiles( dir, base, NULL );
    161         assert( files != NULL  );
    162161    }
    163162
     
    203202static uint8_t*
    204203getHashInfo ( const meta_info_builder_t  * builder,
     204              makemeta_progress_func       progress_func,
     205              void                       * progress_func_user_data,
    205206              int                        * setmeCount )
    206207{
    207208    size_t i;
     209    int abort = 0;;
    208210    tr_torrent_t t;
    209211    uint8_t *ret, *walk;
     
    228230    ret = (uint8_t*) malloc ( SHA_DIGEST_LENGTH * t.info.pieceCount );
    229231    walk = ret;
     232
     233    /* FIXME: call the periodically while getting the SHA1 sums.
     234       this will take a little tweaking to ioRecalculateHash,
     235       probably will get done Sunday or Monday */
     236    (progress_func)( builder, 0, t.info.pieceCount, &abort, progress_func_user_data );
     237
    230238    for( i=0; i<(size_t)t.info.pieceCount; ++i ) {
    231239        tr_ioRecalculateHash( &t, i, walk );
     
    306314makeInfoDict ( benc_val_t                 * dict,
    307315               const meta_info_builder_t  * builder,
     316               makemeta_progress_func       progress_func,
     317               void                       * progress_func_user_data,
    308318               int                          isPrivate )
    309319{
     
    322332    tr_bencInitInt( val, builder->pieceSize );
    323333
    324     pch = getHashInfo( builder, &pieceCount );
     334    pch = getHashInfo( builder,
     335                       progress_func,
     336                       progress_func_user_data,
     337                       &pieceCount );
    325338    val = tr_bencDictAdd( dict, "pieces" );
    326339    tr_bencInitStr( val, pch, SHA_DIGEST_LENGTH * pieceCount, 0 );
     
    345358int
    346359tr_makeMetaInfo( const meta_info_builder_t  * builder,
     360                 makemeta_progress_func       progress_func,
     361                 void                       * progress_func_user_data,
    347362                 const char                 * outputFile,
    348363                 const char                 * announce,
     
    377392        tr_bencInit( val, TYPE_DICT );
    378393        tr_bencDictReserve( val, 666 );
    379         makeInfoDict( val, builder, isPrivate );
     394        makeInfoDict( val, builder,
     395                      progress_func, progress_func_user_data,
     396                      isPrivate );
    380397
    381398    /* debugging... */
  • branches/file_selection/libtransmission/makemeta.h

    r2097 r2103  
    4242tr_metaInfoBuilderCreate( const char * topFile );
    4343
     44/* set abortFlag to nonzero to abort the checksum generation */
     45typedef
     46void (*makemeta_progress_func)(const meta_info_builder_t * builder,
     47                               size_t                      pieceIndex,
     48                               size_t                      pieceCount,
     49                               int                       * abortFlag,
     50                               void                      * userData );
    4451int
    45 tr_makeMetaInfo( const meta_info_builder_t * builder,
    46                  const char                * outputFile, /* NULL for builder->top + ".torrent" */
    47                  const char                * announce,
    48                  const char                * comment,
    49                  int                         isPrivate );
     52tr_makeMetaInfo( const meta_info_builder_t  * builder,
     53                 makemeta_progress_func       progress_func,
     54                 void                       * progress_func_user_data,
     55                 const char                 * outputFile_or_NULL,
     56                 const char                 * announce,
     57                 const char                 * comment,
     58                 int                          isPrivate );
     59
    5060
    5161void
Note: See TracChangeset for help on using the changeset viewer.