From 1e8ad402bbe58aa018502bcad77981ab1a24268d Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Wed, 16 Mar 2011 02:34:34 +0100 Subject: [PATCH 1/2] * Set mimetype on ScriptResolver-generated results. --- src/scriptresolver.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/scriptresolver.cpp b/src/scriptresolver.cpp index 949ac68aa..8583189dd 100644 --- a/src/scriptresolver.cpp +++ b/src/scriptresolver.cpp @@ -132,6 +132,7 @@ ScriptResolver::handleMsg( const QByteArray& msg ) rp->setBitrate( m.value( "bitrate" ).toUInt() ); rp->setUrl( m.value( "url" ).toString() ); rp->setSize( m.value( "size" ).toUInt() ); + rp->setMimetype( m.value( "mimetype" ).toString() ); rp->setScore( m.value( "score" ).toFloat() * ( (float)weight() / 100.0 ) ); rp->setRID( uuid() ); rp->setFriendlySource( m_name ); From 0aca34a1c2d2b8b3cf20aff2ed83cd58d8cb2e15 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Wed, 16 Mar 2011 04:22:27 +0100 Subject: [PATCH 2/2] * Added extensionToMimetype() to TomahawkUtils. ScriptResolver results now either need a mimetype or an extension. --- src/libtomahawk/utils/tomahawkutils.cpp | 20 ++++++++++++++++++++ src/libtomahawk/utils/tomahawkutils.h | 15 ++++++++------- src/musicscanner.cpp | 21 ++++++++------------- src/musicscanner.h | 6 +++--- src/scriptresolver.cpp | 10 +++++++++- 5 files changed, 48 insertions(+), 24 deletions(-) diff --git a/src/libtomahawk/utils/tomahawkutils.cpp b/src/libtomahawk/utils/tomahawkutils.cpp index 03b7e9161..ac766b178 100644 --- a/src/libtomahawk/utils/tomahawkutils.cpp +++ b/src/libtomahawk/utils/tomahawkutils.cpp @@ -227,6 +227,26 @@ filesizeToString( unsigned int size ) } +QString +extensionToMimetype( const QString& extension ) +{ + static QMap s_ext2mime; + if ( s_ext2mime.isEmpty() ) + { + s_ext2mime.insert( "mp3", "audio/mpeg" ); + s_ext2mime.insert( "ogg", "application/ogg" ); + s_ext2mime.insert( "flac", "audio/flac" ); + s_ext2mime.insert( "mpc", "audio/x-musepack" ); + s_ext2mime.insert( "wma", "audio/x-ms-wma" ); + s_ext2mime.insert( "aac", "audio/mp4" ); + s_ext2mime.insert( "m4a", "audio/mp4" ); + s_ext2mime.insert( "mp4", "audio/mp4" ); + } + + return s_ext2mime.value( extension, "unknown" ); +} + + QPixmap createDragPixmap( int itemCount ) { diff --git a/src/libtomahawk/utils/tomahawkutils.h b/src/libtomahawk/utils/tomahawkutils.h index 4161a8cde..5c1b68eaf 100644 --- a/src/libtomahawk/utils/tomahawkutils.h +++ b/src/libtomahawk/utils/tomahawkutils.h @@ -31,20 +31,20 @@ namespace TomahawkUtils public: explicit DNSResolver(); ~DNSResolver() {} - + void resolve( QString& host, QString type ); - + signals: void result( QString& result ); - + public slots: void resultsReady(); - + private: JDnsShared* m_dnsShared; JDnsSharedRequest* m_dnsSharedRequest; }; - + class DLLEXPORT Sleep : public QThread { public: @@ -61,14 +61,15 @@ namespace TomahawkUtils QThread::usleep( usecs ); } }; - + DLLEXPORT QDir appConfigDir(); DLLEXPORT QDir appDataDir(); DLLEXPORT QDir appLogDir(); - + DLLEXPORT QString timeToString( int seconds ); DLLEXPORT QString ageToString( const QDateTime& time ); DLLEXPORT QString filesizeToString( unsigned int size ); + DLLEXPORT QString extensionToMimetype( const QString& extension ); DLLEXPORT QPixmap createDragPixmap( int itemCount = 1 ); diff --git a/src/musicscanner.cpp b/src/musicscanner.cpp index 0bddbde6c..c92231113 100644 --- a/src/musicscanner.cpp +++ b/src/musicscanner.cpp @@ -24,7 +24,7 @@ DirLister::scanDir( QDir dir, int depth ) QFileInfoList dirs; const uint mtime = QFileInfo( dir.absolutePath() ).lastModified().toUTC().toTime_t(); m_newdirmtimes.insert( dir.absolutePath(), mtime ); - + if ( m_dirmtimes.contains( dir.absolutePath() ) && mtime == m_dirmtimes.value( dir.absolutePath() ) ) { // dont scan this dir, unchanged since last time. @@ -33,7 +33,7 @@ DirLister::scanDir( QDir dir, int depth ) { if ( m_dirmtimes.contains( dir.absolutePath() ) ) Database::instance()->enqueue( QSharedPointer( new DatabaseCommand_DeleteFiles( dir, SourceList::instance()->getLocal() ) ) ); - + dir.setFilter( QDir::Files | QDir::Readable | QDir::NoDotAndDotDot ); dir.setSorting( QDir::Name ); dirs = dir.entryInfoList(); @@ -44,7 +44,7 @@ DirLister::scanDir( QDir dir, int depth ) } dir.setFilter( QDir::Dirs | QDir::Readable | QDir::NoDotAndDotDot ); dirs = dir.entryInfoList(); - + foreach( const QFileInfo& di, dirs ) { scanDir( di.absoluteFilePath(), depth + 1 ); @@ -59,19 +59,14 @@ MusicScanner::MusicScanner( const QString& dir, quint32 bs ) , m_dirLister( 0 ) , m_dirListerThreadController( 0 ) { - m_ext2mime.insert( "mp3", "audio/mpeg" ); + m_ext2mime.insert( "mp3", TomahawkUtils::extensionToMimetype( "mp3" ) ); #ifndef NO_OGG - m_ext2mime.insert( "ogg", "application/ogg" ); + m_ext2mime.insert( "ogg", TomahawkUtils::extensionToMimetype( "ogg" ) ); #endif - #ifndef NO_FLAC - m_ext2mime.insert( "flac", "audio/flac" ); + m_ext2mime.insert( "flac", TomahawkUtils::extensionToMimetype( "flac" ) ); #endif - - // m_ext2mime.insert( "aac", "audio/mp4" ); - // m_ext2mime.insert( "m4a", "audio/mp4" ); - // m_ext2mime.insert( "mp4", "audio/mp4" ); } @@ -82,13 +77,13 @@ MusicScanner::~MusicScanner() if( m_dirListerThreadController ) { m_dirListerThreadController->quit(); - + while( !m_dirListerThreadController->isFinished() ) { QCoreApplication::processEvents( QEventLoop::AllEvents, 200 ); TomahawkUtils::Sleep::msleep( 100 ); } - + if( m_dirLister ) { delete m_dirLister; diff --git a/src/musicscanner.h b/src/musicscanner.h index 86aedfbb7..0787f5486 100644 --- a/src/musicscanner.h +++ b/src/musicscanner.h @@ -74,7 +74,7 @@ private slots: private: QString m_dir; - QMap m_ext2mime; // eg: mp3 -> audio/mpeg + QMap m_ext2mime; // eg: mp3 -> audio/mpeg unsigned int m_scanned; unsigned int m_skipped; @@ -82,10 +82,10 @@ private: QMap m_dirmtimes; QMap m_newdirmtimes; - + QList m_scannedfiles; quint32 m_batchsize; - + DirLister* m_dirLister; QThread* m_dirListerThreadController; }; diff --git a/src/scriptresolver.cpp b/src/scriptresolver.cpp index 8583189dd..4f6b43526 100644 --- a/src/scriptresolver.cpp +++ b/src/scriptresolver.cpp @@ -7,6 +7,7 @@ #include "pipeline.h" #include "sourcelist.h" #include "functimeout.h" +#include "utils/tomahawkutils.h" ScriptResolver::ScriptResolver( const QString& exe ) @@ -132,10 +133,17 @@ ScriptResolver::handleMsg( const QByteArray& msg ) rp->setBitrate( m.value( "bitrate" ).toUInt() ); rp->setUrl( m.value( "url" ).toString() ); rp->setSize( m.value( "size" ).toUInt() ); - rp->setMimetype( m.value( "mimetype" ).toString() ); rp->setScore( m.value( "score" ).toFloat() * ( (float)weight() / 100.0 ) ); rp->setRID( uuid() ); rp->setFriendlySource( m_name ); + + rp->setMimetype( m.value( "mimetype" ).toString() ); + if ( rp->mimetype().isEmpty() ) + { + rp->setMimetype( TomahawkUtils::extensionToMimetype( m.value( "extension" ).toString() ) ); + Q_ASSERT( !rp->mimetype().isEmpty() ); + } + results << rp; }