diff options
author | Alan Fitton <ajf@eth0.org.uk> | 2011-09-04 22:24:11 +0000 |
---|---|---|
committer | Alan Fitton <ajf@eth0.org.uk> | 2011-09-04 22:24:11 +0000 |
commit | e941b2e01998f86cd60fac3c83091d473b4bfecd (patch) | |
tree | 0f833a787611ebbef73aaf2df201cb86bfb49ad6 /src | |
parent | dca8f6d8b87d6f92ff21344ec80b64c7a3b7de7f (diff) |
issue 70 - new statuses in RPC version >= 14. still need to add stateselector entries for queued items.
Diffstat (limited to 'src')
-rw-r--r-- | src/protocol-constants.h | 29 | ||||
-rw-r--r-- | src/torrent.c | 119 | ||||
-rw-r--r-- | src/torrent.h | 24 | ||||
-rw-r--r-- | src/trg-general-panel.c | 10 | ||||
-rw-r--r-- | src/trg-general-panel.h | 3 | ||||
-rw-r--r-- | src/trg-main-window.c | 2 | ||||
-rw-r--r-- | src/trg-torrent-model.c | 54 | ||||
-rw-r--r-- | src/trg-tree-view.c | 1 |
8 files changed, 160 insertions, 82 deletions
diff --git a/src/protocol-constants.h b/src/protocol-constants.h index d0d8f49..e28cf05 100644 --- a/src/protocol-constants.h +++ b/src/protocol-constants.h @@ -118,13 +118,28 @@ #define PARAM_PAUSED "paused" #define PARAM_TAG "tag" -enum { - STATUS_WAITING_TO_CHECK = 1, - STATUS_CHECKING = 2, - STATUS_DOWNLOADING = 4, - STATUS_SEEDING = 8, - STATUS_PAUSED = 16 -}; +/* The rpc-version >= that the status field of torrent-get changed */ +#define NEW_STATUS_RPC_VERSION 14 + +typedef enum { + OLD_STATUS_WAITING_TO_CHECK = 1, + OLD_STATUS_CHECKING = 2, + OLD_STATUS_DOWNLOADING = 4, + OLD_STATUS_SEEDING = 8, + OLD_STATUS_PAUSED = 16 +} trg_old_status; + +typedef enum +{ + TR_STATUS_STOPPED = 0, /* Torrent is stopped */ + TR_STATUS_CHECK_WAIT = 1, /* Queued to check files */ + TR_STATUS_CHECK = 2, /* Checking files */ + TR_STATUS_DOWNLOAD_WAIT = 3, /* Queued to download */ + TR_STATUS_DOWNLOAD = 4, /* Downloading */ + TR_STATUS_SEED_WAIT = 5, /* Queued to seed */ + TR_STATUS_SEED = 6 /* Seeding */ +} +tr_torrent_activity; enum { TR_PRI_LOW = -1, diff --git a/src/torrent.c b/src/torrent.c index 2b04129..cc9f0f8 100644 --- a/src/torrent.c +++ b/src/torrent.c @@ -22,6 +22,7 @@ #include <gtk/gtk.h> #include <json-glib/json-glib.h> +#include "trg-client.h" #include "torrent.h" #include "protocol-constants.h" #include "util.h" @@ -176,7 +177,71 @@ gdouble torrent_get_percent_done(JsonObject * t) } } -gchar *torrent_get_status_icon(guint flags) +guint32 torrent_get_flags(JsonObject * t, gint64 rpcv, gint64 status, gint64 downRate, gint64 upRate) +{ + guint32 flags = 0; + if (rpcv >= NEW_STATUS_RPC_VERSION) { + switch (status) { + case TR_STATUS_STOPPED: + flags |= TORRENT_FLAG_PAUSED; + break; + case TR_STATUS_CHECK_WAIT: + flags |= TORRENT_FLAG_WAITING_CHECK; + flags |= TORRENT_FLAG_CHECKING; + break; + case TR_STATUS_CHECK: + flags |= TORRENT_FLAG_CHECKING; + break; + case TR_STATUS_DOWNLOAD_WAIT: + flags |= TORRENT_FLAG_DOWNLOADING_WAIT; + flags |= TORRENT_FLAG_QUEUED; + break; + case TR_STATUS_DOWNLOAD: + flags |= TORRENT_FLAG_DOWNLOADING; + break; + case TR_STATUS_SEED_WAIT: + flags |= TORRENT_FLAG_SEEDING_WAIT; + break; + case TR_STATUS_SEED: + flags |= TORRENT_FLAG_SEEDING; + break; + } + } else { + switch (status) { + case OLD_STATUS_DOWNLOADING: + flags |= TORRENT_FLAG_DOWNLOADING; + break; + case OLD_STATUS_PAUSED: + flags |= TORRENT_FLAG_PAUSED; + break; + case OLD_STATUS_SEEDING: + flags |= TORRENT_FLAG_SEEDING; + break; + case OLD_STATUS_CHECKING: + flags |= TORRENT_FLAG_CHECKING; + break; + case OLD_STATUS_WAITING_TO_CHECK: + flags |= TORRENT_FLAG_WAITING_CHECK; + flags |= TORRENT_FLAG_CHECKING; + break; + } + } + + if (torrent_get_is_finished(t) == TRUE) + flags |= TORRENT_FLAG_COMPLETE; + else + flags |= TORRENT_FLAG_INCOMPLETE; + + if (downRate > 0 || upRate > 0) + flags |= TORRENT_FLAG_ACTIVE; + + if (strlen(torrent_get_errorstr(t)) > 0) + flags |= TORRENT_FLAG_ERROR; + + return flags; +} + +gchar *torrent_get_status_icon(gint64 rpcv, guint flags) { if (flags & TORRENT_FLAG_ERROR) return g_strdup(GTK_STOCK_DIALOG_WARNING); @@ -202,22 +267,44 @@ const gchar *torrent_get_errorstr(JsonObject * t) return json_object_get_string_member(t, FIELD_ERRORSTR); } -gchar *torrent_get_status_string(gint64 value) -{ - switch (value) { - case STATUS_DOWNLOADING: - return g_strdup(_("Downloading")); - case STATUS_PAUSED: - return g_strdup(_("Paused")); - case STATUS_SEEDING: - return g_strdup(_("Seeding")); - case STATUS_CHECKING: - return g_strdup(_("Checking")); - case STATUS_WAITING_TO_CHECK: - return g_strdup(_("Waiting To Check")); - default: - return g_strdup(_("Unknown")); +gchar *torrent_get_status_string(gint64 rpcv, gint64 value) +{ + if (rpcv >= NEW_STATUS_RPC_VERSION) + { + switch (value) { + case TR_STATUS_DOWNLOAD: + return g_strdup(_("Downloading")); + case TR_STATUS_DOWNLOAD_WAIT: + return g_strdup(_("Queued download")); + case TR_STATUS_CHECK_WAIT: + return g_strdup(_("Waiting To Check")); + case TR_STATUS_CHECK: + return g_strdup(_("Checking")); + case TR_STATUS_SEED_WAIT: + return g_strdup(_("Queued seed")); + case TR_STATUS_SEED: + return g_strdup(_("Seeding")); + case TR_STATUS_STOPPED: + return g_strdup(_("Paused")); + } } + else + { + switch (value) { + case OLD_STATUS_DOWNLOADING: + return g_strdup(_("Downloading")); + case OLD_STATUS_PAUSED: + return g_strdup(_("Paused")); + case OLD_STATUS_SEEDING: + return g_strdup(_("Seeding")); + case OLD_STATUS_CHECKING: + return g_strdup(_("Checking")); + case OLD_STATUS_WAITING_TO_CHECK: + return g_strdup(_("Waiting To Check")); + } + } + + return g_strdup(_("Unknown")); } gboolean torrent_has_tracker(JsonObject * t, GRegex * rx, gchar * search) diff --git a/src/torrent.h b/src/torrent.h index 775b305..d3bf90c 100644 --- a/src/torrent.h +++ b/src/torrent.h @@ -22,17 +22,22 @@ #include <json-glib/json-glib.h> +#include "trg-client.h" + #define TORRENT_FLAG_ERROR (1 << 0) /* 0x01 */ #define TORRENT_FLAG_COMPLETE (1 << 1) /* 0x02 */ #define TORRENT_FLAG_INCOMPLETE (1 << 2) /* 0x04 */ #define TORRENT_FLAG_SEEDING (1 << 3) /* 0x08 */ -#define TORRENT_FLAG_CHECKING (1 << 4) /* 0x16 */ -#define TORRENT_FLAG_WAITING_CHECK (1 << 5) /* 0x32 */ -#define TORRENT_FLAG_DOWNLOADING (1 << 6) /* 0x64 */ -#define TORRENT_FLAG_PAUSED (1 << 7) /* 0x128 */ -#define TORRENT_FLAG_ACTIVE (1 << 8) /* 0x256 */ -#define FILTER_FLAG_TRACKER (1 << 9) /* 0x512 */ -#define FILTER_FLAG_DIR (1 << 10) /* 0x1024 */ +#define TORRENT_FLAG_SEEDING_WAIT (1 << 4) /* 0x16 */ +#define TORRENT_FLAG_CHECKING (1 << 5) /* 0x32 */ +#define TORRENT_FLAG_WAITING_CHECK (1 << 6) /* 0x64 */ +#define TORRENT_FLAG_DOWNLOADING (1 << 7) /* 0x128 */ +#define TORRENT_FLAG_DOWNLOADING_WAIT (1 << 8) /* 0x256 */ +#define TORRENT_FLAG_PAUSED (1 << 10) /* 0x512 */ +#define TORRENT_FLAG_QUEUED (1 << 11) /* 0x1024 */ +#define TORRENT_FLAG_ACTIVE (1 << 12) /* 0x2048 */ +#define FILTER_FLAG_TRACKER (1 << 13) /* 0x4096 */ +#define FILTER_FLAG_DIR (1 << 14) /* 0x8192 */ #define TORRENT_ADD_FLAG_PAUSED (1 << 0) /* 0x01 */ #define TORRENT_ADD_FLAG_DELETE (1 << 1) /* 0x02 */ @@ -49,8 +54,9 @@ const gchar *torrent_get_download_dir(JsonObject * t); gint64 torrent_get_have_unchecked(JsonObject * t); gint64 torrent_get_have_valid(JsonObject * t); gint64 torrent_get_status(JsonObject * t); -gchar *torrent_get_status_string(gint64 value); -gchar *torrent_get_status_icon(guint flags); +gchar *torrent_get_status_string(gint64 rpcv, gint64 value); +gchar *torrent_get_status_icon(gint64 rpcv, guint flags); +guint32 torrent_get_flags(JsonObject * t, gint64 rpcv, gint64 status, gint64 downRate, gint64 upRate); JsonArray *torrent_get_peers(JsonObject * t); JsonArray *torrent_get_tracker_stats(JsonObject * t); JsonArray *torrent_get_wanted(JsonObject * t); diff --git a/src/trg-general-panel.c b/src/trg-general-panel.c index ec60cf9..0cdff84 100644 --- a/src/trg-general-panel.c +++ b/src/trg-general-panel.c @@ -22,6 +22,7 @@ #include <glib/gi18n.h> #include <gtk/gtk.h> +#include "trg-client.h" #include "torrent.h" #include "util.h" #include "trg-general-panel.h" @@ -61,6 +62,7 @@ struct _TrgGeneralPanelPrivate { GtkLabel *gen_downloaddir_label; GtkLabel *gen_error_label; GtkTreeModel *model; + TrgClient *tc; }; void trg_general_panel_clear(TrgGeneralPanel * panel) @@ -108,11 +110,12 @@ void trg_general_panel_update(TrgGeneralPanel * panel, JsonObject * t, gint sizeOfBuf; gchar *statusString; const gchar *errorStr; - gint64 eta, uploaded, downloaded; + gint64 eta, uploaded, downloaded, rpcv; gint seeders, leechers; GtkLabel *keyLabel; priv = TRG_GENERAL_PANEL_GET_PRIVATE(panel); + rpcv = trg_client_get_rpc_version(priv->tc); sizeOfBuf = sizeof(buf); @@ -140,7 +143,7 @@ void trg_general_panel_update(TrgGeneralPanel * panel, JsonObject * t, gtk_label_set_text(GTK_LABEL(priv->gen_ratio_label), _("N/A")); } - statusString = torrent_get_status_string(torrent_get_status(t)); + statusString = torrent_get_status_string(rpcv, torrent_get_status(t)); gtk_label_set_text(GTK_LABEL(priv->gen_status_label), statusString); g_free(statusString); @@ -292,7 +295,7 @@ static void trg_general_panel_init(TrgGeneralPanel * self) gtk_widget_set_sensitive(GTK_WIDGET(self), FALSE); } -TrgGeneralPanel *trg_general_panel_new(GtkTreeModel * model) +TrgGeneralPanel *trg_general_panel_new(GtkTreeModel * model, TrgClient *tc) { GObject *obj; TrgGeneralPanelPrivate *priv; @@ -301,6 +304,7 @@ TrgGeneralPanel *trg_general_panel_new(GtkTreeModel * model) priv = TRG_GENERAL_PANEL_GET_PRIVATE(obj); priv->model = model; + priv->tc = tc; return TRG_GENERAL_PANEL(obj); } diff --git a/src/trg-general-panel.h b/src/trg-general-panel.h index 0f49088..31abb50 100644 --- a/src/trg-general-panel.h +++ b/src/trg-general-panel.h @@ -25,6 +25,7 @@ #include <glib-object.h> +#include "trg-client.h" #include "trg-torrent-model.h" G_BEGIN_DECLS @@ -49,7 +50,7 @@ typedef struct { GType trg_general_panel_get_type(void); -TrgGeneralPanel *trg_general_panel_new(GtkTreeModel * model); +TrgGeneralPanel *trg_general_panel_new(GtkTreeModel * model, TrgClient *tc); G_END_DECLS void trg_general_panel_update(TrgGeneralPanel * panel, JsonObject * t, diff --git a/src/trg-main-window.c b/src/trg-main-window.c index 2b85339..7f36064 100644 --- a/src/trg-main-window.c +++ b/src/trg-main-window.c @@ -675,7 +675,7 @@ static GtkWidget *trg_main_window_notebook_new(TrgMainWindow * win) { gtk_widget_set_size_request(notebook, -1, 185); priv->genDetails - = trg_general_panel_new(GTK_TREE_MODEL(priv->torrentModel)); + = trg_general_panel_new(GTK_TREE_MODEL(priv->torrentModel), priv->client); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), GTK_WIDGET(priv->genDetails), gtk_label_new(_("General"))); diff --git a/src/trg-torrent-model.c b/src/trg-torrent-model.c index b939afd..7cea804 100644 --- a/src/trg-torrent-model.c +++ b/src/trg-torrent-model.c @@ -50,8 +50,6 @@ struct _TrgTorrentModelPrivate { GHashTable *ht; }; -static guint32 torrent_get_flags(JsonObject * t, gint64 status, gint64 downRate, gint64 upRate); - static void trg_torrent_model_dispose(GObject * object) { TrgTorrentModelPrivate *priv = TRG_TORRENT_MODEL_GET_PRIVATE(object); @@ -60,7 +58,7 @@ static void trg_torrent_model_dispose(GObject * object) } static void -update_torrent_iter(TrgTorrentModel * model, gint64 serial, +update_torrent_iter(TrgTorrentModel * model, gint64 rpcv, gint64 serial, GtkTreeIter * iter, JsonObject * t, trg_torrent_model_update_stats * stats); @@ -198,42 +196,6 @@ gboolean trg_torrent_model_is_remove_in_progress(TrgTorrentModel * model) (G_OBJECT(model), PROP_REMOVE_IN_PROGRESS)); } -static guint32 torrent_get_flags(JsonObject * t, gint64 status, gint64 downRate, gint64 upRate) -{ - guint32 flags = 0; - switch (status) { - case STATUS_DOWNLOADING: - flags |= TORRENT_FLAG_DOWNLOADING; - break; - case STATUS_PAUSED: - flags |= TORRENT_FLAG_PAUSED; - break; - case STATUS_SEEDING: - flags |= TORRENT_FLAG_SEEDING; - break; - case STATUS_CHECKING: - flags |= TORRENT_FLAG_CHECKING; - break; - case STATUS_WAITING_TO_CHECK: - flags |= TORRENT_FLAG_WAITING_CHECK; - flags |= TORRENT_FLAG_CHECKING; - break; - } - - if (torrent_get_is_finished(t) == TRUE) - flags |= TORRENT_FLAG_COMPLETE; - else - flags |= TORRENT_FLAG_INCOMPLETE; - - if (downRate > 0 || upRate > 0) - flags |= TORRENT_FLAG_ACTIVE; - - if (strlen(torrent_get_errorstr(t)) > 0) - flags |= TORRENT_FLAG_ERROR; - - return flags; -} - static gboolean trg_torrent_model_stats_scan_foreachfunc(GtkTreeModel * model, GtkTreePath * path G_GNUC_UNUSED, @@ -257,7 +219,7 @@ trg_torrent_model_stats_scan_foreachfunc(GtkTreeModel * model, } static void -update_torrent_iter(TrgTorrentModel * model, gint64 serial, +update_torrent_iter(TrgTorrentModel * model, gint64 rpcv, gint64 serial, GtkTreeIter * iter, JsonObject * t, trg_torrent_model_update_stats * stats) { @@ -279,9 +241,9 @@ update_torrent_iter(TrgTorrentModel * model, gint64 serial, id = torrent_get_id(t); status = torrent_get_status(t); - statusString = torrent_get_status_string(status); - newFlags = torrent_get_flags(t, status, downRate, upRate); - statusIcon = torrent_get_status_icon(newFlags); + statusString = torrent_get_status_string(rpcv, status); + newFlags = torrent_get_flags(t, rpcv, status, downRate, upRate); + statusIcon = torrent_get_status_icon(rpcv, newFlags); gtk_tree_model_get(GTK_TREE_MODEL(model), iter, TORRENT_COLUMN_FLAGS, &lastFlags, @@ -458,6 +420,8 @@ void trg_torrent_model_update(TrgTorrentModel * model, TrgClient * tc, gpointer *result; gboolean addRemove = FALSE; + gint64 rpcv = trg_client_get_rpc_version(tc); + args = get_arguments(response); torrentList = json_array_get_elements(get_torrents(args)); @@ -473,7 +437,7 @@ void trg_torrent_model_update(TrgTorrentModel * model, TrgClient * tc, if (!result) { gtk_list_store_append(GTK_LIST_STORE(model), &iter); - update_torrent_iter(model, trg_client_get_serial(tc), &iter, t, stats); + update_torrent_iter(model, rpcv, trg_client_get_serial(tc), &iter, t, stats); path = gtk_tree_model_get_path(GTK_TREE_MODEL(model), &iter); rr = gtk_tree_row_reference_new(GTK_TREE_MODEL(model), path); @@ -491,7 +455,7 @@ void trg_torrent_model_update(TrgTorrentModel * model, TrgClient * tc, if (path) { if (gtk_tree_model_get_iter (GTK_TREE_MODEL(model), &iter, path)) { - update_torrent_iter(model, trg_client_get_serial(tc), &iter, t, + update_torrent_iter(model, rpcv, trg_client_get_serial(tc), &iter, t, stats); } gtk_tree_path_free(path); diff --git a/src/trg-tree-view.c b/src/trg-tree-view.c index 8e0a866..d75b35a 100644 --- a/src/trg-tree-view.c +++ b/src/trg-tree-view.c @@ -343,6 +343,7 @@ static void trg_tree_view_add_column_after(TrgTreeView * tv, break; } + gtk_tree_view_column_set_min_width(column, 0); gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_column_set_reorderable(column, TRUE); gtk_tree_view_column_set_sort_column_id(column, desc->model_column); |