From be7488f5b7b58f2c17db98650ec85561be83abd1 Mon Sep 17 00:00:00 2001 From: Christophe Fergeau Date: Fri, 4 Nov 2005 09:48:02 +0000 Subject: 2005-11-04 Christophe Fergeau * src/ipod-device.c: (ipod_device_new): * src/ipod-device.h: * src/itdb.h: * src/itdb_itunesdb.c: (itdb_free), (itdb_parse), (itdb_shuffle_write), (itdb_set_mountpoint): added an IpodDevice element to Itdb_iTunesDB. This makes it possible for libgpod to know the type (regular/nano/mini/video/...) of the iPod it's currently dealing with (which is necessary for proper cover art support for example) git-svn-id: https://gtkpod.svn.sf.net/svnroot/gtkpod/libgpod/trunk@1139 f01d2545-417e-4e96-918e-98f8d0dbbcb6 --- ChangeLog | 12 ++++++++++++ src/ipod-device.c | 2 +- src/ipod-device.h | 2 +- src/itdb.h | 3 +++ src/itdb_itunesdb.c | 15 ++++++++++----- 5 files changed, 27 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9b768a9..16fb9d5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2005-11-04 Christophe Fergeau + + * src/ipod-device.c: (ipod_device_new): + * src/ipod-device.h: + * src/itdb.h: + * src/itdb_itunesdb.c: (itdb_free), (itdb_parse), + (itdb_shuffle_write), (itdb_set_mountpoint): added an IpodDevice + element to Itdb_iTunesDB. This makes it possible for libgpod to know + the type (regular/nano/mini/video/...) of the iPod it's currently + dealing with (which is necessary for proper cover art support for + example) + 2005-11-04 Christophe Fergeau * src/Makefile.am: db-itunes-parser.h was missing from the source file diff --git a/src/ipod-device.c b/src/ipod-device.c index b429bfb..8971693 100644 --- a/src/ipod-device.c +++ b/src/ipod-device.c @@ -1437,7 +1437,7 @@ ipod_device_run_command(IpodDevice *device, const char *command, /* PUBLIC METHODS */ IpodDevice * -ipod_device_new(gchar *hal_volume_id) +ipod_device_new(const gchar *hal_volume_id) { IpodDevice *device = g_object_new(TYPE_IPOD_DEVICE, "hal-volume-id", hal_volume_id, NULL); diff --git a/src/ipod-device.h b/src/ipod-device.h index 68b3f2a..726ca36 100644 --- a/src/ipod-device.h +++ b/src/ipod-device.h @@ -170,7 +170,7 @@ enum { }; GType itdb_device_get_type(void); -IpodDevice *itdb_device_new(gchar *mount_point); +IpodDevice *itdb_device_new(const gchar *mount_point); gboolean itdb_device_rescan_disk(IpodDevice *device); guint itdb_device_eject(IpodDevice *device, GError **error); guint itdb_device_reboot(IpodDevice *device, GError **error_out); diff --git a/src/itdb.h b/src/itdb.h index 428d44e..dcff806 100644 --- a/src/itdb.h +++ b/src/itdb.h @@ -40,6 +40,8 @@ # include #endif +#include "ipod-device.h" + #include #include #include @@ -337,6 +339,7 @@ typedef struct GList *playlists; gchar *filename; /* filename of iTunesDB */ gchar *mountpoint; /* mountpoint of iPod (if available) */ + IpodDevice *device; gint musicdirs; /* number of /iPod_Control/Music/F.. dirs */ guint32 version; guint64 id; diff --git a/src/itdb_itunesdb.c b/src/itdb_itunesdb.c index 5f7ae4d..f1eb953 100644 --- a/src/itdb_itunesdb.c +++ b/src/itdb_itunesdb.c @@ -845,6 +845,9 @@ void itdb_free (Itdb_iTunesDB *itdb) g_list_free (itdb->tracks); g_free (itdb->filename); g_free (itdb->mountpoint); + if (itdb->device != NULL) { + g_object_unref (G_OBJECT (itdb->device)); + } if (itdb->userdata && itdb->userdata_destroy) (*itdb->userdata_destroy) (itdb->userdata); g_free (itdb); @@ -2299,7 +2302,7 @@ Itdb_iTunesDB *itdb_parse (const gchar *mp, GError **error) itdb = itdb_parse_file (filename, error); if (itdb) { - itdb->mountpoint = g_strdup (mp); + itdb_set_mountpoint (itdb, mp); /* We don't test the return value of ipod_parse_artwork_db * since the database content will be consistent even if @@ -3824,11 +3827,9 @@ gboolean itdb_shuffle_write (Itdb_iTunesDB *itdb, if (result == TRUE) result = itdb_rename_files (mp, error); - if (result == TRUE) + if ((result == TRUE) && (mp != itdb->mountpoint)) { - gchar *mnp = g_strdup (mp); - g_free (itdb->mountpoint); - itdb->mountpoint = mnp; + itdb_set_mountpoint (itdb, mp); } /* make sure all buffers are flushed as some people tend to @@ -4083,6 +4084,10 @@ void itdb_set_mountpoint (Itdb_iTunesDB *itdb, const gchar *mp) g_free (itdb->mountpoint); itdb->mountpoint = g_strdup (mp); + if (itdb->device != NULL) { + g_object_unref (G_OBJECT (itdb->device)); + } + itdb->device = itdb_device_new (mp); itdb->musicdirs = 0; } -- cgit