diff options
Diffstat (limited to 'src/plugins/Input/cue')
| -rw-r--r-- | src/plugins/Input/cue/cuemetadatamodel.cpp | 47 | ||||
| -rw-r--r-- | src/plugins/Input/cue/cuemetadatamodel.h | 2 |
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 |
