]> granicus.if.org Git - transmission/commitdiff
(gtk) rough draft of the preferences dialog's "Remote Access" tab: enable/disable...
authorCharles Kerr <charles@transmissionbt.com>
Mon, 2 Jun 2008 21:02:38 +0000 (21:02 +0000)
committerCharles Kerr <charles@transmissionbt.com>
Mon, 2 Jun 2008 21:02:38 +0000 (21:02 +0000)
gtk/makemeta-ui.c
gtk/tr-prefs.c
gtk/tr-prefs.h

index d1f6a13c2f097e40b6ea8bf262065e36f3803088..2350a1dd16ef5baee7517999164aa2567c60ad0d 100644 (file)
@@ -98,7 +98,7 @@ refresh_cb ( gpointer user_data )
         switch( ui->builder->result )
         {
             case TR_MAKEMETA_OK:
-                txt = g_strdup( _( "Torrent created" ) );
+                txt = g_strdup( _( "Torrent created!" ) );
                 break;
 
             case TR_MAKEMETA_URL:
index 0e436958d56de9eaf31539cfe8f44c95b3d05638..4ba20a9092c91e5aded7e1c236849e5521513ddc 100644 (file)
@@ -31,6 +31,8 @@
 void
 tr_prefs_init_global( void )
 {
+    int i;
+    char pw[12];
     const char * str;
 
     cf_check_older_configs( );
@@ -96,6 +98,13 @@ tr_prefs_init_global( void )
     pref_int_set_default    ( PREF_KEY_RPC_PORT, TR_DEFAULT_RPC_PORT );
     pref_string_set_default ( PREF_KEY_RPC_ACL, TR_DEFAULT_RPC_ACL );
 
+    for( i=0; i<8; ++i )
+        pw[i] = 'a' + tr_rand(26);
+    pw[8] = '\0';
+    pref_string_set_default( PREF_KEY_RPC_PASSWORD, pw );
+    pref_flag_set_default  ( PREF_KEY_RPC_PASSWORD_ENABLED, FALSE );
+
+
     pref_save( NULL );
 }
 
@@ -157,6 +166,26 @@ new_spin_button( const char * key, gpointer core, int low, int high, int step )
     return w;
 }
 
+static void
+entry_changed_cb( GtkEntry * w, gpointer core )
+{
+    const char * key = g_object_get_data( G_OBJECT( w ), PREF_KEY );
+    const char * value = gtk_entry_get_text( w );
+    tr_core_set_pref( TR_CORE( core ), key, value );
+}
+
+static GtkWidget*
+new_entry( const char * key, gpointer core )
+{
+    GtkWidget * w = gtk_entry_new( );
+    char * value = pref_string_get( key );
+    gtk_entry_set_text( GTK_ENTRY( w ), value );
+    g_object_set_data_full( G_OBJECT(w), PREF_KEY, g_strdup(key), g_free );
+    g_signal_connect( w, "changed", G_CALLBACK(entry_changed_cb), core );
+    g_free( value );
+    return w;
+}
+
 static void
 chosen_cb( GtkFileChooser * w, gpointer core )
 {
@@ -186,6 +215,13 @@ target_cb( GtkWidget * tb, gpointer target )
     gtk_widget_set_sensitive( GTK_WIDGET(target), b );
 }
 
+static void
+toggle_sets_sensitivity( GtkWidget * t, GtkWidget * w)
+{
+    target_cb( t, w );
+    g_signal_connect( t, "toggled", G_CALLBACK( target_cb ), w );
+}
+
 struct test_port_data
 {
     GtkWidget * label;
@@ -529,6 +565,55 @@ desktopPage( GObject * core )
     return t;
 }
 
+static GtkWidget*
+remotePage( GObject * core )
+{
+    const char  * s;
+    int row = 0;
+    GtkWidget * t;
+    GtkWidget * w;
+    GtkWidget * w2;
+    GtkWidget * enabled_toggle;
+    const gboolean rpc_enabled = pref_flag_get( PREF_KEY_RPC_ENABLED );
+    const gboolean pw_enabled = pref_flag_get( PREF_KEY_RPC_PASSWORD_ENABLED );
+
+    t = hig_workarea_create( );
+
+    hig_workarea_add_section_title( t, &row, _( "Remote Access" ) );
+
+        /* "enabled" checkbutton */
+        s = _( "_Allow requests from transmission-remote, Clutch, etc." );
+        w = new_check_button( s, PREF_KEY_RPC_ENABLED, core );
+        hig_workarea_add_wide_control( t, &row, w );
+        enabled_toggle = w;
+
+        /* port */
+        w = new_spin_button( PREF_KEY_RPC_PORT, core, 0, 65535, 1 );
+        toggle_sets_sensitivity( enabled_toggle, w );
+        w = hig_workarea_add_row( t, &row, _( "Listen for requests on _port:" ), w, NULL );
+        toggle_sets_sensitivity( enabled_toggle, w );
+
+        /* password protection */
+        s = _( "Require _password:" );
+        w = new_check_button( s, PREF_KEY_RPC_PASSWORD_ENABLED, core );
+        toggle_sets_sensitivity( enabled_toggle, w );
+        w2 = new_entry( PREF_KEY_RPC_PASSWORD, core );
+        gtk_widget_set_sensitive( GTK_WIDGET( w2 ), rpc_enabled && pw_enabled );
+        g_signal_connect( w, "toggled", G_CALLBACK( target_cb ), w2 );
+        g_signal_connect( enabled_toggle, "toggled", G_CALLBACK( target_cb ), w );
+        hig_workarea_add_row_w( t, &row, w, w2, NULL );
+
+        /* access control list */
+        s = _( "Access control list:" );
+        w = new_entry( PREF_KEY_RPC_ACL, core );
+        toggle_sets_sensitivity( enabled_toggle, w );
+        w = hig_workarea_add_row( t, &row, s, w, NULL );
+        toggle_sets_sensitivity( enabled_toggle, w );
+
+    hig_workarea_finish( t, &row );
+    return t;
+}
+
 static GtkWidget*
 networkPage( GObject * core, gpointer alive )
 {
@@ -572,13 +657,6 @@ networkPage( GObject * core, gpointer alive )
         g_object_set_data( G_OBJECT(l), "handle", tr_core_handle( TR_CORE( core ) ) );
         testing_port_cb( NULL, l );
 
-        s = _( "Listen for _RPC requests on port:" );
-        w = new_check_button( s, PREF_KEY_RPC_ENABLED, core );
-        w2 = new_spin_button( PREF_KEY_RPC_PORT, core, 0, 65535, 1 );
-        gtk_widget_set_sensitive( GTK_WIDGET(w2), pref_flag_get( PREF_KEY_RPC_ENABLED ) );
-        g_signal_connect( w, "toggled", G_CALLBACK(target_cb), w2 );
-        hig_workarea_add_row_w( t, &row, w, w2, NULL );
-        
         s = _("Use port _forwarding from my router" );
         w = new_check_button( s, PREF_KEY_NAT, core );
         hig_workarea_add_wide_control( t, &row, w );
@@ -625,6 +703,9 @@ tr_prefs_dialog_new( GObject * core, GtkWindow * parent )
     gtk_notebook_append_page( GTK_NOTEBOOK( n ),
                               desktopPage( core ),
                               gtk_label_new (_("Desktop")) );
+    gtk_notebook_append_page( GTK_NOTEBOOK( n ),
+                              remotePage( core ),
+                              gtk_label_new (_("Remote")) );
 
     g_signal_connect( d, "response", G_CALLBACK(response_cb), core );
     gtk_box_pack_start_defaults( GTK_BOX(GTK_DIALOG(d)->vbox), n );
index d166d33bb7b454f69cf126c2cb94b0a4bab78aa0..d4b517d16da112440688c4ea794063355b2d286b 100644 (file)
@@ -57,6 +57,8 @@ GtkWidget * tr_prefs_dialog_new( GObject * core, GtkWindow * parent );
 #define PREF_KEY_RPC_PORT               "rpc-port"
 #define PREF_KEY_RPC_ENABLED            "rpc-enabled"
 #define PREF_KEY_RPC_ACL                "rpc-access-control-list"
+#define PREF_KEY_RPC_PASSWORD_ENABLED   "rpc-password-required"
+#define PREF_KEY_RPC_PASSWORD           "rpc-password"
 
 
 void tr_prefs_init_global( void );