summaryrefslogtreecommitdiff
path: root/src/trg-main-window.c
diff options
context:
space:
mode:
authorGravatar Alan Fitton <ajf@eth0.org.uk>2011-02-27 21:24:43 +0000
committerGravatar Alan Fitton <ajf@eth0.org.uk>2011-02-27 21:24:43 +0000
commit37f53760e5a5a2c0f9294c13ca680aaa33af056f (patch)
treee50273164754bdf0354f4116add8d286dcc250c5 /src/trg-main-window.c
parentaca2e2bbd8738437a20473202b09757a1fc7c409 (diff)
a much better system for suspending tracker/file updates until a change has been acknowledged. fix for issue 17 (bandwidth priorities). use transmission-remote-gtk icon in .desktop instead of transmission.
Diffstat (limited to 'src/trg-main-window.c')
-rw-r--r--src/trg-main-window.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/src/trg-main-window.c b/src/trg-main-window.c
index 496add9..db0db2a 100644
--- a/src/trg-main-window.c
+++ b/src/trg-main-window.c
@@ -1024,9 +1024,17 @@ void
on_generic_interactive_action(JsonObject * response, int status,
gpointer data)
{
- gdk_threads_enter();
- trg_dialog_error_handler(TRG_MAIN_WINDOW(data), response, status);
- gdk_threads_leave();
+ TrgMainWindowPrivate *priv = TRG_MAIN_WINDOW_GET_PRIVATE(data);
+
+ if (priv->client->session != NULL)
+ {
+ gdk_threads_enter();
+ trg_dialog_error_handler(TRG_MAIN_WINDOW(data), response, status);
+ gdk_threads_leave();
+
+ if (status == CURLE_OK || status == FAIL_RESPONSE_UNSUCCESSFUL)
+ dispatch_async(priv->client, torrent_get(), on_torrent_get, data);
+ }
response_unref(response);
}
@@ -1053,15 +1061,15 @@ on_torrent_get_multipurpose(JsonObject * response, gboolean first,
priv = TRG_MAIN_WINDOW_GET_PRIVATE(data);
client = priv->client;
- gdk_threads_enter();
-
/* Disconnected between request and response callback */
if (client->session == NULL) {
- gdk_threads_leave();
response_unref(response);
return;
}
+ g_mutex_lock(client->updateMutex);
+ gdk_threads_enter();
+
if (status != CURLE_OK) {
client->failCount++;
if (client->failCount >= 3) {
@@ -1084,6 +1092,7 @@ on_torrent_get_multipurpose(JsonObject * response, gboolean first,
trg_update_torrents_timerfunc, data);
}
gdk_threads_leave();
+ g_mutex_unlock(client->updateMutex);
response_unref(response);
return;
}
@@ -1095,8 +1104,6 @@ on_torrent_get_multipurpose(JsonObject * response, gboolean first,
stats.down = 0;
stats.paused = 0;
- g_mutex_lock(client->updateMutex);
-
client->updateSerial++;
trg_torrent_model_update(priv->torrentModel, priv->client,
@@ -1104,14 +1111,13 @@ on_torrent_get_multipurpose(JsonObject * response, gboolean first,
update_selected_torrent_notebook(TRG_MAIN_WINDOW(data), first);
- g_mutex_unlock(client->updateMutex);
-
trg_status_bar_update(priv->statusBar, &stats);
g_timeout_add_seconds(client->interval, trg_update_torrents_timerfunc,
data);
gdk_threads_leave();
+ g_mutex_unlock(client->updateMutex);
response_unref(response);
}