Skip to content

Instantly share code, notes, and snippets.

@azhurb
Last active October 26, 2021 16:10
Show Gist options
  • Save azhurb/350840f691bf7c49e67eca1089136150 to your computer and use it in GitHub Desktop.
Save azhurb/350840f691bf7c49e67eca1089136150 to your computer and use it in GitHub Desktop.
Change loading order
/**
* Common XPCOM STB constructor.
* @constructor
*/
function common_xpcom(){
this.user = {};
this.mac = '';
this.ip = '';
this.hd = 1;
this.type = '';
this.version = '';
this.ajax_loader = '';
this.images = [];
this.storages = {};
this.player = {};
this.key_lock = true;
this.power_off = false;
this.additional_services_on = 0;
this.header_ua_ext = [];
this.access_token = '';
this.random = '';
this.aspect_idx = 0;
this.aspect_array = [
{"alias": "fit", "mode": 0x10},
{"alias": "big", "mode": 0x40},
{"alias": "opt", "mode": 0x50},
{"alias": "exp", "mode": 0x00},
{"alias": "cmb", "mode": 0x30}
];
this.video_mode = 1080;
this.cur_off_on = false;
this.cur_place = '';
this.load_step = Math.ceil(50/3);
this.recordings = [];
this.hdmi_on = true;
this.ntp_wait_time = 0;
this.clock_formats = {'12h': '{2}:{1} {3}', '24h': '{0}:{1}'};
// iso639
this.lang_map = {
"aa" : "aar", //Afar
"ab" : "abk", //Abkhazian
"af" : "afr", //Afrikaans
"ak" : "aka", //Akan
"sq" : "alb", //Albanian
"am" : "amh", //Amharic
"ar" : "ara", //Arabic
"an" : "arg", //Aragonese
"hy" : "arm", //Armenian
"as" : "asm", //Assamese
"av" : "ava", //Avaric
"ae" : "ave", //Avestan
"ay" : "aym", //Aymara
"az" : "aze", //Azerbaijani
"ba" : "bak", //Bashkir
"bm" : "bam", //Bambara
"eu" : "baq", //Basque
"be" : "bel", //Belarusian
"bn" : "ben", //Bengali
"bh" : "bih", //Bihari languages
"bi" : "bis", //Bislama
"bs" : "bos", //Bosnian
"br" : "bre", //Breton
"bg" : "bul", //Bulgarian
"my" : "bur", //Burmese
"ca" : "cat", //Catalan; Valencian
"ch" : "cha", //Chamorro
"ce" : "che", //Chechen
"zh" : "chi", //Chinese
"cu" : "chu", //Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic
"cv" : "chv", //Chuvash
"kw" : "cor", //Cornish
"co" : "cos", //Corsican
"cr" : "cre", //Cree
"cs" : "ces", //Czech
"da" : "dan", //Danish
"dv" : "div", //Divehi; Dhivehi; Maldivian
"nl" : "dut", //Dutch; Flemish
"dz" : "dzo", //Dzongkha
"en" : "eng", //English
"eo" : "epo", //Esperanto
"et" : "est", //Estonian
"ee" : "ewe", //Ewe
"fo" : "fao", //Faroese
"fj" : "fij", //Fijian
"fi" : "fin", //Finnish
"fr" : "fra", //French
"fy" : "fry", //Western Frisian
"ff" : "ful", //Fulah
"ka" : "geo", //Georgian
"de" : "deu", //German
"gd" : "gla", //Gaelic; Scottish Gaelic
"ga" : "gai", //Irish
"gl" : "glg", //Galician
"gv" : "glv", //Manx
"el" : "ell", //Greek, Modern (1453-)
"gn" : "grn", //Guarani
"gu" : "guj", //Gujarati
"ht" : "hat", //Haitian; Haitian Creole
"ha" : "hau", //Hausa
"he" : "heb", //Hebrew
"hz" : "her", //Herero
"hi" : "hin", //Hindi
"ho" : "hmo", //Hiri Motu
"hr" : "hrv", //Croatian
"hu" : "hun", //Hungarian
"ig" : "ibo", //Igbo
"is" : "ice", //Icelandic
"io" : "ido", //Ido
"ii" : "iii", //Sichuan Yi; Nuosu
"iu" : "iku", //Inuktitut
"ie" : "ile", //Interlingue; Occidental
"ia" : "ina", //Interlingua (International Auxiliary Language Association)
"id" : "ind", //Indonesian
"ik" : "ipk", //Inupiaq
"it" : "ita", //Italian
"jv" : "jav", //Javanese
"ja" : "jpn", //Japanese
"kl" : "kal", //Kalaallisut; Greenlandic
"kn" : "kan", //Kannada
"ks" : "kas", //Kashmiri
"kr" : "kau", //Kanuri
"kk" : "kaz", //Kazakh
"km" : "khm", //Central Khmer
"ki" : "kik", //Kikuyu; Gikuyu
"rw" : "kin", //Kinyarwanda
"ky" : "kir", //Kirghiz; Kyrgyz
"kv" : "kom", //Komi
"kg" : "kon", //Kongo
"ko" : "kor", //Korean
"kj" : "kua", //Kuanyama; Kwanyama
"ku" : "kur", //Kurdish
"lo" : "lao", //Lao
"la" : "lat", //Latin
"lv" : "lav", //Latvian
"li" : "lim", //Limburgan; Limburger; Limburgish
"ln" : "lin", //Lingala
"lt" : "lit", //Lithuanian
"lb" : "ltz", //Luxembourgish; Letzeburgesch
"lu" : "lub", //Luba-Katanga
"lg" : "lug", //Ganda
"mk" : "mac", //Macedonian
"mh" : "mah", //Marshallese
"ml" : "mal", //Malayalam
"mi" : "mao", //Maori
"mr" : "mar", //Marathi
"ms" : "may", //Malay
"mg" : "mlg", //Malagasy
"mt" : "mlt", //Maltese
"mn" : "mon", //Mongolian
"na" : "nau", //Nauru
"nv" : "nav", //Navajo; Navaho
"nr" : "nbl", //Ndebele, South; South Ndebele
"nd" : "nde", //Ndebele, North; North Ndebele
"ng" : "ndo", //Ndonga
"ne" : "nep", //Nepali
"nn" : "nno", //Norwegian Nynorsk; Nynorsk, Norwegian
"nb" : "nob", //Bokmål, Norwegian; Norwegian Bokmål
"no" : "nor", //Norwegian
"ny" : "nya", //Chichewa; Chewa; Nyanja
"oc" : "oci", //Occitan (post 1500); Provençal
"oj" : "oji", //Ojibwa
"or" : "ori", //Oriya
"om" : "orm", //Oromo
"os" : "oss", //Ossetian; Ossetic
"pa" : "pan", //Panjabi; Punjabi
"fa" : "fas", //Persian
"pi" : "pli", //Pali
"pl" : "pol", //Polish
"pt" : "por", //Portuguese
"ps" : "pus", //Pushto; Pashto
"qu" : "que", //Quechua
"rm" : "roh", //Romansh
"ro" : "ron", //Romanian; Moldavian; Moldovan
"rn" : "run", //Rundi
"ru" : "rus", //Russian
"sg" : "sag", //Sango
"sa" : "san", //Sanskrit
"si" : "sin", //Sinhala; Sinhalese
"sk" : "slk", //Slovak
"sl" : "slv", //Slovenian
"se" : "sme", //Northern Sami
"sm" : "smo", //Samoan
"sn" : "sna", //Shona
"sd" : "snd", //Sindhi
"so" : "som", //Somali
"st" : "sot", //Sotho, Southern
"es" : "spa", //Spanish; Castilian
"sc" : "srd", //Sardinian
"sr" : "srp", //Serbian
"ss" : "ssw", //Swati
"su" : "sun", //Sundanese
"sw" : "swa", //Swahili
"sv" : "sve", //Swedish
"ty" : "tah", //Tahitian
"ta" : "tam", //Tamil
"tt" : "tat", //Tatar
"te" : "tel", //Telugu
"tg" : "tgk", //Tajik
"tl" : "tgl", //Tagalog
"th" : "tha", //Thai
"bo" : "tib", //Tibetan
"ti" : "tir", //Tigrinya
"to" : "ton", //Tonga (Tonga Islands)
"tn" : "tsn", //Tswana
"ts" : "tso", //Tsonga
"tk" : "tuk", //Turkmen
"tr" : "tur", //Turkish
"tw" : "twi", //Twi
"ug" : "uig", //Uighur; Uyghur
"uk" : "ukr", //Ukrainian
"ur" : "urd", //Urdu
"uz" : "uzb", //Uzbek
"ve" : "ven", //Venda
"vi" : "vie", //Vietnamese
"vo" : "vol", //Volapük
"cy" : "wel", //Welsh
"wa" : "wln", //Walloon
"wo" : "wol", //Wolof
"xh" : "xho", //Xhosa
"yi" : "yid", //Yiddish
"yo" : "yor", //Yoruba
"za" : "zha", //Zhuang; Chuang
"zu" : "zul" //Zulu
};
this.timezone_list=[
'Europe/Andorra',
'Asia/Dubai',
'Asia/Kabul',
'America/Antigua',
'America/Anguilla',
'Europe/Tirane',
'Asia/Yerevan',
'Africa/Luanda',
'Antarctica/McMurdo',
'Antarctica/South_Pole',
'Antarctica/Rothera',
'Antarctica/Palmer',
'Antarctica/Mawson',
'Antarctica/Davis',
'Antarctica/Casey',
'Antarctica/Vostok',
'Antarctica/DumontDUrville',
'Antarctica/Syowa',
'Antarctica/Macquarie',
'America/Argentina/Buenos_Aires',
'America/Argentina/Cordoba',
'America/Argentina/Salta',
'America/Argentina/Jujuy',
'America/Argentina/Tucuman',
'America/Argentina/Catamarca',
'America/Argentina/La_Rioja',
'America/Argentina/San_Juan',
'America/Argentina/Mendoza',
'America/Argentina/San_Luis',
'America/Argentina/Rio_Gallegos',
'America/Argentina/Ushuaia',
'Pacific/Pago_Pago',
'Europe/Vienna',
'Australia/Lord_Howe',
'Australia/Hobart',
'Australia/Currie',
'Australia/Melbourne',
'Australia/Sydney',
'Australia/Broken_Hill',
'Australia/Brisbane',
'Australia/Lindeman',
'Australia/Adelaide',
'Australia/Darwin',
'Australia/Perth',
'Australia/Eucla',
'America/Aruba',
'Europe/Mariehamn',
'Asia/Baku',
'Europe/Sarajevo',
'America/Barbados',
'Asia/Dhaka',
'Europe/Brussels',
'Africa/Ouagadougou',
'Europe/Sofia',
'Asia/Bahrain',
'Africa/Bujumbura',
'Africa/Porto',
'America/St_Barthelemy',
'Atlantic/Bermuda',
'Asia/Brunei',
'America/La_Paz',
'America/Kralendijk',
'America/Noronha',
'America/Belem',
'America/Fortaleza',
'America/Recife',
'America/Araguaina',
'America/Maceio',
'America/Bahia',
'America/Sao_Paulo',
'America/Campo_Grande',
'America/Cuiaba',
'America/Santarem',
'America/Porto_Velho',
'America/Boa_Vista',
'America/Manaus',
'America/Eirunepe',
'America/Rio_Branco',
'America/Nassau',
'Asia/Thimphu',
'Africa/Gaborone',
'Europe/Minsk',
'America/Belize',
'America/St_Johns',
'America/Halifax',
'America/Glace_Bay',
'America/Moncton',
'America/Goose_Bay',
'America/Blanc',
'America/Montreal',
'America/Toronto',
'America/Nipigon',
'America/Thunder_Bay',
'America/Iqaluit',
'America/Pangnirtung',
'America/Resolute',
'America/Atikokan',
'America/Rankin_Inlet',
'America/Winnipeg',
'America/Rainy_River',
'America/Regina',
'America/Swift_Current',
'America/Edmonton',
'America/Cambridge_Bay',
'America/Yellowknife',
'America/Inuvik',
'America/Creston',
'America/Dawson_Creek',
'America/Vancouver',
'America/Whitehorse',
'America/Dawson',
'Indian/Cocos',
'Africa/Kinshasa',
'Africa/Lubumbashi',
'Africa/Bangui',
'Africa/Brazzaville',
'Europe/Zurich',
'Africa/Abidjan',
'Pacific/Rarotonga',
'America/Santiago',
'Pacific/Easter',
'Africa/Douala',
'Asia/Shanghai',
'Asia/Harbin',
'Asia/Chongqing',
'Asia/Urumqi',
'Asia/Kashgar',
'America/Bogota',
'America/Costa_Rica',
'America/Havana',
'Atlantic/Cape_Verde',
'America/Curacao',
'Indian/Christmas',
'Asia/Nicosia',
'Europe/Prague',
'Europe/Berlin',
'Africa/Djibouti',
'Europe/Copenhagen',
'America/Dominica',
'America/Santo_Domingo',
'Africa/Algiers',
'America/Guayaquil',
'Pacific/Galapagos',
'Europe/Tallinn',
'Africa/Cairo',
'Africa/El_Aaiun',
'Africa/Asmara',
'Europe/Madrid',
'Africa/Ceuta',
'Atlantic/Canary',
'Africa/Addis_Ababa',
'Europe/Helsinki',
'Pacific/Fiji',
'Atlantic/Stanley',
'Pacific/Chuuk',
'Pacific/Pohnpei',
'Pacific/Kosrae',
'Atlantic/Faroe',
'Europe/Paris',
'Africa/Libreville',
'Europe/London',
'America/Grenada',
'Asia/Tbilisi',
'America/Cayenne',
'Europe/Guernsey',
'Africa/Accra',
'Europe/Gibraltar',
'America/Godthab',
'America/Danmarkshavn',
'America/Scoresbysund',
'America/Thule',
'Africa/Banjul',
'Africa/Conakry',
'America/Guadeloupe',
'Africa/Malabo',
'Europe/Athens',
'Atlantic/South_Georgia',
'America/Guatemala',
'Pacific/Guam',
'Africa/Bissau',
'America/Guyana',
'Asia/Hong_Kong',
'America/Tegucigalpa',
'Europe/Zagreb',
'America/Port',
'Europe/Budapest',
'Asia/Jakarta',
'Asia/Pontianak',
'Asia/Makassar',
'Asia/Jayapura',
'Europe/Dublin',
'Asia/Jerusalem',
'Europe/Isle_of_Man',
'Asia/Kolkata',
'Indian/Chagos',
'Asia/Baghdad',
'Asia/Tehran',
'Atlantic/Reykjavik',
'Europe/Rome',
'Europe/Jersey',
'America/Jamaica',
'Asia/Amman',
'Asia/Tokyo',
'Africa/Nairobi',
'Asia/Bishkek',
'Asia/Phnom_Penh',
'Pacific/Tarawa',
'Pacific/Enderbury',
'Pacific/Kiritimati',
'Indian/Comoro',
'America/St_Kitts',
'Asia/Pyongyang',
'Asia/Seoul',
'Asia/Kuwait',
'America/Cayman',
'Asia/Almaty',
'Asia/Qyzylorda',
'Asia/Aqtobe',
'Asia/Aqtau',
'Asia/Oral',
'Asia/Vientiane',
'Asia/Beirut',
'America/St_Lucia',
'Europe/Vaduz',
'Asia/Colombo',
'Africa/Monrovia',
'Africa/Maseru',
'Europe/Vilnius',
'Europe/Luxembourg',
'Europe/Riga',
'Africa/Tripoli',
'Africa/Casablanca',
'Europe/Monaco',
'Europe/Chisinau',
'Europe/Podgorica',
'America/Marigot',
'Indian/Antananarivo',
'Pacific/Majuro',
'Pacific/Kwajalein',
'Europe/Skopje',
'Africa/Bamako',
'Asia/Rangoon',
'Asia/Ulaanbaatar',
'Asia/Hovd',
'Asia/Choibalsan',
'Asia/Macau',
'Pacific/Saipan',
'America/Martinique',
'Africa/Nouakchott',
'America/Montserrat',
'Europe/Malta',
'Indian/Mauritius',
'Indian/Maldives',
'Africa/Blantyre',
'America/Mexico_City',
'America/Cancun',
'America/Merida',
'America/Monterrey',
'America/Matamoros',
'America/Mazatlan',
'America/Chihuahua',
'America/Ojinaga',
'America/Hermosillo',
'America/Tijuana',
'America/Santa_Isabel',
'America/Bahia_Banderas',
'Asia/Kuala_Lumpur',
'Asia/Kuching',
'Africa/Maputo',
'Africa/Windhoek',
'Pacific/Noumea',
'Africa/Niamey',
'Pacific/Norfolk',
'Africa/Lagos',
'America/Managua',
'Europe/Amsterdam',
'Europe/Oslo',
'Asia/Kathmandu',
'Pacific/Nauru',
'Pacific/Niue',
'Pacific/Auckland',
'Pacific/Chatham',
'Asia/Muscat',
'America/Panama',
'America/Lima',
'Pacific/Tahiti',
'Pacific/Marquesas',
'Pacific/Gambier',
'Pacific/Port_Moresby',
'Asia/Manila',
'Asia/Karachi',
'Europe/Warsaw',
'America/Miquelon',
'Pacific/Pitcairn',
'America/Puerto_Rico',
'Asia/Gaza',
'Asia/Hebron',
'Europe/Lisbon',
'Atlantic/Madeira',
'Atlantic/Azores',
'Pacific/Palau',
'America/Asuncion',
'Asia/Qatar',
'Indian/Reunion',
'Europe/Bucharest',
'Europe/Belgrade',
'Europe/Kaliningrad',
'Europe/Moscow',
'Europe/Volgograd',
'Europe/Samara',
'Asia/Yekaterinburg',
'Asia/Omsk',
'Asia/Novosibirsk',
'Asia/Novokuznetsk',
'Asia/Krasnoyarsk',
'Asia/Irkutsk',
'Asia/Yakutsk',
'Asia/Vladivostok',
'Asia/Sakhalin',
'Asia/Magadan',
'Asia/Kamchatka',
'Asia/Anadyr',
'Africa/Kigali',
'Asia/Riyadh',
'Pacific/Guadalcanal',
'Indian/Mahe',
'Africa/Khartoum',
'Europe/Stockholm',
'Asia/Singapore',
'Atlantic/St_Helena',
'Europe/Ljubljana',
'Arctic/Longyearbyen',
'Europe/Bratislava',
'Africa/Freetown',
'Europe/San_Marino',
'Africa/Dakar',
'Africa/Mogadishu',
'America/Paramaribo',
'Africa/Juba',
'Africa/Sao_Tome',
'America/El_Salvador',
'America/Lower_Princes',
'Asia/Damascus',
'Africa/Mbabane',
'America/Grand_Turk',
'Africa/Ndjamena',
'Indian/Kerguelen',
'Africa/Lome',
'Asia/Bangkok',
'Asia/Dushanbe',
'Pacific/Fakaofo',
'Asia/Dili',
'Asia/Ashgabat',
'Africa/Tunis',
'Pacific/Tongatapu',
'Europe/Istanbul',
'America/Port_of_Spain',
'Pacific/Funafuti',
'Asia/Taipei',
'Africa/Dar_es_Salaam',
'Europe/Kiev',
'Europe/Uzhgorod',
'Europe/Zaporozhye',
'Europe/Simferopol',
'Africa/Kampala',
'Pacific/Johnston',
'Pacific/Midway',
'Pacific/Wake',
'America/New_York',
'America/Detroit',
'America/Kentucky/Louisville',
'America/Kentucky/Monticello',
'America/Indiana/Indianapolis',
'America/Indiana/Vincennes',
'America/Indiana/Winamac',
'America/Indiana/Marengo',
'America/Indiana/Petersburg',
'America/Indiana/Vevay',
'America/Chicago',
'America/Indiana/Tell_City',
'America/Indiana/Knox',
'America/Menominee',
'America/North_Dakota/Center',
'America/North_Dakota/New_Salem',
'America/North_Dakota/Beulah',
'America/Denver',
'America/Boise',
'America/Shiprock',
'America/Phoenix',
'America/Los_Angeles',
'America/Anchorage',
'America/Juneau',
'America/Sitka',
'America/Yakutat',
'America/Nome',
'America/Adak',
'America/Metlakatla',
'Pacific/Honolulu',
'America/Montevideo',
'Asia/Samarkand',
'Asia/Tashkent',
'Europe/Vatican',
'America/St_Vincent',
'America/Caracas',
'America/Tortola',
'America/St_Thomas',
'Asia/Ho_Chi_Minh',
'Pacific/Efate',
'Pacific/Wallis',
'Pacific/Apia',
'Asia/Aden',
'Indian/Mayotte',
'Africa/Johannesburg',
'Africa/Lusaka',
'Africa/Harare'
];
this.base_modules = [
"reset",
"context_menu",
"main_menu",
"alert",
"speedtest",
"layer.base",
"layer.list",
"layer.setting",
"layer.simple",
"layer.input",
"layer.sidebar",
"layer.search_box",
"layer.bottom_menu",
"layer.scrollbar",
"layer.vclub_info",
"image.viewer",
"password_input",
"series_switch",
"duration_input"
];
this.init = function(){
_debug('stb.init');
loader.append("reset");
loader.append("layer.modal_form");
this.browser = this.get_user_browser();
this.player = new player();
this.player.bind();
this.get_server_params();
this.get_stb_params();
this.init_rc();
this.handshake();
this.watchdog = new watchdog();
this.usbdisk = new usbdisk();
module.blocking.init_layer();
connection_problem.init();
authentication_problem.init();
window.addEventListener('message', function(event){
_debug('message event');
if (window.self !== window.top && event.data == 'show' && stb.cur_single_module){
_debug('stb.cur_single_module', stb.cur_single_module);
if (module[stb.cur_single_module]._show){
module[stb.cur_single_module]._show();
}else if (module[stb.cur_single_module].show){
module[stb.cur_single_module].show();
}
}
}, false);
};
this.init_auth_dialog = function(){
this.auth_dialog = new ModalForm({"title" : get_word('auth_title')});
this.auth_dialog.addItem(new ModalFormInput({
"label": get_word('auth_login'),
"name": "login",
"onchange": function () {
_debug('change');
stb.auth_dialog.resetStatus();
if (stb.msg && stb.msg.on){
stb.msg.hide();
}
}
}));
this.auth_dialog.addItem(new ModalFormInput({
"label": get_word('auth_password'),
"name": "password",
"onchange": function () {
_debug('change');
stb.auth_dialog.resetStatus();
if (stb.msg && stb.msg.on){
stb.msg.hide();
}
}
}));
var self = this;
this.auth_dialog.addItem(new ModalFormButton(
{
"value" : "OK",
"onclick" : function(){
var login = self.auth_dialog.getItemByName("login").getValue();
var password = self.auth_dialog.getItemByName("password").getValue();
_debug("login", login);
_debug("password", password);
if (['mag322', 'mag324', 'aurahd4'].indexOf(self.type.toLowerCase()) >= 0){
var device_id = stb.GetUID ? stb.GetUID('device_id', '1729452065727304', 3) : '';
var device_id2 = stb.GetUID ? (stb.GetUID(self.access_token) == stb.GetUID(self.access_token, self.access_token) ? '' : stb.GetUID('device_id', self.access_token, 5)) : '';
}
if (['mag322', 'mag324', 'aurahd4'].indexOf(self.type.toLowerCase()) === -1 || !device_id || !device_id2){
device_id = stb.GetUID ? stb.GetUID() : '';
device_id2 = stb.GetUID ? (stb.GetUID(self.access_token) == stb.GetUID(self.access_token, self.access_token) ? '' : stb.GetUID('device_id', self.access_token)) : '';
}
stb.load(
{
"type" : "stb",
"action" : "do_auth",
"login" : login,
"password" : password,
'device_id' : device_id,
'device_id2' : device_id2
},
function(result){
_debug('auth result', result);
if (result){
if (stb.user['status'] == 2){
stb.get_user_profile(true);
}else{
stb.loader.stop();
main_menu.show();
}
stb.auth_dialog.hide();
}else{
stb.auth_dialog.setStatus(get_word('auth_error'));
}
}
)
}
}
));
};
this.init_alerts = function(){
_debug('stb.init_alerts');
if (this.notice){
return;
}
this.notice = new _alert();
this.msg = new _alert('info');
this.msg.bind();
this.confirm = new _alert('confirm');
this.confirm.bind();
if (this.user['info']){
stb.msg.push(
{
msg : this.user['info']
}
);
}
};
this.get_server_params = function(){
var pattern = /(https?):\/\/([^\/]*)\/([\w\/]+)*\/([\w\/]+)\/(.)*/;
this.portal_protocol = document.URL.replace(pattern, "$1");
this.portal_ip = document.URL.replace(pattern, "$2");
this.portal_path = document.URL.replace(pattern, "$3");
_debug('stb.portal_path:', this.portal_path);
this.ajax_loader = this.portal_protocol+'://'+this.portal_ip+'/'+this.portal_path+'/server/load.php';
_debug('stb.ajax_loader:', this.ajax_loader);
};
this.get_modules = function(){
_debug('stb.get_modules');
this.load(
{
"type" : "stb",
"action" : "get_modules"
},
function(result){
_debug('stb.get_modules callback', result);
var all_modules = result.all_modules;
this.switchable_modules = result.switchable_modules;
this.disabled_modules = result.disabled_modules || [];
this.restricted_modules = result.restricted_modules || [];
this.all_modules = this.base_modules.concat(all_modules);
_debug('all_modules', this.all_modules);
var self = this;
this.all_modules = this.all_modules.filter(function(module){
return self.disabled_modules.indexOf(module) == -1;
});
if (result.template && result.template.indexOf('smart_launcher') != -1 && result['launcher_url']){
if (single_module.length == 0) {
_debug('redirect to the new launcher');
window.stop();
document.body.hide();
_debug(result['launcher_url']+'?config=' + encodeURIComponent(result['launcher_profile_url']+'?uid=' + this.user['id'] + '&language='+this.stb_lang_orig+'&_='+(new Date().getTime())));
window.location = result['launcher_url']+'?config=' + encodeURIComponent(result['launcher_profile_url']+'?uid=' + this.user['id'] + '&language='+this.stb_lang_orig+'&_='+(new Date().getTime()));
return;
}else{
result.template = 'default';
}
}
stb.loader.show();
this.check_graphic_res();
loader.set_template(result.template);
loader.append_style('load_bar');
loader.append_style('blocking');
if (result.supermodule){
this.supermodule = result.supermodule;
loader.add(this.base_modules.concat([result.supermodule]));
}else{
loader.add(this.all_modules);
}
if (window.self !== window.top){
// notify parent to show this window
parent && parent.postMessage('show', '*');
}
if (typeof(stbWebWindow) != 'undefined' && windowId != 1){
// notify parent to show this window
stbWebWindow.messageSend(1, 'app:ready');
}
},
this
);
};
this.load_account_modules = function(){
_debug('stb.load_account_modules');
if (this.all_modules){
return;
}
this.load(
{
"type" : "stb",
"action" : "get_modules"
},
function(result){
_debug('stb.load_account_modules callback', result);
var all_modules = result.all_modules;
all_modules = all_modules.filter(function(module){
return module == 'account';
});
if (!all_modules){
return;
}
this.all_modules = this.base_modules.concat(all_modules);
_debug('all_modules', this.all_modules);
if (result.supermodule){
this.supermodule = result.supermodule;
loader.add(this.base_modules.concat([result.supermodule]));
}else{
loader.add(this.all_modules);
}
},
this
);
};
this.update_modules = function(){
_debug('stb.update_modules');
this.load(
{
"type" : "stb",
"action" : "get_modules"
},
function(result){
_debug('update_modules result', result);
this.switchable_modules = result.switchable_modules || [];
this.disabled_modules = result.disabled_modules || [];
this.restricted_modules = result.restricted_modules || [];
},
this
);
};
this.is_restricted_module = function(module){
_debug('stb.is_restricted_module');
_debug('module.layer_name', module.layer_name);
_debug('this.additional_services_on', this.additional_services_on);
if (this.restricted_modules.indexOf(module.layer_name) >= 0){
return true;
}
if (!this.additional_services_on && this.switchable_modules.indexOf(module.layer_name) >= 0){
return true;
}
return false;
};
this.check_additional_services = function(param){
_debug('check_additional_services', param);
this.additional_services_on = parseInt(param, 10);
};
this.get_stb_params = function (){
try{
this.video_mode = stb.RDir('vmode');
//this.graphic_mode = stb.RDir('gmode');
//this.mac = stb.RDir('MACAddress').toUpperCase().clearnl();
try{
this.mac = stb.GetDeviceMacAddress().toUpperCase().clearnl();
}catch(e){
_debug('this.mac use old API');
this.mac = stb.RDir('MACAddress').toUpperCase().clearnl();
}
this.ip = stb.RDir('IPAddress').clearnl();
try{
this.serial_number = stb.GetDeviceSerialNumber().clearnl();
}catch(e){
_debug('this.serial_number use old API');
this.serial_number = stb.RDir('SerialNumber').clearnl();
}
try{
this.type = stb.GetDeviceModelExt().clearnl();
}catch(e){
_debug('this.type use old API');
this.type = stb.RDir('Model').clearnl();
}
this.header_ua_ext.push('Model: ' + this.type);
this.stb_lang = this.stb_lang_orig = stb.RDir('getenv language').clearnl();
this.timezone = stb.RDir('getenv timezone_conf').clearnl();
if (this.timezone_list.indexOf(this.timezone) === -1) {
stb.RDir('setenv timezone_conf "" ');
this.timezone = stb.RDir('getenv timezone_conf').clearnl();
}
this.ntp_server = stb.RDir('getenv ntpurl').clearnl();
this.firmware_version = this.image_version = stb.RDir('ImageVersion').clearnl();
this.image_desc = stb.RDir('ImageDescription').clearnl();
this.image_date = stb.RDir('ImageDate').clearnl();
this.version = 'ImageDescription: ' + this.image_desc + '; ImageDate: ' + this.image_date + '; PORTAL version: '+ver+'; API Version: ' + stb.Version();
this.hw_version = stb.GetDeviceVersionHardware ? stb.GetDeviceVersionHardware() : '';
var mtdparts = stb.RDir('getenv mtdparts').clearnl();
this.num_banks = mtdparts.indexOf('RootFs2') > 0 ? 2 : 1;
if (this.graphic_mode >= 720){
_debug('gSTB.SetObjectCacheCapacities');
gSTB.SetObjectCacheCapacities(1000000, 7000000, 10000000);
}
if (stb.GetWifiLinkStatus){
var link = [];
if (stb.GetLanLinkStatus()){
link.push('Ethernet');
}
if (stb.GetWifiLinkStatus()){
link.push('WiFi');
}
this.header_ua_ext.push('Link: '+link.join(','));
}
}catch(e){
_debug(e);
}
if (debug){
if (_GET['mac']){
this.mac = _GET['mac'];
this.set_cookie('mac_emu', 1);
}
this.set_cookie('debug', 1);
if (_GET['debug_key']){
this.set_cookie('debug_key', _GET['debug_key']);
}
}
this.set_cookie('mac', this.mac);
this.set_cookie('stb_lang', this.stb_lang);
this.set_cookie('timezone', this.timezone);
this.set_cookie('adid', this.get_ad_id());
_debug('this.video_mode:', this.video_mode);
_debug('this.mac:', this.mac);
_debug('this.serial_number:', this.serial_number);
_debug('this.stb_lang:', this.stb_lang);
_debug('this.timezone:', this.timezone);
_debug('this.ntp_server:', this.ntp_server);
_debug('this.ip:', this.ip);
_debug('this.type:', this.type);
_debug('this.version:', this.version);
_debug('this.hd:',this.hd);
};
this.set_cookie = function(name, val){
document.cookie = name + '=' + encodeURIComponent(val) + '; path=/;';
};
this.delete_cookie = function(name){
document.cookie = name + '=; path=/; expires=Thu, 01-Jan-1970 00:00:01 GMT;';
};
this.get_localization = function(){
_debug('stb.get_localization');
this.load(
{
"type" : "stb",
"action" : "get_localization"
},
function(result){
word = result;
//this.clock.start();
if (!this.profile.clock_format) {
this.profile.clock_format = (get_word('time_format') && this.clock_formats[get_word('time_format')]) ? this.clock_formats[get_word('time_format')]: '24h';
}
this.user_init(this.profile);
this.clock.start();
this.player.ClockOnVideo.init();
connection_problem.refresh_msg();
authentication_problem.refresh_msg();
},
this
)
};
this.load = function(params, var_args){
_debug('stb.load()');
_debug('params:', params);
var callback = arguments[1];
var context = window;
var method = 'GET';
if (arguments.length == 3){
context = arguments[2];
}
if (arguments.length == 4){
method = arguments[3];
}
try{
var req = new XMLHttpRequest();
if (method == 'POST'){
req.open("POST", this.ajax_loader + '?JsHttpRequest='+(new Date().getTime())+'-xml', true);
req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
}else{
req.open("GET", this.ajax_loader + '?' + this.params_to_query(params), true);
}
if (this.header_ua_ext.length > 0){
req.setRequestHeader("X-User-Agent", stb.header_ua_ext.join('; '));
}
if (this.access_token){
req.setRequestHeader("Authorization", "Bearer " + this.access_token);
}
req.addEventListener("error", function(){
console.log('XMLHttpRequest error event');
connection_problem.show();
}, false);
req.onreadystatechange = function(){
if (req.readyState == 4) {
if (req.status == 200) {
try{
var result = JSON.parse(req.responseText);
req = null;
}catch(er){
_debug('req.responseText', req.responseText);
if (req.responseText == 'Authorization failed.' || req.responseText == 'Access denied.'){
if (stb.auth_access && req.responseText == 'Authorization failed.'){
keydown_observer.emulate_key(key.MENU);
main_menu.hide();
stb.loader.show();
stb.key_lock = false;
if (!stb.auth_dialog){
stb.init_auth_dialog();
}
stb.auth_dialog.show();
}else if (req.responseText == 'Access denied.'){
stb.cut_off();
}else if (!stb.auth_dialog || !stb.auth_dialog.on){
authentication_problem.show();
}
}
throw new Error(er);
}
_debug(result.text);
if (connection_problem.on && stb.cur_place == 'tv' && stb.player.on){
stb.player.play_last();
}
connection_problem.hide();
authentication_problem.hide();
callback.call(context, result.js);
result = null;
} else if (req.status == 0){
console.log('Abort request');
//connection_problem.show();
}else{
connection_problem.show();
console.log('req.status: '+req.status);
console.log(req.responseText);
}
req = null;
}
};
if (method == 'POST'){
req.send(this.params_to_query(params));
}else{
req.send(null);
}
}catch(e){
req = null;
console.log(e);
}
return req;
};
this.params_to_query = function(params){
var query = [];
if (!params){
return null;
}
//params['JsHttpRequest'] = (new Date().getTime())+'-xml';
params['JsHttpRequest'] = '1-xml';
for (var key in params){
if (params.hasOwnProperty(key)){
if (params[key] === false){
params[key] = 0;
}else if (params[key] === true){
params[key] = 1;
}
query.push(key + '=' + params[key]);
}
}
return query.join('&');
};
this.preload_images = function(){
this.load(
{
'type' : 'stb',
'action' : 'get_preload_images',
'gmode' : resolution_prefix.substr(1)
},
function(result){
_debug('on get_preload_images', result);
if (result != null){
for (var i=0; i<result.length; i++){
stb.images[i] = new Image();
stb.images[i].src = result[i];
stb.images.onload = function(){};
}
}
}
);
};
this.hashCode = function(s){
return s.split("").reduce(function(a,b){a=((a<<5)-a)+b.charCodeAt(0);return a&a},0);
};
this.get_saved_access_token = function(){
_debug('stb.get_saved_access_token');
if (stb.access_token){
return stb.access_token;
}
var file = 'stalker_'+this.hashCode(window.location.origin+window.location.pathname);
if (!stb.LoadUserData){
return;
}
var data = stb.LoadUserData(file) || "{}";
try{
data = JSON.parse(data)
}catch(e){
_debug(e);
}
data = data || {};
return data.token;
};
this.get_ad_id = function(){
_debug('stb.get_ad_id');
var file = 'ad.json';
if (typeof(gSTB) == "undefined"){
return "";
}
var data = stb.LoadUserData(file) || "{}";
try{
data = JSON.parse(data)
}catch(e){
_debug(e);
}
data = data || {};
_debug('data', data);
if (!data.hasOwnProperty('tracking_id')){
data.tracking_id = md5(this.mac + (new Date().getTime()));
stb.SaveUserData(file, JSON.stringify(data));
}
_debug('data.tracking_id', data.tracking_id);
return data.tracking_id;
};
this.save_access_token = function(){
_debug('stb.save_access_token');
var file = 'stalker_'+this.hashCode(window.location.origin+window.location.pathname);
if (!stb.SaveUserData){
return;
}
stb.SaveUserData(file, JSON.stringify({"token" : this.access_token}));
};
this.handshake = function(){
_debug('stb.handshake');
var prehash = stb.GetHashVersion1 ? stb.GetHashVersion1(this.type, this.version.substr(0, 56)) : 0;
this.load(
{
"type" : "stb",
"action" : "handshake",
"token" : this.get_saved_access_token() || '',
"prehash" : prehash
},
function(result){
_debug('on handshake', result);
this.access_token = result.token || '';
this.random = result.random || '';
this.not_valid_token = result.not_valid || 0;
_debug('this.access_token', this.access_token);
if (typeof(stbWebWindow) != 'undefined' && windowId != 1){
stbWebWindow.messageSend(1, 'stalker:access_token', this.access_token);
}
if (window.self !== window.top) {
parent.postMessage('access_token:'+this.access_token, '*');
}
this.get_user_profile(false, prehash);
},
this
)
};
this.get_user_profile = function(auth_second_step, prehash){
_debug('this.get_user_profile', auth_second_step, prehash);
if (['mag322', 'mag324', 'aurahd4'].indexOf(this.type.toLowerCase()) >= 0){
var device_id = stb.GetUID ? stb.GetUID('device_id', '1729452065727304', 3) : '';
var device_id2 = stb.GetUID ? (stb.GetUID(this.access_token) == stb.GetUID(this.access_token, this.access_token) ? '' : stb.GetUID('device_id', this.access_token, 5)) : '';
}
if (['mag322', 'mag324', 'aurahd4'].indexOf(this.type.toLowerCase()) === -1 || !device_id || !device_id2){
device_id = stb.GetUID ? stb.GetUID() : '';
device_id2 = stb.GetUID ? (stb.GetUID(this.access_token) == stb.GetUID(this.access_token, this.access_token) ? '' : stb.GetUID('device_id', this.access_token)) : '';
}
var metrics = {mac:this.mac, sn:this.serial_number, model:this.type, type:"STB", uid:device_id2, random:this.random};
_debug('metrics', JSON.stringify(metrics));
this.load(
{
'type' : 'stb',
'action' : 'get_profile',
'hd' : this.hd,
'ver' : this.version,
'num_banks' : this.num_banks,
'sn' : this.serial_number,
'stb_type' : this.type,
'client_type' : 'STB',
'image_version' : this.image_version,
'video_out' : (stb.GetHDMIConnectionState ? (stb.GetHDMIConnectionState() == 0 && window.innerHeight <= 576 ? "rca" : "hdmi") : ""),
'device_id' : device_id,
'device_id2' : device_id2,
'signature' : stb.GetUID ? stb.GetUID(this.random) : '',
'auth_second_step' : auth_second_step ? 1 : 0,
'hw_version' : this.hw_version,
'not_valid_token' : this.not_valid_token ? 1 : 0,
'metrics' : encodeURIComponent(JSON.stringify(metrics)),
'hw_version_2' : stb.GetHashVersion1 ? stb.GetHashVersion1(JSON.stringify(metrics), this.random) : '',
'timestamp' : Math.round(new Date().getTime()/1000),
'api_signature' : typeof(gSTB) == 'undefined' ? 0 : (function(){var p=0;for(var d in gSTB){if(gSTB.hasOwnProperty(d)){p++}} return p})(),
'prehash' : prehash
},
function(result){
if (result != null){
this.profile = result;
//this.user_init(result);
this.get_localization();
}
},
this
)
};
this.get_user_browser = function(){
var ua = navigator.userAgent.toLowerCase();
if (ua.indexOf("webkit") != -1) {
return "webkit"
}else if (ua.indexOf("firefox") != -1){
return "firefox"
}else{
return "na"
}
};
this.check_image_version = function(){
_debug('this.image_version:', this.image_version);
_debug('this.image_desc:', this.image_desc);
_debug('this.image_date:', this.image_date);
_debug('this.num_banks:', this.num_banks);
_debug('this.hw_version:', this.hw_version);
_debug('checking conditions');
_debug('typeof stb.user[autoupdate]', typeof(stb.user['autoupdate']));
_debug('stb.user[autoupdate] is array', stb.user['autoupdate'] && stb.user['autoupdate'] instanceof Array);
if (stb.user['autoupdate'] && stb.user['autoupdate'] instanceof Array){
stb.user['autoupdate'].some(function(element){
return stb.check_update(element);
});
}
};
this.check_update = function(params){
_debug('stb.check_update', params);
if (typeof params == 'object' &&
(
(params.require_image_version != '' && params.require_image_version != this.image_version) ||
(params.require_image_date != '' && params.require_image_date != this.image_date)
) &&
(
(params.image_version_contains == '' || params.image_version_contains == this.image_version) &&
(params.image_description_contains == '' || this.image_desc.indexOf(params.image_description_contains) != -1) &&
(params.hardware_version_contains == '' || this.hw_version.indexOf(params.hardware_version_contains) != -1)
)
){
_debug('checking conditions 2');
if ((this.num_banks == 2 || ['MAG256', 'MAG257', 'MAG322', 'MAG323', 'MAG324', 'MAG325', 'MAG349', 'MAG350', 'MAG351', 'MAG352', 'MAG425'].indexOf(this.type) >= 0) && params.update_type == 'http_update'){
try{
_debug('this.user[update_url]', this.user['update_url']);
_debug('stb.user[autoupdate]', stb.user['autoupdate']);
this.user['update_url'] = this.user['update_url'].replace(/\/imageupdate$/, '/'+params.prefix+'imageupdate');
_debug('this.user[update_url] 2', this.user['update_url']);
stbUpdate.startAutoUpdate(this.user['update_url'], false);
}catch(e){
_debug(e);
}
}else if (params.update_type == 'reboot_dhcp'){
_debug('RebootDHCP');
stb.ExecAction('RebootDHCP');
}
return true;
}
return false;
};
this.user_init = function(user_data){
stb.loader.add_pos(this.load_step, 'call stb.user_init');
this.user = user_data;
_debug('this.user:', user_data);
_debug('this.user[deny_720p_gmode_on_mag200]', this.user['deny_720p_gmode_on_mag200']);
_debug('this.type', this.type);
_debug('screen.height', screen.height);
if (this.user['deny_720p_gmode_on_mag200'] && this.type == 'MAG200' && screen.height >= 720){
stb.ExecAction('graphicres 720');
_debug('Reboot');
stb.ExecAction('reboot');
}
try{
gSTB.StandByMode = 1; // always active stand-by
}catch(e){
_debug(e);
}
screensaver.init();
if (this.user['allowed_stb_types'] && !this.profile['strict_stb_type_check'] && this.user['allowed_stb_types'].indexOf('aurahd') !== -1){
var cut_type = this.type.indexOf('AuraHD') != -1 ? 'AuraHD' : this.type;
}else{
cut_type = this.type;
}
if (this.user['allowed_stb_types'] && this.user['allowed_stb_types'].indexOf(cut_type.toLowerCase()) == -1 && !_GET['debug_key']){
stb.loader.stop();
this.cut_off(get_word('stb_type_not_supported'));
return;
}
if (['MAG200', 'MAG256', 'MAG257', 'MAG260', 'MAG322', 'MAG323', 'MAG324', 'MAG324C', 'MAG325', 'MAG349', 'MAG350', 'MAG351', 'MAG352', 'MAG424', 'MAG424А', 'MAG425', 'AuraHD4', 'IM2100', 'IM2101', 'IM2102', 'IM4410'].indexOf(this.type) === -1 && !_GET['debug_key']){
var match = /Player Engine version: (\S+)/.exec(this.version);
_debug('match', match);
if (match && match.length == 2){
var player_version = parseInt((match[1] + '').replace('0x', '').replace(/[^a-f0-9]/gi, ''), 16);
_debug('player_version', player_version);
}
if (!match || match.length != 2 || player_version < 1382){
stb.loader.stop();
this.cut_off(get_word('outdated_firmware'));
if (['MAG200', 'MAG245','MAG245D', 'MAG250', 'MAG254', 'MAG255', 'MAG256', 'MAG257', 'MAG270', 'MAG275', 'MAG322', 'MAG323', 'MAG324', 'MAG325', 'MAG349', 'MAG350', 'MAG351', 'MAG352', 'WR320', 'IP_STB_HD'].indexOf(this.type) >= 0 || this.type.indexOf('AuraHD') != -1){
this.check_image_version();
}
return;
}
}
if (!this.ntp_server && this.user['stb_ntp_server']
|| this.ntp_server && this.user['stb_ntp_server'] && this.ntp_server != this.user['stb_ntp_server'] && this.user['overwrite_stb_ntp_server']){
_debug('set ntpurl '+this.user['stb_ntp_server']);
try{
stb.RDir('setenv ntpurl '+this.user['stb_ntp_server']);
_debug('reboot');
stb.ExecAction('reboot');
return;
}catch(e){
_debug(e);
}
}
if (this.user['store_auth_data_on_stb']){
this.save_access_token();
}
if (this.user['status'] == 2){
// redirect to the new launcher without auth
if (this.user['template'] && this.user['template'].indexOf('smart_launcher') != -1 && single_module.length == 0){
_debug('redirect to the new launcher');
window.stop();
document.body.hide();
_debug(this.user['launcher_url']+'?config=' + encodeURIComponent(this.user['launcher_profile_url']+'?uid=' + this.user['id'] + '&language='+this.stb_lang_orig+'&_='+(new Date().getTime())));
window.location = this.user['launcher_url']+'?config=' + encodeURIComponent(this.user['launcher_profile_url']+'?uid=' + this.user['id'] + '&language='+this.stb_lang_orig+'&_='+(new Date().getTime()));
return;
}
this.auth_access = true;
this.init_auth_dialog();
this.key_lock = false;
stb.loader.show();
this.auth_dialog.show();
loader.append('alert');
}else if (this.user['status'] == 0){
try{
this.usbdisk.init();
this.preload_images();
this.player.volume.set_level(parseInt(this.user['volume'], 10));
this.player.setup_rtsp(this.user['rtsp_type'], this.user['rtsp_flags']);
this.player.ad_indication.init();
this.player.ad_skip_indication.init();
if (this.user.hasOwnProperty('cas_type')){
this.player.set_cas(this.user);
}
if (this.user.hasOwnProperty('hls_fast_start')){
this.player.set_hls_fast_start(this.user.hls_fast_start);
}
this.user.fav_itv_on = parseInt(this.user.fav_itv_on, 10);
this.user['aspect'] = parseInt(this.user['aspect'], 10);
stb.player.ch_aspect_idx = this.aspect_array.getIdxByVal('mode', this.user['aspect']);
this.user['audio_out'] = parseInt(this.user['audio_out'], 10);
stb.user['playback_limit'] = parseInt(this.user['playback_limit'], 10);
this.user['screensaver_delay'] = parseInt(this.user['screensaver_delay'], 10);
this.user['watchdog_timeout'] = parseInt(this.user['watchdog_timeout'], 10);
this.user['tv_playback_retry_limit'] = parseInt(this.user['tv_playback_retry_limit'], 10);
this.user['timeslot'] = parseFloat(this.user['timeslot']);
this.user['timeslot_ratio'] = parseFloat(this.user['timeslot_ratio']);
this.auth_access = this.user['auth_access'] ? true : false;
this.profile['plasma_saving_timeout'] = parseInt(this.profile['plasma_saving_timeout'], 10);
this.profile['ts_enable_icon'] = parseInt(this.profile['ts_enable_icon'], 10);
stb.advert.config = this.user['advert'] || [];
if (stb.advert.config){
for (var i=0; i<stb.advert.config.length; i++){
if (stb.advert.config[i]['places'][104]){
stb.user['force_ch_link_check'] = true;
break;
}
}
}
_debug('stb.user[force_ch_link_check]', stb.user['force_ch_link_check']);
if (!this.user['update_url']){
try{
this.user['update_url'] = stb.RDir('getenv update_url').clearnl();
}catch(err){
_debug(err);
}
}
var aspect_idx = this.aspect_array.getIdxByVal('alias', this.profile['tv_channel_default_aspect']);
if (aspect_idx === null){
this.profile['tv_channel_default_aspect'] = 0x10;
}else{
this.profile['tv_channel_default_aspect'] = this.aspect_array[aspect_idx].mode;
}
_debug('this.user[update_url]', this.user['update_url']);
if (['MAG200', 'MAG245','MAG245D', 'MAG250', 'MAG254', 'MAG255', 'MAG256', 'MAG257', 'MAG270', 'MAG275', 'MAG322', 'MAG323', 'MAG324', 'MAG325', 'MAG349', 'MAG350', 'MAG351', 'MAG352', 'WR320', 'IP_STB_HD'].indexOf(this.type) >= 0 || this.type.indexOf('AuraHD') != -1){
this.check_image_version();
}
if (single_module.indexOf('tv') != -1 || single_module.length == 0) {
this.epg_loader.start();
}
this.locale = this.user.locale;
if (!this.user['pri_audio_lang']){
this.user['pri_audio_lang'] = this.lang_map.hasOwnProperty(this.stb_lang) ? this.lang_map[this.stb_lang] : '';
this.user['sec_audio_lang'] = this.lang_map.hasOwnProperty(this.user.stb_lang) ? this.lang_map[this.user.stb_lang] : '';
if (this.user['pri_audio_lang'] == this.user['sec_audio_lang']){
var default_lang = this.user['default_locale'].substr(0, 2);
_debug('default_lang', default_lang);
this.user['sec_audio_lang'] = this.lang_map.hasOwnProperty(default_lang) ? this.lang_map[default_lang] : '';
}
}
this.player.set_audio_langs(
this.user['pri_audio_lang'],
this.user['sec_audio_lang']
);
if (!this.user['pri_subtitle_lang'] && !this.user['sec_subtitle_lang'] && stb.profile['always_enabled_subtitles']){
this.user['pri_subtitle_lang'] = this.user['pri_audio_lang'];
this.user['sec_subtitle_lang'] = this.user['sec_audio_lang'];
}
this.player.set_subtitle_langs(
this.user['pri_subtitle_lang'],
this.user['sec_subtitle_lang'],
this.user['subtitle_size'],
this.user['subtitle_color']
);
this.stb_lang = this.user.stb_lang;
this.aspect_idx = this.aspect_array.getIdxByVal('mode', this.user['aspect']);
this.check_additional_services(this.user['additional_services_on']);
if (this.aspect_idx == null){
this.aspect_idx = 0;
}
try{
var timezone = stb.RDir('getenv timezone_conf');
if (this.timezone_list.indexOf(timezone) === -1) {
stb.RDir('setenv timezone_conf "" ');
timezone = stb.RDir('getenv timezone_conf');
}
_debug('timezone', timezone);
if (this.user['default_timezone'] && !timezone){
_debug('setenv timezone_conf '+this.user['default_timezone']);
stb.RDir('setenv timezone_conf '+this.user['default_timezone']);
}
_debug('stb.GetBrightness before', stb.GetBrightness());
_debug('stb.GetContrast before', stb.GetContrast());
_debug('stb.GetSaturation before', stb.GetSaturation());
if (this.stb_type == 'MAG200'){
stb.SetBrightness(127);
stb.SetContrast(-27);
stb.SetSaturation(100);
}
_debug('stb.GetBrightness after', stb.GetBrightness());
_debug('stb.GetContrast after', stb.GetContrast());
_debug('stb.GetSaturation after', stb.GetSaturation());
stb.SetAspect(this.user['aspect']);
stb.SetBufferSize(this.user['playback_buffer_size'], this.user['playback_buffer_bytes']);
this.user['playback_buffer_size'] = this.user['playback_buffer_size'] / 1000;
stb.SetupSPdif(this.user['audio_out']);
stb.EnableAppButton && stb.EnableAppButton(false);
//stb.SetWebProxy(string proxy_addr,int proxy_port,string user_name,string passwd,string exclude_list);
if (this.user['web_proxy_host']){
stb.SetWebProxy && stb.SetWebProxy(this.user['web_proxy_host'], this.user['web_proxy_port'], this.user['web_proxy_user'], this.user['web_proxy_pass'], this.user['web_proxy_exclude_list']);
}
stb.EnableServiceButton(!!this.user['enable_service_button']);
if (gSTB.SetSettingsInitAttr){
gSTB.SetSettingsInitAttr(JSON.stringify({
url: '/home/web/system/settings/index.html',
backgroundColor: '#000'
}));
}
stb.EnableVKButton(true);
if (gSTB.SetLedIndicatorLevels && this.user.hasOwnProperty('default_led_level') && this.user.hasOwnProperty('standby_led_level')){
_debug('this.user[default_led_level]', parseInt(this.user['default_led_level'], 10));
_debug('this.user[standby_led_level]', parseInt(this.user['standby_led_level'], 10));
gSTB.SetLedIndicatorMode(1);
gSTB.SetLedIndicatorLevels(parseInt(this.user['default_led_level'], 10), parseInt(this.user['standby_led_level'], 10));
}
var mc_proxy_enabled = stb.RDir('getenv mc_proxy_enabled');
var mc_proxy_url = stb.RDir('getenv mc_proxy_url');
if (mc_proxy_enabled == 'true' && mc_proxy_url){
this.player.mc_proxy_url = mc_proxy_url;
}
if (typeof(stb.SetCheckSSLCertificate) == 'function' && typeof(this.profile['check_ssl_certificate']) != 'undefined' && this.profile['check_ssl_certificate'] == 0) {
_debug('SetCheckSSLCertificate = 0');
stb.SetCheckSSLCertificate(0);
}
}catch(e){
_debug(e);
}
this.set_storages(this.user['storages']);
if (single_module.length && single_module.indexOf('tv') == -1) {
stb.loader.add_pos(this.load_step, 'skip channels loading');
stb.loader.add_pos(this.load_step, 'skip fav_channels loading');
}else{
this.load_channels();
}
this.load_recordings();
}catch(e){
_debug(e);
}
}else if(this.user['status'] == 1){
if (this.ntp_server && this.user.hasOwnProperty('ntp_wait_timeout') && this.ntp_wait_time <= this.user['ntp_wait_timeout']){
_debug('wait for ntp');
_debug('this.ntp_wait_time', this.ntp_wait_time);
window.setTimeout(function(){
stb.get_user_profile();
}, 10*1000);
this.ntp_wait_time += 10;
return;
}
stb.loader.stop();
this.cut_off(this.user.hasOwnProperty('block_msg') ? this.user['block_msg'] : '');
loader.append('alert');
if (this.user.hasOwnProperty('enable_settings') && this.user['enable_settings']){
stb.EnableServiceButton(true);
}
if (this.user['portal_disabled']){
this.portal_status_interval = window.setInterval(function(){
stb.load(
{
"type" : "stb",
"action" : "check_portal_status"
},
function(result){
_debug('on check_portal_status', result);
if (result){
window.clearInterval(stb.portal_status_interval);
window.location = window.location;
}
}
)
}, 60000);
}
}
this.watchdog.run(this.user['watchdog_timeout'], this.user['timeslot']);
};
this.on_first_menu_show = function(){};
this.post_loading_handle = function(){
_debug('stb.post_loading_handle');
_debug('this.user[display_menu_after_loading]', this.user['display_menu_after_loading']);
if (this.GetHDMIConnectionState){
this.hdmi_on = this.GetHDMIConnectionState() == 2;
}
_debug('this.hdmi_on', this.hdmi_on);
this.key_lock = false;
if (single_module.length > 0 && module[single_module[0]]){
stb.cur_single_module = single_module[0];
if (module[single_module[0]]._show){
module[single_module[0]]._show();
}else if (module[single_module[0]].show){
module[single_module[0]].show();
}
return;
}
if (module.tv){
this.player.init_first_channel();
}
if (this.user['display_menu_after_loading'] || focus_module || !this.player.channels || this.player.channels.length == 0 || !module.tv){
main_menu.show();
this.on_first_menu_show();
}else{
this.player.first_play();
}
};
/**
* @deprecated
* @param storages
*/
this.mount_home_dir = function(storages){
_debug('stb.mount_home_dir: ', storages);
this.set_storages(storages);
stb.loader.add_pos(this.load_step, 'call stb.mount_home_dir');
for(var i in storages){
if (storages.hasOwnProperty(i)){
stb.ExecAction('make_dir /media/'+storages[i]['storage_name']);
var mount_cmd = '"'+storages[i]['storage_ip']+':'+storages[i]['nfs_home_path']+stb.mac+'" /media/'+storages[i]['storage_name'];
_debug('mount_cmd: '+mount_cmd);
try{
stb.ExecAction('mount_dir '+mount_cmd);
}catch(e){
_debug(e);
}
}
}
};
this.set_storages = function(storages){
_debug('stb.set_storages', storages);
this.storages = this.user['storages'] = storages;
};
this.remount_storages = function(callback){
_debug('stb.remount_storages');
stb.load(
{
"type" : "stb",
"action" : "get_storages"
},
function(result){
_debug('storages', result);
this.set_storages(result);
//this.mount_home_dir(this.user['storages']);
callback();
},
this
);
};
this.Mount = function(link_cmd){
_debug('stb.Mount', link_cmd);
var mounted_storage = link_cmd.replace(/[\s\S]*\/media\/(.*)\/(.*)/ , "$1");
if (mounted_storage == this.mounted_storage){
_debug('clear Umount Timeout', mounted_storage);
window.clearTimeout(stb.player.umount_timer);
}
this.mounted_storage = mounted_storage;
_debug('stb.mounted_storage', this.mounted_storage);
try{
gSTB.ExecAction('make_dir /media/'+this.mounted_storage);
var mount_cmd = '"' + this.storages[this.mounted_storage]['storage_ip'] + ':' + this.storages[this.mounted_storage]['nfs_home_path'] + this.mac + '" /media/' + this.mounted_storage;
gSTB.ExecAction('mount_dir '+mount_cmd);
}catch(e){
_debug(e);
}
};
this.Umount = function(storage){
_debug('stb.Umount', storage);
//_debug('stb.mounted_storage', this.mounted_storage);
if (storage){
try{
gSTB.ExecAction('umount_dir /media/'+storage);
//this.mounted_storage = '';
}catch(e){
_debug(e);
}
}
};
this.switchPower = function(){
_debug('stb.switchPower()');
if (stb.GetStandByStatus){
this.power_off = stb.GetStandByStatus();
}
if(this.power_off){
//this.StandBy(0);
this.power_off = false;
keydown_observer.emulate_key(key.MENU);
this.clock && this.clock.show && this.clock.show();
this.StandBy(0);
if (!this.user['display_menu_after_loading'] && !module.blocking.on){
main_menu.hide();
stb.player.play_last();
}
screensaver.toggle.call(screensaver);
}else{
keydown_observer.emulate_key(key.MENU);
this.StandBy(1);
this.power_off = true;
this.setFrontPanel('');
screensaver.hide.call(screensaver);
window.clearTimeout(screensaver.activate_timer);
}
};
this.get_image_version = function(){
_debug('get_image_version');
var ver = '';
try{
var full_ver = stb.RDir('Img_Ver');
_debug('full_ver:', full_ver);
var pattern = /ImageVersion:\s([^\s]*)\s(.*)/;
var short_ver = full_ver.replace(pattern, "$1");
if (short_ver.length < 30){
ver = short_ver.clearnl();
}
_debug('ver:', ver);
}catch(e){
_debug(e);
}
return ver;
};
this.check_graphic_res = function(){
_debug('check_graphic_res');
try{
var res = {
"r480" :{
"w" : 720,
"h" : 480,
"window_w" : 720,
"window_h" : 480,
"prefix" : '_480'
},
"r576" :{
"w" : 720,
"h" : 576,
"window_w" : 720,
"window_h" : 576,
"prefix" : ''
},
"r720" : {
"w" : 1280,
"h" : 720,
"window_w" : 1280,
"window_h" : 720,
"prefix" : '_720'
},
"r1080" : {
"w" : 1920,
"h" : 1080,
"window_w" : 1280,
"window_h" : 720,
"prefix" : '_720'
}
};
if (typeof(Proxy) !== "undefined" && gSTB && typeof(gSTB.prototype) === "function"){
var gres = window.innerHeight;
}else{
gres = screen.height;
}
this.graphic_mode = gres;
_debug('gres', gres);
if (gres == 1080 && !window.referrer){
stb.ExecAction('graphicres 1280');
_debug('Reboot');
stb.ExecAction('reboot');
}else if (!res["r"+gres]){
stb.ExecAction('graphicres 720');
debug('Reboot');
stb.ExecAction('reboot');
}
}catch(e){
_debug(e);
}
};
this.resize_window = function(){
_debug('resize_window');
try{
var res = {
"r480" :{
"w" : 720,
"h" : 480,
"window_w" : 720,
"window_h" : 480,
"prefix" : '_480'
},
"r576" :{
"w" : 720,
"h" : 576,
"window_w" : 720,
"window_h" : 576,
"prefix" : ''
},
"r720" : {
"w" : 1280,
"h" : 720,
"window_w" : 1280,
"window_h" : 720,
"prefix" : '_720'
},
"r1080" : {
"w" : 1920,
"h" : 1080,
"window_w" : 1920,
"window_h" : 1080,
"prefix" : '_720'
}
};
if (typeof(Proxy) !== "undefined" && gSTB && typeof(gSTB.prototype) === "function"){
var gres = window.innerHeight;
}else{
gres = screen.height;
}
this.graphic_mode = gres;
_debug('gres', gres);
if (res["r"+gres]){
resolution_prefix = res["r"+gres].prefix;
_debug('resolution_prefix', resolution_prefix);
window.resizeTo(res["r"+gres].window_w, res["r"+gres].window_h);
_debug('window.moveTo', (res["r"+gres].w - res["r"+gres].window_w)/2, (res["r"+gres].h - res["r"+gres].window_h)/2);
window.moveTo((res["r"+gres].w - res["r"+gres].window_w)/2, (res["r"+gres].h - res["r"+gres].window_h)/2);
}
}catch(e){
_debug(e);
}
};
this.load_channels = function(){
this.load(
{
'type' : 'itv',
'action': 'get_all_channels',
'force_ch_link_check': stb.user['force_ch_link_check']
},
function(result){
_debug('all_channels', result);
stb.loader.add_pos(this.load_step, 'channels loaded');
this.player.channels = result.data || [];
_debug('this.player.is_tv', this.player.is_tv);
_debug('this.player.cur_media_item', this.player.cur_media_item);
_debug('this.player.cur_tv_item', this.player.cur_tv_item);
if (this.player.is_tv){
var ch_idx = this.player.channels.getIdxByVal('id', this.player.cur_media_item.id);
_debug('ch_idx', ch_idx);
if (ch_idx !== null){
this.player.cur_media_item = this.player.cur_tv_item = this.player.channels[ch_idx];
_debug('this.player.cur_tv_item', this.player.cur_tv_item);
if (this.player.cur_tv_item.lock != '1'){
this.player.last_not_locked_tv_item = this.player.cur_tv_item;
}
_debug('this.player.on', this.player.on);
if (this.player.on){
this.player.play(this.player.cur_tv_item);
}
}
}
this.load_fav_channels();
},
this
)
};
this.load_fav_channels = function(){
this.load(
{
'type' : 'itv',
'action': 'get_all_fav_channels',
'fav' : 1,
'force_ch_link_check' : stb.user['force_ch_link_check']
},
function(result){
_debug('all_fav_channels', result);
stb.loader.add_pos(this.load_step, 'fav_channels loaded');
this.player.fav_channels = result.data || [];
this.load_fav_itv();
},
this
)
};
this.load_fav_itv = function(){
this.load(
{
'type' : 'itv',
'action' : 'get_fav_ids',
'force_ch_link_check' : stb.user['force_ch_link_check']
},
function(result){
_debug('fav_itv_ids', result);
this.player.fav_channels_ids = result || [];
if (this.player.fav_channels_ids.length == 0){
this.user.fav_itv_on = 0;
}
this.get_modules();
this.player.init_first_channel();
},
this
)
};
this.load_recordings = function(){
_debug('stb.load_recordings');
stb.load(
{
"type" : "remote_pvr",
"action" : "get_active_recordings"
},
function(result){
_debug('load_recordings result', result);
this.recordings = result || [];
if (typeof(pvrManager) == "undefined"){
var active_tasks = [];
}else{
active_tasks = JSON.parse(pvrManager.GetAllTasks()) || [];
}
_debug('active_tasks', active_tasks);
_debug('this.recordings before', this.recordings);
var now_ts = Math.ceil(new Date().getTime()/1000);
_debug('now_ts', now_ts);
_debug('this.recordings after', this.recordings);
stb.player.on_play = function(ch_id){
_debug('player.on_play', ch_id);
if (stb.player.is_tv){
var rec_idx = stb.recordings.getIdxByVal('ch_id', ch_id);
if(rec_idx !== null){
var now_ts = Math.ceil(new Date().getTime()/1000);
_debug('now_ts', now_ts);
if (stb.recordings[rec_idx].local == 0 || (stb.recordings[rec_idx].t_start_ts < now_ts && stb.recordings[rec_idx].t_stop_ts > now_ts)){
stb.player.show_rec_icon(stb.recordings[rec_idx]);
}else{
stb.player.hide_rec_icon();
}
}else{
stb.player.hide_rec_icon();
}
}else{
stb.player.rec.hide();
}
}
},
this
)
};
this.load_radio_channel = function (number) {
if (number) {
this.load(
{
"type": "radio",
"action": "get_channel_by_id",
"number": number
},
function (result) {
_debug("get_channel_by_id", result);
if (result.data && result.data.length) {
this.player.playlist = result.data;
this.player.stop();
if (module.radio_widget) {
this.player.radio_idx = 0;
module.radio_widget.show(result.data[0]);
this.player.play(result.data[0]);
}
}
},
this
);
}
};
this.log_stream_error = function(ch_id, event){
this.load(
{
"type" : "stb",
"action" : "set_stream_error",
"ch_id" : ch_id,
"event" : event
},
function(result){
},
this
);
};
this.epg_loader = {
timeout : 21600000, // 6h
timer_id : 0,
epg : [],
start : function(){
_debug('epg_loader.start');
this.load();
var self = this;
this.timer_id = window.setInterval(function(){self.load()}, (stb.type == 'MAG200' ? 3 : stb.profile['epg_data_block_period_for_stb'])*3600000);
},
stop : function(){
_debug('epg_loader.stop');
window.clearInterval(this.timer_id);
},
load : function(){
_debug('epg_loader.load');
this.epg = [];
stb.load(
{
"type" : "itv",
"action" : "get_epg_info",
"period" : stb.type == 'MAG200' ? 3 : stb.profile['epg_data_block_period_for_stb']
},
function(result){
this.set_epg(result.data);
},
this
)
},
set_epg : function(data){
_debug('epg_loader.set_epg', data);
this.epg = data || [];
_debug('typeof(this.epg)', typeof(this.epg));
},
get_curr_and_next : function(ch_id, from_ts, length){
_debug('epg_loader.get_curr_and_next', ch_id, from_ts, length);
length = length || 2;
ch_id = ''+ch_id;
_debug('typeof(ch_id)', typeof(ch_id));
if (!from_ts){
var now = Date.parse(new Date())/1000;
}else{
now = parseInt(from_ts, 10);
}
var result = [];
_debug('now', now);
_debug('typeof this.epg[ch_id]', typeof(this.epg[ch_id]));
try{
if (typeof(this.epg[ch_id]) == 'object' && this.epg[ch_id].length > 0){
_debug('this.epg[ch_id]', this.epg[ch_id]);
_debug('this.epg[ch_id].length: '+this.epg[ch_id].length);
for (var i=0; i < this.epg[ch_id].length; i++){
_debug('i', i);
if (this.epg[ch_id][i]['start_timestamp'] < now){
_debug('continue');
}else if (this.epg[ch_id][i]['start_timestamp'] == now){
_debug('==');
result.push(this.epg[ch_id][i]);
for (var j = 0; j < length - 1; j++){
if (typeof(this.epg[ch_id][i+1+j]) == 'object'){
result.push(this.epg[ch_id][i+1+j]);
}
}
break;
}else{
if (typeof(this.epg[ch_id][i-1]) == 'object'){
result.push(this.epg[ch_id][i-1]);
for (j = 0; j < length - 1; j++){
if (typeof(this.epg[ch_id][i + j]) == 'object'){
result.push(this.epg[ch_id][i + j]);
}
}
}else{
result.push(this.epg[ch_id][i]);
}
break;
}
}
}
}catch(e){
_debug(e);
}
if (length > 2 && module.epg_reminder && Array.isArray(module.epg_reminder.memos)){
for (i=0; i<result.length; i++){
result[i]['mark_memo'] = module.epg_reminder.memos.getIdxByVal('tv_program_id', result[i]['id']) != null ? 1 : 0
}
}
return result;
},
get_epg : function(ch_id){
_debug('epg_loader.get_epg', ch_id);
var epg = this.get_curr_and_next(ch_id);
return this.get_osd_info(epg);
},
get_osd_info : function(programs){
_debug('epg_loader.get_osd_info', programs);
var epg_str = '';
programs.map(function(prog, idx){
if (idx != 0){
epg_str += '<br>';
}
epg_str += prog.t_time + ' ' + prog.name;
});
return epg_str;
},
get_cur_program : function(ch_id){
_debug('epg_loader.get_cur_program', ch_id);
var epg = this.get_curr_and_next(ch_id);
if (epg && epg.length > 0){
return epg[0];
}
return null;
}
};
this.cut_off = function(msg){
_debug('stb.cut_off');
if (module.blocking.on){
return;
}
_log('cut_off()');
this.key_lock = false;
this.player.stop();
if(this.cur_layer){
this.cur_layer.on = false;
}
stb.SetDefaultFlicker && stb.SetDefaultFlicker(1);
module.blocking.show(msg);
};
this.cut_on = function(){
_debug('stb.cut_on');
if (module.blocking.on){
stb.ExecAction('reboot');
}
};
this.set_cur_place = function(place){
this.cur_place = place;
};
this.reset_cur_place = function(place){
this.cur_place = '';
};
this.set_cur_layer = function(obj){
this.cur_layer = obj;
};
this.get_current_place = function(){
var cur_place_num = 0;
_debug('stb.player.media_type', this.player.media_type);
_debug('stb.cur_place', this.cur_place);
if(this.player.media_type == 'stream'){ // TV
if (this.player.on){
if (this.cur_place == 'tv'){
if (this.player.active_time_shift){
cur_place_num = 14;
}else{
cur_place_num = 1;
}
}else if(this.cur_place == 'radio'){ // Radio
cur_place_num = 5;
}else if(this.cur_place == 'vclub'){
cur_place_num = 2;
}else if(this.cur_place == 'karaoke'){ // Karaoke
cur_place_num = 3;
}else if(this.cur_place == 'audioclub'){ // Audio Club
cur_place_num = 4;
}else if (this.cur_place == 'epg_simple' || this.cur_place == 'epg'){ // TV archive
cur_place_num = 11;
}else{
cur_place_num = 1;
}
}
}else if(this.player.media_type == 'file'){
if (this.player.on){
if (this.cur_place == 'vclub'){ // Video Club
cur_place_num = 2;
}else if(this.cur_place == 'karaoke'){ // Karaoke
cur_place_num = 3;
}else if(this.cur_place == 'audioclub'){ // Audio Club
cur_place_num = 4;
}else if(this.cur_place == 'video_clips'){ // Video Clips
cur_place_num = 8;
}else if(this.cur_place == 'ad'){
cur_place_num = 9;
}else if(this.cur_place == 'media_browser'){
cur_place_num = 10;
}else if (this.cur_place == 'epg_simple' || this.cur_place == 'epg'){ // TV archive
cur_place_num = 11;
}else if (this.cur_place == 'records'){
cur_place_num = 12;
}
}
}else{
if (this.cur_place == 'city_info'){
cur_place_num = 20;
}else if(this.cur_place == 'anec_page'){
cur_place_num = 21;
}else if(this.cur_place == 'weather_page'){
cur_place_num = 22;
}else if(this.cur_place == 'game_page'){
cur_place_num = 23;
}else if(this.cur_place == 'horoscope_page'){
cur_place_num = 24;
}else if(this.cur_place == 'course_page'){
cur_place_num = 25;
}
}
return cur_place_num;
};
this.advert = {
campaigns : [],
ticking_timeout : 0,
disabled : false,
disabled_time : 900,
tracking_pixels : [],
tracking_block : null,
tracking_block_name : "",
disable : function(){
_debug('stb.advert.disable');
if (this.disabled){
return;
}
this.disabled = true;
var self = this;
window.clearTimeout(this.disabled_to);
this.disabled_to = window.setTimeout(function () {
self.enable();
}, this.disabled_time * 1000)
},
enable : function(){
_debug('stb.advert.enable');
this.disabled = false;
},
start : function (cb) {
_debug('stb.advert.get_ad');
var callback = function () {
stb.key_lock = false;
try{
stb.Stop();
}catch(e){
_debug(e);
}
stb.player.on = false;
main_menu.show();
cb();
};
if (this.disabled){
callback();
return;
}
if (!connection_problem.on){
stb.key_lock = true;
}
stb.load(
{
"type" : "stb",
"action" : "get_ad",
"video_mode" : stb.video_mode
},
function (result) {
_debug('on get_ad', result);
result = Array.isArray(result) ? result : [];
stb.key_lock = false;
this.campaigns = result.map(function (item) {
return item['campaign'];
});
_debug('this.campaigns', this.campaigns);
var adverts = result.filter(function (item) {
return item['campaign'].hasOwnProperty('places') && item['campaign']['places'] && item['campaign']['places'][101];
});
if (!adverts || adverts.length == 0){
callback();
return;
}
for (var i=0; i<adverts.length; i++){
var advert = adverts[i];
if (i != adverts.length-1){
callback = (function (ad, cb) {
return function () {
_debug('ad', ad);
main_menu.hide();
stb.player.prev_layer = main_menu;
if (!connection_problem.on){
stb.key_lock = true;
}
stb.player.need_show_info = 0;
stb.player.play({
'id': ad.campaign['id'],
'ad_id': ad.campaign['id'],
'cmd': 'ffmpeg ' + ad.ad,
'media_type': 'advert',
'is_advert': true,
'ad_tracking': ad.tracking,
'ad_must_watch': ad.ad_must_watch,
'stop_callback': cb
});
stb.player.ad_indication.show();
}
})(advert, callback);
}
}
main_menu.hide();
stb.player.prev_layer = main_menu;
if (!connection_problem.on){
stb.key_lock = true;
}
stb.player.play({
'id': 0,
'cmd': 'ffmpeg '+adverts[0].ad,
'media_type': 'advert',
'is_advert': true,
'ad_tracking': adverts[0].tracking,
'ad_must_watch' : adverts[0].ad_must_watch,
'stop_callback': callback
});
stb.player.ad_indication.show();
}
)
},
track : function (urls, type) {
_debug('stb.advert.track', urls, type);
type = type || '';
if (!Array.isArray(urls)){
return false;
}
urls.forEach(function (url) {
_debug('tracking call', url);
stb.advert.call_img(url);
});
if (['stop', 'close', 'error', 'complete'].indexOf(type) != -1){
var name = this.tracking_block_name;
this.tracking_block = null;
window.setTimeout(function () {
stb.advert.destroy_block(name);
}, 3000);
}
},
call_img : function (url) {
_debug('stb.advert.call_img', url);
var pixel = document.createElement("img");
pixel.style.width = '0px';
pixel.style.height = '0px';
pixel.src = url;
pixel.style.border = '0';
pixel.onload = function () {
_debug('tracking pixel loaded')
};
if (!this.tracking_block){
var tracking_block = document.createElement("div");
this.tracking_block_name = 'tracking_block_'+(new Date().getTime());
_debug('tracking_block_name', this.tracking_block_name);
tracking_block.id = this.tracking_block_name;
tracking_block.style.position = 'absolute';
tracking_block.style.left = '-1px';
tracking_block.style.top = '-1px';
this.tracking_block = document.body.appendChild(tracking_block)
}
this.tracking_pixels.push(this.tracking_block.appendChild(pixel));
},
destroy_block : function(name){
_debug('stb.advert.destroy_block', name);
var block = document.getElementById(name);
if (block){
document.body.removeChild(block);
}
},
destroy_img : function(){
_debug('stb.advert.destroy_img');
stb.advert.tracking_pixels.map(function(tracking_pixel){
stb.advert.tracking_block.removeChild(tracking_pixel);
});
stb.advert.tracking_pixels = []
},
call_ajax : function(url){
_debug('stb.advert.call_ajax', url);
var req = new XMLHttpRequest();
req.open("GET", url);
req.onreadystatechange = function(){
if (req.readyState == 4) {
if (req.status == 200) {
_debug('on track ok');
}else{
_debug('on track error', req.status);
}
req = null;
}
};
req.send(null);
},
start_ticking : function(media_len){
_debug('stb.advert.start_ticking', media_len);
window.clearInterval(this.ticking_timeout);
this.ticking_timeout = window.setInterval(function () {
var pos_time = stb.GetPosTime();
var quartile = media_len/4;
if (Math.abs(quartile - pos_time) <= 1 && stb.player.cur_media_item.ad_tracking.hasOwnProperty('firstQuartile')){
stb.advert.track(stb.player.cur_media_item.ad_tracking['firstQuartile'])
}else if(Math.abs(2*quartile - pos_time) <= 1 && stb.player.cur_media_item.ad_tracking.hasOwnProperty('midpoint')){
stb.advert.track(stb.player.cur_media_item.ad_tracking['midpoint'])
}else if(Math.abs(3*quartile - pos_time) <= 1 && stb.player.cur_media_item.ad_tracking.hasOwnProperty('thirdQuartile')){
stb.advert.track(stb.player.cur_media_item.ad_tracking['thirdQuartile'])
}
}, 1000);
},
stop_ticking : function () {
_debug('stb.advert.stop_ticking');
window.clearInterval(this.ticking_timeout);
}
};
this.clock = {
start : function(){
_debug('clock.start()');
if (this.t_clock){
_debug('exit clock.start');
return;
}
this.tick();
var self = this;
try{
this.t_clock = window.setInterval(function(){self.tick()}, 30000);
this.t_clock_s = window.setInterval(function(){self.tick_s()}, 1000);
}catch(e){
_debug(e);
}
},
stop : function(){
_debug('clock.stop');
_debug('self.t_clock', this.t_clock);
var self = this;
try{
window.clearInterval(self.t_clock);
window.clearInterval(self.t_clock_s);
}catch(e){
_debug(e);
}
},
tick_s : function(){
this.timestamp = Math.round(new Date().getTime() / 1000);
},
tick : function(){
this.current_date = new Date();
this.year = this.current_date.getFullYear();
this.month = this.current_date.getMonth();
this.date = this.current_date.getDate();
this.day = this.current_date.getDay();
this.hours = this.current_date.getHours();
if (this.hours > 11){
this.ap_mark = 'PM';
}else{
this.ap_mark = 'AM';
}
this.ap_hours = this.hours % 12 || 12;
this.minutes = this.current_date.getMinutes();
if (this.minutes<10){
this.minutes = '0'+this.minutes;
}
this.show();
},
show : function(){
if (typeof(main_menu) != 'undefined' && main_menu && main_menu.time && main_menu.date && main_menu.on){
main_menu.time.innerHTML = stb.clock_formats[stb.profile.clock_format].format(this.hours, this.minutes, this.ap_hours, this.ap_mark);
main_menu.date.innerHTML = get_word('date_format').format(get_word('week_arr')[this.day], this.date, get_word('month_arr')[this.month], this.year);
}
if (stb.player && stb.player.info && stb.player.info.on && stb.player.info.clock){
stb.player.info.clock.innerHTML = stb.clock_formats[stb.profile.clock_format].format(this.hours, this.minutes, this.ap_hours, this.ap_mark);
}
if (module && module.tv && module.tv.on && module.tv.clock_box){
module.tv.clock_box.innerHTML = stb.clock_formats[stb.profile.clock_format].format(this.hours, this.minutes, this.ap_hours, this.ap_mark);
}
if (stb.type == 'MAG200' && (!stb.player.on || (stb.player.on && !stb.player.is_tv))){
stb.setFrontPanel(this.hours + '' + this.minutes, true);
}
this.triggerCustomEventListener("tick", this);
},
convert_sec_to_human_time : function(sec){
if (sec < 0 || isNaN(sec)){
sec = 0;
}
var h = Math.floor(sec/3600);
var m = Math.floor((sec - (h*3600)) / 60);
var s = sec - (h*3600) - (m*60);
var time = '';
if(h){
if (h<10){
h = '0'+h;
}
time += h+':';
}
if (m<10){
m = '0'+m;
}
time += m+':';
if (s<10){
s = '0'+s;
}
time += s;
return time;
},
convert_sec_to_human_hours : function(sec){
var h = Math.floor(sec/3600);
var m = Math.floor((sec - (h*3600)) / 60);
var time = '';
time += h+':';
if (m<10){
m = '0'+m;
}
time += m;
return time;
},
convert_timestamp_to_human_time : function(timestamp){
var date = new Date(parseInt(timestamp, 10)*1000);
var hours = date.getHours();
if (hours > 11){
var ap_mark = 'PM';
}else{
ap_mark = 'AM';
}
var ap_hours = hours % 12 || 12;
if (hours<10){
hours = '0'+hours;
}
if (ap_hours<10){
ap_hours = '0'+ap_hours;
}
var minutes = date.getMinutes();
if (minutes<10){
minutes = '0'+minutes;
}
return stb.clock_formats[stb.profile.clock_format].format(hours, minutes, ap_hours, ap_mark);
},
format_XX : function(value){
if (value < 10){
value = '0'+value;
}
return value;
}
};
this.add_referrer = function(paramStr, layer_name){
var returnParams = paramStr || '';
returnParams += (returnParams.length == 0? '?': '&');
var tmpLocation = window.location.toString();
returnParams += 'referrer='+encodeURIComponent(tmpLocation);
if (tmpLocation.indexOf('?') == -1) {
returnParams += encodeURIComponent('?');
}
var amp = '(\\' + encodeURIComponent('&') + ')';
var regStr = new RegExp(amp + 'focus_module[^\\1,\\&,$]*?(\\1|\\&|$)','ig');
if (regStr.test(returnParams)) {
returnParams = returnParams.replace(regStr, '$2');
if (regStr.test(returnParams)) {
returnParams = returnParams.replace(regStr, '');
}
}
focus_module = layer_name;
returnParams += encodeURIComponent('&focus_module='+layer_name);
return returnParams;
};
this.get_rc_data = function () {
_debug("this.get_rc_data");
var remoteControlFileData = gSTB.LoadUserData('remoteControl.json');
try {
remoteControlFileData = JSON.parse(remoteControlFileData);
} catch (error) {
remoteControlFileData = {enable: false, deviceName: '', password: ''};
gSTB.SaveUserData('remoteControl.json', JSON.stringify(remoteControlFileData));
}
return remoteControlFileData;
};
this.init_rc = function(){
_debug("this.init_rc");
if (typeof (gSTB) == 'undefined' || !gSTB.ConfigNetRc || !gSTB.SetNetRcStatus) {
_debug("remote control not init");
return;
}
var remoteControlFileData = this.get_rc_data();
if (remoteControlFileData.enable) {
gSTB.ConfigNetRc(remoteControlFileData.deviceName, remoteControlFileData.password);
}
gSTB.SetNetRcStatus(remoteControlFileData.enable);
_debug("remote control enabled - ", remoteControlFileData.enable);
}
}
var screensaver = {
on : false,
init : function(){
//_debug('screensaver.init');
if (typeof(gSTB) != "undefined" && gSTB.SetScreenSaverTime){
gSTB.SetScreenSaverTime(0);
}
if (this.dom_obj){
_debug('exit screensaver.init');
return;
}
this.build();
var self = this;
keydown_observer.addCustomEventListener("keypress", function(event){
//_debug('screensaver keypress', event);
if (self.on){
self.hide();
self.restart_timer.call(self);
return false;
}
self.restart_timer.call(self);
return true;
});
this.restart_timer();
stb.player.addCustomEventListener("onplay", function(event){
if (self.on && stb.player.file_type != 'audio'){
self.hide();
self.restart_timer.call(self);
}
});
stb.clock.addCustomEventListener("tick", function(date){
if (self.on){
self.clock.innerHTML = stb.clock_formats[stb.profile.clock_format].format(date.hours, date.minutes, date.ap_hours, date.ap_mark);
}
});
},
restart_timer : function(){
//_debug('screensaver.restart_timer');
var self = this;
window.clearTimeout(this.activate_timer);
if (stb.user['screensaver_delay'] > 0){
this.activate_timer = window.setTimeout(function(){
self.show.call(self);
}, stb.user['screensaver_delay'] * 60000);
//}, 30000);
}
},
build : function(){
//_debug('screensaver.build');
this.dom_obj = create_block_element("screensaver");
this.clock = create_block_element("screensaver_clock", this.dom_obj);
this.hide();
},
show : function(){
_debug('screensaver.show');
window.clearTimeout(this.activate_timer);
_debug('stb.player.on', stb.player.on);
var is_playing = false;
if (stb.IsPlaying){
is_playing = stb.IsPlaying();
_debug('stb.IsPlaying', is_playing);
}else if (stb.GetVideoInfo){
var video_info = stb.GetVideoInfo();
_debug('video_info', video_info);
try{
video_info = eval('('+video_info+')');
}catch(e){
_debug(e);
}
video_info = video_info || {};
_debug('video_info', video_info);
is_playing = video_info.frameRate != 0;
}
_debug('is_playing', is_playing);
if (stb.player.on && is_playing){
this.restart_timer();
return;
}
_debug('stb.IsVirtualKeyboardActive()', stb.IsVirtualKeyboardActive());
stb.HideVirtualKeyboard();
this.dom_obj.show();
this.on = true;
this.clock.innerHTML = stb.clock_formats[stb.profile.clock_format].format(stb.clock.hours, stb.clock.minutes, stb.clock.ap_hours, stb.clock.ap_mark);
this.move();
var self = this;
this.move_timer = window.setInterval(function(){self.move.call(self)}, 5000);
},
hide : function(){
_debug('screensaver.hide');
//stb.cur_layer && stb.cur_layer.dom_obj.show();
this.dom_obj.hide();
this.on = false;
window.clearInterval(this.move_timer);
},
toggle : function(){
_debug('screensaver.toggle');
if (this.on){
this.hide();
}else{
window.setTimeout(function(){screensaver.show()}, 500);
}
},
move : function(){
_debug('screensaver.start');
var top = Math.floor(Math.random() * (screen.height - this.clock.offsetHeight));
var left = Math.floor(Math.random() * (screen.width - this.clock.offsetWidth));
_debug('top', top);
_debug('left', left);
this.clock.moveX(left);
this.clock.moveY(top);
}
};
var connection_problem = {
on: true,
init : function(){
this.dom_obj = create_block_element("connection_problem_container");
this.block_obj = create_block_element("connection_problem_block", this.dom_obj);
this.block_obj.innerHTML = get_word('Connection problem');
this.hide();
},
refresh_msg : function(){
this.block_obj.innerHTML = get_word('Connection problem');
},
show : function(){
_debug('connection_problem.show');
_debug('stb.user.enable_connection_problem_indication', stb.user.enable_connection_problem_indication);
if (stb.user.enable_connection_problem_indication == 1){
this.dom_obj.show();
this.on = true;
}
stb.key_lock = false;
},
hide : function(){
_debug('connection_problem.hide');
if (!this.on){
return;
}
this.dom_obj.hide();
this.on = false;
stb.key_lock = false;
}
};
var authentication_problem = {
on: true,
init : function(){
this.dom_obj = create_block_element("authentication_problem_container");
this.block_obj = create_block_element("authentication_problem_block", this.dom_obj);
this.block_obj.innerHTML = get_word('Authentication problem');
this.hide();
},
refresh_msg : function(){
this.block_obj.innerHTML = get_word('Authentication problem');
},
show : function(){
_debug('authentication_problem.show');
this.dom_obj.show();
this.on = true;
if (stb.player && stb.player.on){
stb.player.stop();
}
},
hide : function(){
_debug('authentication_problem.hide');
if (!this.on){
return;
}
this.dom_obj.hide();
this.on = false;
}
};
var Utf8 = {
// public method for url encoding
encode : function (string) {
string = string.replace(/\r\n/g,"\n");
var utftext = "";
for (var n = 0; n < string.length; n++) {
var c = string.charCodeAt(n);
if (c < 128) {
utftext += String.fromCharCode(c);
}
else if((c > 127) && (c < 2048)) {
utftext += String.fromCharCode((c >> 6) | 192);
utftext += String.fromCharCode((c & 63) | 128);
}
else {
utftext += String.fromCharCode((c >> 12) | 224);
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
utftext += String.fromCharCode((c & 63) | 128);
}
}
return utftext;
},
// public method for url decoding
decode : function (utftext) {
var string = "";
var i = 0;
var c = c1 = c2 = 0;
while ( i < utftext.length ) {
c = utftext.charCodeAt(i);
if (c < 128) {
string += String.fromCharCode(c);
i++;
}
else if((c > 191) && (c < 224)) {
c2 = utftext.charCodeAt(i+1);
string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
i += 2;
}
else {
c2 = utftext.charCodeAt(i+1);
c3 = utftext.charCodeAt(i+2);
string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
i += 3;
}
}
return string;
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment