]> granicus.if.org Git - transmission/commitdiff
(trunk) #3471:Add 'finished' to filterbar
authorDaniel Lee <Longinus00@gmail.com>
Sun, 1 Aug 2010 17:43:35 +0000 (17:43 +0000)
committerDaniel Lee <Longinus00@gmail.com>
Sun, 1 Aug 2010 17:43:35 +0000 (17:43 +0000)
gtk/details.c
gtk/filter.c
gtk/tr-core.c
gtk/tr-core.h
libtransmission/transmission.h
qt/filterbar.cc
qt/filters.cc
qt/filters.h
qt/torrent-filter.cc
qt/torrent.h

index 393727100cdefe5e0275c98197379e8d285bdc33..b3332c79d420c2bcf6cdec0d979db9d53af2a448 100644 (file)
@@ -2160,7 +2160,6 @@ onEditTrackersResponse( GtkDialog * dialog, int response, gpointer data )
         {
             di->trackers = NULL;
             di->tracker_buffer = NULL;
-            tr_core_torrent_changed( di->core, tr_torrentId( tor ) );
         }
 
         /* cleanup */
index 39cb6dcafd5a81bf40ae2c888d600be9b95df71c..b0b0af6b3081d13d5bdbd9c4bf81932e54066692 100644 (file)
@@ -589,6 +589,7 @@ enum
     ACTIVITY_FILTER_SEEDING,
     ACTIVITY_FILTER_ACTIVE,
     ACTIVITY_FILTER_PAUSED,
+    ACTIVITY_FILTER_FINISHED,
     ACTIVITY_FILTER_QUEUED,
     ACTIVITY_FILTER_VERIFYING,
     ACTIVITY_FILTER_ERROR,
@@ -633,19 +634,20 @@ test_torrent_activity( tr_torrent * tor, int type )
         case ACTIVITY_FILTER_PAUSED:
             return st->activity == TR_STATUS_STOPPED;
 
+        case ACTIVITY_FILTER_FINISHED:
+            return st->finished == TRUE;
+
         case ACTIVITY_FILTER_QUEUED:
-            return FALSE;
+            return st->activity == TR_STATUS_CHECK_WAIT;
 
         case ACTIVITY_FILTER_VERIFYING:
-            return ( st->activity == TR_STATUS_CHECK_WAIT )
-                || ( st->activity == TR_STATUS_CHECK );
+            return st->activity == TR_STATUS_CHECK ;
 
         case ACTIVITY_FILTER_ERROR:
             return st->error != 0;
 
         default: /* ACTIVITY_FILTER_ALL */
             return TRUE;
-
     }
 }
 
@@ -720,6 +722,7 @@ activity_filter_model_new( GtkTreeModel * tmodel )
         { ACTIVITY_FILTER_DOWNLOADING, N_( "Downloading" ), GTK_STOCK_GO_DOWN },
         { ACTIVITY_FILTER_SEEDING, N_( "Seeding" ), GTK_STOCK_GO_UP },
         { ACTIVITY_FILTER_PAUSED, N_( "Paused" ), GTK_STOCK_MEDIA_PAUSE },
+        { ACTIVITY_FILTER_FINISHED, N_( "Finished" ), NULL },
         { ACTIVITY_FILTER_QUEUED, N_( "Queued" ), NULL },
         { ACTIVITY_FILTER_VERIFYING, N_( "Verifying" ), GTK_STOCK_REFRESH },
         { ACTIVITY_FILTER_ERROR, N_( "Error" ), GTK_STOCK_DIALOG_ERROR }
index b79ddf640246502a2f0f056c62acf95aba2fdea2..bc66285c9730ad14304201211989d9e03b06b083 100644 (file)
@@ -552,6 +552,22 @@ tr_strcmp( const void * a,
     return 0;
 }
 
+static char *
+torrentTrackerString( tr_torrent * tor )
+{
+    int i;
+    GString * str = g_string_new( "" );
+    const tr_info * inf = tr_torrentInfo( tor );
+
+    for( i = 0; i < inf->trackerCount; ++i )
+    {
+        const tr_tracker_info * t = &inf->trackers[i];
+        str = g_string_append( str, t->announce );
+    }
+
+    return g_string_free( str, FALSE );
+}
+
 #ifdef HAVE_GIO
 
 struct watchdir_file
@@ -779,7 +795,10 @@ tr_core_init( GTypeInstance *  instance,
                       G_TYPE_POINTER,   /* tr_torrent* */
                       G_TYPE_DOUBLE,    /* tr_stat.pieceUploadSpeed_KBps */
                       G_TYPE_DOUBLE,    /* tr_stat.pieceDownloadSpeed_KBps */
-                      G_TYPE_INT };     /* tr_stat.status */
+                      G_TYPE_INT,       /* tr_stat.activity */
+                      G_TYPE_UCHAR,     /* tr_stat.finished */
+                      G_TYPE_CHAR,      /* tr_priority_t */
+                      G_TYPE_STRING };  /* concatenated trackers string */
 
     p = self->priv = G_TYPE_INSTANCE_GET_PRIVATE( self,
                                                   TR_CORE_TYPE,
@@ -886,6 +905,7 @@ tr_core_add_torrent( TrCore     * self,
     const tr_stat * st = tr_torrent_stat( gtor );
     tr_torrent *    tor = tr_torrent_handle( gtor );
     char *          collated = g_utf8_strdown( inf->name, -1 );
+    char *          trackers = torrentTrackerString( tor );
     GtkListStore *  store = GTK_LIST_STORE( tr_core_model( self ) );
     GtkTreeIter     unused;
 
@@ -897,6 +917,9 @@ tr_core_add_torrent( TrCore     * self,
                                        MC_SPEED_UP,      st->pieceUploadSpeed_KBps,
                                        MC_SPEED_DOWN,    st->pieceDownloadSpeed_KBps,
                                        MC_ACTIVITY,      st->activity,
+                                       MC_FINISHED,      st->finished,
+                                       MC_PRIORITY,      tr_torrentGetPriority( tor ),
+                                       MC_TRACKERS,      trackers,
                                        -1 );
 
     if( doNotify )
@@ -905,6 +928,7 @@ tr_core_add_torrent( TrCore     * self,
     /* cleanup */
     g_object_unref( G_OBJECT( gtor ) );
     g_free( collated );
+    g_free( trackers );
 }
 
 int
@@ -1296,33 +1320,50 @@ update_foreach( GtkTreeModel * model,
                 gpointer       data UNUSED )
 {
     int oldActivity, newActivity;
+    tr_bool oldFinished, newFinished;
+    tr_priority_t oldPriority, newPriority;
+    char * oldTrackers, * newTrackers;
     double oldUpSpeed, newUpSpeed;
     double oldDownSpeed, newDownSpeed;
     const tr_stat * st;
     TrTorrent * gtor;
+    tr_torrent * tor;
 
     /* get the old states */
     gtk_tree_model_get( model, iter,
                         MC_TORRENT, &gtor,
                         MC_ACTIVITY, &oldActivity,
+                        MC_FINISHED, &oldFinished,
+                        MC_PRIORITY, &oldPriority,
+                        MC_TRACKERS, &oldTrackers,
                         MC_SPEED_UP, &oldUpSpeed,
                         MC_SPEED_DOWN, &oldDownSpeed,
                         -1 );
 
     /* get the new states */
-    st = tr_torrentStat( tr_torrent_handle( gtor ) );
+    tor = tr_torrent_handle( gtor );
+    st = tr_torrentStat( tor );
     newActivity = st->activity;
+    newFinished = st->finished;
+    newPriority = tr_torrentGetPriority( tor );
+    newTrackers = torrentTrackerString( tor );
     newUpSpeed = st->pieceUploadSpeed_KBps;
     newDownSpeed = st->pieceDownloadSpeed_KBps;
 
     /* updating the model triggers off resort/refresh,
        so don't do it unless something's actually changed... */
     if( ( newActivity  != oldActivity  )
+        || ( newFinished != oldFinished )
+        || ( newPriority != oldPriority )
+        || tr_strcmp( oldTrackers, newTrackers )
         || gtr_compare_double( newUpSpeed, oldUpSpeed, 3 )
         || gtr_compare_double( newDownSpeed, oldDownSpeed, 3 ) )
     {
         gtk_list_store_set( GTK_LIST_STORE( model ), iter,
                             MC_ACTIVITY, newActivity,
+                            MC_FINISHED, newFinished,
+                            MC_PRIORITY, newPriority,
+                            MC_TRACKERS, newTrackers,
                             MC_SPEED_UP, newUpSpeed,
                             MC_SPEED_DOWN, newDownSpeed,
                             -1 );
@@ -1330,6 +1371,8 @@ update_foreach( GtkTreeModel * model,
 
     /* cleanup */
     g_object_unref( gtor );
+    g_free( newTrackers );
+    g_free( oldTrackers );
     return FALSE;
 }
 
index aadc256a8b8990f30994bd19963c2f719fb9f02f..56cbd8739e5a5e646e8d05091b1a8c64b7453515 100644 (file)
@@ -197,6 +197,9 @@ enum
     MC_SPEED_UP,
     MC_SPEED_DOWN,
     MC_ACTIVITY,
+    MC_FINISHED,
+    MC_PRIORITY,
+    MC_TRACKERS,
     MC_ROW_COUNT
 };
 
index e2787e82eb8f97a460e81b53bed4c229512c77c4..dec8f1b49e10d11456b242eefa54e342aa5ecb97 100644 (file)
@@ -1768,11 +1768,11 @@ typedef struct tr_stat
         @see error */
     char errorString[512];
 
-    /** When tr_stat.status is TR_STATUS_CHECK or TR_STATUS_CHECK_WAIT,
+    /** When tr_stat.activity is TR_STATUS_CHECK or TR_STATUS_CHECK_WAIT,
         this is the percentage of how much of the files has been
         verified.  When it gets to 1, the verify process is done.
         Range is [0..1]
-        @see tr_stat.status */
+        @see tr_stat.activity */
     double recheckProgress;
 
     /** How much has been downloaded of the entire torrent.
index b0a61e289cd67536eb0d2cd6b46f2dac8f6ea198..9cf0bfbb08734ffbfca59eed294aac42b9ee9f2a 100644 (file)
@@ -243,6 +243,10 @@ FilterBar :: createActivityCombo( )
     row->setData( FilterMode::SHOW_PAUSED, ActivityRole );
     model->appendRow( row );
 
+    row = new QStandardItem( blankIcon, tr( "Finished" ) );
+    row->setData( FilterMode::SHOW_FINISHED, ActivityRole );
+    model->appendRow( row );
+
     row = new QStandardItem( blankIcon, tr( "Queued" ) );
     row->setData( FilterMode::SHOW_QUEUED, ActivityRole );
     model->appendRow( row );
index 1f253edf5f5646cae1395e20269abc176bfed350..0e53772baa367f56685a83ffda04ab6283c32bd6 100644 (file)
@@ -19,6 +19,7 @@ const QString FilterMode::names[NUM_MODES] =
     "show-downloading",
     "show-seeding",
     "show-paused",
+    "show-finished",
     "show-queued",
     "show-verifying",
     "show-error",
index e2bc331d57c2ed0fcbe5ec291c7c7dc4a19da489..7b6a07cb344d8ad9037ccdc02b999be1cf495cec 100644 (file)
@@ -26,7 +26,7 @@ class FilterMode
         FilterMode( const QString& name ): myMode(modeFromName(name)) { }
         static const QString names[];
         enum { SHOW_ALL, SHOW_ACTIVE, SHOW_DOWNLOADING, SHOW_SEEDING, SHOW_PAUSED,
-               SHOW_QUEUED, SHOW_VERIFYING, SHOW_ERROR, NUM_MODES };
+               SHOW_FINISHED, SHOW_QUEUED, SHOW_VERIFYING, SHOW_ERROR, NUM_MODES };
         static int modeFromName( const QString& name );
         static const QString& nameFromMode( int mode ) { return names[mode]; }
         int mode() const { return myMode; }
index 3185038ccd215f0f97c3e206e84517cf71382efa..a623393bc8aac35636b65368852579b93bbd5945 100644 (file)
@@ -144,7 +144,6 @@ bool
 TorrentFilter :: activityFilterAcceptsTorrent( const Torrent * tor, const FilterMode& m ) const
 {
     bool accepts;
-    const tr_torrent_activity activity = tor->getActivity( );
 
     switch( m.mode( ) )
     {
@@ -155,19 +154,22 @@ TorrentFilter :: activityFilterAcceptsTorrent( const Torrent * tor, const Filter
             accepts = tor->peersWeAreUploadingTo( ) > 0 || tor->peersWeAreDownloadingFrom( ) > 0 || tor->isVerifying( );
             break;
         case FilterMode::SHOW_DOWNLOADING:
-            accepts = activity == TR_STATUS_DOWNLOAD;
+            accepts = tor->isDownloading( );
             break;
         case FilterMode::SHOW_SEEDING:
-            accepts = activity == TR_STATUS_SEED;
+            accepts = tor->isSeeding( );
             break;
         case FilterMode::SHOW_PAUSED:
-            accepts = activity == TR_STATUS_STOPPED;
+            accepts = tor->isPaused( );
+            break;
+        case FilterMode::SHOW_FINISHED:
+            accepts = tor->isFinished( );
             break;
         case FilterMode::SHOW_QUEUED:
-            accepts = activity == TR_STATUS_CHECK_WAIT;
+            accepts = tor->isWaitingToVerify( );
             break;
         case FilterMode::SHOW_VERIFYING:
-            accepts = activity == TR_STATUS_CHECK;
+            accepts = tor->isVerifying( );
             break;
         case FilterMode::SHOW_ERROR:
             accepts = tor->hasError( );
index a2e6594d38ae8b27ef07b4418523103c8dc1164a..ca6e4f879e05b6f05b103b5f5a0f70258133e6dc 100644 (file)
@@ -308,6 +308,7 @@ class Torrent: public QObject
         tr_torrent_activity getActivity( ) const { return (tr_torrent_activity) getInt( ACTIVITY ); }
         bool isFinished( ) const { return getBool( IS_FINISHED ); }
         bool isPaused( ) const { return getActivity( ) == TR_STATUS_STOPPED; }
+        bool isWaitingToVerify( ) const { return getActivity( ) == TR_STATUS_CHECK_WAIT; }
         bool isVerifying( ) const { return getActivity( ) == TR_STATUS_CHECK; }
         bool isDownloading( ) const { return getActivity( ) == TR_STATUS_DOWNLOAD; }
         bool isSeeding( ) const { return getActivity( ) == TR_STATUS_SEED; }