diff options
author | Jorg Schuler <jcsjcs@users.sourceforge.net> | 2007-02-25 04:27:09 +0000 |
---|---|---|
committer | Jorg Schuler <jcsjcs@users.sourceforge.net> | 2007-02-25 04:27:09 +0000 |
commit | fbce5c1fd501efc61e21a712ff59eb92a69d6db9 (patch) | |
tree | d4a2279056c8a47ed39240b93c34e09ba5badc55 | |
parent | 8ee3290ee16b1616dbe1aa80ee36f039fd34e91c (diff) | |
download | libgpod-fbce5c1fd501efc61e21a712ff59eb92a69d6db9.tar.gz libgpod-fbce5c1fd501efc61e21a712ff59eb92a69d6db9.tar.xz libgpod-fbce5c1fd501efc61e21a712ff59eb92a69d6db9.zip |
* src/itdb.h
src/itdb_itunesdb.c
src/itdb_playlist.c: introduced splft_binary_and as separate
field type as this will simplify handling in applications.
* src/itdb_itunesdb.c (get_mhod, mk_mhod): replaced
if()... with a switch()... to catch changes made to
SPLFieldType more easily.
* src/itdb.h: introduced Itdb_Mediatype enum.
git-svn-id: https://gtkpod.svn.sf.net/svnroot/gtkpod/libgpod/trunk@1398 f01d2545-417e-4e96-918e-98f8d0dbbcb6
-rw-r--r-- | ChangeLog | 13 | ||||
-rw-r--r-- | docs/reference/tmpl/smart-playlists.sgml | 1 | ||||
-rw-r--r-- | src/itdb.h | 16 | ||||
-rw-r--r-- | src/itdb_itunesdb.c | 49 | ||||
-rw-r--r-- | src/itdb_playlist.c | 36 |
5 files changed, 93 insertions, 22 deletions
@@ -1,3 +1,16 @@ +2007-02-25 Jorg Schuler <jcsjcs at users.sourceforge.net> + + * src/itdb.h + src/itdb_itunesdb.c + src/itdb_playlist.c: introduced splft_binary_and as separate + field type as this will simplify handling in applications. + + * src/itdb_itunesdb.c (get_mhod, mk_mhod): replaced + if()... with a switch()... to catch changes made to + SPLFieldType more easily. + + * src/itdb.h: introduced Itdb_Mediatype enum. + 2007-02-24 Jorg Schuler <jcsjcs at users.sourceforge.net> * src/db-itunes-parser.h diff --git a/docs/reference/tmpl/smart-playlists.sgml b/docs/reference/tmpl/smart-playlists.sgml index a6c4dbd..df8e641 100644 --- a/docs/reference/tmpl/smart-playlists.sgml +++ b/docs/reference/tmpl/smart-playlists.sgml @@ -95,6 +95,7 @@ These functions and structures are for dealing with smart playlists. @splft_date: @splft_playlist: @splft_unknown: +@splft_binary_and: <!-- ##### ENUM SPLActionType ##### --> <para> @@ -1,4 +1,4 @@ -/* Time-stamp: <2007-02-24 23:11:13 jcs> +/* Time-stamp: <2007-02-25 13:26:22 jcs> | | Copyright (C) 2002-2006 Jorg Schuler <jcsjcs at users sourceforge net> | Part of the gtkpod project. @@ -245,7 +245,8 @@ typedef enum splft_boolean, splft_date, splft_playlist, - splft_unknown + splft_unknown, + splft_binary_and } SPLFieldType; typedef enum @@ -636,6 +637,17 @@ typedef enum } ItdbPlaylistSortOrder; +/* Mediatype definitions */ +typedef enum +{ + ITDB_MEDIATYPE_AUDIO = 0x0001, + ITDB_MEDIATYPE_MOVIE = 0x0002, + ITDB_MEDIATYPE_PODCAST = 0x0004, + ITDB_MEDIATYPE_AUDIOBOOK = 0x0008, + ITDB_MEDIATYPE_MUSICVIDEO = 0x0020, + ITDB_MEDIATYPE_TVSHOW = 0x0040, +} Itdb_Mediatype; + /* some of the descriptive comments below are copied verbatim from http://ipodlinux.org/ITunesDB. http://ipodlinux.org/ITunesDB is the best source for information diff --git a/src/itdb_itunesdb.c b/src/itdb_itunesdb.c index e92412a..0eee805 100644 --- a/src/itdb_itunesdb.c +++ b/src/itdb_itunesdb.c @@ -1,4 +1,4 @@ -/* Time-stamp: <2007-02-25 00:28:46 jcs> +/* Time-stamp: <2007-02-25 11:54:25 jcs> | | Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net> | Part of the gtkpod project. @@ -1427,7 +1427,8 @@ static MHODData get_mhod (FContents *cts, glong mhod_seek, guint32 *ml) for (i=0; i<numrules; ++i) { guint32 length; - gint ft; + SPLFieldType ft; + gunichar2 *string_utf16; SPLRule *splr = g_new0 (SPLRule, 1); result.data.splrules->rules = g_list_append ( result.data.splrules->rules, splr); @@ -1446,10 +1447,10 @@ static MHODData get_mhod (FContents *cts, glong mhod_seek, guint32 *ml) g_return_val_if_fail (length < G_MAXUINT-2, result); ft = itdb_splr_get_field_type (splr); - if (ft == splft_string) + switch (ft) { - gunichar2 *string_utf16 = g_new0 (gunichar2, - (length+2)/2); + case splft_string: + string_utf16 = g_new0 (gunichar2, (length+2)/2); if (!seek_get_n_bytes (cts, (gchar *)string_utf16, seek+4, length)) { @@ -1460,9 +1461,13 @@ static MHODData get_mhod (FContents *cts, glong mhod_seek, guint32 *ml) splr->string = g_utf16_to_utf8 ( string_utf16, -1, NULL, NULL, NULL); g_free (string_utf16); - } - else - { + break; + case splft_int: + case splft_date: + case splft_boolean: + case splft_playlist: + case splft_unknown: + case splft_binary_and: if (length != 0x44) { g_warning (_("Length of smart playlist rule field (%d) not as expected. Trying to continue anyhow.\n"), length); @@ -1481,7 +1486,8 @@ static MHODData get_mhod (FContents *cts, glong mhod_seek, guint32 *ml) splr->unk060 = get32bint (cts, seek+60); splr->unk064 = get32bint (cts, seek+64); splr->unk068 = get32bint (cts, seek+68); - } + break; + } seek += length+4; } } @@ -3608,7 +3614,9 @@ static void mk_mhod (WContents *cts, MHODData *mhod) for (gl=mhod->data.splrules->rules; gl; gl=gl->next) { SPLRule *splr = gl->data; - gint ft; + SPLFieldType ft; + gint len; + gunichar2 *entry_utf16; g_return_if_fail (splr); ft = itdb_splr_get_field_type (splr); /* printf ("%p: field: %d ft: %d\n", splr, splr->field, ft);*/ @@ -3616,10 +3624,11 @@ static void mk_mhod (WContents *cts, MHODData *mhod) put32bint (cts, splr->field); put32bint (cts, splr->action); put32_n0 (cts, 11); /* unknown */ - if (ft == splft_string) - { /* write string-type rule */ - gunichar2 *entry_utf16 = NULL; - gint len; + switch (ft) + { + case splft_string: + /* write string-type rule */ + entry_utf16 = NULL; /* splr->string may be NULL */ if (splr->string) entry_utf16 = g_utf8_to_utf16 (splr->string, @@ -3629,9 +3638,14 @@ static void mk_mhod (WContents *cts, MHODData *mhod) put32bint (cts, 2*len); /* length of string */ put_data (cts, (gchar *)entry_utf16, 2*len); g_free (entry_utf16); - } - else - { /* write non-string-type rule */ + break; + case splft_int: + case splft_date: + case splft_boolean: + case splft_playlist: + case splft_unknown: + case splft_binary_and: + /* write non-string-type rule */ put32bint (cts, 0x44); /* length of data */ /* data */ put64bint (cts, splr->fromvalue); @@ -3645,6 +3659,7 @@ static void mk_mhod (WContents *cts, MHODData *mhod) put32bint (cts, splr->unk060); put32bint (cts, splr->unk064); put32bint (cts, splr->unk068); + break; } } /* insert length of mhod junk */ diff --git a/src/itdb_playlist.c b/src/itdb_playlist.c index 132912c..dc38d9e 100644 --- a/src/itdb_playlist.c +++ b/src/itdb_playlist.c @@ -1,4 +1,4 @@ -/* Time-stamp: <2007-02-25 00:14:27 jcs> +/* Time-stamp: <2007-02-25 11:52:48 jcs> | | Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net> | Part of the gtkpod project. @@ -131,7 +131,7 @@ SPLFieldType itdb_splr_get_field_type (const SPLRule *splr) case SPLFIELD_PLAYLIST: return splft_playlist; case SPLFIELD_VIDEO_KIND: - return splft_int; + return splft_binary_and; } return(splft_unknown); } @@ -198,7 +198,6 @@ SPLActionType itdb_splr_get_action_type (const SPLRule *splr) case SPLACTION_IS_IN_THE_RANGE: return splat_range_int; case SPLACTION_BINARY_AND: - return splat_binary_and; case SPLACTION_IS_STRING: case SPLACTION_CONTAINS: case SPLACTION_STARTS_WITH: @@ -245,6 +244,32 @@ SPLActionType itdb_splr_get_action_type (const SPLRule *splr) case SPLACTION_BINARY_AND: return splat_invalid; } + case splft_binary_and: + switch ((SPLAction)splr->action) + { + case SPLACTION_BINARY_AND: + return splat_binary_and; + case SPLACTION_IS_INT: + case SPLACTION_IS_NOT_INT: + case SPLACTION_IS_GREATER_THAN: + case SPLACTION_IS_NOT_GREATER_THAN: + case SPLACTION_IS_LESS_THAN: + case SPLACTION_IS_NOT_LESS_THAN: + case SPLACTION_IS_IN_THE_LAST: + case SPLACTION_IS_NOT_IN_THE_LAST: + case SPLACTION_IS_IN_THE_RANGE: + case SPLACTION_IS_NOT_IN_THE_RANGE: + case SPLACTION_IS_STRING: + case SPLACTION_CONTAINS: + case SPLACTION_STARTS_WITH: + case SPLACTION_DOES_NOT_START_WITH: + case SPLACTION_ENDS_WITH: + case SPLACTION_DOES_NOT_END_WITH: + case SPLACTION_IS_NOT: + case SPLACTION_DOES_NOT_CONTAIN: + return splat_invalid; + } + /* Unknown action type */ g_warning ("Unknown action type %d\n\n", splr->action); return splat_unknown; @@ -507,6 +532,11 @@ gboolean itdb_splr_eval (SPLRule *splr, Itdb_Track *track) intcomp < splr->tovalue) || (intcomp > splr->fromvalue && intcomp > splr->tovalue)); + } + return FALSE; + case splft_binary_and: + switch(splr->action) + { case SPLACTION_BINARY_AND: return (intcomp & splr->fromvalue)? TRUE:FALSE; } |