function get_response(data) { var response = JSON.parse(data) var data = response.data; switch (response.action) { case "connect": document.getElementById("version").innerHTML = data.version; document.getElementById("date").innerHTML = data.date; session_id = response.id; break; case "EndItems": var item_list = []; for (var item in data.itemlist) { context_items = []; item = data.itemlist[item]; if (item.thumbnail && item.thumbnail.indexOf("http") != 0) { item.thumbnail = domain + "/local/" + encodeURIComponent(btoa(item.thumbnail)); } else if (item.thumbnail & false){ item.thumbnail = domain + "/proxy/" + encodeURIComponent(btoa(item.thumbnail)); }; if (item.fanart && item.fanart.indexOf("http") != 0) { item.fanart = domain + "/local/" + encodeURIComponent(btoa(item.fanart)); } else if (item.fanart & false){ item.fanart = domain + "/proxy/" + encodeURIComponent(btoa(item.fanart)); }; if (item.action == "go_back") { item.url = "go_back"; }; if (item.context.length ) { for (var x in item.context) { html_item = replace_list(html.dialog.select.item, { "item_action": "send_request('" + item.context[x].url + "')", "item_title": item.context[x].title }); context_items.push(html_item); } var menu_button = replace_list(html.itemlist.menu, { "menu_items": btoa(context_items.join("")) }); var menu_class = "item_with_menu"; } else { var menu_button = ""; var menu_class = ""; }; var replace_dict = { "item_class": menu_class, "item_url": item.url, "item_thumbnail": item.thumbnail, "item_fanart": item.fanart, "item_title": item.title, "item_plot": item.plot, "item_menu": menu_button, "menu_items": btoa(context_items.join("")) }; if (html.itemlist[data.viewmode]) { var html_item = replace_list(html.itemlist[data.viewmode], replace_dict); } else { var html_item = replace_list(html.itemlist.movie, replace_dict); } item_list.push(html_item); }; document.getElementById("itemlist").innerHTML = item_list.join(""); set_category(data.category); document.getElementById("itemlist").children[0].children[0].focus(); document.getElementById("itemlist").scrollTop = 0; show_images(); nav_history.newResponse(item_list, data.category, data.url); set_original_url(data.url) //console.debug(nav_history) send_data({ "id": response.id, "result": true }); loading.close(); break; case "Refresh": nav_history.current -= 1 send_request(nav_history.states[nav_history.current].url); send_data({ "id": response.id, "result": true }); break; case "Alert": loading.close(); dialog.ok(response.id, data); break; case "notification": dialog.notification(response.id, data); break; case "AlertYesNo": loading.close() dialog.yesno(response.id, data) break; case "ProgressBG": dialog.progress_bg(response.id, data); send_data({ "id": response.id, "result": true }); break; case "ProgressBGUpdate": dialog.progress_bg(response.id, data); break; case "ProgressBGClose": dialog.progress_bg_close(); send_data({ "id": response.id, "result": true }); break; case "Progress": loading.close(); dialog.progress(response.id, data); send_data({ "id": response.id, "result": true }); break; case "ProgressUpdate": dialog.progress_update(response.id, data); break; case "ProgressClose": dialog.progress_close(); send_data({ "id": response.id, "result": true }); loading.close(); break; case "ProgressIsCanceled": send_data({ "id": response.id, "result": document.getElementById("window_progress").getElementById("canceled").checked != "" }); break; case "isPlaying": send_data({ "id": response.id, "result": document.getElementById("Player-popup").style.display == "block" || document.getElementById("Lista-popup").style.display == "block" }); break; case "Keyboard": loading.close(); dialog.keyboard(response.id, data); break; case "recaptcha": loading.close(); dialog.recaptcha(response.id, data); break; case "recaptcha_select": loading.close(); dialog.recaptcha_select(response.id, data); break case "List": loading.close(); dialog.select(response.id, data); break; case "Play": send_data({ "id": response.id, "result": true }); loading.close(); if (settings.player_mode == 0) { var lista = []; for (var player in players) { lista.push(replace_list(html.dialog.select.item, { "item_title": players[player], "item_action": "play_mode('" + data.video_url + "','" + data.title + "','" + player + "')" })); }; dialog.menu("Elige el Reproductor", btoa(lista.join(""))); } else { play_mode(data.video_url, data.title, Object.keys(players)[settings.player_mode - 1]); }; break; case "Update": send_request(data.url); loading.close(); break; case "HideLoading": loading.close(); break; case "ShowLoading": loading.show(); break; case "OpenInfo": loading.close(); dialog.info(response.id, data); break; case "custom_button": dialog.custom_button(response.id, data); break; case "OpenConfig": loading.close(); var itemlist = {}; default_settings = {}; settings_controls = []; for (var x in data.items) { if (!itemlist[data.items[x].category]) { itemlist[data.items[x].category] = []; }; if (data.items[x].id) { default_settings[data.items[x].id] = data.items[x]["default"]; } if (!data.items[x].color || data.items[x].color == "auto") { data.items[x].color = "#FFFFFF"; }; if (!data.items[x].enabled && data.items[x].enable) { data.items[x].enabled = data.items[x].enable; }; settings_controls.push(data.items[x]); switch (data.items[x].type) { case "sep": itemlist[data.items[x].category].push(replace_list(html.config.sep, {})); break; case "lsep": case "label": itemlist[data.items[x].category].push(replace_list(html.config.label, { "item_color": data.items[x].color, "item_label": data.items[x].label })); break; case "number": case "text": if (data.items[x].hidden) { var type = "password"; } else { var type = "text"; }; if (data.items[x].type == 'number') { keypress = "if ('0123456789'.indexOf(event.key) == -1 && event.charCode){return false}" } else { keypress = ""; }; if (!data.items[x].value) data.items[x].value = ""; itemlist[data.items[x].category].push(replace_list(html.config.text, { "item_color": data.items[x].color, "item_label": data.items[x].label, "item_id": data.items[x].id, "item_value": data.items[x].value, "item_type": type, "keypress": keypress })); break; case "bool": if (data.items[x].value == "true" || data.items[x].value == true) { var value = "checked='checked'"; } else { var value = ""; }; itemlist[data.items[x].category].push(replace_list(html.config.bool, { "item_color": data.items[x].color, "item_label": data.items[x].label, "item_id": data.items[x].id, "item_value": value })); break; case "labelenum": if (!data.items[x].values) { var values = data.items[x].lvalues.split("|"); } else { var values = data.items[x].values.split("|"); }; var options = []; for (var y in values) { if (data.items[x].value == values[y]) { options.push(""); } else { options.push(""); }; }; itemlist[data.items[x].category].push(replace_list(html.config.list, { "item_type": "labelenum", "item_color": data.items[x].color, "item_label": data.items[x].label, "item_id": data.items[x].id, "item_values": options })); break; case "list": var options = []; for (var y in data.items[x].lvalues) { if (data.items[x].value == y) { options.push(""); } else { options.push(""); }; }; itemlist[data.items[x].category].push(replace_list(html.config.list, { "item_type": "enum", "item_color": data.items[x].color, "item_label": data.items[x].label, "item_id": data.items[x].id, "item_values": options })); break; case "enum": if (!data.items[x].values) { var values = data.items[x].lvalues.split("|"); } else { var values = data.items[x].values.split("|"); }; var options = []; for (var y in values) { if (data.items[x].value == y) { options.push(""); } else { options.push(""); }; }; itemlist[data.items[x].category].push(replace_list(html.config.list, { "item_type": "enum", "item_color": data.items[x].color, "item_label": data.items[x].label, "item_id": data.items[x].id, "item_values": options })); break; default: break; }; }; var categories = []; var category_list = []; for (var category in itemlist) { if (Object.keys(itemlist).length > 1 || category != "undefined") { categories.push(replace_list(html.config.category, { "item_label": category, "item_category": category })); }; category_list.push(replace_list(html.config.container, { "item_id": "category_" + category, "item_value": itemlist[category].join("") })); }; dialog.config(response.id, data, categories.join(""), category_list.join("")); evaluate_controls(); break; default: break; }; }; function custom_button(data) { if (data == null) { var controls = document.getElementById("window_settings").getControls(); for (var x in controls) { switch (controls[x].type) { case "text": controls[x].value = default_settings[controls[x].id]; break; case "password": controls[x].value = default_settings[controls[x].id]; break; case "checkbox": value = default_settings[controls[x].id]; if (value == true) { value = "checked"; } else { value = ""; }; controls[x].checked = value; break; case "select-one": if (controls[x].name == "enum") { controls[x].selectedIndex = default_settings[controls[x].id]; } else if (controls[x].name == "labelenum") { controls[x].value = default_settings[controls[x].id]; }; break; }; controls[x].onchange() }; } else { send_data({ "id": document.getElementById("window_settings").RequestID, "result": "custom_button" }); if (data["close"] == true) { dialog.closeall(); }; }; }; function info_window(comando) { send_data({ "id": document.getElementById("window_info").RequestID, "result": comando }); }; function save_config(Guardar) { if (Guardar === true) { var JsonAjustes = {}; var controls = document.getElementById("window_settings").getControls(); for (var x in controls) { switch (controls[x].type) { case "text": JsonAjustes[controls[x].id] = controls[x].value; break; case "password": JsonAjustes[controls[x].id] = controls[x].value; break; case "checkbox": JsonAjustes[controls[x].id] = controls[x].checked.toString(); break; case "select-one": if (controls[x].name == "enum") { JsonAjustes[controls[x].id] = controls[x].selectedIndex.toString(); } else if (controls[x].name == "labelenum") { JsonAjustes[controls[x].id] = controls[x].value; } break; } } send_data({ "id": document.getElementById("window_settings").RequestID, "result": JsonAjustes }); } else { send_data({ "id": document.getElementById("window_settings").RequestID, "result": false }); }; loading.show(); }; function evaluate_controls(control_changed) { if (typeof control_changed != "undefined") { for (var x in settings_controls) { if (settings_controls[x].id == control_changed.id) { switch (control_changed.type) { case "text": settings_controls[x].value = control_changed.value; break; case "password": settings_controls[x].value = control_changed.value; break; case "checkbox": settings_controls[x].value = control_changed.checked; break; case "select-one": if (control_changed.name == "enum") { settings_controls[x].value = control_changed.selectedIndex; } else if (control_changed.name == "labelenum") { settings_controls[x].value = control_changed.value; }; break; }; break; }; }; }; for (var index in settings_controls) { control = get_control_group(index); set_visible(document.getElementById("window_settings").getElementById("controls_container").children[control[0]].children[control[1]], evaluate(index, settings_controls[index].visible)); set_enabled(document.getElementById("window_settings").getElementById("controls_container").children[control[0]].children[control[1]], evaluate(index, settings_controls[index].enabled)); }; }; function set_visible(element, visible) { if (visible) { element.style.display = "block"; } else { element.style.display = "none"; }; }; function set_enabled(element, enabled) { if (element.children[0].className == "control") { element.children[0].children[1].disabled = !enabled; }; }; function get_control_group(index) { var group = 0; var pos = 0; var children = document.getElementById("window_settings").getElementById("controls_container").children; for (child in children) { if (pos + children[child].children.length <= index) { group ++; pos += children[child].children.length; } else { break; }; }; return [group, index - pos]; }; function evaluate(index, condition) { index = parseInt(index); if (typeof condition == "undefined") { return true; }; if (typeof condition == "boolean") { return condition; }; if (condition.toLocaleLowerCase() == "true") { return true; } else if (condition.toLocaleLowerCase() == "false") { return false; }; const regex = /(!?eq|!?gt|!?lt)?\(([^,]+),[\"|']?([^)|'|\"]*)['|\"]?\)[ ]*([+||])?/g; while ((m = regex.exec(condition)) !== null) { // This is necessary to avoid infinite loops with zero-width matches if (m.index === regex.lastIndex) { regex.lastIndex++; }; var operator = m[1]; var id = parseInt(m[2]); var value = m[3]; var next = m[4]; if (isNaN(id)) { return false; }; if (index + id < 0 || index + id >= settings_controls.length) { return false; } else { if (settings_controls[index + id].type == "list" || settings_controls[index + id].type == "enum") { if (settings_controls[index + id].lvalues){ control_value = settings_controls[index + id].lvalues[settings_controls[index + id].value]; } else { control_value = settings_controls[index + id].values[settings_controls[index + id].value]; }; } else { control_value = settings_controls[index + id].value; }; }; if (["lt", "!lt", "gt", "!gt"].indexOf(operator) > -1) { value = parseInt(value); if (isNaN(value)) { return false; }; }; if (["eq", "!eq"].indexOf(operator) > -1) { if (typeof(value) == "string") { if (!isNaN(parseInt(value))) { value = parseInt(value); } else if (value.toLocaleLowerCase() == "true") { value = true; } else if (value.toLocaleLowerCase() == "false") { value = false; }; }; }; if (operator == "eq") { ok = (control_value == value); }; if (operator == "!eq") { ok = !(control_value == value); }; if (operator == "gt") { ok = (control_value > value); }; if (operator == "!gt") { ok = !(control_value > value); }; if (operator == "lt") { ok = (control_value < value); }; if (operator == "!lt") { ok = !(control_value < value); }; if (next == "|" && ok == true) { break; }; if (next == "+" && ok == false) { break; }; }; return ok; };