diff options
author | Alan Fitton <ajf@eth0.org.uk> | 2011-02-27 21:24:43 +0000 |
---|---|---|
committer | Alan Fitton <ajf@eth0.org.uk> | 2011-02-27 21:24:43 +0000 |
commit | 37f53760e5a5a2c0f9294c13ca680aaa33af056f (patch) | |
tree | e50273164754bdf0354f4116add8d286dcc250c5 /src/trg-main-window.c | |
parent | aca2e2bbd8738437a20473202b09757a1fc7c409 (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.c | 26 |
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); } |