From 9e2040b449fa7eb347a7503fef748d843f4f2941 Mon Sep 17 00:00:00 2001 From: emeric Date: Mon, 13 Nov 2023 09:25:22 +0100 Subject: [PATCH] Some more renaming --- approot/messages.xml | 28 +- approot/messages_fr.xml | 28 +- approot/messages_it.xml | 24 +- approot/messages_zh.xml | 24 +- approot/settings.xml | 40 +- docroot/js/mediaplayer.js | 24 +- src/libs/av/impl/Transcoder.cpp | 2 +- .../av/impl/TranscodingResourceHandler.cpp | 14 +- src/libs/utils/impl/Logger.cpp | 76 +-- src/libs/utils/include/utils/Logger.hpp | 2 +- src/lms/CMakeLists.txt | 2 +- src/lms/ui/LmsApplication.cpp | 2 +- src/lms/ui/MediaPlayer.cpp | 489 +++++++++--------- src/lms/ui/MediaPlayer.hpp | 12 +- src/lms/ui/SettingsView.cpp | 116 ++--- ...ource.cpp => AudioTranscodingResource.cpp} | 8 +- ...ource.hpp => AudioTranscodingResource.hpp} | 4 +- 17 files changed, 442 insertions(+), 453 deletions(-) rename src/lms/ui/resource/{AudioTranscodeResource.cpp => AudioTranscodingResource.cpp} (95%) rename src/lms/ui/resource/{AudioTranscodeResource.hpp => AudioTranscodingResource.hpp} (93%) diff --git a/approot/messages.xml b/approot/messages.xml index e895b0ef..a43abc7e 100644 --- a/approot/messages.xml +++ b/approot/messages.xml @@ -245,8 +245,8 @@ ListenBrainz ListenBrainz API token Change password -Default transcode bitrate -Default transcode format +Default transcoding output bitrate +Default transcoding output format Cannot save using a demo account! Feedback Settings @@ -267,18 +267,18 @@ Album artists Track artists Subsonic API -Transcoding -Transcode bitrate -Transcode format -Matroska/Opus -MP3 -Ogg/Opus -Ogg/Vorbis -WebM/Vorbis -Enable transcoding -Always -Only when format is not supported -Never +Transcoding +Transcoding output bitrate +Transcoding output format +Matroska/Opus +MP3 +Ogg/Opus +Ogg/Vorbis +WebM/Vorbis +Enable transcoding +Always +Only when format is not supported by the browser +Never New settings saved! diff --git a/approot/messages_fr.xml b/approot/messages_fr.xml index 59152411..ff147166 100644 --- a/approot/messages_fr.xml +++ b/approot/messages_fr.xml @@ -245,8 +245,8 @@ ListenBrainz Jeton d'API ListenBrainz Changement de mot de passe -Bitrate par defaut du transcodage -Format par defaut du transcodage +Bitrate par defaut du transcodage +Format par defaut du transcodage Impossible de sauvegarder en utilisant un compte de démo ! Feedback Paramètres @@ -267,18 +267,18 @@ Tous les artistes d'album Tous les artistes de piste API Subsonic -Transcodage -Bitrate du transcodage -Format du transcodage -Matroska/Opus -MP3 -Ogg/Opus -Ogg/Vorbis -WebM/Vorbis -Appliquer le transcodage -Toujours -Seulement lorsque le format n'est pas pris en charge -Jamais +Transcodage +Bitrate du transcodage +Format du transcodage +Matroska/Opus +MP3 +Ogg/Opus +Ogg/Vorbis +WebM/Vorbis +Appliquer le transcodage +Toujours +Seulement lorsque le format n'est pas pris en charge par votre navigateur +Jamais Paramètres sauvegardés ! diff --git a/approot/messages_it.xml b/approot/messages_it.xml index 0a5f358a..5bd7cefa 100644 --- a/approot/messages_it.xml +++ b/approot/messages_it.xml @@ -267,18 +267,18 @@ Artisti album Artisti tracce Subsonic API -Transcodifica -Bitrate transcodifica -Formato di transcodifica -Matroska/Opus -MP3 -Ogg/Opus -Ogg/Vorbis -WebM/Vorbis -Abilita transcodifica -Sempre -Quando il formato non è supportato -Mai +Transcodifica +Bitrate transcodifica +Formato di transcodifica +Matroska/Opus +MP3 +Ogg/Opus +Ogg/Vorbis +WebM/Vorbis +Abilita transcodifica +Sempre +Quando il formato non è supportato +Mai Nuove impostazioni salvate! diff --git a/approot/messages_zh.xml b/approot/messages_zh.xml index 7eb6472f..68a28400 100644 --- a/approot/messages_zh.xml +++ b/approot/messages_zh.xml @@ -267,18 +267,18 @@ 专辑歌手 音轨歌手 Subsonic 应用程序接口 -转码 -转码比特率 -转码格式 -Matroska/Opus -MP3 -Ogg/Opus -Ogg/Vorbis -WebM/Vorbis -启动转码 -总是 -仅当格式不支持时使用 -从不 +转码 +转码比特率 +转码格式 +Matroska/Opus +MP3 +Ogg/Opus +Ogg/Vorbis +WebM/Vorbis +启动转码 +总是 +仅当格式不支持时使用 +从不 新设置已保存! diff --git a/approot/settings.xml b/approot/settings.xml index 507ec686..e12b94b1 100644 --- a/approot/settings.xml +++ b/approot/settings.xml @@ -10,33 +10,33 @@ ${tr:Lms.Settings.audio-settings-are-local}
-
-
-
@@ -75,24 +75,24 @@ ${} ${tr:Lms.Settings.subsonic-api}
-
-
diff --git a/docroot/js/mediaplayer.js b/docroot/js/mediaplayer.js index 2a345e78..b5dfdeb1 100644 --- a/docroot/js/mediaplayer.js +++ b/docroot/js/mediaplayer.js @@ -2,15 +2,15 @@ var LMS = LMS || {}; -// Keep in sync with MediaPlayer::TranscodeMode cpp -const TranscodeMode = { +// Keep in sync with MediaPlayer::TranscodingMode cpp +const TranscodingMode = { Never: 0, Always: 1, IfFormatNotSupported: 2, } const Mode = { - Transcode: 1, + Transcoding: 1, File: 2, } Object.freeze(Mode); @@ -22,7 +22,7 @@ LMS.mediaplayer = function () { let _trackId = null; let _duration = 0; let _audioNativeSrc; - let _audioTranscodeSrc; + let _audioTranscodingSrc; let _settings = {}; let _playedDuration = 0; let _lastStartPlaying = null; @@ -236,10 +236,10 @@ LMS.mediaplayer = function () { let selectedOffset = parseInt(_elems.seek.value, 10); switch (mode) { - case Mode.Transcode: + case Mode.Transcoding: _offset = selectedOffset; _removeAudioSources(); - _addAudioSource(_audioTranscodeSrc + "&offset=" + _offset); + _addAudioSource(_audioTranscodingSrc + "&offset=" + _offset); _elems.audio.load(); _elems.audio.currentTime = 0; _playTrack(); @@ -270,7 +270,7 @@ LMS.mediaplayer = function () { }); _elems.audio.addEventListener("canplay", function() { - if (_getAudioMode() == Mode.Transcode) { + if (_getAudioMode() == Mode.Transcoding) { _elems.transcodingActive.style.display = "inline"; } else { @@ -337,7 +337,7 @@ LMS.mediaplayer = function () { let _getAudioMode = function() { if (_elems.audio.currentSrc) { if (_elems.audio.currentSrc.includes("format")) - return Mode.Transcode; + return Mode.Transcoding; else return Mode.File; } @@ -353,19 +353,19 @@ LMS.mediaplayer = function () { _offset = 0; _duration = params.duration; _audioNativeSrc = params.nativeResource; - _audioTranscodeSrc = params.transcodeResource + "&bitrate=" + _settings.transcode.bitrate + "&format=" + _settings.transcode.format; + _audioTranscodingSrc = params.transcodingResource + "&bitrate=" + _settings.transcoding.bitrate + "&format=" + _settings.transcoding.format; _elems.seek.max = _duration; _removeAudioSources(); // ! order is important - if (_settings.transcode.mode == TranscodeMode.Never || _settings.transcode.mode == TranscodeMode.IfFormatNotSupported) + if (_settings.transcoding.mode == TranscodingMode.Never || _settings.transcoding.mode == TranscodingMode.IfFormatNotSupported) { _addAudioSource(_audioNativeSrc); } - if (_settings.transcode.mode == TranscodeMode.Always || _settings.transcode.mode == TranscodeMode.IfFormatNotSupported) + if (_settings.transcoding.mode == TranscodingMode.Always || _settings.transcoding.mode == TranscodingMode.IfFormatNotSupported) { - _addAudioSource(_audioTranscodeSrc); + _addAudioSource(_audioTranscodingSrc); } _elems.audio.load(); diff --git a/src/libs/av/impl/Transcoder.cpp b/src/libs/av/impl/Transcoder.cpp index ff932e55..c4c76902 100644 --- a/src/libs/av/impl/Transcoder.cpp +++ b/src/libs/av/impl/Transcoder.cpp @@ -31,7 +31,7 @@ namespace Av::Transcoding { -#define LOG(sev) LMS_LOG(TRANSCODE, sev) << "[" << _debugId << "] - " +#define LOG(sev) LMS_LOG(TRANSCODING, sev) << "[" << _debugId << "] - " static std::atomic globalId{}; static std::filesystem::path ffmpegPath; diff --git a/src/libs/av/impl/TranscodingResourceHandler.cpp b/src/libs/av/impl/TranscodingResourceHandler.cpp index e52552c3..f5d2ca0f 100644 --- a/src/libs/av/impl/TranscodingResourceHandler.cpp +++ b/src/libs/av/impl/TranscodingResourceHandler.cpp @@ -43,9 +43,9 @@ namespace Av::Transcoding , _transcoder{ inputParameters, outputParameters } { if (_estimatedContentLength) - LMS_LOG(TRANSCODE, DEBUG) << "Estimated content length = " << *_estimatedContentLength; + LMS_LOG(TRANSCODING, DEBUG) << "Estimated content length = " << *_estimatedContentLength; else - LMS_LOG(TRANSCODE, DEBUG) << "Not using estimated content length"; + LMS_LOG(TRANSCODING, DEBUG) << "Not using estimated content length"; } Wt::Http::ResponseContinuation* TranscodingResourceHandler::processRequest(const Wt::Http::Request& /*request*/, Wt::Http::Response& response) @@ -53,11 +53,11 @@ namespace Av::Transcoding if (_estimatedContentLength) response.setContentLength(*_estimatedContentLength); response.setMimeType(_transcoder.getOutputMimeType()); - LMS_LOG(TRANSCODE, DEBUG) << "Transcoder finished = " << _transcoder.finished() << ", total served bytes = " << _totalServedByteCount << ", mime type = " << _transcoder.getOutputMimeType(); + LMS_LOG(TRANSCODING, DEBUG) << "Transcoder finished = " << _transcoder.finished() << ", total served bytes = " << _totalServedByteCount << ", mime type = " << _transcoder.getOutputMimeType(); if (_bytesReadyCount > 0) { - LMS_LOG(TRANSCODE, DEBUG) << "Writing " << _bytesReadyCount << " bytes back to client"; + LMS_LOG(TRANSCODING, DEBUG) << "Writing " << _bytesReadyCount << " bytes back to client"; response.out().write(reinterpret_cast(&_buffer[0]), _bytesReadyCount); _totalServedByteCount += _bytesReadyCount; @@ -70,7 +70,7 @@ namespace Av::Transcoding continuation->waitForMoreData(); _transcoder.asyncRead(_buffer.data(), _buffer.size(), [=](std::size_t nbBytesRead) { - LMS_LOG(TRANSCODE, DEBUG) << "Have " << nbBytesRead << " more bytes to send back"; + LMS_LOG(TRANSCODING, DEBUG) << "Have " << nbBytesRead << " more bytes to send back"; assert(_bytesReadyCount == 0); _bytesReadyCount = nbBytesRead; @@ -86,7 +86,7 @@ namespace Av::Transcoding { const std::size_t padSize{ *_estimatedContentLength - _totalServedByteCount }; - LMS_LOG(TRANSCODE, DEBUG) << "Adding " << padSize << " padding bytes"; + LMS_LOG(TRANSCODING, DEBUG) << "Adding " << padSize << " padding bytes"; for (std::size_t i{}; i < padSize; ++i) response.out().put(0); @@ -94,7 +94,7 @@ namespace Av::Transcoding _totalServedByteCount += padSize; } - LMS_LOG(TRANSCODE, DEBUG) << "Transcoding finished. Total served byte count = " << _totalServedByteCount; + LMS_LOG(TRANSCODING, DEBUG) << "Transcoding finished. Total served byte count = " << _totalServedByteCount; } return {}; diff --git a/src/libs/utils/impl/Logger.cpp b/src/libs/utils/impl/Logger.cpp index 604a2802..28176166 100644 --- a/src/libs/utils/impl/Logger.cpp +++ b/src/libs/utils/impl/Logger.cpp @@ -21,59 +21,59 @@ const char* getModuleName(Module mod) { - switch (mod) - { - case Module::API_SUBSONIC: return "API_SUBSONIC"; - case Module::AUTH: return "AUTH"; - case Module::AV: return "AV"; - case Module::CHILDPROCESS: return "CHILDPROC"; - case Module::COVER: return "COVER"; - case Module::DB: return "DB"; - case Module::DBUPDATER: return "DB UPDATER"; - case Module::FEATURE: return "FEATURE"; - case Module::FEEDBACK: return "FEEDBACK"; - case Module::HTTP: return "HTTP"; - case Module::MAIN: return "MAIN"; - case Module::METADATA: return "METADATA"; - case Module::REMOTE: return "REMOTE"; - case Module::SCROBBLING: return "SCROBBLING"; - case Module::SERVICE: return "SERVICE"; - case Module::RECOMMENDATION: return "RECOMMENDATION"; - case Module::TRANSCODE: return "TRANSCODE"; - case Module::UI: return "UI"; - case Module::UTILS: return "UTILS"; - } - return ""; + switch (mod) + { + case Module::API_SUBSONIC: return "API_SUBSONIC"; + case Module::AUTH: return "AUTH"; + case Module::AV: return "AV"; + case Module::CHILDPROCESS: return "CHILDPROC"; + case Module::COVER: return "COVER"; + case Module::DB: return "DB"; + case Module::DBUPDATER: return "DB UPDATER"; + case Module::FEATURE: return "FEATURE"; + case Module::FEEDBACK: return "FEEDBACK"; + case Module::HTTP: return "HTTP"; + case Module::MAIN: return "MAIN"; + case Module::METADATA: return "METADATA"; + case Module::REMOTE: return "REMOTE"; + case Module::SCROBBLING: return "SCROBBLING"; + case Module::SERVICE: return "SERVICE"; + case Module::RECOMMENDATION: return "RECOMMENDATION"; + case Module::TRANSCODING: return "TRANSCODING"; + case Module::UI: return "UI"; + case Module::UTILS: return "UTILS"; + } + return ""; } const char* getSeverityName(Severity sev) { - switch (sev) - { - case Severity::FATAL: return "fatal"; - case Severity::ERROR: return "error"; - case Severity::WARNING: return "warning"; - case Severity::INFO: return "info"; - case Severity::DEBUG: return "debug"; - } - return ""; + switch (sev) + { + case Severity::FATAL: return "fatal"; + case Severity::ERROR: return "error"; + case Severity::WARNING: return "warning"; + case Severity::INFO: return "info"; + case Severity::DEBUG: return "debug"; + } + return ""; } Log::Log(Logger* logger, Module module, Severity severity) - : _module {module}, - _severity {severity}, - _logger {logger} + : _module{ module }, + _severity{ severity }, + _logger{ logger } {} Log::~Log() { - if (_logger) - _logger->processLog(*this); + if (_logger) + _logger->processLog(*this); } std::string Log::getMessage() const { - return _oss.str(); + return _oss.str(); } diff --git a/src/libs/utils/include/utils/Logger.hpp b/src/libs/utils/include/utils/Logger.hpp index f7a48916..d14fe5ab 100644 --- a/src/libs/utils/include/utils/Logger.hpp +++ b/src/libs/utils/include/utils/Logger.hpp @@ -51,7 +51,7 @@ enum class Module SCROBBLING, SERVICE, RECOMMENDATION, - TRANSCODE, + TRANSCODING, UI, UTILS, }; diff --git a/src/lms/CMakeLists.txt b/src/lms/CMakeLists.txt index b42f9023..494d727e 100644 --- a/src/lms/CMakeLists.txt +++ b/src/lms/CMakeLists.txt @@ -44,7 +44,7 @@ add_executable(lms ui/explore/TrackListsView.cpp ui/explore/TracksView.cpp ui/resource/AudioFileResource.cpp - ui/resource/AudioTranscodeResource.cpp + ui/resource/AudioTranscodingResource.cpp ui/resource/CoverResource.cpp ui/resource/DownloadResource.cpp ) diff --git a/src/lms/ui/LmsApplication.cpp b/src/lms/ui/LmsApplication.cpp index 60de0f36..0b7463f0 100644 --- a/src/lms/ui/LmsApplication.cpp +++ b/src/lms/ui/LmsApplication.cpp @@ -49,7 +49,7 @@ #include "explore/Explore.hpp" #include "explore/Filters.hpp" #include "resource/AudioFileResource.hpp" -#include "resource/AudioTranscodeResource.hpp" +#include "resource/AudioTranscodingResource.hpp" #include "resource/DownloadResource.hpp" #include "resource/CoverResource.hpp" #include "Auth.hpp" diff --git a/src/lms/ui/MediaPlayer.cpp b/src/lms/ui/MediaPlayer.cpp index dfd9db66..96e7413f 100644 --- a/src/lms/ui/MediaPlayer.cpp +++ b/src/lms/ui/MediaPlayer.cpp @@ -35,7 +35,7 @@ #include "services/database/User.hpp" #include "resource/CoverResource.hpp" -#include "resource/AudioTranscodeResource.hpp" +#include "resource/AudioTranscodingResource.hpp" #include "resource/AudioFileResource.hpp" #include "utils/String.hpp" @@ -44,304 +44,295 @@ #include "LmsApplication.hpp" #include "Utils.hpp" -namespace UserInterface { - -static std::string settingsToJSString(const MediaPlayer::Settings& settings) +namespace UserInterface { - namespace Json = Wt::Json; + namespace + { + std::string settingsToJSString(const MediaPlayer::Settings& settings) + { + namespace Json = Wt::Json; - Json::Object res; + Json::Object res; - { - Json::Object transcode; - transcode["mode"] = static_cast(settings.transcode.mode); - transcode["format"] = static_cast(settings.transcode.format); - transcode["bitrate"] = static_cast(settings.transcode.bitrate); - res["transcode"] = std::move(transcode); - } + { + Json::Object transcoding; + transcoding["mode"] = static_cast(settings.transcoding.mode); + transcoding["format"] = static_cast(settings.transcoding.format); + transcoding["bitrate"] = static_cast(settings.transcoding.bitrate); + res["transcoding"] = std::move(transcoding); + } - { - Json::Object replayGain; - replayGain["mode"] = static_cast(settings.replayGain.mode); - replayGain["preAmpGain"] = settings.replayGain.preAmpGain; - replayGain["preAmpGainIfNoInfo"] = settings.replayGain.preAmpGainIfNoInfo; - res["replayGain"] = std::move(replayGain); - } + { + Json::Object replayGain; + replayGain["mode"] = static_cast(settings.replayGain.mode); + replayGain["preAmpGain"] = settings.replayGain.preAmpGain; + replayGain["preAmpGainIfNoInfo"] = settings.replayGain.preAmpGainIfNoInfo; + res["replayGain"] = std::move(replayGain); + } - return Json::serialize(res); -} + return Json::serialize(res); + } -static -std::optional -transcodeModeFromString(const std::string& str) -{ - const auto value {StringUtils::readAs(str)}; - if (!value) - return std::nullopt; + std::optional transcodingModeFromString(const std::string& str) + { + const auto value{ StringUtils::readAs(str) }; + if (!value) + return std::nullopt; - MediaPlayer::Settings::Transcode::Mode mode {static_cast(*value)}; - switch (mode) - { - case MediaPlayer::Settings::Transcode::Mode::Never: - case MediaPlayer::Settings::Transcode::Mode::Always: - case MediaPlayer::Settings::Transcode::Mode::IfFormatNotSupported: - return mode; - } + MediaPlayer::Settings::Transcoding::Mode mode{ static_cast(*value) }; + switch (mode) + { + case MediaPlayer::Settings::Transcoding::Mode::Never: + case MediaPlayer::Settings::Transcoding::Mode::Always: + case MediaPlayer::Settings::Transcoding::Mode::IfFormatNotSupported: + return mode; + } - return std::nullopt; -} + return std::nullopt; + } -static -std::optional -formatFromString(const std::string& str) -{ - const auto value {StringUtils::readAs(str)}; - if (!value) - return std::nullopt; + std::optional formatFromString(const std::string& str) + { + const auto value{ StringUtils::readAs(str) }; + if (!value) + return std::nullopt; - MediaPlayer::Format format {static_cast(*value)}; - switch (format) - { - case MediaPlayer::Format::MP3: - case MediaPlayer::Format::OGG_OPUS: - case MediaPlayer::Format::MATROSKA_OPUS: - case MediaPlayer::Format::OGG_VORBIS: - case MediaPlayer::Format::WEBM_VORBIS: - return format; - } + MediaPlayer::Format format{ static_cast(*value) }; + switch (format) + { + case MediaPlayer::Format::MP3: + case MediaPlayer::Format::OGG_OPUS: + case MediaPlayer::Format::MATROSKA_OPUS: + case MediaPlayer::Format::OGG_VORBIS: + case MediaPlayer::Format::WEBM_VORBIS: + return format; + } - return std::nullopt; -} + return std::nullopt; + } -static -std::optional -bitrateFromString(const std::string& str) -{ - const auto value {StringUtils::readAs(str)}; - if (!value) - return std::nullopt; + std::optional bitrateFromString(const std::string& str) + { + const auto value{ StringUtils::readAs(str) }; + if (!value) + return std::nullopt; - if (!Database::isAudioBitrateAllowed(*value)) - return std::nullopt; + if (!Database::isAudioBitrateAllowed(*value)) + return std::nullopt; - return *value; -} + return *value; + } -static -std::optional -replayGainModeFromString(const std::string& str) -{ - const auto value {StringUtils::readAs(str)}; - if (!value) - return std::nullopt; + std::optional replayGainModeFromString(const std::string& str) + { + const auto value{ StringUtils::readAs(str) }; + if (!value) + return std::nullopt; - MediaPlayer::Settings::ReplayGain::Mode mode {static_cast(*value)}; - switch (mode) - { - case MediaPlayer::Settings::ReplayGain::Mode::None: - case MediaPlayer::Settings::ReplayGain::Mode::Auto: - case MediaPlayer::Settings::ReplayGain::Mode::Track: - case MediaPlayer::Settings::ReplayGain::Mode::Release: - return mode; - } + MediaPlayer::Settings::ReplayGain::Mode mode{ static_cast(*value) }; + switch (mode) + { + case MediaPlayer::Settings::ReplayGain::Mode::None: + case MediaPlayer::Settings::ReplayGain::Mode::Auto: + case MediaPlayer::Settings::ReplayGain::Mode::Track: + case MediaPlayer::Settings::ReplayGain::Mode::Release: + return mode; + } - return std::nullopt; -} + return std::nullopt; + } -static -std::optional -replayGainPreAmpGainFromString(const std::string& str) -{ - const auto value {StringUtils::readAs(str)}; - if (!value) - return std::nullopt; + std::optional replayGainPreAmpGainFromString(const std::string& str) + { + const auto value{ StringUtils::readAs(str) }; + if (!value) + return std::nullopt; - return ::Utils::clamp(*value, (double)MediaPlayer::Settings::ReplayGain::minPreAmpGain, (double)MediaPlayer::Settings::ReplayGain::maxPreAmpGain); -} + return ::Utils::clamp(*value, (double)MediaPlayer::Settings::ReplayGain::minPreAmpGain, (double)MediaPlayer::Settings::ReplayGain::maxPreAmpGain); + } -static MediaPlayer::Settings settingsfromJSString(const std::string& strSettings) -{ - using Settings = MediaPlayer::Settings; - namespace Json = Wt::Json; - Json::Object parsedSettings; + MediaPlayer::Settings settingsfromJSString(const std::string& strSettings) + { + using Settings = MediaPlayer::Settings; + namespace Json = Wt::Json; + Json::Object parsedSettings; - Json::parse(strSettings, parsedSettings); + Json::parse(strSettings, parsedSettings); - MediaPlayer::Settings settings; + MediaPlayer::Settings settings; - { - const Json::Value transcodeValue {parsedSettings.get("transcode")}; - if (transcodeValue.type() == Json::Type::Object) - { - const Json::Object transcode {transcodeValue}; - settings.transcode.mode = transcodeModeFromString(transcode.get("mode").toString().orIfNull("")).value_or(Settings::Transcode::defaultMode); - settings.transcode.format = formatFromString(transcode.get("format").toString().orIfNull("")).value_or(Settings::Transcode::defaultFormat); - settings.transcode.bitrate = bitrateFromString(transcode.get("bitrate").toString().orIfNull("")).value_or(Settings::Transcode::defaultBitrate); - } - } - { - const Json::Value replayGainValue {parsedSettings.get("replayGain")}; - if (replayGainValue.type() == Json::Type::Object) - { - const Json::Object replayGain {replayGainValue}; - settings.replayGain.mode = replayGainModeFromString(replayGain.get("mode").toString().orIfNull("")).value_or(Settings::ReplayGain::defaultMode); - settings.replayGain.preAmpGain = replayGainPreAmpGainFromString(replayGain.get("preAmpGain").toString().orIfNull("")).value_or(Settings::ReplayGain::defaultPreAmpGain); - settings.replayGain.preAmpGainIfNoInfo = replayGainPreAmpGainFromString(replayGain.get("preAmpGainIfNoInfo").toString().orIfNull("")).value_or(Settings::ReplayGain::defaultPreAmpGain); - } - } + { + const Json::Value transcodingValue{ parsedSettings.get("transcoding") }; + if (transcodingValue.type() == Json::Type::Object) + { + const Json::Object transcoding{ transcodingValue }; + settings.transcoding.mode = transcodingModeFromString(transcoding.get("mode").toString().orIfNull("")).value_or(Settings::Transcoding::defaultMode); + settings.transcoding.format = formatFromString(transcoding.get("format").toString().orIfNull("")).value_or(Settings::Transcoding::defaultFormat); + settings.transcoding.bitrate = bitrateFromString(transcoding.get("bitrate").toString().orIfNull("")).value_or(Settings::Transcoding::defaultBitrate); + } + } + { + const Json::Value replayGainValue{ parsedSettings.get("replayGain") }; + if (replayGainValue.type() == Json::Type::Object) + { + const Json::Object replayGain{ replayGainValue }; + settings.replayGain.mode = replayGainModeFromString(replayGain.get("mode").toString().orIfNull("")).value_or(Settings::ReplayGain::defaultMode); + settings.replayGain.preAmpGain = replayGainPreAmpGainFromString(replayGain.get("preAmpGain").toString().orIfNull("")).value_or(Settings::ReplayGain::defaultPreAmpGain); + settings.replayGain.preAmpGainIfNoInfo = replayGainPreAmpGainFromString(replayGain.get("preAmpGainIfNoInfo").toString().orIfNull("")).value_or(Settings::ReplayGain::defaultPreAmpGain); + } + } - return settings; -} + return settings; + } + } -MediaPlayer::MediaPlayer() -: Wt::WTemplate {Wt::WString::tr("Lms.MediaPlayer.template")} -, playPrevious {this, "playPrevious"} -, playNext {this, "playNext"} -, scrobbleListenNow {this, "scrobbleListenNow"} -, scrobbleListenFinished {this, "scrobbleListenFinished"} -, playbackEnded {this, "playbackEnded"} -, _settingsLoaded {this, "settingsLoaded"} -{ - addFunction("tr", &Wt::WTemplate::Functions::tr); + MediaPlayer::MediaPlayer() + : Wt::WTemplate{ Wt::WString::tr("Lms.MediaPlayer.template") } + , playPrevious{ this, "playPrevious" } + , playNext{ this, "playNext" } + , scrobbleListenNow{ this, "scrobbleListenNow" } + , scrobbleListenFinished{ this, "scrobbleListenFinished" } + , playbackEnded{ this, "playbackEnded" } + , _settingsLoaded{ this, "settingsLoaded" } + { + addFunction("tr", &Wt::WTemplate::Functions::tr); - _audioTranscodeResource = std::make_unique(); - _audioFileResource = std::make_unique(); + _audioTranscodingResource = std::make_unique(); + _audioFileResource = std::make_unique(); - _title = bindNew("title"); - _artist = bindNew("artist"); - _release = bindNew("release"); - _separator = bindNew("separator"); - _playQueue = bindNew("playqueue-btn", Wt::WString::tr("Lms.MediaPlayer.template.playqueue-btn").arg(0), Wt::TextFormat::XHTML); - _playQueue->setLink(Wt::WLink {Wt::LinkType::InternalPath, "/playqueue"}); - _playQueue->setToolTip(tr("Lms.PlayQueue.playqueue")); + _title = bindNew("title"); + _artist = bindNew("artist"); + _release = bindNew("release"); + _separator = bindNew("separator"); + _playQueue = bindNew("playqueue-btn", Wt::WString::tr("Lms.MediaPlayer.template.playqueue-btn").arg(0), Wt::TextFormat::XHTML); + _playQueue->setLink(Wt::WLink{ Wt::LinkType::InternalPath, "/playqueue" }); + _playQueue->setToolTip(tr("Lms.PlayQueue.playqueue")); - _settingsLoaded.connect([this](const std::string& settings) - { - LMS_LOG(UI, DEBUG) << "Settings loaded! '" << settings << "'"; + _settingsLoaded.connect([this](const std::string& settings) + { + LMS_LOG(UI, DEBUG) << "Settings loaded! '" << settings << "'"; - _settings = settingsfromJSString(settings); + _settings = settingsfromJSString(settings); - settingsLoaded.emit(); - }); + settingsLoaded.emit(); + }); - { - Settings defaultSettings; + { + Settings defaultSettings; - std::ostringstream oss; - oss << "LMS.mediaplayer.init(" - << jsRef() - << ", defaultSettings = " << settingsToJSString(defaultSettings) - << ")"; + std::ostringstream oss; + oss << "LMS.mediaplayer.init(" + << jsRef() + << ", defaultSettings = " << settingsToJSString(defaultSettings) + << ")"; - LMS_LOG(UI, DEBUG) << "Running js = '" << oss.str() << "'"; - doJavaScript(oss.str()); - } -} + LMS_LOG(UI, DEBUG) << "Running js = '" << oss.str() << "'"; + doJavaScript(oss.str()); + } + } -void -MediaPlayer::loadTrack(Database::TrackId trackId, bool play, float replayGain) -{ - LMS_LOG(UI, DEBUG) << "Playing track ID = " << trackId.toString(); + void MediaPlayer::loadTrack(Database::TrackId trackId, bool play, float replayGain) + { + LMS_LOG(UI, DEBUG) << "Playing track ID = " << trackId.toString(); - std::ostringstream oss; - { - auto transaction {LmsApp->getDbSession().createSharedTransaction()}; + std::ostringstream oss; + { + auto transaction{ LmsApp->getDbSession().createSharedTransaction() }; - const auto track {Database::Track::find(LmsApp->getDbSession(), trackId)}; - if (!track) - return; + const auto track{ Database::Track::find(LmsApp->getDbSession(), trackId) }; + if (!track) + return; - const std::string transcodeResource {_audioTranscodeResource->getUrl(trackId)}; - const std::string nativeResource {_audioFileResource->getUrl(trackId)}; + const std::string transcodingResource{ _audioTranscodingResource->getUrl(trackId) }; + const std::string nativeResource{ _audioFileResource->getUrl(trackId) }; - const auto artists {track->getArtists({Database::TrackArtistLinkType::Artist})}; + const auto artists{ track->getArtists({Database::TrackArtistLinkType::Artist}) }; - oss - << "var params = {" - << " trackId :\"" << trackId.toString() << "\"," - << " nativeResource: \"" << nativeResource << "\"," - << " transcodeResource: \"" << transcodeResource << "\"," - << " duration: " << std::chrono::duration_cast(track->getDuration()).count() << "," - << " replayGain: " << replayGain << "," - << " title: \"" << StringUtils::jsEscape(track->getName()) << "\"," - << " artist: \"" << (!artists.empty() ? StringUtils::jsEscape(artists.front()->getName()) : "") << "\"," - << " release: \"" << (track->getRelease() ? StringUtils::jsEscape(track->getRelease()->getName()) : "") << "\"," - << " artwork: [" - << " { src: \"" << LmsApp->getCoverResource()->getTrackUrl(trackId, CoverResource::Size::Small) << "\", sizes: \"128x128\", type: \"image/jpeg\" }," - << " { src: \"" << LmsApp->getCoverResource()->getTrackUrl(trackId, CoverResource::Size::Large) << "\", sizes: \"512x512\", type: \"image/jpeg\" }," - << " ]" - << "};"; - oss << "LMS.mediaplayer.loadTrack(params, " << (play ? "true" : "false") << ")"; // true to autoplay + oss + << "var params = {" + << " trackId :\"" << trackId.toString() << "\"," + << " nativeResource: \"" << nativeResource << "\"," + << " transcodingResource: \"" << transcodingResource << "\"," + << " duration: " << std::chrono::duration_cast(track->getDuration()).count() << "," + << " replayGain: " << replayGain << "," + << " title: \"" << StringUtils::jsEscape(track->getName()) << "\"," + << " artist: \"" << (!artists.empty() ? StringUtils::jsEscape(artists.front()->getName()) : "") << "\"," + << " release: \"" << (track->getRelease() ? StringUtils::jsEscape(track->getRelease()->getName()) : "") << "\"," + << " artwork: [" + << " { src: \"" << LmsApp->getCoverResource()->getTrackUrl(trackId, CoverResource::Size::Small) << "\", sizes: \"128x128\", type: \"image/jpeg\" }," + << " { src: \"" << LmsApp->getCoverResource()->getTrackUrl(trackId, CoverResource::Size::Large) << "\", sizes: \"512x512\", type: \"image/jpeg\" }," + << " ]" + << "};"; + // Update 'sizes' above to match this: + static_assert(static_cast>(CoverResource::Size::Small) == 128); + static_assert(static_cast>(CoverResource::Size::Large) == 512); + oss << "LMS.mediaplayer.loadTrack(params, " << (play ? "true" : "false") << ")"; // true to autoplay - _title->setTextFormat(Wt::TextFormat::Plain); - _title->setText(Wt::WString::fromUTF8(track->getName())); + _title->setTextFormat(Wt::TextFormat::Plain); + _title->setText(Wt::WString::fromUTF8(track->getName())); - bool needSeparator {true}; + bool needSeparator{ true }; - if (!artists.empty()) - { - _artist->setTextFormat(Wt::TextFormat::Plain); - _artist->setText(Wt::WString::fromUTF8(artists.front()->getName())); - _artist->setLink(Utils::createArtistLink(artists.front())); - } - else - { - _artist->setText(""); - _artist->setLink({}); - needSeparator = false; - } + if (!artists.empty()) + { + _artist->setTextFormat(Wt::TextFormat::Plain); + _artist->setText(Wt::WString::fromUTF8(artists.front()->getName())); + _artist->setLink(Utils::createArtistLink(artists.front())); + } + else + { + _artist->setText(""); + _artist->setLink({}); + needSeparator = false; + } - if (track->getRelease()) - { - _release->setTextFormat(Wt::TextFormat::Plain); - _release->setText(Wt::WString::fromUTF8(track->getRelease()->getName())); - _release->setLink(Utils::createReleaseLink(track->getRelease())); - } - else - { - _release->setText(""); - _release->setLink({}); - needSeparator = false; - } + if (track->getRelease()) + { + _release->setTextFormat(Wt::TextFormat::Plain); + _release->setText(Wt::WString::fromUTF8(track->getRelease()->getName())); + _release->setLink(Utils::createReleaseLink(track->getRelease())); + } + else + { + _release->setText(""); + _release->setLink({}); + needSeparator = false; + } - if (needSeparator) - _separator->setText(" — "); - else - _separator->setText(""); - } + if (needSeparator) + _separator->setText(" — "); + else + _separator->setText(""); + } - LMS_LOG(UI, DEBUG) << "Running js = '" << oss.str() << "'"; - doJavaScript(oss.str()); + LMS_LOG(UI, DEBUG) << "Running js = '" << oss.str() << "'"; + doJavaScript(oss.str()); - _trackIdLoaded = trackId; - trackLoaded.emit(*_trackIdLoaded); -} + _trackIdLoaded = trackId; + trackLoaded.emit(*_trackIdLoaded); + } -void -MediaPlayer::stop() -{ - doJavaScript("LMS.mediaplayer.stop()"); -} + void MediaPlayer::stop() + { + doJavaScript("LMS.mediaplayer.stop()"); + } -void -MediaPlayer::setSettings(const Settings& settings) -{ - _settings = settings; + void MediaPlayer::setSettings(const Settings& settings) + { + _settings = settings; - { - std::ostringstream oss; - oss << "LMS.mediaplayer.setSettings(settings = " << settingsToJSString(settings) << ")"; + { + std::ostringstream oss; + oss << "LMS.mediaplayer.setSettings(settings = " << settingsToJSString(settings) << ")"; - LMS_LOG(UI, DEBUG) << "Running js = '" << oss.str() << "'"; - doJavaScript(oss.str()); - } -} + LMS_LOG(UI, DEBUG) << "Running js = '" << oss.str() << "'"; + doJavaScript(oss.str()); + } + } -void -MediaPlayer::onPlayQueueUpdated(std::size_t trackCount) -{ - _playQueue->setText(Wt::WString::tr("Lms.MediaPlayer.template.playqueue-btn").arg(trackCount)); -} + void MediaPlayer::onPlayQueueUpdated(std::size_t trackCount) + { + _playQueue->setText(Wt::WString::tr("Lms.MediaPlayer.template.playqueue-btn").arg(trackCount)); + } } // namespace UserInterface - diff --git a/src/lms/ui/MediaPlayer.hpp b/src/lms/ui/MediaPlayer.hpp index e83806a4..840398aa 100644 --- a/src/lms/ui/MediaPlayer.hpp +++ b/src/lms/ui/MediaPlayer.hpp @@ -33,7 +33,7 @@ namespace UserInterface { class AudioFileResource; - class AudioTranscodeResource; + class AudioTranscodingResource; class MediaPlayer : public Wt::WTemplate { @@ -47,7 +47,7 @@ namespace UserInterface struct Settings { - struct Transcode + struct Transcoding { enum class Mode { @@ -84,16 +84,14 @@ namespace UserInterface Gain preAmpGainIfNoInfo{ defaultPreAmpGain }; }; - Transcode transcode; + Transcoding transcoding; ReplayGain replayGain; }; MediaPlayer(); - + ~MediaPlayer() = default; MediaPlayer(const MediaPlayer&) = delete; - MediaPlayer(MediaPlayer&&) = delete; MediaPlayer& operator=(const MediaPlayer&) = delete; - MediaPlayer& operator=(MediaPlayer&&) = delete; std::optional getTrackLoaded() const { return _trackIdLoaded; } @@ -118,7 +116,7 @@ namespace UserInterface private: std::unique_ptr _audioFileResource; - std::unique_ptr _audioTranscodeResource; + std::unique_ptr _audioTranscodingResource; std::optional _trackIdLoaded; std::optional _settings; diff --git a/src/lms/ui/SettingsView.cpp b/src/lms/ui/SettingsView.cpp index 713d827a..ef9a4f89 100644 --- a/src/lms/ui/SettingsView.cpp +++ b/src/lms/ui/SettingsView.cpp @@ -44,23 +44,23 @@ #include "LmsApplication.hpp" #include "MediaPlayer.hpp" -namespace UserInterface { - +namespace UserInterface +{ using namespace Database; class SettingsModel : public Wt::WFormModel { public: // Associate each field with a unique string literal. - static inline const Field TranscodeModeField{ "transcode-mode" }; - static inline const Field TranscodeFormatField{ "transcode-format" }; - static inline const Field TranscodeBitrateField{ "transcode-bitrate" }; + static inline const Field TranscodingModeField{ "transcoding-mode" }; + static inline const Field TranscodeFormatField{ "transcoding-output-format" }; + static inline const Field TranscodeBitrateField{ "transcoding-output-bitrate" }; static inline const Field ReplayGainModeField{ "replaygain-mode" }; static inline const Field ReplayGainPreAmpGainField{ "replaygain-preamp" }; static inline const Field ReplayGainPreAmpGainIfNoInfoField{ "replaygain-preamp-no-rg-info" }; static inline const Field SubsonicArtistListModeField{ "subsonic-artist-list-mode" }; - static inline const Field SubsonicTranscodingOutputFormatField{ "subsonic-transcode-format" }; - static inline const Field SubsonicTranscodingOutputBitrateField{ "subsonic-transcode-bitrate" }; + static inline const Field SubsonicTranscodingOutputFormatField{ "subsonic-transcoding-output-format" }; + static inline const Field SubsonicTranscodingOutputBitrateField{ "subsonic-transcoding-output-bitrate" }; static inline const Field FeedbackBackendField{ "feedback-backend" }; static inline const Field ScrobblingBackendField{ "scrobbling-backend" }; static inline const Field ListenBrainzTokenField{ "listenbrainz-token" }; @@ -68,7 +68,7 @@ namespace UserInterface { static inline const Field PasswordField{ "password" }; static inline const Field PasswordConfirmField{ "password-confirm" }; - using TranscodingModeModel = ValueStringModel; + using TranscodingModeModel = ValueStringModel; using ReplayGainModeModel = ValueStringModel; using FeedbackBackendModel = ValueStringModel; using ScrobblingBackendModel = ValueStringModel; @@ -79,7 +79,7 @@ namespace UserInterface { { initializeModels(); - addField(TranscodeModeField); + addField(TranscodingModeField); addField(TranscodeBitrateField); addField(TranscodeFormatField); addField(ReplayGainModeField); @@ -105,7 +105,7 @@ namespace UserInterface { addField(PasswordConfirmField); } - setValidator(TranscodeModeField, createMandatoryValidator()); + setValidator(TranscodingModeField, createMandatoryValidator()); setValidator(TranscodeBitrateField, createMandatoryValidator()); setValidator(TranscodeFormatField, createMandatoryValidator()); setValidator(ReplayGainModeField, createMandatoryValidator()); @@ -124,7 +124,7 @@ namespace UserInterface { std::shared_ptr getTranscodingModeModel() { return _transcodingModeModeModel; } std::shared_ptr getTranscodingOutputBitrateModel() { return _transcodingOutputBitrateModel; } - std::shared_ptr getTranscodeFormatModel() { return _transcodingOutputFormatModel; } + std::shared_ptr getTranscodingOutputFormatModel() { return _transcodingOutputFormatModel; } std::shared_ptr getReplayGainModeModel() { return _replayGainModeModel; } std::shared_ptr getSubsonicArtistListModeModel() { return _subsonicArtistListModeModel; } std::shared_ptr getFeedbackBackendModel() { return _feedbackBackendModel; } @@ -139,17 +139,17 @@ namespace UserInterface { { MediaPlayer::Settings settings; - auto transcodeModeRow{ _transcodingModeModeModel->getRowFromString(valueText(TranscodeModeField)) }; - if (transcodeModeRow) - settings.transcode.mode = _transcodingModeModeModel->getValue(*transcodeModeRow); + auto transcodingModeRow{ _transcodingModeModeModel->getRowFromString(valueText(TranscodingModeField)) }; + if (transcodingModeRow) + settings.transcoding.mode = _transcodingModeModeModel->getValue(*transcodingModeRow); - auto transcodeFormatRow{ _transcodingOutputFormatModel->getRowFromString(valueText(TranscodeFormatField)) }; - if (transcodeFormatRow) - settings.transcode.format = _transcodingOutputFormatModel->getValue(*transcodeFormatRow); + auto transcodingOutputFormatRow{ _transcodingOutputFormatModel->getRowFromString(valueText(TranscodeFormatField)) }; + if (transcodingOutputFormatRow) + settings.transcoding.format = _transcodingOutputFormatModel->getValue(*transcodingOutputFormatRow); - auto transcodeBitrateRow{ _transcodingOutputBitrateModel->getRowFromString(valueText(TranscodeBitrateField)) }; - if (transcodeBitrateRow) - settings.transcode.bitrate = _transcodingOutputBitrateModel->getValue(*transcodeBitrateRow); + auto transcodingOutputBitrateRow{ _transcodingOutputBitrateModel->getRowFromString(valueText(TranscodeBitrateField)) }; + if (transcodingOutputBitrateRow) + settings.transcoding.bitrate = _transcodingOutputBitrateModel->getValue(*transcodingOutputBitrateRow); auto replayGainModeRow{ _replayGainModeModel->getRowFromString(valueText(ReplayGainModeField)) }; if (replayGainModeRow) @@ -205,22 +205,22 @@ namespace UserInterface { { const auto settings{ *LmsApp->getMediaPlayer().getSettings() }; - auto transcodeModeRow{ _transcodingModeModeModel->getRowFromValue(settings.transcode.mode) }; - if (transcodeModeRow) - setValue(TranscodeModeField, _transcodingModeModeModel->getString(*transcodeModeRow)); + auto transcodingModeRow{ _transcodingModeModeModel->getRowFromValue(settings.transcoding.mode) }; + if (transcodingModeRow) + setValue(TranscodingModeField, _transcodingModeModeModel->getString(*transcodingModeRow)); - auto transcodeFormatRow{ _transcodingOutputFormatModel->getRowFromValue(settings.transcode.format) }; - if (transcodeFormatRow) - setValue(TranscodeFormatField, _transcodingOutputFormatModel->getString(*transcodeFormatRow)); + auto transcodingOutputFormatRow{ _transcodingOutputFormatModel->getRowFromValue(settings.transcoding.format) }; + if (transcodingOutputFormatRow) + setValue(TranscodeFormatField, _transcodingOutputFormatModel->getString(*transcodingOutputFormatRow)); - auto transcodeBitrateRow{ _transcodingOutputBitrateModel->getRowFromValue(settings.transcode.bitrate) }; - if (transcodeBitrateRow) - setValue(TranscodeBitrateField, _transcodingOutputBitrateModel->getString(*transcodeBitrateRow)); + auto transcodingOutputBitrateRow{ _transcodingOutputBitrateModel->getRowFromValue(settings.transcoding.bitrate) }; + if (transcodingOutputBitrateRow) + setValue(TranscodeBitrateField, _transcodingOutputBitrateModel->getString(*transcodingOutputBitrateRow)); { - const bool usesTranscode{ settings.transcode.mode != MediaPlayer::Settings::Transcode::Mode::Never }; - setReadOnly(SettingsModel::TranscodeFormatField, !usesTranscode); - setReadOnly(SettingsModel::TranscodeBitrateField, !usesTranscode); + const bool useTranscoding{ settings.transcoding.mode != MediaPlayer::Settings::Transcoding::Mode::Never }; + setReadOnly(SettingsModel::TranscodeFormatField, !useTranscoding); + setReadOnly(SettingsModel::TranscodeBitrateField, !useTranscoding); } auto replayGainModeRow{ _replayGainModeModel->getRowFromValue(settings.replayGain.mode) }; @@ -316,9 +316,9 @@ namespace UserInterface { void initializeModels() { _transcodingModeModeModel = std::make_shared(); - _transcodingModeModeModel->add(Wt::WString::tr("Lms.Settings.transcode-mode.always"), MediaPlayer::Settings::Transcode::Mode::Always); - _transcodingModeModeModel->add(Wt::WString::tr("Lms.Settings.transcode-mode.never"), MediaPlayer::Settings::Transcode::Mode::Never); - _transcodingModeModeModel->add(Wt::WString::tr("Lms.Settings.transcode-mode.if-format-not-supported"), MediaPlayer::Settings::Transcode::Mode::IfFormatNotSupported); + _transcodingModeModeModel->add(Wt::WString::tr("Lms.Settings.transcoding-mode.always"), MediaPlayer::Settings::Transcoding::Mode::Always); + _transcodingModeModeModel->add(Wt::WString::tr("Lms.Settings.transcoding-mode.never"), MediaPlayer::Settings::Transcoding::Mode::Never); + _transcodingModeModeModel->add(Wt::WString::tr("Lms.Settings.transcoding-mode.if-format-not-supported"), MediaPlayer::Settings::Transcoding::Mode::IfFormatNotSupported); _transcodingOutputBitrateModel = std::make_shared>(); visitAllowedAudioBitrates([&](const Bitrate bitrate) @@ -327,11 +327,11 @@ namespace UserInterface { }); _transcodingOutputFormatModel = std::make_shared>(); - _transcodingOutputFormatModel->add(Wt::WString::tr("Lms.Settings.transcode-format.mp3"), TranscodingOutputFormat::MP3); - _transcodingOutputFormatModel->add(Wt::WString::tr("Lms.Settings.transcode-format.ogg_opus"), TranscodingOutputFormat::OGG_OPUS); - _transcodingOutputFormatModel->add(Wt::WString::tr("Lms.Settings.transcode-format.matroska_opus"), TranscodingOutputFormat::MATROSKA_OPUS); - _transcodingOutputFormatModel->add(Wt::WString::tr("Lms.Settings.transcode-format.ogg_vorbis"), TranscodingOutputFormat::OGG_VORBIS); - _transcodingOutputFormatModel->add(Wt::WString::tr("Lms.Settings.transcode-format.webm_vorbis"), TranscodingOutputFormat::WEBM_VORBIS); + _transcodingOutputFormatModel->add(Wt::WString::tr("Lms.Settings.transcoding-output-format.mp3"), TranscodingOutputFormat::MP3); + _transcodingOutputFormatModel->add(Wt::WString::tr("Lms.Settings.transcoding-output-format.ogg_opus"), TranscodingOutputFormat::OGG_OPUS); + _transcodingOutputFormatModel->add(Wt::WString::tr("Lms.Settings.transcoding-output-format.matroska_opus"), TranscodingOutputFormat::MATROSKA_OPUS); + _transcodingOutputFormatModel->add(Wt::WString::tr("Lms.Settings.transcoding-output-format.ogg_vorbis"), TranscodingOutputFormat::OGG_VORBIS); + _transcodingOutputFormatModel->add(Wt::WString::tr("Lms.Settings.transcoding-output-format.webm_vorbis"), TranscodingOutputFormat::WEBM_VORBIS); _replayGainModeModel = std::make_shared(); _replayGainModeModel->add(Wt::WString::tr("Lms.Settings.replaygain-mode.none"), MediaPlayer::Settings::ReplayGain::Mode::None); @@ -431,24 +431,24 @@ namespace UserInterface { // Audio { // Transcode - auto transcodeMode{ std::make_unique() }; - auto* transcodeModeRaw{ transcodeMode.get() }; - transcodeMode->setModel(model->getTranscodingModeModel()); - t->setFormWidget(SettingsModel::TranscodeModeField, std::move(transcodeMode)); + auto transcodingMode{ std::make_unique() }; + auto* transcodingModeRaw{ transcodingMode.get() }; + transcodingMode->setModel(model->getTranscodingModeModel()); + t->setFormWidget(SettingsModel::TranscodingModeField, std::move(transcodingMode)); // Format - auto transcodeFormat{ std::make_unique() }; - transcodeFormat->setModel(model->getTranscodeFormatModel()); - t->setFormWidget(SettingsModel::TranscodeFormatField, std::move(transcodeFormat)); + auto transcodingOutputFormat{ std::make_unique() }; + transcodingOutputFormat->setModel(model->getTranscodingOutputFormatModel()); + t->setFormWidget(SettingsModel::TranscodeFormatField, std::move(transcodingOutputFormat)); // Bitrate - auto transcodeBitrate{ std::make_unique() }; - transcodeBitrate->setModel(model->getTranscodingOutputBitrateModel()); - t->setFormWidget(SettingsModel::TranscodeBitrateField, std::move(transcodeBitrate)); + auto transcodingOutputBitrate{ std::make_unique() }; + transcodingOutputBitrate->setModel(model->getTranscodingOutputBitrateModel()); + t->setFormWidget(SettingsModel::TranscodeBitrateField, std::move(transcodingOutputBitrate)); - transcodeModeRaw->activated().connect([=](int row) + transcodingModeRaw->activated().connect([=](int row) { - const bool enable{ model->getTranscodingModeModel()->getValue(row) != MediaPlayer::Settings::Transcode::Mode::Never }; + const bool enable{ model->getTranscodingModeModel()->getValue(row) != MediaPlayer::Settings::Transcoding::Mode::Never }; model->setReadOnly(SettingsModel::TranscodeFormatField, !enable); model->setReadOnly(SettingsModel::TranscodeBitrateField, !enable); t->updateModel(model.get()); @@ -491,14 +491,14 @@ namespace UserInterface { t->setCondition("if-has-subsonic-api", Service::get()->getBool("api-subsonic", true)); // Format - auto transcodeFormat{ std::make_unique() }; - transcodeFormat->setModel(model->getTranscodeFormatModel()); - t->setFormWidget(SettingsModel::SubsonicTranscodingOutputFormatField, std::move(transcodeFormat)); + auto transcodingOutputFormat{ std::make_unique() }; + transcodingOutputFormat->setModel(model->getTranscodingOutputFormatModel()); + t->setFormWidget(SettingsModel::SubsonicTranscodingOutputFormatField, std::move(transcodingOutputFormat)); // Bitrate - auto transcodeBitrate{ std::make_unique() }; - transcodeBitrate->setModel(model->getTranscodingOutputBitrateModel()); - t->setFormWidget(SettingsModel::SubsonicTranscodingOutputBitrateField, std::move(transcodeBitrate)); + auto transcodingOutputBitrate{ std::make_unique() }; + transcodingOutputBitrate->setModel(model->getTranscodingOutputBitrateModel()); + t->setFormWidget(SettingsModel::SubsonicTranscodingOutputBitrateField, std::move(transcodingOutputBitrate)); // Artist list mode auto artistListMode{ std::make_unique() }; diff --git a/src/lms/ui/resource/AudioTranscodeResource.cpp b/src/lms/ui/resource/AudioTranscodingResource.cpp similarity index 95% rename from src/lms/ui/resource/AudioTranscodeResource.cpp rename to src/lms/ui/resource/AudioTranscodingResource.cpp index b8dfa6cb..8c4799b3 100644 --- a/src/lms/ui/resource/AudioTranscodeResource.cpp +++ b/src/lms/ui/resource/AudioTranscodingResource.cpp @@ -17,7 +17,7 @@ * along with LMS. If not, see . */ -#include "AudioTranscodeResource.hpp" +#include "AudioTranscodingResource.hpp" #include #include @@ -159,17 +159,17 @@ namespace UserInterface } } - AudioTranscodeResource:: ~AudioTranscodeResource() + AudioTranscodingResource:: ~AudioTranscodingResource() { beingDeleted(); } - std::string AudioTranscodeResource::getUrl(Database::TrackId trackId) const + std::string AudioTranscodingResource::getUrl(Database::TrackId trackId) const { return url() + "&trackid=" + trackId.toString(); } - void AudioTranscodeResource::handleRequest(const Wt::Http::Request& request, Wt::Http::Response& response) + void AudioTranscodingResource::handleRequest(const Wt::Http::Request& request, Wt::Http::Response& response) { std::shared_ptr resourceHandler; diff --git a/src/lms/ui/resource/AudioTranscodeResource.hpp b/src/lms/ui/resource/AudioTranscodingResource.hpp similarity index 93% rename from src/lms/ui/resource/AudioTranscodeResource.hpp rename to src/lms/ui/resource/AudioTranscodingResource.hpp index a4240b15..4b620352 100644 --- a/src/lms/ui/resource/AudioTranscodeResource.hpp +++ b/src/lms/ui/resource/AudioTranscodingResource.hpp @@ -31,10 +31,10 @@ namespace Database namespace UserInterface { - class AudioTranscodeResource : public Wt::WResource + class AudioTranscodingResource : public Wt::WResource { public: - ~AudioTranscodeResource(); + ~AudioTranscodingResource(); // Url depends on the user since settings are used in parameters std::string getUrl(Database::TrackId trackId) const;