Update of /cvsroot/gtkpod/gtkpod/src
In directory sc8-pr-cvs2.sourceforge.net:/tmp/cvs-serv18704/src
Modified Files:
display_itdb.c display_itdb.h file.c mp3file.c mp4file.c
prefs.c prefs_window.c
Log Message:
* mp4file.c: update instructions at the beginnging of the
file, read soundcheck values irrespective of "readtags"
setting.
* gtkpod.glade
src/prefs.c
src/prefs_windows.c
src/mp3file.c
src/file.c: implement "coverart_apic" prefs key allowing to
select whether coverart stored in tags should be used or not.
* src/display_itdb.c
src/display_itdb.h: new: gp_track_set_thumbnails_from_data()
Index: display_itdb.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/display_itdb.c,v
retrieving revision 1.56
retrieving revision 1.57
diff -u -d -r1.56 -r1.57
--- display_itdb.c 23 Jun 2006 16:26:32 -0000 1.56
+++ display_itdb.c 18 Sep 2006 07:10:44 -0000 1.57
@@ -1,4 +1,4 @@
-/* Time-stamp: <2006-06-24 01:21:01 jcs>
+/* Time-stamp: <2006-09-18 15:28:13 jcs>
|
| Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
| Part of the gtkpod project.
@@ -310,37 +310,78 @@
}
-/* Set a thumbnail and store the filename in ExtraTrackData */
-gboolean gp_track_set_thumbnails (Track *track, const gchar *filename)
+/* Set a thumbnail and update ExtraTrackData (e.g. filename) */
+static gboolean gp_track_set_thumbnails_internal (Track *track,
+ const gchar *filename,
+ const guchar *image_data,
+ gsize image_data_len)
{
- gboolean result;
+ gboolean result = FALSE;
ExtraTrackData *etr;
g_return_val_if_fail (track, FALSE);
- g_return_val_if_fail (filename, FALSE);
etr = track->userdata;
g_return_val_if_fail (etr, FALSE);
- result = itdb_track_set_thumbnails (track, filename);
- if (result == TRUE)
+ if (filename)
+ {
+ result = itdb_track_set_thumbnails (track, filename);
+ }
+ else if (image_data)
+ {
+ result = itdb_track_set_thumbnails_from_data (track,
+ image_data,
+ image_data_len);
+ }
+
+ g_free (etr->thumb_path_locale);
+ g_free (etr->thumb_path_utf8);
+
+ if (filename && (result == TRUE))
{
- g_free (etr->thumb_path_locale);
- g_free (etr->thumb_path_utf8);
etr->thumb_path_locale = g_strdup (filename);
etr->thumb_path_utf8 = charset_to_utf8 (filename);
}
else
{
- g_free (etr->thumb_path_locale);
- g_free (etr->thumb_path_utf8);
etr->thumb_path_locale = g_strdup ("");
etr->thumb_path_utf8 = g_strdup ("");
- gtkpod_warning (_("Failed to set cover art: '%s'"), filename);
}
+
+ if (result == FALSE)
+ {
+ if (filename)
+ gtkpod_warning (_("Failed to set cover art: '%s'"), filename);
+ }
+
return result;
}
+/* Set a thumbnail and update data in ExtraTrackData */
+gboolean gp_track_set_thumbnails_from_data (Track *track,
+ const guchar *image_data,
+ gsize image_data_len)
+{
+ g_return_val_if_fail (track, FALSE);
+ g_return_val_if_fail (image_data, FALSE);
+
+ return gp_track_set_thumbnails_internal (track, NULL,
+ image_data, image_data_len);
+}
+
+
+/* Set a thumbnail and store the filename in ExtraTrackData */
+gboolean gp_track_set_thumbnails (Track *track, const gchar *filename)
+{
+ g_return_val_if_fail (track, FALSE);
+ g_return_val_if_fail (filename, FALSE);
+
+ return gp_track_set_thumbnails_internal (track, filename,
+ NULL, 0);
+}
+
+
/* Remove a thumbnail and remove the filename in ExtraTrackData */
/* Return value:
FALSE: track did not have any thumbnails, so no change was done
Index: display_itdb.h
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/display_itdb.h,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -d -r1.34 -r1.35
--- display_itdb.h 24 Jun 2006 15:39:22 -0000 1.34
+++ display_itdb.h 18 Sep 2006 07:10:44 -0000 1.35
@@ -1,4 +1,4 @@
-/* Time-stamp: <2006-06-24 23:54:21 jcs>
+/* Time-stamp: <2006-09-18 15:27:12 jcs>
|
| Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
| Part of the gtkpod project.
@@ -127,6 +127,9 @@
void gp_track_add_extra (Track *track);
void gp_track_validate_entries (Track *track);
gboolean gp_track_set_thumbnails (Track *track, const gchar *filename);
+gboolean gp_track_set_thumbnails_from_data (Track *track,
+ const guchar *image_data,
+ gsize image_data_len);
gboolean gp_track_remove_thumbnails (Track *track);
Playlist *gp_playlist_new (const gchar *title, gboolean spl);
Index: file.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/file.c,v
retrieving revision 1.184
retrieving revision 1.185
diff -u -d -r1.184 -r1.185
--- file.c 11 Sep 2006 15:36:18 -0000 1.184
+++ file.c 18 Sep 2006 07:10:44 -0000 1.185
@@ -1,4 +1,4 @@
-/* Time-stamp: <2006-09-12 00:31:49 jcs>
+/* Time-stamp: <2006-09-18 15:57:40 jcs>
|
| Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
| Part of the gtkpod project.
@@ -961,7 +961,7 @@
/* look for a picture specified by coverart_template */
-static void add_artwork (Track *tr)
+static void add_coverart (Track *tr)
{
ExtraTrackData *etr;
gchar *full_template;
@@ -1155,9 +1155,11 @@
set_unset_entries_from_filename (nti);
/* Set coverart */
- if (prefs_get_int("coverart"))
+ if (prefs_get_int("coverart_file"))
{
- add_artwork (nti);
+ /* APIC data takes precedence */
+ if (!nti->artwork || !nti->artwork->thumbnails)
+ add_coverart (nti);
}
/* Set modification date to the files modified date */
Index: mp3file.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/mp3file.c,v
retrieving revision 1.69
retrieving revision 1.70
diff -u -d -r1.69 -r1.70
--- mp3file.c 17 Sep 2006 17:18:13 -0000 1.69
+++ mp3file.c 18 Sep 2006 07:10:44 -0000 1.70
@@ -1,4 +1,4 @@
-/* Time-stamp: <2006-09-18 02:09:40 jcs>
+/* Time-stamp: <2006-09-18 15:57:55 jcs>
|
| Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
| Part of the gtkpod project.
@@ -78,8 +78,6 @@
gchar *lyrics; /* does not appear to be the full lyrics --
only used to set the flag 'lyrics_flag'
of the Track structure */
- guchar *coverart; /* Raw data */
- gsize coverart_len; /* Size of coverart data */
};
@@ -1280,22 +1278,21 @@
/***
- * Reads id3v1.x / id3v2 tag and load data into the Id3tag structure.
- * If a tag entry exists (ex: title), we allocate memory, else value
- * stays to NULL
+ * Reads id3v1.x / id3v2 apic data
* @returns: TRUE on success, else FALSE.
*/
-gboolean id3_tag_read (gchar *filename, File_Tag *tag)
+static gboolean id3_apic_read (gchar *filename,
+ guchar **image_data, gsize *image_data_len)
{
struct id3_file *id3file;
struct id3_tag *id3tag;
- gchar* string;
- gchar* string2;
g_return_val_if_fail (filename, FALSE);
- g_return_val_if_fail (tag, FALSE);
+ g_return_val_if_fail (image_data, FALSE);
+ g_return_val_if_fail (image_data_len, FALSE);
- memset (tag, 0, sizeof (File_Tag));
+ *image_data = NULL;
+ *image_data_len = 0;
if (!(id3file = id3_file_open (filename, ID3_FILE_MODE_READONLY)))
{
@@ -1311,8 +1308,6 @@
id3_length_t len;
const guchar *coverart;
- tag->coverart = NULL;
- tag->coverart_len = 0;
coverart = id3_get_binary (id3tag, "APIC", &len);
if (coverart)
@@ -1327,29 +1322,62 @@
{
const guchar itunes_missing_header[] =
{ 0xff, 0xd8, 0xff, 0xe0, 0x00 };
- tag->coverart = g_malloc (len+5);
- memcpy (tag->coverart, itunes_missing_header, 5);
- memcpy (tag->coverart+5, coverart, len);
- tag->coverart_len = len+5;
+ *image_data = g_malloc (len+5);
+ memcpy (*image_data, itunes_missing_header, 5);
+ memcpy ((*image_data)+5, coverart, len);
+ *image_data_len = len+5;
}
}
- if (!tag->coverart)
+ if (!*image_data)
{
- tag->coverart = g_malloc (len);
- memcpy (tag->coverart, coverart, len);
- tag->coverart_len = len;
+ *image_data = g_malloc (len);
+ memcpy (*image_data, coverart, len);
+ *image_data_len = len;
}
#if LOCALDEBUG
- if (tag->coverart)
+ if (*image_data)
{
FILE *file;
file = fopen ("/tmp/folder.jpg", "w");
- fwrite (tag->coverart, 1, tag->coverart_len, file);
+ fwrite (*image_data, 1, *image_data_len, file);
fclose (file);
}
#endif
}
+ }
+ id3_file_close (id3file);
+ return TRUE;
+}
+
+/***
+ * Reads id3v1.x / id3v2 tag and load data into the Id3tag structure.
+ * If a tag entry exists (ex: title), we allocate memory, else value
+ * stays to NULL
+ * @returns: TRUE on success, else FALSE.
+ */
+gboolean id3_tag_read (gchar *filename, File_Tag *tag)
+{
+ struct id3_file *id3file;
+ struct id3_tag *id3tag;
+ gchar* string;
+ gchar* string2;
+
+ g_return_val_if_fail (filename, FALSE);
+ g_return_val_if_fail (tag, FALSE);
+
+ memset (tag, 0, sizeof (File_Tag));
+
+ if (!(id3file = id3_file_open (filename, ID3_FILE_MODE_READONLY)))
+ {
+ gchar *fbuf = charset_to_utf8 (filename);
+ g_print(_("ERROR while opening file: '%s' (%s).\n"),
+ fbuf, g_strerror(errno));
+ g_free (fbuf);
+ return FALSE;
+ }
+ if ((id3tag = id3_file_tag(id3file)))
+ {
tag->title = id3_get_string (id3tag, ID3_FRAME_TITLE);
tag->artist = id3_get_string (id3tag, ID3_FRAME_GROUP);
if (!tag->artist || !*tag->artist)
@@ -1409,6 +1437,8 @@
return TRUE;
}
+
+
static enum id3_field_textencoding get_encoding_of (struct id3_tag *tag, const
char *frame_name)
{
struct id3_frame *frame;
@@ -2104,6 +2134,8 @@
File_Tag filetag;
MP3Info *mp3i=NULL;
FILE *file;
+ guchar *image_data = NULL;
+ gsize image_data_len = 0;
g_return_val_if_fail (name, NULL);
@@ -2128,9 +2160,10 @@
}
track = gp_track_new ();
+ track->filetype = g_strdup ("MPEG audio file");
+
if (prefs_get_int("readtags") && (id3_tag_read (name, &filetag) == TRUE))
{
- track->filetype = g_strdup ("MPEG audio file");
if (filetag.album)
{
@@ -2251,14 +2284,17 @@
{
track->lyrics_flag = 0x00;
}
+ }
- if (filetag.coverart)
+ if (prefs_get_int("coverart_apic") &&
+ (id3_apic_read (name, &image_data, &image_data_len) == TRUE))
+ {
+ if (image_data)
{
- itdb_track_set_thumbnails_from_data (track,
- filetag.coverart,
- filetag.coverart_len);
- g_free (filetag.coverart);
- filetag.coverart = NULL;
+ gp_track_set_thumbnails_from_data (track,
+ image_data,
+ image_data_len);
+ g_free (image_data);
}
}
Index: mp4file.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/mp4file.c,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -d -r1.33 -r1.34
--- mp4file.c 14 Jun 2006 12:47:56 -0000 1.33
+++ mp4file.c 18 Sep 2006 07:10:44 -0000 1.34
@@ -1,4 +1,4 @@
-/* Time-stamp: <2006-06-14 20:47:27 jcs>
+/* Time-stamp: <2006-09-18 16:03:15 jcs>
|
| Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
| Part of the gtkpod project.
@@ -54,7 +54,7 @@
gchar *genre; /+ genre (utf8) +/
gchar *comment; /+ comment (utf8) +/
gchar *composer; /+ Composer (utf8) +/
- gchar *fdesc; /+ Format description (utf8) +/
+ gchar *filetype; /+ Format description (utf8) +/
gchar *charset; /+ charset used for tags +/
gchar *description; /+ Description text (podcasts) +/
gchar *podcasturl; /+ URL/Title (podcasts) +/
@@ -75,7 +75,11 @@
gboolean compilation; /+ Track is part of a compilation CD +/
If prefs_get_int("readtags") returns FALSE you only should fill in
- tracklen, bitrate and fdesc
+ tracklen, bitrate, samplerate, soundcheck and filetype
+
+ If prefs_get_int("coverart_apic") returns TRUE you should try to
+ read APIC coverart data from the tags and set it with
+ gp_set_thumbnails_from_data().
Please note that the iPod will only play as much of the track as
specified in "tracklen".
@@ -329,8 +333,8 @@
track->genre = charset_to_utf8 (value);
g_free(value);
}
- mp4_scan_soundcheck (mp4File, track);
}
+ mp4_scan_soundcheck (mp4File, track);
}
else
{
Index: prefs.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/prefs.c,v
retrieving revision 1.268
retrieving revision 1.269
diff -u -d -r1.268 -r1.269
--- prefs.c 27 Jun 2006 01:05:57 -0000 1.268
+++ prefs.c 18 Sep 2006 07:10:44 -0000 1.269
@@ -1,4 +1,4 @@
-/* Time-stamp: <2006-06-25 21:40:01 jcs>
+/* Time-stamp: <2006-09-18 15:27:13 jcs>
|
| Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
| Copyright (C) 2006 James Liggett <jrliggett at cox.net>
@@ -226,7 +226,8 @@
prefs_set_int("parsetags", FALSE);
prefs_set_int("parsetags_overwrite", FALSE);
prefs_set_string("parsetags_template", "%a - %A/%T %t.mp3;%t.wav");
- prefs_set_int("coverart", TRUE);
+ prefs_set_int("coverart_apic", TRUE);
+ prefs_set_int("coverart_file", TRUE);
prefs_set_string("coverart_template", "%A;folder.jpg");
prefs_set_int("mserv_use", FALSE);
prefs_set_string("mserv_username", "");
@@ -686,13 +687,21 @@
version = prefs_get_double("version");
/* rename mountpoint to initial_mountpoint */
- if (prefs_get_string_value("mountpoint", &buf))
+ if (prefs_get_string_value(KEY_MOUNTPOINT, &buf))
{
prefs_set_string("initial_mountpoint", buf);
g_free(buf);
prefs_set_string(KEY_MOUNTPOINT, NULL);
}
+ /* rename coverart to coverart_file */
+ if (prefs_get_string_value("coverart", &buf))
+ {
+ prefs_set_string("coverart_file", buf);
+ g_free(buf);
+ prefs_set_string("coverart", NULL);
+ }
+
/* Convert old path numbered keys to named ones */
Index: prefs_window.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/prefs_window.c,v
retrieving revision 1.183
retrieving revision 1.184
diff -u -d -r1.183 -r1.184
--- prefs_window.c 1 Sep 2006 13:18:42 -0000 1.183
+++ prefs_window.c 18 Sep 2006 07:10:45 -0000 1.184
@@ -1,4 +1,4 @@
-/* Time-stamp: <2006-06-24 00:00:09 jcs>
+/* Time-stamp: <2006-09-18 15:35:32 jcs>
|
| Copyright (C) 2002 Corey Donohoe <atmos at atmos.org>
| Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
@@ -561,18 +561,29 @@
w = gtkpod_xml_get_widget (prefs_window_xml, "parsetags_template");
gtk_widget_set_sensitive (w, prefs_get_int("parsetags"));
buf = prefs_get_string("parsetags_template");
- gtk_entry_set_text(GTK_ENTRY(w), buf);
- g_free(buf);
+ if (buf)
+ {
+ gtk_entry_set_text(GTK_ENTRY(w), buf);
+ g_free(buf);
+ }
- w = gtkpod_xml_get_widget (prefs_window_xml, "coverart");
+ w = gtkpod_xml_get_widget (prefs_window_xml, "coverart_apic");
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w),
- prefs_get_int("coverart"));
+ prefs_get_int("coverart_apic"));
+
+
+ w = gtkpod_xml_get_widget (prefs_window_xml, "coverart_file");
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w),
+ prefs_get_int("coverart_file"));
w = gtkpod_xml_get_widget (prefs_window_xml, "coverart_template");
buf = prefs_get_string("coverart_template");
- gtk_entry_set_text(GTK_ENTRY(w), buf);
- g_free(buf);
- gtk_widget_set_sensitive (w, prefs_get_int("coverart"));
+ if (buf)
+ {
+ gtk_entry_set_text(GTK_ENTRY(w), buf);
+ g_free(buf);
+ }
+ gtk_widget_set_sensitive (w, prefs_get_int("coverart_file"));
for (i=0; i<TM_NUM_COLUMNS; ++i)
{
@@ -644,8 +655,11 @@
w = gtkpod_xml_get_widget (prefs_window_xml, "mserv_username_entry");
buf = prefs_get_string("mserv_username");
- gtk_entry_set_text(GTK_ENTRY(w), buf);
- g_free(buf);
+ if (buf)
+ {
+ gtk_entry_set_text(GTK_ENTRY(w), buf);
+ g_free(buf);
+ }
w = gtkpod_xml_get_widget (prefs_window_xml, "notebook");
if (page == -1)
{
@@ -659,8 +673,11 @@
w = gtkpod_xml_get_widget (prefs_window_xml, "exclude_file_mask_entry");
buf = prefs_get_string("exclude_file_mask");
- gtk_entry_set_text(GTK_ENTRY(w), buf);
- g_free(buf);
+ if (buf)
+ {
+ gtk_entry_set_text(GTK_ENTRY(w), buf);
+ g_free(buf);
+ }
prefs_window_show_hide_tooltips ();
gtk_widget_show(prefs_window);
@@ -1142,13 +1159,25 @@
}
void
-on_coverart_toggled (GtkToggleButton *togglebutton,
- gpointer user_data)
+on_coverart_file_toggled (GtkToggleButton *togglebutton,
+ gpointer user_data)
{
gboolean val = gtk_toggle_button_get_active(togglebutton);
GtkWidget *w;
- temp_prefs_set_int(temp_prefs, "coverart", val);
+ temp_prefs_set_int(temp_prefs, "coverart_file", val);
+ w = gtkpod_xml_get_widget (prefs_window_xml, "coverart_template");
+ gtk_widget_set_sensitive (w, val);
+}
+
+void
+on_coverart_apic_toggled (GtkToggleButton *togglebutton,
+ gpointer user_data)
+{
+ gboolean val = gtk_toggle_button_get_active(togglebutton);
+ GtkWidget *w;
+
+ temp_prefs_set_int(temp_prefs, "coverart_apic", val);
w = gtkpod_xml_get_widget (prefs_window_xml, "coverart_template");
gtk_widget_set_sensitive (w, val);
}
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
gtkpod-cvs2 mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2