File indexing completed on 2024-05-12 17:21:23

0001 /*
0002  * SPDX-FileCopyrightText: 2020-2021 Devin Lin <espidev@gmail.com>
0003  *
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  */
0006 
0007 #include "settingsmodel.h"
0008 
0009 SettingsModel* SettingsModel::instance()
0010 {
0011     static SettingsModel *s_settingsModel = new SettingsModel(qApp);
0012     return s_settingsModel;
0013 }
0014 
0015 SettingsModel::SettingsModel(QObject *parent) : 
0016     QObject(parent)
0017 {
0018     settings = new QSettings();
0019 }
0020 
0021 SettingsModel::~SettingsModel()
0022 {
0023     delete settings;
0024 }
0025 
0026 int SettingsModel::simpleAudioFormat() const
0027 {
0028     const auto keys = formatMap.keys();
0029     auto format_it = std::find_if(keys.begin(), keys.end(), [&](const SimpleAudioFormat p) -> bool {
0030         return formatMap[p].first == audioCodec() && formatMap[p].second == containerFormat();
0031     });
0032 
0033     if (format_it == keys.end()) {
0034         return SimpleAudioFormat::OTHER;
0035     }
0036 
0037     return *format_it;
0038 }
0039 
0040 void SettingsModel::setSimpleAudioFormat(int audioFormat)
0041 {
0042     if (simpleAudioFormat() == audioFormat) {
0043         return;
0044     }
0045     
0046     SimpleAudioFormat format = static_cast<SimpleAudioFormat>(audioFormat);
0047     setAudioCodec(formatMap[format].first);
0048     setContainerFormat(formatMap[format].second);
0049 }
0050 
0051 QString SettingsModel::audioCodec() const
0052 {
0053     return settings->value(QStringLiteral("General/audioCodec"), QStringLiteral("audio/x-opus")).toString();
0054 }
0055 
0056 void SettingsModel::setAudioCodec(const QString &audioCodec)
0057 {
0058     settings->setValue(QStringLiteral("General/audioCodec"), audioCodec);
0059 
0060     Q_EMIT audioCodecChanged();
0061     Q_EMIT simpleAudioFormatChanged();
0062 }
0063 
0064 QString SettingsModel::containerFormat() const
0065 {
0066     qDebug() << "format " << settings->value(QStringLiteral("General/containerFormat"), QStringLiteral("audio/ogg")).toString();
0067     return settings->value(QStringLiteral("General/containerFormat"), QStringLiteral("audio/ogg")).toString();
0068 }
0069 
0070 void SettingsModel::setContainerFormat(const QString &audioContainerFormat)
0071 {
0072     settings->setValue(QStringLiteral("General/containerFormat"), audioContainerFormat);
0073     
0074     Q_EMIT containerFormatChanged();
0075     Q_EMIT simpleAudioFormatChanged();
0076 }
0077 
0078 int SettingsModel::audioQuality() const
0079 {
0080     return settings->value(QStringLiteral("General/audioQuality"), 3).toInt();
0081 }
0082 
0083 void SettingsModel::setAudioQuality(int audioQuality)
0084 {
0085     if (this->audioQuality() == audioQuality) {
0086         return;
0087     }
0088     
0089     settings->setValue(QStringLiteral("General/audioQuality"), audioQuality);
0090     
0091     Q_EMIT audioQualityChanged();
0092 }