aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/Input/cue/cuemetadatamodel.cpp47
-rw-r--r--src/plugins/Input/cue/cuemetadatamodel.h2
2 files changed, 46 insertions, 3 deletions
diff --git a/src/plugins/Input/cue/cuemetadatamodel.cpp b/src/plugins/Input/cue/cuemetadatamodel.cpp
index 59a582242..fd545f6ed 100644
--- a/src/plugins/Input/cue/cuemetadatamodel.cpp
+++ b/src/plugins/Input/cue/cuemetadatamodel.cpp
@@ -19,8 +19,12 @@
***************************************************************************/
#include <QFileInfo>
-#include <QtDebug>
+#include <QSettings>
+#include <QTextCodec>
#include <qmmp/metadatamanager.h>
+#ifdef WITH_ENCA
+#include <enca.h>
+#endif
#include "cuefile.h"
#include "cuemetadatamodel.h"
@@ -59,16 +63,53 @@ QString CUEMetaDataModel::coverPath() const
QString CUEMetaDataModel::cue() const
{
+ if(m_codec)
+ {
+ m_codec = nullptr;
+ }
+
QFile file(m_cueFilePath);
file.open(QIODevice::ReadOnly);
- return QString::fromUtf8(file.readAll());
+ QByteArray data = file.readAll();
+
+ QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
+ settings.beginGroup("CUE");
+#ifdef WITH_ENCA
+ EncaAnalyser analyser = nullptr;
+ if(settings.value("use_enca", false).toBool())
+ {
+ analyser = enca_analyser_alloc(settings.value("enca_lang").toByteArray ().constData());
+
+ if(analyser)
+ {
+ enca_set_threshold(analyser, 1.38);
+ EncaEncoding encoding = enca_analyse(analyser, (uchar *)data.constData(), data.size());
+ if(encoding.charset != ENCA_CS_UNKNOWN)
+ {
+ m_codec = QTextCodec::codecForName(enca_charset_name(encoding.charset,ENCA_NAME_STYLE_ENCA));
+ }
+ enca_analyser_free(analyser);
+ }
+ }
+#endif
+ if(!m_codec)
+ m_codec = QTextCodec::codecForName(settings.value("encoding", "UTF-8").toByteArray());
+ settings.endGroup();
+
+ return m_codec->toUnicode(data);
}
void CUEMetaDataModel::setCue(const QString &content)
{
+ if(!m_codec)
+ {
+ QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
+ m_codec = QTextCodec::codecForName(settings.value("CUE/encoding", "UTF-8").toByteArray());
+ }
+
QFile file(m_cueFilePath);
file.open(QIODevice::WriteOnly);
- file.write(content.toUtf8());
+ file.write(m_codec->fromUnicode(content));
}
void CUEMetaDataModel::removeCue()
diff --git a/src/plugins/Input/cue/cuemetadatamodel.h b/src/plugins/Input/cue/cuemetadatamodel.h
index e42e7385e..568acfa23 100644
--- a/src/plugins/Input/cue/cuemetadatamodel.h
+++ b/src/plugins/Input/cue/cuemetadatamodel.h
@@ -24,6 +24,7 @@
#include <qmmp/metadatamodel.h>
class CueFile;
+class QTextCodec;
class CUEMetaDataModel : public MetaDataModel
{
@@ -38,6 +39,7 @@ public:
private:
QString m_dataFilePath, m_cueFilePath;
+ mutable QTextCodec *m_codec = nullptr;
};
#endif // CUEMETADATAMODEL_H