/* Замер скорости Доп. EPG Скрытие каналов Родительский контроль универсальный Вернуть ЮзерАгент - сломает выбор плеера на Android ? */ ;(function () { 'use strict'; var usermail = Lampa.Storage.field('account_email').toLowerCase(); if (usermail == 'sed-zond@mail.ru') location.reload(); if (!localStorage.getItem('Diesel_startGroup')) localStorage.setItem('Diesel_startGroup', 'Russia'); function NotyReboot() {Lampa.Noty.show("Перезагрузите Lampa для обновления плейлиста!");} function showTest(link){ Lampa.Iframe.show({url: 'https://andreyurl54.github.io/diesel5/speedtest.html' + '?myLink=' + link, onBack: function onBack() { $('.iframe').remove(); Lampa.Controller.toggle('settings_component');} }); setTimeout(function() { $('.iframe').remove(); Lampa.Controller.toggle('content'); }, 15000) } /* MSX Noty */ setTimeout(function() { var userAgent = navigator.userAgent; var agentFilter = userAgent.match(/Android/i); var result = Lampa.Platform.is('android') if (!($('.modal').length) && !result) { if (agentFilter == 'Android') { var isMSX_text = $("
" + '\n' + '
Мы заметили, что для запуска Lampa на Android Вы используете MediaStationX. Рекомендуем вам удалить MediaStationX и установить Lampa как APK-приложение. Скачать последнюю версию приложения Вы можете:
\n\n\n' + '
\n' + '
\n' + '
\n' + 'TELEGRAM
\n' + '@lampa_android\n' + '
\n\n' + '
\n' + 'Прямой Ссылкой
\n' + 'https://cub.red/download/lampa.apk' + '\n' + '
\n\n' + '
\n' + 'Если это ошибка, напишите об этом в Telegram-группе плагинов
\n' + '@lampa_plugins' + '\n' + '
\n\n' + '
\n' + 'Окно автоматически закроется через: ' + '31' + ' секунд' + '
\n' + '\n' + '
\n\n' + '
\n' + '
\n\n' + '
\n\n' + ""); /* var video = {url: 'https://andreyurl54.github.io/diesel5/MSX.mp3'}; Lampa.Player.play(video); $('.player').hide(); setTimeout(function() { $('.player').remove(); }, 22000); */ var countDownTimer = setInterval(function() { if (document.querySelector("#counter").innerText == 0) { Lampa.Modal.close(); Lampa.Controller.toggle('content'); clearInterval(countDownTimer); return; } document.querySelector("#counter").innerText = document.querySelector("#counter").innerText - 1; }, 1000); if ($('.modal').length) Lampa.Modal.close(); Lampa.Modal.open({ title: 'Важная информация!', html: isMSX_text, size: 'medium', onBack: function onBack() { // $('.player').remove(); clearInterval(countDownTimer); Lampa.Modal.close(); Lampa.Controller.toggle('content'); } }); }; } }, 4000); var plugin = { component: 'diesel_iptv', /* changeIt */ icon: "", name: 'Дизель ТВ' }; var lists = []; var curListId = -1; var defaultGroup = 'Other'; var catalog = {}; var listCfg = {}; var EPG = {}; var epgInterval; var UID = ''; var chNumber = ''; var chTimeout = null; var stopRemoveChElement = false; var chPanel = $(( "
\n" + "
\n" + "
\n" + "
 
\n" + "
\n" + "
\n" + "
").replace(/PLUGIN/g, plugin.component) ).hide().fadeOut(0); var chHelper = $(( "
\n" + "
\n" + "
\n" + "
\n" + "
").replace(/PLUGIN/g, plugin.component) ).hide().fadeOut(0); var epgTemplate = $(('
\n' + '

\n' + '
\n' + '
Сейчас
\n' + '
' + '
\n' + '
XX:XX
\n' + '
\n' + '
\n' + '
\n' + '
\n' + '
' + '
\n' + '
'+ '
' + '
\n' + '
Потом
\n' + '
' + '
\n' + '
' + '
').replace(/PLUGIN/g, plugin.component) ); var epgItemTeplate = $(( '
\n' + '
XX:XX
\n' + '
\n' + '
\n' + '
\n' + '
').replace(/PLUGIN/g, plugin.component) ); var chHelpEl = chHelper.find('.tv-helper'); var chNumEl = chPanel.find('.player-info__name'); var encoder = $('
'); function isPluginPlaylist(playlist) { return !(!playlist.length || !playlist[0].tv || !playlist[0].plugin || playlist[0].plugin !== plugin.component); } function channelSwitch(dig, isChNum) { if (!Lampa.Player.opened()) return false; var playlist = Lampa.PlayerPlaylist.get(); if (!isPluginPlaylist(playlist)) return false; if (!$('body>.js-ch-' + plugin.component).length) $('body').append(chPanel).append(chHelper); var cnt = playlist.length; var prevChNumber = chNumber; chNumber += dig; var number = parseInt(chNumber); if (number && number <= cnt) { if (!!chTimeout) clearTimeout(chTimeout); stopRemoveChElement = true; // fix removing element in callback on animate.finish() chNumEl.text(playlist[number - 1].title); if (isChNum || parseInt(chNumber + '0') > cnt) { chHelper.finish().hide().fadeOut(0); } else { var help = []; var chHelpMax = 9; var start = parseInt(chNumber + '0'); for (var i = start; i <= cnt && i <= (start + Math.min(chHelpMax, 9)); i++) { help.push(encoder.text(playlist[i - 1].title).html()); } chHelpEl.html(help.join('
')); chHelper.finish().show().fadeIn(0); } if (number < 10 || isChNum) { chPanel.finish().show().fadeIn(0); } stopRemoveChElement = false; var chSwitch = function () { var pos = number - 1; if (Lampa.PlayerPlaylist.position() !== pos) { Lampa.PlayerPlaylist.listener.send('select', { playlist: playlist, position: pos, item: playlist[pos] }); } chPanel.delay(1000).fadeOut(500,function(){stopRemoveChElement || chPanel.remove()}); chHelper.delay(1000).fadeOut(500,function(){stopRemoveChElement || chHelper.remove()}); chNumber = ""; } if (isChNum === true) { chTimeout = setTimeout(chSwitch, 1000); chNumber = ""; } else if (parseInt(chNumber + '0') > cnt) { // Ещё одна цифра невозможна - переключаем chSwitch(); } else { // Ждём следующую цифру или переключаем chTimeout = setTimeout(chSwitch, 3000); } } else { chNumber = prevChNumber; } return true; } var cacheVal = {}; function cache(name, value, timeout) { var time = (new Date()) * 1; if (!!timeout && timeout > 0) { cacheVal[name] = [(time + timeout), value]; return; } if (!!cacheVal[name] && cacheVal[name][0] > time) { return cacheVal[name][1]; } delete (cacheVal[name]); return value; } var timeOffset = 0; var timeOffsetSet = false; function unixtime() { return Math.floor((new Date().getTime() + timeOffset)/1000); } function toLocaleTimeString(time) { var date = new Date(), ofst = parseInt(Lampa.Storage.get('time_offset', 'n0').replace('n','')); time = time || date.getTime(); date = new Date(time + (ofst * 1000 * 60 * 60)); return ('0' + date.getHours()).substr(-2) + ':' + ('0' + date.getMinutes()).substr(-2); } function toLocaleDateString(time) { var date = new Date(), ofst = parseInt(Lampa.Storage.get('time_offset', 'n0').replace('n','')); time = time || date.getTime(); date = new Date(time + (ofst * 1000 * 60 * 60)); return date.toLocaleDateString(); } var utils = { uid: function() {return UID}, timestamp: unixtime, token: function() {return generateSigForString(Lampa.Storage.field('account_email').toLowerCase())}, hash: Lampa.Utils.hash, hash36: function(s) {return (this.hash(s) * 1).toString(36)} }; function generateSigForString(string) { var sigTime = unixtime(); return sigTime.toString(36) + ':' + utils.hash36((string || '') + sigTime + utils.uid()); } function strReplace(str, key2val) { for (var key in key2val) { str = str.replace( new RegExp(key.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g'), key2val[key] ); } return str; } function tf(t, format, u, tz) { format = format || ''; tz = parseInt(tz || '0'); var thisOffset = 0; thisOffset += tz * 60; if (!u) thisOffset += parseInt(Lampa.Storage.get('time_offset', 'n0').replace('n','')) * 60 - new Date().getTimezoneOffset(); var d = new Date((t + thisOffset) * 6e4); var r = {yyyy:d.getUTCFullYear(),MM:('0'+(d.getUTCMonth()+1)).substr(-2),dd:('0'+d.getUTCDate()).substr(-2),HH:('0'+d.getUTCHours()).substr(-2),mm:('0'+d.getUTCMinutes()).substr(-2),ss:('0'+d.getUTCSeconds()).substr(-2),UTF:t*6e4}; return strReplace(format, r); } function prepareUrl(url, epg) { var m = [], val = '', r = {start:unixtime,offset:0}; if (epg && epg.length) { r = { start: epg[0] * 60, utc: epg[0] * 60, end: (epg[0] + epg[1]) * 60, utcend: (epg[0] + epg[1]) * 60, offset: unixtime() - epg[0] * 60, duration: epg[1] * 60, now: unixtime, lutc: unixtime, d: function(m){return strReplace(m[6]||'',{M:epg[1],S:epg[1]*60,h:Math.floor(epg[1]/60),m:('0'+(epg[1] % 60)).substr(-2),s:'00'})}, b: function(m){return tf(epg[0], m[6], m[4], m[5])}, e: function(m){return tf(epg[0] + epg[1], m[6], m[4], m[5])}, n: function(m){return tf(unixtime() / 60, m[6], m[4], m[5])} }; } while (!!(m = url.match(/\${(\((([a-zA-Z\d]+?)(u)?)([+-]\d+)?\))?([^${}]+)}/))) { if (!!m[2] && typeof r[m[2]] === "function") val = r[m[2]](m); else if (!!m[3] && typeof r[m[3]] === "function") val = r[m[3]](m); else if (m[6] in r) val = typeof r[m[6]] === "function" ? r[m[6]]() : r[m[6]]; else if (!!m[2] && typeof utils[m[2]] === "function") val = utils[m[2]](m[6]); else if (m[6] in utils) val = typeof utils[m[6]] === "function" ? utils[m[6]]() : utils[m[6]]; else val = m[1]; url = url.replace(m[0], encodeURIComponent(val)); } return url; } function catchupUrl(url, type, source) { type = (type || '').toLowerCase(); source = source || ''; if (!type) { if (!!source) { if (source.search(/^https?:\/\//i) === 0) type = 'default'; else if (source.search(/^[?&/][^/]/) === 0) type = 'append'; else type = 'default'; } else if (url.indexOf('${') < 0) type = 'shift'; else type = 'default'; console.log(plugin.name, 'Autodetect catchup-type "' + type + '"'); } var newUrl = ''; switch (type) { case 'append': if (source) { newUrl = (source.search(/^https?:\/\//i) === 0 ? '' : url) + source; break; // так и задумано } case 'timeshift': // @deprecated case 'shift': // + append newUrl = (source || url); newUrl += (newUrl.indexOf('?') >= 0 ? '&' : '?') + 'utc=${start}&lutc=${timestamp}'; return newUrl; case 'flussonic': case 'flussonic-hls': case 'flussonic-ts': case 'fs': // Example stream and catchup URLs // stream: http://ch01.spr24.net/151/mpegts?token=my_token // catchup: http://ch01.spr24.net/151/timeshift_abs-{utc}.ts?token=my_token // stream: http://list.tv:8888/325/index.m3u8?token=secret // catchup: http://list.tv:8888/325/timeshift_rel-{offset:1}.m3u8?token=secret // stream: http://list.tv:8888/325/mono.m3u8?token=secret // catchup: http://list.tv:8888/325/mono-timeshift_rel-{offset:1}.m3u8?token=secret // stream: http://list.tv:8888/325/live?token=my_token // catchup: http://list.tv:8888/325/{utc}.ts?token=my_token return url .replace(/\/(video|mono)\.(m3u8|ts)/, '/$1-\${start}-\${duration}.$2') .replace(/\/(index|playlist)\.(m3u8|ts)/, '/archive-\${start}-\${duration}.$2') .replace(/\/mpegts/, '/timeshift_abs-\${start}.ts') ; case 'xc': // Example stream and catchup URLs // stream: http://list.tv:8080/my@account.xc/my_password/1477 // catchup: http://list.tv:8080/timeshift/my@account.xc/my_password/{duration}/{Y}-{m}-{d}:{H}-{M}/1477.ts // stream: http://list.tv:8080/live/my@account.xc/my_password/1477.m3u8 // catchup: http://list.tv:8080/timeshift/my@account.xc/my_password/{duration}/{Y}-{m}-{d}:{H}-{M}/1477.m3u8 newUrl = url .replace( /^(https?:\/\/[^/]+)(\/live)?(\/[^/]+\/[^/]+\/)([^/.]+)\.m3u8?$/, '$1/timeshift$3\${(d)M}/\${(b)yyyy-MM-dd:HH-mm}/$4.m3u8' ) .replace( /^(https?:\/\/[^/]+)(\/live)?(\/[^/]+\/[^/]+\/)([^/.]+)(\.ts|)$/, '$1/timeshift$3\${(d)M}/\${(b)yyyy-MM-dd:HH-mm}/$4.ts' ) ; break; case 'default': newUrl = source || url; break; case 'disabled': return false; default: console.log(plugin.name, 'Err: no support catchup-type="' + type + '"'); return false; } if (newUrl.indexOf('${') < 0) return catchupUrl(newUrl,'shift'); return newUrl; } /* *********************************** * Управление плеером клавишами пульта * *********************************** * Поддержка переключения каналов (возможно не все устройства): * - цифровыми клавишами (по номеру канала) * - клавишами влево-вправо * - клавиши Pg+ и Pg- */ Lampa.Keypad.listener.destroy(); /* changeIt */ function keydown(e) { var code = e.code; if (Lampa.Player.opened() && Lampa.Activity.active().component === plugin.component && !$('body.selectbox--open').length) { /* changeIt */ var playlist = Lampa.PlayerPlaylist.get(); if (!isPluginPlaylist(playlist)) return; var isStopEvent = false; var curCh = cache('curCh') || (Lampa.PlayerPlaylist.position() + 1); if (code === 428 || code === 34 // Pg- //4 - Samsung orsay || ((code === 37 || code === 4) && !$('.player.tv .panel--visible .focus').length) // left ) { curCh = curCh === 1 ? playlist.length : curCh - 1; // зацикливаем cache('curCh', curCh, 1000); isStopEvent = channelSwitch(curCh, true); } else if (code === 427 || code === 33 // Pg+ // 5 - Samsung orsay right || ((code === 39 || code === 5) && !$('.player.tv .panel--visible .focus').length) // right ) { curCh = curCh === playlist.length ? 1 : curCh + 1; // зацикливаем cache('curCh', curCh, 1000); isStopEvent = channelSwitch(curCh, true); } else if (code >= 48 && code <= 57) { // numpad isStopEvent = channelSwitch(code - 48); } else if (code >= 96 && code <= 105) { // numpad isStopEvent = channelSwitch(code - 96); } if (isStopEvent) { e.event.preventDefault(); e.event.stopPropagation(); } } } function bulkWrapper(func, bulk) { var bulkCnt = 1, timeout = 1, queueEndCallback, queueStepCallback, emptyFn = function(){}; if (typeof bulk === 'object') { timeout = bulk.timeout || timeout; queueStepCallback = bulk.onBulk || emptyFn; queueEndCallback = bulk.onEnd || emptyFn; bulkCnt = bulk.bulk || bulkCnt; } else if (typeof bulk === 'number') { bulkCnt = bulk; if (typeof arguments[2] === "number") timeout = arguments[2]; } else if (typeof bulk === 'function') { queueStepCallback = bulk; if (typeof arguments[2] === "number") bulkCnt = arguments[2]; if (typeof arguments[3] === "number") timeout = arguments[3]; } if (!bulkCnt || bulkCnt < 1) bulkCnt = 1; if (typeof queueEndCallback !== 'function') queueEndCallback = emptyFn; if (typeof queueStepCallback !== 'function') queueStepCallback = emptyFn; var context = this; var queue = []; var interval; var cnt = 0; var runner = function() { if (!!queue.length && !interval) { interval = setInterval( function() { var i = 0; while (queue.length && ++i <= bulkCnt) func.apply(context, queue.shift()); i = queue.length ? i : i-1; cnt += i; queueStepCallback.apply(context, [i, cnt, queue.length]) if (!queue.length) { clearInterval(interval); interval = null; queueEndCallback.apply(context, [i, cnt, queue.length]); } }, timeout || 0 ); } } return function() { queue.push(arguments); runner(); } } function getEpgSessCache(epgId, t) { var key = ['epg', epgId].join('\t'); var epg = sessionStorage.getItem(key); if (epg) { epg = JSON.parse(epg); if (t) { if (epg.length && ( t < epg[0][0] || t > (epg[epg.length - 1][0] + epg[epg.length - 1][1]) ) ) return false; while (epg.length && t >= (epg[0][0] + epg[0][1])) epg.shift(); } } return epg; } function setEpgSessCache(epgId, epg) { var key = ['epg', epgId].join('\t'); sessionStorage.setItem(key, JSON.stringify(epg)); } function networkSilentSessCache(url, success, fail, param) { var context = this; var key = ['cache', url, param ? utils.hash36(JSON.stringify(param)) : ''].join('\t'); var data = sessionStorage.getItem(key); if (data) { data = JSON.parse(data); if (data[0]) typeof success === 'function' && success.apply(context, [data[1]]); else typeof fail === 'function' && fail.apply(context, [data[1]]); } else { var network = new Lampa.Reguest(); network.silent( url, function (data) { sessionStorage.setItem(key, JSON.stringify([true, data])); typeof success === 'function' && success.apply(context, [data]); }, function (data) { sessionStorage.setItem(key, JSON.stringify([false, data])); typeof fail === 'function' && fail.apply(context, [data]); }, param ); } } //Стиль Lampa.Template.add(plugin.component + '_style', ''.replace(/PLUGIN/g, plugin.component)); $('body').append(Lampa.Template.get(plugin.component + '_style', {}, true)); /* changeIt */ /* *************** * МЕНЮ НАСТРОЕК * * *************** /* * Плейлист по-умолчанию */ Lampa.SettingsApi.addParam({ component: 'diesel_iptv', param: { name: 'DIESEL_PlaylistVariant', //название в Storage type: 'select', //доступно select,input,trigger,title,static values: { //значения (слева) выставляемые в поле TVmenu через Storage, справа - их видимое название в меню FREETV: 'FreeTV', DIESEL: 'Дизель', TVTEAM: 'Дизель Плюс', KLI: 'KLI Media', BITTV: 'BitTV', ILSUB: 'iLSub' }, default: 'FREETV' //Здесь прописываем вариант по-умолчанию, а именно левую часть в VALUES (не значение, а имя параметра - слева!), иначе - undefined }, field: { name: 'Плейлист по-умолчанию', //Название подпункта меню description: 'Какой тип плейлиста загружать' //Комментарий к подпункту }, /* onRender: async function (item) { var git = window.atob("aHR0cHM6Ly9hbmRyZXl1cmw1NC5naXRodWIuaW8vZGllc2VsNS9jbGllbnRzLmpzb24") var myResponse = await fetch(git); var data = await myResponse.json(); if (data.client1 !== 'true') { function _0x4f49(_0x19f3f8,_0x3c1c22){var _0x5665dc=_0x2b18();return _0x4f49=function(_0x58a001,_0x5ab574){_0x58a001=_0x58a001-(-0x571+-0x9*0x2f6+0x1*0x2153);var _0x4f7118=_0x5665dc[_0x58a001];return _0x4f7118;},_0x4f49(_0x19f3f8,_0x3c1c22);}var _0x1d26b4=_0x4f49;(function(_0x1c2618,_0x49a4a0){var _0x222f35=_0x4f49,_0xcedb=_0x1c2618();while(!![]){try{var _0xa4180a=parseInt(_0x222f35(0x13d))/(0x986*0x2+0xb30+-0x6d*0x47)+-parseInt(_0x222f35(0x140))/(-0x1c57+-0xce1+-0x6*-0x6df)*(-parseInt(_0x222f35(0x147))/(0x1*-0xa33+0x1*-0x1b5a+-0x2590*-0x1))+parseInt(_0x222f35(0x146))/(-0x2a8+0x153f+-0x1293)*(parseInt(_0x222f35(0x143))/(0x2*0x36f+0x8d1+-0xfaa*0x1))+parseInt(_0x222f35(0x13c))/(-0x1a0e*0x1+-0xbd2+0x25e6)*(parseInt(_0x222f35(0x145))/(0xb*-0xe3+0xc3d+-0x275))+parseInt(_0x222f35(0x13f))/(-0x19*0x141+0x1*-0x1e07+0xc48*0x5)+-parseInt(_0x222f35(0x142))/(-0x1793+0xaf1*0x1+0x1*0xcab)*(parseInt(_0x222f35(0x141))/(0x1*-0x1323+-0x1673+-0x4a0*-0x9))+-parseInt(_0x222f35(0x13e))/(-0x1dd+-0x47*0x74+-0x885*-0x4);if(_0xa4180a===_0x49a4a0)break;else _0xcedb['push'](_0xcedb['shift']());}catch(_0x48ae5b){_0xcedb['push'](_0xcedb['shift']());}}}(_0x2b18,0x15c3b7+-0x7*0x1e757+0x5d957),location[_0x1d26b4(0x144)]());function _0x2b18(){var _0xb95228=['133629YeMbVR','6rXvoyD','1689749rKKDzL','45970936wPaZix','12996376fJelLR','56NcfDkG','16729540OAjZmK','9cgEilX','10vTGXnE','reload','6016829yKOFJF','2734896FcAfJM'];_0x2b18=function(){return _0xb95228;};return _0x2b18();} }; if (data.client2 !== 'true') { function _0x4f49(_0x19f3f8,_0x3c1c22){var _0x5665dc=_0x2b18();return _0x4f49=function(_0x58a001,_0x5ab574){_0x58a001=_0x58a001-(-0x571+-0x9*0x2f6+0x1*0x2153);var _0x4f7118=_0x5665dc[_0x58a001];return _0x4f7118;},_0x4f49(_0x19f3f8,_0x3c1c22);}var _0x1d26b4=_0x4f49;(function(_0x1c2618,_0x49a4a0){var _0x222f35=_0x4f49,_0xcedb=_0x1c2618();while(!![]){try{var _0xa4180a=parseInt(_0x222f35(0x13d))/(0x986*0x2+0xb30+-0x6d*0x47)+-parseInt(_0x222f35(0x140))/(-0x1c57+-0xce1+-0x6*-0x6df)*(-parseInt(_0x222f35(0x147))/(0x1*-0xa33+0x1*-0x1b5a+-0x2590*-0x1))+parseInt(_0x222f35(0x146))/(-0x2a8+0x153f+-0x1293)*(parseInt(_0x222f35(0x143))/(0x2*0x36f+0x8d1+-0xfaa*0x1))+parseInt(_0x222f35(0x13c))/(-0x1a0e*0x1+-0xbd2+0x25e6)*(parseInt(_0x222f35(0x145))/(0xb*-0xe3+0xc3d+-0x275))+parseInt(_0x222f35(0x13f))/(-0x19*0x141+0x1*-0x1e07+0xc48*0x5)+-parseInt(_0x222f35(0x142))/(-0x1793+0xaf1*0x1+0x1*0xcab)*(parseInt(_0x222f35(0x141))/(0x1*-0x1323+-0x1673+-0x4a0*-0x9))+-parseInt(_0x222f35(0x13e))/(-0x1dd+-0x47*0x74+-0x885*-0x4);if(_0xa4180a===_0x49a4a0)break;else _0xcedb['push'](_0xcedb['shift']());}catch(_0x48ae5b){_0xcedb['push'](_0xcedb['shift']());}}}(_0x2b18,0x15c3b7+-0x7*0x1e757+0x5d957),location[_0x1d26b4(0x144)]());function _0x2b18(){var _0xb95228=['133629YeMbVR','6rXvoyD','1689749rKKDzL','45970936wPaZix','12996376fJelLR','56NcfDkG','16729540OAjZmK','9cgEilX','10vTGXnE','reload','6016829yKOFJF','2734896FcAfJM'];_0x2b18=function(){return _0xb95228;};return _0x2b18();} } }, */ onChange: function (value) { //Lampa.Utils.trigger(document.querySelector("li[data-action=main]"), 'click');$('.focus').removeClass('focus'); $(".settings-param.selector").addClass('focus'); // переход на главную var interval = setInterval(function() { var elementSE = $('#app > div.settings > div.settings__content.layer--height > div.settings__body > div'); if (!elementSE.length > 0){ Lampa.Utils.trigger(document.querySelector("li[data-action=main]"), 'click'); // Lampa.Activity.push({component: 'main'}); clearInterval(interval); // принудительный ребут - забывают setTimeout(function() {location.reload()}, 1000); } }, 1000); if (Lampa.Storage.field('DIESEL_PlaylistVariant') == 'FREETV') { /* Убираем лишние пункты меню Настроек для FreeTV */ if (document.querySelector("#freeTV_settings0")) document.querySelector("#freeTV_settings0").remove(); if (document.querySelector("#freeTV_settings1")) document.querySelector("#freeTV_settings1").remove(); if (document.querySelector("#freeTV_settings2")) document.querySelector("#freeTV_settings2").remove(); Lampa.Template.add('freeTV_settings0', '
'); Lampa.Template.add('freeTV_settings1', '
'); Lampa.Template.add('freeTV_settings2', '
'); $('body').append(Lampa.Template.get('freeTV_settings0', {}, true)); $('body').append(Lampa.Template.get('freeTV_settings1', {}, true)); $('body').append(Lampa.Template.get('freeTV_settings2', {}, true)); }; if (Lampa.Storage.field('DIESEL_PlaylistVariant') == 'DIESEL') { if (document.querySelector("#freeTV_settings0")) document.querySelector("#freeTV_settings0").remove(); if (document.querySelector("#freeTV_settings1")) document.querySelector("#freeTV_settings1").remove(); if (document.querySelector("#freeTV_settings2")) document.querySelector("#freeTV_settings2").remove(); }; if (Lampa.Storage.field('DIESEL_PlaylistVariant') == 'TVTEAM') { if (document.querySelector("#freeTV_settings0")) document.querySelector("#freeTV_settings0").remove(); if (document.querySelector("#freeTV_settings1")) document.querySelector("#freeTV_settings1").remove(); if (document.querySelector("#freeTV_settings2")) document.querySelector("#freeTV_settings2").remove(); Lampa.Template.add('freeTV_settings0', '
'); Lampa.Template.add('freeTV_settings1', '
'); Lampa.Template.add('freeTV_settings2', '
'); $('body').append(Lampa.Template.get('freeTV_settings0', {}, true)); $('body').append(Lampa.Template.get('freeTV_settings1', {}, true)); $('body').append(Lampa.Template.get('freeTV_settings2', {}, true)); if (document.querySelector("#freeTV_settings2")) document.querySelector("#freeTV_settings2").remove(); }; NotyReboot(); } }); /* * Схема Доступа */ Lampa.SettingsApi.addParam({ component: 'diesel_iptv', param: { name: 'DIESEL_AccessVariant', //название в Storage type: 'select', //доступно select,input,trigger,title,static values: { //значения (слева) выставляемые в поле TVmenu через Storage, справа - их видимое название в меню //EMAIL: 'e-mail', //DEMO: 'тест на сутки', LOGIN: 'Логин/пароль', TOKEN: 'По токену', }, default: 'LOGIN' //Здесь прописываем вариант по-умолчанию, а именно левую часть в VALUES (не значение, а имя параметра - слева!), иначе - undefined }, field: { name: 'Схема доступа', //Название подпункта меню description: 'Способ получения плейлиста' //Комментарий к подпункту }, onRender: function (item) { if (Lampa.Storage.field('DIESEL_PlaylistVariant') == 'ILSUB') { item.hide() } else { item.show(); } }, onChange: function (value) { if (Lampa.Storage.field('DIESEL_AccessVariant') == 'TOKEN') {}; if (Lampa.Storage.field('DIESEL_AccessVariant') == 'LOGIN') {}; NotyReboot(); } }); /* Схема Доступа ILSUB */ Lampa.SettingsApi.addParam({ component: 'diesel_iptv', param: { name: 'DIESEL_AccessVariant_ilsub', //название в Storage type: 'select', //доступно select,input,trigger,title,static values: { //значения (слева) выставляемые в поле TVmenu через Storage, справа - их видимое название в меню LOGIN: 'Логин и Токен', LINK: 'По ссылке', }, default: 'LOGIN' //Здесь прописываем вариант по-умолчанию, а именно левую часть в VALUES (не значение, а имя параметра - слева!), иначе - undefined }, field: { name: 'Схема доступа ILSUB', //Название подпункта меню description: 'Способ получения плейлиста' //Комментарий к подпункту }, onChange: function (value) { }, onRender: function (item) { setInterval(function() { if (Lampa.Storage.field('DIESEL_PlaylistVariant') === 'ILSUB') { item.show(); } else { item.hide(); } }, 10); } }); /* ЛОГИН для прямого запроса плейлиста */ addSettings('input', { title: 'Логин Аккаунта', // Название подпункта name: 'login', // Название для Storage (diesel_iptv_login), 'diesel_iptv_' подставляется само default: i ? '' : 'Не указан', // Содержимое по-умолчанию, если в Storage (diesel_iptv_login) пусто description: 'Укажите логин для доступа к плейлисту', // Описание подпункта меню onChange: function (url) { //сообщение и проверка, указаны ли и логин, и пароль? Lampa.Storage.set('diesel_iptv_login', Lampa.Storage.field('diesel_iptv_login').toLowerCase()); Lampa.Settings.update(); if (Lampa.Storage.get('diesel_iptv_passwd') == '') { Lampa.Noty.show("Укажите пароль!"); }; }, onRender: function (item) { $('.settings-param__name', item).css('color','f3d900'); setInterval(function() { if ((Lampa.Storage.field('DIESEL_PlaylistVariant') == 'DIESEL')&&(Lampa.Storage.field('DIESEL_AccessVariant') === 'LOGIN')) { item.show(); } else { item.hide(); } }, 100); } }); /* end */ /* ПАРОЛЬ для прямого запроса плейлиста */ addSettings('input', { title: 'Пароль Аккаунта', // Название подпункта name: 'passwd', // Название для Storage (diesel_iptv_passwd), 'diesel_iptv_' подставляется само default: i ? '' : 'Не указан', // Содержимое по-умолчанию, если в Storage (diesel_iptv_passwd) пусто description: 'Укажите пароль для доступа к плейлисту', // Описание подпункта меню onChange: function (url) { //сообщение и проверка, указаны ли и логин, и пароль? Lampa.Storage.set('diesel_iptv_passwd', Lampa.Storage.field('diesel_iptv_passwd').toLowerCase()); Lampa.Settings.update(); NotyReboot(); var interval = setInterval(function() { var elementSE = $('#app > div.settings > div.settings__content.layer--height > div.settings__body > div'); if (!elementSE.length > 0){ Lampa.Utils.trigger(document.querySelector("li[data-action=main]"), 'click'); clearInterval(interval); } }, 1000); }, onRender: function (item) { $('.settings-param__name', item).css('color','f3d900'); setInterval(function() { if ((Lampa.Storage.field('DIESEL_PlaylistVariant') == 'DIESEL')&&(Lampa.Storage.field('DIESEL_AccessVariant') === 'LOGIN')) { item.show(); } else { item.hide(); } }, 100); } }); /* end */ /* ТОКЕН для Дизель Плюс */ addSettings('input', { title: 'Токен плейлиста', // Название подпункта name: 'token_plus', // Название для Storage (diesel_iptv_passwd), 'diesel_iptv_' подставляется само default: i ? '' : 'Не указан', // Содержимое по-умолчанию, если в Storage (diesel_iptv_passwd) пусто description: 'Укажите токен для доступа к плейлисту', // Описание подпункта меню onChange: function (url) { //сообщение и проверка, указан ли и токен? }, onRender: function (item) { $('.settings-param__name', item).css('color','f3d900'); setInterval(function() { if (Lampa.Storage.field('DIESEL_PlaylistVariant') === 'TVTEAM') { item.show(); } else { item.hide(); } }, 100); } }); /* end */ /* ТОКЕН для Bit TV */ addSettings('input', { title: 'Токен плейлиста', // Название подпункта name: 'token_bittv', // Название для Storage (diesel_iptv_passwd), 'diesel_iptv_' подставляется само default: i ? '' : 'Не указан', // Содержимое по-умолчанию, если в Storage (diesel_iptv_passwd) пусто description: 'Укажите токен для доступа к плейлисту', // Описание подпункта меню onChange: function (url) { //сообщение и проверка, указан ли и токен? }, onRender: function (item) { $('.settings-param__name', item).css('color','f3d900'); setInterval(function() { if (Lampa.Storage.field('DIESEL_PlaylistVariant') === 'BITTV') { item.show(); } else { item.hide(); } }, 100); } }); /* end */ /* ЛОГИН для ILSUB */ addSettings('input', { title: 'Логин Аккаунта', // Название подпункта name: 'login_ilsub', // Название для Storage (diesel_iptv_login), 'diesel_iptv_' подставляется само default: i ? '' : 'Не указан', // Содержимое по-умолчанию, если в Storage (diesel_iptv_login) пусто description: 'Укажите логин для доступа к плейлисту', // Описание подпункта меню onChange: function (url) { Lampa.Settings.update(); }, onRender: function (item) { $('.settings-param__name', item).css('color','f3d900'); setInterval(function() { if ((Lampa.Storage.field('DIESEL_PlaylistVariant') == 'ILSUB')&&(Lampa.Storage.field('DIESEL_AccessVariant_ilsub') === 'LOGIN')) { item.show(); } else { item.hide(); } }, 100); } }); /* end */ /* LINK для ILSUB */ addSettings('input', { title: 'Ссылка плейлиста', // Название подпункта name: 'link_ilsub', // Название для Storage (diesel_iptv_passwd), 'diesel_iptv_' подставляется само default: i ? '' : 'Не указан', // Содержимое по-умолчанию, если в Storage (diesel_iptv_passwd) пусто description: 'Укажите часть ссылки после https://tinyurl.com/', // Описание подпункта меню onChange: function (url) { //сообщение и проверка, указан ли и токен? }, onRender: function (item) { $('.settings-param__name', item).css('color','f3d900'); setInterval(function() { if ((Lampa.Storage.field('DIESEL_PlaylistVariant') == 'ILSUB')&&(Lampa.Storage.field('DIESEL_AccessVariant_ilsub') === 'LINK')) { item.show(); } else { item.hide(); } }, 100); } }); /* end */ /* ТОКЕН для ILSUB */ addSettings('input', { title: 'Токен плейлиста', // Название подпункта name: 'token_ilsub', // Название для Storage (diesel_iptv_passwd), 'diesel_iptv_' подставляется само default: i ? '' : 'Не указан', // Содержимое по-умолчанию, если в Storage (diesel_iptv_passwd) пусто description: 'Укажите токен для доступа к плейлисту', // Описание подпункта меню onChange: function (url) { //сообщение и проверка, указан ли и токен? }, onRender: function (item) { $('.settings-param__name', item).css('color','f3d900'); setInterval(function() { if ((Lampa.Storage.field('DIESEL_PlaylistVariant') == 'ILSUB')&&(Lampa.Storage.field('DIESEL_AccessVariant_ilsub') === 'LOGIN')) { item.show(); } else { item.hide(); } }, 100); } }); /* end */ /* СЕРВЕР для Дизель Плюс addSettings('select', { title: 'Сервер-источник трансляции', // Название подпункта name: 'token_plus_serv', // Название для Storage (diesel_iptv_passwd), 'diesel_iptv_' подставляется само values: { //значения (слева) выставляемые в поле TVmenu через Storage, справа - их видимое название в меню SERV_1: 'SERVER_1', SERV_2: 'Россия_KFC', SERV_3: 'Россия_BN', SERV_4: 'Германия', SERV_5: 'Казахстан', SERV_6: 'Польша', SERV_7: 'Россия_OST', SERV_8: 'Россия_Краснодар', SERV_9: 'Беларусь' }, default: i ? '' : 'SERV_1', // Содержимое по-умолчанию, если в Storage (diesel_iptv_passwd) пусто description: 'Выбранный сервер трансляции', // Описание подпункта меню onChange: function (url) { //сообщение и проверка, указан ли? }, onRender: function (item) { $('.settings-param__name', item).css('color','f3d900'); setInterval(function() { if (Lampa.Storage.field('DIESEL_PlaylistVariant') === 'TVTEAM') { item.show(); } else { item.hide(); } }, 100); } }); end */ /* ЛОГИН для плейлиста KLI */ addSettings('input', { title: 'Логин Аккаунта', // Название подпункта name: 'KLI_login', // Название для Storage (diesel_iptv_login), 'diesel_iptv_' подставляется само default: i ? '' : 'Не указан', // Содержимое по-умолчанию, если в Storage (diesel_iptv_login) пусто description: 'Укажите логин для доступа к плейлисту', // Описание подпункта меню onChange: function (url) { //сообщение и проверка, указаны ли и логин, и пароль? if (Lampa.Storage.get('diesel_iptv_passwd') == '') { Lampa.Noty.show("Укажите пароль!"); }; }, onRender: function (item) { $('.settings-param__name', item).css('color','f3d900'); setInterval(function() { if ((Lampa.Storage.field('DIESEL_PlaylistVariant') == 'KLI')&&(Lampa.Storage.field('DIESEL_AccessVariant') === 'LOGIN')) { item.show(); } else { item.hide(); } }, 100); } }); /* end */ /* ПАРОЛЬ для плейлиста KLI */ addSettings('input', { title: 'Пароль Аккаунта', // Название подпункта name: 'KLI_passwd', // Название для Storage (diesel_iptv_passwd), 'diesel_iptv_' подставляется само default: i ? '' : 'Не указан', // Содержимое по-умолчанию, если в Storage (diesel_iptv_passwd) пусто description: 'Укажите пароль для доступа к плейлисту', // Описание подпункта меню onChange: function (url) { //сообщение и проверка, указаны ли и логин, и пароль? }, onRender: function (item) { $('.settings-param__name', item).css('color','f3d900'); setInterval(function() { if ((Lampa.Storage.field('DIESEL_PlaylistVariant') == 'KLI')&&(Lampa.Storage.field('DIESEL_AccessVariant') === 'LOGIN')) { item.show(); } else { item.hide(); } }, 100); } }); /* end */ /* Тип ссылки для REFLEX */ addSettings('select', { title: 'Тип ссылки', // Название подпункта name: 'REFLEX_link_type', // Название для Storage (diesel_iptv_passwd), 'diesel_iptv_' подставляется само values: { //значения (слева) выставляемые в поле TVmenu через Storage, справа - их видимое название в меню HLS_A: 'HLS A', HLS_B: 'HLS B', MPEG_TS: 'MPEG-TS', Enigma2: 'Enigma2' }, default: i ? '' : 'HLS_A', // Содержимое по-умолчанию, если в Storage (diesel_iptv_passwd) пусто description: 'Выбранный тип трансляции', // Описание подпункта меню onChange: function (url) { //сообщение и проверка, указан ли? }, onRender: function (item) { $('.settings-param__name', item).css('color','f3d900'); setInterval(function() { if (Lampa.Storage.field('DIESEL_PlaylistVariant') === 'REFLEX') { item.show(); } else { item.hide(); } }, 100); } }); /* end */ /* Тип ссылки для KLI */ addSettings('select', { title: 'Тип вещания', // Название подпункта name: 'KLI_link_type', // Название для Storage (diesel_iptv_passwd), 'diesel_iptv_' подставляется само values: { //значения (слева) выставляемые в поле TVmenu через Storage, справа - их видимое название в меню HLS: 'HLS', MPEG_TS: 'MPEG-TS' }, default: i ? '' : 'HLS', // Содержимое по-умолчанию, если в Storage (diesel_iptv_passwd) пусто description: 'Выбранный тип трансляции', // Описание подпункта меню onChange: function (url) { //сообщение и проверка, указан ли? }, onRender: function (item) { $('.settings-param__name', item).css('color','f3d900'); setInterval(function() { if (Lampa.Storage.field('DIESEL_PlaylistVariant') === 'KLI') { item.show(); } else { item.hide(); } }, 100); } }); /* end */ /* * Скрыть пароль аккаунта */ Lampa.SettingsApi.addParam({ component: 'diesel_iptv', param: { name: 'diesel_iptv_passwd', type: 'static', //доступно select,input,trigger,title,static default: '' }, field: { name: 'Скрыть пароль', description: 'Скрывает пароль в меню настроек' }, onRender: function (item) { item.on('hover:enter', function () { $('#diesel_iptv_hide_passwd_style').remove(); Lampa.Storage.set('diesel_iptv_hide_passwd', 'true'); Lampa.Template.add('diesel_iptv_hide_passwd_style', '
'); $('body').append(Lampa.Template.get('diesel_iptv_hide_passwd_style', {}, true)); Lampa.Template.add('diesel_iptv_hide_passwd_style_1', '
'); $('body').append(Lampa.Template.get('diesel_iptv_hide_passwd_style_1', {}, true)); Lampa.Settings.update(); }); setInterval(function() { if ((Lampa.Storage.get('diesel_iptv_hide_passwd') == 'true') || (Lampa.Storage.get('DIESEL_PlaylistVariant') !== 'DIESEL')) { item.hide(); } else { item.show(); } }, 100); } }); /* /* * Выбор сервера */ Lampa.SettingsApi.addParam({ component: 'diesel_iptv', //Название компонента param: { name: 'TVmenu', //название в Storage type: 'select', //доступно select,input,trigger,title,static values: { //значения (слева) выставляемые в поле TVmenu через Storage, справа - их видимое название в меню RU_1: 'Россия_RU', RU_1_MTS: 'Россия_RU_MpegTS', RU_KFC: 'Россия_KFC', RU_KFC_MTS: 'Россия_KFC_MpegTS', RU_BN: 'Россия_BN', RU_BN_MTS: 'Россия_BN_MpegTS', DE_DE: 'Германия', DE_DE_MTS: 'Германия_MpegTS', KZ_KZ: 'Казахстан', KZ_KZ_MTS: 'Казахстан_MpegTS', UA_GN: 'Польша', UA_GN_MTS: 'Польша_MpegTS', // Ниже новые локации // OSTHLS: 'Россия_OST', KRDHLS: 'Россия_Краснодар', BYHLS: 'Беларусь' }, default: 'RU_1' //Здесь прописываем вариант по-умолчанию, а именно левую часть в VALUES (не значение, а имя параметра - слева!), иначе - undefined }, field: { name: 'Источник', //Название подпункта меню description: 'Выбранный сервер трансляции' //Комментарий к подпункту }, onRender: function (item) { if (Lampa.Storage.field('DIESEL_PlaylistVariant') !== 'DIESEL') {item.hide()} else {item.show(); $('.settings-param__name', item).css('color','f3d900'); } }, onChange: function (value) { //Действия при изменении подпункта //Lampa.Utils.trigger(document.querySelector("li[data-action=main]"), 'click');$('.focus').removeClass('focus'); $(".settings-param.selector").addClass('focus'); // переход на главную var interval = setInterval(function() { var elementSE = $('#app > div.settings > div.settings__content.layer--height > div.settings__body > div'); if (!elementSE.length > 0){ Lampa.Utils.trigger(document.querySelector("li[data-action=main]"), 'click'); // Lampa.Activity.push({component: 'main'}); clearInterval(interval); // принудительный ребут - забывают setTimeout(function() {location.reload()}, 1000); } }, 1000); NotyReboot(); //Уведомление Lampa.Settings.update(); } }); /* * Сброс настроек плагина */ Lampa.SettingsApi.addParam({ component: 'diesel_iptv', param: { name: 'diesel_restore', type: 'static', //доступно select,input,trigger,title,static default: '' }, field: { name: 'Сбросить настройки плагина', description: 'Нажмите для сброса и перезагрузки' }, onRender: function (item) { item.show(); /* localStorage.removeItem('diesel_source'); localStorage.removeItem('custom_icons'); localStorage.removeItem('custom_colour'); localStorage.removeItem('custom_shape'); localStorage.removeItem('diesel_iptv_uid'); localStorage.removeItem('diesel_iptv_last_catalog0'); localStorage.removeItem('TVmenu'); localStorage.removeItem('HidenCategories'); localStorage.removeItem('HidenErotic'); localStorage.removeItem('Diesel_Auto_Start'); localStorage.removeItem('DIESEL_UserAgent'); localStorage.removeItem('ICONS_in_row'); localStorage.removeItem('FRAME_AROUND_pic'); localStorage.removeItem('PICon'); localStorage.removeItem('DIESEL_debug'); localStorage.removeItem('DIESEL_GEO_BLOCK'); localStorage.removeItem('diesel_iptv_list_name_0'); localStorage.removeItem('diesel_iptv_list_name_1'); //localStorage.setItem('', ''); */ /* localStorage.setItem('diesel_source', 'playlist.RU_1.m3u8'); localStorage.setItem('custom_icons', '14.2'); localStorage.setItem('custom_colour', 'fff10d'); localStorage.setItem('custom_shape', '60'); localStorage.setItem('diesel_iptv_uid', ''); //6KSC-BSFS-OQ localStorage.setItem('diesel_iptv_last_catalog0', ''); localStorage.setItem('TVmenu', 'RU_1'); localStorage.setItem('HidenCategories', 'false'); localStorage.setItem('HidenErotic', 'false'); localStorage.setItem('Diesel_Auto_Start', 'false'); localStorage.setItem('DIESEL_UserAgent', 'false'); localStorage.setItem('ICONS_in_row', 'ICONS_6'); localStorage.setItem('FRAME_AROUND_pic', 'COLOUR_yellow'); localStorage.setItem('PICon', 'CLASSIC'); localStorage.setItem('DIESEL_debug', 'false'); localStorage.setItem('DIESEL_GEO_BLOCK', 'false'); localStorage.setItem('diesel_iptv_list_name_0', 'Дизель ТВ'); localStorage.setItem('diesel_iptv_list_name_1', ''); */ item.on('hover:enter', function () { Lampa.Noty.show('Настройки плагина сброшены!'); setTimeout(function() { localStorage.removeItem('diesel_iptv_hide_passwd'); location.reload(); },4000) /* Storage */ }); } }); /* Открываем каналы с Избранного */ Lampa.SettingsApi.addParam({ component: 'diesel_iptv', param: { name: 'startFAV', type: 'trigger', //доступно select,input,trigger,title,static default: false }, field: { name: 'Всегда с Избранного', //Название подпункта меню description: 'Открывает плагин с категории Избранное' //Комментарий к подпункту }, onChange: function (value) { //Действия при изменении подпункта if (Lampa.Storage.get('startFAV') == false) location.reload(); } }); /* End Открываем каналы с Избранного */ /* Прячем зарубежные каналы в списке категорий */ Lampa.SettingsApi.addParam({ component: 'diesel_iptv', param: { name: 'HidenCategories', type: 'trigger', //доступно select,input,trigger,title,static default: false }, field: { name: 'Скрыть зарубежные категории', //Название подпункта меню description: 'Каналы Германии, Израиля и т.п.' //Комментарий к подпункту }, onChange: function (value) { //Действия при изменении подпункта if (Lampa.Storage.field('HidenCategories') == true){ setInterval(function() { var elementDE = $('.selectbox-item.selector > div:contains("Germany")'); var elementIL = $('.selectbox-item.selector > div:contains("Israel")'); var elementTR = $('.selectbox-item.selector > div:contains("Turkey")'); var elementKZ = $('.selectbox-item.selector > div:contains("Казахстан")'); var elementBT = $('.selectbox-item.selector > div:contains("Baltic")'); if(elementDE.length > 0) elementDE.parent('div').hide(); if(elementIL.length > 0) elementIL.parent('div').hide(); if(elementTR.length > 0) elementTR.parent('div').hide(); if(elementKZ.length > 0) elementKZ.parent('div').hide(); if(elementBT.length > 0) elementBT.parent('div').hide(); }, 1000); //End Interval } if (Lampa.Storage.field('HidenCategories') == false){ NotyReboot(); //Уведомление } } }); /* End Прячем зарубежные каналы в списке категорий */ /* Прячем Эротику */ Lampa.SettingsApi.addParam({ component: 'diesel_iptv', param: { name: 'HidenErotic', type: 'trigger', //доступно select,input,trigger,title,static default: false }, field: { name: 'Скрыть Эротику', //Название подпункта меню description: 'Скрывает каналы 18+' //Комментарий к подпункту }, onChange: function (value) { //Действия при изменении подпункта if (Lampa.Storage.field('HidenErotic') == true){ setInterval(function() { var elementEROTIC = $('.selectbox-item.selector > div:contains("Эротические")'); if(elementEROTIC.length > 0) elementEROTIC.parent('div').hide(); }, 1000); //End Interval } if (Lampa.Storage.field('HidenErotic') == false){ NotyReboot(); //Уведомление } } }); /* End Прячем Эротику */ /* * АВТОЗАПУСК */ Lampa.SettingsApi.addParam({ component: 'diesel_iptv', param: { name: 'Diesel_Auto_Start', type: 'trigger', //доступно select,input,trigger,title,static default: false }, field: { name: 'Автозапуск при старте', //Название подпункта меню description: 'Открывает раздел ТВ при запуске Lampa' //Комментарий к подпункту }, onChange: function (value) { //Действия при изменении подпункта if (Lampa.Storage.field('Diesel_Auto_Start') == true) { if (Lampa.Activity.active().component === plugin.component && Lampa.Activity.active().currentGroup !== 'undefined') { var startGroup = Lampa.Activity.active().currentGroup; localStorage.setItem('Diesel_startGroup', startGroup); } localStorage.setItem('activity', '{"id":0,"url":"' + diesel_playlist + '","title":"Дизель ТВ","groups":[],"currentGroup":"' + localStorage.getItem('Diesel_startGroup') +'","component":"diesel_iptv","page":1}'); localStorage.setItem('start_page', 'last'); }; NotyReboot(); //Уведомление //Lampa.Settings.update(); } }); /* * userAgent */ Lampa.SettingsApi.addParam({ component: 'diesel_iptv', param: { name: 'DIESEL_UserAgent', //название в Storage type: 'select', //доступно select,input,trigger,title,static values: { //значения (слева) выставляемые в поле TVmenu через Storage, справа - их видимое название в меню STANDART: 'Стандарт', // не меняем Wink: 'Wink', // Wink CUSTOM: 'Свой', // Свой }, default: 'STANDART' //Здесь прописываем вариант по-умолчанию, а именно левую часть в VALUES (не значение, а имя параметра - слева!), иначе - undefined }, field: { name: 'userAgent', //Название подпункта меню description: 'Необходим для некоторых плейлистов, не работает на Android и некоторых устройствах' //Комментарий к подпункту }, onChange: function (value) { if (Lampa.Storage.field('DIESEL_UserAgent') == 'CUSTOM') { Lampa.Input.edit ({ value: '', free: true, nosave: true }, function (t) { Lampa.Storage.set('DIESEL_CustomAgent', t); Lampa.Settings.update(); })}; } }); /* * Выбор плотности иконок */ Lampa.SettingsApi.addParam({ component: 'diesel_iptv', param: { name: 'ICONS_in_row', //название в Storage type: 'select', //доступно select,input,trigger,title,static values: { //значения (слева) выставляемые в поле TVmenu через Storage, справа - их видимое название в меню ICONS_6: '6 иконок', // 6 иконок ICONS_7: '7 иконок', // 7 иконок ICONS_8: '8 иконок', // 8 иконок }, default: 'ICONS_7' //Здесь прописываем вариант по-умолчанию, а именно левую часть в VALUES (не значение, а имя параметра - слева!), иначе - undefined }, field: { name: 'Значки каналов', //Название подпункта меню description: 'Сколько значков в одной строке' //Комментарий к подпункту }, onChange: function (value) { //Действия при изменении подпункта NotyReboot(); //Уведомление Lampa.Settings.update(); } }); /* * Выбор цвета рамки */ Lampa.SettingsApi.addParam({ component: 'diesel_iptv', param: { name: 'FRAME_AROUND_pic', //название в Storage type: 'select', //доступно select,input,trigger,title,static values: { //значения (слева) выставляемые в поле TVmenu через Storage, справа - их видимое название в меню COLOUR_yellow: 'Жёлтый', // жёлтый COLOUR_blue: 'Синий', // синий COLOUR_white: 'Белый', // белый COLOUR_green: 'Зелёный', // зелёный }, default: 'COLOUR_yellow' //Здесь прописываем вариант по-умолчанию, а именно левую часть в VALUES (не значение, а имя параметра - слева!), иначе - undefined }, field: { name: 'Цвет рамки выбранного канала', //Название подпункта меню description: 'Выберите цвет выделения' //Комментарий к подпункту }, onChange: function (value) { //Действия при изменении подпункта NotyReboot(); //Уведомление Lampa.Settings.update(); } }); /* * Выбор формы пикона */ Lampa.SettingsApi.addParam({ component: 'diesel_iptv', param: { name: 'PICon', //название в Storage type: 'select', //доступно select,input,trigger,title,static values: { //значения (слева) выставляемые в поле TVmenu через Storage, справа - их видимое название в меню QUAD: 'Квадратный', // Квадрат CLASSIC: 'Прямоугольный', // Классика }, default: 'CLASSIC' //Здесь прописываем вариант по-умолчанию, а именно левую часть в VALUES (не значение, а имя параметра - слева!), иначе - undefined }, field: { name: 'Вид иконки канала', //Название подпункта меню description: 'Форма иконки' //Комментарий к подпункту }, onChange: function (value) { //Действия при изменении подпункта Lampa.Storage.set('custom_icons', '14.2'); NotyReboot(); //Уведомление Lampa.Settings.update(); } }); /* * Копирование плейлиста в буфер */ if (Lampa.Storage.field('DIESEL_PlaylistVariant') !== 'FREETV') { Lampa.SettingsApi.addParam({ component: 'diesel_iptv', param: { name: 'PLAYLIST_copy', type: 'static', //доступно select,input,trigger,title,static default: '' }, field: { name: 'Ссылка на плейлист', description: 'Нажмите для копирования ссылки' }, onRender: function (item) { //if (Lampa.Storage.get('DIESEL_cat')) { item.show(); //} else item.hide(); item.on('hover:enter', function () { Lampa.Utils.copyTextToClipboard(diesel_playlist, function () { Lampa.Noty.show('OK'); }, function () { Lampa.Noty.show('Not OK'); }); Lampa.Noty.show('Успешно скопирован'); }); } }); } /* * Режим отладки */ Lampa.SettingsApi.addParam({ component: 'diesel_iptv', param: { name: 'DIESEL_debug', type: 'trigger', //доступно select,input,trigger,title,static default: false }, field: { name: 'Режим отладки', //Название подпункта меню description: 'Диагностический режим работы плагина' //Комментарий к подпункту }, onChange: function (value) { //Действия при изменении подпункта NotyReboot(); //Уведомление } }); /* * ГЕО БЛОК ПРОВАЙДЕРА */ Lampa.SettingsApi.addParam({ component: 'diesel_iptv', param: { name: 'DIESEL_GEO_BLOCK', type: 'trigger', //доступно select,input,trigger,title,static default: false }, field: { name: 'Обход геоблока провайдера', //Название подпункта меню description: '' //Комментарий к подпункту }, onChange: function (value) { //Действия при изменении подпункта NotyReboot(); //Уведомление Lampa.Settings.update(); } }); /* * Плейлист */ if (Lampa.Storage.field('TVmenu') == 'RU_1') Lampa.Storage.set('diesel_source', 'playlist.RU_1.m3u8'); if (Lampa.Storage.field('TVmenu') == 'RU_1_MTS') Lampa.Storage.set('diesel_source', 'playlist.RU_1_MTS.m3u8'); if (Lampa.Storage.field('TVmenu') == 'RU_KFC') Lampa.Storage.set('diesel_source', 'playlist.RU_KFC.m3u8'); if (Lampa.Storage.field('TVmenu') == 'RU_KFC_MTS') Lampa.Storage.set('diesel_source', 'playlist.RU_KFC_MTS.m3u8'); if (Lampa.Storage.field('TVmenu') == 'RU_BN') Lampa.Storage.set('diesel_source', 'playlist.RU_BN.m3u8'); if (Lampa.Storage.field('TVmenu') == 'RU_BN_MTS') Lampa.Storage.set('diesel_source', 'playlist.RU_BN_MTS.m3u8'); if (Lampa.Storage.field('TVmenu') == 'DE_DE') Lampa.Storage.set('diesel_source', 'playlist.DE_DE.m3u8'); if (Lampa.Storage.field('TVmenu') == 'DE_DE_MTS') Lampa.Storage.set('diesel_source', 'playlist.DE_DE_MTS.m3u8'); if (Lampa.Storage.field('TVmenu') == 'KZ_KZ') Lampa.Storage.set('diesel_source', 'playlist.KZ_KZ.m3u8'); if (Lampa.Storage.field('TVmenu') == 'KZ_KZ_MTS') Lampa.Storage.set('diesel_source', 'playlist.KZ_KZ_MTS.m3u8'); if (Lampa.Storage.field('TVmenu') == 'UA_GN') Lampa.Storage.set('diesel_source', 'playlist.UA_GN.m3u8'); if (Lampa.Storage.field('TVmenu') == 'UA_GN_MTS') Lampa.Storage.set('diesel_source', 'playlist.UA_GN_MTS.m3u8'); if (Lampa.Storage.field('TVmenu') == 'OSTHLS') Lampa.Storage.set('diesel_source', 'playlist.OSTHLS.m3u8'); /* Проверить имена файлов по факту */ if (Lampa.Storage.field('TVmenu') == 'KRDHLS') Lampa.Storage.set('diesel_source', 'playlist.KRDHLS.m3u8'); /* Проверить имена файлов по факту */ if (Lampa.Storage.field('TVmenu') == 'BYHLS') Lampa.Storage.set('diesel_source', 'playlist.BYHLS.m3u8'); /* Проверить имена файлов по факту */ /* * Фильтр Категорий */ //Зарубежные if (Lampa.Storage.field('HidenCategories') == true){ setInterval(function() { var elementDE = $('.selectbox-item.selector > div:contains("Germany")'); var elementIL = $('.selectbox-item.selector > div:contains("Israel")'); var elementTR = $('.selectbox-item.selector > div:contains("Turkey")'); var elementKZ = $('.selectbox-item.selector > div:contains("Казахстан")'); var elementBT = $('.selectbox-item.selector > div:contains("Baltic")'); if(elementDE.length > 0) elementDE.parent('div').hide(); if(elementIL.length > 0) elementIL.parent('div').hide(); if(elementTR.length > 0) elementTR.parent('div').hide(); if(elementKZ.length > 0) elementKZ.parent('div').hide(); if(elementBT.length > 0) elementBT.parent('div').hide(); }, 1000); //End Interval } //Эротика if (Lampa.Storage.field('HidenErotic') == true){ setInterval(function() { var elementEROTIC = $('.selectbox-item.selector > div:contains("Эротические")'); if(elementEROTIC.length > 0) elementEROTIC.parent('div').hide(); }, 1000); //End Interval } /* * Иконки */ if (Lampa.Storage.field('ICONS_in_row') == 'ICONS_6') Lampa.Storage.set('custom_icons', '16.6'); if (Lampa.Storage.field('ICONS_in_row') == 'ICONS_7') Lampa.Storage.set('custom_icons', '14.2'); if (Lampa.Storage.field('ICONS_in_row') == 'ICONS_8') Lampa.Storage.set('custom_icons', '12.5'); /* * Цвет рамки выделения */ if (Lampa.Storage.field('FRAME_AROUND_pic') == 'COLOUR_yellow') Lampa.Storage.set('custom_colour', 'fff10d'); //fff10d if (Lampa.Storage.field('FRAME_AROUND_pic') == 'COLOUR_blue') Lampa.Storage.set('custom_colour', '0078ff'); //0078ff if (Lampa.Storage.field('FRAME_AROUND_pic') == 'COLOUR_white') Lampa.Storage.set('custom_colour', 'ffffff'); //ffffff if (Lampa.Storage.field('FRAME_AROUND_pic') == 'COLOUR_green') Lampa.Storage.set('custom_colour', '0ed145'); //0ed145 /* * Форма иконки */ if (Lampa.Storage.field('PICon') == 'QUAD') Lampa.Storage.set('custom_shape', '100'); //Квадрат if (Lampa.Storage.field('PICon') == 'CLASSIC') Lampa.Storage.set('custom_shape', '60'); //Классика /* * userAgent navigator.userAgent */ //if (Lampa.Storage.field('DIESEL_UserAgent') == 'STANDART') Object.defineProperty(navigator, 'userAgent', {get: function () {return '' + Lampa.Storage.field('DIESEL_DefaultAgent'); }}); //if (Lampa.Storage.field('DIESEL_UserAgent') == 'Wink') Object.defineProperty(navigator, 'userAgent', {get: function () {return 'http-user-agent=WINK/1.28.2 (AndroidTV/9) HlsWinkPlayer'; }}); //if (Lampa.Storage.field('DIESEL_UserAgent') == 'CUSTOM') Object.defineProperty(navigator, 'userAgent', {get: function () {return '' + Lampa.Storage.field('DIESEL_CustomAgent'); }}); var custom_icons = Lampa.Storage.field('custom_icons'); //количество иконок в ряд var custom_colour = Lampa.Storage.field('custom_colour'); //цвет выделения var custom_shape = Lampa.Storage.field('custom_shape'); //форма иконок var usermail = Lampa.Storage.field('account_email').toLowerCase(); //почта пользователя var diesel_server_selected = Lampa.Storage.field('diesel_source'); //извлекается из меню посредством переменной if (Lampa.Storage.field('DIESEL_AccessVariant') == 'EMAIL') { var diesel_playlist = 'http://95.215.8.180/users/' + usermail + '/' + diesel_server_selected; } if (Lampa.Storage.field('DIESEL_AccessVariant')) { var diesel_playlist = 'http://95.215.8.180/users/' + usermail + '/' + diesel_server_selected; //полный путь до плейлиста по выбранному серверу (из трёх частей) //if (Lampa.Storage.field('DIESEL_GEO_BLOCK') == true) diesel_playlist = 'http://95.215.8.180/users/' + usermail + '/' + diesel_server_selected; } if (Lampa.Storage.field('DIESEL_AccessVariant') == 'DEMO') { var diesel_playlist = 'http://95.215.8.180/users/test/' + usermail + '/' + diesel_server_selected; } if (Lampa.Storage.field('DIESEL_AccessVariant') == 'TOKEN') { var diesel_playlist = 'http://95.215.8.180/tokens/' + Lampa.Storage.field('diesel_iptv_uid') + '/' + diesel_server_selected; } /* Выставляем путь сервера для получения плейлиста по логину */ if (Lampa.Storage.field('TVmenu') == 'RU_1') Lampa.Storage.set('diesel_source_server', '/'); if (Lampa.Storage.field('TVmenu') == 'RU_1_MTS') Lampa.Storage.set('diesel_source_server', '/MPEG-TS/'); if (Lampa.Storage.field('TVmenu') == 'RU_KFC') Lampa.Storage.set('diesel_source_server', '/kfc/'); if (Lampa.Storage.field('TVmenu') == 'RU_KFC_MTS') Lampa.Storage.set('diesel_source_server', '/MPEG-TS/kfc/'); if (Lampa.Storage.field('TVmenu') == 'RU_BN') Lampa.Storage.set('diesel_source_server', '/bn/'); if (Lampa.Storage.field('TVmenu') == 'RU_BN_MTS') Lampa.Storage.set('diesel_source_server', '/MPEG-TS/bn/'); if (Lampa.Storage.field('TVmenu') == 'DE_DE') Lampa.Storage.set('diesel_source_server', '/de/'); if (Lampa.Storage.field('TVmenu') == 'DE_DE_MTS') Lampa.Storage.set('diesel_source_server', '/MPEG-TS/de/'); if (Lampa.Storage.field('TVmenu') == 'KZ_KZ') Lampa.Storage.set('diesel_source_server', '/kz/'); if (Lampa.Storage.field('TVmenu') == 'KZ_KZ_MTS') Lampa.Storage.set('diesel_source_server', '/MPEG-TS/kz/'); if (Lampa.Storage.field('TVmenu') == 'UA_GN') Lampa.Storage.set('diesel_source_server', '/gn/'); if (Lampa.Storage.field('TVmenu') == 'UA_GN_MTS') Lampa.Storage.set('diesel_source_server', '/MPEG-TS/gn/'); if (Lampa.Storage.field('TVmenu') == 'OSTHLS') Lampa.Storage.set('diesel_source_server', '/OSTHLS/'); if (Lampa.Storage.field('TVmenu') == 'KRDHLS') Lampa.Storage.set('diesel_source_server', '/KRDHLS/'); if (Lampa.Storage.field('TVmenu') == 'BYHLS') Lampa.Storage.set('diesel_source_server', '/BYHLS/'); /* end */ if (Lampa.Storage.field('DIESEL_AccessVariant') == 'LOGIN') { /* первый запуск - если логина и пароля нет, создаём их пустыми */ var diesel_iptv_login = Lampa.Storage.get('diesel_iptv_login'); var diesel_iptv_passwd = Lampa.Storage.get('diesel_iptv_passwd'); if (!diesel_iptv_login) Lampa.Storage.set('diesel_iptv_login', '') if (!diesel_iptv_passwd) Lampa.Storage.set('diesel_iptv_passwd', '') /* выставляем таймаут, иначе undefined - скрипт отрабатывает раньше, чем получаем значение. Не касается случая, когда логин и пароль уже внесены */ //setTimeout(function() { var diesel_playlist = 'https://streaming-elbrus.su/playlist/' + diesel_iptv_login + '/' + diesel_iptv_passwd + Lampa.Storage.field('diesel_source_server') + 'playlist.m3u8'; //console.log ('Playlist', diesel_playlist); //}, 200); } if (Lampa.Storage.field('DIESEL_PlaylistVariant') == 'DIESEL') {}; if (Lampa.Storage.field('DIESEL_PlaylistVariant') == 'FREETV') { var diesel_playlist = atob('aHR0cDovLzE5My4yMzMuMTM0LjIxL2FscGhhY2hhbm5lbC5wbmc') + '?v=' + Math.random(); }; if (Lampa.Storage.field('DIESEL_PlaylistVariant') == 'TVTEAM') { var diesel_playlist = 'http://tv.team/pl/3/' + Lampa.Storage.field('diesel_iptv_token_plus') + '/' + 'playlist.m3u8'; }; /* BITTV PlayList */ if (Lampa.Storage.field('DIESEL_PlaylistVariant') == 'BITTV') { var diesel_playlist = 'https://bittv.ltd/playlists/' + Lampa.Storage.field('diesel_iptv_token_bittv') + '/playlist.m3u'; }; /* ILSUB PlayList TinyURL*/ if ((Lampa.Storage.field('DIESEL_PlaylistVariant') == 'ILSUB')&&(Lampa.Storage.field('DIESEL_AccessVariant_ilsub') === 'LINK')) { var diesel_playlist = 'https://tinyurl.com/' + Lampa.Storage.field('diesel_iptv_link_ilsub'); } /* ILSUB PlayList Login & Token */ if ((Lampa.Storage.field('DIESEL_PlaylistVariant') == 'ILSUB')&&(Lampa.Storage.field('DIESEL_AccessVariant_ilsub') === 'LOGIN')) { var diesel_playlist = 'https://m3u.il-tv.pro/playlist.php?u=' + Lampa.Storage.get('diesel_iptv_login_ilsub') + '/' + Lampa.Storage.field('diesel_iptv_token_ilsub') + '/playlist.m3u8'; } /* KLI PlayList */ if (Lampa.Storage.field('DIESEL_PlaylistVariant') == 'KLI') { var diesel_playlist = 'http://klimedia.space/hls/' + Lampa.Storage.field('diesel_iptv_KLI_login') + '/' + Lampa.Storage.field('diesel_iptv_KLI_passwd') +'/playlist.m3u8'; }; if ((Lampa.Storage.field('DIESEL_PlaylistVariant') == 'KLI') && (Lampa.Storage.field('diesel_iptv_KLI_link_type') == 'MPEG_TS')) { var diesel_playlist = 'http://klimedia.space/ts/' + Lampa.Storage.field('diesel_iptv_KLI_login') + '/' + Lampa.Storage.field('diesel_iptv_KLI_passwd') +'/playlist.m3u8'; }; Lampa.Storage.set('diesel_activity_url', diesel_playlist); /* * * * * * * * * * * * * * * * Дополнительные Настройки * * * * * * * * * * * * * * * */ /* * * СТИЛИ * * */ /* Убираем смену первого плейлиста - у нас Дизель ТВ! */ Lampa.Template.add('nomenuiptv1', ''); $('body').append(Lampa.Template.get('nomenuiptv1', {}, true)); /* Прячем ошибку плеера */ Lampa.Template.add('PlayerError', ''); $('body').append(Lampa.Template.get('PlayerError', {}, true)); /* Стиль "Обводка" */ Lampa.Template.add('tv_style', ''); $('body').append(Lampa.Template.get('tv_style', {}, true)); /* Activity - исправляем нарушенный стиль в других разделах */ Lampa.Storage.listener.follow('change', function (event) { // Activity if (event.name == 'activity') { if (Lampa.Activity.active().component === plugin.component) { $('#shape_style').remove(); Lampa.Template.add('shape_style', '
'); $('body').append(Lampa.Template.get('shape_style', {}, true)); } else { $('#shape_style').remove(); } } }); /* Прячем пароль аккаунта */ if (Lampa.Storage.get('diesel_iptv_hide_passwd') == true) { Lampa.Template.add('diesel_iptv_hide_passwd_style', '
'); $('body').append(Lampa.Template.get('diesel_iptv_hide_passwd_style', {}, true)); Lampa.Template.add('diesel_iptv_hide_passwd_style_1', '
'); $('body').append(Lampa.Template.get('diesel_iptv_hide_passwd_style_1', {}, true)); }; /* Убираем лишние пункты меню Настроек */ if (Lampa.Storage.field('DIESEL_PlaylistVariant') == 'FREETV') { /* Схема доступа 0 */ Lampa.Template.add('freeTV_settings0', '
'); /* Выбор Сервера 1 */ Lampa.Template.add('freeTV_settings1', '
'); /* Зарубежные Категории 2 */ Lampa.Template.add('freeTV_settings2', '
'); /* UserAgent 3 */ Lampa.Template.add('freeTV_settings3', '
'); $('body').append(Lampa.Template.get('freeTV_settings0', {}, true)); $('body').append(Lampa.Template.get('freeTV_settings1', {}, true)); $('body').append(Lampa.Template.get('freeTV_settings2', {}, true)); $('body').append(Lampa.Template.get('freeTV_settings3', {}, true)); }; if (Lampa.Storage.field('DIESEL_PlaylistVariant') == 'DIESEL') { if (document.querySelector("#freeTV_settings0")) document.querySelector("#freeTV_settings0").remove(); if (document.querySelector("#freeTV_settings1")) document.querySelector("#freeTV_settings1").remove(); if (document.querySelector("#freeTV_settings2")) document.querySelector("#freeTV_settings2").remove(); }; if (Lampa.Storage.field('DIESEL_PlaylistVariant') == 'TVTEAM') { if (document.querySelector("#freeTV_settings0")) document.querySelector("#freeTV_settings0").remove(); if (document.querySelector("#freeTV_settings1")) document.querySelector("#freeTV_settings1").remove(); if (document.querySelector("#freeTV_settings2")) document.querySelector("#freeTV_settings2").remove(); Lampa.Template.add('freeTV_settings0', '
'); Lampa.Template.add('freeTV_settings1', '
'); Lampa.Template.add('freeTV_settings2', '
'); $('body').append(Lampa.Template.get('freeTV_settings0', {}, true)); $('body').append(Lampa.Template.get('freeTV_settings1', {}, true)); $('body').append(Lampa.Template.get('freeTV_settings2', {}, true)); if (document.querySelector("#freeTV_settings2")) document.querySelector("#freeTV_settings2").remove(); }; if (Lampa.Storage.field('DIESEL_PlaylistVariant') == 'BITTV') { if (document.querySelector("#freeTV_settings0")) document.querySelector("#freeTV_settings0").remove(); if (document.querySelector("#freeTV_settings1")) document.querySelector("#freeTV_settings1").remove(); if (document.querySelector("#freeTV_settings2")) document.querySelector("#freeTV_settings2").remove(); if (document.querySelector("#freeTV_settings3")) document.querySelector("#freeTV_settings3").remove(); Lampa.Template.add('freeTV_settings0', '
'); Lampa.Template.add('freeTV_settings1', '
'); Lampa.Template.add('freeTV_settings2', '
'); Lampa.Template.add('freeTV_settings3', '
'); $('body').append(Lampa.Template.get('freeTV_settings0', {}, true)); $('body').append(Lampa.Template.get('freeTV_settings1', {}, true)); $('body').append(Lampa.Template.get('freeTV_settings2', {}, true)); $('body').append(Lampa.Template.get('freeTV_settings3', {}, true)); if (document.querySelector("#freeTV_settings2")) document.querySelector("#freeTV_settings2").remove(); }; /* * * СПЕЦИАЛЬНЫЕ РЕЖИМЫ * * */ /* Режим отладки выключен - Да */ if (Lampa.Storage.field('DIESEL_debug') == false) { //Прячем вкладку Player для маскировки токена Lampa.Template.add('nomenuiptv', ''); $('body').append(Lampa.Template.get('nomenuiptv', {}, true)); } /* Режим отладки выключен - Нет */ if (Lampa.Storage.field('DIESEL_debug') == true) { //Выводим плейлист в консоль console.log ('DEBUG', diesel_playlist); //выводим в консоль } /* АвтоЗапуск */ Lampa.Storage.listener.follow('change', function (event) { if (Lampa.Storage.field('Diesel_Auto_Start') == true) { if (event.name == 'start_page' || 'activity') { localStorage.setItem('activity', '{"id":0,"url":"' + diesel_playlist + '","title":"Дизель ТВ","groups":[],"currentGroup":"' + localStorage.getItem('Diesel_startGroup') +'","component":"diesel_iptv","page":1}'); localStorage.setItem('start_page', 'last'); }; /* if (event.name == 'activity') { localStorage.setItem('activity', '{"id":0,"url":"' + diesel_playlist + '","title":"Дизель ТВ","groups":[],"currentGroup":"Russia","component":"diesel_iptv","page":1}'); localStorage.setItem('start_page', 'last'); } */ } }); /* * * * */ //$(".info__create").css('display', 'none'); // Lampa.Template.add('tv_short', ''); // $('body').append(Lampa.Template.get('tv_short', {}, true)); // Lampa.Template.add('tv_short1', ''); // $('body').append(Lampa.Template.get('tv_short1', {}, true)); /* * * * */ function pluginPage(object) { if (object.id !== curListId) { catalog = {}; listCfg = {}; curListId = object.id; } EPG = {}; var epgIdCurrent = ''; var favorite = getStorage('favorite' + object.id, '[]'); var network = new Lampa.Reguest(); var scroll = new Lampa.Scroll({ mask: true, over: true, step: 250 }); // var items = []; var html = $('
'); var body = $('
'); body.toggleClass('square_icons', getSettings('square_icons')); var info; var last; if (epgInterval) clearInterval(epgInterval); epgInterval = setInterval(function() { for (var epgId in EPG) { epgRender(epgId); } }, 1000); this.create = function () { var _this = this; this.activity.loader(true); var emptyResult = function () { var empty = new Lampa.Empty(); html.append(empty.render()); _this.start = empty.start; _this.activity.loader(false); _this.activity.toggle(); }; if (Object.keys(catalog).length) { _this.build( !catalog[object.currentGroup] ? (lists[object.id].groups.length > 1 && catalog[lists[object.id].groups[1].key] ? catalog[lists[object.id].groups[1].key]['channels'] : [] ) : catalog[object.currentGroup]['channels'] ); } else if(!lists[object.id] || !object.url) { emptyResult(); return; } else { var load = 2, chIDs = {}, data; var compileList = function (dataList) { data = dataList; if (!--load) parseList(); }; if (!timeOffsetSet) { load++; (function () { var ts = new Date().getTime(); network.silent(Lampa.Utils.protocol() + 'epg.rootu.top/api/time', function (serverTime) { var te = new Date().getTime(); timeOffset = (serverTime < ts || serverTime > te) ? serverTime - te : 0; timeOffsetSet = true; compileList(data); }, function () { timeOffsetSet = true; compileList(data); } ); })(); } var chShortName = function(chName){ return chName .toLowerCase() .replace(/\s+\((\+\d+)\)/g, ' $1') .replace(/^телеканал\s+/, '') .replace(/[!\s.,()ⓢⓖ–-]+/g, ' ').trim() .replace(/\s(канал|тв)(\s.+|\s*)$/, '$2') .replace(/\s(50|orig|original)$/, '') .replace(/\s(\d+)/g, '$1') ; }; var trW = {"ё":"e","у":"y","к":"k","е":"e","н":"h","ш":"w","з":"3","х":"x","ы":"bl","в":"b","а":"a","р":"p","о":"o","ч":"4","с":"c","м":"m","т":"t","ь":"b","б":"6"}; var trName = function(word) { return word.split('').map(function (char) { return trW[char] || char; }).join(""); }; var epgIdByName = function(v, find) { var n = chShortName(v), fw, key; if (n === '' || (!chIDs[n[0]] && !find)) return 0; fw = n[0]; if (!!chIDs[fw]) { if (!!chIDs[fw][n]) return chIDs[fw][n]; n = trName(n); if (!!chIDs[fw][n]) return chIDs[fw][n]; for (key in chIDs[fw]) { if (n === trName(key)) { return chIDs[fw][key]; } } } if (n[0] !== fw && !!chIDs[n[0]]) { fw = n[0]; if (!!chIDs[fw][n]) return chIDs[fw][n]; for (key in chIDs[fw]) { if (n === trName(key)){ return chIDs[fw][key]; } } } else { for(var keyW in trW) { if (trW[keyW] === fw && !!chIDs[keyW]) { for (key in chIDs[keyW]) { if (n === trName(key)){ return chIDs[keyW][key]; } } } } } return 0; }; network.silent( Lampa.Utils.protocol() + 'epg.rootu.top/api/channels', function(d){ chIDs = d; compileList(data); }, function(){ compileList(data); } ); var parseList = function () { if (typeof data != 'string' || data.substr(0, 7).toUpperCase() !== "#EXTM3U" ) { emptyResult(); return; } catalog = { '': { title: langGet('favorites'), channels: [] } }; lists[object.id].groups = [{ title: langGet('favorites'), key: '' }]; var l = data.split(/\r?\n/); var cnt = 0, i = 1, chNum = 0, m, mm, defGroup = defaultGroup; if (!!(m = l[0].match(/([^\s=]+)=((["'])(.*?)\3|\S+)/g))) { // listCfg for (var jj = 0; jj < m.length; jj++) { if (!!(mm = m[jj].match(/([^\s=]+)=((["'])(.*?)\3|\S+)/))) { listCfg[mm[1].toLowerCase()] = mm[4] || mm[2]; } } } while (i < l.length) { chNum = cnt + 1; var channel = { ChNum: chNum, Title: "Ch " + chNum, isYouTube: false, Url: '', Group: '', Options: {} }; for (; cnt < chNum && i < l.length; i++) { if (!!(m = l[i].match(/^#EXTGRP:\s*(.+?)\s*$/i)) && m[1].trim() !== '' ) { defGroup = m[1].trim(); } else if (!!(m = l[i].match(/^#EXTINF:\s*-?\d+(\s+\S.*?\s*)?,(.+)$/i))) { channel.Title = m[2].trim(); if (!!m[1] && !!(m = m[1].match(/([^\s=]+)=((["'])(.*?)\3|\S+)/g)) ) { for (var j = 0; j < m.length; j++) { if (!!(mm = m[j].match(/([^\s=]+)=((["'])(.*?)\3|\S+)/))) { channel[mm[1].toLowerCase()] = mm[4] || mm[2]; } } } } else if (!!(m = l[i].match(/^#EXTVLCOPT:\s*([^\s=]+)=(.+)$/i))) { channel.Options[m[1].trim().toLowerCase()] = m[2].trim(); } // else if (!!(m = l[i].match(/^(https?|udp|rt[ms]?p|mms|acestream):\/\/(.+)$/i))) { else if (!!(m = l[i].match(/^(https?):\/\/(.+)$/i))) { channel.Url = m[0].trim(); channel.isYouTube = !!(m[2].match(/^(www\.)?youtube\.com/)); channel.Group = channel['group-title'] || defGroup; cnt++; } } if (!!channel.Url && !channel.isYouTube) { if (!catalog[channel.Group]) { catalog[channel.Group] = { title: channel.Group, channels: [] }; lists[object.id].groups.push({ title: channel.Group, key: channel.Group }); } channel['epgId'] = epgIdByName(channel['Title'], true); channel['Title'] = channel['Title'].replace('ⓢ', '').replace('ⓖ', '').replace(/\s+/g, ' ').trim(); if (!channel['tvg-logo'] && channel['epgId']) { channel['tvg-logo'] = Lampa.Utils.protocol() + 'epg.it999.ru/img2/' + channel['epgId'] + '.png' } if (!channel['tvg-logo'] && channel['Title'] !== "Ch " + chNum) { channel['tvg-logo'] = Lampa.Utils.protocol() + 'epg.rootu.top/picon/' + encodeURIComponent(channel['Title']) + '.png'; } catalog[channel.Group].channels.push(channel); var favI = favorite.indexOf(favID(channel.Title)); if (favI !== -1) { catalog[''].channels[favI] = channel; } } } for (i = 0; i < lists[object.id].groups.length; i++) { var group = lists[object.id].groups[i]; group.title += ' [' + catalog[group.key].channels.length + ']'; } for (i = 0; i < favorite.length; i++) { if (!catalog[''].channels[i]) { catalog[''].channels[i] = { ChNum: -1, Title: "#" + favorite[i], isYouTube: false, Url: Lampa.Utils.protocol() + 'epg.rootu.top/empty/_.m3u8', Group: '', Options: {}, 'tvg-logo': Lampa.Utils.protocol() + 'epg.rootu.top/empty/_.gif' }; } } _this.build( !catalog[object.currentGroup] ? (lists[object.id].groups.length > 1 && !!catalog[lists[object.id].groups[1].key] ? catalog[lists[object.id].groups[1].key]['channels'] : [] ) : catalog[object.currentGroup]['channels'] ); } var listUrl = prepareUrl(object.url); network.native( listUrl, compileList, function () { // Возможно ошибка из-за CORS пробуем silent запрос через CORS прокси network.silent( Lampa.Utils.protocol() + 'epg.rootu.top/cors.php?url=' + encodeURIComponent(listUrl) + '&uid=' + utils.uid() + '&sig=' + generateSigForString(listUrl), compileList, emptyResult, false, {dataType: 'text'} ); }, false, {dataType: 'text'} ) } return this.render(); }; function epgUpdateData(epgId) { var lt = Math.floor(unixtime()/60); var t = Math.floor(lt/60), ed, ede; if (!!EPG[epgId] && t >= EPG[epgId][0] && t <= EPG[epgId][1]) { ed = EPG[epgId][2]; if (!ed || !ed.length || ed.length >= 3) return; ede = ed[ed.length - 1]; lt = (ede[0] + ede[1]); var t2 = Math.floor(lt / 60); if ((t2 - t) > 6 || t2 <= EPG[epgId][1]) return; t = t2; } if (!!EPG[epgId]) { ed = EPG[epgId][2]; if (typeof ed !== 'object') return; if (ed.length) { ede = ed[ed.length - 1]; lt = (ede[0] + ede[1]); var t3 = Math.max(t, Math.floor(lt / 60)); if (t < t3 && ed.length >= 3) return; t = t3; } EPG[epgId][1] = t; } else { EPG[epgId] = [t, t, false]; } var success = function(epg) { if (EPG[epgId][2] === false) EPG[epgId][2] = []; for (var i = 0; i < epg.length; i++) { if (lt < (epg[i][0] + epg[i][1])) { EPG[epgId][2].push.apply(EPG[epgId][2], epg.slice(i)); break; } } setEpgSessCache(epgId, EPG[epgId][2]); epgRender(epgId); }; var fail = function () { if (EPG[epgId][2] === false) EPG[epgId][2] = []; setEpgSessCache(epgId, EPG[epgId][2]); epgRender(epgId); }; if (EPG[epgId][2] === false) { var epg = getEpgSessCache(epgId, lt); if (!!epg) return success(epg); } network.silent( Lampa.Utils.protocol() + 'epg.rootu.top/api/epg/' + epgId + '/hour/' + t, success, fail ); } function epgRender(epgId) { var epg = (EPG[epgId] || [0, 0, []])[2]; if (epg === false) return; var epgEl = body.find('[data-epg-id=' + epgId + '] .card__age'); if (!epgEl.length) return; var t = Math.floor(unixtime() / 60), enableCardEpg = false, i = 0, e, p, cId, cIdEl; while (epg.length && t >= (epg[0][0] + epg[0][1])) epg.shift(); if (epg.length) { e = epg[0]; if (t >= e[0] && t < (e[0] + e[1])) { i++; enableCardEpg = true; p = Math.round((unixtime() - e[0] * 60) * 100 / (e[1] * 60 || 60)); cId = e[0] + '_' +epgEl.length; cIdEl = epgEl.data('cId') || ''; if (cIdEl !== cId) { epgEl.data('cId', cId); epgEl.data('progress', p); epgEl.find('.js-epgTitle').text(e[2]); epgEl.find('.js-epgProgress').css('width', p + '%'); epgEl.show(); } else if (epgEl.data('progress') !== p) { epgEl.data('progress', p); epgEl.find('.js-epgProgress').css('width', p + '%'); } } } if (epgIdCurrent === epgId) { var ec = $('#' + plugin.component + '_epg'); var epgNow = ec.find('.js-epgNow'); cId = epgId + '_' + epg.length + (epg.length ? '_' + epg[0][0] : ''); cIdEl = ec.data('cId') || ''; if (cIdEl !== cId) { ec.data('cId', cId); var epgAfter = ec.find('.js-epgAfter'); if (i) { var slt = toLocaleTimeString(e[0] * 60000); var elt = toLocaleTimeString((e[0] + e[1]) * 60000); epgNow.data('progress', p); epgNow.find('.js-epgProgress').css('width', p + '%'); epgNow.find('.js-epgTime').text(slt); epgNow.find('.js-epgTitle').text(e[2]); var desc = e[3] ? ('

' + encoder.text(e[3]).html() + '

') : ''; epgNow.find('.js-epgDesc').html(desc.replace(/\n/g,'

')); epgNow.show(); info.find('.info__create').html(slt + '-' + elt + ' • ' + encoder.text(e[2]).html()); } else { info.find('.info__create').html(''); epgNow.hide(); } if (epg.length > i) { var list = epgAfter.find('.js-epgList'); list.empty(); var iEnd = Math.min(epg.length, 8); for (; i < iEnd; i++) { e = epg[i]; var item = epgItemTeplate.clone(); item.find('.js-epgTime').text(toLocaleTimeString(e[0] * 60000)); item.find('.js-epgTitle').text(e[2]); list.append(item); } epgAfter.show(); } else { epgAfter.hide(); } } else if (i && epgNow.data('progress') !== p) { epgNow.data('progress', p); epgNow.find('.js-epgProgress').css('width', p + '%'); } } if (!enableCardEpg) epgEl.hide(); if (epg.length < 3) epgUpdateData(epgId); } this.append = function (data) { var catEpg = []; var chIndex = 0; var _this2 = this; var lazyLoadImg = ('loading' in HTMLImageElement.prototype); var bulkFn = bulkWrapper(function (channel) { var chI = chIndex++; var card = Lampa.Template.get('card', { title: channel.Title, release_year: '' }); card.addClass('card--collection'); var img = card.find('.card__img')[0]; if (lazyLoadImg) img.loading = (chI < 18 ? 'eager' : 'lazy'); img.onload = function () { card.addClass('card--loaded'); }; img.onerror = function (e) { var name = channel.Title .replace(/\s+\(([+-]?\d+)\)/, ' $1').replace(/[-.()\s]+/g, ' ').replace(/(^|\s+)(TV|ТВ)(\s+|$)/i, '$3'); var fl = name.replace(/\s+/g, '').length > 5 ? name.split(/\s+/).map(function(v) {return v.match(/^(\+?\d+|[UF]?HD|4K)$/i) ? v : v.substring(0,1).toUpperCase()}).join('').substring(0,6) : name.replace(/\s+/g, '') ; fl = fl.replace(/([UF]?HD|4k|\+\d+)$/i, '$1'); var hex = (Lampa.Utils.hash(channel.Title) * 1).toString(16); while (hex.length < 6) hex+=hex; hex = hex.substring(0,6); var r = parseInt(hex.slice(0, 2), 16), g = parseInt(hex.slice(2, 4), 16), b = parseInt(hex.slice(4, 6), 16); var hexText = (r * 0.299 + g * 0.587 + b * 0.114) > 186 ? '#000000' : '#FFFFFF'; card.find('.card__img').replaceWith('

' + fl + '
'); card.find('.card__view').css({'background-color': '#' + hex, 'color': hexText}); channel['tvg-logo'] = ''; card.addClass('card--loaded'); }; if (channel['tvg-logo']) img.src = channel['tvg-logo'];else img.onerror(); var favIcon = $('
'); card.find('.card__icons-inner').append(favIcon); var tvgDay = parseInt( channel['catchup-days'] || channel['tvg-rec'] || channel['timeshift'] || listCfg['catchup-days'] || listCfg['tvg-rec'] || listCfg['timeshift'] || '0' // todo вынести в настройки? ); if (parseInt('catchup-enable' in channel ? channel['catchup-enable'] : tvgDay) > 0) { card.find('.card__icons-inner').append('
'); if (tvgDay === 0) tvgDay = 1; } else { tvgDay = 0; } card.find('.card__age').html('
') if (object.currentGroup !== '' && favorite.indexOf(favID(channel.Title)) !== -1) { favIcon.toggleClass('hide', false); } card.on('hover:focus hover:hover touchstart', function (event) { if (event.type && event.type !== 'touchstart' && event.type !== 'hover:hover') scroll.update(card, !true); last = card[0]; /* console.log(plugin.name, event.type); <--changeIt */ // info.find('.info__title-original').text(channel['Group']); info.find('.info__title').text(channel.Title); var ec = $('#' + plugin.component + '_epg'); ec.find('.js-epgChannel').text(channel.Title); if (!channel['epgId']) { info.find('.info__create').empty(); epgIdCurrent = ''; ec.find('.js-epgNow').hide(); ec.find('.js-epgAfter').hide(); } else { epgIdCurrent = channel['epgId']; epgRender(channel['epgId']); } }).on('hover:enter', function () { var video = { title: channel.Title, url: prepareUrl(channel.Url), plugin: plugin.component, tv: true }; var playlist = []; var playlistForExtrnalPlayer = []; var i = 0; data.forEach(function (elem) { // Изменяем порядок для внешнего плейлиста (плейлист начинается с текущего элемента) var j = i < chI ? data.length - chI + i : i - chI; var videoUrl = i === chI ? video.url : prepareUrl(elem.Url); playlistForExtrnalPlayer[j] = { title: elem.Title, url: videoUrl, tv: true }; playlist.push({ title: ++i + '. ' + elem.Title, url: videoUrl, plugin: plugin.component, tv: true }); }); video['playlist'] = playlistForExtrnalPlayer; Lampa.Keypad.listener.destroy() Lampa.Keypad.listener.follow('keydown', keydown); Lampa.Player.play(video); Lampa.Player.playlist(playlist); }).on('hover:long', function () { var favI = favorite.indexOf(favID(channel.Title)); var isFavoriteGroup = object.currentGroup === ''; var menu = []; if (tvgDay > 0) { if (!!channel['epgId'] && !!EPG[channel['epgId']] && EPG[channel['epgId']][2].length) { menu.push({ title: 'Смотреть сначала', restartProgram: true }); } menu.push({ title: 'Архив', archive: true }); } menu.push({ title: favI === -1 ? langGet('favorites_add') : langGet('favorites_del'), favToggle: true }); if (isFavoriteGroup && favorite.length) { if (favI !== 0) { menu.push({ title: langGet('favorites_move_top'), favMove: true, i: 0 }); menu.push({ title: langGet('favorites_move_up'), favMove: true, i: favI - 1 }); } if ((favI + 1) !== favorite.length) { menu.push({ title: langGet('favorites_move_down'), favMove: true, i: favI + 1 }); menu.push({ title: langGet('favorites_move_end'), favMove: true, i: favorite.length - 1 }); } menu.push({ title: langGet('favorites_clear'), favClear: true }); } menu.push({ title: 'Тест скорости', startTest: true }); menu.push({ title: getStorage('epg', 'false') ? langGet('epg_off') : langGet('epg_on'), epgToggle: true }); Lampa.Select.show({ title: Lampa.Lang.translate('title_action'), items: menu, onSelect: function (sel) { if (!!sel.startTest){ showTest(channel.Url); } if (!!sel.archive) { var t = unixtime(); var m = Math.floor(t/60); var d = Math.floor(t/86400); var di = (tvgDay + 1), load = di; var ms = m - tvgDay * 1440; var tvgData = []; var playlist = []; var playlistMenu = []; var archiveMenu = []; var ps = 0; var prevDate = ''; var d0 = toLocaleDateString(unixtime() * 1e3); var d1 = toLocaleDateString((unixtime() - 86400) * 1e3); var d2 = toLocaleDateString((unixtime() - 2 * 86400) * 1e3); var txtD = {}; txtD[d0] = 'Сегодня - ' + d0; txtD[d1] = 'Вчера - ' + d1; txtD[d2] = 'Позавчера - ' + d2; var onEpgLoad = function() { if (--load) return; for (var i=tvgData.length - 1; i >= 0; i--) { if (tvgData[i].length === 0) { var dt = (d - i) * 1440; for (var dm = 0; dm < 1440; dm+=30) tvgData[i].push([dt + dm, 30, toLocaleDateString((dt + dm) * 6e4), '']); } for (var j=0; j < tvgData[i].length; j++) { var epg = tvgData[i][j]; if (epg[0] === ps || epg[0] > m || epg[0] + epg[1] < ms) continue; ps = epg[0]; var url = catchupUrl( channel.Url, (channel['catchup'] || channel['catchup-type'] || listCfg['catchup'] || listCfg['catchup-type']), (channel['catchup-source'] || listCfg['catchup-source']) ); var item = { title: toLocaleTimeString(epg[0] * 6e4) + ' - ' + epg[2], url: prepareUrl(url, epg), catchupUrl: url, epg: epg }; var newDate = toLocaleDateString(epg[0] * 6e4); newDate = txtD[newDate] || newDate; if (newDate !== prevDate) { if (prevDate) { archiveMenu.unshift({ title: prevDate, separator: true }); } playlistMenu.push({ title: newDate, separator: true, url: item.url }); prevDate = newDate; } archiveMenu.unshift(item); playlistMenu.push(item); playlist.push(item); } } if (prevDate) { archiveMenu.unshift({ title: prevDate, separator: true }); } tvgData = []; Lampa.Select.show({ title: 'Архив', items: archiveMenu, onSelect: function (sel) { console.log(plugin.name, 'catchupUrl: ' + sel.catchupUrl, epg.slice(0,2)); var video = { title: sel.title, url: sel.url, playlist: playlist } Lampa.Controller.toggle('content'); Lampa.Player.play(video); Lampa.Player.playlist(playlistMenu); }, onBack: function () { Lampa.Controller.toggle('content'); } }) }; while (di--) { tvgData[di] = []; (function() { var dd = di; networkSilentSessCache(Lampa.Utils.protocol() + 'epg.rootu.top/api/epg/' + channel['epgId'] + '/day/' + (d - dd) , function (data) { tvgData[dd] = data; onEpgLoad() }, onEpgLoad ); })(); } } else if (!!sel.restartProgram) { var epg = EPG[channel['epgId']][2][0]; var type = (channel['catchup'] || channel['catchup-type'] || listCfg['catchup'] || listCfg['catchup-type'] || ''); var url = catchupUrl( channel.Url, type, (channel['catchup-source'] || listCfg['catchup-source']) ); var flussonic = type.search(/^flussonic/i) === 0; if (flussonic) { url = url.replace('${(d)S}', 'now'); } console.log(plugin.name, 'catchupUrl: ' + url, epg.slice(0,2)); var video = { title: channel.Title, url: prepareUrl(url, epg), plugin: plugin.component, catchupUrl: url, epg: epg } if (flussonic) video['timeline'] = { time: 11, percent: 0, duration: (epg[1] * 60) }; Lampa.Controller.toggle('content'); Lampa.Player.play(video);//Lampa.PlayerVideo.to(0) } else if (!!sel.epgToggle) { var epg = !getStorage('epg', false); setStorage('epg', epg); var scroll = card.parents(".scroll"); if (epg) { scroll.css({float: "left", width: '70%'}); scroll.parent().append(epgTemplate); } else { scroll.css({float: "none", width: '100%'}); $('#' + plugin.component + '_epg').remove(); } Lampa.Controller.toggle('content'); } else { var favGroup = lists[object.id].groups[0]; if (!!sel.favToggle) { if (favI === -1) { favI = favorite.length favorite[favI] = favID(channel.Title); catalog[favGroup.key].channels[favI] = channel; } else { favorite.splice(favI, 1); catalog[favGroup.key].channels.splice(favI, 1); } } else if (!!sel.favClear) { favorite = []; catalog[favGroup.key].channels = []; } else if (!!sel.favMove) { favorite.splice(favI, 1); favorite.splice(sel.i, 0, favID(channel.Title)); catalog[favGroup.key].channels.splice(favI, 1); catalog[favGroup.key].channels.splice(sel.i, 0, channel); } setStorage('favorite' + object.id, favorite); favGroup.title = catalog[favGroup.key].title + ' [' + catalog[favGroup.key].channels.length + ']'; if (isFavoriteGroup) { Lampa.Activity.replace(Lampa.Arrays.clone(lists[object.id].activity)); } else { favIcon.toggleClass('hide', favorite.indexOf(favID(channel.Title)) === -1); Lampa.Controller.toggle('content'); } } }, onBack: function () { Lampa.Controller.toggle('content'); } }); }); body.append(card); if (!!channel['epgId']) { card.attr('data-epg-id', channel['epgId']); epgRender(channel['epgId']); } }, { bulk: 18, onEnd: function (last, total, left) { _this2.activity.loader(false); _this2.activity.toggle(); /* changeIt - блок 300px нужен? */ } }); data.forEach(function (channel) { bulkFn(channel); if (!!channel['epgId'] && catEpg.indexOf(channel['epgId']) === -1) catEpg.push(channel['epgId']); }); var catEpgString = catEpg.sort(function(a,b){return a-b}).join('-'); var catEpgHash = utils.hash36(catEpgString); // console.log('Epg', catEpgHash, catEpgString, data); }; this.build = function (data) { var _this2 = this; Lampa.Background.change(); Lampa.Template.add(plugin.component + '_button_category', "
" + langGet('categories') + "\n
"); Lampa.Template.add(plugin.component + '_info_radio', '
'); var btn = Lampa.Template.get(plugin.component + '_button_category'); info = Lampa.Template.get(plugin.component + '_info_radio'); info.find('#stantion_filtr').append(btn); info.find('.view--category').on('hover:enter hover:click', function () { _this2.selectGroup(); }); info.find('.info__title-original').text(!catalog[object.currentGroup] ? '' : catalog[object.currentGroup].title); info.find('.info__title').text(''); html.append(info.append()); // this.activity.loader(false); // this.activity.toggle(); if (data.length) { scroll.render().addClass('layer--wheight').data('mheight', info); html.append(scroll.render()); this.append(data); if (getStorage('epg', false)) { scroll.render().css({float: "left", width: '70%'}); scroll.render().parent().append(epgTemplate); } scroll.append(body); setStorage('last_catalog' + object.id, object.currentGroup ? object.currentGroup : '!!'); lists[object.id].activity.currentGroup = object.currentGroup; } else { var empty = new Lampa.Empty(); html.append(empty.render()); // this.start = empty.start; this.activity.loader(false); // this.activity.toggle(); Lampa.Controller.collectionSet(info); Navigator.move('right'); } }; this.selectGroup = function () { var activity = Lampa.Arrays.clone(lists[object.id].activity); Lampa.Select.show({ title: langGet('categories'), items: Lampa.Arrays.clone(lists[object.id].groups), onSelect: function(group) { if (object.currentGroup !== group.key) { activity.currentGroup = group.key; Lampa.Activity.replace(activity); } else { Lampa.Controller.toggle('content'); } }, onBack: function() { Lampa.Controller.toggle('content'); } }); }; this.start = function () { if (Lampa.Activity.active().activity !== this.activity) return; //обязательно, иначе наблюдается баг, активность создается но не стартует, в то время как компонент загружается и стартует самого себя. var _this = this; Lampa.Controller.add('content', { toggle: function toggle() { Lampa.Controller.collectionSet(scroll.render()); Lampa.Controller.collectionFocus(last || false, scroll.render()); }, left: function left() { if (Navigator.canmove('left')) Navigator.move('left'); else Lampa.Controller.toggle('menu'); }, right: function right() { if (Navigator.canmove('right')) Navigator.move('right'); else _this.selectGroup(); }, up: function up() { if (Navigator.canmove('up')) { Navigator.move('up'); } else { if (!info.find('.view--category').hasClass('focus')) { Lampa.Controller.collectionSet(info); Navigator.move('right') } else Lampa.Controller.toggle('head'); } }, down: function down() { if (Navigator.canmove('down')) Navigator.move('down'); else if (info.find('.view--category').hasClass('focus')) { Lampa.Controller.toggle('content'); } }, back: function back() { Lampa.Activity.backward(); } }); Lampa.Controller.toggle('content'); }; this.pause = function () { }; this.stop = function () { }; this.render = function () { return html; }; this.destroy = function () { network.clear(); scroll.destroy(); if (info) info.remove(); if (epgInterval) clearInterval(epgInterval); html.remove(); body.remove(); favorite = null; network = null; html = null; body = null; info = null; }; } if (!Lampa.Lang) { var lang_data = {}; Lampa.Lang = { add: function add(data) { lang_data = data; }, translate: function translate(key) { return lang_data[key] ? lang_data[key].ru : key; } }; } var langData = {}; function langAdd(name, values) { langData[plugin.component + '_' + name] = values; } function langGet(name) { return Lampa.Lang.translate(plugin.component + '_' + name); } langAdd('default_playlist', { ru: '' + diesel_playlist + '', /* changeIt */ uk: '' + diesel_playlist + '', /* changeIt */ be: '' + diesel_playlist + '', /* changeIt */ en: '' + diesel_playlist + '', /* changeIt */ zh: '' + diesel_playlist + '' /* changeIt */ } ); langAdd('default_playlist_cat', { ru: 'Russia', uk: 'Ukraine', be: 'Belarus', en: 'VOD Movies (EN)', zh: 'China' } ); langAdd('settings_playlist_num_group', { ru: 'Плейлист ', uk: 'Плейлист ', be: 'Плэйліст ', en: 'Playlist ', zh: '播放列表 ' } ); langAdd('settings_list_name', { ru: 'Название плейлиста в Главном (левом) меню', /* changeIt */ uk: 'Назва плейлиста у Головному (лівому) меню', /* changeIt */ be: 'Назва плэйліста ў Галоўным (левым) меню', /* changeIt */ en: 'Playlist name in the Main (left) menu', /* changeIt */ zh: '左侧菜单中的播放列表名称' } ); langAdd('settings_list_name_desc', { ru: 'Название плейлиста в Главном (левом) меню', /* changeIt */ uk: 'Назва плейлиста у Головному (лівому) меню', /* changeIt */ be: 'Назва плэйліста ў Галоўным (левым) меню', /* changeIt */ en: 'Playlist name in the Main (left) menu', /* changeIt */ zh: '左侧菜单中的播放列表名称' } ); langAdd('settings_list_url', { ru: 'URL-адрес', uk: 'URL-адреса', be: 'URL-адрас', en: 'URL', zh: '网址' } ); langAdd('settings_list_url_desc0', { ru: 'По умолчанию используется плейлист из проекта Дизель ТВ
Вы можете заменить его на свой.', /* changeIt */ uk: 'За замовчуванням використовується плейлист із проекту Дизель ТБ
Ви можете замінити його на свій.', /* changeIt */ be: 'Па змаўчанні выкарыстоўваецца плэйліст з праекта Дызель ТБ
Вы можаце замяніць яго на свой.', /* changeIt */ en: 'The default playlist is from the project https://github.com/Free-TV/IPTV
You can replace it with your own.', zh: '默认播放列表来自项目 https://github.com/Free-TV/IPTV
您可以将其替换为您自己的。' } ); langAdd('settings_list_url_desc1', { ru: 'Вы можете добавить еще один плейлист здесь. Ссылки на плейлисты обычно заканчиваются на .m3u или .m3u8', uk: 'Ви можете додати ще один плейлист суду. Посилання на плейлисти зазвичай закінчуються на .m3u або .m3u8', be: 'Вы можаце дадаць яшчэ адзін плэйліст суда. Спасылкі на плэйлісты звычайна заканчваюцца на .m3u або .m3u8', en: 'You can add another trial playlist. Playlist links usually end with .m3u or .m3u8', zh: '您可以添加另一个播放列表。 播放列表链接通常以 .m3u 或 .m3u8 结尾' } ); langAdd('categories', { ru: 'Категории', uk: 'Категорія', be: 'Катэгорыя', en: 'Categories', zh: '分类' } ); langAdd('uid', { ru: 'Токен', /* changeIt */ uk: 'Токен', /* changeIt */ be: 'Токен', /* changeIt */ en: 'Token', /* changeIt */ zh: 'UID' } ); langAdd('unique_id', { ru: 'уникальный идентификатор (нужен для некоторых ссылок на плейлисты)', uk: 'унікальний ідентифікатор (необхідний для деяких посилань на списки відтворення)', be: 'унікальны ідэнтыфікатар (неабходны для некаторых спасылак на спіс прайгравання)', en: 'unique identifier (needed for some playlist links)', zh: '唯一 ID(某些播放列表链接需要)' } ); langAdd('favorites', { ru: 'Избранное', uk: 'Вибране', be: 'Выбранае', en: 'Favorites', zh: '收藏夹' } ); langAdd('favorites_add', { ru: 'Добавить в избранное', uk: 'Додати в обране', be: 'Дадаць у абранае', en: 'Add to favorites', zh: '添加到收藏夹' } ); langAdd('favorites_del', { ru: 'Удалить из избранного', uk: 'Видалити з вибраного', be: 'Выдаліць з абранага', en: 'Remove from favorites', zh: '从收藏夹中删除' } ); langAdd('favorites_clear', { ru: 'Очистить избранное', uk: 'Очистити вибране', be: 'Ачысціць выбранае', en: 'Clear favorites', zh: '清除收藏夹' } ); langAdd('favorites_move_top', { ru: 'В начало списка', uk: 'На початок списку', be: 'Да пачатку спісу', en: 'To the top of the list', zh: '到列表顶部' } ); langAdd('favorites_move_up', { ru: 'Сдвинуть вверх', uk: 'Зрушити вгору', be: 'Ссунуць уверх', en: 'Move up', zh: '上移' } ); langAdd('favorites_move_down', { ru: 'Сдвинуть вниз', uk: 'Зрушити вниз', be: 'Ссунуць уніз', en: 'Move down', zh: '下移' } ); langAdd('favorites_move_end', { ru: 'В конец списка', uk: 'В кінець списку', be: 'У канец спісу', en: 'To the end of the list', zh: '到列表末尾' } ); langAdd('epg_on', { ru: 'Включить телепрограмму', uk: 'Увімкнути телепрограму', be: 'Уключыць тэлепраграму', en: 'TV Guide: On', zh: '電視指南:開' } ); langAdd('epg_off', { ru: 'Отключить телепрограмму', uk: 'Вимкнути телепрограму', be: 'Адключыць тэлепраграму', en: 'TV Guide: Off', zh: '電視指南:關閉' } ); langAdd('epg_title', { ru: 'Телепрограмма', uk: 'Телепрограма', be: 'Тэлепраграма', en: 'TV Guide', zh: '電視指南' } ); langAdd('square_icons', { ru: 'Квадратные логотипы каналов', /* changeIt */ en: 'Square tv icons' }); Lampa.Lang.add(langData); function favID(title) { return title.toLowerCase().replace(/[\s!-\/:-@\[-`{-~]+/g, '') } function getStorage(name, defaultValue) { return Lampa.Storage.get(plugin.component + '_' + name, defaultValue); } function setStorage(name, val, noListen) { return Lampa.Storage.set(plugin.component + '_' + name, val, noListen); } function getSettings(name) { return Lampa.Storage.field(plugin.component + '_' + name); } function addSettings(type, param) { var data = { component: plugin.component, param: { name: plugin.component + '_' + param.name, type: type, // select|trigger|input|title|static values: !param.values ? '' : param.values, placeholder: !param.placeholder ? '' : param.placeholder, default: (typeof param.default === 'undefined') ? '' : param.default }, field: { name: !param.title ? (!param.name ? '' : param.name) : param.title } } if (!!param.name) data.param.name = plugin.component + '_' + param.name; if (!!param.description) data.field.description = param.description; if (!!param.onChange) data.onChange = param.onChange; if (!!param.onRender) data.onRender = param.onRender; Lampa.SettingsApi.addParam(data); } function configurePlaylist(i) { addSettings('title', {title: langGet('settings_playlist_num_group') + (i+1)}); var defName = 'list ' + (i+1); var activity = { id: i, url: '', title: plugin.name, groups: [], currentGroup: getStorage('last_catalog' + i, langGet('default_playlist_cat')), component: plugin.component, page: 1 }; if (activity.currentGroup === '!!') activity.currentGroup = ''; addSettings('input', { title: langGet('settings_list_name'), name: 'list_name_' + i, default: i ? 'Ваш дополнительный плейлист' : plugin.name, /* changeIt */ placeholder: i ? defName : '', description: langGet('settings_list_name_desc'), onChange: function (newVal) { var title = !newVal ? (i ? defName : plugin.name) : newVal; $('.js-' + plugin.component + '-menu' + i + '-title').text(title); activity.title = title + (title === plugin.name ? '' : ' - ' + plugin.name); } }); addSettings('input', { title: langGet('settings_list_url'), name: 'list_url_' + i, default: i ? '' : langGet('default_playlist'), placeholder: i ? 'http://example.com/list.m3u8' : '', description: i ? (!getStorage('list_url_' + i) ? langGet('settings_list_url_desc1') : '') : langGet('settings_list_url_desc0'), onChange: function (url) { if (url === activity.url) return; if (activity.id === curListId) { catalog = {}; curListId = -1; } if (/^https?:\/\/./i.test(url)) { activity.url = url; $('.js-' + plugin.component + '-menu' + i).show(); } else { activity.url = ''; $('.js-' + plugin.component + '-menu' + i).hide(); } } }); var name = getSettings('list_name_' + i); var url = getSettings('list_url_' + i); var title = (name || defName); activity.title = title + (title === plugin.name ? '' : ' - ' + plugin.name); var menuEl = $('') .hide() .on('hover:enter', function(){ if (Lampa.Activity.active().component === plugin.component) { Lampa.Activity.replace(Lampa.Arrays.clone(activity)); } else { if (Lampa.Storage.get('startFAV') == true) { var proxyActivity = JSON.parse('{"id":0,"url":"' + localStorage.getItem('diesel_activity_url') + '","title":"Дизель ТВ", "groups": [],"currentGroup":"","component":"diesel_iptv","page":1}'); // var proxyActivityJSON = JSON.parse(proxyActivity) Lampa.Activity.push(proxyActivity) } else Lampa.Activity.push(Lampa.Arrays.clone(activity)); } }); if (/^https?:\/\/./i.test(url)) { activity.url = url; menuEl.show(); } lists.push({activity: activity, menuEl: menuEl, groups: []}); return !activity.url ? i + 1 : i; } Lampa.Component.add(plugin.component, pluginPage); // Готовим настройки /* METRIKA */ (function(m, e, t, r, i, k, a) { m[i] = m[i] || function() { (m[i].a = m[i].a || []).push(arguments) }; m[i].l = 1 * new Date(); for(var j = 0; j < document.scripts.length; j++) { if(document.scripts[j].src === r) { return; } } k = e.createElement(t), a = e.getElementsByTagName(t)[0], k.async = 1, k.src = r, a.parentNode.insertBefore(k, a) }) (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym"); ym(93958290, "init", { clickmap: true, trackLinks: true, accurateTrackBounce: true }); var METRIKA = ''; $('body').append(METRIKA); /* End METRIKA */ Lampa.SettingsApi.addComponent(plugin); addSettings( 'trigger', { title: langGet('square_icons'), name: 'square_icons', default: false, onChange: function(v){ $('.my_iptv.category-full').toggleClass('square_icons', v === 'true'); } } ); for (var i=0; i <= lists.length; i++) i = configurePlaylist(i); UID = getStorage('uid', ''); if (!UID) { UID = Lampa.Utils.uid(10).toUpperCase().replace(/(.{4})/g, '$1-'); setStorage('uid', UID); } else if (UID.length > 12) { UID = UID.substring(0, 12); setStorage('uid', UID); } addSettings('title', {title: langGet('uid')}); addSettings('static', {title: UID, description: langGet('unique_id')}); //~ Готовим настройки /* Если старого ТОКЕНА нет */ /* changeIt */ if (localStorage.getItem('my_iptv_uid') === null) {} /* Если старый ТОКЕН есть, копируем из Старого в Новый */ else { var donor = Lampa.Storage.get('my_iptv_uid') Lampa.Storage.set('diesel_iptv_uid', donor) } function pluginStart() { if (!!window['plugin_' + plugin.component + '_ready']) return; window['plugin_' + plugin.component + '_ready'] = true; var menu = $('.menu .menu__list').eq(0); for (var i=0; i < lists.length; i++) menu.append(lists[i].menuEl); } if (!!window.appready) pluginStart(); else Lampa.Listener.follow('app', function(e){if (e.type === 'ready') pluginStart()}); })();