Some more renaming

This commit is contained in:
emeric
2023-11-13 09:25:22 +01:00
parent 87d70465e9
commit 9e2040b449
17 changed files with 442 additions and 453 deletions
+14 -14
View File
@@ -245,8 +245,8 @@
<message id="Lms.Settings.backend.listenbrainz">ListenBrainz</message>
<message id="Lms.Settings.backend.listenbrainz-token">ListenBrainz API token</message>
<message id="Lms.Settings.change-password">Change password</message>
<message id="Lms.Settings.default-transcode-bitrate">Default transcode bitrate</message>
<message id="Lms.Settings.default-transcode-format">Default transcode format</message>
<message id="Lms.Settings.default-transcoding-output-bitrate">Default transcoding output bitrate</message>
<message id="Lms.Settings.default-transcoding-output-format">Default transcoding output format</message>
<message id="Lms.Settings.demo-cannot-save">Cannot save using a demo account!</message>
<message id="Lms.Settings.feedback">Feedback</message>
<message id="Lms.Settings.menu-settings"><i class="fa fa-fw fa-cog" aria-hidden="true"></i> Settings</message>
@@ -267,18 +267,18 @@
<message id="Lms.Settings.subsonic-artist-list-mode.release-artists">Album artists</message>
<message id="Lms.Settings.subsonic-artist-list-mode.track-artists">Track artists</message>
<message id="Lms.Settings.subsonic-api">Subsonic API</message>
<message id="Lms.Settings.transcode">Transcoding</message>
<message id="Lms.Settings.transcode-bitrate">Transcode bitrate</message>
<message id="Lms.Settings.transcode-format">Transcode format</message>
<message id="Lms.Settings.transcode-format.matroska_opus">Matroska/Opus</message>
<message id="Lms.Settings.transcode-format.mp3">MP3</message>
<message id="Lms.Settings.transcode-format.ogg_opus">Ogg/Opus</message>
<message id="Lms.Settings.transcode-format.ogg_vorbis">Ogg/Vorbis</message>
<message id="Lms.Settings.transcode-format.webm_vorbis">WebM/Vorbis</message>
<message id="Lms.Settings.transcode-mode">Enable transcoding</message>
<message id="Lms.Settings.transcode-mode.always">Always</message>
<message id="Lms.Settings.transcode-mode.if-format-not-supported">Only when format is not supported</message>
<message id="Lms.Settings.transcode-mode.never">Never</message>
<message id="Lms.Settings.transcoding">Transcoding</message>
<message id="Lms.Settings.transcoding-output-bitrate">Transcoding output bitrate</message>
<message id="Lms.Settings.transcoding-output-format">Transcoding output format</message>
<message id="Lms.Settings.transcoding-output-format.matroska_opus">Matroska/Opus</message>
<message id="Lms.Settings.transcoding-output-format.mp3">MP3</message>
<message id="Lms.Settings.transcoding-output-format.ogg_opus">Ogg/Opus</message>
<message id="Lms.Settings.transcoding-output-format.ogg_vorbis">Ogg/Vorbis</message>
<message id="Lms.Settings.transcoding-output-format.webm_vorbis">WebM/Vorbis</message>
<message id="Lms.Settings.transcoding-mode">Enable transcoding</message>
<message id="Lms.Settings.transcoding-mode.always">Always</message>
<message id="Lms.Settings.transcoding-mode.if-format-not-supported">Only when format is not supported by the browser</message>
<message id="Lms.Settings.transcoding-mode.never">Never</message>
<message id="Lms.Settings.settings-saved">New settings saved!</message>
</messages>
+14 -14
View File
@@ -245,8 +245,8 @@
<message id="Lms.Settings.backend.listenbrainz">ListenBrainz</message>
<message id="Lms.Settings.backend.listenbrainz-token">Jeton d'API ListenBrainz</message>
<message id="Lms.Settings.change-password">Changement de mot de passe</message>
<message id="Lms.Settings.default-transcode-bitrate">Bitrate par defaut du transcodage</message>
<message id="Lms.Settings.default-transcode-format">Format par defaut du transcodage</message>
<message id="Lms.Settings.default-transcoding-output-bitrate">Bitrate par defaut du transcodage</message>
<message id="Lms.Settings.default-transcoding-output-format">Format par defaut du transcodage</message>
<message id="Lms.Settings.demo-cannot-save">Impossible de sauvegarder en utilisant un compte de démo !</message>
<message id="Lms.Settings.feedback">Feedback</message>
<message id="Lms.Settings.menu-settings"><i class="fa fa-fw fa-cog" aria-hidden="true"></i> Paramètres</message>
@@ -267,18 +267,18 @@
<message id="Lms.Settings.subsonic-artist-list-mode.release-artists">Tous les artistes d'album</message>
<message id="Lms.Settings.subsonic-artist-list-mode.track-artists">Tous les artistes de piste</message>
<message id="Lms.Settings.subsonic-api">API Subsonic</message>
<message id="Lms.Settings.transcode">Transcodage</message>
<message id="Lms.Settings.transcode-bitrate">Bitrate du transcodage</message>
<message id="Lms.Settings.transcode-format">Format du transcodage</message>
<message id="Lms.Settings.transcode-format.matroska_opus">Matroska/Opus</message>
<message id="Lms.Settings.transcode-format.mp3">MP3</message>
<message id="Lms.Settings.transcode-format.ogg_opus">Ogg/Opus</message>
<message id="Lms.Settings.transcode-format.ogg_vorbis">Ogg/Vorbis</message>
<message id="Lms.Settings.transcode-format.webm_vorbis">WebM/Vorbis</message>
<message id="Lms.Settings.transcode-mode">Appliquer le transcodage</message>
<message id="Lms.Settings.transcode-mode.always">Toujours</message>
<message id="Lms.Settings.transcode-mode.if-format-not-supported">Seulement lorsque le format n'est pas pris en charge</message>
<message id="Lms.Settings.transcode-mode.never">Jamais</message>
<message id="Lms.Settings.transcoding">Transcodage</message>
<message id="Lms.Settings.transcoding-output-bitrate">Bitrate du transcodage</message>
<message id="Lms.Settings.transcoding-output-format">Format du transcodage</message>
<message id="Lms.Settings.transcoding-output-format.matroska_opus">Matroska/Opus</message>
<message id="Lms.Settings.transcoding-output-format.mp3">MP3</message>
<message id="Lms.Settings.transcoding-output-format.ogg_opus">Ogg/Opus</message>
<message id="Lms.Settings.transcoding-output-format.ogg_vorbis">Ogg/Vorbis</message>
<message id="Lms.Settings.transcoding-output-format.webm_vorbis">WebM/Vorbis</message>
<message id="Lms.Settings.transcoding-mode">Appliquer le transcodage</message>
<message id="Lms.Settings.transcoding-mode.always">Toujours</message>
<message id="Lms.Settings.transcoding-mode.if-format-not-supported">Seulement lorsque le format n'est pas pris en charge par votre navigateur</message>
<message id="Lms.Settings.transcoding-mode.never">Jamais</message>
<message id="Lms.Settings.settings-saved">Paramètres sauvegardés !</message>
<!--Wt-->
+12 -12
View File
@@ -267,18 +267,18 @@
<message id="Lms.Settings.subsonic-artist-list-mode.release-artists">Artisti album</message>
<message id="Lms.Settings.subsonic-artist-list-mode.track-artists">Artisti tracce</message>
<message id="Lms.Settings.subsonic-api">Subsonic API</message>
<message id="Lms.Settings.transcode">Transcodifica</message>
<message id="Lms.Settings.transcode-bitrate">Bitrate transcodifica</message>
<message id="Lms.Settings.transcode-format">Formato di transcodifica</message>
<message id="Lms.Settings.transcode-format.matroska_opus">Matroska/Opus</message>
<message id="Lms.Settings.transcode-format.mp3">MP3</message>
<message id="Lms.Settings.transcode-format.ogg_opus">Ogg/Opus</message>
<message id="Lms.Settings.transcode-format.ogg_vorbis">Ogg/Vorbis</message>
<message id="Lms.Settings.transcode-format.webm_vorbis">WebM/Vorbis</message>
<message id="Lms.Settings.transcode-mode">Abilita transcodifica</message>
<message id="Lms.Settings.transcode-mode.always">Sempre</message>
<message id="Lms.Settings.transcode-mode.if-format-not-supported">Quando il formato non è supportato</message>
<message id="Lms.Settings.transcode-mode.never">Mai</message>
<message id="Lms.Settings.transcoding">Transcodifica</message>
<message id="Lms.Settings.transcoding-output-bitrate">Bitrate transcodifica</message>
<message id="Lms.Settings.transcoding-output-format">Formato di transcodifica</message>
<message id="Lms.Settings.transcoding-output-format.matroska_opus">Matroska/Opus</message>
<message id="Lms.Settings.transcoding-output-format.mp3">MP3</message>
<message id="Lms.Settings.transcoding-output-format.ogg_opus">Ogg/Opus</message>
<message id="Lms.Settings.transcoding-output-format.ogg_vorbis">Ogg/Vorbis</message>
<message id="Lms.Settings.transcoding-output-format.webm_vorbis">WebM/Vorbis</message>
<message id="Lms.Settings.transcoding-mode">Abilita transcodifica</message>
<message id="Lms.Settings.transcoding-mode.always">Sempre</message>
<message id="Lms.Settings.transcoding-mode.if-format-not-supported">Quando il formato non è supportato</message>
<message id="Lms.Settings.transcoding-mode.never">Mai</message>
<message id="Lms.Settings.settings-saved">Nuove impostazioni salvate!</message>
<!--Wt-->
+12 -12
View File
@@ -267,18 +267,18 @@
<message id="Lms.Settings.subsonic-artist-list-mode.release-artists">专辑歌手</message>
<message id="Lms.Settings.subsonic-artist-list-mode.track-artists">音轨歌手</message>
<message id="Lms.Settings.subsonic-api">Subsonic 应用程序接口</message>
<message id="Lms.Settings.transcode">转码</message>
<message id="Lms.Settings.transcode-bitrate">转码比特率</message>
<message id="Lms.Settings.transcode-format">转码格式</message>
<message id="Lms.Settings.transcode-format.matroska_opus">Matroska/Opus</message>
<message id="Lms.Settings.transcode-format.mp3">MP3</message>
<message id="Lms.Settings.transcode-format.ogg_opus">Ogg/Opus</message>
<message id="Lms.Settings.transcode-format.ogg_vorbis">Ogg/Vorbis</message>
<message id="Lms.Settings.transcode-format.webm_vorbis">WebM/Vorbis</message>
<message id="Lms.Settings.transcode-mode">启动转码</message>
<message id="Lms.Settings.transcode-mode.always">总是</message>
<message id="Lms.Settings.transcode-mode.if-format-not-supported">仅当格式不支持时使用</message>
<message id="Lms.Settings.transcode-mode.never">从不</message>
<message id="Lms.Settings.transcoding">转码</message>
<message id="Lms.Settings.transcoding-output-bitrate">转码比特率</message>
<message id="Lms.Settings.transcoding-output-format">转码格式</message>
<message id="Lms.Settings.transcoding-output-format.matroska_opus">Matroska/Opus</message>
<message id="Lms.Settings.transcoding-output-format.mp3">MP3</message>
<message id="Lms.Settings.transcoding-output-format.ogg_opus">Ogg/Opus</message>
<message id="Lms.Settings.transcoding-output-format.ogg_vorbis">Ogg/Vorbis</message>
<message id="Lms.Settings.transcoding-output-format.webm_vorbis">WebM/Vorbis</message>
<message id="Lms.Settings.transcoding-mode">启动转码</message>
<message id="Lms.Settings.transcoding-mode.always">总是</message>
<message id="Lms.Settings.transcoding-mode.if-format-not-supported">仅当格式不支持时使用</message>
<message id="Lms.Settings.transcoding-mode.never">从不</message>
<message id="Lms.Settings.settings-saved">新设置已保存!</message>
<!--Wt-->
+20 -20
View File
@@ -10,33 +10,33 @@
${tr:Lms.Settings.audio-settings-are-local}
</div>
<div class="col-lg-4">
<label class="form-label" for="${id:transcode-mode}">
${tr:Lms.Settings.transcode-mode}
<label class="form-label" for="${id:transcoding-mode}">
${tr:Lms.Settings.transcoding-mode}
</label>
${transcode-mode class="form-control"}
${transcoding-mode class="form-control"}
<div class="invalid-feedback">
${transcode-mode-info}
${transcoding-mode-info}
</div>
</div>
<div class="col-lg-4">
<label class="form-label" for="${id:transcode-format}">
${tr:Lms.Settings.transcode-format}
<label class="form-label" for="${id:transcoding-output-format}">
${tr:Lms.Settings.transcoding-output-format}
</label>
${transcode-format class="form-control"}
${transcoding-output-format class="form-control"}
<div class="invalid-feedback">
${transcode-format-info}
${transcoding-output-format-info}
</div>
</div>
<div class="col-lg-4">
<label class="form-label" for="${id:transcode-bitrate}">
${tr:Lms.Settings.transcode-bitrate}
<label class="form-label" for="${id:transcoding-output-bitrate}">
${tr:Lms.Settings.transcoding-output-bitrate}
</label>
<div class="input-group mb-3">
${transcode-bitrate class="form-control"}
${transcoding-output-bitrate class="form-control"}
<span class="input-group-text">kbps</span>
</div>
<div class="invalid-feedback">
${transcode-bitrate-info}
${transcoding-output-bitrate-info}
</div>
</div>
<div class="col-lg-4">
@@ -75,24 +75,24 @@
${<if-has-subsonic-api>}
<legend>${tr:Lms.Settings.subsonic-api}</legend>
<div class="col-lg-6">
<label class="form-label" for="${id:subsonic-transcode-format}">
${tr:Lms.Settings.default-transcode-format}
<label class="form-label" for="${id:subsonic-transcoding-output-format}">
${tr:Lms.Settings.default-transcoding-output-format}
</label>
${subsonic-transcode-format class="form-control"}
${subsonic-transcoding-output-format class="form-control"}
<div class="invalid-feedback">
${subsonic-transcode-format-info class="help-block"}
${subsonic-transcoding-output-format-info class="help-block"}
</div>
</div>
<div class="col-lg-6">
<label class="form-label" for="${id:subsonic-transcode-bitrate}">
${tr:Lms.Settings.default-transcode-bitrate}
<label class="form-label" for="${id:subsonic-transcoding-output-bitrate}">
${tr:Lms.Settings.default-transcoding-output-bitrate}
</label>
<div class="input-group mb-3">
${subsonic-transcode-bitrate class="form-control"}
${subsonic-transcoding-output-bitrate class="form-control"}
<span class="input-group-text">kbps</span>
</div>
<div class="invalid-feedback">
${subsonic-transcode-bitrate-info class="help-block"}
${subsonic-transcoding-output-bitrate-info class="help-block"}
</div>
</div>
<div class="col-12">
+12 -12
View File
@@ -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();
+1 -1
View File
@@ -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<size_t> globalId{};
static std::filesystem::path ffmpegPath;
@@ -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<const char*>(&_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 {};
+4 -4
View File
@@ -39,7 +39,7 @@ const char* getModuleName(Module mod)
case Module::SCROBBLING: return "SCROBBLING";
case Module::SERVICE: return "SERVICE";
case Module::RECOMMENDATION: return "RECOMMENDATION";
case Module::TRANSCODE: return "TRANSCODE";
case Module::TRANSCODING: return "TRANSCODING";
case Module::UI: return "UI";
case Module::UTILS: return "UTILS";
}
@@ -60,9 +60,9 @@ const char* getSeverityName(Severity sev)
}
Log::Log(Logger* logger, Module module, Severity severity)
: _module {module},
_severity {severity},
_logger {logger}
: _module{ module },
_severity{ severity },
_logger{ logger }
{}
Log::~Log()
+1 -1
View File
@@ -51,7 +51,7 @@ enum class Module
SCROBBLING,
SERVICE,
RECOMMENDATION,
TRANSCODE,
TRANSCODING,
UI,
UTILS,
};
+1 -1
View File
@@ -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
)
+1 -1
View File
@@ -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"
+84 -93
View File
@@ -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,20 +44,22 @@
#include "LmsApplication.hpp"
#include "Utils.hpp"
namespace UserInterface {
static std::string settingsToJSString(const MediaPlayer::Settings& settings)
namespace UserInterface
{
namespace
{
std::string settingsToJSString(const MediaPlayer::Settings& settings)
{
namespace Json = Wt::Json;
Json::Object res;
{
Json::Object transcode;
transcode["mode"] = static_cast<int>(settings.transcode.mode);
transcode["format"] = static_cast<int>(settings.transcode.format);
transcode["bitrate"] = static_cast<int>(settings.transcode.bitrate);
res["transcode"] = std::move(transcode);
Json::Object transcoding;
transcoding["mode"] = static_cast<int>(settings.transcoding.mode);
transcoding["format"] = static_cast<int>(settings.transcoding.format);
transcoding["bitrate"] = static_cast<int>(settings.transcoding.bitrate);
res["transcoding"] = std::move(transcoding);
}
{
@@ -69,37 +71,33 @@ static std::string settingsToJSString(const MediaPlayer::Settings& settings)
}
return Json::serialize(res);
}
}
static
std::optional<MediaPlayer::Settings::Transcode::Mode>
transcodeModeFromString(const std::string& str)
{
const auto value {StringUtils::readAs<int>(str)};
std::optional<MediaPlayer::Settings::Transcoding::Mode> transcodingModeFromString(const std::string& str)
{
const auto value{ StringUtils::readAs<int>(str) };
if (!value)
return std::nullopt;
MediaPlayer::Settings::Transcode::Mode mode {static_cast<MediaPlayer::Settings::Transcode::Mode>(*value)};
MediaPlayer::Settings::Transcoding::Mode mode{ static_cast<MediaPlayer::Settings::Transcoding::Mode>(*value) };
switch (mode)
{
case MediaPlayer::Settings::Transcode::Mode::Never:
case MediaPlayer::Settings::Transcode::Mode::Always:
case MediaPlayer::Settings::Transcode::Mode::IfFormatNotSupported:
case MediaPlayer::Settings::Transcoding::Mode::Never:
case MediaPlayer::Settings::Transcoding::Mode::Always:
case MediaPlayer::Settings::Transcoding::Mode::IfFormatNotSupported:
return mode;
}
return std::nullopt;
}
}
static
std::optional<MediaPlayer::Format>
formatFromString(const std::string& str)
{
const auto value {StringUtils::readAs<int>(str)};
std::optional<MediaPlayer::Format> formatFromString(const std::string& str)
{
const auto value{ StringUtils::readAs<int>(str) };
if (!value)
return std::nullopt;
MediaPlayer::Format format {static_cast<MediaPlayer::Format>(*value)};
MediaPlayer::Format format{ static_cast<MediaPlayer::Format>(*value) };
switch (format)
{
case MediaPlayer::Format::MP3:
@@ -111,13 +109,11 @@ formatFromString(const std::string& str)
}
return std::nullopt;
}
}
static
std::optional<MediaPlayer::Bitrate>
bitrateFromString(const std::string& str)
{
const auto value {StringUtils::readAs<int>(str)};
std::optional<MediaPlayer::Bitrate> bitrateFromString(const std::string& str)
{
const auto value{ StringUtils::readAs<int>(str) };
if (!value)
return std::nullopt;
@@ -125,17 +121,15 @@ bitrateFromString(const std::string& str)
return std::nullopt;
return *value;
}
}
static
std::optional<MediaPlayer::Settings::ReplayGain::Mode>
replayGainModeFromString(const std::string& str)
{
const auto value {StringUtils::readAs<int>(str)};
std::optional<MediaPlayer::Settings::ReplayGain::Mode> replayGainModeFromString(const std::string& str)
{
const auto value{ StringUtils::readAs<int>(str) };
if (!value)
return std::nullopt;
MediaPlayer::Settings::ReplayGain::Mode mode {static_cast<MediaPlayer::Settings::ReplayGain::Mode>(*value)};
MediaPlayer::Settings::ReplayGain::Mode mode{ static_cast<MediaPlayer::Settings::ReplayGain::Mode>(*value) };
switch (mode)
{
case MediaPlayer::Settings::ReplayGain::Mode::None:
@@ -146,21 +140,19 @@ replayGainModeFromString(const std::string& str)
}
return std::nullopt;
}
}
static
std::optional<float>
replayGainPreAmpGainFromString(const std::string& str)
{
const auto value {StringUtils::readAs<double>(str)};
std::optional<float> replayGainPreAmpGainFromString(const std::string& str)
{
const auto value{ StringUtils::readAs<double>(str) };
if (!value)
return std::nullopt;
return ::Utils::clamp(*value, (double)MediaPlayer::Settings::ReplayGain::minPreAmpGain, (double)MediaPlayer::Settings::ReplayGain::maxPreAmpGain);
}
}
static MediaPlayer::Settings settingsfromJSString(const std::string& strSettings)
{
MediaPlayer::Settings settingsfromJSString(const std::string& strSettings)
{
using Settings = MediaPlayer::Settings;
namespace Json = Wt::Json;
Json::Object parsedSettings;
@@ -170,20 +162,20 @@ static MediaPlayer::Settings settingsfromJSString(const std::string& strSettings
MediaPlayer::Settings settings;
{
const Json::Value transcodeValue {parsedSettings.get("transcode")};
if (transcodeValue.type() == Json::Type::Object)
const Json::Value transcodingValue{ parsedSettings.get("transcoding") };
if (transcodingValue.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::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")};
const Json::Value replayGainValue{ parsedSettings.get("replayGain") };
if (replayGainValue.type() == Json::Type::Object)
{
const Json::Object replayGain {replayGainValue};
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);
@@ -191,20 +183,21 @@ static MediaPlayer::Settings settingsfromJSString(const std::string& strSettings
}
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"}
{
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<AudioTranscodeResource>();
_audioTranscodingResource = std::make_unique<AudioTranscodingResource>();
_audioFileResource = std::make_unique<AudioFileResource>();
_title = bindNew<Wt::WText>("title");
@@ -212,7 +205,7 @@ MediaPlayer::MediaPlayer()
_release = bindNew<Wt::WAnchor>("release");
_separator = bindNew<Wt::WText>("separator");
_playQueue = bindNew<Wt::WPushButton>("playqueue-btn", Wt::WString::tr("Lms.MediaPlayer.template.playqueue-btn").arg(0), Wt::TextFormat::XHTML);
_playQueue->setLink(Wt::WLink {Wt::LinkType::InternalPath, "/playqueue"});
_playQueue->setLink(Wt::WLink{ Wt::LinkType::InternalPath, "/playqueue" });
_playQueue->setToolTip(tr("Lms.PlayQueue.playqueue"));
_settingsLoaded.connect([this](const std::string& settings)
@@ -236,31 +229,30 @@ MediaPlayer::MediaPlayer()
LMS_LOG(UI, DEBUG) << "Running js = '" << oss.str() << "'";
doJavaScript(oss.str());
}
}
}
void
MediaPlayer::loadTrack(Database::TrackId trackId, bool play, float replayGain)
{
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()};
auto transaction{ LmsApp->getDbSession().createSharedTransaction() };
const auto track {Database::Track::find(LmsApp->getDbSession(), trackId)};
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 << "\","
<< " transcodingResource: \"" << transcodingResource << "\","
<< " duration: " << std::chrono::duration_cast<std::chrono::seconds>(track->getDuration()).count() << ","
<< " replayGain: " << replayGain << ","
<< " title: \"" << StringUtils::jsEscape(track->getName()) << "\","
@@ -271,12 +263,15 @@ MediaPlayer::loadTrack(Database::TrackId trackId, bool play, float replayGain)
<< " { src: \"" << LmsApp->getCoverResource()->getTrackUrl(trackId, CoverResource::Size::Large) << "\", sizes: \"512x512\", type: \"image/jpeg\" },"
<< " ]"
<< "};";
// Update 'sizes' above to match this:
static_assert(static_cast<std::underlying_type_t<CoverResource::Size>>(CoverResource::Size::Small) == 128);
static_assert(static_cast<std::underlying_type_t<CoverResource::Size>>(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()));
bool needSeparator {true};
bool needSeparator{ true };
if (!artists.empty())
{
@@ -315,17 +310,15 @@ MediaPlayer::loadTrack(Database::TrackId trackId, bool play, float replayGain)
_trackIdLoaded = trackId;
trackLoaded.emit(*_trackIdLoaded);
}
}
void
MediaPlayer::stop()
{
void MediaPlayer::stop()
{
doJavaScript("LMS.mediaplayer.stop()");
}
}
void
MediaPlayer::setSettings(const Settings& settings)
{
void MediaPlayer::setSettings(const Settings& settings)
{
_settings = settings;
{
@@ -335,13 +328,11 @@ MediaPlayer::setSettings(const Settings& settings)
LMS_LOG(UI, DEBUG) << "Running js = '" << oss.str() << "'";
doJavaScript(oss.str());
}
}
}
void
MediaPlayer::onPlayQueueUpdated(std::size_t trackCount)
{
void MediaPlayer::onPlayQueueUpdated(std::size_t trackCount)
{
_playQueue->setText(Wt::WString::tr("Lms.MediaPlayer.template.playqueue-btn").arg(trackCount));
}
}
} // namespace UserInterface
+5 -7
View File
@@ -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<Database::TrackId> getTrackLoaded() const { return _trackIdLoaded; }
@@ -118,7 +116,7 @@ namespace UserInterface
private:
std::unique_ptr<AudioFileResource> _audioFileResource;
std::unique_ptr<AudioTranscodeResource> _audioTranscodeResource;
std::unique_ptr<AudioTranscodingResource> _audioTranscodingResource;
std::optional<Database::TrackId> _trackIdLoaded;
std::optional<Settings> _settings;
+58 -58
View File
@@ -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<MediaPlayer::Settings::Transcode::Mode>;
using TranscodingModeModel = ValueStringModel<MediaPlayer::Settings::Transcoding::Mode>;
using ReplayGainModeModel = ValueStringModel<MediaPlayer::Settings::ReplayGain::Mode>;
using FeedbackBackendModel = ValueStringModel<FeedbackBackend>;
using ScrobblingBackendModel = ValueStringModel<ScrobblingBackend>;
@@ -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<TranscodingModeModel> getTranscodingModeModel() { return _transcodingModeModeModel; }
std::shared_ptr<Wt::WAbstractItemModel> getTranscodingOutputBitrateModel() { return _transcodingOutputBitrateModel; }
std::shared_ptr<Wt::WAbstractItemModel> getTranscodeFormatModel() { return _transcodingOutputFormatModel; }
std::shared_ptr<Wt::WAbstractItemModel> getTranscodingOutputFormatModel() { return _transcodingOutputFormatModel; }
std::shared_ptr<ReplayGainModeModel> getReplayGainModeModel() { return _replayGainModeModel; }
std::shared_ptr<Wt::WAbstractItemModel> getSubsonicArtistListModeModel() { return _subsonicArtistListModeModel; }
std::shared_ptr<FeedbackBackendModel> 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<TranscodingModeModel>();
_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<ValueStringModel<Bitrate>>();
visitAllowedAudioBitrates([&](const Bitrate bitrate)
@@ -327,11 +327,11 @@ namespace UserInterface {
});
_transcodingOutputFormatModel = std::make_shared<ValueStringModel<TranscodingOutputFormat>>();
_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>();
_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<Wt::WComboBox>() };
auto* transcodeModeRaw{ transcodeMode.get() };
transcodeMode->setModel(model->getTranscodingModeModel());
t->setFormWidget(SettingsModel::TranscodeModeField, std::move(transcodeMode));
auto transcodingMode{ std::make_unique<Wt::WComboBox>() };
auto* transcodingModeRaw{ transcodingMode.get() };
transcodingMode->setModel(model->getTranscodingModeModel());
t->setFormWidget(SettingsModel::TranscodingModeField, std::move(transcodingMode));
// Format
auto transcodeFormat{ std::make_unique<Wt::WComboBox>() };
transcodeFormat->setModel(model->getTranscodeFormatModel());
t->setFormWidget(SettingsModel::TranscodeFormatField, std::move(transcodeFormat));
auto transcodingOutputFormat{ std::make_unique<Wt::WComboBox>() };
transcodingOutputFormat->setModel(model->getTranscodingOutputFormatModel());
t->setFormWidget(SettingsModel::TranscodeFormatField, std::move(transcodingOutputFormat));
// Bitrate
auto transcodeBitrate{ std::make_unique<Wt::WComboBox>() };
transcodeBitrate->setModel(model->getTranscodingOutputBitrateModel());
t->setFormWidget(SettingsModel::TranscodeBitrateField, std::move(transcodeBitrate));
auto transcodingOutputBitrate{ std::make_unique<Wt::WComboBox>() };
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<IConfig>::get()->getBool("api-subsonic", true));
// Format
auto transcodeFormat{ std::make_unique<Wt::WComboBox>() };
transcodeFormat->setModel(model->getTranscodeFormatModel());
t->setFormWidget(SettingsModel::SubsonicTranscodingOutputFormatField, std::move(transcodeFormat));
auto transcodingOutputFormat{ std::make_unique<Wt::WComboBox>() };
transcodingOutputFormat->setModel(model->getTranscodingOutputFormatModel());
t->setFormWidget(SettingsModel::SubsonicTranscodingOutputFormatField, std::move(transcodingOutputFormat));
// Bitrate
auto transcodeBitrate{ std::make_unique<Wt::WComboBox>() };
transcodeBitrate->setModel(model->getTranscodingOutputBitrateModel());
t->setFormWidget(SettingsModel::SubsonicTranscodingOutputBitrateField, std::move(transcodeBitrate));
auto transcodingOutputBitrate{ std::make_unique<Wt::WComboBox>() };
transcodingOutputBitrate->setModel(model->getTranscodingOutputBitrateModel());
t->setFormWidget(SettingsModel::SubsonicTranscodingOutputBitrateField, std::move(transcodingOutputBitrate));
// Artist list mode
auto artistListMode{ std::make_unique<Wt::WComboBox>() };
@@ -17,7 +17,7 @@
* along with LMS. If not, see <http://www.gnu.org/licenses/>.
*/
#include "AudioTranscodeResource.hpp"
#include "AudioTranscodingResource.hpp"
#include <optional>
#include <Wt/Http/Response.h>
@@ -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<IResourceHandler> resourceHandler;
@@ -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;