diff options
author | Jorg Schuler <jcsjcs@users.sourceforge.net> | 2007-01-09 14:49:00 +0000 |
---|---|---|
committer | Jorg Schuler <jcsjcs@users.sourceforge.net> | 2007-01-09 14:49:00 +0000 |
commit | 65d778369f9c1377bd37de140d32acc82789e71a (patch) | |
tree | feeee22ec37de1a0ca8be722103b7ba6cb78bd62 | |
parent | bf433d6b2225a8982526d0cc597d38b6c07d8047 (diff) | |
download | libgpod-65d778369f9c1377bd37de140d32acc82789e71a.tar.gz libgpod-65d778369f9c1377bd37de140d32acc82789e71a.tar.xz libgpod-65d778369f9c1377bd37de140d32acc82789e71a.zip |
* src/itdb.h
src/itdb_itunesdb.c: added tvshow, tvepisode, tvnetwork,
albumartist, keywords, reseved to Itdb_Track. 'reserved' can
later be used to support 'Artist, The'.
git-svn-id: https://gtkpod.svn.sf.net/svnroot/gtkpod/libgpod/trunk@1353 f01d2545-417e-4e96-918e-98f8d0dbbcb6
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | src/itdb.h | 10 | ||||
-rw-r--r-- | src/itdb_itunesdb.c | 104 |
3 files changed, 109 insertions, 10 deletions
@@ -9,6 +9,11 @@ * src/Makefile.am: added pixmaps.[ch] + * src/itdb.h + src/itdb_itunesdb.c: added tvshow, tvepisode, tvnetwork, + albumartist, keywords, reseved to Itdb_Track. 'reserved' can + later be used to support 'Artist, The'. + 2007-01-08 Jorg Schuler <jcsjcs at users.sourceforge.net> * README: updated information about photo support @@ -1,4 +1,4 @@ -/* Time-stamp: <2007-01-08 21:59:10 jcs> +/* Time-stamp: <2007-01-09 23:44:56 jcs> | | Copyright (C) 2002-2006 Jorg Schuler <jcsjcs at users sourceforge net> | Part of the gtkpod project. @@ -651,6 +651,14 @@ struct _Itdb_Track gchar *podcastrss; /* see note for MHOD_ID in itdb_itunesdb.c */ gchar *chapterdata; /* see note for MHOD_ID in itdb_itunesdb.c */ gchar *subtitle; /* see note for MHOD_ID in itdb_itunesdb.c */ +/* the following 6 are new in libgpod 0.4.2... */ + gchar *tvshow; /* see note for MHOD_ID in itdb_itunesdb.c */ + gchar *tvepisode; /* see note for MHOD_ID in itdb_itunesdb.c */ + gchar *tvnetwork; /* see note for MHOD_ID in itdb_itunesdb.c */ + gchar *albumartist; /* see note for MHOD_ID in itdb_itunesdb.c */ + gchar *keywords; /* see note for MHOD_ID in itdb_itunesdb.c */ + gchar *reserved; /* will probably be used for artistthe */ +/* ... to here */ guint32 id; /* unique ID of track */ gint32 size; /* size of file in bytes */ gint32 tracklen; /* Length of track in ms */ diff --git a/src/itdb_itunesdb.c b/src/itdb_itunesdb.c index eff1dd4..f4699c3 100644 --- a/src/itdb_itunesdb.c +++ b/src/itdb_itunesdb.c @@ -1,4 +1,4 @@ -/* Time-stamp: <2007-01-06 20:47:47 jcs> +/* Time-stamp: <2007-01-09 23:46:31 jcs> | | Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net> | Part of the gtkpod project. @@ -169,6 +169,22 @@ enum MHOD_ID { /* Subtitle (usually the same as Description). Introduced in db version 0x0d. */ MHOD_ID_SUBTITLE = 18, +/* Show (for TV Shows only). Introduced in db version 0x0d? */ + MHOD_ID_TVSHOW = 19, +/* Episode # (for TV Shows only). Introduced in db version 0x0d? */ + MHOD_ID_TVEPISODE = 20, +/* TV Network (for TV Shows only). Introduced in db version 0x0d? */ + MHOD_ID_TVNETWORK = 21, +/* Album Artist. Introduced in db version 0x13? */ + MHOD_ID_ALBUMARTIST = 22, +/* This only seems to appear if the Artist has "The" in front of it + (like "The Monkies") in which case it will be in the format "Artist, + The" and is followed by 5 0x01 UTF-16 characters. Introduced in db + version 0x13? */ +/* MHOD_ID_ARTISTTHE = 23, later */ +/* Appears to be a list of keywords pertaining to a track. Introduced + in db version 0x13? */ + MHOD_ID_KEYWORDS = 24, MHOD_ID_SPLPREF = 50, /* settings for smart playlist */ MHOD_ID_SPLRULES = 51, /* rules for smart playlist */ MHOD_ID_LIBPLAYLISTINDEX = 52, /* Library Playlist Index */ @@ -1468,7 +1484,6 @@ static MHODData get_mhod (FContents *cts, glong mhod_seek, guint32 *ml) cts->error is set appropriately. */ static gchar *get_mhod_string (FContents *cts, glong seek, guint32 *ml, gint32 *mty) { - gchar *result = NULL; MHODData mhoddata; *mty = get_mhod_type (cts, seek, ml); @@ -1490,19 +1505,28 @@ static gchar *get_mhod_string (FContents *cts, glong seek, guint32 *ml, gint32 * case MHOD_ID_PODCASTURL: case MHOD_ID_PODCASTRSS: case MHOD_ID_SUBTITLE: + case MHOD_ID_TVSHOW: + case MHOD_ID_TVEPISODE: + case MHOD_ID_TVNETWORK: + case MHOD_ID_ALBUMARTIST: + case MHOD_ID_KEYWORDS: mhoddata = get_mhod (cts, seek, ml); if ((*ml != -1) && mhoddata.valid) - result = mhoddata.data.string; - break; + return mhoddata.data.string; + else + return NULL; case MHOD_ID_SPLPREF: case MHOD_ID_SPLRULES: case MHOD_ID_LIBPLAYLISTINDEX: case MHOD_ID_PLAYLIST: case MHOD_ID_CHAPTERDATA: /* these do not have a string entry */ - break; + return NULL; } - return result; +#if ITUNESDB_MHIT_DEBUG + fprintf (stderr, "Ignoring unknown MHOD of type %d at offset %ld\n", *mty, seek); +#endif + return NULL; } @@ -1944,6 +1968,11 @@ static glong get_playlist (FImport *fimp, glong mhyp_seek) case MHOD_ID_PODCASTURL: case MHOD_ID_PODCASTRSS: case MHOD_ID_SUBTITLE: + case MHOD_ID_TVSHOW: + case MHOD_ID_TVEPISODE: + case MHOD_ID_TVNETWORK: + case MHOD_ID_ALBUMARTIST: + case MHOD_ID_KEYWORDS: case MHOD_ID_CHAPTERDATA: /* these are not expected here */ break; @@ -2207,9 +2236,26 @@ static glong get_mhit (FImport *fimp, glong mhit_seek) case MHOD_ID_SUBTITLE: track->subtitle = entry_utf8; break; - default: /* unknown entry -- discard */ - g_warning ("Unknown string mhod type %d at %lx inside mhit starting at %lx\n", - type, seek, mhit_seek); + case MHOD_ID_TVSHOW: + track->tvshow = entry_utf8; + break; + case MHOD_ID_TVEPISODE: + track->tvepisode = entry_utf8; + break; + case MHOD_ID_TVNETWORK: + track->tvnetwork = entry_utf8; + break; + case MHOD_ID_ALBUMARTIST: + track->albumartist = entry_utf8; + break; + case MHOD_ID_KEYWORDS: + track->keywords = entry_utf8; + break; + case MHOD_ID_SPLPREF: + case MHOD_ID_SPLRULES: + case MHOD_ID_LIBPLAYLISTINDEX: + case MHOD_ID_PLAYLIST: + case MHOD_ID_CHAPTERDATA: g_free (entry_utf8); break; } @@ -3393,6 +3439,11 @@ static void mk_mhod (WContents *cts, MHODData *mhod) case MHOD_ID_GROUPING: case MHOD_ID_DESCRIPTION: case MHOD_ID_SUBTITLE: + case MHOD_ID_TVSHOW: + case MHOD_ID_TVEPISODE: + case MHOD_ID_TVNETWORK: + case MHOD_ID_ALBUMARTIST: + case MHOD_ID_KEYWORDS: g_return_if_fail (mhod->data.string); /* normal iTunesDBs seem to take utf16 strings), endian-inversed iTunesDBs seem to take utf8 strings */ @@ -3783,6 +3834,41 @@ static gboolean write_mhsd_tracks (FExport *fexp) mk_mhod (cts, &mhod); ++mhod_num; } + if (track->tvshow && *track->tvshow) + { + mhod.type = MHOD_ID_TVSHOW; + mhod.data.string = track->tvshow; + mk_mhod (cts, &mhod); + ++mhod_num; + } + if (track->tvepisode && *track->tvepisode) + { + mhod.type = MHOD_ID_TVEPISODE; + mhod.data.string = track->tvepisode; + mk_mhod (cts, &mhod); + ++mhod_num; + } + if (track->tvnetwork && *track->tvnetwork) + { + mhod.type = MHOD_ID_TVNETWORK; + mhod.data.string = track->tvnetwork; + mk_mhod (cts, &mhod); + ++mhod_num; + } + if (track->albumartist && *track->albumartist) + { + mhod.type = MHOD_ID_ALBUMARTIST; + mhod.data.string = track->albumartist; + mk_mhod (cts, &mhod); + ++mhod_num; + } + if (track->keywords && *track->keywords) + { + mhod.type = MHOD_ID_KEYWORDS; + mhod.data.string = track->keywords; + mk_mhod (cts, &mhod); + ++mhod_num; + } if (track->podcasturl && *track->podcasturl) { mhod.type = MHOD_ID_PODCASTURL; |