Update of /cvsroot/gtkpod/gtkpod/src
In directory sc8-pr-cvs2.sourceforge.net:/tmp/cvs-serv29510/src

Modified Files:
      Tag: threaded_conversion_branch
        file_convert.c file_convert.h file_itunesdb.c prefs_window.c 
Log Message:
        * src/file_convert.c
          src/file_convert.h
          src/prefs_window.c: set up preferences dialog (number of
          background threads, max. cache dir size)

          src/file_itunesdb.c: avoid mutex deadlock when trying to
          cancel delete/transfer of tracks.



Index: file_convert.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/file_convert.c,v
retrieving revision 1.5.2.2
retrieving revision 1.5.2.3
diff -u -d -r1.5.2.2 -r1.5.2.3
--- file_convert.c      20 Apr 2007 17:08:36 -0000      1.5.2.2
+++ file_convert.c      21 Apr 2007 08:54:50 -0000      1.5.2.3
@@ -662,10 +662,10 @@
 static void conversion_cancel_track (Conversion *conv, Track *track);
 static Track *conversion_timed_wait (Conversion *conv, iTunesDB *itdb, gint 
ms);
 
-static const gchar *FILE_CONVERT_CACHEDIR = "file_convert_cachedir";
-static const gchar *FILE_CONVERT_MAXDIRSIZE = "file_convert_maxdirsize";
-static const gchar *FILE_CONVERT_TEMPLATE = "file_convert_template";
-
+const gchar *FILE_CONVERT_CACHEDIR = "file_convert_cachedir";
+const gchar *FILE_CONVERT_MAXDIRSIZE = "file_convert_maxdirsize";
+const gchar *FILE_CONVERT_TEMPLATE = "file_convert_template";
+const gchar *FILE_CONVERT_MAX_THREADS_NUM = "file_convert_max_threads_num";
 
 struct _Conversion
 {
@@ -730,6 +730,7 @@
 static Conversion *conversion;
 
 
+
 /* Set up conversion infrastructure. Must only be called once. */
 void file_convert_init ()
 {
@@ -737,16 +738,11 @@
     g_return_if_fail (conversion==NULL);
 
     conversion = g_new0 (Conversion, 1);
-    conversion->max_threads_num = 2;  /* FIXME */
-    conversion->max_dirsize = 1024 * 1024 * prefs_get_int 
(FILE_CONVERT_MAXDIRSIZE);
-    if (conversion->max_dirsize == 0)
-    {   /* set default of 4 GB */
-       conversion->max_dirsize = (gint64)4 * 1024 * 1024 * 1024;
-       prefs_set_int (FILE_CONVERT_MAXDIRSIZE,
-                      conversion->max_dirsize / 1024 / 1024);
-    }
-    conversion->dirsize = CONV_DIRSIZE_INVALID;
     conversion->mutex = g_mutex_new ();
+
+    file_convert_prefs_changed ();
+
+    conversion->dirsize = CONV_DIRSIZE_INVALID;
     conversion->finished_cond = g_cond_new ();
     conversion->dirsize_cond = g_cond_new ();
     conversion->prune_cond = g_cond_new ();
@@ -784,6 +780,40 @@
 }
 
 
+/* Call this function each time the preferences have been updated */
+void file_convert_prefs_changed ()
+{
+    gdouble maxsize;
+
+    g_return_if_fail (conversion);
+
+    g_mutex_lock (conversion->mutex);
+
+    if (prefs_get_double_value (FILE_CONVERT_MAXDIRSIZE, &maxsize))
+    {
+       conversion->max_dirsize = 1024 * 1024 * 1024 * maxsize;
+    }
+    else
+    {   /* set default of 4 GB */
+       conversion->max_dirsize = (gint64)4 * 1024 * 1024 * 1024;
+       prefs_set_double (FILE_CONVERT_MAXDIRSIZE, 4);
+    }
+
+    if (conversion->max_dirsize < 0)
+    {   /* effectively disable caching */
+       conversion->max_dirsize = 0;
+    }
+
+    conversion->max_threads_num = prefs_get_int (FILE_CONVERT_MAX_THREADS_NUM);
+    if (conversion->max_threads_num == 0)
+    {   /* set to maximum available number of processors */
+       conversion->max_threads_num = sysconf (_SC_NPROCESSORS_ONLN);
+    }
+
+    g_mutex_unlock (conversion->mutex);
+}
+
+
 /* Add @track to the list of tracks to be converted if conversion is
  * necessary.
  *

Index: file_convert.h
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/file_convert.h,v
retrieving revision 1.4.2.1
retrieving revision 1.4.2.2
diff -u -d -r1.4.2.1 -r1.4.2.2
--- file_convert.h      19 Apr 2007 14:46:07 -0000      1.4.2.1
+++ file_convert.h      21 Apr 2007 08:54:50 -0000      1.4.2.2
@@ -61,6 +61,11 @@
 /* extern gchar **cmdline_to_argv(const gchar *cmdline, Track *track); */
 #endif
 
+extern const gchar *FILE_CONVERT_CACHEDIR;
+extern const gchar *FILE_CONVERT_MAXDIRSIZE;
+extern const gchar *FILE_CONVERT_TEMPLATE;
+extern const gchar *FILE_CONVERT_MAX_THREADS_NUM;
+
 typedef enum
 {
     FILE_CONVERT_INACTIVE = 0,
@@ -75,6 +80,7 @@
 
 void file_convert_init (void);
 void file_convert_shutdown (void);
+void file_convert_prefs_changed (void);
 gboolean file_convert_add_track (Track *track);
 void file_convert_itdb_first (iTunesDB *itdb);
 void file_convert_cancel_itdb (iTunesDB *itdb);

Index: file_itunesdb.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/file_itunesdb.c,v
retrieving revision 1.117.2.3
retrieving revision 1.117.2.4
diff -u -d -r1.117.2.3 -r1.117.2.4
--- file_itunesdb.c     21 Apr 2007 05:20:24 -0000      1.117.2.3
+++ file_itunesdb.c     21 Apr 2007 08:54:50 -0000      1.117.2.4
@@ -1499,9 +1499,13 @@
              gtk_progress_bar_set_text(GTK_PROGRESS_BAR (td->progressbar), 
progtext);
              g_free (progtext);
 
+             g_mutex_unlock (td->mutex);
+
              while (widgets_blocked && gtk_events_pending ())
                  gtk_main_iteration ();
 
+             g_mutex_lock (td->mutex);
+
              /* wait a maximum of 20 ms or until cond is signaled */
              g_get_current_time (&gtime);
              g_time_val_add (&gtime, 20000);
@@ -1660,9 +1664,13 @@
                          GTK_PROGRESS_BAR (td->progressbar), progtext);
                      g_free (progtext);
 
+                     g_mutex_unlock (td->mutex);
+
                      while (widgets_blocked && gtk_events_pending ())
                          gtk_main_iteration ();
 
+                     g_mutex_lock (td->mutex);
+
                      /* wait a maximum of 20 ms */
                      g_get_current_time (&gtime);
                      g_time_val_add (&gtime, 20*1000);

Index: prefs_window.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/prefs_window.c,v
retrieving revision 1.195
retrieving revision 1.195.2.1
diff -u -d -r1.195 -r1.195.2.1
--- prefs_window.c      7 Apr 2007 04:43:15 -0000       1.195
+++ prefs_window.c      21 Apr 2007 08:54:50 -0000      1.195.2.1
@@ -740,6 +740,21 @@
 
     }
 
+    w = gtkpod_xml_get_widget (prefs_window_xml, 
"file_convert_max_threads_num_spinbutton");
+    gtk_spin_button_set_value (GTK_SPIN_BUTTON(w),
+                              prefs_get_int (FILE_CONVERT_MAX_THREADS_NUM));
+
+    w = gtkpod_xml_get_widget (prefs_window_xml, 
"file_convert_maxdirsize_spinbutton");
+    gtk_spin_button_set_value (GTK_SPIN_BUTTON(w),
+                              prefs_get_double (FILE_CONVERT_MAXDIRSIZE));
+
+    w = gtkpod_xml_get_widget (prefs_window_xml, 
"file_convert_cachedir_entry");
+    buf = prefs_get_string (FILE_CONVERT_CACHEDIR);
+    if (buf)
+       gtk_entry_set_text (GTK_ENTRY(w), buf);
+    g_free (buf);
+
+
     prefs_window_show_hide_tooltips ();
     gtk_widget_show(prefs_window);
 
@@ -775,6 +790,9 @@
    st_show_visible();
    display_show_hide_tooltips();
    display_show_hide_toolbar();
+
+   /* update file_conversion data */
+   file_convert_prefs_changed ();
 }
 
 /* save current window size */
@@ -845,25 +863,7 @@
 void
 prefs_window_ok (void)
 {
-    gint defx, defy;
-    GtkWidget *nb;
-
-    /* Commit temp prefs to prefs table */
-    temp_prefs_apply(temp_prefs);
-    temp_lists_apply(temp_lists);
-  
-    /* save current settings */
-    prefs_window_set ();
-
-    /* save current notebook page */
-    nb = gtkpod_xml_get_widget (prefs_window_xml, "notebook");
-    prefs_set_int("last_prefs_page",gtk_notebook_get_current_page (
-                 GTK_NOTEBOOK (nb)));
-
-    /* save current window size */
-    gtk_window_get_size (GTK_WINDOW (prefs_window), &defx, &defy);
-    prefs_set_int("size_prefs.x", defx);
-    prefs_set_int("size_prefs.y", defy);
+    prefs_window_apply ();
 
     /* close the window */
     if(prefs_window)
@@ -905,6 +905,7 @@
 
    ----------------------------------------------------------------- */
 
+
 void
 on_sorting_clicked                     (GtkButton       *button,
                                        gpointer         user_data)
@@ -1008,6 +1009,23 @@
 }
 
 
+void on_file_convert_max_threads_num_spinbutton_value_changed (
+    GtkSpinButton *spinbutton,
+    gpointer       user_data)
+{
+    temp_prefs_set_int (temp_prefs, FILE_CONVERT_MAX_THREADS_NUM,
+                       gtk_spin_button_get_value_as_int (spinbutton));
+}
+
+void on_file_convert_maxdirsize_spinbutton_value_changed (
+    GtkSpinButton *spinbutton,
+    gpointer       user_data)
+{
+    temp_prefs_set_double (temp_prefs, FILE_CONVERT_MAXDIRSIZE,
+                          gtk_spin_button_get_value (spinbutton));
+}
+
+
 void
 on_cfg_sha1tracks_toggled                (GtkToggleButton *togglebutton,
                                        gpointer         user_data)


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
gtkpod-cvs2 mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2

Reply via email to