Source: modalAbout.js

"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 modalAbout_js */

/**
 * Initialization function for the about modal
 * @returns {void}
 */
function initModalAbout() {
    const tab = elGetById('modalAboutTabShortcuts');
    elClear(tab);
    const keys = Object.keys(keymap).sort((a, b) => {
        return keymap[a].order - keymap[b].order;
    });
    for (const key of keys) {
        if (keymap[key].cmd === undefined) {
            tab.appendChild(
                elCreateNode('div', {"class": ["row", "mb-2", "mt-3"]},
                    elCreateNode('div', {"class": ["col-12"]},
                        elCreateTextTn('h5', {}, keymap[key].desc)
                    )
                )
            );
            tab.appendChild(
                elCreateEmpty('div', {"class": ["row"]})
            );
            continue;
        }
        const col = elCreateEmpty('div', {"class": ["col", "col-6", "mb-3", "align-items-center"]});
        if (keymap[key].feature !== undefined) {
            col.classList.add(keymap[key].feature);
        }
        const k = elCreateText('div', {"class": ["key", "float-start", "rounded-2"]}, (keymap[key].key !== undefined ? keymap[key].key : key));
        if (keymap[key].key && keymap[key].key.length > 1) {
            k.classList.add('mi', 'mi-sm');
        }
        col.appendChild(k);
        col.appendChild(
            elCreateTextTn('div', {}, keymap[key].desc)
        );
        tab.lastChild.appendChild(col);
    }

    elGetById('modalAbout').addEventListener('show.bs.modal', function () {
        sendAPI("MYMPD_API_STATS", {}, parseStats, false);
        getServerinfo();
    }, false);
}

/**
 * Parses the MYMPD_API_STATS jsonrpc response
 * @param {object} obj jsonrpc response
 * @returns {void}
 */
function parseStats(obj) {
    elGetById('modalAboutArtistCount').textContent = obj.result.artists;
    elGetById('modalAboutAlbumCount').textContent = obj.result.albums;
    elGetById('modalAboutSongCount').textContent = obj.result.songs;
    elGetById('modalAboutDbPlaytime').textContent = fmtDuration(obj.result.dbPlaytime);
    elGetById('modalAboutPlaytime').textContent = fmtDuration(obj.result.playtime);
    elGetById('modalAboutUptime').textContent = fmtDuration(obj.result.uptime);
    elGetById('modalAboutMympdUptime').textContent = fmtDuration(obj.result.myMPDuptime);
    elGetById('modalAboutDbUpdated').textContent = fmtDate(obj.result.dbUpdated);
    elGetById('modalAboutMympdVersion').textContent = obj.result.mympdVersion;
    elGetById('modalAboutMympdVersion').title = myMPDbuild;
    elGetById('modalAboutMympdUri').textContent = obj.result.myMPDuri;

    const mpdInfoVersionEl = elGetById('modalAboutProtocolVersion');
    elClear(mpdInfoVersionEl);
    mpdInfoVersionEl.appendChild(document.createTextNode(obj.result.mpdProtocolVersion));

    const mpdProtocolVersion = obj.result.mpdProtocolVersion.match(/(\d+)\.(\d+)\.(\d+)/);
    if ((mpdProtocolVersion[1] < mpdVersion.major) ||
        (mpdProtocolVersion[1] <= mpdVersion.major && mpdProtocolVersion[2] < mpdVersion.minor) ||
        (mpdProtocolVersion[1] <= mpdVersion.major && mpdProtocolVersion[2] <= mpdVersion.minor && mpdProtocolVersion[3] < mpdVersion.patch)
       )
    {
        mpdInfoVersionEl.appendChild(
            elCreateTextTn('div', {"class": ["alert", "alert-warning", "mt-2", "mb-1"]}, 'MPD version is outdated')
        );
    }
}

/**
 * Gets the serverinfo (ip address)
 * @returns {void}
 */
function getServerinfo() {
    httpGet(subdir + '/serverinfo', function(obj) {
        elGetById('modalAboutWebserverIP').textContent = obj.result.ip;
    }, true);
}