/**
 *  Filmix.Tracker plugin for Movian
 *
 *  Copyright (C) 2020-2022 Skomeika (fix by kovalDN)
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
// ver. 1.0.1.8
/* eslint-disable camelcase */
/* eslint-disable new-cap */
/* eslint-disable require-jsdoc */
/* eslint-disable max-len */
/* eslint-disable no-var */
//(function (plugin) {
var pluginDescriptor = JSON.parse(Plugin.manifest);
var plugin = JSON.parse(Plugin.manifest);
//var pluginDescriptor = plugin.getDescriptor();
/*
var config = {
  pluginInfo: plugin.getDescriptor(),
  PREFIX: plugin.getDescriptor().id,
  TTL: plugin.getDescriptor().title,
  SYN: plugin.getDescriptor().synopsis,
  AUT: plugin.getDescriptor().author,
  VER: plugin.getDescriptor().version,
  LOGO: Plugin.path + 'Filmix.Tracker.png',
};
*/
//var PREFIX = plugin.getDescriptor().id;
var PREFIX = plugin.id;
//var TTL = plugin.getDescriptor().title;
var TTL = plugin.title;
//var SYN = plugin.getDescriptor().synopsis;
var SYN = plugin.synopsis;
//var AUT = plugin.getDescriptor().author;
var AUT = plugin.author;
//var VER = plugin.getDescriptor().version;
var VER = plugin.version;
//var LOGO = Plugin.path + 'Filmix.Tracker.png';
var LOGO = Plugin.path + plugin.icon;
var LOGOBACKGROUND = Plugin.path + 'src/back.jpg';
var LOGOARROW = Plugin.path + 'src/arrow.png';
var LOGOFOLDER = Plugin.path + 'src/folder.png';
var LOGOICON = Plugin.path + 'src/icon.png';
//var LOGOBOOKMARKS = Plugin.path + 'src/bookmarks.png';
var LOGOEXIT = Plugin.path + 'src/exit.png';
var LOGO1080 = Plugin.path + 'src/1080.png';
var LOGO720 = Plugin.path + 'src/720.png';
var LOGONONE = Plugin.path + 'src/none.png';
var LOGO4K = Plugin.path + 'src/4k.png';
//var listview = Plugin.path + 'src/list.view';
var NAME = 'filmix';
//var service = require('showtime/service');
var service = require('movian/service');
//var service = plugin.createService(config.TTL, config.PREFIX + ':start', 'video', true, config.LOGO);
//var service = plugin.createService(TTL, PREFIX + ':start', 'video', true, LOGO);
//require('showtime/service').create(TTL, PREFIX + ':start', 'video', true, LOGO);
//require('movian/service').create(TTL, PREFIX + ':start', 'video', true, LOGO);
service.create(TTL, PREFIX + ':start', 'video', true, LOGO);
//var store = plugin.createStore('config', true);
var store = service.create('config', true);
//var storage = plugin.createStore(NAME);
var storage = service.create(NAME);
var io = require('native/io');
var popup = require('native/popup');
//var prop = require('showtime/prop');
var prop = require('movian/prop');
//var page = require('showtime/page');
var page = require('movian/page');
//var http = require('showtime/http');
var http = require('movian/http');
//var html = require('showtime/html');
var html = require('movian/html');
//var html = 0;
var urls = require('url');
var UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36';
var result = '';
var data = {};
var items = [];
//var api = require('./src/api');
//var browse = require('./src/browse');
//var log = require('./src/log');
//var moviepage = require('./src/moviepage');
//var DeanEdwardsUnpacker = require('./utils/Dean-Edwards-Unpacker').unpacker;
//var atob = require('./utils/atob');
//var btoa = require('./utils/btoa');
/*
var config = {
  headers: {
  },
};
*/
/*
var headers = {
};
*/
/*
var config = {
  regExps: {
  },
};
*/
/*
var regExps = {
};
*/
/*
var config = {
  login: {
  },
};
*/
/*
var login = {
};
*/
/*
var config = {
  colors: {
  },
};
*/
/*
var colors = {
};
*/
var blue = '6699CC';
var orange = 'FFA500';
var red = 'EE0000';
//var green = '008B45';
var green = '66FF72';
var yellow = 'FFFF00';
var gray = '555555';
function colorStr(str, color) {
  return '<font color="' + color + '"> (' + str + ')</font>';
//  return '<font color="' + color + '"> ' + str + '</font>';
};
function coloredStr(str, color) {
  return '<font color="' + color + '">' + str + '</font>';
};
RichText = function (x) {this.str = x.toString()};
RichText.prototype.toRichString = function (x) {return this.str};
function getStringFromArray(obj) {
  var str = '';
  obj.forEach(function (data, index) {
    str = str + data.name + ',';
  });
  return str.substring(0, str.length - 1);
};
//var settings = require('showtime/settings');
var settings = require('movian/settings');
//var settings = plugin.createSettings(config.TTL, config.LOGO, config.PREFIX, config.SYN);
//var settings = plugin.createSettings(TTL, LOGO, PREFIX, SYN);
//settings.globalSettings(TTL, LOGO, PREFIX, SYN);
settings.globalSettings(PREFIX, TTL, LOGO, SYN);
//settings.createInfo('info', config.LOGO, 'Plugin developed by ' + config.AUT + '. \n');
//settings.createInfo('info', LOGO, 'Plugin developed by ' + AUT + '. \n');
settings.createInfo('info', LOGO, 'Plugin developed by ' + AUT + ', \n' + PREFIX + ', \n' + 'ver. ' + VER + ' \n');
settings.createDivider('Настройки:');
//settings.createBool('tosaccepted', 'Принятие условий использования (при открытии плагина)', true, function (v) {service.tosaccepted = v});
settings.createBool('tosaccepted', 'Принятие условий использования (при открытии плагина)', false, function (v) {service.tosaccepted = v});
//var tos = 'Разработчик не имеет никакого отношения к сайтам, что бы это ни было. Он также не получает за это денег или каких-либо иных льгот. Программное обеспечение предназначено исключительно для образовательных и тестовых целей, и, хотя оно может позволить пользователю создавать копии законно приобретенного и/или принадлежащего контента, требуется, чтобы такие действия пользователя соответствовали законодательству . Кроме того, автор этого программного обеспечения и его партнеры не несут НИКАКОЙ ответственности, юридической или иной подразумеваемой, за любое неправильное использование или за любые убытки, которые могут возникнуть при использовании плагина. Вы несете единоличную ответственность за соблюдение применимых законов в вашей стране, и вы должны прекратить использование этого программного обеспечения, если ваши действия во время работы плагина приведут или могут привести к нарушению прав соответствующих владельцев авторских прав на контент или к каким-либо иным нарушениям . Плагин не лицензирован, не признан и не одобрен каким-либо интернет-ресурсом, являющимся собственностью компании.\n\n';
var tos = 'Плагин предназначен исключительно для образовательных и тестовых целей. Разработчики плагина не имеют отношения к данным сайтам и интернет-ресурсам, не получают каких-либо денег или иных льгот, не несут НИКАКОЙ ответственности за любые действия при использовании плагина. Вы несете единоличную ответственность за соблюдение применимого законодательства и должны прекратить использование плагина, если ваши действия приведут или могут привести к каким-либо нарушениям законодательства.\n\n';
tos += 'Принимаете ли вы эти условия использования?';
//settings.createBool('debug', 'Отладка (debug)', true, function (v) {store.debug = v});
//settings.createBool('debug', 'Отладка (debug)', false, function (v) {store.debug = v});
//settings.createBool('debug', 'Отладка (debug)', true, function (v) {service.debug = v});
settings.createBool('debug', 'Отладка (debug)', false, function (v) {service.debug = v});
function printDebug(message) {
//  if (store.debug) console.error(message);
  if (service.debug) console.error(message);
};
//settings.createString('baseURL', 'Базовый URL (без завершающего "/")', BASE_URL, function (v) {service.baseURL = v});
//settings.createString('domain', 'Базовый URL (без завершающего "/")', 'http://filmix.net', function (v) {service.domain = v});
//settings.createString('domain', 'Домен', 'http://filmix.net', function (v) {service.domain = v});
//settings.createString('domain', '\u0414\u043e\u043c\u0435\u043d', 'http://filmix.net', function (v) {service.domain = v});
//settings.createString('domain', 'Домен', 'filmix.net', function (v) {service.domain = v});
//settings.createString('domain', 'Домен (базовый URL без "http://" и завершающего "/" в конце)', 'filmix.net', function (v) {service.domain = v});
//settings.createString('domain', 'Домен (базовый URL без завершающего "/" в конце)', 'http://filmix.net', function (v) {service.domain = v});
//settings.createString('domain', 'Домен (базовый URL без "https://" и завершающего "/" в конце)', 'filmix.net', function (v) {service.domain = v});
//settings.createString('domain', 'Домен (базовый URL без завершающего "/" в конце)', 'https://filmix.net', function (v) {service.domain = v});
//settings.createString('domain', 'Домен (базовый URL без завершающего "/" в конце)', 'https://filmix.ac', function (v) {service.domain = v});
//settings.createString('domain', 'Домен (базовый URL без завершающего "/" в конце)', 'https://filmix.life', function (v) {service.domain = v});
//settings.createString('domain', 'Домен (базовый URL без завершающего "/" в конце)', 'https://filmix.beer', function (v) {service.domain = v});
//settings.createString('domain', 'Домен (базовый URL без завершающего "/" в конце)', 'https://filmix.gay', function (v) {service.domain = v});
//settings.createString('domain', 'Домен (базовый URL без завершающего "/" в конце)', 'https://filmix.co', function (v) {service.domain = v});
//settings.createString('domain', 'Домен (базовый URL без завершающего "/" в конце)', 'https://filmix.film', function (v) {service.domain = v});
//settings.createString('domain1', 'Домен (партнерский URL без завершающего "/" в конце)', 'http://5.61.48.15', function (v) {service.domain1 = v});
settings.createString('domain1', 'Домен (партнерский URL без завершающего "/" в конце)', 'http://5.61.56.18', function (v) {service.domain1 = v});
settings.createString('domain0', 'Домен (базовый URL без завершающего "/" в конце)', 'https://filmix.ac', function (v) {service.domain0 = v});
settings.createMultiOpt('domain', 'Выбор домена', [
  [service.domain1 + '/partner_api', service.domain1],
//  [service.domain1 + '/partner_api', service.domain1, true],
//  [service.domain0, service.domain0],
  [service.domain0, service.domain0, true],
//  ['http://5.61.48.15' + '/partner_api', 'http://5.61.48.15'],
  ['http://5.61.56.18' + '/partner_api', 'http://5.61.56.18'],
  ['http://filmix.net', 'http://filmix.net'],
  ['https://filmix.ac', 'https://filmix.ac'],
  ['https://filmix.life', 'https://filmix.life'],
  ['https://filmix.beer', 'https://filmix.beer'],
  ['https://filmix.gay', 'https://filmix.gay'],
  ['https://filmix.co', 'https://filmix.co'],
  ['https://filmix.film', 'https://filmix.film'],
  ],
  function (v) {
  printDebug('Установите домен на ' + v);
  service.domain = v;
});
//var BASE_URL = 'https://filmix.co';
var BASE_URL = service.domain;
function sendRequest(url) {
  var token_def = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImp0aSI6ImZ4LTVlYjg3NzgwMjY5MWMifQ.eyJpc3MiOiJodHRwczpcL1wvZmlsbWl4Lm1lIiwiYXVkIjoiaHR0cHM6XC9cL2ZpbG1peC5tZSIsImp0aSI6ImZ4LTVlYjg3NzgwMjY5MWMiLCJpYXQiOjE1ODkxNDc1MjAsIm5iZiI6MTU4OTEzNjcyMCwiZXhwIjoxNTkxNzM5NTIwLCJwYXJ0bmVyX2lkIjoiMiIsImhhc2giOiJiOTMwZDhjMGMzOTE5ZDZkNDBjYWE4ZWExODY0ODFmODVjNGVlNjA4IiwidXNlcl9pZCI6bnVsbCwiaXNfcHJvIjpmYWxzZSwiaXNfcHJvX3BsdXMiOmZhbHNlLCJzZXJ2ZXIiOiIifQ.I8NBrVlREjVA_CthL0i6GBTgR6-y7lndU5JLmhh4ejA';
  var token = token_def;
  if (storage.expired && storage.expired > Math.floor(Date.now() /1000) && storage.token) {
    var token = storage.token;
  }
  var headers = {
    debug: false,
    compression: true,
    headRequest: false,
    headers: {
      'User-Agent': UA,
      'accept': 'application/json, text/javascript, */*; q=0.01',
      'X-FX-Token': token,
    },
  };
//  return showtime.httpReq(url, headers);
  return http.request(url, headers);
};
//var inspect_url = BASE_URL.replace(/^http.*(\w{4,15}.\w{2,3})$/gm,'.*\.$1') + '.*';
//print(inspect_url)
//io.httpInspectorCreate(inspect_url, function (ctrl) {
io.httpInspectorCreate('http.*filmix.net.*', function (ctrl) {
//io.httpInspectorCreate('.*filmix.net.*', function (ctrl) {
  ctrl.setHeader('User-Agent', UA);
//  ctrl.setHeader('Origin', 'https://filmix.co');
//  ctrl.setHeader('Origin', 'https://filmix.ac');
//  ctrl.setHeader('Referer', 'https://filmix.co/');
//  ctrl.setHeader('Referer', 'https://filmix.co');
  ctrl.setHeader('Referer', 'https://filmix.ac/');
//  ctrl.setHeader('Referer', 'https://filmix.ac');
//  ctrl.setHeader('Referer', BASE_URL);
//  ctrl.setHeader('Accept','text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9');
//  ctrl.setHeader('Accept-Encoding', 'gzip, deflate');
  ctrl.setHeader('Accept-Language', 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7');
  return 0;
});
//io.httpInspectorCreate('http.*video/[a-f0-9]{16}/.*', function (ctrl) {
//  ctrl.setHeader('User-Agent', UA);
//  return 0;
//});
//io.httpInspectorCreate('http.*streamguard.cc.*', function (ctrl) {
//  ctrl.setHeader('User-Agent', UA);
//  return 0;
//});
//io.httpInspectorCreate('http.*.m3u8', function (ctrl) {
//  ctrl.setHeader('Content-Type', 'application/x-mpegURL');
//  return 0;
//});
//io.httpInspectorCreate('http.*stream.voidboost.cc.*', function (ctrl) {
//  ctrl.setHeader('User-Agent', UA);
//  ctrl.setHeader('Referer', referer);
//  return 0;
//});
//var referer = service.domain;
var referer = BASE_URL;
settings.createMultiOpt('list', 'Отображение списка', [
  ['directory', 'Общим списком'],
  ['video', 'Списком с данными', true],
  ],
  function (v) {
  printDebug('Установите список на ' + v);
  service.list = v;
});
/*
settings.createDivider('Авторизация:');
*/
/*
settings.createString('authkey', 'Ключ авторизации (auth key)', '', function (v) {service.authkey = v});
settings.createString('authtoken', 'Токен авторизации (auth token)', '', function (v) {service.authtoken = v});
if (!storage.expired || storage.expired < Math.floor(Date.now() /1000) || !storage.token) {
//settings.createAction(NAME + '_login', 'Войти в ' + BASE_URL, function () {login(0, true)});
settings.createAction(NAME + '_login', 'Войти в ' + TTL + ' (' + BASE_URL + ')', function () {login(0, true)});
}
else {
//settings.createAction(NAME + '_login', 'Выйти из ' + BASE_URL, function () {logOut(0, true)});
settings.createAction(NAME + '_login', 'Выйти из ' + TTL + ' (' + BASE_URL + ')', function () {logOut(0, true)});
}
function login(page, showDialog) {
  var text = '';
  if (showDialog) {
//    text = 'Введите e-mail и пароль';
//    text = 'Требуется авторизация, введите e-mail и пароль';
//    text = 'Введите логин и пароль';
    text = 'Требуется авторизация, введите логин и пароль';
    var logged = false;
  }
//  if (!logged && service.authToken.length == 40) {
  if (!logged && service.authkey.length == 32 && service.authtoken.length == 40) {
//    credentials = plugin.getAuthCredentials(BASE_URL, text, showDialog);
//    credentials = popup.getAuthCredentials(BASE_URL, text, showDialog);
//    credentials = plugin.getAuthCredentials(TTL + ' (' + BASE_URL + ')', text, showDialog);
    credentials = popup.getAuthCredentials(TTL + ' (' + BASE_URL + ')', text, showDialog);
//    credentials = plugin.getAuthCredentials('Войти в ' + TTL + ' (' + BASE_URL + ')', text, showDialog);
//    credentials = popup.getAuthCredentials('Войти в ' + TTL + ' (' + BASE_URL + ')', text, showDialog);
    if (credentials && credentials.username && credentials.password) {
      page.loading = true;
      var get_token_header = {
        debug: false,
        compression: true,
        headRequest: false,
        headers: {
          'User-Agent': UA,															 
//!~del''          'accept': 'application/json, text/javascript, *''/''*; q=0.01',															  
        },
        postdata: {
//          key: '160c907041cac0fd84c367c1e0031b67',
          key: service.authkey,
//          token: 'b930d8c0c3919d6d40caa8ea186481f85c4ee608',
          token: service.authtoken,
          user_name: credentials.username,
          user_passw: credentials.password,
        }
      };
//      var reply = showtime.httpReq(BASE_URL + '/request_token', get_token_header);
      var reply = http.request(BASE_URL + '/request_token', get_token_header);
//      reply = showtime.JSONDecode(reply);
      reply = JSON.parse(reply);
      page.loading = false;
      if (reply.token && reply.expired) {
        storage.token = reply.token;
        storage.expired = reply.expired;
        sendRequest(BASE_URL + '/profile/login');
        logged = true;					
      }
    }
  }
*/
/*
  else if (service.authtoken.length != 40) {
//    showtime.message('Не верный формат токена авторизации (auth token).', true, false);
    popup.message('Не верный формат токена авторизации (auth token).', true, false);
    return false;
  }
*/
/*
  else {
    if (service.authkey.length != 32) {
//      showtime.message('Не верный формат ключа авторизации (auth key).\nПроверьте количество знаков (32).', true, false);
      popup.message('Не верный формат ключа авторизации (auth key).\nПроверьте количество знаков (32).', true, false);
      return false;
    }
    if (service.authtoken.length != 40) {
//      showtime.message('Не верный формат токена авторизации (auth token).\nПроверьте количество знаков (40).', true, false);
      popup.message('Не верный формат токена авторизации (auth token).\nПроверьте количество знаков (40).', true, false);
      return false;
    }
  }
  if (showDialog) {
    if (logged) {
//      showtime.message('Вход успешно произведен.\nПараметры входа сохранены.', true, false);	
      popup.message('Вход успешно произведен.\nПараметры входа сохранены.', true, false);	
    }
    else {
//      showtime.message('Не удалось войти.\nПроверьте ключ/токен/e-mail/пароль.', true, false);
//      popup.message('Не удалось войти.\nПроверьте ключ/токен/e-mail/пароль.', true, false);
//      showtime.message('Не удалось войти.\nПроверьте ключ/токен/логин/пароль.', true, false);
      popup.message('Не удалось войти.\nПроверьте ключ/токен/логин/пароль.', true, false);
    }
  }
};
function logOut() {
  storage.token = false;
  storage.expired = false;
//  showtime.message('Выход совершен.', true, false);
  popup.message('Выход совершен.', true, false);
};
*/
var cats = require('./src/categories');
//var links_for_serials = [];
var headers = {
  debug: false,
  compression: true,
  headRequest: false,
  headers: {
    'User-Agent': UA,
    'accept': 'application/json, text/javascript, */*; q=0.01',
  },
};
/*
//function setPageHeader(page, title) {
function setPageHeader(page, title, icon) {
  if (!service.tosaccepted) {
//    if (showtime.message(tos, true, true)) {
    if (popup.message(tos, true, true)) {
      service.tosaccepted = 1;
    }
    else {
      page.error('Условия не приняты. Плагин отключен.');
      return;
    }
  }
  page.loading = true;
  if (page.metadata) {
    page.metadata.background = LOGOBACKGROUND;
    page.metadata.logo = LOGO;
    page.metadata.icon = LOGO;
//    page.metadata.title = title;
//    page.metadata.title = showtime.entityDecode(title);
//    page.metadata.title = new showtime.RichText(title);
    page.metadata.title = new RichText(title);
//    page.metadata.title = TTL;
  }
  page.type = 'directory';
//  page.model.contents = 'list';
//  page.model.contents = 'grid';
  page.contents = 'items';
  page.loading = false;
};
*/
function getCategories() {
  return [
    {cat: 'Films', name:'Фильмы'}, 
    {cat: 'Serials', name:'Сериалы'},
    {cat: 'Mults', name:'Мультфильмы'},
  ];
};
//plugin.addURI(PREFIX + ':start', function (page) {
new page.Route(PREFIX + ':start', function (page) {
  if (!service.tosaccepted) {
//    if (showtime.message(tos, true, true)) {
    if (popup.message(tos, true, true)) {
      service.tosaccepted = 1;
    }
    else {
      page.error('Условия не приняты. Плагин отключен.');
      return;
    }
  }
  page.loading = true;
  page.metadata.background = LOGOBACKGROUND;
//  setPageHeader(page, TTL);
  page.metadata.logo = LOGO;
  page.metadata.icon = LOGO;
  page.metadata.title = TTL;
  page.type = 'directory';
  page.model.contents = 'list';
//  page.model.contents = 'grid';
//  page.appendItem(PREFIX + ':search:', 'search', {title: 'Поиск на ' + PREFIX});
  page.appendItem(PREFIX + ':search:', 'search', {title: 'Поиск на ' + BASE_URL});
//  page.appendItem(PREFIX + ':search:', 'search', {title: 'Поиск на ' + PREFIX + ' (' + BASE_URL + ')'});
  var category = getCategories();
  category.forEach(function (data, index) {
    page.appendItem(PREFIX + ':catalog:' + data.cat + '~' + data.name, 'directory', {
//    page.appendItem(PREFIX + ':catalog:' + data.cat + '~' + data.name, service.list, {
      title: data.name,
//      icon: LOGOARROW,
      icon: LOGOFOLDER,
    });
  });
  page.loading = false;
});
/*
//plugin.addURI(PREFIX + ':search:(.*)', function (page, query) {
new page.Route(PREFIX + ':search:(.*)', function (page, query) {
  page.loading = true;
  page.metadata.background = LOGOBACKGROUND;
//  setPageHeader(page, 'Результаты поиска для: ' + query + ' (' + page.entries + ')');
//  setPageHeader(page, 'Результаты поиска для: ' + query);
//  setPageHeader(page, 'Результат поиска по запросу : ' + query + ' (' + page.entries + ')');
//  setPageHeader(page, 'Результат поиска по запросу : ' + query);
//  page.metadata.logo = LOGO;
//  page.metadata.icon = LOGO;
//  page.metadata.title = 'Результаты поиска для: ' + query + ' (' + page.entries + ')';
  page.metadata.title = 'Результаты поиска для: ' + query;
//  page.metadata.title = 'Результат поиска по запросу : ' + query + ' (' + page.entries + ')';
//  page.metadata.title = 'Результат поиска по запросу : ' + query;
  page.type = 'directory';
//  page.model.contents = 'list';
  page.model.contents = 'grid';
  page.entries = 0;
  var fromPage = 0;
  var tryToSearch = true;
  var encoded = query;
//  var encoded = encodeURI(query);
//  var v = showtime.httpReq(BASE_URL + '/api/v2/suggestions', {
  var v = http.request(BASE_URL + '/api/v2/suggestions', {
    debug: false,
    compression: true,
    headRequest: false,
    headers: {
      'User-Agent': UA,
      'x-requested-with': 'XMLHttpRequest',
//!~del''      'accept': 'application/json, text/javascript, *''/''*; q=0.01',
    },
    args: {
      search_word: encoded,
    },
  });
//  var doc = showtime.JSONDecode(v);
  var doc = JSON.parse(v);
  if (doc) {
    page.entries = doc.length;
    for (var i = 0; i < doc.length; i++) {
      var item = doc[i];
      console.log(i);
      var id = item.id;
      var title = item.title;
      var original_name = item.original_name;
      var year = item.year;
      var link = item.link;
      var img = item.poster.replace(/w40/, 'w220');
      console.log(img);
//      page.appendItem(PREFIX + ':torrentpage' + id + '~' + title + '~' + link + '~' + img, 'video', {
      page.appendItem(PREFIX + ':torrentpage' + id + '~' + title + '~' + link + '~' + img, 'directory', {
//      page.appendItem(PREFIX + ':torrentpage' + id + '~' + title + '~' + link + '~' + img, service.list, {
        title: title,
        icon: img,
        href: link,
        id: id,
      });
    }
  }
  page.loading = false;
  tryToSearch = false;
});
//plugin.addSearcher(PREFIX, LOGO, function (page, query) {
//new page.Searcher(PREFIX, LOGO, function (page, query) {
//plugin.addSearcher(PREFIX + ' - результат', LOGO, function (page, query) {
//new page.Searcher(PREFIX + ' - результат', LOGO, function (page, query) {
//plugin.addSearcher(TTL + ': результат', LOGO, function (page, query) {
new page.Searcher(TTL + ': результат', LOGO, function (page, query) {
  page.loading = true;
  page.metadata.background = LOGOBACKGROUND;
//  setPageHeader(page, TTL);
//  setPageHeader(page, TTL + ': результат');
//  page.metadata.logo = LOGO;
//  page.metadata.icon = LOGO;
//  page.metadata.title = TTL;
  page.metadata.title = TTL + ': результат';
  page.type = 'directory';
//  page.model.contents = 'list';
  page.model.contents = 'grid';
  page.entries = 0;
  var fromPage = 0;
  var tryToSearch = true;
  var encoded = query;
//  var encoded = encodeURI(query);
//  var v = showtime.httpReq(BASE_URL + '/api/v2/suggestions', {
  var v = http.request(BASE_URL + '/api/v2/suggestions', {
    debug: false,
    compression: true,
    headRequest: false,
    headers: {
      'User-Agent': UA,
      'x-requested-with': 'XMLHttpRequest',
//!~del''      'accept': 'application/json, text/javascript, *''/''*; q=0.01',
    },
    args: {
      search_word: encoded,
    },
  });
//  var doc = showtime.JSONDecode(v);
  var doc = JSON.parse(v);
  if (doc) {
    page.entries = doc.length;
    for (var i = 0; i < doc.length; i++) {
      var item = doc[i];
      console.log(i);
      var id = item.id;
      var title = item.title;
      var original_name = item.original_name;
      var year = item.year;
      var link = item.link;
      var img = item.poster.replace(/w40/, 'w220');
      console.log(img);
//      page.appendItem(PREFIX + ':torrentpage' + id + '~' + title + '~' + link + '~' + img, 'video', {
      page.appendItem(PREFIX + ':torrentpage' + id + '~' + title + '~' + link + '~' + img, 'directory', {
//      page.appendItem(PREFIX + ':torrentpage' + id + '~' + title + '~' + link + '~' + img, service.list, {
        title: title,
        icon: img,
        href: link,
        id: id,
      });
    }
  }
  page.loading = false;
  tryToSearch = false;
});
*/
/*
//plugin.addURI(PREFIX + ':search:(.*)', function (page, query) {
new page.Route(PREFIX + ':search:(.*)', function (page, query) {
  page.loading = true;
  page.metadata.background = LOGOBACKGROUND;
//  setPageHeader(page, 'Результаты поиска для: ' + query + ' (' + page.entries + ')');
//  setPageHeader(page, 'Результаты поиска для: ' + query);
//  setPageHeader(page, 'Результат поиска по запросу : ' + query + ' (' + page.entries + ')');
//  setPageHeader(page, 'Результат поиска по запросу : ' + query);
//  page.metadata.logo = LOGO;
//  page.metadata.icon = LOGO;
//  page.metadata.title = 'Результаты поиска для: ' + query + ' (' + page.entries + ')';
  page.metadata.title = 'Результаты поиска для: ' + query;
//  page.metadata.title = 'Результат поиска по запросу : ' + query + ' (' + page.entries + ')';
//  page.metadata.title = 'Результат поиска по запросу : ' + query;
  page.type = 'directory';
//  page.model.contents = 'list';
  page.model.contents = 'grid';
  page.entries = 0;
//  var resp = showtime.httpReq(BASE_URL + '/search/' + query);
//  var resp = http.request(BASE_URL + '/search/' + query);
//  var resp = showtime.httpReq(BASE_URL + '/search/' + encodeURIComponent(query));
  var resp = http.request(BASE_URL + '/search/' + encodeURIComponent(query));
  var dom = html.parse(resp).root;
  list = scrapeList(dom);
  populateItemsFromList(page, list);
  page.loading = false;
});
//plugin.addSearcher(PREFIX, LOGO, function (page, query) {
//new page.Searcher(PREFIX, LOGO, function (page, query) {
//plugin.addSearcher(PREFIX + ' - результат', LOGO, function (page, query) {
//new page.Searcher(PREFIX + ' - результат', LOGO, function (page, query) {
//plugin.addSearcher(TTL + ': результат', LOGO, function (page, query) {
new page.Searcher(TTL + ': результат', LOGO, function (page, query) {
  page.loading = true;
  page.metadata.background = LOGOBACKGROUND;
//  setPageHeader(page, TTL);
//  setPageHeader(page, TTL + ': результат');
//  page.metadata.logo = LOGO;
//  page.metadata.icon = LOGO;
//  page.metadata.title = TTL;
  page.metadata.title = TTL + ': результат';
  page.type = 'directory';
//  page.model.contents = 'list';
  page.model.contents = 'grid';
  page.entries = 0;
//  var resp = showtime.httpReq(BASE_URL + '/search/' + query);
//  var resp = http.request(BASE_URL + '/search/' + query);
//  var resp = showtime.httpReq(BASE_URL + '/search/' + encodeURIComponent(query));
  var resp = http.request(BASE_URL + '/search/' + encodeURIComponent(query));
  var dom = html.parse(resp).root;
  list = scrapeList(dom);
  populateItemsFromList(page, list);
  page.loading = false;
});
*/
//plugin.addURI(PREFIX + ':search:(.*)', function (page, query) {
new page.Route(PREFIX + ':search:(.*)', function (page, query) {
  page.loading = true;
  page.metadata.background = LOGOBACKGROUND;
//  setPageHeader(page, 'Результаты поиска для: ' + query + ' (' + page.entries + ')');
//  setPageHeader(page, 'Результаты поиска для: ' + query);
//  setPageHeader(page, 'Результат поиска по запросу : ' + query + ' (' + page.entries + ')');
//  setPageHeader(page, 'Результат поиска по запросу : ' + query);
//  page.metadata.logo = LOGO;
//  page.metadata.icon = LOGO;
//  page.metadata.title = 'Результаты поиска для: ' + query + ' (' + page.entries + ')';
  page.metadata.title = 'Результаты поиска для: ' + query;
//  page.metadata.title = 'Результат поиска по запросу : ' + query + ' (' + page.entries + ')';
//  page.metadata.title = 'Результат поиска по запросу : ' + query;
  page.type = 'directory';
//  page.model.contents = 'list';
  page.model.contents = 'grid';
  page.entries = 0;
  search({query: query}, function (error, results) {
    results.forEach(function (item) {
//      var item = page.appendItem(PREFIX + ':torrentpage:' + showtime.JSONEncode(item), 'directory', {
      var item = page.appendItem(PREFIX + ':torrentpage:' + JSON.stringify(item), 'directory', {
//      var item = page.appendItem(PREFIX + ':torrentpage:' + showtime.JSONEncode(item), service.list, {
//      var item = page.appendItem(PREFIX + ':torrentpage:' + JSON.stringify(item), service.list, {
        title: item.title,
        icon: item.icon,
      });
      page.entries++;
    });
  });
//  var resp = showtime.httpReq(BASE_URL + '/search/' + query);
//  var resp = http.request(BASE_URL + '/search/' + query);
//  var resp = showtime.httpReq(BASE_URL + '/search/' + encodeURIComponent(query));
  var resp = http.request(BASE_URL + '/search/' + encodeURIComponent(query));
//  var dom = html.parse(resp).root;
  var document = html.parse(resp).root;
//  list = scrapeList(dom);
//  list = scrapeList(document);
  list = scrapeSearchList(document);
  populateItemsFromList(page, list);
  page.loading = false;
});
//plugin.addSearcher(PREFIX, LOGO, function (page, query) {
//new page.Searcher(PREFIX, LOGO, function (page, query) {
//plugin.addSearcher(PREFIX + ' - результат', LOGO, function (page, query) {
//new page.Searcher(PREFIX + ' - результат', LOGO, function (page, query) {
//plugin.addSearcher(TTL + ': результат', LOGO, function (page, query) {
new page.Searcher(TTL + ': результат', LOGO, function (page, query) {
  page.loading = true;
  page.metadata.background = LOGOBACKGROUND;
//  setPageHeader(page, TTL);
//  setPageHeader(page, TTL + ': результат');
//  page.metadata.logo = LOGO;
//  page.metadata.icon = LOGO;
//  page.metadata.title = TTL;
  page.metadata.title = TTL + ': результат';
  page.type = 'directory';
//  page.model.contents = 'list';
  page.model.contents = 'grid';
  page.entries = 0;
  search({query: query}, function (error, results) {
    results.forEach(function (item) {
//      var item = page.appendItem(PREFIX + ':torrentpage:' + showtime.JSONEncode(item), 'directory', {
      var item = page.appendItem(PREFIX + ':torrentpage:' + JSON.stringify(item), 'directory', {
//      var item = page.appendItem(PREFIX + ':torrentpage:' + showtime.JSONEncode(item), service.list, {
//      var item = page.appendItem(PREFIX + ':torrentpage:' + JSON.stringify(item), service.list, {
        title: item.title,
        icon: item.icon,
      });
      page.entries++;
    });
  });
//  var resp = showtime.httpReq(BASE_URL + '/search/' + query);
//  var resp = http.request(BASE_URL + '/search/' + query);
//  var resp = showtime.httpReq(BASE_URL + '/search/' + encodeURIComponent(query));
  var resp = http.request(BASE_URL + '/search/' + encodeURIComponent(query));
//  var dom = html.parse(resp).root;
  var document = html.parse(resp).root;
//  list = scrapeList(dom);
//  list = scrapeList(document);
  list = scrapeSearchList(document);
  populateItemsFromList(page, list);
  page.loading = false;
});
//plugin.addURI(PREFIX + ':catalog:(.*)~(.*)', function (page, cat, name) {
new page.Route(PREFIX + ':catalog:(.*)~(.*)', function (page, cat, name) {
  page.loading = true;
  page.metadata.background = LOGOBACKGROUND;
//  setPageHeader(page, name);
//  setPageHeader(page, TTL);
  page.metadata.logo = LOGO;
  page.metadata.icon = LOGO;
  page.metadata.title = name;
//  page.metadata.title = TTL;
  page.type = 'directory';
  page.model.contents = 'list';
//  page.model.contents = 'grid';
  var allCategories = cats.allCategories();
  var main = 'main' + cat;
  var year = 'year' + cat;
  var quality = 'quality' + cat;
  var country = 'country' + cat;
  var genre = 'genre' + cat;
//~!
  console.log(allCategories);
  page.appendItem('', 'separator', {title: 'Главная:'});
  allCategories[main].forEach(function (data, index) {
//    page.appendItem(PREFIX + ':list:' + data.url, 'directory', {
//    page.appendItem(PREFIX + ':list2:' + data.url, 'directory', {
    page.appendItem(PREFIX + ':list:' + data.url + '~' + data.name, 'directory', {
//      title: data.name + 'list2',
      title: data.name,
//      icon: LOGOARROW,
      icon: LOGOFOLDER,
    });
  });
  page.appendItem('', 'separator', {title: 'По годам:'});
  allCategories[year].forEach(function (data, index) {
//    page.appendItem(PREFIX + ':list:' + data.url, 'directory', {
//    page.appendItem(PREFIX + ':list2:' + data.url, 'directory', {
    page.appendItem(PREFIX + ':list:' + data.url + '~' + data.name, 'directory', {
//      title: data.name + 'list2',
      title: data.name,
//      icon: LOGOARROW,
      icon: LOGOFOLDER,
    });
  });
  page.appendItem('', 'separator', {title: 'По качеству:'});
  allCategories[quality].forEach(function (data, index) {
//    page.appendItem(PREFIX + ':list:' + data.url, 'directory', {
//    page.appendItem(PREFIX + ':list2:' + data.url, 'directory', {
    page.appendItem(PREFIX + ':list:' + data.url + '~' + data.name, 'directory', {
//      title: data.name + 'list2',
      title: data.name,
//      icon: LOGOARROW,
      icon: LOGOFOLDER,
    });
  });
  page.appendItem('', 'separator', {title: 'По странам:'});
  allCategories[country].forEach(function (data, index) {
//    page.appendItem(PREFIX + ':list:' + data.url, 'directory', {
//    page.appendItem(PREFIX + ':list2:' + data.url, 'directory', {
    page.appendItem(PREFIX + ':list:' + data.url + '~' + data.name, 'directory', {
//      title: data.name + 'list2',
      title: data.name,
//      icon: LOGOARROW,
      icon: LOGOFOLDER,
    });
  });
  page.appendItem('', 'separator', {title: 'По жанрам:'});
  allCategories[genre].forEach(function (data, index) {
//    page.appendItem(PREFIX + ':list:' + data.url, 'directory', {
//    page.appendItem(PREFIX + ':list2:' + data.url, 'directory', {
    page.appendItem(PREFIX + ':list:' + data.url + '~' + data.name, 'directory', {
//      title: data.name + 'list2',
      title: data.name,
//      icon: LOGOARROW,
      icon: LOGOFOLDER,
    });
  });
  page.loading = false;
});
/*
//plugin.addURI(PREFIX + ':list:(.*)~(.*)', function (page, page_url, page_name) {
new page.Route(PREFIX + ':list:(.*)~(.*)', function (page, page_url, page_name) {
  page.loading = true;
  page.metadata.background = LOGOBACKGROUND;
//  setPageHeader(page, page_name);
//  setPageHeader(page, TTL);
  page.metadata.logo = LOGO;
  page.metadata.icon = LOGO;
  page.metadata.title = page_name;
//  page.metadata.title = TTL;
  page.type = 'directory';
//  page.model.contents = 'list';
  page.model.contents = 'grid';
  var num_page = 1;
  function load() {
    var headers_sort = {
      debug: false,
      compression: true,
      headRequest: false,
      headers: {
        'User-Agent': UA,
//!~del''        'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*''/''*;q=0.8,application/signed-exchange;v=b3;q=0.9',
      },
      postdata: {
        dlenewssortby: 'rating',
//        dlenewssortby: 'date',
        dledirection: 'desc',
        set_new_sort: 'dle_sort_cat',
        set_direction_sort: 'dle_direction_cat',
      },
    };
//    var doc = showtime.httpReq(page_url + '/page/' + num_page, headers_sort).toString();	
    var doc = http.request(page_url + '/page/' + num_page, headers_sort).toString();
    var dom = html.parse(doc);
    var elements = dom.root.getElementByClassName('short');
    for (i = 0; i < elements.length; i++) {
      element = elements[i];
      var href = element.getElementByClassName('watch icon-play')[0].attributes.getNamedItem('href').value;
      var img = element.getElementByClassName('poster poster-tooltip')[0].attributes;
      var title = img.getNamedItem('alt').value;
      var img = img.getNamedItem('src').value;
      console.log(img);
      var id = element.getElementByClassName('like')[0].attributes.getNamedItem('data-id').value;
//      page.appendItem(PREFIX + ':torrentpage' + id + '~' + title + '~' + href + '~' + img, 'video', {
      page.appendItem(PREFIX + ':torrentpage' + id + '~' + title + '~' + href + '~' + img, service.list, {
        title: title,
        icon: img,
        href: href,
        id: id,
      });
    }
    num_page++;
    page.haveMore(true);
  }
  load();
  page.asyncPaginator = load;
  page.loading = false;
});
*/
/*
//plugin.addURI(PREFIX + ':list2:(.*)', function (page, href) {
new page.Route(PREFIX + ':list2:(.*)', function (page, href) {
  print(href);
  page.loading = true;
  page.metadata.background = LOGOBACKGROUND;
//  setPageHeader(page, TTL);
  page.metadata.logo = LOGO;
  page.metadata.icon = LOGO;
//  page.metadata.title = TTL;
  page.type = 'directory';
//  page.model.contents = 'list';
  page.model.contents = 'grid';
  page.entries = 0;
  var nPage = 1;
  function loader() {
//~    setTimeout(function () {
    if (nPage !== 1) {
      url = href + '/pages/' + nPage +'/';
    }
    else url = href +'/';
//    var v = showtime.httpReq(url, {
    var v = http.request(url, {
      caching: true,
      cacheTime: 6000,
      noFail: true,
      method: 'GET',
      headers: {
//!~del''//~        'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*''/''*;q=0.8,application/signed-exchange;v=b3;q=0.9',
        'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25',
//!~del''        'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*''/''*;q=0.8,application/signed-exchange;v=b3;q=0.9',
        'accept-language': 'ru,en-US;q=0.9,en;q=0.8,zh;q=0.7',
        'Cookie': 'per_page_news=45',
      },
    }).toString();
//    page.loading = 0;
    var dom = html.parse(v).root;
    list = scrapeList(dom);
//    oprint(list);
//    print(list.length);
    populateItemsFromList(page, list);
    nPage++;
    page.haveMore(list.endOfData !== undefined && !list.endOfData);
//~    }, 3000);
  }
  page.asyncPaginator = loader;
  loader();
  page.loading = 0;
});
*/
//plugin.addURI(PREFIX + ':list:(.*)', function (page, href, title) {
//new page.Route(PREFIX + ':list:(.*)', function (page, href, title) {
//plugin.addURI(PREFIX + ':list:(.*)~(.*)', function (page, href, title) {
new page.Route(PREFIX + ':list:(.*)~(.*)', function (page, href, title) {
  print(href);
  page.loading = true;
  page.metadata.background = LOGOBACKGROUND;
//  setPageHeader(page, title);
//  setPageHeader(page, TTL);
  page.metadata.logo = LOGO;
  page.metadata.icon = LOGO;
  page.metadata.title = title;
//  page.metadata.title = TTL;
  page.type = 'directory';
//  page.model.contents = 'list';
  page.model.contents = 'grid';
  page.entries = 0;
  var nPage = 1;
  function loader() {
//~    setTimeout(function () {
    if (nPage !== 1) {
      url = href + '/pages/' + nPage +'/';
    }
    else url = href +'/';
//    var v = showtime.httpReq(url, {
    var v = http.request(url, {
      caching: true,
      cacheTime: 6000,
      noFail: true,
      method: 'GET',
      headers: {
//~        'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
        'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25',
//        'User-Agent': UA,
//        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0.2 Safari/604.4.7',
        'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
//        'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
        'accept-language': 'ru,en-US;q=0.9,en;q=0.8,zh;q=0.7',
//        'accept-language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',
//        'accept-language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en',
        'Cookie': 'per_page_news=45',
//        'cache-control': 'no-cache',
//        'content-type': 'application/x-www-form-urlencoded',
//        'upgrade-insecure-requests': '1',
      },
    }).toString();
//    page.loading = 0;
    var dom = html.parse(v).root;
    list = scrapeList(dom);
//    oprint(list);
//    print(list.length);
    populateItemsFromList(page, list);
    nPage++;
    page.haveMore(list.endOfData !== undefined && !list.endOfData);
//~    }, 3000);
  }
  page.asyncPaginator = loader;
  loader();
  page.loading = 0;
});
//plugin.addURI(PREFIX + ':torrentpage(.*)~(.*)~(.*)~(.*)', function (page, id, title, href, img) {
new page.Route(PREFIX + ':torrentpage(.*)~(.*)~(.*)~(.*)', function (page, id, title, href, img) {
  page.loading = true;
  page.metadata.background = LOGOBACKGROUND;
//  setPageHeader(page, title);
//  setPageHeader(page, TTL);
//  page.metadata.logo = LOGO;
//  page.metadata.icon = LOGO;
  page.metadata.title = title;
//  page.metadata.title = TTL;
  page.type = 'directory';
  page.model.contents = 'list';
//  page.model.contents = 'grid';
//  var doc = showtime.httpReq(BASE_URL + '/download/' + id, headers).toString();
  var doc = http.request(BASE_URL + '/download/' + id, headers).toString();
//  var doc = showtime.httpReq(BASE_URL + '/download/' + id).toString();
//  var doc = http.request(BASE_URL + '/download/' + id).toString();
  var dom = html.parse(doc);
  page.appendItem('', 'separator', {title: 'Торренты:'});
//~!
  var blocked =  dom.root.getElementByClassName('item blocked');
  console.log('blocked' + blocked.length);
  if (blocked.length > 0) {
    page.appendItem('', 'separator', {title: 'Торрентов не найдено'});
  }
  else {
    var seasons_list = dom.root.getElementByClassName('items')[0].getElementByClassName('seasons-list');
    var files = dom.root.getElementByClassName('items')[0].getElementByClassName('item');
    if (seasons_list.length > 0) {
      var seasons = seasons_list[0].getElementByClassName('season-item');
      for (i = 0; i < seasons.length; i++) {
        var season = seasons[i];
        var list = seasons_list[0].getElementByClassName('translation-list');
        var item = list[i].getElementByClassName('translation-item icon-arowDown');
        items[i] = [];
        for (n = 0; n < item.length; n++) {
          items[i][n] = [];
          items[i][n]['count_files'] = item[n].getElementByClassName('count-files')[0].textContent.trim();
          items[i][n]['translation_title'] = item[n].getElementByClassName('translation-title')[0].textContent.trim();
          items[i][n]['size_files'] = item[n].getElementByClassName('size-files')[0].textContent.trim();
          items[i][n]['date_files'] = item[n].getElementByClassName('date-files')[0].textContent.trim();
          var series = list[i].getElementByClassName('series-list');
          var videos = series[n].getElementByClassName('series');
          items[i][n]['series'] = [];
          for (v = 0; v < videos.length; v++) {
            items[i][n]['series'][v] = [];
            items[i][n]['series'][v]['title'] = videos[v].getElementByClassName('series-title')[0].textContent.trim();
            items[i][n]['series'][v]['origin-name'] = videos[v].getElementByClassName('origin-name')[0].textContent.trim();
            items[i][n]['series'][v]['size-series'] = videos[v].getElementByClassName('size-series')[0].textContent.trim();
            items[i][n]['series'][v]['link'] = videos[v].getElementByClassName('download')[0].attributes.getNamedItem('href').value;
          }
        }
//        var param = showtime.JSONEncode(items);
        var param = JSON.stringify(items);
        var season_title = season.getElementByClassName('season-title')[0].textContent.trim();
        page.appendItem(PREFIX + ':studiopage:' + i + '~' + img, 'directory', {
//        page.appendItem(PREFIX + ':studiopage:' + i + '~' + img, service.list, {
          title: season_title,
          icon: img,
        });
      }
    }
    else if (files.length > 0) {
      for (i = 0; i < files.length; i++) {
        console.log(files.length);
        var filename = files[i].getElementByClassName('file-item')[0].textContent.trim();
        var link = files[i].getElementByClassName('download')[0].attributes.getNamedItem('onclick').value;
        link = link.slice(22, -1);
        page.appendItem(link, 'directory', {
//        page.appendItem(link, service.list, {
          title: filename,
//          icon: LOGOARROW,
          icon: LOGOFOLDER,
        });
      }
    }
  }
  page.appendItem('', 'separator', {title: 'Поиск:'});
  page.appendItem('youtube:search:' + title, 'directory', {
    title: 'Найти на YouTube',
//    icon: '',
    icon: LOGOARROW,
  });
  page.appendItem('Filmix:search:' + title, 'directory', {
    title: 'Найти на Filmix',
//    icon: '',
    icon: LOGOARROW,
  });
  page.appendItem(PREFIX + ':search:' + title, 'directory', {
    title: 'Найти в плагине',
//    icon: '',
    icon: LOGOARROW,
  });
  page.appendItem('search:' + title, 'directory', {
    title: 'Найти в мовиан',
//    icon: '',
    icon: LOGOARROW,
  });
  page.appendItem('yo:search:' + title, 'directory', {
    title: 'Найти из Yohoho',
//    icon: '',
    icon: LOGOARROW,
  });
  page.loading = false;
});
//plugin.addURI(PREFIX + ':studiopage:(.*)~(.*)', function (page, i, img) {
new page.Route(PREFIX + ':studiopage:(.*)~(.*)', function (page, i, img) {
  page.loading = true;
  page.metadata.background = LOGOBACKGROUND;
//  setPageHeader(page, TTL);
//  page.metadata.logo = LOGO;
//  page.metadata.icon = LOGO;
//  page.metadata.title = TTL;
  page.type = 'directory';
  page.model.contents = 'list';
//  page.model.contents = 'grid';
  var vendors = items[i];
  for (n = 0; n < vendors.length; n++) {
    page.appendItem(PREFIX + ':seriepage:' + i + '~' + n + '~' + img, 'directory', {
//    page.appendItem(PREFIX + ':seriepage:' + i + '~' + n + '~' + img, service.list, {
      title: vendors[n]['translation_title'],
      icon: img,
    });
  }
  page.loading = false;
});
//plugin.addURI(PREFIX + ':seriepage:(.*)~(.*)~(.*)', function (page, i, n, img) {
new page.Route(PREFIX + ':seriepage:(.*)~(.*)~(.*)', function (page, i, n, img) {
  page.loading = true;
  page.metadata.background = LOGOBACKGROUND;
//  setPageHeader(page, TTL);
//  page.metadata.logo = LOGO;
//  page.metadata.icon = LOGO;
//  page.metadata.title = TTL;
  page.type = 'directory';
  page.model.contents = 'list';
//  page.model.contents = 'grid';
  var series = items[i][n]['series'];
  console.log(series.length);
  for (v = 0; v < series.length; v++) {
    page.appendItem(series[v]['link'], 'directory', {
//    page.appendItem(series[v]['link'], service.list, {
      title: series[v]['origin-name'],
    });
  }
  page.loading = false;
});
function scrapeList(dom) {
  var returnValue = [];
  var dle = dom.getElementById('dle-content');
  if (dle) {
//    content.getElementsByClassName('shortstory line')].forEach(function (e) {
//      returnValue.push({
//        url: e.getElementByTagName('a')[0].attributes.getNamedItem('href').value,
//        title: e.getElementByTagName('img')[0].attributes.getNamedItem('alt').value,
//        icon: e.getElementByTagName('img')[0].attributes.getNamedItem('src').value});
//    });
//    content.getElementByClassName('shortstory line').forEach(function (e) {
    dle.getElementByClassName('movie article line').forEach(function (e) {
//      desc = e.textContent
      returnValue.push({
        id: e.attributes.getNamedItem('id').value.replace('movie-', ''),
        url: e.getElementByTagName('a')[0].attributes.getNamedItem('href').value,
        title: e.getElementByTagName('img')[0].attributes.getNamedItem('alt').value,
        icon: e.getElementByTagName('img')[0].attributes.getNamedItem('src').value,
//        description: desc
      });
    });
  }
  var navigation = dom.getElementByClassName('navigation');
  oprint(navigation);
  if (navigation.length !== 0) {
    returnValue.endOfData = navigation[0].children[navigation[0].children.length - 1].nodeName !== 'a';
  }
  else returnValue.endOfData = true;
  return returnValue;
};
function scrapeSearchList(document) {
  var returnValue = [];
  var dle = document.getElementById('dle-content');
  if (dle) {
//    content.getElementsByClassName('shortstory line')].forEach(function (e) {
//      returnValue.push({
//        url: e.getElementByTagName('a')[0].attributes.getNamedItem('href').value,
//        title: e.getElementByTagName('img')[0].attributes.getNamedItem('alt').value,
//        icon: e.getElementByTagName('img')[0].attributes.getNamedItem('src').value});
//    });
//    content.getElementByClassName('shortstory line').forEach(function (e) {
    dle.getElementByClassName('movie article line').forEach(function (e) {
//      desc = e.textContent
      returnValue.push({
        id: e.attributes.getNamedItem('id').value.replace('movie-', ''),
        url: e.getElementByTagName('a')[0].attributes.getNamedItem('href').value,
        title: e.getElementByTagName('img')[0].attributes.getNamedItem('alt').value,
        icon: e.getElementByTagName('img')[0].attributes.getNamedItem('src').value,
//        description: desc
      });
    });
  }
  var navigation = document.getElementByClassName('navigation');
  oprint(navigation);
  if (navigation.length !== 0) {
    returnValue.endOfData = navigation[0].children[navigation[0].children.length - 1].nodeName !== 'a';
  }
  else returnValue.endOfData = true;
  return returnValue;
};
function search(options, callback) {
  var opts = {
    noFail: true,
    compression: true,
    caching: true,
  };
//  showtime.httpReq(BASE_URL + '/search/' + options.query, opts, function (err, resp) {
//  http.request(BASE_URL + '/search/' + options.query, opts, function (err, resp) {
//  showtime.httpReq(BASE_URL + '/search/' + encodeURIComponent(options.query), opts, function (err, resp) {
  http.request(BASE_URL + '/search/' + encodeURIComponent(options.query), opts, function (err, resp) {
    if (!err && resp.statuscode == 200) {
      var list = [];
//      var dom = html.parse(resp.toString()).root;
      var document = html.parse(resp.toString()).root;
/*
      var dle = document.getElementById('dle-content');
      if (dle) {
//        content.getElementsByClassName('shortstory line')].forEach(function (e) {
//          returnValue.push({
//            url: e.getElementByTagName('a')[0].attributes.getNamedItem('href').value,
//            title: e.getElementByTagName('img')[0].attributes.getNamedItem('alt').value,
//            icon: e.getElementByTagName('img')[0].attributes.getNamedItem('src').value});
//        });
//        content.getElementByClassName('shortstory line').forEach(function (e) {
        dle.getElementByClassName('movie article line').forEach(function (e) {
//          desc = e.textContent
          list.push({
            id: e.attributes.getNamedItem('id').value.replace('movie-', ''),
            url: e.getElementByTagName('a')[0].attributes.getNamedItem('href').value,
            title: e.getElementByTagName('img')[0].attributes.getNamedItem('alt').value,
            icon: e.getElementByTagName('img')[0].attributes.getNamedItem('src').value,
//            description: desc
          });
        });
      }
*/
      if (callback) callback(null, list);
    }
    else {
      if (callback) callback(new Error('Ошибка при получении показов'), null);
    }
  });
};
function populateItemsFromList(page, list) {
  page.entries = 0;
  for (i = 0; i < list.length; i++) {
//    page.appendItem(PREFIX + ':torrentpage' + list[i].id + '~' + list[i].title + '~' + list[i].href + '~' + list[i].icon, 'video', {
    page.appendItem(PREFIX + ':torrentpage' + list[i].id + '~' + list[i].title + '~' + list[i].href + '~' + list[i].icon, service.list, {
      title: list[i].title,
      description: list[i].description,
      icon: /^http/.test(list[i].icon) ? list[i].icon : BASE_URL + list[i].icon,
    });
    page.entries++;
  }
};
//function oprint(o) {print(showtime.JSONEncode(o, null, 4))};
function oprint(o) {print(JSON.stringify(o, null, 4))};
function d(sBase64) {return String(Duktape.dec('base64', sBase64))};
var exist = function (x) {
  return x != null && typeof (x) != 'undefined' && x != 'undefined';
};
//})(this);