[Kpod-devel] cvs_commit libqtpod/src itunesdb_rw.cpp, 1.8, 1.9 itunesdb_spl.cpp, 1.4, 1.5 smartplay
Status: Beta
Brought to you by:
fry26
From: Michael S. <fr...@us...> - 2007-04-02 21:09:01
|
Update of /cvsroot/kpod/libqtpod/src In directory sc8-pr-cvs2.sourceforge.net:/tmp/cvs-serv3040/src Modified Files: itunesdb_rw.cpp itunesdb_spl.cpp smartplaylistrules.h track.cpp track.h Log Message: current development - implemented more of the new stuff Index: smartplaylistrules.h =================================================================== RCS file: /cvsroot/kpod/libqtpod/src/smartplaylistrules.h,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -d -r1.28 -r1.29 *** smartplaylistrules.h 8 Oct 2006 19:37:57 -0000 1.28 --- smartplaylistrules.h 2 Apr 2007 21:08:58 -0000 1.29 *************** *** 47,80 **** enum SPLStringField { ! FIELD_NAME = 0x02, ! FIELD_ALBUM = 0x03, ! FIELD_ARTIST = 0x04, ! FIELD_GENRE = 0x08, ! FIELD_KIND = 0x09, ! FIELD_COMMENT = 0x0e, ! FIELD_COMPOSER = 0x12, ! FIELD_GROUPING = 0x27, ! FIELD_DESCRIPTION = 0x36, ! FIELD_CATEGORY = 0x37 }; - enum SPLUIntField { ! FIELD_BITRATE = 0x05, ! FIELD_SAMPLERATE = 0x06, ! FIELD_YEAR = 0x07, FIELD_DATEMODIFIED = 0x0a, ! FIELD_TRACKNUMBER = 0x0b, ! FIELD_SIZE = 0x0c, ! FIELD_TIME = 0x0d, ! FIELD_DATEADDED = 0x10, ! FIELD_PLAYCOUNT = 0x16, ! FIELD_LASTPLAYED = 0x17, ! FIELD_DISCNUMBER = 0x18, ! FIELD_RATING = 0x19, ! FIELD_COMPILATION = 0x1f, ! FIELD_BPM = 0x23, ! FIELD_PLAYLISTID = 0x28, ! FIELD_PODCAST = 0x29 }; --- 47,85 ---- enum SPLStringField { ! FIELD_NAME = 0x02, ! FIELD_ALBUM = 0x03, ! FIELD_ARTIST = 0x04, ! FIELD_GENRE = 0x08, ! FIELD_KIND = 0x09, ! FIELD_COMMENT = 0x0e, ! FIELD_COMPOSER = 0x12, ! FIELD_GROUPING = 0x27, ! FIELD_DESCRIPTION = 0x36, ! FIELD_CATEGORY = 0x37, ! FIELD_TV_SHOW = 0x3E, ! FIELD_ALBUM_ARTIST = 0x47 }; enum SPLUIntField { ! FIELD_BITRATE = 0x05, ! FIELD_SAMPLERATE = 0x06, ! FIELD_YEAR = 0x07, FIELD_DATEMODIFIED = 0x0a, ! FIELD_TRACKNUMBER = 0x0b, ! FIELD_SIZE = 0x0c, ! FIELD_TIME = 0x0d, ! FIELD_DATEADDED = 0x10, ! FIELD_PLAYCOUNT = 0x16, ! FIELD_LASTPLAYED = 0x17, ! FIELD_DISCNUMBER = 0x18, ! FIELD_RATING = 0x19, ! FIELD_COMPILATION = 0x1f, ! FIELD_BPM = 0x23, ! FIELD_PLAYLISTID = 0x28, ! FIELD_PODCAST = 0x39, ! FIELD_VIDEO_KIND = 0x3C, ! FIELD_SEASON_NR = 0x3F, ! FIELD_SKIP_COUNT = 0x44, ! FIELD_LAST_SKIPPED = 0x45 }; Index: track.cpp =================================================================== RCS file: /cvsroot/kpod/libqtpod/src/track.cpp,v retrieving revision 1.42 retrieving revision 1.43 diff -C2 -d -r1.42 -r1.43 *** track.cpp 31 Mar 2007 12:31:17 -0000 1.42 --- track.cpp 2 Apr 2007 21:08:58 -0000 1.43 *************** *** 300,303 **** --- 300,313 ---- }; + /** + * compares two tracks by last skip time and returns a negative value, zero, or a positive value if + * the first track is less, equal or greater than the second. + */ + class TrackComparators::ByLastSkipped : public TrackComparator { + virtual int compare( const itunesdb::Track& track1, const itunesdb::Track& track2 ) { + return track1.getLastSkippedTime() - track2.getLastSkippedTime(); + } + }; + TrackComparatorPtr TrackComparators::KEEP_ORDER = *************** *** 359,362 **** --- 369,376 ---- TrackComparatorPtr TrackComparators::BY_SKIPCOUNTONLY = TrackComparatorPtr( new TrackComparators::BySkipCountOnly() ); + TrackComparatorPtr TrackComparators::BY_LASTSKIPPED = + TrackComparatorPtr( new TrackComparators::ByLastSkipped() ); + TrackComparatorPtr TrackComparators::BY_LASTSKIPPED_REVERSE = + TrackComparatorPtr( new TrackComparators::ReverseComparator( BY_LASTSKIPPED ) ); TrackComparatorPtr TrackComparators::BY_ALBUM = TrackComparatorPtr( *************** *** 381,384 **** --- 395,402 ---- ->add( BY_ARTIST ) ); + TrackComparatorPtr TrackComparators::BY_SKIPCOUNT = TrackComparatorPtr( + ( new TrackComparators::ComposingComparator( BY_SKIPCOUNTONLY ) ) + ->add( BY_ARTIST ) ); + Track::Track( Q_UINT32 trackid ) : ListItem( ITEMTYPE_TRACK ), *************** *** 443,448 **** mGapLessFlag( 0 ), mGaplessAlbum( 0 ), // no crossfading in iTunes ! m_recentlyPlayed( false ), ! m_plainArtistNameStartIdx( 0 ) { setFileFormatDesc( QString( "MPEG audio file" ) ); // hardwired for now --- 461,465 ---- mGapLessFlag( 0 ), mGaplessAlbum( 0 ), // no crossfading in iTunes ! m_recentlyPlayed( false ) { setFileFormatDesc( QString( "MPEG audio file" ) ); // hardwired for now *************** *** 705,713 **** QString Track::getPlainArtistName() const { ! if ( m_plainArtistNameStartIdx ) { ! return getArtist().mid( m_plainArtistNameStartIdx ); } ! return getArtist(); } --- 722,731 ---- QString Track::getPlainArtistName() const { ! QString result = getItemProperty( MHOD_THEARTIST ); ! if ( result.isEmpty() ) { ! result = getArtist(); } ! return result; } *************** *** 775,778 **** --- 793,799 ---- } + const QString& Track::getTVShow() const { + return getItemProperty( itunesdb::MHOD_TVSHOW ); + } const QString& Track::getFileFormatDesc() const { *************** *** 852,855 **** --- 873,890 ---- } + bool Track::isVideo() const { + switch( mMediaType ) { + case Audio_Video: + case Video: + case Video_Podcast: + case Music_Video: + case TV_Show: + case TV_Show_w_Audio: + return true; + default: + return false; + } + } + /** */ *************** *** 880,887 **** void Track::setArtist( const QString& artist ) { setItemProperty( artist, itunesdb::MHOD_ARTIST); ! m_plainArtistNameStartIdx = calculatePlainArtistnameStartIdx( artist ); ! if ( m_plainArtistNameStartIdx != 0 ) { ! QString name = artist.mid( m_plainArtistNameStartIdx ); ! QString article = artist.left( m_plainArtistNameStartIdx ).stripWhiteSpace(); setItemProperty( name + ", " + article, itunesdb::MHOD_THEARTIST ); } else { --- 915,922 ---- void Track::setArtist( const QString& artist ) { setItemProperty( artist, itunesdb::MHOD_ARTIST); ! uint plainArtistNameStartIdx = calculatePlainArtistnameStartIdx( artist ); ! if ( plainArtistNameStartIdx != 0 ) { ! QString name = artist.mid( plainArtistNameStartIdx ); ! QString article = artist.left( plainArtistNameStartIdx ).stripWhiteSpace(); setItemProperty( name + ", " + article, itunesdb::MHOD_THEARTIST ); } else { *************** *** 1030,1034 **** ! void Track::setLastSkippedAt( Q_UINT32 lastSkippedDateTime ) { mLastSkippedDate = lastSkippedDateTime; } --- 1065,1069 ---- ! void Track::setLastSkippedTime( Q_UINT32 lastSkippedDateTime ) { mLastSkippedDate = lastSkippedDateTime; } Index: itunesdb_spl.cpp =================================================================== RCS file: /cvsroot/kpod/libqtpod/src/itunesdb_spl.cpp,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** itunesdb_spl.cpp 25 Jul 2006 22:46:10 -0000 1.4 --- itunesdb_spl.cpp 2 Apr 2007 21:08:58 -0000 1.5 *************** *** 103,106 **** --- 103,110 ---- case FIELD_CATEGORY: return &CATEGORY; + case FIELD_TV_SHOW: + return &TVSHOW; + case FIELD_ALBUM_ARTIST: + return &ALBUMARTIST; default: return NULL; *************** *** 138,141 **** --- 142,153 ---- case FIELD_BPM: return &BEATSPERMINUTE; + case FIELD_VIDEO_KIND: + return &VIDEO_KIND; + case FIELD_SEASON_NR: + return &SEASON; + case FIELD_SKIP_COUNT: + return &SKIP_COUNT; + case FIELD_LAST_SKIPPED: + return &LAST_SKIPPED; case FIELD_PODCAST: // TODO implement default: *************** *** 234,237 **** --- 246,275 ---- } CATEGORY; + static class GetTVShow : public StringPropertyAccessor { + virtual SPLStringField getField() const { + return FIELD_TV_SHOW; + } + virtual const QString& operator() ( const Track& track ) const { + return track.getTVShow(); + } + } TVSHOW; + + static class GetAlbumArtist : public StringPropertyAccessor { + virtual SPLStringField getField() const { + return FIELD_ALBUM_ARTIST; + } + virtual const QString& operator() ( const Track& track ) const { + return track.getAlbumArtist(); + } + } ALBUMARTIST; + + + /****************************************************** + * * + * INTEGER BASED FIELDS * + * * + ******************************************************/ + + static class GetBitrate : public UIntPropertyAccessor { virtual SPLUIntField getField() const { *************** *** 359,362 **** --- 397,436 ---- } } BEATSPERMINUTE; + + static class GetVideoKind : public UIntPropertyAccessor { + virtual SPLUIntField getField() const { + return FIELD_VIDEO_KIND; + } + virtual Q_UINT64 operator() ( const Track& track ) const { + return track.isVideo(); + } + } VIDEO_KIND; + + static class GetSeasonNumber : public UIntPropertyAccessor { + virtual SPLUIntField getField() const { + return FIELD_SEASON_NR; + } + virtual Q_UINT64 operator() ( const Track& track ) const { + return track.getSeasonNumber(); + } + } SEASON; + + static class GetSkipCount : public UIntPropertyAccessor { + virtual SPLUIntField getField() const { + return FIELD_SKIP_COUNT; + } + virtual Q_UINT64 operator() ( const Track& track ) const { + return track.getSkipCount(); + } + } SKIP_COUNT; + + static class GetLastSkipped : public UIntPropertyAccessor { + virtual SPLUIntField getField() const { + return FIELD_LAST_SKIPPED; + } + virtual Q_UINT64 operator() ( const Track& track ) const { + return track.getLastSkippedTime(); + } + } LAST_SKIPPED; }; *************** *** 381,384 **** --- 455,462 ---- TrackPropertyAccessors::GetCategory TrackPropertyAccessors::CATEGORY = TrackPropertyAccessors::GetCategory(); + TrackPropertyAccessors::GetTVShow TrackPropertyAccessors::TVSHOW = + TrackPropertyAccessors::GetTVShow(); + TrackPropertyAccessors::GetAlbumArtist TrackPropertyAccessors::ALBUMARTIST = + TrackPropertyAccessors::GetAlbumArtist(); TrackPropertyAccessors::GetBitrate TrackPropertyAccessors::BITRATE = *************** *** 410,415 **** TrackPropertyAccessors::GetBPM TrackPropertyAccessors::BEATSPERMINUTE = TrackPropertyAccessors::GetBPM(); ! ! --- 488,499 ---- TrackPropertyAccessors::GetBPM TrackPropertyAccessors::BEATSPERMINUTE = TrackPropertyAccessors::GetBPM(); ! TrackPropertyAccessors::GetVideoKind TrackPropertyAccessors::VIDEO_KIND = ! TrackPropertyAccessors::GetVideoKind(); ! TrackPropertyAccessors::GetSeasonNumber TrackPropertyAccessors::SEASON = ! TrackPropertyAccessors::GetSeasonNumber(); ! TrackPropertyAccessors::GetSkipCount TrackPropertyAccessors::SKIP_COUNT = ! TrackPropertyAccessors::GetSkipCount(); ! TrackPropertyAccessors::GetLastSkipped TrackPropertyAccessors::LAST_SKIPPED = ! TrackPropertyAccessors::GetLastSkipped(); Index: track.h =================================================================== RCS file: /cvsroot/kpod/libqtpod/src/track.h,v retrieving revision 1.43 retrieving revision 1.44 diff -C2 -d -r1.43 -r1.44 *** track.h 31 Mar 2007 12:31:17 -0000 1.43 --- track.h 2 Apr 2007 21:08:58 -0000 1.44 *************** *** 157,160 **** --- 157,165 ---- const QString& getKeywords() const; + /** + * Returns the name of the TV show + */ + const QString& getTVShow() const; + const QString& getFileFormatDesc() const; *************** *** 266,269 **** --- 271,276 ---- unsigned char isChecked() const { return checked; } + bool isVideo() const; + Q_UINT16 getBPM() const; *************** *** 449,453 **** * Sets the time the track was skipped */ ! void setLastSkippedAt( Q_UINT32 lastSkippedDateTime ); /** --- 456,460 ---- * Sets the time the track was skipped */ ! void setLastSkippedTime( Q_UINT32 lastSkippedDateTime ); /** *************** *** 529,532 **** --- 536,541 ---- setLastPlayed( provider.getLastPlayed() ); setPlayCount( provider.getPlayCount() ); + setLastSkippedAt( provider.getLastSkippedTime() ); + setSkipCount( provider.getSkipCount() ); setRating( provider.getRating() ); numcds = provider.getCdCount(); *************** *** 644,648 **** bool m_recentlyPlayed; ! uint m_plainArtistNameStartIdx; }; --- 653,657 ---- bool m_recentlyPlayed; ! }; *************** *** 706,709 **** --- 715,719 ---- class ByBPM; class BySkipCountOnly; + class ByLastSkipped; public: *************** *** 857,860 **** --- 867,880 ---- /** + * Comparator to sort a list of tracks by the last played property (most recently last). + */ + static TrackComparatorPtr BY_LASTSKIPPED; + + /** + * Comparator to sort a list of tracks by the last played property (most recently first). + */ + static TrackComparatorPtr BY_LASTSKIPPED_REVERSE; + + /** * Comparator to sort a list of tracks by album, tracknumber and title */ *************** *** 881,884 **** --- 901,909 ---- static TrackComparatorPtr BY_PLAYCOUNT; + /** + * Comparator to sort a list of tracks by skip count and all the properties BY_ARTIST uses. + */ + static TrackComparatorPtr BY_SKIPCOUNT; + /** Index: itunesdb_rw.cpp =================================================================== RCS file: /cvsroot/kpod/libqtpod/src/itunesdb_rw.cpp,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** itunesdb_rw.cpp 31 Mar 2007 12:31:17 -0000 1.8 --- itunesdb_rw.cpp 2 Apr 2007 21:08:57 -0000 1.9 *************** *** 81,85 **** track->setRecentlyPlayed(); track->setSkipCount( track->getSkipCount() + skipcount ); ! track->setLastSkippedAt( last_skipped ); // Now insert track into the sorted List --- 81,85 ---- track->setRecentlyPlayed(); track->setSkipCount( track->getSkipCount() + skipcount ); ! track->setLastSkippedTime( last_skipped ); // Now insert track into the sorted List |