aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2016-08-16 11:25:39 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2016-08-16 11:25:39 +0000
commitac58d0e3a75c291d868d70d8d0bcae5cca9fbcd7 (patch)
treec7e8a189c9cc4dc38575571cc59520fb6e87c0bb
parentfe09b0a7aa246f1ee4c274585acb32d828068ab4 (diff)
downloadqmmp-ac58d0e3a75c291d868d70d8d0bcae5cca9fbcd7.tar.gz
qmmp-ac58d0e3a75c291d868d70d8d0bcae5cca9fbcd7.tar.bz2
qmmp-ac58d0e3a75c291d868d70d8d0bcae5cca9fbcd7.zip
fixed file type determination by content
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@6675 90c681e8-e032-0410-971d-27865f9a5e38
-rw-r--r--src/qmmp/decoder.cpp71
1 files changed, 37 insertions, 34 deletions
diff --git a/src/qmmp/decoder.cpp b/src/qmmp/decoder.cpp
index 1170b0afe..99d12faec 100644
--- a/src/qmmp/decoder.cpp
+++ b/src/qmmp/decoder.cpp
@@ -149,6 +149,7 @@ DecoderFactory *Decoder::findByFilePath(const QString &path, bool useContent)
{
loadPlugins();
DecoderFactory *fact = 0;
+ //detect by content if enabled
if(useContent)
{
QFile file(path);
@@ -165,57 +166,59 @@ DecoderFactory *Decoder::findByFilePath(const QString &path, bool useContent)
fact = item->decoderFactory();
- if(fact && fact->properties().noInput && !fact->properties().protocols.contains("file"))
+ if(fact->properties().noInput && !fact->properties().protocols.contains("file"))
continue;
if (fact->canDecode(&file))
return fact;
}
- return 0;
+ fact = 0;
}
- else
+
+ QList<DecoderFactory*> filered;
+ foreach (QmmpPluginCache *item, *m_cache)
{
- QList<DecoderFactory*> filered;
- foreach (QmmpPluginCache *item, *m_cache)
- {
- if(m_disabledNames.contains(item->shortName()))
- continue;
+ if(m_disabledNames.contains(item->shortName()))
+ continue;
- DecoderFactory *fact = item->decoderFactory();
+ DecoderFactory *fact = item->decoderFactory();
- foreach(QString filter, fact->properties().filters)
+ foreach(QString filter, fact->properties().filters)
+ {
+ QRegExp regexp(filter, Qt::CaseInsensitive, QRegExp::Wildcard);
+ if (regexp.exactMatch(path))
{
- QRegExp regexp(filter, Qt::CaseInsensitive, QRegExp::Wildcard);
- if (regexp.exactMatch(path))
- {
- filered.append(fact);
- break;
- }
+ filered.append(fact);
+ break;
}
}
+ }
- if(filered.isEmpty())
- return 0;
-
- if(filered.size() == 1)
- return filered.at(0);
+ if(filered.isEmpty())
+ return 0;
- //more than one factories with same filters
- //try to determine by content
- QFile file(path);
- if(!file.open(QIODevice::ReadOnly))
- {
- qWarning("Decoder: file open error: %s", qPrintable(file.errorString()));
- return 0;
- }
+ if(filered.size() == 1)
+ return filered.at(0);
- foreach (fact, filered)
- {
- if(fact->canDecode(&file))
- return fact;
- }
+ //more than one factories with same filters
+ //try to determine by content
+ QFile file(path);
+ if(!file.open(QIODevice::ReadOnly))
+ {
+ qWarning("Decoder: file open error: %s", qPrintable(file.errorString()));
return 0;
}
+
+ foreach (fact, filered)
+ {
+ if(fact->canDecode(&file))
+ return fact;
+ }
+
+ if(!filered.isEmpty() && !useContent) //fallback
+ return filered.first();
+
+ return 0;
}
DecoderFactory *Decoder::findByMime(const QString& type)