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 (>ime);
g_time_val_add (>ime, 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 (>ime);
g_time_val_add (>ime, 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