summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Alan Fitton <ajf@eth0.org.uk>2011-09-04 22:24:11 +0000
committerGravatar Alan Fitton <ajf@eth0.org.uk>2011-09-04 22:24:11 +0000
commite941b2e01998f86cd60fac3c83091d473b4bfecd (patch)
tree0f833a787611ebbef73aaf2df201cb86bfb49ad6
parentdca8f6d8b87d6f92ff21344ec80b64c7a3b7de7f (diff)
issue 70 - new statuses in RPC version >= 14. still need to add stateselector entries for queued items.
-rw-r--r--src/protocol-constants.h29
-rw-r--r--src/torrent.c119
-rw-r--r--src/torrent.h24
-rw-r--r--src/trg-general-panel.c10
-rw-r--r--src/trg-general-panel.h3
-rw-r--r--src/trg-main-window.c2
-rw-r--r--src/trg-torrent-model.c54
-rw-r--r--src/trg-tree-view.c1
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);