mirror of
https://github.com/tomahawk-player/tomahawk.git
synced 2025-08-07 06:36:55 +02:00
* Added static MusicScanner::readTags( QFileInfo ), returning a variant-map filled with a file's tags. Wrapped by the regular ::readFile( QFileInfo ).
This commit is contained in:
@@ -139,10 +139,6 @@ MusicScanner::MusicScanner( MusicScanner::ScanMode scanMode, const QStringList&
|
|||||||
, m_batchsize( bs )
|
, m_batchsize( bs )
|
||||||
, m_dirListerThreadController( 0 )
|
, m_dirListerThreadController( 0 )
|
||||||
{
|
{
|
||||||
foreach ( const QString& extension, TomahawkUtils::supportedExtensions() )
|
|
||||||
{
|
|
||||||
m_ext2mime.insert( extension, TomahawkUtils::extensionToMimetype( extension ) );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -347,22 +343,13 @@ MusicScanner::scanFile( const QFileInfo& fi )
|
|||||||
|
|
||||||
|
|
||||||
QVariant
|
QVariant
|
||||||
MusicScanner::readFile( const QFileInfo& fi )
|
MusicScanner::readTags( const QFileInfo& fi )
|
||||||
{
|
{
|
||||||
tLog( LOGVERBOSE ) << Q_FUNC_INFO << "Parsing tags for file:" << fi.absoluteFilePath();
|
tLog( LOGVERBOSE ) << Q_FUNC_INFO << "Parsing tags for file:" << fi.absoluteFilePath();
|
||||||
|
|
||||||
const QString suffix = fi.suffix().toLower();
|
const QString suffix = fi.suffix().toLower();
|
||||||
|
if ( !TomahawkUtils::supportedExtensions().contains( suffix ) )
|
||||||
if ( !m_ext2mime.contains( suffix ) )
|
|
||||||
{
|
|
||||||
return QVariantMap(); // invalid extension
|
return QVariantMap(); // invalid extension
|
||||||
}
|
|
||||||
|
|
||||||
if ( m_scanned )
|
|
||||||
if ( m_scanned % 3 == 0 )
|
|
||||||
SourceList::instance()->getLocal()->scanningProgress( m_scanned );
|
|
||||||
if ( m_scanned % 100 == 0 )
|
|
||||||
tDebug( LOGINFO ) << "Scan progress:" << m_scanned << fi.canonicalFilePath();
|
|
||||||
|
|
||||||
#ifdef COMPLEX_TAGLIB_FILENAME
|
#ifdef COMPLEX_TAGLIB_FILENAME
|
||||||
const wchar_t *encodedName = reinterpret_cast< const wchar_t * >( fi.canonicalFilePath().utf16() );
|
const wchar_t *encodedName = reinterpret_cast< const wchar_t * >( fi.canonicalFilePath().utf16() );
|
||||||
@@ -373,15 +360,10 @@ MusicScanner::readFile( const QFileInfo& fi )
|
|||||||
|
|
||||||
TagLib::FileRef f( encodedName );
|
TagLib::FileRef f( encodedName );
|
||||||
if ( f.isNull() || !f.tag() )
|
if ( f.isNull() || !f.tag() )
|
||||||
{
|
|
||||||
m_skippedFiles << fi.canonicalFilePath();
|
|
||||||
m_skipped++;
|
|
||||||
return QVariantMap();
|
return QVariantMap();
|
||||||
}
|
|
||||||
|
|
||||||
int bitrate = 0;
|
int bitrate = 0;
|
||||||
int duration = 0;
|
int duration = 0;
|
||||||
|
|
||||||
Tag* tag = Tag::fromFile( f );
|
Tag* tag = Tag::fromFile( f );
|
||||||
if ( f.audioProperties() )
|
if ( f.audioProperties() )
|
||||||
{
|
{
|
||||||
@@ -398,14 +380,9 @@ MusicScanner::readFile( const QFileInfo& fi )
|
|||||||
track = tag->title().trimmed();
|
track = tag->title().trimmed();
|
||||||
}
|
}
|
||||||
if ( !tag || artist.isEmpty() || track.isEmpty() )
|
if ( !tag || artist.isEmpty() || track.isEmpty() )
|
||||||
{
|
|
||||||
// FIXME: do some clever filename guessing
|
|
||||||
m_skippedFiles << fi.canonicalFilePath();
|
|
||||||
m_skipped++;
|
|
||||||
return QVariantMap();
|
return QVariantMap();
|
||||||
}
|
|
||||||
|
|
||||||
QString mimetype = m_ext2mime.value( suffix );
|
QString mimetype = TomahawkUtils::extensionToMimetype( suffix );
|
||||||
QString url( "file://%1" );
|
QString url( "file://%1" );
|
||||||
|
|
||||||
QVariantMap m;
|
QVariantMap m;
|
||||||
@@ -425,7 +402,31 @@ MusicScanner::readFile( const QFileInfo& fi )
|
|||||||
m["discnumber"] = tag->discNumber();
|
m["discnumber"] = tag->discNumber();
|
||||||
m["hash"] = ""; // TODO
|
m["hash"] = ""; // TODO
|
||||||
|
|
||||||
m_scanned++;
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QVariant
|
||||||
|
MusicScanner::readFile( const QFileInfo& fi )
|
||||||
|
{
|
||||||
|
const QVariant m = readTags( fi );
|
||||||
|
|
||||||
|
if ( m_scanned )
|
||||||
|
if ( m_scanned % 3 == 0 )
|
||||||
|
SourceList::instance()->getLocal()->scanningProgress( m_scanned );
|
||||||
|
if ( m_scanned % 100 == 0 )
|
||||||
|
tDebug( LOGINFO ) << "Scan progress:" << m_scanned << fi.canonicalFilePath();
|
||||||
|
|
||||||
|
if ( m.toMap().isEmpty() )
|
||||||
|
{
|
||||||
|
m_skippedFiles << fi.canonicalFilePath();
|
||||||
|
m_skipped++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_scanned++;
|
||||||
|
}
|
||||||
|
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -102,6 +102,8 @@ public:
|
|||||||
enum ScanMode { DirScan, FileScan };
|
enum ScanMode { DirScan, FileScan };
|
||||||
enum ScanType { None, Full, Normal, File };
|
enum ScanType { None, Full, Normal, File };
|
||||||
|
|
||||||
|
static QVariant readTags( const QFileInfo& fi );
|
||||||
|
|
||||||
MusicScanner( MusicScanner::ScanMode scanMode, const QStringList& paths, quint32 bs = 0 );
|
MusicScanner( MusicScanner::ScanMode scanMode, const QStringList& paths, quint32 bs = 0 );
|
||||||
~MusicScanner();
|
~MusicScanner();
|
||||||
|
|
||||||
@@ -129,7 +131,6 @@ private:
|
|||||||
|
|
||||||
MusicScanner::ScanMode m_scanMode;
|
MusicScanner::ScanMode m_scanMode;
|
||||||
QStringList m_paths;
|
QStringList m_paths;
|
||||||
QMap<QString, QString> m_ext2mime; // eg: mp3 -> audio/mpeg
|
|
||||||
unsigned int m_scanned;
|
unsigned int m_scanned;
|
||||||
unsigned int m_skipped;
|
unsigned int m_skipped;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user