From a66fcc5749595738575338da19c432f7602f8581 Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Sun, 9 May 2021 21:27:22 +0000 Subject: cue: using detected charset for CUE editor git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@9998 90c681e8-e032-0410-971d-27865f9a5e38 --- src/plugins/Input/cue/cuemetadatamodel.cpp | 47 ++++++++++++++++++++++++++++-- src/plugins/Input/cue/cuemetadatamodel.h | 2 ++ 2 files changed, 46 insertions(+), 3 deletions(-) (limited to 'src') 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 -#include +#include +#include #include +#ifdef WITH_ENCA +#include +#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 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 -- cgit v1.2.3-13-gbd6f