[Kpod-devel] cvs_commit libqtpod/src itunesdbwriter.cpp,1.24,1.25
Status: Beta
Brought to you by:
fry26
From: Michael S. <fr...@us...> - 2007-12-28 11:40:23
|
Update of /cvsroot/kpod/libqtpod/src In directory sc8-pr-cvs2.sourceforge.net:/tmp/cvs-serv32720/src Modified Files: itunesdbwriter.cpp Log Message: more mhod53 development plus fixed MHOD52 additional field count Index: itunesdbwriter.cpp =================================================================== RCS file: /cvsroot/kpod/libqtpod/src/itunesdbwriter.cpp,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -d -r1.24 -r1.25 *** itunesdbwriter.cpp 21 Dec 2007 11:38:49 -0000 1.24 --- itunesdbwriter.cpp 28 Dec 2007 11:40:22 -0000 1.25 *************** *** 311,318 **** --- 311,388 ---- }; + void sortIndices( const TrackComparatorPtr& comparator ) const { std::sort( &m_indices[ 0 ], &m_indices[ m_trackCount ], IndexComparator( comparator, m_trackPtrList ) ); } + + typedef struct MHOD53entry { + QChar letter; + Q_UINT32 startidx; + Q_UINT32 count; + MHOD53entry() : letter(), startidx( 0 ), count( 0 ) {} + }; + void writeMHOD53( QDataStream& stream, uint sortIndex ) const { + // write MHOD 53 + typedef std::vector<MHOD53entry> EntryList; + printf( "writing MHOD53 sorted by 0x0%x\n", sortIndex ); + EntryList entrylist( 26 ); + MHOD53entry entry; + for ( uint i = 0; i < m_trackCount; i++ ) { + Track * track = m_trackPtrList[ m_indices[ i ] ]; + QString property; + // implemented the simple, imperformant way since this is only done when writing the database + switch ( sortIndex ) { + case 0x03: + property = track->getTitle(); + break; + case 0x04: + property = track->getAlbum(); + break; + case 0x05: + property = track->getArtistNameForSort(); + if ( property.isEmpty() ) { + property = track->getArtist(); + } + break; + case 0x07: + property = track->getGenre(); + break; + case 0x12: + property = track->getComposer(); + break; + case 0x23: + property = track->getAlbumArtist(); + break; + case 0x24: + property = track->getArtist(); + break; + default: + // do nothing + return; + } + // printf( "%s\n", property.ascii() ); + property = property.left( 1 ).lower(); + if ( property.localeAwareCompare( entry.letter.lower() ) > 0 ) { + QChar newletter = property.at( 0 ); + if ( !entry.letter.isNull() ) { + printf( "letter jump for %s\n", property.ascii() ); + entry.count = i - entry.startidx; + entrylist.push_back( entry ); + } + entry.letter = newletter.upper(); + entry.startidx = i; + } + } + entry.count = m_trackCount - entry.startidx; + entrylist.push_back( entry ); + + EntryList::iterator entryIter = entrylist.begin(); + for ( ; entryIter != entrylist.end(); ++entryIter ) { + printf( "letter %c starts at %d with %d entries\n", entryIter->letter.latin1(), entryIter->startidx, entryIter->count ); + } + } + + void writeMHOD52( QDataStream& stream, uint sortIndex, const TrackComparatorPtr& comparator ) const { stream << (Q_UINT32) 0x646F686D; // mhod *************** *** 334,364 **** stream << (Q_UINT32) m_indices[ i ]; } - - #if 0 - // write MHOD 53 - if ( write53 ) { - struct MHOD53entry { - Q_UINT32 letter; - Q_UINT32 startidx; - Q_UINT32 count; - }; - std::slist<MHOD53entry> entrylist; - MHOD53entry entry; - for ( uint i = 0; i < m_trackCount; i++ ) { - Track * trackPtrList - if ( entry-> ... ) - } - } - #endif } virtual uint writeNonStringMHODs( QDataStream& outstream ) const { // write type52 MHODs writeMHOD52( outstream, 0x03, TrackComparators::BY_TITLE ); writeMHOD52( outstream, 0x04, TrackComparators::BY_ALBUM ); writeMHOD52( outstream, 0x05, TrackComparators::BY_ARTIST ); writeMHOD52( outstream, 0x07, TrackComparators::BY_GENRE ); writeMHOD52( outstream, 0x12, TrackComparators::BY_COMPOSER ); // writeMHOD52( outstream, 0x1D, TrackComparators::BY_TVSHOW ); --- 404,423 ---- stream << (Q_UINT32) m_indices[ i ]; } } + virtual uint writeNonStringMHODs( QDataStream& outstream ) const { // write type52 MHODs writeMHOD52( outstream, 0x03, TrackComparators::BY_TITLE ); + // writeMHOD53( outstream, 0x03 ); writeMHOD52( outstream, 0x04, TrackComparators::BY_ALBUM ); + // writeMHOD53( outstream, 0x04 ); writeMHOD52( outstream, 0x05, TrackComparators::BY_ARTIST ); + // writeMHOD53( outstream, 0x05 ); writeMHOD52( outstream, 0x07, TrackComparators::BY_GENRE ); + // writeMHOD53( outstream, 0x07 ); writeMHOD52( outstream, 0x12, TrackComparators::BY_COMPOSER ); + // writeMHOD53( outstream, 0x12 ); // writeMHOD52( outstream, 0x1D, TrackComparators::BY_TVSHOW ); *************** *** 366,373 **** // writeMHOD52( outstream, 0x1F, TrackComparators::BY_EPISODE ); writeMHOD52( outstream, 0x23, TrackComparators::BY_ALBUMARTIST ); writeMHOD52( outstream, 0x24, TrackComparators::BY_ARTISTFIELD ); ! return 5; } }; --- 425,434 ---- // writeMHOD52( outstream, 0x1F, TrackComparators::BY_EPISODE ); + + // TODO check why this doesn't work writeMHOD52( outstream, 0x23, TrackComparators::BY_ALBUMARTIST ); writeMHOD52( outstream, 0x24, TrackComparators::BY_ARTISTFIELD ); ! return 7; } }; |