summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJorg Schuler <jcsjcs@users.sourceforge.net>2005-09-24 04:26:41 +0000
committerJorg Schuler <jcsjcs@users.sourceforge.net>2005-09-24 04:26:41 +0000
commit6a0e830586380aafe71e9709814624057e21ca79 (patch)
tree60f70b379afade08c1ff358dfab7a6724d0eba7a
parente89c06607a5763356e0d11e3871b2a3f1e444a94 (diff)
downloadlibgpod-tmz-6a0e830586380aafe71e9709814624057e21ca79.tar.gz
libgpod-tmz-6a0e830586380aafe71e9709814624057e21ca79.tar.xz
libgpod-tmz-6a0e830586380aafe71e9709814624057e21ca79.zip
* itdb.h/itdb_playlist.c: new functions: itdb_playlist_is_mpl()
and itdb_playlist_is_podcasts() * itdb_track.c: update itdb_track_duplicate() * itdb_itunesdb.c: read/write timestamp in playlists. Set timestamp if previously unset. * itdb_playlist.c: set timestamp when creating playlist, set timestamp when adding playlist and no timestamp was set. git-svn-id: https://gtkpod.svn.sf.net/svnroot/gtkpod/libgpod/trunk@1101 f01d2545-417e-4e96-918e-98f8d0dbbcb6
-rw-r--r--ChangeLog13
-rw-r--r--configure.ac2
-rw-r--r--src/itdb.h11
-rw-r--r--src/itdb_itunesdb.c17
-rw-r--r--src/itdb_playlist.c48
-rw-r--r--src/itdb_track.c36
6 files changed, 101 insertions, 26 deletions
diff --git a/ChangeLog b/ChangeLog
index 7e3c997..92ee788 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2005-09-24 Jorg Schuler <jcsjcs at users.sourceforge.net>
+
+ * itdb.h/itdb_playlist.c: new functions: itdb_playlist_is_mpl()
+ and itdb_playlist_is_podcasts()
+
+ * itdb_track.c: update itdb_track_duplicate()
+
+ * itdb_itunesdb.c: read/write timestamp in playlists. Set
+ timestamp if previously unset.
+
+ * itdb_playlist.c: set timestamp when creating playlist, set
+ timestamp when adding playlist and no timestamp was set.
+
2005-09-23 Jorg Schuler <jcsjcs at users.sourceforge.net>
* bindings/: added python bindings provided by Nicholas Piper
diff --git a/configure.ac b/configure.ac
index 92490ba..4cbed98 100644
--- a/configure.ac
+++ b/configure.ac
@@ -13,7 +13,7 @@ AM_CONFIG_HEADER(config.h)
#
LIBGPOD_MAJOR_VERSION=0
LIBGPOD_MINOR_VERSION=1
-LIBGPOD_MICRO_VERSION=5
+LIBGPOD_MICRO_VERSION=6
LIBGPOD_INTERFACE_AGE=0
# If you need a modifier for the version number.
# Normally empty, but can be used to make "fixup" releases.
diff --git a/src/itdb.h b/src/itdb.h
index 305fa25..59385ac 100644
--- a/src/itdb.h
+++ b/src/itdb.h
@@ -1,4 +1,4 @@
-/* Time-stamp: <2005-09-24 01:48:50 jcs>
+/* Time-stamp: <2005-09-24 12:59:15 jcs>
|
| Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
| Part of the gtkpod project.
@@ -47,16 +47,18 @@
/* one star is how much (track->rating) */
#define ITDB_RATING_STEP 20
+/* always use itdb_playlist_is_mpl() to check for MPL! */
enum ItdbPlType { /* types for playlist->type */
ITDB_PL_TYPE_NORM = 0, /* normal playlist, visible in iPod */
ITDB_PL_TYPE_MPL = 1 /* master playlist, contains all tracks,
not visible in iPod */
};
+/* always use itdb_playlists_is_podcasts() to check for podcasts PL */
enum ItdbPlFlag { /* types for playlist->podcastflag */
ITDB_PL_FLAG_NORM = 0, /* normal playlist, visible under
'Playlists */
- ITDB_PL_FLAG_PODCAST = 1 /* special podcast playlist visible
+ ITDB_PL_FLAG_PODCASTS = 1 /* special podcast playlist visible
under 'Music' */
};
@@ -654,7 +656,7 @@ gboolean itdb_shuffle_write_file (Itdb_iTunesDB *itdb,
const gchar *filename, GError **error);
Itdb_iTunesDB *itdb_new (void);
void itdb_free (Itdb_iTunesDB *itdb);
-Itdb_iTunesDB *itdb_duplicate (Itdb_iTunesDB *itdb);
+Itdb_iTunesDB *itdb_duplicate (Itdb_iTunesDB *itdb); /* not implemented */
guint32 itdb_tracks_number (Itdb_iTunesDB *itdb);
guint32 itdb_tracks_number_nontransferred (Itdb_iTunesDB *itdb);
guint32 itdb_playlists_number (Itdb_iTunesDB *itdb);
@@ -699,7 +701,10 @@ void itdb_playlist_add_track (Itdb_Playlist *pl,
Itdb_Playlist *itdb_playlist_by_id (Itdb_iTunesDB *itdb, guint64 id);
Itdb_Playlist *itdb_playlist_by_nr (Itdb_iTunesDB *itdb, guint32 num);
Itdb_Playlist *itdb_playlist_by_name (Itdb_iTunesDB *itdb, gchar *name);
+gboolean itdb_playlist_is_mpl (Itdb_Playlist *pl);
+gboolean itdb_playlist_is_podcasts (Itdb_Playlist *pl);
Itdb_Playlist *itdb_playlist_mpl (Itdb_iTunesDB *itdb);
+Itdb_Playlist *itdb_playlist_podcasts (Itdb_iTunesDB *itdb);
gboolean itdb_playlist_contains_track (Itdb_Playlist *pl, Itdb_Track *track);
guint32 itdb_playlist_contain_track_number (Itdb_Track *tr);
void itdb_playlist_remove_track (Itdb_Playlist *pl, Itdb_Track *track);
diff --git a/src/itdb_itunesdb.c b/src/itdb_itunesdb.c
index bbaaba4..0a55075 100644
--- a/src/itdb_itunesdb.c
+++ b/src/itdb_itunesdb.c
@@ -1,4 +1,4 @@
-/* Time-stamp: <2005-09-24 01:56:22 jcs>
+/* Time-stamp: <2005-09-24 13:25:33 jcs>
|
| Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
| Part of the gtkpod project.
@@ -843,12 +843,11 @@ void itdb_free (Itdb_iTunesDB *itdb)
}
}
-/* Free the memory taken by @itdb. */
+/* Duplicate @itdb */
+/* FIXME: not implemented yet */
Itdb_iTunesDB *itdb_duplicate (Itdb_iTunesDB *itdb)
{
g_return_val_if_fail (itdb, NULL);
- g_return_val_if_fail (!itdb->userdata ||
- itdb->userdata_duplicate, NULL);
/* FIXME: not yet implemented */
g_return_val_if_reached (NULL);
}
@@ -1550,6 +1549,7 @@ static glong get_playlist (FImport *fimp, glong mhyp_seek)
/* Some Playlists have added 256 to their type -- I don't know what
it's for, so we just ignore it for now -> & 0xff */
plitem->type = get32lint (cts, mhyp_seek+20) & 0xff;
+ plitem->timestamp = get32lint (cts, mhyp_seek+24);
plitem->id = get64lint (cts, mhyp_seek+28);
plitem->mhodcount = get32lint (cts, mhyp_seek+36);
plitem->libmhodcount = get16lint (cts, mhyp_seek+40);
@@ -1639,11 +1639,11 @@ static glong get_playlist (FImport *fimp, glong mhyp_seek)
if (!plitem->name)
{ /* we did not read a valid mhod TITLE header -> */
/* we simply make up our own name */
- if (plitem->type == ITDB_PL_TYPE_MPL)
+ if (itdb_playlist_is_mpl (plitem))
plitem->name = _("Master-PL");
else
{
- if (plitem->podcastflag == ITDB_PL_FLAG_PODCAST)
+ if (itdb_playlist_is_podcasts (plitem))
plitem->name = _("Podcasts");
else
plitem->name = _("Playlist");
@@ -3290,7 +3290,7 @@ static gboolean write_playlist (FExport *fexp,
/* number of tracks in plist */
put32lint (cts, -1); /* number of mhips -> later */
put32lint (cts, pl->type); /* 1 = main, 0 = visible */
- put32lint (cts, 0); /* some timestamp */
+ put32lint (cts, pl->timestamp);/* some timestamp */
put64lint (cts, pl->id); /* 64 bit ID */
pl->mhodcount = 1; /* we only write one mhod type < 50 */
put32lint (cts, pl->mhodcount);
@@ -3310,8 +3310,7 @@ static gboolean write_playlist (FExport *fexp,
mk_mhod (cts, MHOD_ID_SPLRULES, &pl->splrules);
}
- if ((pl->podcastflag == ITDB_PL_FLAG_PODCAST) &&
- (mhsd_type == 3))
+ if (itdb_playlist_is_podcasts(pl) && (mhsd_type == 3))
{
/* write special podcast playlist */
result = write_podcast_mhips (fexp, pl, mhyp_seek);
diff --git a/src/itdb_playlist.c b/src/itdb_playlist.c
index 362e8e5..7e3bebb 100644
--- a/src/itdb_playlist.c
+++ b/src/itdb_playlist.c
@@ -1,4 +1,4 @@
-/* Time-stamp: <2005-09-19 22:54:16 jcs>
+/* Time-stamp: <2005-09-24 13:25:33 jcs>
|
| Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
| Part of the gtkpod project.
@@ -938,7 +938,6 @@ Itdb_Playlist *itdb_playlist_duplicate (Itdb_Playlist *pl)
GList *gl;
g_return_val_if_fail (pl, NULL);
- g_return_val_if_fail (!pl->userdata || pl->userdata_duplicate, NULL);
pl_dup = g_new0 (Itdb_Playlist, 1);
memcpy (pl_dup, pl, sizeof (Itdb_Playlist));
@@ -968,7 +967,7 @@ Itdb_Playlist *itdb_playlist_duplicate (Itdb_Playlist *pl)
pl_dup->id = 0;
/* Copy userdata */
- if (pl->userdata)
+ if (pl->userdata && pl->userdata_duplicate)
pl_dup->userdata = pl->userdata_duplicate (pl->userdata);
return pl_dup;
@@ -1018,6 +1017,8 @@ Itdb_Playlist *itdb_playlist_new (const gchar *title, gboolean spl)
pl->name = g_strdup (title);
pl->sortorder = ITDB_PSO_MANUAL;
+ pl->timestamp = itdb_time_get_mac_time ();
+
pl->is_spl = spl;
if (spl)
{
@@ -1088,6 +1089,7 @@ void itdb_playlist_add (Itdb_iTunesDB *itdb, Itdb_Playlist *pl, gint32 pos)
pl->id = id;
}
if (pl->sortorder == 0) pl->sortorder = ITDB_PSO_MANUAL;
+ if (pl->timestamp == 0) pl->timestamp = itdb_time_get_mac_time ();
if (pos == -1) itdb->playlists = g_list_append (itdb->playlists, pl);
else itdb->playlists = g_list_insert (itdb->playlists, pl, pos);
}
@@ -1228,6 +1230,24 @@ Itdb_Playlist *itdb_playlist_by_name (Itdb_iTunesDB *itdb, gchar *name)
}
+/* check if playlist is master playlist */
+gboolean itdb_playlist_is_mpl (Itdb_Playlist *pl)
+{
+ g_return_val_if_fail (pl, FALSE);
+
+ return (pl->type == ITDB_PL_TYPE_MPL);
+}
+
+
+/* check if playlist is podcasts playlist */
+gboolean itdb_playlist_is_podcasts (Itdb_Playlist *pl)
+{
+ g_return_val_if_fail (pl, FALSE);
+
+ return (pl->podcastflag == ITDB_PL_FLAG_PODCASTS);
+}
+
+
/* return the master playlist of @itdb */
Itdb_Playlist *itdb_playlist_mpl (Itdb_iTunesDB *itdb)
{
@@ -1239,12 +1259,32 @@ Itdb_Playlist *itdb_playlist_mpl (Itdb_iTunesDB *itdb)
g_return_val_if_fail (pl, NULL);
/* mpl is guaranteed to be at first position... */
- g_return_val_if_fail (pl->type == ITDB_PL_TYPE_MPL, NULL);
+ g_return_val_if_fail (itdb_playlist_is_mpl (pl), NULL);
return pl;
}
+/* return the podcasts playlist of @itdb, if available */
+Itdb_Playlist *itdb_playlist_podcasts (Itdb_iTunesDB *itdb)
+{
+ GList *gl;
+
+ g_return_val_if_fail (itdb, NULL);
+
+ for (gl=itdb->playlists; gl; gl=gl->next)
+ {
+ Itdb_Playlist *pl = gl->data;
+ g_return_val_if_fail (pl, NULL);
+
+ if (itdb_playlist_is_podcasts (pl)) return pl;
+ }
+
+ return NULL;
+}
+
+
+
/* checks if @track is in playlist @pl. TRUE, if yes, FALSE
otherwise. If @pl is NULL, the */
gboolean itdb_playlist_contains_track (Itdb_Playlist *pl, Itdb_Track *tr)
diff --git a/src/itdb_track.c b/src/itdb_track.c
index 9aa1b30..773d0e2 100644
--- a/src/itdb_track.c
+++ b/src/itdb_track.c
@@ -1,4 +1,4 @@
-/* Time-stamp: <2005-09-19 17:50:14 jcs>
+/* Time-stamp: <2005-09-24 12:21:06 jcs>
|
| Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
| Part of the gtkpod project.
@@ -166,15 +166,21 @@ void itdb_track_free (Itdb_Track *track)
{
g_return_if_fail (track);
- g_free (track->album);
- g_free (track->artist);
g_free (track->title);
+ g_free (track->artist);
+ g_free (track->album);
g_free (track->genre);
- g_free (track->comment);
g_free (track->composer);
+ g_free (track->comment);
g_free (track->filetype);
g_free (track->grouping);
+ g_free (track->category);
+ g_free (track->description);
+ g_free (track->podcasturl);
+ g_free (track->podcastrss);
+ g_free (track->subtitle);
g_free (track->ipod_path);
+ g_free (track->chapterdata_raw);
itdb_track_free_generated_thumbnails (track);
g_free (track->orig_image_filename);
if (track->userdata && track->userdata_destroy)
@@ -215,7 +221,6 @@ Itdb_Track *itdb_track_duplicate (Itdb_Track *tr)
Itdb_Track *tr_dup;
g_return_val_if_fail (tr, NULL);
- g_return_val_if_fail (!tr->userdata || tr->userdata_duplicate, NULL);
tr_dup = g_new0 (Itdb_Track, 1);
memcpy (tr_dup, tr, sizeof (Itdb_Track));
@@ -224,18 +229,31 @@ Itdb_Track *itdb_track_duplicate (Itdb_Track *tr)
tr_dup->itdb = NULL;
/* copy strings */
- tr_dup->album = g_strdup (tr->album);
- tr_dup->artist = g_strdup (tr->artist);
tr_dup->title = g_strdup (tr->title);
+ tr_dup->artist = g_strdup (tr->artist);
+ tr_dup->album = g_strdup (tr->album);
tr_dup->genre = g_strdup (tr->genre);
- tr_dup->comment = g_strdup (tr->comment);
tr_dup->composer = g_strdup (tr->composer);
+ tr_dup->comment = g_strdup (tr->comment);
tr_dup->filetype = g_strdup (tr->filetype);
tr_dup->grouping = g_strdup (tr->grouping);
+ tr_dup->category = g_strdup (tr->category);
+ tr_dup->description = g_strdup (tr->description);
+ tr_dup->podcasturl = g_strdup (tr->podcasturl);
+ tr_dup->podcastrss = g_strdup (tr->podcastrss);
+ tr_dup->subtitle = g_strdup (tr->subtitle);
tr_dup->ipod_path = g_strdup (tr->ipod_path);
+ /* Copy chapterdata */
+ if (tr->chapterdata_raw)
+ {
+ tr_dup->chapterdata_raw = g_new (gchar, tr->chapterdata_raw_length);
+ memcpy (tr_dup->chapterdata_raw, tr->chapterdata_raw,
+ tr->chapterdata_raw_length);
+ }
+
/* Copy userdata */
- if (tr->userdata)
+ if (tr->userdata && tr->userdata_duplicate)
tr_dup->userdata = tr->userdata_duplicate (tr->userdata);
return tr_dup;