aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Input/mpeg/decodermpegfactory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/Input/mpeg/decodermpegfactory.cpp')
-rw-r--r--src/plugins/Input/mpeg/decodermpegfactory.cpp15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/plugins/Input/mpeg/decodermpegfactory.cpp b/src/plugins/Input/mpeg/decodermpegfactory.cpp
index 3021b6e4f..5cde2dce4 100644
--- a/src/plugins/Input/mpeg/decodermpegfactory.cpp
+++ b/src/plugins/Input/mpeg/decodermpegfactory.cpp
@@ -36,6 +36,7 @@
#include <taglib/id3v2header.h>
#include <taglib/textidentificationframe.h>
#include <taglib/id3v2framefactory.h>
+#include "tagextractor.h"
#include "mpegmetadatamodel.h"
#include "settingsdialog.h"
#ifdef WITH_MAD
@@ -46,7 +47,6 @@
#endif
#include "decodermpegfactory.h"
-
#define CSTR_TO_QSTR(str,utf) codec->toUnicode(str.toCString(utf)).trimmed()
// DecoderMPEGFactory
@@ -56,12 +56,13 @@ DecoderMPEGFactory::DecoderMPEGFactory()
//detecting rusxmms patch
m_using_rusxmms = false;
char str[] = { char(0xF2), char(0xE5), char(0xF1), char(0xF2), '\0'};
- QTextCodec *codec = QTextCodec::codecForName ("windows-1251");
+ QTextCodec *codec = QTextCodec::codecForName("windows-1251");
TagLib::String tstr(str);
if(codec->toUnicode(str) == QString::fromUtf8(tstr.toCString(true)))
{
qDebug("DecoderMADFactory: found taglib with rusxmms patch");
m_using_rusxmms = true;
+ TagExtractor::setForceUtf8(m_using_rusxmms);
}
}
@@ -245,7 +246,7 @@ QList<TrackInfo *> DecoderMPEGFactory::createPlayList(const QString &path, Track
tag = fileRef.ID3v1Tag();
break;
case SettingsDialog::ID3v2:
- codecName = settings.value("ID3v2_encoding","UTF-8").toByteArray ();
+ codecName = settings.value("ID3v2_encoding","UTF-8").toByteArray();
tag = fileRef.ID3v2Tag();
break;
case SettingsDialog::APE:
@@ -266,7 +267,15 @@ QList<TrackInfo *> DecoderMPEGFactory::createPlayList(const QString &path, Track
if (tag && codec && !tag->isEmpty())
{
+ if((tag == fileRef.ID3v1Tag() || tag == fileRef.ID3v2Tag()) && !m_using_rusxmms &&
+ settings.value("detect_encoding", false).toBool())
+ {
+ QTextCodec *detectedCodec = TagExtractor::detectCharset(tag);
+ codec = detectedCodec ? detectedCodec : codec;
+ }
+
bool utf = codec->name().contains("UTF");
+
QMap<Qmmp::MetaData, QString> tags = {
{ Qmmp::ARTIST, CSTR_TO_QSTR(tag->artist(), utf) },
{ Qmmp::ALBUM, CSTR_TO_QSTR(tag->album(), utf) },