index.d3a3e6.bundle.js.map 115 KB

1
  1. {"version":3,"file":"./js/index.d3a3e6.bundle.js","mappings":"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","sources":["webpack://squeezelite-esp32/webpack/runtime/chunk loaded","webpack://squeezelite-esp32/./src/js/custom.js","webpack://squeezelite-esp32/./src/index.ts","webpack://squeezelite-esp32/webpack/bootstrap","webpack://squeezelite-esp32/webpack/runtime/compat get default export","webpack://squeezelite-esp32/webpack/runtime/define property getters","webpack://squeezelite-esp32/webpack/runtime/global","webpack://squeezelite-esp32/webpack/runtime/hasOwnProperty shorthand","webpack://squeezelite-esp32/webpack/runtime/make namespace object","webpack://squeezelite-esp32/webpack/runtime/node module decorator","webpack://squeezelite-esp32/webpack/runtime/jsonp chunk loading","webpack://squeezelite-esp32/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var he = require('he');\nvar Promise = require('es6-promise').Promise;\nwindow.bootstrap = require('bootstrap');\nimport Cookies from 'js-cookie';\n\n\n\nif (!String.prototype.format) {\n Object.assign(String.prototype, {\n format() {\n const args = arguments;\n return this.replace(/{(\\d+)}/g, function (match, number) {\n return typeof args[number] !== 'undefined' ? args[number] : match;\n });\n },\n });\n}\nif (!String.prototype.encodeHTML) {\n Object.assign(String.prototype, {\n encodeHTML() {\n return he.encode(this).replace(/\\n/g, '<br />');\n },\n });\n}\nObject.assign(Date.prototype, {\n toLocalShort() {\n const opt = { dateStyle: 'short', timeStyle: 'short' };\n return this.toLocaleString(undefined, opt);\n },\n});\nfunction handleNVSVisible(){\n let nvs_previous_checked = isEnabled(Cookies.get(\"show-nvs\"));\n $('input#show-nvs')[0].checked = nvs_previous_checked ;\n if ($('input#show-nvs')[0].checked || recovery) {\n $('*[href*=\"-nvs\"]').show();\n } else {\n $('*[href*=\"-nvs\"]').hide();\n }\n}\n\n\nfunction isEnabled(val) {\n return val!=undefined && typeof val === 'string' && val.match(\"[Yy1]\");\n}\n\nconst nvsTypes = {\n NVS_TYPE_U8: 0x01,\n\n /*! < Type uint8_t */\n NVS_TYPE_I8: 0x11,\n\n /*! < Type int8_t */\n NVS_TYPE_U16: 0x02,\n\n /*! < Type uint16_t */\n NVS_TYPE_I16: 0x12,\n\n /*! < Type int16_t */\n NVS_TYPE_U32: 0x04,\n\n /*! < Type uint32_t */\n NVS_TYPE_I32: 0x14,\n\n /*! < Type int32_t */\n NVS_TYPE_U64: 0x08,\n\n /*! < Type uint64_t */\n NVS_TYPE_I64: 0x18,\n\n /*! < Type int64_t */\n NVS_TYPE_STR: 0x21,\n\n /*! < Type string */\n NVS_TYPE_BLOB: 0x42,\n\n /*! < Type blob */\n NVS_TYPE_ANY: 0xff /*! < Must be last */,\n};\nconst btIcons = {\n bt_playing: {'label':'','icon': 'media_bluetooth_on'},\n bt_disconnected: {'label':'','icon': 'media_bluetooth_off'},\n bt_neutral: {'label':'','icon': 'bluetooth'},\n bt_connecting: {'label':'','icon': 'bluetooth_searching'},\n bt_connected: {'label':'','icon': 'bluetooth_connected'},\n bt_disabled: {'label':'','icon': 'bluetooth_disabled'},\n play_arrow: {'label':'','icon': 'play_circle_filled'},\n pause: {'label':'','icon': 'pause_circle'},\n stop: {'label':'','icon': 'stop_circle'},\n '': {'label':'','icon':''}\n};\nconst batIcons = [\n { icon: \"battery_0_bar\", label:'▪', ranges: [{ f: 5.8, t: 6.8 }, { f: 8.8, t: 10.2 }] },\n { icon: \"battery_2_bar\", label:'▪▪', ranges: [{ f: 6.8, t: 7.4 }, { f: 10.2, t: 11.1 }] },\n { icon: \"battery_3_bar\", label:'▪▪▪', ranges: [{ f: 7.4, t: 7.5 }, { f: 11.1, t: 11.25 }] },\n { icon: \"battery_4_bar\", label:'▪▪▪▪', ranges: [{ f: 7.5, t: 7.8 }, { f: 11.25, t: 11.7 }] }\n];\nconst btStateIcons = [\n { desc: 'Idle', sub: ['bt_neutral'] },\n { desc: 'Discovering', sub: ['bt_connecting'] },\n { desc: 'Discovered', sub: ['bt_connecting'] },\n { desc: 'Unconnected', sub: ['bt_disconnected'] },\n { desc: 'Connecting', sub: ['bt_connecting'] },\n {\n desc: 'Connected',\n sub: ['bt_connected', 'play_arrow', 'bt_playing', 'pause', 'stop'],\n },\n { desc: 'Disconnecting', sub: ['bt_disconnected'] },\n];\n\nconst pillcolors = {\n MESSAGING_INFO: 'badge-success',\n MESSAGING_WARNING: 'badge-warning',\n MESSAGING_ERROR: 'badge-danger',\n};\nconst connectReturnCode = {\n OK: 0,\n FAIL: 1,\n DISC: 2,\n LOST: 3,\n RESTORE: 4,\n ETH: 5\n}\nconst taskStates = {\n 0: 'eRunning',\n /*! < A task is querying the state of itself, so must be running. */\n 1: 'eReady',\n /*! < The task being queried is in a read or pending ready list. */\n 2: 'eBlocked',\n /*! < The task being queried is in the Blocked state. */\n 3: 'eSuspended',\n /*! < The task being queried is in the Suspended state, or is in the Blocked state with an infinite time out. */\n 4: 'eDeleted',\n};\nlet flashState = {\n NONE: 0,\n REBOOT_TO_RECOVERY: 2,\n SET_FWURL: 5,\n FLASHING: 6,\n DONE: 7,\n UPLOADING: 8,\n ERROR: 9,\n UPLOADCOMPLETE: 10,\n _state: -1,\n olderRecovery: false,\n statusText: '',\n flashURL: '',\n flashFileName: '',\n statusPercent: 0,\n Completed: false,\n recovery: false,\n prevRecovery: false,\n updateModal: new bootstrap.Modal(document.getElementById('otadiv'), {}),\n reset: function () {\n\n this.olderRecovery = false;\n this.statusText = '';\n this.statusPercent = -1;\n this.flashURL = '';\n this.flashFileName = undefined;\n this.UpdateProgress();\n $('#rTable tr.release').removeClass('table-success table-warning');\n $('.flact').prop('disabled', false);\n $('#flashfilename').value = null;\n $('#fw-url-input').value = null;\n if(!this.isStateError()){\n $('span#flash-status').html('');\n $('#fwProgressLabel').parent().removeClass('bg-danger');\n }\n this._state = this.NONE\n return this;\n },\n isStateUploadComplete: function () {\n return this._state == this.UPLOADCOMPLETE;\n },\n isStateError: function () {\n return this._state == this.ERROR;\n },\n isStateNone: function () {\n return this._state == this.NONE;\n },\n isStateRebootRecovery: function () {\n return this._state == this.REBOOT_TO_RECOVERY;\n },\n isStateSetUrl: function () {\n return this._state == this.SET_FWURL;\n },\n isStateFlashing: function () {\n return this._state == this.FLASHING;\n },\n isStateDone: function () {\n return this._state == this.DONE;\n },\n isStateUploading: function () {\n return this._state == this.UPLOADING;\n },\n init: function () {\n this._state = this.NONE;\n return this;\n },\n\n SetStateError: function () {\n this._state = this.ERROR;\n $('#fwProgressLabel').parent().addClass('bg-danger');\n return this;\n },\n SetStateNone: function () {\n this._state = this.NONE;\n return this;\n },\n SetStateRebootRecovery: function () {\n this._state = this.REBOOT_TO_RECOVERY;\n // Reboot system to recovery mode\n this.SetStatusText('Starting recovery mode.')\n $.ajax({\n url: '/recovery.json',\n context: this,\n dataType: 'text',\n method: 'POST',\n cache: false,\n contentType: 'application/json; charset=utf-8',\n data: JSON.stringify({\n timestamp: Date.now(),\n }),\n error: function (xhr, _ajaxOptions, thrownError) {\n this.setOTAError(`Unexpected error while trying to restart to recovery. (status=${xhr.status ?? ''}, error=${thrownError ?? ''} ) `);\n },\n complete: function (response) {\n this.SetStatusText('Waiting for system to boot.')\n },\n });\n return this;\n },\n SetStateSetUrl: function () {\n this._state = this.SET_FWURL;\n this.statusText = 'Sending firmware download location.';\n let confData = {\n fwurl: {\n value: this.flashURL,\n type: 33,\n }\n };\n post_config(confData);\n return this;\n },\n SetStateFlashing: function () {\n this._state = this.FLASHING;\n return this;\n },\n SetStateDone: function () {\n this._state = this.DONE;\n this.reset();\n return this;\n },\n SetStateUploading: function () {\n this._state = this.UPLOADING;\n return this.SetStatusText('Sending file to device.');\n },\n SetStateUploadComplete: function () {\n this._state = this.UPLOADCOMPLETE;\n return this;\n },\n\n isFlashExecuting: function () {\n return true === (this._state != this.UPLOADING && (this.statusText !== '' || this.statusPercent >= 0));\n },\n\n\n\n toString: function () {\n let keys = Object.keys(this);\n return keys.find(x => this[x] === this._state);\n },\n\n setOTATargets: function () {\n this.flashURL = '';\n this.flashFileName = '';\n this.flashURL = $('#fw-url-input').val();\n let fileInput = $('#flashfilename')[0].files;\n if (fileInput.length > 0) {\n this.flashFileName = fileInput[0];\n }\n if (this.flashFileName.length == 0 && this.flashURL.length == 0) {\n this.setOTAError('Invalid url or file. Cannot start OTA');\n }\n return this;\n },\n\n setOTAError: function (message) {\n this.SetStateError().SetStatusPercent(0).SetStatusText(message).reset();\n return this;\n },\n\n ShowDialog: function () {\n if (!this.isStateNone()) {\n this.updateModal.show();\n $('.flact').prop('disabled', true);\n }\n return this;\n },\n\n SetStatusPercent: function (pct) {\n var pctChanged = (this.statusPercent != pct);\n this.statusPercent = pct;\n if (pctChanged) {\n if (!this.isStateUploading() && !this.isStateFlashing()) {\n this.SetStateFlashing();\n }\n if (pct == 100) {\n if (this.isStateFlashing()) {\n this.SetStateDone();\n }\n else if (this.isStateUploading()) {\n this.statusPercent = 0;\n this.SetStateFlashing();\n }\n }\n this.UpdateProgress().ShowDialog();\n }\n return this;\n },\n SetStatusText: function (txt) {\n var changed = (this.statusText != txt);\n this.statusText = txt;\n if (changed) {\n $('span#flash-status').html(this.statusText);\n this.ShowDialog();\n }\n\n return this;\n },\n UpdateProgress: function () {\n $('.progress-bar')\n .css('width', this.statusPercent + '%')\n .attr('aria-valuenow', this.statusPercent)\n .text(this.statusPercent + '%')\n $('.progress-bar').html((this.isStateDone() ? 100 : this.statusPercent) + '%');\n return this;\n },\n StartOTA: function () {\n this.logEvent(this.StartOTA.name);\n $('#fwProgressLabel').parent().removeClass('bg-danger');\n this.setOTATargets();\n if (this.isStateError()) {\n return this;\n }\n if (!recovery) {\n this.SetStateRebootRecovery();\n }\n else {\n this.SetStateFlashing().TargetReadyStartOTA();\n }\n\n return this;\n },\n UploadLocalFile: function () {\n this.SetStateUploading();\n const xhttp = new XMLHttpRequest();\n xhttp.context = this;\n var boundHandleUploadProgressEvent = this.HandleUploadProgressEvent.bind(this);\n var boundsetOTAError=this.setOTAError.bind(this);\n xhttp.upload.addEventListener(\"progress\",boundHandleUploadProgressEvent, false);\n xhttp.onreadystatechange = function () {\n if (xhttp.readyState === 4) {\n if (xhttp.status === 0 || xhttp.status === 404) {\n boundsetOTAError(`Upload Failed. Recovery version might not support uploading. Please use web update instead.`);\n }\n }\n };\n xhttp.open('POST', '/flash.json', true);\n xhttp.send(this.flashFileName);\n },\n TargetReadyStartOTA: function () {\n if (recovery && this.prevRecovery && !this.isStateRebootRecovery() && !this.isStateFlashing()) {\n // this should only execute once, while being in a valid state\n return this;\n }\n\n this.logEvent(this.TargetReadyStartOTA.name);\n if (!recovery) {\n console.error('Event TargetReadyStartOTA fired in the wrong mode ');\n return this;\n }\n this.prevRecovery = true;\n\n if (this.flashFileName !== '') {\n this.UploadLocalFile();\n }\n else if (this.flashURL != '') {\n this.SetStateSetUrl();\n }\n else {\n this.setOTAError('Invalid URL or file name while trying to start the OTa process')\n }\n },\n HandleUploadProgressEvent: function (data) {\n this.logEvent(this.HandleUploadProgressEvent.name);\n this.SetStateUploading().SetStatusPercent(Math.round(data.loaded / data.total * 100)).SetStatusText('Uploading file to device');\n },\n EventTargetStatus: function (data) {\n if (!this.isStateNone()) {\n this.logEvent(this.EventTargetStatus.name);\n }\n if (data.ota_pct ?? -1 >= 0) {\n this.olderRecovery = true;\n this.SetStatusPercent(data.ota_pct);\n }\n if ((data.ota_dsc ?? '') != '') {\n this.olderRecovery = true;\n this.SetStatusText(data.ota_dsc);\n }\n\n if (data.recovery != undefined) {\n this.recovery = data.recovery === 1 ? true : false;\n }\n if (this.isStateRebootRecovery() && this.recovery) {\n this.TargetReadyStartOTA();\n }\n },\n EventOTAMessageClass: function (data) {\n this.logEvent(this.EventOTAMessageClass.name);\n var otaData = JSON.parse(data);\n this.SetStatusPercent(otaData.ota_pct).SetStatusText(otaData.ota_dsc);\n },\n logEvent: function (fun) {\n console.log(`${fun}, flash state ${this.toString()}, recovery: ${this.recovery}, ota pct: ${this.statusPercent}, ota desc: ${this.statusText}`);\n }\n\n};\nwindow.hideSurrounding = function (obj) {\n $(obj).parent().parent().hide();\n}\n\nlet presetsloaded = false;\nlet is_i2c_locked = false;\nlet statusInterval = 2000;\nlet messageInterval = 2500;\nfunction post_config(data) {\n let confPayload = {\n timestamp: Date.now(),\n config: data\n };\n $.ajax({\n url: '/config.json',\n dataType: 'text',\n method: 'POST',\n cache: false,\n contentType: 'application/json; charset=utf-8',\n data: JSON.stringify(confPayload),\n error: handleExceptionResponse,\n });\n}\n\n\nwindow.hFlash = function () {\n // reset file upload selection if any;\n $('#flashfilename').value = null\n flashState.StartOTA();\n}\nwindow.handleReboot = function (link) {\n if (link == 'reboot_ota') {\n $('#reboot_ota_nav').removeClass('active').prop(\"disabled\", true); delayReboot(500, '', 'reboot_ota');\n }\n else {\n $('#reboot_nav').removeClass('active'); delayReboot(500, '', link);\n }\n}\nfunction isConnected(){\n return ConnectedTo.ip && ConnectedTo.ip!='0.0.0.0';\n}\nfunction getIcon(icons){\n return isConnected()?icons.icon:icons.label;\n}\nfunction handlebtstate(data) {\n let icon = '';\n let tt = '';\n if (data.bt_status !== undefined && data.bt_sub_status !== undefined) {\n const iconindex = btStateIcons[data.bt_status].sub[data.bt_sub_status];\n if (iconindex) {\n icon = btIcons[iconindex];\n tt = btStateIcons[data.bt_status].desc;\n } else {\n icon = btIcons.bt_connected;\n tt = 'Output status';\n }\n }\n\n $('#o_type').attr('title', tt);\n $('#o_bt').html(isConnected()?icon.label:icon.text);\n}\nfunction handleTemplateTypeRadio(outtype) {\n $('#o_type').children('span').css({ display: 'none' });\n if (outtype === 'bt') {\n output = 'bt';\n } else if (outtype === 'spdif') {\n output = 'spdif';\n } else {\n output = 'i2s';\n }\n $('#' + output).prop('checked', true);\n $('#o_' + output).css({ display: 'inline' });\n}\n\nfunction handleExceptionResponse(xhr, _ajaxOptions, thrownError) {\n console.log(xhr.status);\n console.log(thrownError);\n if (thrownError !== '') {\n showLocalMessage(thrownError, 'MESSAGING_ERROR');\n }\n}\nfunction HideCmdMessage(cmdname) {\n $('#toast_' + cmdname)\n .removeClass('table-success')\n .removeClass('table-warning')\n .removeClass('table-danger')\n .addClass('table-success')\n .removeClass('show');\n $('#msg_' + cmdname).html('');\n}\nfunction showCmdMessage(cmdname, msgtype, msgtext, append = false) {\n let color = 'table-success';\n if (msgtype === 'MESSAGING_WARNING') {\n color = 'table-warning';\n } else if (msgtype === 'MESSAGING_ERROR') {\n color = 'table-danger';\n }\n $('#toast_' + cmdname)\n .removeClass('table-success')\n .removeClass('table-warning')\n .removeClass('table-danger')\n .addClass(color)\n .addClass('show');\n let escapedtext = msgtext\n .substring(0, msgtext.length - 1)\n .encodeHTML()\n .replace(/\\n/g, '<br />');\n escapedtext =\n ($('#msg_' + cmdname).html().length > 0 && append\n ? $('#msg_' + cmdname).html() + '<br/>'\n : '') + escapedtext;\n $('#msg_' + cmdname).html(escapedtext);\n}\n\nlet releaseURL =\n 'https://api.github.com/repos/sle118/squeezelite-esp32/releases';\n\nlet recovery = false;\nlet messagesHeld = false;\nconst commandHeader = 'squeezelite -b 500:2000 -d all=info -C 30 -W';\n//let blockFlashButton = false;\nlet apList = null;\n//let selectedSSID = '';\n//let checkStatusInterval = null;\nlet messagecount = 0;\nlet messageseverity = 'MESSAGING_INFO';\nlet SystemConfig = {};\nlet LastCommandsState = null;\nvar output = '';\nlet hostName = '';\nlet versionName = 'Squeezelite-ESP32';\nlet prevmessage = '';\nlet project_name = versionName;\nlet board_model = '';\nlet platform_name = versionName;\nlet preset_name = '';\nlet btSinkNamesOptSel = '#cfg-audio-bt_source-sink_name';\nlet ConnectedTo = {};\nlet ConnectingToSSID = {};\nlet lmsBaseUrl;\nlet prevLMSIP = '';\nconst ConnectingToActions = {\n 'CONN': 0, 'MAN': 1, 'STS': 2,\n}\n\nPromise.prototype.delay = function (duration) {\n return this.then(\n function (value) {\n return new Promise(function (resolve) {\n setTimeout(function () {\n resolve(value);\n }, duration);\n });\n },\n function (reason) {\n return new Promise(function (_resolve, reject) {\n setTimeout(function () {\n reject(reason);\n }, duration);\n });\n }\n );\n};\n\nfunction getConfigJson(slimMode) {\n const config = {};\n $('input.nvs').each(function (_index, entry) {\n if (!slimMode) {\n const nvsType = parseInt(entry.attributes.nvs_type.value, 10);\n if (entry.id !== '') {\n config[entry.id] = {};\n if (\n nvsType === nvsTypes.NVS_TYPE_U8 ||\n nvsType === nvsTypes.NVS_TYPE_I8 ||\n nvsType === nvsTypes.NVS_TYPE_U16 ||\n nvsType === nvsTypes.NVS_TYPE_I16 ||\n nvsType === nvsTypes.NVS_TYPE_U32 ||\n nvsType === nvsTypes.NVS_TYPE_I32 ||\n nvsType === nvsTypes.NVS_TYPE_U64 ||\n nvsType === nvsTypes.NVS_TYPE_I64\n ) {\n config[entry.id].value = parseInt(entry.value);\n } else {\n config[entry.id].value = entry.value;\n }\n config[entry.id].type = nvsType;\n }\n } else {\n config[entry.id] = entry.value;\n }\n });\n const key = $('#nvs-new-key').val();\n const val = $('#nvs-new-value').val();\n if (key !== '') {\n if (!slimMode) {\n config[key] = {};\n config[key].value = val;\n config[key].type = 33;\n } else {\n config[key] = val;\n }\n }\n return config;\n}\n\nfunction handleHWPreset(allfields, reboot) {\n\n const selJson = JSON.parse(allfields[0].value);\n var cmd = allfields[0].attributes.cmdname.value;\n\n console.log(`selected model: ${selJson.name}`);\n let confPayload = {\n timestamp: Date.now(),\n config: { model_config: { value: selJson.name, type: 33 } }\n };\n for (const [name, value] of Object.entries(selJson.config)) {\n const storedval = (typeof value === 'string' || value instanceof String) ? value : JSON.stringify(value);\n confPayload.config[name] = {\n value: storedval,\n type: 33,\n }\n showCmdMessage(\n cmd,\n 'MESSAGING_INFO',\n `Setting ${name}=${storedval} `,\n true\n );\n }\n\n showCmdMessage(\n cmd,\n 'MESSAGING_INFO',\n `Committing `,\n true\n );\n $.ajax({\n url: '/config.json',\n dataType: 'text',\n method: 'POST',\n cache: false,\n contentType: 'application/json; charset=utf-8',\n data: JSON.stringify(confPayload),\n error: function (xhr, _ajaxOptions, thrownError) {\n handleExceptionResponse(xhr, _ajaxOptions, thrownError);\n showCmdMessage(\n cmd,\n 'MESSAGING_ERROR',\n `Unexpected error ${(thrownError !== '') ? thrownError : 'with return status = ' + xhr.status} `,\n true\n );\n },\n success: function (response) {\n showCmdMessage(\n cmd,\n 'MESSAGING_INFO',\n `Saving complete `,\n true\n );\n console.log(response);\n if (reboot) {\n delayReboot(2500, cmd);\n }\n },\n });\n\n\n\n\n\n}\n\n\n// pull json file from https://gist.githubusercontent.com/sle118/dae585e157b733a639c12dc70f0910c5/raw/b462691f69e2ad31ac95c547af6ec97afb0f53db/squeezelite-esp32-presets.json and\nfunction loadPresets() {\n if ($(\"#cfg-hw-preset-model_config\").length == 0) return;\n if (presetsloaded) return;\n presetsloaded = true;\n $('#cfg-hw-preset-model_config').html('<option>--</option>');\n $.getJSON(\n 'https://gist.githubusercontent.com/sle118/dae585e157b733a639c12dc70f0910c5/raw/',\n { _: new Date().getTime() },\n function (data) {\n $.each(data, function (key, val) {\n $('#cfg-hw-preset-model_config').append(`<option value='${JSON.stringify(val).replace(/\"/g, '\\\"').replace(/\\'/g, '\\\"')}'>${val.name}</option>`);\n if (preset_name !== '' && preset_name == val.name) {\n $('#cfg-hw-preset-model_config').val(preset_name);\n }\n });\n if (preset_name !== '') {\n ('#prev_preset').show().val(preset_name);\n }\n }\n\n ).fail(function (jqxhr, textStatus, error) {\n const err = textStatus + ', ' + error;\n console.log('Request Failed: ' + err);\n }\n );\n}\n\nfunction delayReboot(duration, cmdname, ota = 'reboot') {\n const url = '/' + ota + '.json';\n $('tbody#tasks').empty();\n $('#tasks_sect').css('visibility', 'collapse');\n Promise.resolve({ cmdname: cmdname, url: url })\n .delay(duration)\n .then(function (data) {\n if (data.cmdname.length > 0) {\n showCmdMessage(\n data.cmdname,\n 'MESSAGING_WARNING',\n 'System is rebooting.\\n',\n true\n );\n } else {\n showLocalMessage('System is rebooting.\\n', 'MESSAGING_WARNING');\n }\n console.log('now triggering reboot');\n $(\"button[onclick*='handleReboot']\").addClass('rebooting');\n $.ajax({\n url: data.url,\n dataType: 'text',\n method: 'POST',\n cache: false,\n contentType: 'application/json; charset=utf-8',\n data: JSON.stringify({\n timestamp: Date.now(),\n }),\n error: handleExceptionResponse,\n complete: function () {\n console.log('reboot call completed');\n Promise.resolve(data)\n .delay(6000)\n .then(function (rdata) {\n if (rdata.cmdname.length > 0) {\n HideCmdMessage(rdata.cmdname);\n }\n getCommands();\n getConfig();\n });\n },\n });\n });\n}\n// eslint-disable-next-line no-unused-vars\nwindow.saveAutoexec1 = function (apply) {\n showCmdMessage('cfg-audio-tmpl', 'MESSAGING_INFO', 'Saving.\\n', false);\n let commandLine = commandHeader + ' -n \"' + $('#player').val() + '\"';\n if (output === 'bt') {\n commandLine += ' -o \"BT\" -R -Z 192000';\n showCmdMessage(\n 'cfg-audio-tmpl',\n 'MESSAGING_INFO',\n 'Remember to configure the Bluetooth audio device name.\\n',\n true\n );\n } else if (output === 'spdif') {\n commandLine += ' -o SPDIF -Z 192000';\n } else {\n commandLine += ' -o I2S';\n }\n if ($('#optional').val() !== '') {\n commandLine += ' ' + $('#optional').val();\n }\n const data = {\n timestamp: Date.now(),\n };\n data.config = {\n autoexec1: { value: commandLine, type: 33 },\n autoexec: {\n value: $('#disable-squeezelite').prop('checked') ? '0' : '1',\n type: 33,\n },\n };\n\n $.ajax({\n url: '/config.json',\n dataType: 'text',\n method: 'POST',\n cache: false,\n contentType: 'application/json; charset=utf-8',\n data: JSON.stringify(data),\n error: handleExceptionResponse,\n complete: function (response) {\n if (\n response.responseText &&\n JSON.parse(response.responseText).result === 'OK'\n ) {\n showCmdMessage('cfg-audio-tmpl', 'MESSAGING_INFO', 'Done.\\n', true);\n if (apply) {\n delayReboot(1500, 'cfg-audio-tmpl');\n }\n } else if (JSON.parse(response.responseText).result) {\n showCmdMessage(\n 'cfg-audio-tmpl',\n 'MESSAGING_WARNING',\n JSON.parse(response.responseText).Result + '\\n',\n true\n );\n } else {\n showCmdMessage(\n 'cfg-audio-tmpl',\n 'MESSAGING_ERROR',\n response.statusText + '\\n'\n );\n }\n console.log(response.responseText);\n },\n });\n console.log('sent data:', JSON.stringify(data));\n}\nwindow.handleDisconnect = function () {\n $.ajax({\n url: '/connect.json',\n dataType: 'text',\n method: 'DELETE',\n cache: false,\n contentType: 'application/json; charset=utf-8',\n data: JSON.stringify({\n timestamp: Date.now(),\n }),\n });\n}\nfunction setPlatformFilter(val) {\n if ($('.upf').filter(function () { return $(this).text().toUpperCase() === val.toUpperCase() }).length > 0) {\n $('#splf').val(val).trigger('input');\n return true;\n }\n return false;\n}\nwindow.handleConnect = function () {\n ConnectingToSSID.ssid = $('#manual_ssid').val();\n ConnectingToSSID.pwd = $('#manual_pwd').val();\n ConnectingToSSID.dhcpname = $('#dhcp-name2').val();\n $(\"*[class*='connecting']\").hide();\n $('#ssid-wait').text(ConnectingToSSID.ssid);\n $('.connecting').show();\n $.ajax({\n url: '/connect.json',\n dataType: 'text',\n method: 'POST',\n cache: false,\n contentType: 'application/json; charset=utf-8',\n data: JSON.stringify({\n timestamp: Date.now(),\n ssid: ConnectingToSSID.ssid,\n pwd: ConnectingToSSID.pwd\n }),\n error: handleExceptionResponse,\n });\n\n // now we can re-set the intervals regardless of result\n\n}\n$(document).ready(function () {\n $('.material-icons').each(function (_index, entry) {\n entry.attributes['icon']=entry.textContent;\n });\n setIcons(true);\n handleNVSVisible();\n flashState.init();\n $('#fw-url-input').on('input', function () {\n if ($(this).val().length > 8 && ($(this).val().startsWith('http://') || $(this).val().startsWith('https://'))) {\n $('#start-flash').show();\n }\n else {\n $('#start-flash').hide();\n }\n });\n $('.upSrch').on('input', function () {\n const val = this.value;\n $(\"#rTable tr\").removeClass(this.id + '_hide');\n if (val.length > 0) {\n $(`#rTable td:nth-child(${$(this).parent().index() + 1})`).filter(function () {\n return !$(this).text().toUpperCase().includes(val.toUpperCase());\n }).parent().addClass(this.id + '_hide');\n }\n $('[class*=\"_hide\"]').hide();\n $('#rTable tr').not('[class*=\"_hide\"]').show()\n\n });\n setTimeout(refreshAP, 1500);\n\n $('#WifiConnectDialog')[0].addEventListener('shown.bs.modal', function (event) {\n $(\"*[class*='connecting']\").hide();\n\n if (event?.relatedTarget) {\n ConnectingToSSID.Action = ConnectingToActions.CONN;\n if ($(event.relatedTarget).children('td:eq(1)').text() == ConnectedTo.ssid) {\n ConnectingToSSID.Action = ConnectingToActions.STS;\n }\n else {\n if (!$(event.relatedTarget).is(':last-child')) {\n ConnectingToSSID.ssid = $(event.relatedTarget).children('td:eq(1)').text();\n $('#manual_ssid').val(ConnectingToSSID.ssid);\n }\n else {\n ConnectingToSSID.Action = ConnectingToActions.MAN;\n ConnectingToSSID.ssid = '';\n $('#manual_ssid').val(ConnectingToSSID.ssid);\n }\n }\n }\n\n\n if (ConnectingToSSID.Action !== ConnectingToActions.STS) {\n $('.connecting-init').show();\n $('#manual_ssid').trigger('focus');\n }\n else {\n handleWifiDialog();\n }\n });\n\n $('#WifiConnectDialog')[0].addEventListener('hidden.bs.modal', function () {\n $('#WifiConnectDialog input').val('');\n });\n\n $('#uCnfrm')[0].addEventListener('shown.bs.modal', function () {\n $('#selectedFWURL').text($('#fw-url-input').val());\n });\n\n $('input#show-commands')[0].checked = LastCommandsState === 1;\n $('a[href^=\"#tab-commands\"]').hide();\n $('#load-nvs').on('click', function () {\n $('#nvsfilename').trigger('click');\n });\n $('#nvsfilename').on('change', function () {\n if (typeof window.FileReader !== 'function') {\n throw \"The file API isn't supported on this browser.\";\n }\n if (!this.files) {\n throw 'This browser does not support the `files` property of the file input.';\n }\n if (!this.files[0]) {\n return undefined;\n }\n\n const file = this.files[0];\n let fr = new FileReader();\n fr.onload = function (e) {\n let data = {};\n try {\n data = JSON.parse(e.target.result);\n } catch (ex) {\n alert('Parsing failed!\\r\\n ' + ex);\n }\n $('input.nvs').each(function (_index, entry) {\n $(this).parent().removeClass('bg-warning').removeClass('bg-success');\n if (data[entry.id]) {\n if (data[entry.id] !== entry.value) {\n console.log(\n 'Changed ' + entry.id + ' ' + entry.value + '==>' + data[entry.id]\n );\n $(this).parent().addClass('bg-warning');\n $(this).val(data[entry.id]);\n }\n else {\n $(this).parent().addClass('bg-success');\n }\n }\n });\n var changed = $(\"input.nvs\").children('.bg-warning');\n if (changed) {\n alert('Highlighted values were changed. Press Commit to change on the device');\n }\n }\n fr.readAsText(file);\n this.value = null;\n\n }\n );\n $('#clear-syslog').on('click', function () {\n messagecount = 0;\n messageseverity = 'MESSAGING_INFO';\n $('#msgcnt').text('');\n $('#syslogTable').html('');\n });\n\n $('#ok-credits').on('click', function () {\n $('#credits').slideUp('fast', function () { });\n $('#app').slideDown('fast', function () { });\n });\n\n $('#acredits').on('click', function (event) {\n event.preventDefault();\n $('#app').slideUp('fast', function () { });\n $('#credits').slideDown('fast', function () { });\n });\n\n $('input#show-commands').on('click', function () {\n this.checked = this.checked ? 1 : 0;\n if (this.checked) {\n $('a[href^=\"#tab-commands\"]').show();\n LastCommandsState = 1;\n } else {\n LastCommandsState = 0;\n $('a[href^=\"#tab-commands\"]').hide();\n }\n });\n\n $('input#show-nvs').on('click', function () {\n this.checked = this.checked ? 1 : 0;\n Cookies.set(\"show-nvs\", this.checked?'Y':'N');\n handleNVSVisible();\n });\n $('#btn_reboot_recovery').on('click', function () {\n handleReboot('recovery');\n });\n $('#btn_reboot').on('click', function () {\n handleReboot('reboot');\n });\n $('#btn_flash').on('click', function () {\n hFlash();\n });\n $('#save-autoexec1').on('click', function () {\n saveAutoexec1(false);\n });\n $('#commit-autoexec1').on('click', function () {\n saveAutoexec1(true);\n });\n $('#btn_disconnect').on('click', function () {\n ConnectedTo={};\n refreshAPHTML2();\n $.ajax({\n url: '/connect.json',\n dataType: 'text',\n method: 'DELETE',\n cache: false,\n contentType: 'application/json; charset=utf-8',\n data: JSON.stringify({\n timestamp: Date.now(),\n }),\n });\n });\n $('#btnJoin').on('click', function () {\n handleConnect();\n });\n $('#reboot_nav').on('click', function () {\n handleReboot('reboot');\n });\n $('#reboot_ota_nav').on('click', function () {\n handleReboot('reboot_ota');\n });\n\n $('#save-as-nvs').on('click', function () {\n const config = getConfigJson(true);\n const a = document.createElement('a');\n a.href = URL.createObjectURL(\n new Blob([JSON.stringify(config, null, 2)], {\n type: 'text/plain',\n })\n );\n a.setAttribute(\n 'download',\n 'nvs_config_' + hostName + '_' + Date.now() + 'json'\n );\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n });\n\n $('#save-nvs').on('click', function () {\n post_config(getConfigJson(false));\n });\n\n $('#fwUpload').on('click', function () {\n const fileInput = document.getElementById('flashfilename').files;\n if (fileInput.length === 0) {\n alert('No file selected!');\n } else {\n $('#fw-url-input').value = null;\n flashState.StartOTA();\n }\n\n });\n $('[name=output-tmpl]').on('click', function () {\n handleTemplateTypeRadio(this.id);\n });\n\n $('#chkUpdates').on('click', function () {\n $('#rTable').html('');\n $.getJSON(releaseURL, function (data) {\n let i = 0;\n const branches = [];\n data.forEach(function (release) {\n const namecomponents = release.name.split('#');\n const branch = namecomponents[3];\n if (!branches.includes(branch)) {\n branches.push(branch);\n }\n });\n let fwb = '';\n branches.forEach(function (branch) {\n fwb += '<option value=\"' + branch + '\">' + branch + '</option>';\n });\n $('#fwbranch').append(fwb);\n\n data.forEach(function (release) {\n let url = '';\n release.assets.forEach(function (asset) {\n if (asset.name.match(/\\.bin$/)) {\n url = asset.browser_download_url;\n }\n });\n const namecomponents = release.name.split('#');\n const ver = namecomponents[0];\n const cfg = namecomponents[2];\n const branch = namecomponents[3];\n var bits = ver.substr(ver.lastIndexOf('-') + 1);\n bits = (bits == '32' || bits == '16') ? bits : '';\n\n let body = release.body;\n body = body.replace(/'/gi, '\"');\n body = body.replace(\n /[\\s\\S]+(### Revision Log[\\s\\S]+)### ESP-IDF Version Used[\\s\\S]+/,\n '$1'\n );\n body = body.replace(/- \\(.+?\\) /g, '- ').encodeHTML();\n $('#rTable').append(`<tr class='release ' fwurl='${url}'>\n <td data-bs-toggle='tooltip' title='${body}'>${ver}</td><td>${new Date(release.created_at).toLocalShort()}\n </td><td class='upf'>${cfg}</td><td>${branch}</td><td>${bits}</td></tr>`\n );\n });\n if (i > 7) {\n $('#releaseTable').append(\n \"<tr id='showall'>\" +\n \"<td colspan='6'>\" +\n \"<input type='button' id='showallbutton' class='btn btn-info' value='Show older releases' />\" +\n '</td>' +\n '</tr>'\n );\n $('#showallbutton').on('click', function () {\n $('tr.hide').removeClass('hide');\n $('tr#showall').addClass('hide');\n });\n }\n $('#searchfw').css('display', 'inline');\n if (!setPlatformFilter(platform_name)) {\n setPlatformFilter(project_name)\n }\n $('#rTable tr.release').on('click', function () {\n var url = this.attributes['fwurl'].value;\n if (lmsBaseUrl) {\n url = url.replace(/.*\\/download\\//, lmsBaseUrl + '/plugins/SqueezeESP32/firmware/');\n }\n $('#fw-url-input').val(url);\n $('#start-flash').show();\n $('#rTable tr.release').removeClass('table-success table-warning');\n $(this).addClass('table-success table-warning');\n });\n\n }).fail(function () {\n alert('failed to fetch release history!');\n });\n });\n $('#fwcheck').on('click', function () {\n $('#releaseTable').html('');\n $('#fwbranch').empty();\n $.getJSON(releaseURL, function (data) {\n let i = 0;\n const branches = [];\n data.forEach(function (release) {\n const namecomponents = release.name.split('#');\n const branch = namecomponents[3];\n if (!branches.includes(branch)) {\n branches.push(branch);\n }\n });\n let fwb;\n branches.forEach(function (branch) {\n fwb += '<option value=\"' + branch + '\">' + branch + '</option>';\n });\n $('#fwbranch').append(fwb);\n\n data.forEach(function (release) {\n let url = '';\n release.assets.forEach(function (asset) {\n if (asset.name.match(/\\.bin$/)) {\n url = asset.browser_download_url;\n }\n });\n const namecomponents = release.name.split('#');\n const ver = namecomponents[0];\n const idf = namecomponents[1];\n const cfg = namecomponents[2];\n const branch = namecomponents[3];\n\n let body = release.body;\n body = body.replace(/'/gi, '\"');\n body = body.replace(\n /[\\s\\S]+(### Revision Log[\\s\\S]+)### ESP-IDF Version Used[\\s\\S]+/,\n '$1'\n );\n body = body.replace(/- \\(.+?\\) /g, '- ');\n const trclass = i++ > 6 ? ' hide' : '';\n $('#releaseTable').append(\n \"<tr class='release\" +\n trclass +\n \"'>\" +\n \"<td data-bs-toggle='tooltip' title='\" +\n body +\n \"'>\" +\n ver +\n '</td>' +\n '<td>' +\n new Date(release.created_at).toLocalShort() +\n '</td>' +\n '<td>' +\n cfg +\n '</td>' +\n '<td>' +\n idf +\n '</td>' +\n '<td>' +\n branch +\n '</td>' +\n \"<td><input type='button' class='btn btn-success' value='Select' data-bs-url='\" +\n url +\n \"' onclick='setURL(this);' /></td>\" +\n '</tr>'\n );\n });\n if (i > 7) {\n $('#releaseTable').append(\n \"<tr id='showall'>\" +\n \"<td colspan='6'>\" +\n \"<input type='button' id='showallbutton' class='btn btn-info' value='Show older releases' />\" +\n '</td>' +\n '</tr>'\n );\n $('#showallbutton').on('click', function () {\n $('tr.hide').removeClass('hide');\n $('tr#showall').addClass('hide');\n });\n }\n $('#searchfw').css('display', 'inline');\n }).fail(function () {\n alert('failed to fetch release history!');\n });\n });\n\n $('#updateAP').on('click', function () {\n refreshAP();\n console.log('refresh AP');\n });\n\n // first time the page loads: attempt to get the connection status and start the wifi scan\n getConfig();\n getCommands();\n getMessages();\n checkStatus();\n\n});\n\n// eslint-disable-next-line no-unused-vars\nwindow.setURL = function (button) {\n let url = button.dataset.url;\n\n $('[data-bs-url^=\"http\"]')\n .addClass('btn-success')\n .removeClass('btn-danger');\n $('[data-bs-url=\"' + url + '\"]')\n .addClass('btn-danger')\n .removeClass('btn-success');\n\n // if user can proxy download through LMS, modify the URL\n if (lmsBaseUrl) {\n url = url.replace(/.*\\/download\\//, lmsBaseUrl + '/plugins/SqueezeESP32/firmware/');\n }\n\n $('#fwurl').val(url);\n}\n\n\nfunction rssiToIcon(rssi) {\n if (rssi >= -55) {\n return {'label':'****','icon':`signal_wifi_statusbar_4_bar`};\n } else if (rssi >= -60) {\n return {'label':'***','icon':`network_wifi_3_bar`};\n } else if (rssi >= -65) {\n return {'label':'**','icon':`network_wifi_2_bar`};\n } else if (rssi >= -70) {\n return {'label':'*','icon':`network_wifi_1_bar`};\n } else {\n return {'label':'.','icon':`signal_wifi_statusbar_null`};\n }\n}\n\nfunction refreshAP() {\n if (ConnectedTo?.urc === connectReturnCode.ETH) return;\n $.ajaxSetup({\n timeout: 3000 //Time in milliseconds\n });\n $.getJSON('/scan.json', async function () {\n await sleep(2000);\n $.getJSON('/ap.json', function (data) {\n if (data.length > 0) {\n // sort by signal strength\n data.sort(function (a, b) {\n const x = a.rssi;\n const y = b.rssi;\n // eslint-disable-next-line no-nested-ternary\n return x < y ? 1 : x > y ? -1 : 0;\n });\n apList = data;\n refreshAPHTML2(apList);\n\n }\n });\n });\n}\nfunction formatAP(ssid, rssi, auth) {\n const rssi_icon=rssiToIcon(rssi);\n const auth_icon={label:auth == 0 ? '🔓' : '🔒',icon:auth == 0 ? 'no_encryption' : 'lock'};\n \n return `<tr data-bs-toggle=\"modal\" data-bs-target=\"#WifiConnectDialog\"><td></td><td>${ssid}</td><td>\n <span class=\"material-icons\" style=\"fill:white; display: inline\" aria-label=\"${rssi_icon.label}\" icon=\"${rssi_icon.icon}\" >${getIcon(rssi_icon)}</span>\n \t</td><td>\n <span class=\"material-icons\" aria-label=\"${auth_icon.label}\" icon=\"${auth_icon.icon}\">${getIcon(auth_icon)}</span>\n </td></tr>`;\n}\nfunction refreshAPHTML2(data) {\n let h = '';\n $('#wifiTable tr td:first-of-type').text('');\n $('#wifiTable tr').removeClass('table-success table-warning');\n if (data) {\n data.forEach(function (e) {\n h += formatAP(e.ssid, e.rssi, e.auth);\n });\n $('#wifiTable').html(h);\n }\n if ($('.manual_add').length == 0) {\n $('#wifiTable').append(formatAP('Manual add', 0, 0));\n $('#wifiTable tr:last').addClass('table-light text-dark').addClass('manual_add');\n }\n if (ConnectedTo.ssid && (ConnectedTo.urc === connectReturnCode.OK || ConnectedTo.urc === connectReturnCode.RESTORE)) {\n const wifiSelector = `#wifiTable td:contains(\"${ConnectedTo.ssid}\")`;\n if ($(wifiSelector).filter(function () { return $(this).text() === ConnectedTo.ssid; }).length == 0) {\n $('#wifiTable').prepend(`${formatAP(ConnectedTo.ssid, ConnectedTo.rssi ?? 0, 0)}`);\n }\n $(wifiSelector).filter(function () { return $(this).text() === ConnectedTo.ssid; }).siblings().first().html('&check;').parent().addClass((ConnectedTo.urc === connectReturnCode.OK ? 'table-success' : 'table-warning'));\n $('span#foot-if').html(`SSID: <strong>${ConnectedTo.ssid}</strong>, IP: <strong>${ConnectedTo.ip}</strong>`);\n $('#wifiStsIcon').html(rssiToIcon(ConnectedTo.rssi));\n\n }\n else if (ConnectedTo?.urc !== connectReturnCode.ETH) {\n $('span#foot-if').html('');\n }\n\n}\nfunction refreshETH() {\n\n if (ConnectedTo.urc === connectReturnCode.ETH) {\n $('span#foot-if').html(`Network: Ethernet, IP: <strong>${ConnectedTo.ip}</strong>`);\n }\n}\nfunction showTask(task) {\n console.debug(\n this.toLocaleString() +\n '\\t' +\n task.nme +\n '\\t' +\n task.cpu +\n '\\t' +\n taskStates[task.st] +\n '\\t' +\n task.minstk +\n '\\t' +\n task.bprio +\n '\\t' +\n task.cprio +\n '\\t' +\n task.num\n );\n $('tbody#tasks').append(\n '<tr class=\"table-primary\"><th scope=\"row\">' +\n task.num +\n '</th><td>' +\n task.nme +\n '</td><td>' +\n task.cpu +\n '</td><td>' +\n taskStates[task.st] +\n '</td><td>' +\n task.minstk +\n '</td><td>' +\n task.bprio +\n '</td><td>' +\n task.cprio +\n '</td></tr>'\n );\n}\nfunction btExists(name) {\n return getBTSinkOpt(name).length > 0;\n}\nfunction getBTSinkOpt(name) {\n return $(`${btSinkNamesOptSel} option:contains('${name}')`);\n}\nfunction getMessages() {\n $.ajaxSetup({\n timeout: messageInterval //Time in milliseconds\n });\n $.getJSON('/messages.json', async function (data) {\n for (const msg of data) {\n const msgAge = msg.current_time - msg.sent_time;\n var msgTime = new Date();\n msgTime.setTime(msgTime.getTime() - msgAge);\n switch (msg.class) {\n case 'MESSAGING_CLASS_OTA':\n flashState.EventOTAMessageClass(msg.message);\n break;\n case 'MESSAGING_CLASS_STATS':\n // for task states, check structure : task_state_t\n var statsData = JSON.parse(msg.message);\n console.debug(\n msgTime.toLocalShort() +\n ' - Number of running tasks: ' +\n statsData.ntasks\n );\n console.debug(\n msgTime.toLocalShort() +\n '\\tname' +\n '\\tcpu' +\n '\\tstate' +\n '\\tminstk' +\n '\\tbprio' +\n '\\tcprio' +\n '\\tnum'\n );\n if (statsData.tasks) {\n if ($('#tasks_sect').css('visibility') === 'collapse') {\n $('#tasks_sect').css('visibility', 'visible');\n }\n $('tbody#tasks').html('');\n statsData.tasks\n .sort(function (a, b) {\n return b.cpu - a.cpu;\n })\n .forEach(showTask, msgTime);\n } else if ($('#tasks_sect').css('visibility') === 'visible') {\n $('tbody#tasks').empty();\n $('#tasks_sect').css('visibility', 'collapse');\n }\n break;\n case 'MESSAGING_CLASS_SYSTEM':\n showMessage(msg, msgTime);\n break;\n case 'MESSAGING_CLASS_CFGCMD':\n var msgparts = msg.message.split(/([^\\n]*)\\n(.*)/gs);\n showCmdMessage(msgparts[1], msg.type, msgparts[2], true);\n break;\n case 'MESSAGING_CLASS_BT':\n if ($(\"#cfg-audio-bt_source-sink_name\").is('input')) {\n var attr = $(\"#cfg-audio-bt_source-sink_name\")[0].attributes;\n var attrs = '';\n for (var j = 0; j < attr.length; j++) {\n if (attr.item(j).name != \"type\") {\n attrs += `${attr.item(j).name} = \"${attr.item(j).value}\" `;\n }\n }\n var curOpt = $(\"#cfg-audio-bt_source-sink_name\")[0].value;\n $(\"#cfg-audio-bt_source-sink_name\").replaceWith(`<select id=\"cfg-audio-bt_source-sink_name\" ${attrs}><option value=\"${curOpt}\" data-bs-description=\"${curOpt}\">${curOpt}</option></select> `);\n }\n JSON.parse(msg.message).forEach(function (btEntry) {\n //<input type=\"text\" class=\"form-control bg-success\" placeholder=\"name\" hasvalue=\"true\" longopts=\"sink_name\" shortopts=\"n\" checkbox=\"false\" cmdname=\"cfg-audio-bt_source\" id=\"cfg-audio-bt_source-sink_name\" name=\"cfg-audio-bt_source-sink_name\">\n //<select hasvalue=\"true\" longopts=\"jack_behavior\" shortopts=\"j\" checkbox=\"false\" cmdname=\"cfg-audio-general\" id=\"cfg-audio-general-jack_behavior\" name=\"cfg-audio-general-jack_behavior\" class=\"form-control \"><option>--</option><option>Headphones</option><option>Subwoofer</option></select> \n if (!btExists(btEntry.name)) {\n $(\"#cfg-audio-bt_source-sink_name\").append(`<option>${btEntry.name}</option>`);\n showMessage({ type: msg.type, message: `BT Audio device found: ${btEntry.name} RSSI: ${btEntry.rssi} ` }, msgTime);\n }\n getBTSinkOpt(btEntry.name).attr('data-bs-description', `${btEntry.name} (${btEntry.rssi}dB)`)\n .attr('rssi', btEntry.rssi)\n .attr('value', btEntry.name)\n .text(`${btEntry.name} [${btEntry.rssi}dB]`).trigger('change');\n\n });\n $(btSinkNamesOptSel).append($(`${btSinkNamesOptSel} option`).remove().sort(function (a, b) {\n console.log(`${parseInt($(a).attr('rssi'))} < ${parseInt($(b).attr('rssi'))} ? `);\n return parseInt($(a).attr('rssi')) < parseInt($(b).attr('rssi')) ? 1 : -1;\n }));\n break;\n default:\n break;\n }\n }\n setTimeout(getMessages,messageInterval);\n }).fail(function (xhr, ajaxOptions, thrownError) {\n \n if (xhr.status == 404) {\n $('.orec').hide(); // system commands won't be available either\n messagesHeld = true;\n }\n else {\n handleExceptionResponse(xhr, ajaxOptions, thrownError);\n }\n if(xhr.status == 0 && xhr.readyState ==0){\n // probably a timeout. Target is rebooting? \n setTimeout(getMessages,messageInterval*2); // increase duration if a failure happens\n }\n else if(!messagesHeld){\n // 404 here means we rebooted to an old recovery\n setTimeout(getMessages,messageInterval); // increase duration if a failure happens\n }\n \n }\n );\n\n /*\n Minstk is minimum stack space left\nBprio is base priority\ncprio is current priority\nnme is name\nst is task state. I provided a \"typedef\" that you can use to convert to text\ncpu is cpu percent used\n*/\n}\nfunction handleRecoveryMode(data) {\n const locRecovery = data.recovery ?? 0;\n if (locRecovery === 1) {\n recovery = true;\n $('.recovery_element').show();\n $('.ota_element').hide();\n $('#boot-button').html('Reboot');\n $('#boot-form').attr('action', '/reboot_ota.json');\n } else {\n if(!recovery && messagesHeld){\n messagesHeld=false;\n setTimeout(getMessages,messageInterval); // increase duration if a failure happens\n }\n recovery = false;\n \n $('.recovery_element').hide();\n $('.ota_element').show();\n $('#boot-button').html('Recovery');\n $('#boot-form').attr('action', '/recovery.json');\n }\n \n}\n\nfunction hasConnectionChanged(data) {\n // gw: \"192.168.10.1\"\n // ip: \"192.168.10.225\"\n // netmask: \"255.255.255.0\"\n // ssid: \"MyTestSSID\"\n\n return (data.urc !== ConnectedTo.urc ||\n data.ssid !== ConnectedTo.ssid ||\n data.gw !== ConnectedTo.gw ||\n data.netmask !== ConnectedTo.netmask ||\n data.ip !== ConnectedTo.ip || data.rssi !== ConnectedTo.rssi)\n}\nfunction handleWifiDialog(data) {\n if ($('#WifiConnectDialog').is(':visible')) {\n if (ConnectedTo.ip) {\n $('#ipAddress').text(ConnectedTo.ip);\n }\n if (ConnectedTo.ssid) {\n $('#connectedToSSID').text(ConnectedTo.ssid);\n }\n if (ConnectedTo.gw) {\n $('#gateway').text(ConnectedTo.gw);\n }\n if (ConnectedTo.netmask) {\n $('#netmask').text(ConnectedTo.netmask);\n }\n if (ConnectingToSSID.Action === undefined || (ConnectingToSSID.Action && ConnectingToSSID.Action == ConnectingToActions.STS)) {\n $(\"*[class*='connecting']\").hide();\n $('.connecting-status').show();\n }\n if (SystemConfig.ap_ssid) {\n $('#apName').text(SystemConfig.ap_ssid.value);\n }\n if (SystemConfig.ap_pwd) {\n $('#apPass').text(SystemConfig.ap_pwd.value);\n }\n if (!data) {\n return;\n }\n else {\n switch (data.urc) {\n case connectReturnCode.OK:\n if (data.ssid && data.ssid === ConnectingToSSID.ssid) {\n $(\"*[class*='connecting']\").hide();\n $('.connecting-success').show();\n ConnectingToSSID.Action = ConnectingToActions.STS;\n }\n break;\n case connectReturnCode.FAIL:\n // \n if (ConnectingToSSID.Action != ConnectingToActions.STS && ConnectingToSSID.ssid == data.ssid) {\n $(\"*[class*='connecting']\").hide();\n $('.connecting-fail').show();\n }\n break;\n case connectReturnCode.LOST:\n\n break;\n case connectReturnCode.RESTORE:\n if (ConnectingToSSID.Action != ConnectingToActions.STS && ConnectingToSSID.ssid != data.ssid) {\n $(\"*[class*='connecting']\").hide();\n $('.connecting-fail').show();\n }\n break;\n case connectReturnCode.DISC:\n // that's a manual disconnect\n // if ($('#wifi-status').is(':visible')) {\n // $('#wifi-status').slideUp('fast', function() {});\n // $('span#foot-wifi').html('');\n\n // } \n break;\n default:\n break;\n }\n }\n\n }\n}\nfunction setIcons(offline){\n $('.material-icons').each(function (_index, entry) {\n entry.textContent = entry.attributes[offline?'aria-label':'icon'].value;\n });\n}\nfunction handleNetworkStatus(data) {\n setIcons(data.ssid==='');\n if (hasConnectionChanged(data) || !data.urc) {\n ConnectedTo = data;\n $(\".if_eth\").hide();\n $('.if_wifi').hide();\n if (!data.urc || ConnectedTo.urc != connectReturnCode.ETH) {\n $('.if_wifi').show();\n refreshAPHTML2();\n }\n else {\n $(\".if_eth\").show();\n refreshETH();\n }\n\n }\n handleWifiDialog(data);\n}\n\n\n\nfunction batteryToIcon(voltage) {\n /* Assuming Li-ion 18650s as a power source, 3.9V per cell, or above is treated\n as full charge (>75% of capacity). 3.4V is empty. The gauge is loosely\n following the graph here:\n https://learn.adafruit.com/li-ion-and-lipoly-batteries/voltages\n using the 0.2C discharge profile for the rest of the values.\n*/\n\n for (const iconEntry of batIcons) {\n for (const entryRanges of iconEntry.ranges) {\n if (inRange(voltage, entryRanges.f, entryRanges.t)) {\n return { label: iconEntry.label, icon:iconEntry.icon};\n }\n }\n }\n\n\n return {label:'▪▪▪▪',icon:\"battery_full\"};\n}\nfunction checkStatus() {\n $.ajaxSetup({\n timeout: statusInterval //Time in milliseconds\n });\n $.getJSON('/status.json', function (data) {\n handleRecoveryMode(data);\n handleNVSVisible();\n handleNetworkStatus(data);\n handlebtstate(data);\n flashState.EventTargetStatus(data);\n\n if (data.project_name && data.project_name !== '') {\n project_name = data.project_name;\n }\n if (data.platform_name && data.platform_name !== '') {\n platform_name = data.platform_name;\n }\n if (board_model === '') board_model = project_name;\n if (board_model === '') board_model = 'Squeezelite-ESP32';\n if (data.version && data.version !== '') {\n versionName = data.version;\n $(\"#navtitle\").html(`${board_model}${recovery ? '<br>[recovery]' : ''}`);\n $('span#foot-fw').html(`fw: <strong>${versionName}</strong>, mode: <strong>${recovery ? \"Recovery\" : project_name}</strong>`);\n } else {\n $('span#flash-status').html('');\n }\n if (data.Voltage) {\n const bat_icon=batteryToIcon(data.Voltage);\n $('#battery').html(`${getIcon(bat_icon)}`);\n $('#battery').attr(\"aria-label\",bat_icon.label);\n $('#battery').attr(\"icon\",bat_icon.icon);\n $('#battery').show();\n } else {\n $('#battery').hide();\n }\n if ((data.message ?? '') != '' && prevmessage != data.message) {\n // supporting older recovery firmwares - messages will come from the status.json structure\n prevmessage = data.message;\n showLocalMessage(data.message, 'MESSAGING_INFO')\n }\n is_i2c_locked = data.is_i2c_locked;\n if (is_i2c_locked) {\n $('flds-cfg-hw-preset').hide();\n }\n else {\n $('flds-cfg-hw-preset').show();\n }\n $(\"button[onclick*='handleReboot']\").removeClass('rebooting');\n\n if (typeof lmsBaseUrl == \"undefined\" || data.lms_ip != prevLMSIP && data.lms_ip && data.lms_port) {\n const baseUrl = 'http://' + data.lms_ip + ':' + data.lms_port;\n prevLMSIP = data.lms_ip;\n $.ajax({\n url: baseUrl + '/plugins/SqueezeESP32/firmware/-check.bin',\n type: 'HEAD',\n dataType: 'text',\n cache: false,\n error: function () {\n // define the value, so we don't check it any more.\n lmsBaseUrl = '';\n },\n success: function () {\n lmsBaseUrl = baseUrl;\n }\n });\n }\n $('#o_jack').css({ display: Number(data.Jack) ? 'inline' : 'none' });\n setTimeout(checkStatus,statusInterval);\n }).fail(function (xhr, ajaxOptions, thrownError) {\n handleExceptionResponse(xhr, ajaxOptions, thrownError);\n if(xhr.status == 0 && xhr.readyState ==0){\n // probably a timeout. Target is rebooting? \n setTimeout(checkStatus,messageInterval*2); // increase duration if a failure happens\n }\n else {\n setTimeout(checkStatus,messageInterval); // increase duration if a failure happens\n }\n });\n}\n// eslint-disable-next-line no-unused-vars\nwindow.runCommand = function (button, reboot) {\n let cmdstring = button.attributes.cmdname.value;\n showCmdMessage(\n button.attributes.cmdname.value,\n 'MESSAGING_INFO',\n 'Executing.',\n false\n );\n const fields = document.getElementById('flds-' + cmdstring);\n const allfields = fields?.querySelectorAll('select,input');\n if (cmdstring === 'cfg-hw-preset') return handleHWPreset(allfields, reboot);\n cmdstring += ' ';\n if (fields) {\n\n for (const field of allfields) {\n let qts = '';\n let opt = '';\n let attr = field.attributes;\n let isSelect = $(field).is('select');\n const hasValue = attr?.hasvalue?.value === 'true';\n const validVal = (isSelect && field.value !== '--') || (!isSelect && field.value !== '');\n\n if (!hasValue || hasValue && validVal) {\n if (attr?.longopts?.value !== 'undefined') {\n opt += '--' + attr?.longopts?.value;\n } else if (attr?.shortopts?.value !== 'undefined') {\n opt = '-' + attr.shortopts.value;\n }\n\n if (attr?.hasvalue?.value === 'true') {\n if (attr?.value !== '') {\n qts = /\\s/.test(field.value) ? '\"' : '';\n cmdstring += opt + ' ' + qts + field.value + qts + ' ';\n }\n } else {\n // this is a checkbox\n if (field?.checked) {\n cmdstring += opt + ' ';\n }\n }\n }\n }\n }\n\n console.log(cmdstring);\n\n const data = {\n timestamp: Date.now(),\n };\n data.command = cmdstring;\n\n $.ajax({\n url: '/commands.json',\n dataType: 'text',\n method: 'POST',\n cache: false,\n contentType: 'application/json; charset=utf-8',\n data: JSON.stringify(data),\n error: function (xhr, _ajaxOptions, thrownError) {\n var cmd = JSON.parse(this.data).command;\n if (xhr.status == 404) {\n showCmdMessage(\n cmd.substr(0, cmd.indexOf(' ')),\n 'MESSAGING_ERROR',\n `${recovery ? 'Limited recovery mode active. Unsupported action ' : 'Unexpected error while processing command'}`,\n true\n );\n }\n else {\n handleExceptionResponse(xhr, _ajaxOptions, thrownError);\n showCmdMessage(\n cmd.substr(0, cmd.indexOf(' ') - 1),\n 'MESSAGING_ERROR',\n `Unexpected error ${(thrownError !== '') ? thrownError : 'with return status = ' + xhr.status}`,\n true\n );\n }\n },\n success: function (response) {\n $('.orec').show();\n console.log(response);\n if (\n JSON.parse(response).Result === 'Success' &&\n reboot\n ) {\n delayReboot(2500, button.attributes.cmdname.value);\n }\n },\n });\n}\nfunction getLongOps(data, name, longopts) {\n return data.values[name] !== undefined ? data.values[name][longopts] : \"\";\n}\nfunction getCommands() {\n $.ajaxSetup({\n timeout: 7000 //Time in milliseconds\n });\n $.getJSON('/commands.json', function (data) {\n console.log(data);\n $('.orec').show();\n data.commands.forEach(function (command) {\n if ($('#flds-' + command.name).length === 0) {\n const cmdParts = command.name.split('-');\n const isConfig = cmdParts[0] === 'cfg';\n const targetDiv = '#tab-' + cmdParts[0] + '-' + cmdParts[1];\n let innerhtml = '';\n innerhtml += `<div class=\"card text-white mb-3\"><div class=\"card-header\">${command.help.encodeHTML().replace(/\\n/g, '<br />')}</div><div class=\"card-body\"><fieldset id=\"flds-${command.name}\">`;\n if (command.argtable) {\n command.argtable.forEach(function (arg) {\n let placeholder = arg.datatype || '';\n const ctrlname = command.name + '-' + arg.longopts;\n const curvalue = getLongOps(data, command.name, arg.longopts);\n\n let attributes = 'hasvalue=' + arg.hasvalue + ' ';\n attributes += 'longopts=\"' + arg.longopts + '\" ';\n attributes += 'shortopts=\"' + arg.shortopts + '\" ';\n attributes += 'checkbox=' + arg.checkbox + ' ';\n attributes += 'cmdname=\"' + command.name + '\" ';\n attributes +=\n 'id=\"' +\n ctrlname +\n '\" name=\"' +\n ctrlname +\n '\" hasvalue=\"' +\n arg.hasvalue +\n '\" ';\n let extraclass = arg.mincount > 0 ? 'bg-success' : '';\n if (arg.glossary === 'hidden') {\n attributes += ' style=\"visibility: hidden;\"';\n }\n if (arg.checkbox) {\n innerhtml += `<div class=\"form-check\"><label class=\"form-check-label\"><input type=\"checkbox\" ${attributes} class=\"form-check-input ${extraclass}\" value=\"\" >${arg.glossary.encodeHTML()}</label>`;\n } else {\n innerhtml += `<div class=\"form-group\" ><label for=\"${ctrlname}\">${arg.glossary.encodeHTML()}</label>`;\n if (placeholder.includes('|')) {\n extraclass = placeholder.startsWith('+') ? ' multiple ' : '';\n placeholder = placeholder\n .replace('<', '')\n .replace('=', '')\n .replace('>', '');\n innerhtml += `<select ${attributes} class=\"form-control ${extraclass}\" >`;\n placeholder = '--|' + placeholder;\n placeholder.split('|').forEach(function (choice) {\n innerhtml += '<option >' + choice + '</option>';\n });\n innerhtml += '</select>';\n } else {\n innerhtml += `<input type=\"text\" class=\"form-control ${extraclass}\" placeholder=\"${placeholder}\" ${attributes}>`;\n }\n }\n\n innerhtml += `${arg.checkbox ? '</div>' : ''}<small class=\"form-text text-muted\">Previous value: ${arg.checkbox ? (curvalue ? 'Checked' : 'Unchecked') : (curvalue || '')}</small>${arg.checkbox ? '' : '</div>'}`;\n });\n }\n innerhtml += `<div style=\"margin-top: 16px;\">\n <div class=\"toast hide\" role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\" id=\"toast_${command.name}\">\n <div class=\"toast-header\">\n <strong class=\"mr-auto\">Result</strong\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"toast\" aria-label=\"Close\"></button>\n </div>\n <div class=\"toast-body\" id=\"msg_${command.name}\"></div>\n </div>`;\n if (isConfig) {\n innerhtml +=\n `<button type=\"submit\" class=\"btn btn-info sclk\" id=\"btn-save-${command.name}\" cmdname=\"${command.name}\">Save</button>\n<button type=\"submit\" class=\"btn btn-warning cclk\" id=\"btn-commit-${command.name}\" cmdname=\"${command.name}\">Apply</button>`;\n } else {\n innerhtml += `<button type=\"submit\" class=\"btn btn-success sclk\" id=\"btn-run-${command.name}\" cmdname=\"${command.name}\">Execute</button>`;\n }\n innerhtml += '</div></fieldset></div></div>';\n if (isConfig) {\n $(targetDiv).append(innerhtml);\n } else {\n $('#commands-list').append(innerhtml);\n }\n }\n });\n $(\".sclk\").off('click').on('click', function () { runCommand(this, false); });\n $(\".cclk\").off('click').on('click', function () { runCommand(this, true); });\n data.commands.forEach(function (command) {\n $('[cmdname=' + command.name + ']:input').val('');\n $('[cmdname=' + command.name + ']:checkbox').prop('checked', false);\n if (command.argtable) {\n command.argtable.forEach(function (arg) {\n const ctrlselector = '#' + command.name + '-' + arg.longopts;\n const ctrlValue = getLongOps(data, command.name, arg.longopts);\n if (arg.checkbox) {\n $(ctrlselector)[0].checked = ctrlValue;\n } else {\n if (ctrlValue !== undefined) {\n $(ctrlselector)\n .val(ctrlValue)\n .trigger('change');\n }\n if (\n $(ctrlselector)[0].value.length === 0 &&\n (arg.datatype || '').includes('|')\n ) {\n $(ctrlselector)[0].value = '--';\n }\n }\n });\n }\n });\n loadPresets();\n }).fail(function (xhr, ajaxOptions, thrownError) {\n if (xhr.status == 404) {\n $('.orec').hide();\n }\n else {\n handleExceptionResponse(xhr, ajaxOptions, thrownError);\n }\n $('#commands-list').empty();\n\n });\n}\n\nfunction getConfig() {\n $.ajaxSetup({\n timeout: 7000 //Time in milliseconds\n });\n $.getJSON('/config.json', function (entries) {\n $('#nvsTable tr').remove();\n const data = (entries.config ? entries.config : entries);\n SystemConfig = data;\n Object.keys(data)\n .sort()\n .forEach(function (key) {\n let val = data[key].value;\n if (key === 'autoexec') {\n if (data.autoexec.value === '0') {\n $('#disable-squeezelite')[0].checked = true;\n } else {\n $('#disable-squeezelite')[0].checked = false;\n }\n } else if (key === 'autoexec1') {\n const re = /-o\\s?([\"][^\"]*[\"]|[^-]+)/g;\n const m = re.exec(val);\n if (m[1].toUpperCase().startsWith('I2S')) {\n handleTemplateTypeRadio('i2s');\n } else if (m[1].toUpperCase().startsWith('SPDIF')) {\n handleTemplateTypeRadio('spdif');\n } else if (m[1].toUpperCase().startsWith('\"BT')) {\n handleTemplateTypeRadio('bt');\n }\n } else if (key === 'host_name') {\n val = val.replaceAll('\"', '');\n $('input#dhcp-name1').val(val);\n $('input#dhcp-name2').val(val);\n $('#player').val(val);\n document.title = val;\n hostName = val;\n } else if (key === 'rel_api') {\n releaseURL = val;\n }\n else if (key === 'enable_airplay') {\n $(\"#s_airplay\").css({ display: isEnabled(val) ? 'inline' : 'none' })\n }\n else if (key === 'enable_cspot') {\n $(\"#s_cspot\").css({ display: isEnabled(val) ? 'inline' : 'none' })\n }\n else if (key == 'preset_name') {\n preset_name = val;\n }\n else if (key == 'board_model') {\n board_model = val;\n }\n\n $('tbody#nvsTable').append(\n '<tr>' +\n '<td>' +\n key +\n '</td>' +\n \"<td class='value'>\" +\n \"<input type='text' class='form-control nvs' id='\" +\n key +\n \"' nvs_type=\" +\n data[key].type +\n ' >' +\n '</td>' +\n '</tr>'\n );\n $('input#' + key).val(data[key].value);\n });\n $('tbody#nvsTable').append(\n \"<tr><td><input type='text' class='form-control' id='nvs-new-key' placeholder='new key'></td><td><input type='text' class='form-control' id='nvs-new-value' placeholder='new value' nvs_type=33 ></td></tr>\"\n );\n if (entries.gpio) {\n $('#pins').show();\n $('tbody#gpiotable tr').remove();\n entries.gpio.forEach(function (gpioEntry) {\n $('tbody#gpiotable').append(\n '<tr class=' +\n (gpioEntry.fixed ? 'table-secondary' : 'table-primary') +\n '><th scope=\"row\">' +\n gpioEntry.group +\n '</th><td>' +\n gpioEntry.name +\n '</td><td>' +\n gpioEntry.gpio +\n '</td><td>' +\n (gpioEntry.fixed ? 'Fixed' : 'Configuration') +\n '</td></tr>'\n );\n });\n }\n else {\n $('#pins').hide();\n }\n }).fail(function (xhr, ajaxOptions, thrownError) {\n handleExceptionResponse(xhr, ajaxOptions, thrownError);\n });\n}\nfunction showLocalMessage(message, severity) {\n const msg = {\n message: message,\n type: severity,\n };\n showMessage(msg, new Date());\n}\n\nfunction showMessage(msg, msgTime) {\n let color = 'table-success';\n\n if (msg.type === 'MESSAGING_WARNING') {\n color = 'table-warning';\n if (messageseverity === 'MESSAGING_INFO') {\n messageseverity = 'MESSAGING_WARNING';\n }\n } else if (msg.type === 'MESSAGING_ERROR') {\n if (\n messageseverity === 'MESSAGING_INFO' ||\n messageseverity === 'MESSAGING_WARNING'\n ) {\n messageseverity = 'MESSAGING_ERROR';\n }\n color = 'table-danger';\n }\n if (++messagecount > 0) {\n $('#msgcnt').removeClass('badge-success');\n $('#msgcnt').removeClass('badge-warning');\n $('#msgcnt').removeClass('badge-danger');\n $('#msgcnt').addClass(pillcolors[messageseverity]);\n $('#msgcnt').text(messagecount);\n }\n\n $('#syslogTable').append(\n \"<tr class='\" +\n color +\n \"'>\" +\n '<td>' +\n msgTime.toLocalShort() +\n '</td>' +\n '<td>' +\n msg.message.encodeHTML() +\n '</td>' +\n '</tr>'\n );\n}\n\nfunction inRange(x, min, max) {\n return (x - min) * (x - max) <= 0;\n}\n\nfunction sleep(ms) {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nrequire(\"bootstrap\");\nrequire(\"./sass/main.scss\");\nrequire(\"./assets/images/favicon-32x32.png\");\nrequire(\"./js/custom.js\");\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t826: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunksqueezelite_esp32\"] = self[\"webpackChunksqueezelite_esp32\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [987], () => (__webpack_require__(607)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","he","require","Promise","handleNVSVisible","nvs_previous_checked","isEnabled","Cookies","$","checked","recovery","show","hide","val","undefined","match","window","bootstrap","String","prototype","format","Object","assign","args","arguments","this","replace","number","encodeHTML","encode","Date","toLocalShort","toLocaleString","dateStyle","timeStyle","nvsTypes","btIcons","bt_playing","bt_disconnected","bt_neutral","bt_connecting","bt_connected","bt_disabled","play_arrow","pause","stop","batIcons","icon","label","ranges","f","t","btStateIcons","desc","sub","pillcolors","MESSAGING_INFO","MESSAGING_WARNING","MESSAGING_ERROR","connectReturnCode","taskStates","flashState","NONE","REBOOT_TO_RECOVERY","SET_FWURL","FLASHING","DONE","UPLOADING","ERROR","UPLOADCOMPLETE","_state","olderRecovery","statusText","flashURL","flashFileName","statusPercent","Completed","prevRecovery","updateModal","Modal","document","getElementById","reset","UpdateProgress","removeClass","prop","value","isStateError","html","parent","isStateUploadComplete","isStateNone","isStateRebootRecovery","isStateSetUrl","isStateFlashing","isStateDone","isStateUploading","init","SetStateError","addClass","SetStateNone","SetStateRebootRecovery","SetStatusText","ajax","url","context","dataType","method","cache","contentType","data","JSON","stringify","timestamp","now","error","xhr","_ajaxOptions","thrownError","setOTAError","status","complete","response","SetStateSetUrl","post_config","fwurl","type","SetStateFlashing","SetStateDone","SetStateUploading","SetStateUploadComplete","isFlashExecuting","toString","keys","find","x","setOTATargets","fileInput","files","length","message","SetStatusPercent","ShowDialog","pct","pctChanged","txt","changed","css","attr","text","StartOTA","logEvent","name","TargetReadyStartOTA","UploadLocalFile","xhttp","XMLHttpRequest","boundHandleUploadProgressEvent","HandleUploadProgressEvent","bind","boundsetOTAError","upload","addEventListener","onreadystatechange","readyState","open","send","console","Math","round","loaded","total","EventTargetStatus","ota_pct","ota_dsc","EventOTAMessageClass","otaData","parse","fun","log","hideSurrounding","obj","presetsloaded","messageInterval","confPayload","config","handleExceptionResponse","isConnected","ConnectedTo","ip","getIcon","icons","handleTemplateTypeRadio","outtype","children","display","output","showLocalMessage","HideCmdMessage","cmdname","showCmdMessage","msgtype","msgtext","append","color","escapedtext","substring","hFlash","handleReboot","link","delayReboot","lmsBaseUrl","releaseURL","messagesHeld","messagecount","messageseverity","SystemConfig","LastCommandsState","hostName","versionName","prevmessage","project_name","board_model","platform_name","preset_name","btSinkNamesOptSel","ConnectingToSSID","prevLMSIP","ConnectingToActions","getConfigJson","slimMode","each","_index","entry","id","nvsType","parseInt","attributes","nvs_type","key","duration","ota","empty","resolve","delay","then","rdata","getCommands","getConfig","setPlatformFilter","filter","toUpperCase","trigger","rssiToIcon","rssi","refreshAP","urc","ajaxSetup","timeout","getJSON","sleep","sort","a","b","y","refreshAPHTML2","formatAP","ssid","auth","rssi_icon","auth_icon","h","forEach","e","wifiSelector","prepend","siblings","first","showTask","task","debug","nme","cpu","st","minstk","bprio","cprio","num","getBTSinkOpt","getMessages","msg","msgAge","current_time","sent_time","msgTime","setTime","getTime","statsData","ntasks","tasks","showMessage","msgparts","split","is","attrs","j","item","curOpt","replaceWith","btEntry","remove","setTimeout","fail","ajaxOptions","handleWifiDialog","gw","netmask","Action","ap_ssid","ap_pwd","setIcons","offline","textContent","handleNetworkStatus","hasConnectionChanged","checkStatus","handleRecoveryMode","tt","bt_status","bt_sub_status","iconindex","handlebtstate","version","Voltage","bat_icon","voltage","iconEntry","entryRanges","batteryToIcon","is_i2c_locked","lms_ip","lms_port","baseUrl","success","Number","Jack","getLongOps","longopts","values","commands","command","cmdParts","isConfig","targetDiv","innerhtml","help","argtable","arg","placeholder","datatype","ctrlname","curvalue","hasvalue","shortopts","checkbox","extraclass","mincount","glossary","includes","startsWith","choice","off","on","runCommand","ctrlselector","ctrlValue","_","jqxhr","textStatus","err","entries","autoexec","m","exec","replaceAll","title","gpio","gpioEntry","fixed","group","severity","ms","reason","_resolve","reject","saveAutoexec1","apply","commandLine","commandHeader","autoexec1","responseText","result","Result","handleDisconnect","handleConnect","pwd","dhcpname","ready","index","not","event","relatedTarget","FileReader","file","fr","onload","target","ex","alert","readAsText","slideUp","slideDown","preventDefault","createElement","href","URL","createObjectURL","Blob","setAttribute","body","appendChild","click","removeChild","branches","release","branch","push","fwb","assets","asset","browser_download_url","namecomponents","ver","cfg","bits","substr","lastIndexOf","created_at","i","idf","trclass","setURL","button","dataset","reboot","cmdstring","fields","allfields","querySelectorAll","selJson","cmd","model_config","storedval","handleHWPreset","field","qts","opt","isSelect","hasValue","validVal","test","indexOf","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","call","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","every","splice","r","n","getter","__esModule","d","definition","o","defineProperty","enumerable","get","g","globalThis","Function","hasOwnProperty","Symbol","toStringTag","nmd","paths","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""}