From 87cad14c63df542097174455a0f2bb7d53a890ba Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Thu, 20 Jan 2011 17:32:05 +0000 Subject: improved cue parser (patch by Evgeny Gleyzerman) (Closes issue 375) git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@2019 90c681e8-e032-0410-971d-27865f9a5e38 --- src/plugins/Input/cue/cueparser.cpp | 53 +++++++++++++++++++++- src/plugins/Input/cue/cueparser.h | 3 +- src/plugins/Input/cue/settingsdialog.cpp | 2 + src/plugins/Input/cue/settingsdialog.ui | 22 +++++++-- .../Input/cue/translations/cue_plugin_cs.ts | 16 +++++-- .../Input/cue/translations/cue_plugin_de.ts | 16 +++++-- .../Input/cue/translations/cue_plugin_es.ts | 16 +++++-- .../Input/cue/translations/cue_plugin_it.ts | 16 +++++-- .../Input/cue/translations/cue_plugin_ja.ts | 16 +++++-- .../Input/cue/translations/cue_plugin_lt.ts | 16 +++++-- .../Input/cue/translations/cue_plugin_nl.ts | 16 +++++-- .../Input/cue/translations/cue_plugin_pl.ts | 16 +++++-- .../Input/cue/translations/cue_plugin_ru.ts | 16 +++++-- .../Input/cue/translations/cue_plugin_tr.ts | 16 +++++-- .../Input/cue/translations/cue_plugin_uk_UA.ts | 16 +++++-- .../Input/cue/translations/cue_plugin_zh_CN.ts | 16 +++++-- .../Input/cue/translations/cue_plugin_zh_TW.ts | 16 +++++-- src/ui/txt/thanks_en.txt | 1 + src/ui/txt/thanks_ru.txt | 1 + 19 files changed, 245 insertions(+), 45 deletions(-) (limited to 'src') diff --git a/src/plugins/Input/cue/cueparser.cpp b/src/plugins/Input/cue/cueparser.cpp index c21276229..3cb308ef5 100644 --- a/src/plugins/Input/cue/cueparser.cpp +++ b/src/plugins/Input/cue/cueparser.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2008-2010 by Ilya Kotov * + * Copyright (C) 2008-2011 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -20,6 +20,7 @@ #include #include +#include #include #include #include @@ -44,6 +45,7 @@ CUEParser::CUEParser(const QString &fileName) QTextCodec *codec = QTextCodec::codecForName(settings.value("encoding","ISO-8859-1").toByteArray ()); if(!codec) codec = QTextCodec::codecForName("UTF-8"); + m_dirty = settings.value("dirty_cue", false).toBool(); #ifdef WITH_ENCA EncaAnalyser analyser = 0; if(settings.value("use_enca", false).toBool()) @@ -88,7 +90,7 @@ CUEParser::CUEParser(const QString &fileName) else m_infoList.last().setLength(0); } - file_path = QFileInfo(fileName).dir().filePath(words[1]); + file_path = getDirtyPath(fileName, QFileInfo(fileName).dir().filePath(words[1])); new_file = true; } @@ -247,3 +249,50 @@ qint64 CUEParser::getLength(const QString &str) return (qint64)list.at(0).toInt()*60000 + list.at(1).toInt()*1000 + list.at(2).toInt()*1000/75; return 0; } + +QString CUEParser::getDirtyPath(const QString &cue, const QString &path) +{ + + if (Decoder::findByPath(path) || ! m_dirty) + return path; + + QStringList candidates; + QDirIterator it(QFileInfo(path).dir().path(), QDir::Files); + while (it.hasNext()) + { + it.next(); + QString f = it.filePath(); + if ((f != cue) && Decoder::findByPath(f)) + candidates.push_back(f); + } + + if (candidates.empty()) + return path; + else if (candidates.count() == 1) + return candidates.first(); + + int dot = cue.lastIndexOf('.'); + if (dot != -1) + { + QRegExp r(QRegExp::escape(cue.left(dot)) + "\\.[^\\.]+$"); + + int index = candidates.indexOf(r); + int rindex = candidates.lastIndexOf(r); + + if ((index != -1) && (index == rindex)) + return candidates[index]; + } + dot = path.lastIndexOf('.'); + if (dot != -1) + { + QRegExp r(QRegExp::escape(path.left(dot)) + "\\.[^\\.]+$"); + + int index = candidates.indexOf(r); + int rindex = candidates.lastIndexOf(r); + + if ((index != -1) && (index == rindex)) + return candidates[index]; + } + + return path; +} diff --git a/src/plugins/Input/cue/cueparser.h b/src/plugins/Input/cue/cueparser.h index ebba82224..61beef48c 100644 --- a/src/plugins/Input/cue/cueparser.h +++ b/src/plugins/Input/cue/cueparser.h @@ -51,9 +51,10 @@ private: QList m_infoList; QList m_offsets; QStringList m_files; + bool m_dirty; QStringList splitLine(const QString &line); qint64 getLength(const QString &str); - + QString getDirtyPath(const QString &cue, const QString &path); }; #endif diff --git a/src/plugins/Input/cue/settingsdialog.cpp b/src/plugins/Input/cue/settingsdialog.cpp index 4ed9cfb5f..9b81ac7a3 100644 --- a/src/plugins/Input/cue/settingsdialog.cpp +++ b/src/plugins/Input/cue/settingsdialog.cpp @@ -53,6 +53,7 @@ SettingsDialog::SettingsDialog(QWidget *parent) #else ui.autoCharsetCheckBox->setEnabled(false); #endif + ui.dirtyCueCheckBox->setChecked(settings.value("dirty_cue", false).toBool()); settings.endGroup(); } @@ -68,6 +69,7 @@ void SettingsDialog::accept() settings.setValue("use_enca", ui.autoCharsetCheckBox->isChecked()); settings.setValue("enca_lang", ui.encaAnalyserComboBox->currentText()); #endif + settings.setValue("dirty_cue", ui.dirtyCueCheckBox->isChecked()); settings.endGroup(); QDialog::accept(); } diff --git a/src/plugins/Input/cue/settingsdialog.ui b/src/plugins/Input/cue/settingsdialog.ui index 0130c9650..3dcba32fe 100644 --- a/src/plugins/Input/cue/settingsdialog.ui +++ b/src/plugins/Input/cue/settingsdialog.ui @@ -6,14 +6,14 @@ 0 0 - 224 - 155 + 255 + 205 CUE Plugin Settings - + 6 @@ -23,6 +23,22 @@ 6 + + + + Common settings + + + + + + Automatic file detection + + + + + + diff --git a/src/plugins/Input/cue/translations/cue_plugin_cs.ts b/src/plugins/Input/cue/translations/cue_plugin_cs.ts index c995482ed..c685223d1 100644 --- a/src/plugins/Input/cue/translations/cue_plugin_cs.ts +++ b/src/plugins/Input/cue/translations/cue_plugin_cs.ts @@ -38,21 +38,31 @@ + Common settings + + + + + Automatic file detection + + + + CUE encoding Kódování CUE - + Automatic charset detection Autodetekce znakové sady - + Language: Jazyk: - + Default encoding: Výchozí kódování: diff --git a/src/plugins/Input/cue/translations/cue_plugin_de.ts b/src/plugins/Input/cue/translations/cue_plugin_de.ts index e91b81bb0..e59135a24 100644 --- a/src/plugins/Input/cue/translations/cue_plugin_de.ts +++ b/src/plugins/Input/cue/translations/cue_plugin_de.ts @@ -38,21 +38,31 @@ + Common settings + + + + + Automatic file detection + + + + CUE encoding CUE-Kodierung - + Automatic charset detection Automatisches Erkennen des Zeichensatzes - + Language: Sprache: - + Default encoding: Standardkodierung: diff --git a/src/plugins/Input/cue/translations/cue_plugin_es.ts b/src/plugins/Input/cue/translations/cue_plugin_es.ts index 055564d10..da9e032bf 100644 --- a/src/plugins/Input/cue/translations/cue_plugin_es.ts +++ b/src/plugins/Input/cue/translations/cue_plugin_es.ts @@ -38,21 +38,31 @@ + Common settings + + + + + Automatic file detection + + + + CUE encoding Codificación CUE - + Automatic charset detection Detección automática del juego de caracteres - + Language: Lenguaje: - + Default encoding: Codificación predeterminada diff --git a/src/plugins/Input/cue/translations/cue_plugin_it.ts b/src/plugins/Input/cue/translations/cue_plugin_it.ts index 8a7cf4eea..7af05d265 100644 --- a/src/plugins/Input/cue/translations/cue_plugin_it.ts +++ b/src/plugins/Input/cue/translations/cue_plugin_it.ts @@ -38,21 +38,31 @@ + Common settings + + + + + Automatic file detection + + + + CUE encoding Codifica CUE - + Automatic charset detection Rilevazione automaticamente del set di caratteri - + Language: Lingua: - + Default encoding: Codifica predefeinita diff --git a/src/plugins/Input/cue/translations/cue_plugin_ja.ts b/src/plugins/Input/cue/translations/cue_plugin_ja.ts index c0701929d..839870e69 100644 --- a/src/plugins/Input/cue/translations/cue_plugin_ja.ts +++ b/src/plugins/Input/cue/translations/cue_plugin_ja.ts @@ -38,21 +38,31 @@ + Common settings + + + + + Automatic file detection + + + + CUE encoding CUE 文字符号化形式 - + Automatic charset detection 文字セット自動検知 - + Language: 言語: - + Default encoding: 文字符号化形式(初期設定値): diff --git a/src/plugins/Input/cue/translations/cue_plugin_lt.ts b/src/plugins/Input/cue/translations/cue_plugin_lt.ts index c1a87b4bf..4022b4c1a 100644 --- a/src/plugins/Input/cue/translations/cue_plugin_lt.ts +++ b/src/plugins/Input/cue/translations/cue_plugin_lt.ts @@ -38,21 +38,31 @@ + Common settings + + + + + Automatic file detection + + + + CUE encoding CUE kodavimas - + Automatic charset detection Automatinis koduotės aptikimas - + Language: Kalba: - + Default encoding: Kodavinas pagal nutylėjimą: diff --git a/src/plugins/Input/cue/translations/cue_plugin_nl.ts b/src/plugins/Input/cue/translations/cue_plugin_nl.ts index 0dc0eb41e..a56f39321 100644 --- a/src/plugins/Input/cue/translations/cue_plugin_nl.ts +++ b/src/plugins/Input/cue/translations/cue_plugin_nl.ts @@ -38,21 +38,31 @@ + Common settings + + + + + Automatic file detection + + + + CUE encoding CUE codering - + Automatic charset detection Automatische tekenset detectie - + Language: Taal: - + Default encoding: Standaard codering: diff --git a/src/plugins/Input/cue/translations/cue_plugin_pl.ts b/src/plugins/Input/cue/translations/cue_plugin_pl.ts index 4a884cab5..c1e9ac826 100644 --- a/src/plugins/Input/cue/translations/cue_plugin_pl.ts +++ b/src/plugins/Input/cue/translations/cue_plugin_pl.ts @@ -38,21 +38,31 @@ + Common settings + + + + + Automatic file detection + + + + CUE encoding Kodowanie CUE - + Automatic charset detection Automatyczne wykrywanie kodowania - + Language: Język: - + Default encoding: Domyślne kodowanie: diff --git a/src/plugins/Input/cue/translations/cue_plugin_ru.ts b/src/plugins/Input/cue/translations/cue_plugin_ru.ts index 6f467534b..040cc9ab4 100644 --- a/src/plugins/Input/cue/translations/cue_plugin_ru.ts +++ b/src/plugins/Input/cue/translations/cue_plugin_ru.ts @@ -38,21 +38,31 @@ + Common settings + + + + + Automatic file detection + + + + CUE encoding Кодировка CUE - + Automatic charset detection Определять кодировку автоматически - + Language: Язык: - + Default encoding: Кодировка по умолчанию: diff --git a/src/plugins/Input/cue/translations/cue_plugin_tr.ts b/src/plugins/Input/cue/translations/cue_plugin_tr.ts index 38f2425d8..7fdf19745 100644 --- a/src/plugins/Input/cue/translations/cue_plugin_tr.ts +++ b/src/plugins/Input/cue/translations/cue_plugin_tr.ts @@ -38,21 +38,31 @@ - CUE encoding + Common settings - Automatic charset detection + Automatic file detection + CUE encoding + + + + + Automatic charset detection + + + + Language: - + Default encoding: diff --git a/src/plugins/Input/cue/translations/cue_plugin_uk_UA.ts b/src/plugins/Input/cue/translations/cue_plugin_uk_UA.ts index 4b76a2b98..0db29162d 100644 --- a/src/plugins/Input/cue/translations/cue_plugin_uk_UA.ts +++ b/src/plugins/Input/cue/translations/cue_plugin_uk_UA.ts @@ -38,21 +38,31 @@ + Common settings + + + + + Automatic file detection + + + + CUE encoding Кодування CUE - + Automatic charset detection Визначати кодування атвоматично - + Language: Мова: - + Default encoding: Кодування за умовчанням: diff --git a/src/plugins/Input/cue/translations/cue_plugin_zh_CN.ts b/src/plugins/Input/cue/translations/cue_plugin_zh_CN.ts index beed1d6dd..761dae53a 100644 --- a/src/plugins/Input/cue/translations/cue_plugin_zh_CN.ts +++ b/src/plugins/Input/cue/translations/cue_plugin_zh_CN.ts @@ -38,21 +38,31 @@ - CUE encoding + Common settings - Automatic charset detection + Automatic file detection + CUE encoding + + + + + Automatic charset detection + + + + Language: - + Default encoding: diff --git a/src/plugins/Input/cue/translations/cue_plugin_zh_TW.ts b/src/plugins/Input/cue/translations/cue_plugin_zh_TW.ts index b7e0bb081..098682ef1 100644 --- a/src/plugins/Input/cue/translations/cue_plugin_zh_TW.ts +++ b/src/plugins/Input/cue/translations/cue_plugin_zh_TW.ts @@ -38,21 +38,31 @@ - CUE encoding + Common settings - Automatic charset detection + Automatic file detection + CUE encoding + + + + + Automatic charset detection + + + + Language: - + Default encoding: diff --git a/src/ui/txt/thanks_en.txt b/src/ui/txt/thanks_en.txt index 987e0c1ea..87ec5f050 100644 --- a/src/ui/txt/thanks_en.txt +++ b/src/ui/txt/thanks_en.txt @@ -6,6 +6,7 @@ Thanks to: Avihay Baratz - auto stop feature, bug fixes Csaba Hruska - ffmpeg plugin fixes Dmitry Kostin - iso.wv support + Evgeny Gleyzerman - cue parsing improvements Gennadi Motsyo - bug reports Vadim Kalinnikov - project hosting Erik Ölsar - skinned cursors, ui improvements diff --git a/src/ui/txt/thanks_ru.txt b/src/ui/txt/thanks_ru.txt index 583623642..523d94e59 100644 --- a/src/ui/txt/thanks_ru.txt +++ b/src/ui/txt/thanks_ru.txt @@ -6,6 +6,7 @@ Avihay Baratz - опции авто-остановки, исправления ошибок Csaba Hruska - исправления в модуле ffmpeg Dmitry Kostin - поддержка iso.wv + Evgeny Gleyzerman - улучшение поддержки cue Геннадий Моцьо - сообщения об ошибках Вадим Калинников - хоcтинг проекта Erik Ölsar - растровые курсоры, улучшения в интерфейсе пользователя -- cgit v1.2.3-13-gbd6f