');
$('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()});
})();