"use strict";
// SPDX-License-Identifier: GPL-3.0-or-later
// myMPD (c) 2018-2024 Juergen Mang <mail@jcgames.de>
// https://github.com/jcorporation/mympd
/** @module modalConnection_js */
/**
* Initialization function for the connection settings elements
* @returns {void}
*/
function initModalSettingsConnection() {
// cache for the form field containers
const forms = {};
// create the fields
createForm(settingsConnectionFields, 'modalConnection', forms);
initElements(elGetById('modalConnection'));
elGetById('modalConnectionMusicDirectorySelect').addEventListener('change', function() {
const musicDirMode = getSelectValue(this);
const musicDirInput = elGetById('modalConnectionMusicDirectoryInput');
if (musicDirMode === 'auto') {
musicDirInput.value = settings.musicDirectoryValue;
musicDirInput.setAttribute('readonly', 'readonly');
}
else if (musicDirMode === 'none') {
musicDirInput.value = '';
musicDirInput.setAttribute('readonly', 'readonly');
}
else {
musicDirInput.value = '';
musicDirInput.removeAttribute('readonly');
}
}, false);
elGetById('modalConnectionPlaylistDirectorySelect').addEventListener('change', function() {
const playlistDirMode = getSelectValue(this);
const playlistDirInput = elGetById('modalConnectionPlaylistDirectoryInput');
if (playlistDirMode === 'auto') {
playlistDirInput.value = settings.playlistDirectoryValue;
playlistDirInput.setAttribute('readonly', 'readonly');
}
else if (playlistDirMode === 'none') {
playlistDirInput.value = '';
playlistDirInput.setAttribute('readonly', 'readonly');
}
else {
playlistDirInput.value = '';
playlistDirInput.removeAttribute('readonly');
}
}, false);
elGetById('modalConnection').addEventListener('show.bs.modal', function() {
getSettings(function(obj) {
if (parseSettings(obj) === true) {
cleanupModalId('modalConnection');
populateConnectionFrm();
if (settings.mpdHost !== settings.stickerdbMpdHost ||
settings.mpdPort !== settings.stickerdbMpdPort)
{
toggleBtnChkCollapseId('modalConnectionStickerdbToggleBtn', 'modalConnectionStickerdbCollapse', true);
}
else {
toggleBtnChkCollapseId('modalConnectionStickerdbToggleBtn', 'modalConnectionStickerdbCollapse', false);
}
uiElements.modalConnection.show();
}
});
});
}
/**
* Saves the mpd connection settings
* @param {Element} target triggering element
* @returns {void}
*/
//eslint-disable-next-line no-unused-vars
function saveConnection(target) {
cleanupModalId('modalConnection');
const settingsParams = {};
const mpdLocal = elGetById('modalConnectionMpdHostInput').value.indexOf('/') === 0
? true
: false;
const musicDirectoryEl = elGetById('modalConnectionMusicDirectorySelect');
const musicDirectory = getSelectValue(musicDirectoryEl);
if (musicDirectory === 'auto' &&
mpdLocal === false)
{
setIsInvalid(musicDirectoryEl);
return;
}
const playlistDirectoryEl = elGetById('modalConnectionPlaylistDirectorySelect');
const playlistDirectory = getSelectValue(playlistDirectoryEl);
if (playlistDirectory === 'auto' &&
mpdLocal === false)
{
setIsInvalid(playlistDirectoryEl);
return;
}
const useStickerdbMPDhost = getBtnChkValueId('modalConnectionStickerdbToggleBtn');
if (useStickerdbMPDhost === false) {
elGetById('modalConnectionStickerdbMpdHostInput').value = elGetById('modalConnectionMpdHostInput').value;
elGetById('modalConnectionStickerdbMpdPortInput').value = elGetById('modalConnectionMpdPortInput').value;
elGetById('modalConnectionStickerdbMpdPassInput').value = elGetById('modalConnectionMpdPassInput').value;
elGetById('modalConnectionStickerdbMpdTimeoutInput').value = elGetById('modalConnectionMpdTimeoutInput').value;
elGetById('modalConnectionStickerdbMpdKeepaliveInput').value = elGetById('modalConnectionMpdKeepaliveInput').value;
}
if (formToJson('modalConnection', settingsParams, settingsConnectionFields) === true) {
if (musicDirectory === 'custom') {
settingsParams.musicDirectory = elGetById('modalConnectionMusicDirectoryInput').value;
}
else {
settingsParams.musicDirectory = musicDirectory;
}
if (playlistDirectory === 'custom') {
settingsParams.playlistDirectory = elGetById('modalConnectionPlaylistDirectoryInput').value;
}
else {
settingsParams.playlistDirectory = playlistDirectory;
}
settingsParams.mpdBinarylimit = settingsParams.mpdBinarylimit * 1024;
settingsParams.mpdTimeout = settingsParams.mpdTimeout * 1000;
settingsParams.stickerdbMpdTimeout = settingsParams.stickerdbMpdTimeout * 1000;
btnWaiting(target, true);
sendAPIpartition('default', 'MYMPD_API_CONNECTION_SAVE', settingsParams, saveConnectionClose, true);
}
}
/**
* Handler for the MYMPD_API_CONNECTION_SAVE jsonrpc response
* @param {object} obj jsonrpc response
* @returns {void}
*/
function saveConnectionClose(obj) {
if (modalClose(obj) === true) {
getSettings(parseSettings);
}
}
/**
* Populates the connection modal
* @returns {void}
*/
function populateConnectionFrm() {
jsonToForm(settings, settingsConnectionFields, 'modalConnection');
elGetById('modalConnectionMpdTimeoutInput').value = settings.mpdTimeout / 1000;
elGetById('modalConnectionStickerdbMpdTimeoutInput').value = settings.stickerdbMpdTimeout / 1000;
elGetById('modalConnectionMpdBinarylimitInput').value = settings.mpdBinarylimit / 1024;
if (settings.musicDirectory === 'auto') {
elGetById('modalConnectionMusicDirectorySelect').value = settings.musicDirectory;
elGetById('modalConnectionMusicDirectoryInput').value = settings.musicDirectoryValue !== undefined
? settings.musicDirectoryValue
: '';
elGetById('modalConnectionMusicDirectoryInput').setAttribute('readonly', 'readonly');
}
else if (settings.musicDirectory === 'none') {
elGetById('modalConnectiontMusicDirectorySelect').value = settings.musicDirectory;
elGetById('modalConnectionMusicDirectoryInput').value = '';
elGetById('modalConnectionMusicDirectoryInput').setAttribute('readonly', 'readonly');
}
else {
elGetById('modalConnectionMusicDirectorySelect').value = 'custom';
elGetById('modalConnectionMusicDirectoryInput').value = settings.musicDirectoryValue;
elGetById('modalConnectionMusicDirectoryInput').removeAttribute('readonly');
}
if (settings.musicDirectoryValue === '' &&
settings.musicDirectory !== 'none')
{
elShowId('modalConnectionMusicDirectoryWarn');
}
else {
elHideId('modalConnectionMusicDirectoryWarn');
}
if (features.featPlaylistDirAuto === false &&
settings.playlistDirectory === 'auto')
{
settings.playlistDirectory = 'none';
}
if (settings.playlistDirectory === 'auto') {
elGetById('modalConnectionPlaylistDirectorySelect').value = settings.playlistDirectory;
elGetById('modalConnectionPlaylistDirectoryInput').value = settings.playlistDirectoryValue !== undefined
? settings.playlistDirectoryValue
: '';
elGetById('modalConnectionPlaylistDirectoryInput').setAttribute('readonly', 'readonly');
}
else if (settings.playlistDirectory === 'none') {
elGetById('modalConnectionPlaylistDirectorySelect').value = settings.playlistDirectory;
elGetById('modalConnectionPlaylistDirectoryInput').value = '';
elGetById('modalConnectionPlaylistDirectoryInput').setAttribute('readonly', 'readonly');
}
else {
elGetById('modalConnectionPlaylistDirectorySelect').value = 'custom';
elGetById('modalConnectionPlaylistDirectoryInput').value = settings.playlistDirectoryValue;
elGetById('modalConnectionPlaylistDirectoryInput').removeAttribute('readonly');
}
if (settings.playlistDirectoryValue === '' &&
settings.playlistDirectory !== 'none')
{
elShowId('modalConnectionPlaylistDirectoryWarn');
}
else {
elHideId('modalConnectionPlaylistDirectoryWarn');
}
}