diff options
Diffstat (limited to 'src/torrent-cell-renderer.c')
-rw-r--r-- | src/torrent-cell-renderer.c | 157 |
1 files changed, 118 insertions, 39 deletions
diff --git a/src/torrent-cell-renderer.c b/src/torrent-cell-renderer.c index 1d20f6f..bdac1d8 100644 --- a/src/torrent-cell-renderer.c +++ b/src/torrent-cell-renderer.c @@ -16,18 +16,25 @@ #include "hig.h" #include "icons.h" -#include "torrent-cell-renderer.h" +#include "trg-client.h" #include "torrent.h" #include "util.h" +#include "torrent-cell-renderer.h" enum { P_STATUS = 1, + P_CLIENT, P_RATIO, + P_SEEDRATIOLIMIT, + P_SEEDRATIOMODE, P_DOWNLOADED, + P_HAVEVALID, + P_HAVEUNCHECKED, P_ERROR, P_NAME, P_SIZEWHENDONE, + P_TOTALSIZE, P_UPLOADED, P_PERCENTCOMPLETE, P_UPSPEED, @@ -85,7 +92,10 @@ struct TorrentCellRendererPrivate gint64 uploadedEver; gint64 sizeWhenDone; + gint64 totalSize; gint64 downloaded; + gint64 haveValid; + gint64 haveUnchecked; gint64 upSpeed; gint64 downSpeed; gpointer json; @@ -99,87 +109,103 @@ struct TorrentCellRendererPrivate guint fileCount; gint64 eta; gint64 error; + gint64 seedRatioMode; + gdouble seedRatioLimit; + TrgClient *client; gboolean compact; }; +static gboolean getSeedRatio(TorrentCellRenderer *r, gdouble *ratio) { + struct TorrentCellRendererPrivate *p = r->priv; + + if ((p->seedRatioMode == 0) && (trg_client_get_seed_ratio_limited(p->client) == TRUE)) { + *ratio = trg_client_get_seed_ratio_limit(p->client); + return TRUE; + } else if (p->seedRatioMode == 1) { + *ratio = p->seedRatioLimit; + return TRUE; + } + + return FALSE; +} + static void getProgressString( GString * gstr, TorrentCellRenderer * r) { - struct TorrentCellRendererPrivate *priv = r->priv; + struct TorrentCellRendererPrivate *p = r->priv; - //const int isSeed = st->haveValid >= info->totalSize; + const gint64 haveTotal = p->haveUnchecked + p->haveValid; + const int isSeed = p->haveValid >= p->totalSize; char buf1[32], buf2[32], buf3[32], buf4[32], buf5[32], buf6[32]; - //double seedRatio; - //const gboolean hasSeedRatio = tr_torrentGetSeedRatio( tor, &seedRatio ); + double seedRatio; + const gboolean hasSeedRatio = getSeedRatio( r, &seedRatio ); - //TODO : use seed ratios - - if( priv->flags & TORRENT_FLAG_DOWNLOADING ) /* downloading */ + if( p->flags & TORRENT_FLAG_DOWNLOADING ) /* downloading */ { g_string_append_printf( gstr, /* %1$s is how much we've got, %2$s is how much we'll have when done, %3$s%% is a percentage of the two */ - _( "%1$s of %2$s (%3$s%%)" ), - tr_strlsize( buf1, priv->downloaded, sizeof( buf1 ) ), - tr_strlsize( buf2, priv->sizeWhenDone, sizeof( buf2 ) ), - tr_strlpercent( buf3, priv->done, sizeof( buf3 ) ) ); + _( "%1$s of %2$s (%3$s)" ), + tr_strlsize( buf1, haveTotal, sizeof( buf1 ) ), + tr_strlsize( buf2, p->sizeWhenDone, sizeof( buf2 ) ), + tr_strlpercent( buf3, p->done, sizeof( buf3 ) ) ); } - /*else if( isSeed ) + else if( isSeed ) { if( hasSeedRatio ) { g_string_append_printf( gstr, - _( "%1$s of %2$s (%3$s%%), uploaded %4$s (Ratio: %5$s Goal: %6$s)" ), + _( "%1$s of %2$s (%3$s), uploaded %4$s (Ratio: %5$s Goal: %6$s)" ), tr_strlsize( buf1, haveTotal, sizeof( buf1 ) ), - tr_strlsize( buf2, info->totalSize, sizeof( buf2 ) ), - tr_strlpercent( buf3, st->percentComplete * 100.0, sizeof( buf3 ) ), - tr_strlsize( buf4, st->uploadedEver, sizeof( buf4 ) ), - tr_strlratio( buf5, st->ratio, sizeof( buf5 ) ), + tr_strlsize( buf2, p->totalSize, sizeof( buf2 ) ), + tr_strlpercent( buf3, p->done, sizeof( buf3 ) ), + tr_strlsize( buf4, p->uploadedEver, sizeof( buf4 ) ), + tr_strlratio( buf5, p->ratio, sizeof( buf5 ) ), tr_strlratio( buf6, seedRatio, sizeof( buf6 ) ) ); } else { g_string_append_printf( gstr, - _( "%1$s of %2$s (%3$s%%), uploaded %4$s (Ratio: %5$s)" ), - tr_strlsize( buf1, priv->downloaded, sizeof( buf1 ) ), - tr_strlsize( buf2, priv->sizeWhenDone, sizeof( buf2 ) ), - tr_strlpercent( buf3, priv->done, sizeof( buf3 ) ), - tr_strlsize( buf4, priv->uploadedEver, sizeof( buf4 ) ), - tr_strlratio( buf5, priv->ratio, sizeof( buf5 ) ) ); + _( "%1$s of %2$s (%3$s), uploaded %4$s (Ratio: %5$s)" ), + tr_strlsize( buf1, haveTotal, sizeof( buf1 ) ), + tr_strlsize( buf2, p->totalSize, sizeof( buf2 ) ), + tr_strlpercent( buf3, p->done, sizeof( buf3 ) ), + tr_strlsize( buf4, p->uploadedEver, sizeof( buf4 ) ), + tr_strlratio( buf5, p->ratio, sizeof( buf5 ) ) ); } - }*/ + } else /* seeding */ { - /*if( hasSeedRatio ) + if( hasSeedRatio ) { g_string_append_printf( gstr, _( "%1$s, uploaded %2$s (Ratio: %3$s Goal: %4$s)" ), - tr_strlsize( buf1, info->totalSize, sizeof( buf1 ) ), - tr_strlsize( buf2, st->uploadedEver, sizeof( buf2 ) ), - tr_strlratio( buf3, st->ratio, sizeof( buf3 ) ), + tr_strlsize( buf1, p->totalSize, sizeof( buf1 ) ), + tr_strlsize( buf2, p->uploadedEver, sizeof( buf2 ) ), + tr_strlratio( buf3, p->ratio, sizeof( buf3 ) ), tr_strlratio( buf4, seedRatio, sizeof( buf4 ) ) ); } else - { */ + { g_string_append_printf( gstr, /* %1$s is the torrent's total size, %2$s is how much we've uploaded, %3$s is our upload-to-download ratio */ _( "%1$s, uploaded %2$s (Ratio: %3$s)" ), - tr_strlsize( buf1, priv->sizeWhenDone, sizeof( buf1 ) ), - tr_strlsize( buf2, priv->uploadedEver, sizeof( buf2 ) ), - tr_strlratio( buf3, priv->ratio, sizeof( buf3 ) ) ); - //} + tr_strlsize( buf1, p->sizeWhenDone, sizeof( buf1 ) ), + tr_strlsize( buf2, p->uploadedEver, sizeof( buf2 ) ), + tr_strlratio( buf3, p->ratio, sizeof( buf3 ) ) ); + } } /* add time when downloading */ - if( ( priv->flags & TORRENT_FLAG_DOWNLOADING ) ) - //|| ( hasSeedRatio && ( st->activity == TR_STATUS_SEED ) ) ) + if( ( p->flags & TORRENT_FLAG_DOWNLOADING ) + || ( hasSeedRatio && ( p->flags & TORRENT_FLAG_SEEDING ) ) ) { - gint64 eta = priv->eta; + gint64 eta = p->eta; g_string_append( gstr, " - " ); if( eta < 0 ) g_string_append( gstr, _( "Remaining time unknown" ) ); @@ -251,7 +277,7 @@ getShortStatusString( GString * gstr, } else if (flags & TORRENT_FLAG_SEEDING_WAIT) { g_string_append( gstr, _( "Queued for seeding" ) ); } else if (flags & TORRENT_FLAG_CHECKING) { - g_string_append_printf( gstr, _( "Verifying data (%.1f%% tested)" ), + g_string_append_printf( gstr, _( "Verifying data (%.1f% tested)" ), tr_truncd( priv->done * 100.0, 1 ) ); } else if ((flags & TORRENT_FLAG_DOWNLOADING) || (flags & TORRENT_FLAG_SEEDING)) { char buf[512]; @@ -273,7 +299,6 @@ getStatusString( GString * gstr, struct TorrentCellRendererPrivate *priv = r->priv; //TODO: handle metadata for downloading - //TODO: handle errors if ( priv->error ) { const char * fmt[] = { NULL, N_( "Tracker gave a warning: \"%s\"" ), @@ -562,12 +587,21 @@ static void torrent_cell_renderer_set_property(GObject * object, case P_STATUS: p->flags = g_value_get_uint(v); break; + case P_TOTALSIZE: + p->totalSize = g_value_get_int64(v); + break; case P_SIZEWHENDONE: p->sizeWhenDone = g_value_get_int64(v); break; case P_DOWNLOADED: p->downloaded = g_value_get_int64(v); break; + case P_HAVEVALID: + p->haveValid = g_value_get_int64(v); + break; + case P_HAVEUNCHECKED: + p->haveUnchecked = g_value_get_int64(v); + break; case P_UPLOADED: p->uploadedEver = g_value_get_int64(v); break; @@ -610,6 +644,15 @@ static void torrent_cell_renderer_set_property(GObject * object, case P_COMPACT: p->compact = g_value_get_boolean(v); break; + case P_SEEDRATIOMODE: + p->seedRatioMode = g_value_get_int64(v); + break; + case P_SEEDRATIOLIMIT: + p->seedRatioLimit = g_value_get_double(v); + break; + case P_CLIENT: + p->client = g_value_get_pointer(v); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID( object, property_id, pspec); break; @@ -682,12 +725,30 @@ torrent_cell_renderer_class_init( TorrentCellRendererClass * klass ) "json", G_PARAM_READWRITE ) ); + g_object_class_install_property( gobject_class, P_CLIENT, + g_param_spec_pointer( "client", NULL, + "client", + G_PARAM_READWRITE ) ); + + g_object_class_install_property( gobject_class, P_RATIO, g_param_spec_double( "ratio", NULL, "ratio", 0, G_MAXDOUBLE, 0, G_PARAM_READWRITE ) ); + g_object_class_install_property( gobject_class, P_SEEDRATIOLIMIT, + g_param_spec_double( "seedRatioLimit", NULL, + "seedRatioLimit", + 0, G_MAXDOUBLE, 0, + G_PARAM_READWRITE ) ); + + g_object_class_install_property( gobject_class, P_SEEDRATIOMODE, + g_param_spec_int64( "seedRatioMode", NULL, + "seedRatioMode", + 0, 2, 0, + G_PARAM_READWRITE ) ); + g_object_class_install_property( gobject_class, P_PERCENTCOMPLETE, g_param_spec_double( "percentComplete", NULL, "percentComplete", @@ -695,6 +756,12 @@ torrent_cell_renderer_class_init( TorrentCellRendererClass * klass ) G_PARAM_READWRITE ) ); + g_object_class_install_property( gobject_class, P_TOTALSIZE, + g_param_spec_int64( "totalSize", NULL, + "totalSize", + 0, G_MAXINT64, 0, + G_PARAM_READWRITE ) ); + g_object_class_install_property( gobject_class, P_SIZEWHENDONE, g_param_spec_int64( "sizeWhenDone", NULL, "sizeWhenDone", @@ -737,6 +804,18 @@ torrent_cell_renderer_class_init( TorrentCellRendererClass * klass ) 0, G_MAXINT64, 0, G_PARAM_READWRITE ) ); + g_object_class_install_property( gobject_class, P_HAVEVALID, + g_param_spec_int64( "haveValid", NULL, + "haveValid", + 0, G_MAXINT64, 0, + G_PARAM_READWRITE ) ); + + g_object_class_install_property( gobject_class, P_HAVEUNCHECKED, + g_param_spec_int64( "haveUnchecked", NULL, + "haveUnchecked", + 0, G_MAXINT64, 0, + G_PARAM_READWRITE ) ); + g_object_class_install_property( gobject_class, P_UPLOADED, g_param_spec_int64( "uploaded", NULL, "uploaded", |