From a04430bff79030690add518548677251816e3e71 Mon Sep 17 00:00:00 2001 From: Alan Fitton Date: Wed, 19 Oct 2011 17:32:46 +0000 Subject: issue 155 --- src/remote-exec.c | 12 +++++++++--- src/remote-exec.h | 3 ++- src/trg-client.c | 28 +++++++++++++++++++++++++--- src/trg-client.h | 2 ++ src/trg-main-window.c | 7 +++++-- src/trg-preferences-dialog.c | 2 +- 6 files changed, 44 insertions(+), 10 deletions(-) diff --git a/src/remote-exec.c b/src/remote-exec.c index 75c1d10..d8041c7 100644 --- a/src/remote-exec.c +++ b/src/remote-exec.c @@ -22,6 +22,8 @@ #include #include "trg-torrent-model.h" +#include "trg-client.h" +#include "trg-prefs.h" #include "protocol-constants.h" #include "torrent.h" @@ -81,15 +83,19 @@ static gchar *dump_json_value(JsonNode * node) { return g_string_free(buffer, FALSE); } -gchar *build_remote_exec_cmd(TrgPrefs *prefs, GtkTreeModel *model, GList *selection, +gchar *build_remote_exec_cmd(TrgClient *tc, GtkTreeModel *model, GList *selection, const gchar * input) { - JsonObject *profile = trg_prefs_get_profile(prefs); - gchar *work = g_strdup(input); + JsonObject *profile = trg_client_get_current_profile(tc); + gchar *work; GRegex *regex, *replacerx; GMatchInfo *match_info; gchar *whole, *wholeEscaped, *id, *tmp, *valuestr, *repeater; JsonNode *replacement; + if (!profile) + return NULL; + + work = g_strdup(input); regex = g_regex_new("%{([A-Za-z\\-]+)}(?:\\[(.*)\\])?", 0, 0, NULL); g_regex_match_full(regex, input, -1, 0, 0, &match_info, NULL); diff --git a/src/remote-exec.h b/src/remote-exec.h index 864f8b5..4f8c52e 100644 --- a/src/remote-exec.h +++ b/src/remote-exec.h @@ -20,6 +20,7 @@ #ifndef REMOTE_EXEC_H_ #define REMOTE_EXEC_H_ -gchar *build_remote_exec_cmd(TrgPrefs *prefs, GtkTreeModel *model, GList *selection, const gchar * input); +gchar *build_remote_exec_cmd(TrgClient *tc, GtkTreeModel *model, GList *selection, + const gchar * input); #endif /* REMOTE_EXEC_H_ */ diff --git a/src/trg-client.c b/src/trg-client.c index 7e06189..481156c 100644 --- a/src/trg-client.c +++ b/src/trg-client.c @@ -60,6 +60,7 @@ struct _TrgClientPrivate { guint min_interval; gint64 updateSerial; JsonObject *session; + JsonObject *currentProfile; gboolean ssl; float version; char *url; @@ -196,6 +197,12 @@ TrgPrefs *trg_client_get_prefs(TrgClient *tc) return priv->prefs; } +JsonObject *trg_client_get_current_profile(TrgClient *tc) +{ + TrgClientPrivate *priv = TRG_CLIENT_GET_PRIVATE(tc); + return priv->currentProfile; +} + int trg_client_populate_with_settings(TrgClient * tc) { TrgClientPrivate *priv = TRG_CLIENT_GET_PRIVATE(tc); @@ -262,6 +269,8 @@ int trg_client_populate_with_settings(TrgClient * tc) trg_prefs_get_bool(prefs, TRG_PREFS_KEY_UPDATE_ACTIVE_ONLY, TRG_PREFS_PROFILE); + priv->currentProfile = trg_prefs_get_profile(prefs); + #ifdef HAVE_LIBPROXY if ((pf = px_proxy_factory_new())) { char **proxies = px_proxy_factory_get_proxies(pf, priv->url); @@ -328,9 +337,12 @@ void trg_client_status_change(TrgClient *tc, gboolean connected) { TrgClientPrivate *priv = TRG_CLIENT_GET_PRIVATE(tc); - if (!connected && priv->session) { - json_object_unref(priv->session); - priv->session = NULL; + if (!connected) { + if (priv->session) { + json_object_unref(priv->session); + priv->session = NULL; + } + priv->currentProfile = NULL; } } @@ -340,6 +352,16 @@ JsonObject* trg_client_get_session(TrgClient *tc) return priv->session; } +void trg_client_del_profile(TrgClient *tc, JsonObject *profile) +{ + TrgClientPrivate *priv = TRG_CLIENT_GET_PRIVATE(tc); + + if (profile == priv->currentProfile) + priv->currentProfile = NULL; + + trg_prefs_del_profile(priv->prefs, profile); +} + void trg_client_thread_pool_push(TrgClient *tc, gpointer data, GError **err) { TrgClientPrivate *priv = TRG_CLIENT_GET_PRIVATE(tc); diff --git a/src/trg-client.h b/src/trg-client.h index 4ef93f9..f89d695 100644 --- a/src/trg-client.h +++ b/src/trg-client.h @@ -170,6 +170,8 @@ void trg_client_set_interval(TrgClient *tc, guint interval); void trg_client_set_minimised_interval(TrgClient *tc, guint interval); void trg_client_set_activeonlyupdate(TrgClient *tc, gboolean activeOnlyUpdate); void trg_client_inc_connid(TrgClient *tc); +JsonObject *trg_client_get_current_profile(TrgClient *tc); +void trg_client_del_profile(TrgClient *tc, JsonObject *profile); G_END_DECLS diff --git a/src/trg-main-window.c b/src/trg-main-window.c index 124f915..20a9df7 100644 --- a/src/trg-main-window.c +++ b/src/trg-main-window.c @@ -1501,7 +1501,6 @@ static GtkWidget *limit_menu_new(TrgMainWindow * win, gchar * title, static void exec_cmd_cb(GtkWidget *w, gpointer data) { TrgMainWindowPrivate *priv = TRG_MAIN_WINDOW_GET_PRIVATE(data); - TrgPrefs *prefs = trg_client_get_prefs(priv->client); JsonObject *cmd_obj = (JsonObject*) g_object_get_data(G_OBJECT(w), "cmd-object"); GtkTreeSelection *selection = gtk_tree_view_get_selection( @@ -1512,13 +1511,17 @@ static void exec_cmd_cb(GtkWidget *w, gpointer data) { gchar *cmd_line, **argv; cmd_line = build_remote_exec_cmd( - prefs, + priv->client, model, selectedRows, json_object_get_string_member(cmd_obj, TRG_PREFS_KEY_EXEC_COMMANDS_SUBKEY_CMD)); + g_debug("Exec: %s",cmd_line); + if (!cmd_line) + return; + //GTK has bug, won't let you pass a string here containing a quoted param, so use parse and then spawn // rather than g_spawn_command_line_async(cmd_line,&cmd_error); diff --git a/src/trg-preferences-dialog.c b/src/trg-preferences-dialog.c index 4b0cd57..e72febe 100644 --- a/src/trg-preferences-dialog.c +++ b/src/trg-preferences-dialog.c @@ -529,7 +529,7 @@ static void del_profile_cb(GtkWidget *w, gpointer data) { if (gtk_combo_box_get_active_iter(combo, &iter)) { gtk_tree_model_get(profileModel, &iter, 0, &profile, -1); - trg_prefs_del_profile(prefs, profile); + trg_client_del_profile(priv->client, profile); trg_prefs_set_profile(prefs, NULL); gtk_list_store_remove(GTK_LIST_STORE(profileModel), &iter); gtk_combo_box_set_active(combo, 0); -- cgit v1.2.3