libgpod Reference Manual | ||||
---|---|---|---|---|
iPod database reading/writingiPod database reading/writing — Functions to read, write, and create an iPod database |
Itdb_iTunesDB; enum ItdbFileError; Itdb_iTunesDB* itdb_new (void); void itdb_free (Itdb_iTunesDB *itdb); Itdb_iTunesDB* itdb_parse (const gchar *mp, GError **error); gboolean itdb_write (Itdb_iTunesDB *itdb, GError **error); void itdb_set_mountpoint (Itdb_iTunesDB *itdb, const gchar *mp); const gchar* itdb_get_mountpoint (Itdb_iTunesDB *itdb); guint32 itdb_tracks_number (Itdb_iTunesDB *itdb); guint32 itdb_tracks_number_nontransferred (Itdb_iTunesDB *itdb); guint32 itdb_playlists_number (Itdb_iTunesDB *itdb); void (*ItdbUserDataDestroyFunc) (gpointer userdata); gpointer (*ItdbUserDataDuplicateFunc) (gpointer userdata);
These functions are for reading, writing, creating, and deleting an iPod database and getting the total number of tracks and playlists.
Overview of using an iPod database:
itdb_parse()
: read the iTunesDB and ArtworkDB
itdb_write()
: write the iTunesDB and ArtworkDB
itdb_parse()
will return a Itdb_iTunesDB structure with GLists
containing all tracks the playlists in the database. Each track is
represented by an Itdb_Track. Each playlist is represented by an
Itdb_Playlist. See the Tracks
and Playlists sections for
details on tracks and playlists, respectively.
Each Itdb_Playlist has a GList called members
which contains all of
the tracks in the playlist. Tracks referenced in a playlist must also
be present in the tracks
GList of the Itdb_iTunesDB.
The iPod must contain one master playlist (MPL) containing all tracks accessible on the iPod through the Music->Tracks/Albums/Artists/etc. menu. In addition to the MPL there can be a number of normal playlists accessible through the Music->Playlists menu on the iPod. Tracks that are a member of one of these normal playlists must also be a member of the MPL.
The Podcasts playlist is just another playlist with some internal
flags set differently. Tracks in the Podcasts playlist are not
normally members of the MPL (so on the iPod they will only show up
under the Podcasts menu). All tracks referenced must be in the
tracks
GList of the Itdb_iTunesDB, however.
Each track may have a thumbnail associated with it. You can retrieve a
GdkPixmap of the thumbnail using itdb_artwork_get_pixbuf()
. A
thumbnail can be added with itdb_track_set_thumbnails()
. A thumbnail
can be removed with itdb_track_remove_thumbnails()
. Please see the
Artwork section for more
details on artwork related functions and structures.
Be aware that iTunes additionally stores the artwork as tags in the original music file. That's also from where the data is read when artwork is displayed in iTunes, and there can be more than one piece of artwork. libgpod does not store the artwork as tags in the original music file. As a consequence, if iTunes attempts to access the artwork, it will find none, and remove libgpod's artwork. Luckily, iTunes will only attempt to access the artwork if you select a track in iTunes. To work around this, gtkpod keeps a list of the original filename of all artwork and silently adds the thumbnails if they were 'lost'. Your application might want to do something similar, or you can supply patches for (optionally!) adding tags to the original music files.
The Itdb_iTunesDB, Itdb_Playlist and Itdb_Track structures each
have userdata
and usertype
fields that can be used by the
application to store additional application-specific data. If
userdata
is a pointer to an external structure, you can supply a
ItdbUserDataDuplicateFunc and a ItdbUserDataDestroyFunc so that this
data can be duplicated or freed automatically with a call to the
library _duplicate()
/_free()
functions.
typedef struct { GList *tracks; GList *playlists; gchar *filename; Itdb_Device *device; guint32 version; guint64 id; /* reserved for future use */ gint32 reserved_int1; gint32 reserved_int2; gpointer reserved1; gpointer reserved2; /* below is for use by application */ guint64 usertype; gpointer userdata; /* functions called to duplicate/free userdata */ ItdbUserDataDuplicateFunc userdata_duplicate; ItdbUserDataDestroyFunc userdata_destroy; } Itdb_iTunesDB;
Structure representing an iTunes database
GList * |
A list of tracks in the database (Itdb_Track) |
GList * |
A list of playlists in the database (Itdb_Playlist) |
gchar * |
The filename of the iTunesDB |
Itdb_Device * |
iPod device info (Itdb_Device) |
guint32 |
The version number of the iTunesDB |
guint64 |
A 64 bit id value for the iTunesDB |
gint32 |
Reserved for future use |
gint32 |
Reserved for future use |
gpointer |
Reserved for future use |
gpointer |
Reserved for future use |
guint64 |
For use by application |
gpointer |
For use by application |
ItdbUserDataDuplicateFunc |
A function to duplicate userdata |
ItdbUserDataDestroyFunc |
A function to free userdata |
typedef enum { ITDB_FILE_ERROR_SEEK, ITDB_FILE_ERROR_CORRUPT, ITDB_FILE_ERROR_NOTFOUND, ITDB_FILE_ERROR_RENAME, ITDB_FILE_ERROR_ITDB_CORRUPT } ItdbFileError;
Error codes for iTunesDB file
Itdb_iTunesDB* itdb_new (void);
Creates a new Itdb_iTunesDB with the unknowns filled in to reasonable values.
Returns : |
a newly created Itdb_iTunesDB to be freed with itdb_free()
when it's no longer needed
|
void itdb_free (Itdb_iTunesDB *itdb);
Free the memory taken by itdb
.
|
an Itdb_iTunesDB |
Itdb_iTunesDB* itdb_parse (const gchar *mp, GError **error);
Parse the Itdb_iTunesDB of the iPod located at mp
|
mount point of the iPod (eg "/mnt/ipod") in local encoding |
|
return location for a GError or NULL |
Returns : |
a newly allocated Itdb_iTunesDB struct holding the tracks and
the playlists present on the iPod at mp , NULL if mp isn't an iPod mount
point. If non-NULL, the Itdb_iTunesDB is to be freed with itdb_free() when
it's no longer needed
|
gboolean itdb_write (Itdb_iTunesDB *itdb, GError **error);
Write out an iTunesDB. It reassigns unique IDs to all tracks. An existing "Play Counts" file is renamed to "Play Counts.bak" if the export was successful. An existing "OTGPlaylistInfo" file is removed if the export was successful.
|
the Itdb_iTunesDB to write to disk |
|
return location for a GError or NULL |
Returns : |
TRUE on success, FALSE on error, in which case error is
set accordingly.
|
void itdb_set_mountpoint (Itdb_iTunesDB *itdb, const gchar *mp);
Sets the mountpoint of itdb
. Always use this function to set the
mountpoint of an Itdb_iTunesDB as it will reset the number of
available /iPod_Control/Music/F.. dirs. It doesn't attempt to parse
an iPod database that may be present on the iPod at mp
.
|
an Itdb_iTunesDB |
|
new mount point |
Since 0.1.3
const gchar* itdb_get_mountpoint (Itdb_iTunesDB *itdb);
Retrieve a reference to the mountpoint of itdb
|
an Itdb_iTunesDB |
Returns : |
the itdb mountpoint, this string shouldn't be freed
nor modified
|
Since 0.4.0
guint32 itdb_tracks_number (Itdb_iTunesDB *itdb);
Counts the number of tracks stored in itdb
|
an Itdb_iTunesDB |
Returns : |
the number of tracks in itdb
|
guint32 itdb_tracks_number_nontransferred (Itdb_iTunesDB *itdb);
Counts the number of non-transferred tracks in itdb
|
an Itdb_iTunesDB |
Returns : |
the number of tracks in itdb that haven't been transferred
to the iPod yet (ie the number of Itdb_Track in which the transferred field
is false)
|
guint32 itdb_playlists_number (Itdb_iTunesDB *itdb);
Counts the number of playlists stored in itdb
|
an Itdb_iTunesDB |
Returns : |
the number of playlists in itdb (including the master
playlist)
|
void (*ItdbUserDataDestroyFunc) (gpointer userdata);
Function called to free userdata
|
A gpointer to user data |