(trunk) #3471:Add 'finished' to filterbar

This commit is contained in:
Daniel Lee
2010-08-01 17:43:35 +00:00
parent c4cac7ae8c
commit ff23406f38
10 changed files with 72 additions and 16 deletions

View 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 */

View 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 }

View 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;
}

View File

@@ -197,6 +197,9 @@ enum
MC_SPEED_UP,
MC_SPEED_DOWN,
MC_ACTIVITY,
MC_FINISHED,
MC_PRIORITY,
MC_TRACKERS,
MC_ROW_COUNT
};

View 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.

View 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 );

View 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",

View 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; }

View 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( );

View 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; }