diff --git a/gtk/main.c b/gtk/main.c index 8333522ef..0b1537c38 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -339,9 +339,8 @@ refreshActions( struct cbdata * data ) } { - tr_session * session = tr_core_session( data->core ); - const int active = tr_sessionGetActiveTorrentCount( session ); - const int total = tr_sessionCountTorrents( session ); + const int total = tr_core_get_torrent_count( data->core ); + const int active = tr_core_get_active_torrent_count( data->core ); action_sensitize( "pause-all-torrents", active != 0 ); action_sensitize( "start-all-torrents", active != total ); } diff --git a/gtk/tr-core.c b/gtk/tr-core.c index 44e3680b1..0c5ec5c0a 100644 --- a/gtk/tr-core.c +++ b/gtk/tr-core.c @@ -1417,15 +1417,9 @@ tr_core_set_hibernation_allowed( TrCore * core, static void maybeInhibitHibernation( TrCore * core ) { - gboolean inhibit = pref_flag_get( PREF_KEY_INHIBIT_HIBERNATION ); - - /* always allow hibernation when all the torrents are paused */ - if( inhibit ) { - tr_session * session = tr_core_session( core ); - - if( tr_sessionGetActiveTorrentCount( session ) == 0 ) - inhibit = FALSE; - } + /* inhibit if it's enabled *AND* all the torrents are paused */ + const gboolean inhibit = pref_flag_get( PREF_KEY_INHIBIT_HIBERNATION ) + && ( tr_core_get_active_torrent_count( core ) == 0 ); tr_core_set_hibernation_allowed( core, !inhibit ); } @@ -1687,3 +1681,29 @@ tr_core_torrent_changed( TrCore * core, int id ) while( gtk_tree_model_iter_next( model, &iter ) ); } +int +tr_core_get_torrent_count( TrCore * core ) +{ + return gtk_tree_model_iter_n_children( tr_core_model( core ), NULL ); +} + +int +tr_core_get_active_torrent_count( TrCore * core ) +{ + GtkTreeIter iter; + GtkTreeModel * model = tr_core_model( core ); + int activeCount = 0; + + if( gtk_tree_model_get_iter_first( model, &iter ) ) do + { + int activity; + gtk_tree_model_get( model, &iter, MC_ACTIVITY, &activity, -1 ); + + if( activity != TR_STATUS_STOPPED ) + ++activeCount; + } + while( gtk_tree_model_iter_next( model, &iter ) ); + + return activeCount; +} + diff --git a/gtk/tr-core.h b/gtk/tr-core.h index 9e6a1974d..711e81360 100644 --- a/gtk/tr-core.h +++ b/gtk/tr-core.h @@ -99,6 +99,10 @@ GtkTreeModel * tr_core_model( TrCore * self ); tr_session * tr_core_session( TrCore * self ); +int tr_core_get_active_torrent_count( TrCore * self ); + +int tr_core_get_torrent_count( TrCore * self ); + /****** ******* ******/ diff --git a/libtransmission/rpcimpl.c b/libtransmission/rpcimpl.c index 46cdb1e3c..393c0d4e9 100644 --- a/libtransmission/rpcimpl.c +++ b/libtransmission/rpcimpl.c @@ -173,7 +173,7 @@ getTorrents( tr_session * session, else /* all of them */ { tr_torrent * tor = NULL; - const int n = tr_sessionCountTorrents( session ); + const int n = tr_sessionCountTorrents( session ); torrents = tr_new0( tr_torrent *, n ); while( ( tor = tr_torrentNext( session, tor ) ) ) torrents[torrentCount++] = tor; diff --git a/libtransmission/session.c b/libtransmission/session.c index faa67f445..2f836ec1e 100644 --- a/libtransmission/session.c +++ b/libtransmission/session.c @@ -2391,18 +2391,3 @@ tr_sessionSetProxyPassword( tr_session * session, session->proxyPassword = tr_strdup( password ); } } - -int -tr_sessionGetActiveTorrentCount( tr_session * session ) -{ - int ret = 0; - tr_torrent * tor = NULL; - - assert( tr_isSession( session ) ); - - while(( tor = tr_torrentNext( session, tor ))) - if( tr_torrentGetActivity( tor ) != TR_STATUS_STOPPED ) - ++ret; - - return ret; -} diff --git a/libtransmission/session.h b/libtransmission/session.h index 7cad702e8..f84c193e1 100644 --- a/libtransmission/session.h +++ b/libtransmission/session.h @@ -199,6 +199,8 @@ const struct tr_address* tr_sessionGetPublicAddress( const tr_session *, int tr struct tr_bindsockets * tr_sessionGetBindSockets( tr_session * ); +int tr_sessionCountTorrents( const tr_session * session ); + enum { SESSION_MAGIC_NUMBER = 3845, diff --git a/libtransmission/transmission.h b/libtransmission/transmission.h index 3e955ea9d..f3aa1d12e 100644 --- a/libtransmission/transmission.h +++ b/libtransmission/transmission.h @@ -635,8 +635,6 @@ tr_port_forwarding; tr_port_forwarding tr_sessionGetPortForwarding( const tr_session * session ); -int tr_sessionCountTorrents( const tr_session * session ); - typedef enum { TR_CLIENT_TO_PEER = 0, TR_UP = 0, @@ -744,8 +742,6 @@ tr_torrent ** tr_sessionLoadTorrents( tr_session * session, tr_ctor * ctor, int * setmeCount ); -int tr_sessionGetActiveTorrentCount( tr_session * session ); - /** @} */ /** @@ -1649,8 +1645,6 @@ typedef enum } tr_torrent_activity; -tr_torrent_activity tr_torrentGetActivity( tr_torrent * ); - enum { TR_PEER_FROM_INCOMING = 0, /* connections made to the listening port */ diff --git a/qt/session.cc b/qt/session.cc index ae80017ea..46b952d7e 100644 --- a/qt/session.cc +++ b/qt/session.cc @@ -901,7 +901,7 @@ Session :: addTorrent( QString key, QString localPath ) if( !keyHandled ) { const QByteArray tmp = key.toUtf8(); tr_bencDictAddRaw( args, "metainfo", tmp.constData(), tmp.length() ); - keyHandled; // treat it as base64 + keyHandled = true; // treat it as base64 } exec( &top );