diff options
-rw-r--r-- | src/session-get.c | 5 | ||||
-rw-r--r-- | src/session-get.h | 2 | ||||
-rw-r--r-- | src/torrent.c | 1 | ||||
-rw-r--r-- | src/trg-client.c | 2 | ||||
-rw-r--r-- | src/trg-main-window.c | 16 | ||||
-rw-r--r-- | src/trg-state-selector.c | 12 | ||||
-rw-r--r-- | src/trg-status-bar.c | 82 | ||||
-rw-r--r-- | src/trg-status-bar.h | 6 |
8 files changed, 76 insertions, 50 deletions
diff --git a/src/session-get.c b/src/session-get.c index 4251749..ea523de 100644 --- a/src/session-get.c +++ b/src/session-get.c @@ -31,6 +31,11 @@ int session_get_version(JsonObject * s, float *version) return sscanf(versionStr, "%g", version); } +gint64 session_get_download_dir_free_space(JsonObject *s) +{ + return json_object_get_int_member(s, SGET_DOWNLOAD_DIR_FREE_SPACE); +} + gint64 session_get_rpc_version(JsonObject * s) { return json_object_get_int_member(s, SGET_RPC_VERSION); diff --git a/src/session-get.h b/src/session-get.h index 98448cc..7bb4c38 100644 --- a/src/session-get.h +++ b/src/session-get.h @@ -22,6 +22,7 @@ #include <glib-object.h> +#define SGET_DOWNLOAD_DIR_FREE_SPACE "download-dir-free-space" #define SGET_ALT_SPEED_DOWN "alt-speed-down" #define SGET_ALT_SPEED_ENABLED "alt-speed-enabled" #define SGET_ALT_SPEED_TIME_BEGIN "alt-speed-time-begin" @@ -99,5 +100,6 @@ gint64 session_get_download_queue_size(JsonObject * s); gboolean session_get_seed_queue_enabled(JsonObject * s); gint64 session_get_seed_queue_size(JsonObject * s); gint64 session_get_rpc_version(JsonObject * s); +gint64 session_get_download_dir_free_space(JsonObject *s); #endif /* SESSION_GET_H_ */ diff --git a/src/torrent.c b/src/torrent.c index cc9f0f8..bdd6d75 100644 --- a/src/torrent.c +++ b/src/torrent.c @@ -304,6 +304,7 @@ gchar *torrent_get_status_string(gint64 rpcv, gint64 value) } } + g_warning("Unknown status: %ld", value); return g_strdup(_("Unknown")); } diff --git a/src/trg-client.c b/src/trg-client.c index fb57a93..db5a051 100644 --- a/src/trg-client.c +++ b/src/trg-client.c @@ -179,7 +179,7 @@ int trg_client_populate_with_settings(TrgClient * tc) if (!host) { return TRG_NO_HOSTNAME_SET; } else if (strlen(host) < 1) { - free(host); + g_free(host); return TRG_NO_HOSTNAME_SET; } diff --git a/src/trg-main-window.c b/src/trg-main-window.c index 7f36064..84efee0 100644 --- a/src/trg-main-window.c +++ b/src/trg-main-window.c @@ -165,8 +165,6 @@ static gboolean torrent_tv_button_pressed_cb(GtkWidget * treeview, GdkEventButton * event, gpointer userdata); static gboolean torrent_tv_popup_menu_cb(GtkWidget * treeview, gpointer userdata); -static void status_bar_text_pushed(GtkStatusbar * statusbar, guint context_id, - gchar * text, gpointer user_data); static gboolean window_state_event(GtkWidget * widget, GdkEventWindowState * event, gpointer trayIcon); @@ -429,7 +427,7 @@ static void disconnect_cb(GtkWidget * w G_GNUC_UNUSED, gpointer data) { TrgMainWindowPrivate *priv = TRG_MAIN_WINDOW_GET_PRIVATE(data); trg_main_window_conn_changed(TRG_MAIN_WINDOW(data), FALSE); - trg_status_bar_push_connection_msg(priv->statusBar, "Disconnected."); + trg_status_bar_reset(priv->statusBar); } static void connect_cb(GtkWidget * w G_GNUC_UNUSED, gpointer data) { @@ -1473,14 +1471,6 @@ static gboolean torrent_tv_popup_menu_cb(GtkWidget * treeview, return TRUE; } -static void status_bar_text_pushed(GtkStatusbar * statusbar, guint context_id, - gchar * text, gpointer user_data) { - TrgMainWindowPrivate *priv = TRG_MAIN_WINDOW_GET_PRIVATE(user_data); - - if (priv->statusIcon) - gtk_status_icon_set_tooltip(priv->statusIcon, text); -} - static gboolean window_state_event(GtkWidget * widget, GdkEventWindowState * event, gpointer trayIcon) { TrgMainWindowPrivate *priv = TRG_MAIN_WINDOW_GET_PRIVATE(widget); @@ -1706,8 +1696,8 @@ static GObject *trg_main_window_constructor(GType type, priv->statusIcon = NULL; priv->statusBar = trg_status_bar_new(); - g_signal_connect(priv->statusBar, "text-pushed", - G_CALLBACK(status_bar_text_pushed), self); + /*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, FALSE, 2); diff --git a/src/trg-state-selector.c b/src/trg-state-selector.c index aa39f8f..dde1e0f 100644 --- a/src/trg-state-selector.c +++ b/src/trg-state-selector.c @@ -34,7 +34,7 @@ enum { SELECTOR_SIGNAL_COUNT }; -#define N_CATEGORIES 10 +#define N_CATEGORIES 12 static guint signals[SELECTOR_SIGNAL_COUNT] = { 0 }; @@ -477,18 +477,20 @@ static void trg_state_selector_init(TrgStateSelector * self) trg_state_selector_add_state(store, &iter, GTK_STOCK_GO_DOWN, _("Downloading"), TORRENT_FLAG_DOWNLOADING); + trg_state_selector_add_state(store, &iter, GTK_STOCK_MEDIA_REWIND, _("Queue Down"), TORRENT_FLAG_DOWNLOADING_WAIT); + trg_state_selector_add_state(store, &iter, GTK_STOCK_GO_UP, + _("Seeding"), TORRENT_FLAG_SEEDING); + trg_state_selector_add_state(store, &iter, GTK_STOCK_MEDIA_FORWARD, _("Queue Up"), TORRENT_FLAG_SEEDING_WAIT); trg_state_selector_add_state(store, &iter, GTK_STOCK_MEDIA_PAUSE, _("Paused"), TORRENT_FLAG_PAUSED); - trg_state_selector_add_state(store, &iter, GTK_STOCK_REFRESH, - _("Checking"), TORRENT_FLAG_CHECKING); trg_state_selector_add_state(store, &iter, GTK_STOCK_APPLY, _("Complete"), TORRENT_FLAG_COMPLETE); trg_state_selector_add_state(store, &iter, GTK_STOCK_SELECT_ALL, _("Incomplete"), TORRENT_FLAG_INCOMPLETE); - trg_state_selector_add_state(store, &iter, GTK_STOCK_GO_UP, - _("Seeding"), TORRENT_FLAG_SEEDING); trg_state_selector_add_state(store, &iter, GTK_STOCK_NETWORK, _("Active"), TORRENT_FLAG_ACTIVE); + trg_state_selector_add_state(store, &iter, GTK_STOCK_REFRESH, + _("Checking"), TORRENT_FLAG_CHECKING); trg_state_selector_add_state(store, &iter, GTK_STOCK_DIALOG_WARNING, _("Error"), TORRENT_FLAG_ERROR); trg_state_selector_add_state(store, &iter, NULL, NULL, 0); diff --git a/src/trg-status-bar.c b/src/trg-status-bar.c index 8ccbe72..5c2002b 100644 --- a/src/trg-status-bar.c +++ b/src/trg-status-bar.c @@ -26,14 +26,15 @@ #include "session-get.h" #include "util.h" -G_DEFINE_TYPE(TrgStatusBar, trg_status_bar, GTK_TYPE_STATUSBAR) +G_DEFINE_TYPE(TrgStatusBar, trg_status_bar, GTK_TYPE_HBOX) #define TRG_STATUS_BAR_GET_PRIVATE(o) \ (G_TYPE_INSTANCE_GET_PRIVATE ((o), TRG_TYPE_STATUS_BAR, TrgStatusBarPrivate)) typedef struct _TrgStatusBarPrivate TrgStatusBarPrivate; struct _TrgStatusBarPrivate { - guint connectionCtx; - guint countSpeedsCtx; + GtkWidget *speed_lbl; + GtkWidget *free_lbl; + GtkWidget *info_lbl; }; static void trg_status_bar_class_init(TrgStatusBarClass * klass) @@ -41,26 +42,36 @@ static void trg_status_bar_class_init(TrgStatusBarClass * klass) g_type_class_add_private(klass, sizeof(TrgStatusBarPrivate)); } +void trg_status_bar_reset(TrgStatusBar *sb) +{ + TrgStatusBarPrivate *priv = TRG_STATUS_BAR_GET_PRIVATE(sb); + + gtk_label_set_text(GTK_LABEL(priv->info_lbl), _("Disconnected")); + gtk_label_set_text(GTK_LABEL(priv->free_lbl), ""); + gtk_label_set_text(GTK_LABEL(priv->speed_lbl), ""); +} + static void trg_status_bar_init(TrgStatusBar * self) { TrgStatusBarPrivate *priv = TRG_STATUS_BAR_GET_PRIVATE(self); + gtk_container_set_border_width (GTK_CONTAINER(self), 2); - priv->connectionCtx = - gtk_statusbar_get_context_id(GTK_STATUSBAR(self), "connection"); - priv->countSpeedsCtx = - gtk_statusbar_get_context_id(GTK_STATUSBAR(self), - "counts and speeds"); + priv->info_lbl = gtk_label_new(_("Disconnected")); + gtk_box_pack_start(GTK_BOX(self), priv->info_lbl, FALSE, TRUE, 0); + + priv->speed_lbl = gtk_label_new(NULL); + gtk_box_pack_end(GTK_BOX(self), priv->speed_lbl, FALSE, TRUE, 10); + + priv->free_lbl = gtk_label_new(NULL); + gtk_box_pack_end(GTK_BOX(self), priv->free_lbl, FALSE, TRUE, 30); } void trg_status_bar_push_connection_msg(TrgStatusBar * sb, const gchar * msg) { - TrgStatusBarPrivate *priv; + TrgStatusBarPrivate *priv = TRG_STATUS_BAR_GET_PRIVATE(sb); - priv = TRG_STATUS_BAR_GET_PRIVATE(sb); - - gtk_statusbar_pop(GTK_STATUSBAR(sb), priv->connectionCtx); - gtk_statusbar_push(GTK_STATUSBAR(sb), priv->connectionCtx, msg); + gtk_label_set_text(GTK_LABEL(priv->info_lbl), msg); } void trg_status_bar_connect(TrgStatusBar * sb, JsonObject * session) @@ -72,7 +83,7 @@ void trg_status_bar_connect(TrgStatusBar * sb, JsonObject * session) statusMsg = g_strdup_printf (_("Connected to Transmission %g, getting torrents..."), version); - g_printf("%s\n", statusMsg); + g_message("%s", statusMsg); trg_status_bar_push_connection_msg(sb, statusMsg); g_free(statusMsg); } @@ -83,15 +94,15 @@ void trg_status_bar_update(TrgStatusBar * sb, { TrgStatusBarPrivate *priv; JsonObject *session; - gchar *statusBarUpdate; - gint64 uplimitraw, downlimitraw; + gchar *speedText, *infoText; + gint64 uplimitraw, downlimitraw, freeSpaceRaw; gchar downRateTotalString[32], upRateTotalString[32]; - gchar uplimit[64], downlimit[64]; + gchar uplimit[64], downlimit[64], freeSpace[64]; priv = TRG_STATUS_BAR_GET_PRIVATE(sb); session = trg_client_get_session(client); - /* The session should always exist otherwise this function wouldn't be called */ + // The session should always exist otherwise this function wouldn't be called downlimitraw = json_object_get_boolean_member(session, SGET_SPEED_LIMIT_DOWN_ENABLED) ? @@ -122,19 +133,34 @@ void trg_status_bar_update(TrgStatusBar * sb, downlimitstring); } - statusBarUpdate = + speedText = g_strdup_printf(_("Down: %s%s, Up: %s%s"), downRateTotalString, + downlimitraw >= 0 ? downlimit : "", upRateTotalString, + uplimitraw >= 0 ? uplimit : ""); + + infoText = g_strdup_printf (ngettext - ("%d torrent .. Down %s%s, Up %s%s .. %d seeding, %d downloading, %d paused", - "%d torrents .. Down %s%s, Up %s%s .. %d seeding, %d downloading, %d paused", - stats->count), stats->count, downRateTotalString, - downlimitraw >= 0 ? downlimit : "", upRateTotalString, - uplimitraw >= 0 ? uplimit : "", stats->seeding, stats->down, + ("%d torrent: %d seeding, %d downloading, %d paused", + "%d torrents: %d seeding, %d downloading, %d paused", + stats->count), stats->count, stats->seeding, stats->down, stats->paused); - gtk_statusbar_pop(GTK_STATUSBAR(sb), priv->countSpeedsCtx); - gtk_statusbar_push(GTK_STATUSBAR(sb), - priv->countSpeedsCtx, statusBarUpdate); - g_free(statusBarUpdate); + + 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 4f7212e..a122dcb 100644 --- a/src/trg-status-bar.h +++ b/src/trg-status-bar.h @@ -17,7 +17,6 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ - #ifndef TRG_STATUS_BAR_H_ #define TRG_STATUS_BAR_H_ @@ -39,11 +38,11 @@ G_BEGIN_DECLS #define TRG_STATUS_BAR_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), TRG_TYPE_STATUS_BAR, TrgStatusBarClass)) typedef struct { - GtkStatusbar parent; + GtkHBox parent; } TrgStatusBar; typedef struct { - GtkStatusbarClass parent_class; + GtkHBoxClass parent_class; } TrgStatusBarClass; GType trg_status_bar_get_type(void); @@ -57,5 +56,6 @@ G_END_DECLS void trg_status_bar_connect(TrgStatusBar * sb, JsonObject * session); void trg_status_bar_push_connection_msg(TrgStatusBar * sb, const gchar * msg); +void trg_status_bar_reset(TrgStatusBar *sb); #endif /* TRG_STATUS_BAR_H_ */ |