diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/protocol-constants.h | 1 | ||||
-rw-r--r-- | src/requests.c | 1 | ||||
-rw-r--r-- | src/torrent.c | 5 | ||||
-rw-r--r-- | src/torrent.h | 1 | ||||
-rw-r--r-- | src/transmission-remote-gtk.pod | 4 | ||||
-rw-r--r-- | src/trg-about-window.c | 4 | ||||
-rw-r--r-- | src/trg-file-parser.c | 2 | ||||
-rw-r--r-- | src/trg-files-tree-view.c | 23 | ||||
-rw-r--r-- | src/trg-gtk-app.c | 2 | ||||
-rw-r--r-- | src/trg-json-widgets.c | 52 | ||||
-rw-r--r-- | src/trg-json-widgets.h | 16 | ||||
-rw-r--r-- | src/trg-main-window.c | 23 | ||||
-rw-r--r-- | src/trg-menu-bar.c | 15 | ||||
-rw-r--r-- | src/trg-remote-prefs-dialog.c | 130 | ||||
-rw-r--r-- | src/trg-torrent-props-dialog.c | 24 |
15 files changed, 239 insertions, 64 deletions
diff --git a/src/protocol-constants.h b/src/protocol-constants.h index 8fffb00..18c6d28 100644 --- a/src/protocol-constants.h +++ b/src/protocol-constants.h @@ -70,6 +70,7 @@ #define FIELD_LEFTUNTILDONE "leftUntilDone" #define FIELD_ISFINISHED "isFinished" #define FIELD_ISPRIVATE "isPrivate" +#define FIELD_MAGNETLINK "magnetLink" #define FIELD_ERROR "error" #define FIELD_ERROR_STRING "errorString" #define FIELD_BANDWIDTH_PRIORITY "bandwidthPriority" diff --git a/src/requests.c b/src/requests.c index 4e044ab..77466f9 100644 --- a/src/requests.c +++ b/src/requests.c @@ -212,6 +212,7 @@ JsonNode *torrent_get(gint64 id) json_array_add_string_element(fields, FIELD_SEED_RATIO_MODE); json_array_add_string_element(fields, FIELD_PEER_LIMIT); json_array_add_string_element(fields, FIELD_ACTIVITY_DATE); + json_array_add_string_element(fields, FIELD_MAGNETLINK); json_array_add_string_element(fields, FIELD_ERROR); json_array_add_string_element(fields, FIELD_ERROR_STRING); json_array_add_string_element(fields, FIELD_WANTED); diff --git a/src/torrent.c b/src/torrent.c index e5577ee..8e5422f 100644 --- a/src/torrent.c +++ b/src/torrent.c @@ -108,6 +108,11 @@ gint64 torrent_get_bandwidth_priority(JsonObject * t) return json_object_get_int_member(t, FIELD_BANDWIDTH_PRIORITY); } +const gchar *torrent_get_magnetlink(JsonObject * t) +{ + return json_object_get_string_member(t, FIELD_MAGNETLINK); +} + gint64 torrent_get_upload_limit(JsonObject * t) { return json_object_get_int_member(t, FIELD_UPLOAD_LIMIT); diff --git a/src/torrent.h b/src/torrent.h index c837046..481841d 100644 --- a/src/torrent.h +++ b/src/torrent.h @@ -87,6 +87,7 @@ gboolean torrent_get_is_private(JsonObject * t); gboolean torrent_get_honors_session_limits(JsonObject * t); gint64 torrent_get_bandwidth_priority(JsonObject * t); gint64 torrent_get_upload_limit(JsonObject * t); +const gchar *torrent_get_magnetlink(JsonObject * t); gint64 torrent_get_added_date(JsonObject * t); gint64 torrent_get_done_date(JsonObject * t); gboolean torrent_get_upload_limited(JsonObject * t); diff --git a/src/transmission-remote-gtk.pod b/src/transmission-remote-gtk.pod index de7c575..34b39a3 100644 --- a/src/transmission-remote-gtk.pod +++ b/src/transmission-remote-gtk.pod @@ -40,7 +40,7 @@ Written by Alan Fitton. =head1 BUGS -Please see L<http://code.google.com/p/transmission-remote-gtk/issues> +Please see L<https://github.com/transmission-remote-gtk/transmission-remote-gtk/issues> =head1 COPYRIGHT @@ -51,7 +51,7 @@ permitted by law. =head1 SEE ALSO -C<transmission-daemon(1)>, C<transmission-gtk(1)>, the project website C<http://code.google.com/p/transmission-remote-gtk/> +C<transmission-daemon(1)>, C<transmission-gtk(1)>, the project website C<https://github.com/transmission-remote-gtk/transmission-remote-gtk> =cut diff --git a/src/trg-about-window.c b/src/trg-about-window.c index c14482b..89e2c11 100644 --- a/src/trg-about-window.c +++ b/src/trg-about-window.c @@ -59,9 +59,9 @@ GtkWidget *trg_about_window_new(GtkWindow * parent) ("A remote client to transmission-daemon.")); gtk_about_dialog_set_website(GTK_ABOUT_DIALOG(dialog), - "http://code.google.com/p/transmission-remote-gtk/"); + "https://github.com/transmission-remote-gtk/transmission-remote-gtk"); gtk_about_dialog_set_website_label(GTK_ABOUT_DIALOG(dialog), - "http://code.google.com/p/transmission-remote-gtk/"); + "https://github.com/transmission-remote-gtk/transmission-remote-gtk"); gtk_about_dialog_set_authors(GTK_ABOUT_DIALOG(dialog), trgAuthors); /*gtk_about_dialog_set_documenters(GTK_ABOUT_DIALOG(dialog), documenters); */ diff --git a/src/trg-file-parser.c b/src/trg-file-parser.c index 2200ec6..bd27939 100644 --- a/src/trg-file-parser.c +++ b/src/trg-file-parser.c @@ -88,7 +88,7 @@ static trg_files_tree_node *trg_file_parser_node_insert(trg_files_tree_node target_node->length = (gint64) file_length_node->val.i; while (lastIter) { - lastIter->length = target_node->length; + lastIter->length += target_node->length; lastIter = lastIter->parent; } } diff --git a/src/trg-files-tree-view.c b/src/trg-files-tree-view.c index 70147f7..afe6073 100644 --- a/src/trg-files-tree-view.c +++ b/src/trg-files-tree-view.c @@ -180,6 +180,24 @@ view_onButtonPressed(GtkWidget * treeview, return handled; } +static gboolean +search_func (GtkTreeModel *model, gint column, + const gchar *key, GtkTreeIter *iter, + gpointer search_data) +{ + gchar *iter_string = NULL; + gchar *lowercase = NULL; + gboolean result = TRUE; + gtk_tree_model_get(model, iter, column, &iter_string, -1); + if (iter_string != NULL) { + lowercase = g_utf8_strdown(iter_string, -1); + result = g_strrstr(lowercase, key) == NULL; + } + g_free(lowercase); + g_free(iter_string); + return result; +} + static void trg_files_tree_view_init(TrgFilesTreeView * self) { TrgTreeView *ttv = TRG_TREE_VIEW(self); @@ -200,6 +218,11 @@ static void trg_files_tree_view_init(TrgFilesTreeView * self) gtk_tree_view_set_search_column(GTK_TREE_VIEW(self), FILESCOL_NAME); + gtk_tree_view_set_search_equal_func(GTK_TREE_VIEW(self), + (GtkTreeViewSearchEqualFunc) search_func, + gtk_tree_view_get_model(GTK_TREE_VIEW(self)), + NULL); + g_signal_connect(self, "button-press-event", G_CALLBACK(view_onButtonPressed), NULL); g_signal_connect(self, "popup-menu", diff --git a/src/trg-gtk-app.c b/src/trg-gtk-app.c index 7865767..8f56d82 100644 --- a/src/trg-gtk-app.c +++ b/src/trg-gtk-app.c @@ -208,7 +208,7 @@ static void trg_gtk_app_init(TrgGtkApp * self) TrgGtkApp *trg_gtk_app_new(TrgClient * client) { return g_object_new(TRG_TYPE_GTK_APP, - "application-id", "uk.org.eth0.trg", + "application-id", "io.github.TransmissionRemoteGtk", "flags", G_APPLICATION_HANDLES_COMMAND_LINE, "trg-client", client, NULL); } diff --git a/src/trg-json-widgets.c b/src/trg-json-widgets.c index 79299c6..99ccc44 100644 --- a/src/trg-json-widgets.c +++ b/src/trg-json-widgets.c @@ -121,16 +121,49 @@ GtkWidget *trg_json_widget_entry_new(GList ** wl, JsonObject * obj, return w; } -GtkWidget *trg_json_widget_spin_new(GList ** wl, JsonObject * obj, +GtkWidget *trg_json_widget_spin_int_new(GList ** wl, JsonObject * obj, + const gchar * key, + GtkWidget * toggleDep, gint min, + gint max, gint step) +{ + GtkWidget *w = gtk_spin_button_new_with_range((gdouble)min, + (gdouble)max, + (gdouble)step); + + gtk_spin_button_set_digits(GTK_SPIN_BUTTON(w), 0); + + trg_json_widget_desc *wd = g_new0(trg_json_widget_desc, 1); + + wd->saveFunc = trg_json_widget_spin_int_save; + wd->key = g_strdup(key); + wd->widget = w; + + if (toggleDep) { + gtk_widget_set_sensitive(w, + gtk_toggle_button_get_active + (GTK_TOGGLE_BUTTON(toggleDep))); + g_signal_connect(G_OBJECT(toggleDep), "toggled", + G_CALLBACK(toggle_active_arg_is_sensitive), w); + } + + gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), + (double)json_object_get_int_member(obj, key)); + + *wl = g_list_append(*wl, wd); + + return w; +} + +GtkWidget *trg_json_widget_spin_double_new(GList ** wl, JsonObject * obj, const gchar * key, GtkWidget * toggleDep, gdouble min, gdouble max, gdouble step) { GtkWidget *w = gtk_spin_button_new_with_range(min, max, step); + trg_json_widget_desc *wd = g_new0(trg_json_widget_desc, 1); - JsonNode *node = json_object_get_member(obj, key); - wd->saveFunc = trg_json_widget_spin_save_double; + wd->saveFunc = trg_json_widget_spin_double_save; wd->key = g_strdup(key); wd->widget = w; @@ -143,7 +176,7 @@ GtkWidget *trg_json_widget_spin_new(GList ** wl, JsonObject * obj, } gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), - json_node_really_get_double(node)); + json_object_get_double_member(obj, key)); *wl = g_list_append(*wl, wd); @@ -168,7 +201,16 @@ trg_json_widget_entry_save(GtkWidget * widget, JsonObject * obj, } void -trg_json_widget_spin_save_double(GtkWidget * widget, JsonObject * obj, +trg_json_widget_spin_int_save(GtkWidget * widget, JsonObject * obj, + gchar * key) +{ + json_object_set_int_member(obj, key, + gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON + (widget))); +} + +void +trg_json_widget_spin_double_save(GtkWidget * widget, JsonObject * obj, gchar * key) { json_object_set_double_member(obj, key, diff --git a/src/trg-json-widgets.h b/src/trg-json-widgets.h index a7dde5b..6f79f7b 100644 --- a/src/trg-json-widgets.h +++ b/src/trg-json-widgets.h @@ -38,17 +38,21 @@ GtkWidget *trg_json_widget_check_new(GList ** wl, JsonObject * obj, GtkWidget *trg_json_widget_entry_new(GList ** wl, JsonObject * obj, const gchar * key, GtkWidget * toggleDep); -GtkWidget *trg_json_widget_spin_new(GList ** wl, JsonObject * obj, - const gchar * key, - GtkWidget * toggleDep, gdouble min, - gdouble max, gdouble step); +GtkWidget *trg_json_widget_spin_int_new(GList ** wl, JsonObject * obj, + const gchar * key, + GtkWidget * toggleDep, gint min, + gint max, gint step); +GtkWidget *trg_json_widget_spin_double_new(GList ** wl, JsonObject * obj, + const gchar * key, + GtkWidget * toggleDep, gdouble min, + gdouble max, gdouble step); void trg_json_widget_check_save(GtkWidget * widget, JsonObject * obj, gchar * key); void trg_json_widget_entry_save(GtkWidget * widget, JsonObject * obj, gchar * key); -void trg_json_widget_spin_save_int(GtkWidget * widget, JsonObject * obj, +void trg_json_widget_spin_int_save(GtkWidget * widget, JsonObject * obj, gchar * key); -void trg_json_widget_spin_save_double(GtkWidget * widget, JsonObject * obj, +void trg_json_widget_spin_double_save(GtkWidget * widget, JsonObject * obj, gchar * key); void trg_json_widget_desc_free(trg_json_widget_desc * wd); diff --git a/src/trg-main-window.c b/src/trg-main-window.c index d85a364..5729254 100644 --- a/src/trg-main-window.c +++ b/src/trg-main-window.c @@ -449,6 +449,20 @@ static void open_props_cb(GtkWidget * w G_GNUC_UNUSED, TrgMainWindow * win) gtk_widget_show_all(GTK_WIDGET(dialog)); } +static void copy_magnetlink_cb(GtkWidget * w G_GNUC_UNUSED, TrgMainWindow * win) +{ + TrgMainWindowPrivate *priv = trg_main_window_get_instance_private(win); + JsonObject *json = NULL; + GtkClipboard *clip = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); + + if (priv->selectedTorrentId < 0) + return; + + if(get_torrent_data(trg_client_get_torrent_table(priv->client), + priv->selectedTorrentId, &json, NULL)) + gtk_clipboard_set_text(clip, torrent_get_magnetlink(json), -1); +} + static void torrent_tv_onRowActivated(GtkTreeView * treeview, GtkTreePath * path G_GNUC_UNUSED, @@ -1785,7 +1799,7 @@ static TrgMenuBar *trg_main_window_menu_bar_new(TrgMainWindow * win) #ifdef HAVE_RSS *b_view_rss, #endif - *b_start_now; + *b_start_now, *b_copy_magnetlink; TrgMenuBar *menuBar; GtkAccelGroup *accel_group; @@ -1818,7 +1832,8 @@ static TrgMenuBar *trg_main_window_menu_bar_new(TrgMainWindow * win) #endif "up-queue", &b_up_queue, "down-queue", &b_down_queue, "top-queue", &b_top_queue, "bottom-queue", - &b_bottom_queue, "start-now", &b_start_now, NULL); + &b_bottom_queue, "start-now", &b_start_now, + "copymagnet-button", &b_copy_magnetlink, NULL); g_signal_connect(b_disconnect, "activate", G_CALLBACK(disconnect_cb), win); @@ -1871,6 +1886,7 @@ static TrgMenuBar *trg_main_window_menu_bar_new(TrgMainWindow * win) G_CALLBACK(trg_main_window_toggle_graph_cb), win); #endif g_signal_connect(b_props, "activate", G_CALLBACK(open_props_cb), win); + g_signal_connect(b_copy_magnetlink, "activate", G_CALLBACK(copy_magnetlink_cb), win); g_signal_connect(b_quit, "activate", G_CALLBACK(quit_cb), win); gtk_window_add_accel_group(GTK_WINDOW(win), accel_group); @@ -2224,6 +2240,9 @@ trg_torrent_tv_view_menu(GtkWidget * treeview, trg_imagemenuitem_new(GTK_MENU_SHELL(menu), _("Properties"), GTK_STOCK_PROPERTIES, TRUE, G_CALLBACK(open_props_cb), win); + trg_imagemenuitem_new(GTK_MENU_SHELL(menu), _("Copy Magnet Link"), + GTK_STOCK_COPY, TRUE, + G_CALLBACK(copy_magnetlink_cb), win); trg_imagemenuitem_new(GTK_MENU_SHELL(menu), _("Resume"), GTK_STOCK_MEDIA_PLAY, TRUE, G_CALLBACK(resume_cb), win); diff --git a/src/trg-menu-bar.c b/src/trg-menu-bar.c index faf3548..624f86f 100644 --- a/src/trg-menu-bar.c +++ b/src/trg-menu-bar.c @@ -48,6 +48,7 @@ enum { PROP_VERIFY_BUTTON, PROP_REANNOUNCE_BUTTON, PROP_PROPS_BUTTON, + PROP_COPYMAGNET_BUTTON, PROP_MOVE_BUTTON, PROP_REMOTE_PREFS_BUTTON, PROP_LOCAL_PREFS_BUTTON, @@ -99,6 +100,7 @@ struct _TrgMenuBarPrivate { GtkWidget *mb_verify; GtkWidget *mb_reannounce; GtkWidget *mb_props; + GtkWidget *mb_copy_magnetlink; GtkWidget *mb_local_prefs; GtkWidget *mb_remote_prefs; GtkWidget *mb_view_states; @@ -165,6 +167,7 @@ trg_menu_bar_torrent_actions_sensitive(TrgMenuBar * mb, gboolean sensitive) TrgMenuBarPrivate *priv = TRG_MENU_BAR_GET_PRIVATE(mb); gtk_widget_set_sensitive(priv->mb_props, sensitive); + gtk_widget_set_sensitive(priv->mb_copy_magnetlink, sensitive); gtk_widget_set_sensitive(priv->mb_remove, sensitive); gtk_widget_set_sensitive(priv->mb_delete, sensitive); gtk_widget_set_sensitive(priv->mb_resume, sensitive); @@ -265,6 +268,9 @@ trg_menu_bar_get_property(GObject * object, guint property_id, case PROP_PROPS_BUTTON: g_value_set_object(value, priv->mb_props); break; + case PROP_COPYMAGNET_BUTTON: + g_value_set_object(value, priv->mb_copy_magnetlink); + break; case PROP_REMOTE_PREFS_BUTTON: g_value_set_object(value, priv->mb_remote_prefs); break; @@ -693,6 +699,8 @@ static GtkWidget *trg_menu_bar_file_file_menu_new(TrgMenuBar * menu) priv->mb_quit = trg_menu_bar_item_new(GTK_MENU_SHELL(fileMenu), _("_Quit"), GTK_STOCK_QUIT, TRUE); + trg_menu_bar_accel_add(menu, priv->mb_quit, GDK_q, + GDK_CONTROL_MASK); gtk_menu_item_set_submenu(GTK_MENU_ITEM(file), fileMenu); @@ -713,6 +721,11 @@ static GtkWidget *trg_menu_bar_torrent_menu_new(TrgMenuBar * menu) FALSE); trg_menu_bar_accel_add(menu, priv->mb_props, GDK_i, GDK_CONTROL_MASK); + priv->mb_copy_magnetlink = + trg_menu_bar_item_new(GTK_MENU_SHELL(torrentMenu), _("_Copy Magnet Link"), + GTK_STOCK_COPY, FALSE); + trg_menu_bar_accel_add(menu, priv->mb_copy_magnetlink, GDK_c, GDK_CONTROL_MASK); + priv->mb_resume = trg_menu_bar_item_new(GTK_MENU_SHELL(torrentMenu), _("_Resume"), GTK_STOCK_MEDIA_PLAY, FALSE); @@ -904,6 +917,8 @@ static void trg_menu_bar_class_init(TrgMenuBarClass * klass) "pause-button", "Pause Button"); trg_menu_bar_install_widget_prop(object_class, PROP_PROPS_BUTTON, "props-button", "Props Button"); + trg_menu_bar_install_widget_prop(object_class, PROP_COPYMAGNET_BUTTON, + "copymagnet-button", "Copy-magnet Button"); trg_menu_bar_install_widget_prop(object_class, PROP_ABOUT_BUTTON, "about-button", "About Button"); trg_menu_bar_install_widget_prop(object_class, PROP_VIEW_STATS_BUTTON, diff --git a/src/trg-remote-prefs-dialog.c b/src/trg-remote-prefs-dialog.c index 3fcd910..a4747ea 100644 --- a/src/trg-remote-prefs-dialog.c +++ b/src/trg-remote-prefs-dialog.c @@ -26,6 +26,9 @@ #include <glib/gi18n.h> #include <gtk/gtk.h> #include <json-glib/json-glib.h> +#ifdef ENABLE_NL_LANGINFO +#include <langinfo.h> +#endif #include "trg-main-window.h" #include "trg-remote-prefs-dialog.h" @@ -180,13 +183,13 @@ trg_rprefs_time_widget_savefunc(GtkWidget * w, JsonObject * obj, { GtkWidget *hourSpin = g_object_get_data(G_OBJECT(w), "hours-spin"); GtkWidget *minutesSpin = g_object_get_data(G_OBJECT(w), "mins-spin"); - gdouble hoursValue = - gtk_spin_button_get_value(GTK_SPIN_BUTTON(hourSpin)); - gdouble minutesValue = - gtk_spin_button_get_value(GTK_SPIN_BUTTON(minutesSpin)); + gint hoursValue = + gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(hourSpin)); + gint minutesValue = + gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(minutesSpin)); json_object_set_int_member(obj, key, - (gint64) ((hoursValue * 60.0) + + (gint64) ((hoursValue * 60) + minutesValue)); } @@ -279,8 +282,8 @@ static GtkWidget *trg_rprefs_alt_speed_spin_new(GList ** wl, GtkWidget * alt_check, GtkWidget * alt_time_check) { - GtkWidget *w = trg_json_widget_spin_new(wl, obj, key, - NULL, 0, INT_MAX, 5); + GtkWidget *w = trg_json_widget_spin_int_new(wl, obj, key, + NULL, 0, INT_MAX, 5); gtk_widget_set_sensitive(w, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (alt_check)) @@ -296,6 +299,63 @@ static GtkWidget *trg_rprefs_alt_speed_spin_new(GList ** wl, return w; } +static void +trg_rprefs_alt_days_savefunc(GtkWidget * grid, JsonObject * obj, + gchar * key) +{ + guint64 days = 0; + + for(gint i = 0, x = 1; i < 7; i++, x<<=1) { + GtkWidget *w = gtk_grid_get_child_at (GTK_GRID(grid), i, 0); + if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w))) + days += x; + } + + json_object_set_int_member(obj, key, days); +} + +static GtkWidget *trg_rprefs_alt_days(GList ** wl, + JsonObject * Obj, + const gchar * key, + GtkWidget *alt_time_check) +{ + gchar *abdays_fallback[] = {_("Sun"), _("Mon"), _("Tue"), _("Wed"), _("Thu"), _("Fri"), _("Sat")}; +#ifdef ENABLE_NL_LANGINFO + nl_item abdays[] = {ABDAY_1, ABDAY_2, ABDAY_3, ABDAY_4, ABDAY_5, ABDAY_6, ABDAY_7}; +#endif + GtkWidget *grid = gtk_grid_new(); + gtk_grid_set_column_homogeneous (GTK_GRID(grid), TRUE); + g_signal_connect(G_OBJECT(alt_time_check), "toggled", + G_CALLBACK(toggle_active_arg_is_sensitive), grid); + + guint64 days = json_object_get_int_member(Obj, key); + + for(gint i = 0, x = 1; i < 7; i++, x<<=1) { +#ifdef ENABLE_NL_LANGINFO + gchar *utf8 = g_convert_with_fallback(nl_langinfo(abdays[i]), -1, "utf-8", + nl_langinfo(CODESET), NULL, NULL, + NULL, NULL); + GtkWidget *w = gtk_check_button_new_with_label (utf8 ? utf8 : abdays_fallback[i]); + g_free(utf8); +#else + GtkWidget *w = gtk_check_button_new_with_label (abdays_fallback[i]); +#endif + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w), (days & x) == x); + gtk_grid_attach(GTK_GRID(grid), w, i, 0, 1, 1); + } + + gtk_widget_set_sensitive(grid, + gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(alt_time_check))); + + trg_json_widget_desc *wd = g_new0(trg_json_widget_desc, 1); + wd->key = g_strdup(key); + wd->widget = grid; + wd->saveFunc = trg_rprefs_alt_days_savefunc; + *wl = g_list_append(*wl, wd); + + return grid; +} + static GtkWidget *trg_rprefs_bandwidthPage(TrgRemotePrefsDialog * win, JsonObject * json) { @@ -311,15 +371,15 @@ static GtkWidget *trg_rprefs_bandwidthPage(TrgRemotePrefsDialog * win, tb = trg_json_widget_check_new(&priv->widgets, json, SGET_SPEED_LIMIT_DOWN_ENABLED, _("Down Limit (KiB/s)"), NULL); - w = trg_json_widget_spin_new(&priv->widgets, json, - SGET_SPEED_LIMIT_DOWN, tb, 0, INT_MAX, 5); + w = trg_json_widget_spin_int_new(&priv->widgets, json, + SGET_SPEED_LIMIT_DOWN, tb, 0, INT_MAX, 5); hig_workarea_add_row_w(t, &row, tb, w, NULL); tb = trg_json_widget_check_new(&priv->widgets, json, SGET_SPEED_LIMIT_UP_ENABLED, _("Up Limit (KiB/s)"), NULL); - w = trg_json_widget_spin_new(&priv->widgets, json, SGET_SPEED_LIMIT_UP, - tb, 0, INT_MAX, 5); + w = trg_json_widget_spin_int_new(&priv->widgets, json, SGET_SPEED_LIMIT_UP, + tb, 0, INT_MAX, 5); hig_workarea_add_row_w(t, &row, tb, w, NULL); hig_workarea_add_section_title(t, &row, _("Alternate limits")); @@ -338,6 +398,10 @@ static GtkWidget *trg_rprefs_bandwidthPage(TrgRemotePrefsDialog * win, w = trg_rprefs_time_begin_end_new(&priv->widgets, json, tb); hig_workarea_add_row_w(t, &row, tb, w, NULL); + w = trg_rprefs_alt_days(&priv->widgets, json, + SGET_ALT_SPEED_TIME_DAY, priv->alt_time_check); + hig_workarea_add_row(t, &row, _("Alternate days"), w, NULL); + w = trg_rprefs_alt_speed_spin_new(&priv->widgets, json, SGET_ALT_SPEED_DOWN, priv->alt_check, tb); @@ -366,9 +430,9 @@ static GtkWidget *trg_rprefs_limitsPage(TrgRemotePrefsDialog * win, tb = trg_json_widget_check_new(&priv->widgets, json, SGET_SEED_RATIO_LIMITED, _("Seed ratio limit"), NULL); - w = trg_json_widget_spin_new(&priv->widgets, json, - SGET_SEED_RATIO_LIMIT, tb, 0, INT_MAX, - 0.1); + w = trg_json_widget_spin_double_new(&priv->widgets, json, + SGET_SEED_RATIO_LIMIT, tb, + 0, INT_MAX, 0.1); hig_workarea_add_row_w(t, &row, tb, w, NULL); if (json_object_has_member(json, SGET_DOWNLOAD_QUEUE_ENABLED)) { @@ -377,39 +441,39 @@ static GtkWidget *trg_rprefs_limitsPage(TrgRemotePrefsDialog * win, tb = trg_json_widget_check_new(&priv->widgets, json, SGET_DOWNLOAD_QUEUE_ENABLED, _("Download queue size"), NULL); - w = trg_json_widget_spin_new(&priv->widgets, json, - SGET_DOWNLOAD_QUEUE_SIZE, tb, 0, - INT_MAX, 1); + w = trg_json_widget_spin_int_new(&priv->widgets, json, + SGET_DOWNLOAD_QUEUE_SIZE, tb, 0, + INT_MAX, 1); hig_workarea_add_row_w(t, &row, tb, w, NULL); tb = trg_json_widget_check_new(&priv->widgets, json, SGET_SEED_QUEUE_ENABLED, _("Seed queue size"), NULL); - w = trg_json_widget_spin_new(&priv->widgets, json, - SGET_SEED_QUEUE_SIZE, tb, 0, INT_MAX, - 1); + w = trg_json_widget_spin_int_new(&priv->widgets, json, + SGET_SEED_QUEUE_SIZE, tb, 0, + INT_MAX, 1); hig_workarea_add_row_w(t, &row, tb, w, NULL); tb = trg_json_widget_check_new(&priv->widgets, json, SGET_QUEUE_STALLED_ENABLED, _("Ignore stalled (minutes)"), NULL); - w = trg_json_widget_spin_new(&priv->widgets, json, - SGET_QUEUE_STALLED_MINUTES, tb, 0, - INT_MAX, 1); + w = trg_json_widget_spin_int_new(&priv->widgets, json, + SGET_QUEUE_STALLED_MINUTES, tb, + 0, INT_MAX, 1); hig_workarea_add_row_w(t, &row, tb, w, NULL); } hig_workarea_add_section_title(t, &row, _("Peers")); - w = trg_json_widget_spin_new(&priv->widgets, json, - SGET_PEER_LIMIT_GLOBAL, NULL, 0, INT_MAX, - 5); + w = trg_json_widget_spin_int_new(&priv->widgets, json, + SGET_PEER_LIMIT_GLOBAL, NULL, 0, + INT_MAX, 5); hig_workarea_add_row(t, &row, _("Global peer limit"), w, w); - w = trg_json_widget_spin_new(&priv->widgets, json, - SGET_PEER_LIMIT_PER_TORRENT, NULL, 0, - INT_MAX, 5); + w = trg_json_widget_spin_int_new(&priv->widgets, json, + SGET_PEER_LIMIT_PER_TORRENT, NULL, + 0, INT_MAX, 5); hig_workarea_add_row(t, &row, _("Per torrent peer limit"), w, w); return t; @@ -519,8 +583,8 @@ static GtkWidget *trg_rprefs_connPage(TrgRemotePrefsDialog * win, hig_workarea_add_section_title(t, &row, _("Connections")); - w = trg_json_widget_spin_new(&priv->widgets, s, SGET_PEER_PORT, NULL, - 0, 65535, 1); + w = trg_json_widget_spin_int_new(&priv->widgets, s, SGET_PEER_PORT, + NULL, 0, 65535, 1); hig_workarea_add_row(t, &row, _("Peer port"), w, w); priv->port_test_label = gtk_label_new(_("Port test")); @@ -627,8 +691,8 @@ static GtkWidget *trg_rprefs_generalPage(TrgRemotePrefsDialog * win, cache_size_mb = session_get_cache_size_mb(s); if (cache_size_mb >= 0) { - w = trg_json_widget_spin_new(&priv->widgets, s, SGET_CACHE_SIZE_MB, - NULL, 0, INT_MAX, 1); + w = trg_json_widget_spin_int_new(&priv->widgets, s, SGET_CACHE_SIZE_MB, + NULL, 0, INT_MAX, 1); hig_workarea_add_row(t, &row, _("Cache size (MiB)"), w, w); } diff --git a/src/trg-torrent-props-dialog.c b/src/trg-torrent-props-dialog.c index ae75146..5192fda 100644 --- a/src/trg-torrent-props-dialog.c +++ b/src/trg-torrent-props-dialog.c @@ -422,9 +422,9 @@ static GtkWidget *trg_props_limits_page_new(TrgTorrentPropsDialog * win, hig_workarea_add_row(t, &row, _("Torrent priority:"), w, NULL); if (json_object_has_member(json, FIELD_QUEUE_POSITION)) { - w = trg_json_widget_spin_new(&priv->widgets, json, - FIELD_QUEUE_POSITION, NULL, 0, - INT_MAX, 1); + w = trg_json_widget_spin_int_new(&priv->widgets, json, + FIELD_QUEUE_POSITION, NULL, 0, + INT_MAX, 1); hig_workarea_add_row(t, &row, _("Queue Position:"), w, w); } @@ -432,15 +432,15 @@ static GtkWidget *trg_props_limits_page_new(TrgTorrentPropsDialog * win, FIELD_DOWNLOAD_LIMITED, _("Limit download speed (KiB/s)"), NULL); - w = trg_json_widget_spin_new(&priv->widgets, json, - FIELD_DOWNLOAD_LIMIT, tb, 0, INT_MAX, 1); + w = trg_json_widget_spin_int_new(&priv->widgets, json, + FIELD_DOWNLOAD_LIMIT, tb, 0, INT_MAX, 1); hig_workarea_add_row_w(t, &row, tb, w, NULL); tb = trg_json_widget_check_new(&priv->widgets, json, FIELD_UPLOAD_LIMITED, _("Limit upload speed (KiB/s)"), NULL); - w = trg_json_widget_spin_new(&priv->widgets, json, FIELD_UPLOAD_LIMIT, - tb, 0, INT_MAX, 1); + w = trg_json_widget_spin_int_new(&priv->widgets, json, FIELD_UPLOAD_LIMIT, + tb, 0, INT_MAX, 1); hig_workarea_add_row_w(t, &row, tb, w, NULL); hig_workarea_add_section_title(t, &row, _("Seeding")); @@ -453,9 +453,9 @@ static GtkWidget *trg_props_limits_page_new(TrgTorrentPropsDialog * win, torrent_get_seed_ratio_mode(json)); hig_workarea_add_row(t, &row, _("Seed ratio mode:"), w, NULL); - w = trg_json_widget_spin_new(&priv->widgets, json, - FIELD_SEED_RATIO_LIMIT, NULL, 0, INT_MAX, - 0.2); + w = trg_json_widget_spin_double_new(&priv->widgets, json, + FIELD_SEED_RATIO_LIMIT, NULL, 0, + INT_MAX, 0.2); seed_ratio_mode_changed_cb(priv->seedRatioMode, w); g_signal_connect(G_OBJECT(priv->seedRatioMode), "changed", G_CALLBACK(seed_ratio_mode_changed_cb), w); @@ -463,8 +463,8 @@ static GtkWidget *trg_props_limits_page_new(TrgTorrentPropsDialog * win, hig_workarea_add_section_title(t, &row, _("Peers")); - w = trg_json_widget_spin_new(&priv->widgets, json, FIELD_PEER_LIMIT, - NULL, 0, INT_MAX, 5); + w = trg_json_widget_spin_int_new(&priv->widgets, json, FIELD_PEER_LIMIT, + NULL, 0, INT_MAX, 5); hig_workarea_add_row(t, &row, _("Peer limit:"), w, w); return t; |