summaryrefslogtreecommitdiff
path: root/src/trg-torrent-model.c
diff options
context:
space:
mode:
authorGravatar Alan Fitton <ajf@eth0.org.uk>2011-11-22 14:55:34 +0000
committerGravatar Alan Fitton <ajf@eth0.org.uk>2011-11-22 14:55:34 +0000
commitceed760d73e4ec82c8bd6f9a99a93ce184968b23 (patch)
treee3d398a2d27f1b41f57d41ee54925e6512d7062b /src/trg-torrent-model.c
parent57cb76cd8486a7cd4ca7de039dd874c6fe32ce94 (diff)
issue 66 - make paths under the default download dir appear as relative. add a example action script for downloading to local.
Diffstat (limited to 'src/trg-torrent-model.c')
-rw-r--r--src/trg-torrent-model.c73
1 files changed, 62 insertions, 11 deletions
diff --git a/src/trg-torrent-model.c b/src/trg-torrent-model.c
index 54a2f0f..0ef89d6 100644
--- a/src/trg-torrent-model.c
+++ b/src/trg-torrent-model.c
@@ -59,9 +59,9 @@ static void trg_torrent_model_dispose(GObject * object)
}
static void
-update_torrent_iter(TrgTorrentModel * model, gint64 rpcv, gint64 serial,
- GtkTreeIter * iter, JsonObject * t,
- trg_torrent_model_update_stats * stats);
+update_torrent_iter(TrgTorrentModel * model, TrgClient *tc,
+ gint64 rpcv, gint64 serial, GtkTreeIter * iter,
+ JsonObject * t, trg_torrent_model_update_stats * stats);
static void trg_torrent_model_class_init(TrgTorrentModelClass * klass)
{
@@ -174,6 +174,7 @@ static void trg_torrent_model_init(TrgTorrentModel * self)
column_types[TORRENT_COLUMN_UPDATESERIAL] = G_TYPE_INT64;
column_types[TORRENT_COLUMN_FLAGS] = G_TYPE_INT;
column_types[TORRENT_COLUMN_DOWNLOADDIR] = G_TYPE_STRING;
+ column_types[TORRENT_COLUMN_DOWNLOADDIR_SHORT] = G_TYPE_STRING;
column_types[TORRENT_COLUMN_BANDWIDTH_PRIORITY] = G_TYPE_INT64;
column_types[TORRENT_COLUMN_DONE_DATE] = G_TYPE_INT64;
column_types[TORRENT_COLUMN_FROMPEX] = G_TYPE_INT64;
@@ -245,10 +246,51 @@ void trg_torrent_model_remove_all(TrgTorrentModel *model)
gtk_list_store_clear(GTK_LIST_STORE(model));
}
+gchar *shorten_download_dir(TrgClient *tc, const gchar *downloadDir)
+{
+ TrgPrefs *prefs = trg_client_get_prefs(tc);
+ JsonArray *labels = trg_prefs_get_array(prefs, TRG_PREFS_KEY_DESTINATIONS, TRG_PREFS_CONNECTION);
+ gchar *shortDownloadDir = NULL;
+
+ if (labels) {
+ GList *labelsList = json_array_get_elements(labels);
+ if (labelsList) {
+ GList *li;
+ for (li = labelsList; li; li = g_list_next(li)) {
+ JsonObject *labelObj = json_node_get_object((JsonNode*)li->data);
+ const gchar *labelDir = json_object_get_string_member(labelObj, TRG_PREFS_KEY_DESTINATIONS_SUBKEY_DIR);
+ if (!g_strcmp0(downloadDir, labelDir)) {
+ const gchar *labelLabel = json_object_get_string_member(labelObj, TRG_PREFS_SUBKEY_LABEL);
+ shortDownloadDir = g_strdup(labelLabel);
+ break;
+ }
+ }
+ g_list_free(labelsList);
+ }
+ }
+
+ if (shortDownloadDir) {
+ return shortDownloadDir;
+ } else {
+ JsonObject *session = trg_client_get_session(tc);
+ const gchar *defaultDownloadDir = session_get_download_dir(session);
+ if (g_str_has_prefix(downloadDir, defaultDownloadDir)) {
+ int offset = strlen(defaultDownloadDir);
+ if (*(downloadDir+offset) == '/')
+ offset++;
+
+ if (offset+1 < strlen(downloadDir))
+ return g_strdup(downloadDir+offset);
+ }
+ }
+
+ return g_strdup(downloadDir);
+}
+
static void
-update_torrent_iter(TrgTorrentModel * model, gint64 rpcv, gint64 serial,
- GtkTreeIter * iter, JsonObject * t,
- trg_torrent_model_update_stats * stats)
+update_torrent_iter(TrgTorrentModel * model, TrgClient *tc,
+ gint64 rpcv, gint64 serial, GtkTreeIter * iter,
+ JsonObject * t, trg_torrent_model_update_stats * stats)
{
TrgTorrentModelPrivate *priv = TRG_TORRENT_MODEL_GET_PRIVATE(model);
GtkListStore *ls = GTK_LIST_STORE(model);
@@ -259,6 +301,7 @@ update_torrent_iter(TrgTorrentModel * model, gint64 rpcv, gint64 serial,
gint64 downRate, upRate, downloaded, uploaded, id, status, lpd;
gchar *firstTrackerHost = NULL;
gchar *peerSources = NULL;
+ gchar *lastDownloadDir = NULL;
downRate = torrent_get_rate_down(t);
stats->downRateTotal += downRate;
@@ -282,7 +325,8 @@ update_torrent_iter(TrgTorrentModel * model, gint64 rpcv, gint64 serial,
gtk_tree_model_get(GTK_TREE_MODEL(model), iter,
TORRENT_COLUMN_FLAGS, &lastFlags,
- TORRENT_COLUMN_JSON, &lastJson, -1);
+ TORRENT_COLUMN_JSON, &lastJson,
+ TORRENT_COLUMN_DOWNLOADDIR, &lastDownloadDir, -1);
json_object_ref(t);
@@ -294,7 +338,7 @@ update_torrent_iter(TrgTorrentModel * model, gint64 rpcv, gint64 serial,
lpd = peerfrom_get_lpd(pf);
if (newFlags & TORRENT_FLAG_ACTIVE) {
if (lpd >= 0) {
- peerSources = g_strdup_printf("%d / %d / %d / %d / %d / %d / %d",
+ peerSources = g_strdup_printf("%ld / %ld / %ld / %ld / %ld / %ld / %ld",
peerfrom_get_trackers(pf),
peerfrom_get_incoming(pf),
peerfrom_get_ltep(pf),
@@ -303,7 +347,7 @@ update_torrent_iter(TrgTorrentModel * model, gint64 rpcv, gint64 serial,
lpd,
peerfrom_get_resume(pf));
} else {
- peerSources = g_strdup_printf("%d / %d / %d / %d / %d / N/A / %d",
+ peerSources = g_strdup_printf("%ld / %ld / %ld / %ld / %ld / N/A / %ld",
peerfrom_get_trackers(pf),
peerfrom_get_incoming(pf),
peerfrom_get_ltep(pf),
@@ -418,6 +462,12 @@ update_torrent_iter(TrgTorrentModel * model, gint64 rpcv, gint64 serial,
TORRENT_COLUMN_UPDATESERIAL, serial, -1);
#endif
+ if (!lastDownloadDir || g_strcmp0(downloadDir, lastDownloadDir)) {
+ gchar *shortDownloadDir = shorten_download_dir(tc, downloadDir);
+ gtk_list_store_set(ls, iter, TORRENT_COLUMN_DOWNLOADDIR_SHORT, shortDownloadDir, -1);
+ g_free(shortDownloadDir);
+ }
+
if (lastJson)
json_object_unref(lastJson);
@@ -432,6 +482,7 @@ update_torrent_iter(TrgTorrentModel * model, gint64 rpcv, gint64 serial,
if (peerSources)
g_free(peerSources);
+ g_free(lastDownloadDir);
g_free(statusString);
g_free(statusIcon);
}
@@ -545,7 +596,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, rpcv, trg_client_get_serial(tc), &iter, t, stats);
+ update_torrent_iter(model, tc, 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);
@@ -563,7 +614,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, rpcv, trg_client_get_serial(tc), &iter, t,
+ update_torrent_iter(model, tc, rpcv, trg_client_get_serial(tc), &iter, t,
stats);
}
gtk_tree_path_free(path);