Update of /cvsroot/gtkpod/libgpod/src
In directory sc8-pr-cvs2.sourceforge.net:/tmp/cvs-serv1129/src

Modified Files:
        itdb.h itdb_itunesdb.c itdb_playlist.c 
Log Message:
        * src/itdb.h
          src/itdb_itunesdb.c
          src/itdb_playlist.c:
          Updated smart playlist handling to recognize album artist, tv
          show, last skipped, season number, skipcount and video kind
          fields.



Index: itdb.h
===================================================================
RCS file: /cvsroot/gtkpod/libgpod/src/itdb.h,v
retrieving revision 1.58
retrieving revision 1.59
diff -u -d -r1.58 -r1.59
--- itdb.h      18 Jan 2007 16:03:57 -0000      1.58
+++ itdb.h      24 Feb 2007 15:17:37 -0000      1.59
@@ -1,4 +1,4 @@
-/* Time-stamp: <2007-01-19 00:59:18 jcs>
+/* Time-stamp: <2007-02-24 23:11:13 jcs>
 |
 |  Copyright (C) 2002-2006 Jorg Schuler <jcsjcs at users sourceforge net>
 |  Part of the gtkpod project.
@@ -212,6 +212,7 @@
     SPLACTION_IS_LESS_THAN = 0x00000040,    /* "Is Before" in iTunes */
     SPLACTION_IS_IN_THE_RANGE = 0x00000100,
     SPLACTION_IS_IN_THE_LAST = 0x00000200,
+    SPLACTION_BINARY_AND = 0x00000400,
 
     SPLACTION_IS_STRING = 0x01000001,
     SPLACTION_CONTAINS = 0x01000002,
@@ -258,7 +259,8 @@
     splat_playlist,
     splat_none,
     splat_invalid,
-    splat_unknown
+    splat_unknown,
+    splat_binary_and
 } SPLActionType;
 
 
@@ -325,10 +327,16 @@
                                     SPLACTION_IS_NOT_INT/from=1) */
     SPLFIELD_BPM = 0x23,          /* Int  (e.g. from/to = 60) */
     SPLFIELD_GROUPING = 0x27,     /* String */
-    SPLFIELD_PLAYLIST = 0x28,     /* XXX - Unknown...not parsed
+    SPLFIELD_PLAYLIST = 0x28,     /* FIXME - Unknown...not parsed
                                     correctly...from/to = 0xb6fbad5f
-                                    for * "Purchased Music".  Extra
-                                    data after * "to"... */
+                                    for "Purchased Music".  Extra
+                                    data after "to"... */
+    SPLFIELD_VIDEO_KIND = 0x3c,   /* Logic Int */
+    SPLFIELD_TVSHOW = 0x3e,       /* String */
+    SPLFIELD_SEASON_NR = 0x3f,    /* Int */
+    SPLFIELD_SKIPCOUNT = 0x44,    /* Int */
+    SPLFIELD_LAST_SKIPPED = 0x45, /* Int/Mac Timestamp */
+    SPLFIELD_ALBUMARTIST = 0x47   /* String */
 } SPLField;
 
 #define SPLDATE_IDENTIFIER (G_GINT64_CONSTANT (0x2dae2dae2dae2daeU))

Index: itdb_itunesdb.c
===================================================================
RCS file: /cvsroot/gtkpod/libgpod/src/itdb_itunesdb.c,v
retrieving revision 1.77
retrieving revision 1.78
diff -u -d -r1.77 -r1.78
--- itdb_itunesdb.c     18 Jan 2007 16:03:57 -0000      1.77
+++ itdb_itunesdb.c     24 Feb 2007 15:17:37 -0000      1.78
@@ -1,4 +1,4 @@
-/* Time-stamp: <2007-01-19 01:00:08 jcs>
+/* Time-stamp: <2007-02-24 19:13:02 jcs>
 |
 |  Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
 |  Part of the gtkpod project.
@@ -1432,7 +1432,7 @@
                  result.data.splrules->rules, splr);
              if (!check_seek (cts, seek, 56))
                  goto splrules_error;
-      splr->field = get32bint (cts, seek);
+             splr->field = get32bint (cts, seek);
              splr->action = get32bint (cts, seek+4);
              seek += 52;
              length = get32bint (cts, seek);
@@ -1469,7 +1469,7 @@
                      splr->tovalue = get64bint (cts, seek+28);
                      splr->todate = get64bint (cts, seek+36);
                      splr->tounits = get64bint (cts, seek+44);
-                     /* SPLFIELD_PLAYLIST seem to use these unknowns*/
+                     /* SPLFIELD_PLAYLIST seems to use these unknowns*/
                      splr->unk052 = get32bint (cts, seek+52);
                      splr->unk056 = get32bint (cts, seek+56);
                      splr->unk060 = get32bint (cts, seek+60);

Index: itdb_playlist.c
===================================================================
RCS file: /cvsroot/gtkpod/libgpod/src/itdb_playlist.c,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -d -r1.20 -r1.21
--- itdb_playlist.c     22 Oct 2006 08:42:49 -0000      1.20
+++ itdb_playlist.c     24 Feb 2007 15:17:37 -0000      1.21
@@ -1,4 +1,4 @@
-/* Time-stamp: <2006-10-22 17:42:28 jcs>
+/* Time-stamp: <2007-02-25 00:14:27 jcs>
 |
 |  Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
 |  Part of the gtkpod project.
@@ -71,6 +71,7 @@
     case SPLACTION_IS_NOT_IN_THE_LAST:
     case SPLACTION_IS_NOT:
     case SPLACTION_DOES_NOT_CONTAIN:
+    case SPLACTION_BINARY_AND:
        result = TRUE;
     }
     if (result == FALSE)
@@ -93,17 +94,19 @@
 {
     g_return_val_if_fail (splr != NULL, splft_unknown);
 
-    switch(splr->field)
+    switch((SPLField)splr->field)
     {
     case SPLFIELD_SONG_NAME:
     case SPLFIELD_ALBUM:
+    case SPLFIELD_ALBUMARTIST:
     case SPLFIELD_ARTIST:
     case SPLFIELD_GENRE:
     case SPLFIELD_KIND:
     case SPLFIELD_COMMENT:
     case SPLFIELD_COMPOSER:
     case SPLFIELD_GROUPING:
-       return(splft_string);
+    case SPLFIELD_TVSHOW:
+       return splft_string;
     case SPLFIELD_BITRATE:
     case SPLFIELD_SAMPLE_RATE:
     case SPLFIELD_YEAR:
@@ -115,15 +118,20 @@
     case SPLFIELD_RATING:
     case SPLFIELD_TIME: /* time is the length of the track in
                           milliseconds */
-       return(splft_int);
+    case SPLFIELD_SEASON_NR:
+    case SPLFIELD_SKIPCOUNT:
+       return splft_int;
     case SPLFIELD_COMPILATION:
-       return(splft_boolean);
+       return splft_boolean;
     case SPLFIELD_DATE_MODIFIED:
     case SPLFIELD_DATE_ADDED:
     case SPLFIELD_LAST_PLAYED:
-       return(splft_date);
+    case SPLFIELD_LAST_SKIPPED:
+       return splft_date;
     case SPLFIELD_PLAYLIST:
-       return(splft_playlist);
+       return splft_playlist;
+    case SPLFIELD_VIDEO_KIND:
+       return splft_int;
     }
     return(splft_unknown);
 }
@@ -148,7 +156,7 @@
     switch(fieldType)
     {
     case splft_string:
-       switch (splr->action)
+       switch ((SPLAction)splr->action)
        {
        case SPLACTION_IS_STRING:
        case SPLACTION_IS_NOT:
@@ -169,16 +177,15 @@
        case SPLACTION_IS_IN_THE_RANGE:
        case SPLACTION_IS_IN_THE_LAST:
        case SPLACTION_IS_NOT_IN_THE_LAST:
+       case SPLACTION_BINARY_AND:
            return splat_invalid;
-       default:
-           /* Unknown action type */
-           g_warning ("Unknown action type %d\n\n", splr->action);
-           return splat_unknown;
        }
-       break;
+       /* Unknown action type */
+       g_warning ("Unknown action type %d\n\n", splr->action);
+       return splat_unknown;
 
     case splft_int:
-       switch (splr->action)
+       switch ((SPLAction)splr->action)
        {
        case SPLACTION_IS_INT:
        case SPLACTION_IS_NOT_INT:
@@ -190,6 +197,8 @@
        case SPLACTION_IS_NOT_IN_THE_RANGE:
        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:
@@ -201,18 +210,16 @@
        case SPLACTION_IS_NOT:
        case SPLACTION_DOES_NOT_CONTAIN:
            return splat_invalid;
-       default:
-           /* Unknown action type */
-           g_warning ("Unknown action type %d\n\n", splr->action);
-           return splat_unknown;
        }
-       break;
+       /* Unknown action type */
+       g_warning ("Unknown action type %d\n\n", splr->action);
+       return splat_unknown;
 
     case splft_boolean:
        return splat_none;
 
     case splft_date:
-       switch (splr->action)
+       switch ((SPLAction)splr->action)
        {
        case SPLACTION_IS_INT:
        case SPLACTION_IS_NOT_INT:
@@ -235,16 +242,15 @@
        case SPLACTION_DOES_NOT_END_WITH:
        case SPLACTION_IS_NOT:
        case SPLACTION_DOES_NOT_CONTAIN:
+       case SPLACTION_BINARY_AND:
            return splat_invalid;
-       default:
-           /* Unknown action type */
-           g_warning ("Unknown action type %d\n\n", splr->action);
-           return splat_unknown;
        }
-       break;
+       /* Unknown action type */
+       g_warning ("Unknown action type %d\n\n", splr->action);
+       return splat_unknown;
 
     case splft_playlist:
-       switch (splr->action)
+       switch ((SPLAction)splr->action)
        {
        case SPLACTION_IS_INT:
        case SPLACTION_IS_NOT_INT:
@@ -265,17 +271,17 @@
        case SPLACTION_DOES_NOT_END_WITH:
        case SPLACTION_IS_NOT:
        case SPLACTION_DOES_NOT_CONTAIN:
+       case SPLACTION_BINARY_AND:
            return splat_invalid;
-       default:
-           /* Unknown action type */
-           g_warning ("Unknown action type %d\n\n", splr->action);
-           return splat_unknown;
        }
+       /* Unknown action type */
+       g_warning ("Unknown action type %d\n\n", splr->action);
+       return splat_unknown;
 
     case splft_unknown:
-           /* Unknown action type */
-           g_warning ("Unknown action type %d\n\n", splr->action);
-           return splat_unknown;
+       /* Unknown action type */
+       g_warning ("Unknown action type %d\n\n", splr->action);
+       return splat_unknown;
     }
     return splat_unknown;
 }
@@ -306,6 +312,7 @@
     gchar *strcomp = NULL;
     gint64 intcomp = 0;
     gboolean boolcomp = FALSE;
+    gboolean handled = FALSE;
     guint32 datecomp = 0;
     Itdb_Playlist *playcomp = NULL;
     time_t t;
@@ -325,75 +332,124 @@
     {
     case SPLFIELD_SONG_NAME:
        strcomp = track->title;
+       handled = TRUE;
        break;
     case SPLFIELD_ALBUM:
        strcomp = track->album;
+       handled = TRUE;
        break;
     case SPLFIELD_ARTIST:
        strcomp = track->artist;
+       handled = TRUE;
        break;
     case SPLFIELD_GENRE:
        strcomp = track->genre;
+       handled = TRUE;
        break;
     case SPLFIELD_KIND:
        strcomp = track->filetype;
+       handled = TRUE;
        break;
     case SPLFIELD_COMMENT:
        strcomp = track->comment;
+       handled = TRUE;
        break;
     case SPLFIELD_COMPOSER:
        strcomp = track->composer;
+       handled = TRUE;
        break;
     case SPLFIELD_GROUPING:
        strcomp = track->grouping;
+       handled = TRUE;
        break;
     case SPLFIELD_BITRATE:
        intcomp = track->bitrate;
+       handled = TRUE;
        break;
     case SPLFIELD_SAMPLE_RATE:
        intcomp = track->samplerate;
+       handled = TRUE;
        break;
     case SPLFIELD_YEAR:
        intcomp = track->year;
+       handled = TRUE;
        break;
     case SPLFIELD_TRACKNUMBER:
        intcomp = track->track_nr;
+       handled = TRUE;
        break;
     case SPLFIELD_SIZE:
        intcomp = track->size;
+       handled = TRUE;
        break;
     case SPLFIELD_PLAYCOUNT:
        intcomp = track->playcount;
+       handled = TRUE;
        break;
     case SPLFIELD_DISC_NUMBER:
        intcomp = track->cd_nr;
+       handled = TRUE;
        break;
     case SPLFIELD_BPM:
        intcomp = track->BPM;
+       handled = TRUE;
        break;
     case SPLFIELD_RATING:
        intcomp = track->rating;
+       handled = TRUE;
        break;
     case SPLFIELD_TIME:
        intcomp = track->tracklen/1000;
+       handled = TRUE;
        break;
     case SPLFIELD_COMPILATION:
        boolcomp = track->compilation;
+       handled = TRUE;
        break;
     case SPLFIELD_DATE_MODIFIED:
        datecomp = track->time_modified;
+       handled = TRUE;
        break;
     case SPLFIELD_DATE_ADDED:
        datecomp = track->time_added;
+       handled = TRUE;
        break;
     case SPLFIELD_LAST_PLAYED:
        datecomp = track->time_played;
+       handled = TRUE;
        break;
     case SPLFIELD_PLAYLIST:
        playcomp = itdb_playlist_by_id (track->itdb, splr->fromvalue);
+       handled = TRUE;
        break;
-    default: /* unknown field type */
-       g_return_val_if_fail (FALSE, FALSE);
+    case SPLFIELD_ALBUMARTIST:
+       strcomp = track->albumartist;
+       handled = TRUE;
+       break;
+    case SPLFIELD_TVSHOW:
+       strcomp = track->tvshow;
+       handled = TRUE;
+       break;
+    case SPLFIELD_LAST_SKIPPED:
+       datecomp = track->last_skipped;
+       handled = TRUE;
+       break;
+    case SPLFIELD_SEASON_NR:
+       intcomp = track->season_nr;
+       handled = TRUE;
+       break;
+    case SPLFIELD_SKIPCOUNT:
+       intcomp = track->skipcount;
+       handled = TRUE;
+       break;
+    case SPLFIELD_VIDEO_KIND:
+       intcomp = track->mediatype;
+       handled = TRUE;
+       break;
+    }
+    if (!handled)
+    {   /* unknown field type -- default to FALSE */
+       g_return_val_if_reached (FALSE);
     }
 
     /* actually do the comparison to our rule */
@@ -451,6 +507,8 @@
                     intcomp < splr->tovalue) ||
                    (intcomp > splr->fromvalue &&
                     intcomp > splr->tovalue));
+       case SPLACTION_BINARY_AND:
+           return (intcomp & splr->fromvalue)? TRUE:FALSE;
        }
        return FALSE;
     case splft_boolean:
@@ -887,6 +945,7 @@
     case splat_int:
     case splat_playlist:
     case splat_date:
+    case splat_binary_and:
        splr->fromdate = 0;
        splr->fromunits = 1;
        splr->tovalue = splr->fromvalue;


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
gtkpod-cvs2 mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2

Reply via email to