summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/trg-client.c18
-rw-r--r--src/trg-client.h2
-rw-r--r--src/trg-main-window.c8
-rw-r--r--src/trg-status-bar.c34
-rw-r--r--src/trg-status-bar.h1
5 files changed, 51 insertions, 12 deletions
diff --git a/src/trg-client.c b/src/trg-client.c
index db5a051..bd1119b 100644
--- a/src/trg-client.c
+++ b/src/trg-client.c
@@ -36,6 +36,13 @@
G_DEFINE_TYPE (TrgClient, trg_client, G_TYPE_OBJECT)
+enum {
+ TC_SESSION_UPDATED,
+ TC_SIGNAL_COUNT
+};
+
+static guint signals[TC_SIGNAL_COUNT] = { 0 };
+
#define TRG_CLIENT_GET_PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), TRG_TYPE_CLIENT, TrgClientPrivate))
@@ -97,6 +104,15 @@ trg_client_class_init (TrgClientClass *klass)
object_class->get_property = trg_client_get_property;
object_class->set_property = trg_client_set_property;
object_class->dispose = trg_client_dispose;
+
+ signals[TC_SESSION_UPDATED] =
+ g_signal_new("session-updated",
+ G_TYPE_FROM_CLASS(object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET(TrgClientClass,
+ session_updated), NULL,
+ NULL, g_cclosure_marshal_VOID__POINTER,
+ G_TYPE_NONE, 1, G_TYPE_POINTER);
}
static void
@@ -144,6 +160,8 @@ void trg_client_set_session(TrgClient * tc, JsonObject * session)
session_get_version(session, &priv->version);
priv->session = session;
+
+ g_signal_emit(tc, signals[TC_SESSION_UPDATED], 0, session);
}
TrgPrefs *trg_client_get_prefs(TrgClient *tc)
diff --git a/src/trg-client.h b/src/trg-client.h
index 92a30e0..67d026b 100644
--- a/src/trg-client.h
+++ b/src/trg-client.h
@@ -63,6 +63,8 @@ typedef struct {
typedef struct {
GObjectClass parent_class;
+ void (*session_updated) (TrgClient *tc, JsonObject * session, gpointer data);
+
} TrgClientClass;
GType trg_client_get_type (void);
diff --git a/src/trg-main-window.c b/src/trg-main-window.c
index 6ef88bd..ff1bace 100644
--- a/src/trg-main-window.c
+++ b/src/trg-main-window.c
@@ -1557,6 +1557,11 @@ static gboolean trg_main_window_config_event(GtkWidget *widget,
return FALSE;
}
+static void trg_client_session_updated_cb(TrgClient *tc, JsonObject *session, gpointer data)
+{
+ trg_status_bar_session_update(TRG_STATUS_BAR(data), session);
+}
+
static GObject *trg_main_window_constructor(GType type,
guint n_construct_properties, GObjectConstructParam * construct_params) {
TrgMainWindow *self;
@@ -1700,6 +1705,9 @@ static GObject *trg_main_window_constructor(GType type,
priv->statusIcon = NULL;
priv->statusBar = trg_status_bar_new();
+ g_signal_connect(priv->client, "session-updated",
+ G_CALLBACK(trg_client_session_updated_cb), priv->statusBar);
+
/*g_signal_connect(priv->statusBar, "text-pushed",
G_CALLBACK(status_bar_text_pushed), self);*/
gtk_box_pack_start(GTK_BOX(outerVbox), GTK_WIDGET(priv->statusBar), FALSE,
diff --git a/src/trg-status-bar.c b/src/trg-status-bar.c
index 5c2002b..42dacd1 100644
--- a/src/trg-status-bar.c
+++ b/src/trg-status-bar.c
@@ -88,6 +88,26 @@ void trg_status_bar_connect(TrgStatusBar * sb, JsonObject * session)
g_free(statusMsg);
}
+void trg_status_bar_session_update(TrgStatusBar *sb, JsonObject *session)
+{
+ TrgStatusBarPrivate *priv = TRG_STATUS_BAR_GET_PRIVATE(sb);
+ gint64 free = session_get_download_dir_free_space(session);
+ gchar freeSpace[64];
+
+ if (free >= 0) {
+ gchar *freeSpaceString;
+ trg_strlsize(freeSpace, free);
+ freeSpaceString = g_strdup_printf(_("Free space: %s"), freeSpace);
+ gtk_label_set_text(GTK_LABEL(priv->free_lbl), freeSpaceString);
+ g_free(freeSpaceString);
+ } else {
+ gtk_label_set_text(GTK_LABEL(priv->free_lbl), "");
+ }
+
+
+
+}
+
void trg_status_bar_update(TrgStatusBar * sb,
trg_torrent_model_update_stats * stats,
TrgClient * client)
@@ -95,9 +115,9 @@ void trg_status_bar_update(TrgStatusBar * sb,
TrgStatusBarPrivate *priv;
JsonObject *session;
gchar *speedText, *infoText;
- gint64 uplimitraw, downlimitraw, freeSpaceRaw;
+ gint64 uplimitraw, downlimitraw;
gchar downRateTotalString[32], upRateTotalString[32];
- gchar uplimit[64], downlimit[64], freeSpace[64];
+ gchar uplimit[64], downlimit[64];
priv = TRG_STATUS_BAR_GET_PRIVATE(sb);
session = trg_client_get_session(client);
@@ -148,16 +168,6 @@ void trg_status_bar_update(TrgStatusBar * sb,
gtk_label_set_text(GTK_LABEL(priv->info_lbl), infoText);
gtk_label_set_text(GTK_LABEL(priv->speed_lbl), speedText);
- freeSpaceRaw = session_get_download_dir_free_space(session);
- if (freeSpaceRaw >= 0) {
- gchar *freeSpaceString;
- trg_strlsize(freeSpace, freeSpaceRaw);
- freeSpaceString = g_strdup_printf(_("Free space: %s"), freeSpace);
- gtk_label_set_text(GTK_LABEL(priv->free_lbl), freeSpaceString);
- g_free(freeSpaceString);
- } else {
- gtk_label_set_text(GTK_LABEL(priv->free_lbl), "");
- }
g_free(speedText);
g_free(infoText);
diff --git a/src/trg-status-bar.h b/src/trg-status-bar.h
index a122dcb..1be850a 100644
--- a/src/trg-status-bar.h
+++ b/src/trg-status-bar.h
@@ -53,6 +53,7 @@ G_END_DECLS
void trg_status_bar_update(TrgStatusBar * sb,
trg_torrent_model_update_stats * stats,
TrgClient * client);
+void trg_status_bar_session_update(TrgStatusBar *sb, JsonObject *session);
void trg_status_bar_connect(TrgStatusBar * sb, JsonObject * session);
void trg_status_bar_push_connection_msg(TrgStatusBar * sb,
const gchar * msg);