diff options
| -rw-r--r-- | src/plugins/Input/sid/decoder_sid.cpp | 37 | ||||
| -rw-r--r-- | src/plugins/Input/sid/decoder_sid.h | 4 | ||||
| -rw-r--r-- | src/plugins/Input/sid/decodersidfactory.cpp | 19 | ||||
| -rw-r--r-- | src/plugins/Input/sid/decodersidfactory.h | 6 | ||||
| -rw-r--r-- | src/plugins/Input/sid/settingsdialog.cpp | 11 | ||||
| -rw-r--r-- | src/plugins/Input/sid/settingsdialog.h | 7 | ||||
| -rw-r--r-- | src/plugins/Input/sid/sidhelper.cpp | 6 | ||||
| -rw-r--r-- | src/plugins/Input/sid/sidhelper.h | 4 |
8 files changed, 60 insertions, 34 deletions
diff --git a/src/plugins/Input/sid/decoder_sid.cpp b/src/plugins/Input/sid/decoder_sid.cpp index e038c8e96..c79b8bf70 100644 --- a/src/plugins/Input/sid/decoder_sid.cpp +++ b/src/plugins/Input/sid/decoder_sid.cpp @@ -32,10 +32,12 @@ #include "decoder_sid.h" // Decoder class -DecoderSID::DecoderSID(const QString &url) : Decoder() +DecoderSID::DecoderSID(SidDatabase *db, const QString &url) : Decoder() { + m_db = db; m_url = url; m_player = new sidplayfp(); + m_length = 0; } DecoderSID::~DecoderSID() @@ -88,9 +90,17 @@ bool DecoderSID::initialize() //read settings QSettings settings(Qmmp::configFile(), QSettings::IniFormat); settings.beginGroup("SID"); - settings.value("use_hvsc", false).toBool(); - QString hvsc_default_path = QFileInfo(Qmmp::configFile()).absolutePath() + "/Songlengths.txt"; - settings.value("hvsc_path", hvsc_default_path).toString(); + if(settings.value("use_hvsc", false).toBool()) + { + char md5[SidTune::MD5_LENGTH]; + tune->createMD5(md5); + m_length = m_db->length(md5, track); + } + + if(m_length <= 0) + m_length = settings.value("song_length", 180).toInt(); + + qDebug("DecoderSID: song length: %d", m_length); sidbuilder *rs = 0; if(settings.value("engine", "residfp").toString() == "residfp") @@ -128,21 +138,6 @@ bool DecoderSID::initialize() configure(44100, 2); qDebug("DecoderSID: initialize succes"); - - - char md5[SidTune::MD5_LENGTH]; - tune->createMD5(md5); - - SidDatabase database; - - database.open("/home/user/.qmmp/Songlengths.txt"); - - - - qDebug("length = %d", database.length(md5, track)); - m_length = database.length(md5, track); - - return true; } @@ -163,7 +158,7 @@ int DecoderSID::bitrate() qint64 DecoderSID::read(char *data, qint64 size) { - if(m_player->time() > m_length) - return 0; + //if(m_player->time() > m_length) + // return 0; return m_player->play((short *)data, size/2) * 2; } diff --git a/src/plugins/Input/sid/decoder_sid.h b/src/plugins/Input/sid/decoder_sid.h index 04c2cbaa1..05c70660a 100644 --- a/src/plugins/Input/sid/decoder_sid.h +++ b/src/plugins/Input/sid/decoder_sid.h @@ -24,6 +24,7 @@ #include <qmmp/decoder.h> class sidplayfp; +class SidDatabase; /** @author Ilya Kotov <forkotov02@hotmail.ru> @@ -31,7 +32,7 @@ class sidplayfp; class DecoderSID : public Decoder { public: - DecoderSID(const QString &url); + DecoderSID(SidDatabase *db, const QString &url); virtual ~DecoderSID(); // Standard Decoder API @@ -45,6 +46,7 @@ private: qint64 m_totalTime; QString m_url; sidplayfp *m_player; + SidDatabase *m_db; int m_length; }; diff --git a/src/plugins/Input/sid/decodersidfactory.cpp b/src/plugins/Input/sid/decodersidfactory.cpp index f0042032b..3795be74c 100644 --- a/src/plugins/Input/sid/decodersidfactory.cpp +++ b/src/plugins/Input/sid/decodersidfactory.cpp @@ -29,6 +29,19 @@ // DecoderSIDFactory +DecoderSIDFactory::DecoderSIDFactory() +{ + QSettings settings(Qmmp::configFile(), QSettings::IniFormat); + settings.beginGroup("SID"); + if(settings.value("use_hvsc", false).toBool()) + { + QString default_path = QFileInfo(Qmmp::configFile()).absolutePath() + "/Songlengths.txt"; + if(!m_db.open(qPrintable(settings.value("hvsc_path", default_path).toString()))) + qWarning("DecoderSIDFactory: %s", m_db.error()); + } + settings.endGroup(); +} + bool DecoderSIDFactory::supports(const QString &source) const { foreach(QString filter, properties().filters) @@ -66,12 +79,12 @@ const DecoderProperties DecoderSIDFactory::properties() const Decoder *DecoderSIDFactory::create(const QString &path, QIODevice *input) { Q_UNUSED(input); - return new DecoderSID(path); + return new DecoderSID(&m_db, path); } QList<FileInfo *> DecoderSIDFactory::createPlayList(const QString &fileName, bool useMetaData) { - SIDHelper helper; + SIDHelper helper(&m_db); helper.load(fileName); QList <FileInfo*> list = helper.createPlayList(useMetaData); if(list.isEmpty()) @@ -101,7 +114,7 @@ MetaDataModel* DecoderSIDFactory::createMetaDataModel(const QString &path, QObje void DecoderSIDFactory::showSettings(QWidget *parent) { - SettingsDialog *d = new SettingsDialog(parent); + SettingsDialog *d = new SettingsDialog(&m_db, parent); d->show(); } diff --git a/src/plugins/Input/sid/decodersidfactory.h b/src/plugins/Input/sid/decodersidfactory.h index 2d076c8fe..d8bc4bc71 100644 --- a/src/plugins/Input/sid/decodersidfactory.h +++ b/src/plugins/Input/sid/decodersidfactory.h @@ -24,6 +24,7 @@ #include <QString> #include <QIODevice> #include <QWidget> +#include <sidplayfp/SidDatabase.h> #include <qmmp/decoder.h> #include <qmmp/output.h> #include <qmmp/decoderfactory.h> @@ -38,6 +39,8 @@ class DecoderSIDFactory : public QObject, DecoderFactory Q_INTERFACES(DecoderFactory) public: + DecoderSIDFactory(); + bool supports(const QString &source) const; bool canDecode(QIODevice *input) const; const DecoderProperties properties() const; @@ -47,6 +50,9 @@ public: void showSettings(QWidget *parent); void showAbout(QWidget *parent); QTranslator *createTranslator(QObject *parent); + +private: + SidDatabase m_db; }; #endif diff --git a/src/plugins/Input/sid/settingsdialog.cpp b/src/plugins/Input/sid/settingsdialog.cpp index 78db867c6..a27107fa8 100644 --- a/src/plugins/Input/sid/settingsdialog.cpp +++ b/src/plugins/Input/sid/settingsdialog.cpp @@ -24,8 +24,9 @@ #include <sidplayfp/SidConfig.h> #include "settingsdialog.h" -SettingsDialog::SettingsDialog(QWidget *parent) : QDialog(parent) +SettingsDialog::SettingsDialog(SidDatabase *db, QWidget *parent) : QDialog(parent) { + m_db = db; m_ui.setupUi(this); setAttribute(Qt::WA_DeleteOnClose); @@ -35,6 +36,7 @@ SettingsDialog::SettingsDialog(QWidget *parent) : QDialog(parent) m_ui.useHVSCCheckBox->setChecked(settings.value("use_hvsc", false).toBool()); QString hvsc_default_path = QFileInfo(Qmmp::configFile()).absolutePath() + "/Songlengths.txt"; m_ui.hvscPathLineEdit->setText(settings.value("hvsc_path", hvsc_default_path).toString()); + m_ui.defaultLengthSpinBox->setValue(settings.value("song_length", 180).toInt()); m_ui.sampleRateComboBox->addItem(tr("44100 Hz"), 44100); m_ui.sampleRateComboBox->addItem(tr("48000 Hz"), 48000); @@ -66,6 +68,7 @@ void SettingsDialog::accept() settings.beginGroup("SID"); settings.setValue("use_hvsc", m_ui.useHVSCCheckBox->isChecked()); settings.setValue("hvsc_path", m_ui.hvscPathLineEdit->text()); + settings.setValue("song_length", m_ui.defaultLengthSpinBox->value()); int i = m_ui.sampleRateComboBox->currentIndex(); if(i >= 0) settings.setValue("sample_rate", m_ui.sampleRateComboBox->itemData(i)); @@ -74,6 +77,12 @@ void SettingsDialog::accept() settings.setValue("fast_resampling", m_ui.fastResampligCheckBox->isChecked()); if((i = m_ui.resamplingComboBox->currentIndex()) >= 0) settings.setValue("resampling_method", m_ui.resamplingComboBox->itemData(i)); + m_db->close(); + if(m_ui.useHVSCCheckBox->isChecked()) + { + if(!m_db->open(qPrintable(m_ui.hvscPathLineEdit->text()))) + qWarning("SettingsDialog: %s", m_db->error()); + } settings.endGroup(); QDialog::accept(); } diff --git a/src/plugins/Input/sid/settingsdialog.h b/src/plugins/Input/sid/settingsdialog.h index c1a9ff2f0..28fb61468 100644 --- a/src/plugins/Input/sid/settingsdialog.h +++ b/src/plugins/Input/sid/settingsdialog.h @@ -21,7 +21,7 @@ #define SETTINGSDIALOG_H #include <QDialog> - +#include <sidplayfp/SidDatabase.h> #include "ui_settingsdialog.h" /** @@ -31,15 +31,16 @@ class SettingsDialog : public QDialog { Q_OBJECT public: - SettingsDialog(QWidget *parent = 0); + SettingsDialog(SidDatabase *db, QWidget *parent = 0); - ~SettingsDialog(); + virtual ~SettingsDialog(); public slots: virtual void accept(); private: Ui::SettingsDialog m_ui; + SidDatabase *m_db; }; diff --git a/src/plugins/Input/sid/sidhelper.cpp b/src/plugins/Input/sid/sidhelper.cpp index bc6091d7d..bc1d7de91 100644 --- a/src/plugins/Input/sid/sidhelper.cpp +++ b/src/plugins/Input/sid/sidhelper.cpp @@ -22,10 +22,10 @@ #include <sidplayfp/SidDatabase.h> #include "sidhelper.h" -SIDHelper::SIDHelper() +SIDHelper::SIDHelper(SidDatabase *db) { m_tune = 0; - m_database.open("/home/user/.qmmp/Songlengths.txt"); + m_db = db; } SIDHelper::~SIDHelper() @@ -79,7 +79,7 @@ QList <FileInfo*> SIDHelper::createPlayList(bool meta) info->setMetaData(Qmmp::COMMENT, tune_info->commentString(0)); info->setMetaData(Qmmp::TRACK, i); } - int length = m_database.length(md5, i); + int length = m_db->length(md5, i); if(length > -1) info->setLength(length); diff --git a/src/plugins/Input/sid/sidhelper.h b/src/plugins/Input/sid/sidhelper.h index c3640d0d8..4532be8ec 100644 --- a/src/plugins/Input/sid/sidhelper.h +++ b/src/plugins/Input/sid/sidhelper.h @@ -34,7 +34,7 @@ class SIDHelper { public: - SIDHelper(); + SIDHelper(SidDatabase *db); ~SIDHelper(); SidTune *load(const QString &url); QList <FileInfo*> createPlayList(bool meta); @@ -42,7 +42,7 @@ public: private: QString m_path; SidTune *m_tune; - SidDatabase m_database; + SidDatabase *m_db; }; #endif // SIDHELPER_H |
