From 2067a4dcd9518b52a604fa731f4e682fd531dd7d Mon Sep 17 00:00:00 2001 From: yumata <91452496+yumata@users.noreply.github.com> Date: Mon, 8 Jun 2026 10:42:04 +0300 Subject: [PATCH] Test --- app.min.js | 2108 +++++++++++++++++++++++-------------------------- assembly.json | 4 +- css/app.css | 191 ----- 3 files changed, 993 insertions(+), 1310 deletions(-) diff --git a/app.min.js b/app.min.js index 240efff..1eceb76 100644 --- a/app.min.js +++ b/app.min.js @@ -2449,251 +2449,249 @@ unique: unique }; - var html$2r = "
\n
\n
\n \n
\n\n
\n \n
\n\n
\n \n
\n
\n \n
\n
\n\n
\n
\n
\n
\n
\n\n
\n
\n
\n
\n
\n
\n
\n
\n
"; + var html$2q = "
\n
\n
\n \n
\n\n
\n \n
\n\n
\n \n
\n
\n \n
\n
\n\n
\n
\n
\n
\n
\n\n
\n
\n
\n
\n
\n
\n
\n
\n
"; - var html$2q = "
\n
\n
\n
"; + var html$2p = "
\n
\n
\n
"; - var html$2p = "
\n\n
\n \n
\n\n
\n\n
\n \n
\n\n
\n\n
\n \n
\n
"; + var html$2o = "
\n\n
\n \n
\n\n
\n\n
\n \n
\n\n
\n\n
\n \n
\n
"; - var html$2o = "
\n
\n
"; + var html$2n = "
\n
\n
"; - var html$2n = "
\n
\n
\n
"; + var html$2m = "
\n
\n
\n
"; - var html$2m = "
\n
\u041E\u0436\u0438\u0434\u0430\u044E
\n
\u041D\u0430\u0436\u043C\u0438\u0442\u0435 (\u0432\u043D\u0438\u0437) \u0434\u043B\u044F \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F \u0430\u043A\u0442\u0438\u0432\u043D\u043E\u0441\u0442\u0438.
\n\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
"; + var html$2l = "
\n
\u041E\u0436\u0438\u0434\u0430\u044E
\n
\u041D\u0430\u0436\u043C\u0438\u0442\u0435 (\u0432\u043D\u0438\u0437) \u0434\u043B\u044F \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F \u0430\u043A\u0442\u0438\u0432\u043D\u043E\u0441\u0442\u0438.
\n\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
"; - var html$2l = "
\n
\n
\n \n
\n
\n
"; + var html$2k = "
\n
\n
\n \n
\n
\n
"; - var html$2k = "
\n
\n
\n
\n
#{title_settings}
\n
\n
\n
\n
"; + var html$2j = "
\n
\n
\n
\n
#{title_settings}
\n
\n
\n
\n
"; - var html$2j = "
\n
\n
\n \n \n \n \n \n \n
\n
#{settings_cub_sync}
\n
\n
\n
\n \n \n \n
\n
#{settings_main_interface}
\n
\n
\n
\n \n
\n
#{settings_main_player}
\n
\n
\n
\n \n
\n
#{settings_main_parser}
\n
\n
\n
\n \n
\n
#{settings_main_torrserver}
\n
\n
\n
\n \n \n \n
\n
TMDB
\n
\n
\n
\n \n \n \n \n \n
\n
#{settings_main_plugins}
\n
\n
\n
\n \n \n \n \n
\n
#{title_parental_control}
\n
\n
\n
\n \n
\n
#{settings_main_rest}
\n
\n
"; + var html$2i = "
\n
\n
\n \n \n \n \n \n \n
\n
#{settings_cub_sync}
\n
\n
\n
\n \n \n \n
\n
#{settings_main_interface}
\n
\n
\n
\n \n
\n
#{settings_main_player}
\n
\n
\n
\n \n
\n
#{settings_main_parser}
\n
\n
\n
\n \n
\n
#{settings_main_torrserver}
\n
\n
\n
\n \n \n \n
\n
TMDB
\n
\n
\n
\n \n \n \n \n \n
\n
#{settings_main_plugins}
\n
\n
\n
\n \n \n \n \n
\n
#{title_parental_control}
\n
\n
\n
\n \n
\n
#{settings_main_rest}
\n
\n
"; - var html$2i = "
\n
\n
#{settings_interface_lang}
\n
\n
\n\n
\n
#{settings_interface_type}
\n
\n
\n\n
\n
#{settings_interface_size}
\n
\n
\n\n
\n
#{settings_interface_menu_always}
\n
\n
\n\n
#{settings_interface_background}
\n\n
\n
#{settings_interface_background_use}
\n
\n
\n\n
\n
#{settings_interface_background_type}
\n
\n
\n\n
\n
#{settings_interface_black_style}
\n
\n
\n\n
#{title_card}
\n\n
\n
#{settings_interface_card_poster}
\n
\n
\n\n
\n
#{settings_interface_card_cover}
\n
\n
\n\n
\n
#{settings_interface_card_reactions}
\n
\n
\n\n
#{settings_interface_glass}
\n\n
\n
#{settings_interface_glass}
\n
\n
#{settings_interface_glass_descr}
\n
\n\n
\n
#{settings_interface_glass_opacity}
\n
\n
\n\n
\n
#{settings_interface_sound}
\n\n
\n
#{settings_interface_sound_play}
\n
\n
\n\n
\n
#{settings_interface_sound_level}
\n
\n
\n
\n\n
#{settings_interface_performance}
\n\n\n
\n
#{settings_interface_animation}
\n
\n
#{settings_interface_animation_descr}
\n
\n\n
\n
#{settings_interface_advanced_animation}
\n
\n
\n\n
\n
#{settings_interface_attenuation}
\n
\n
#{settings_interface_attenuation_descr}
\n
\n\n
\n
#{settings_interface_scroll}
\n
\n
\n
"; + var html$2h = "
\n
\n
#{settings_interface_lang}
\n
\n
\n\n
\n
#{settings_interface_type}
\n
\n
\n\n
\n
#{settings_interface_size}
\n
\n
\n\n
\n
#{settings_interface_menu_always}
\n
\n
\n\n
#{settings_interface_background}
\n\n
\n
#{settings_interface_background_use}
\n
\n
\n\n
\n
#{settings_interface_background_type}
\n
\n
\n\n
\n
#{settings_interface_black_style}
\n
\n
\n\n
#{title_card}
\n\n
\n
#{settings_interface_card_poster}
\n
\n
\n\n
\n
#{settings_interface_card_cover}
\n
\n
\n\n
\n
#{settings_interface_card_reactions}
\n
\n
\n\n
#{settings_interface_glass}
\n\n
\n
#{settings_interface_glass}
\n
\n
#{settings_interface_glass_descr}
\n
\n\n
\n
#{settings_interface_glass_opacity}
\n
\n
\n\n
\n
#{settings_interface_sound}
\n\n
\n
#{settings_interface_sound_play}
\n
\n
\n\n
\n
#{settings_interface_sound_level}
\n
\n
\n
\n\n
#{settings_interface_performance}
\n\n\n
\n
#{settings_interface_animation}
\n
\n
#{settings_interface_animation_descr}
\n
\n\n
\n
#{settings_interface_advanced_animation}
\n
\n
\n\n
\n
#{settings_interface_attenuation}
\n
\n
#{settings_interface_attenuation_descr}
\n
\n\n
\n
#{settings_interface_scroll}
\n
\n
\n
"; - var html$2h = "
\n
\n
#{settings_parser_use}
\n
\n
#{settings_parser_use_descr}
\n
\n
\n
\n
#{settings_parser_type}
\n
\n
\n\n
\n
#{settings_server_link}
\n
\n
\n\n
\n
#{settings_param_link_use_one}
\n\n
\n
#{settings_parser_jackett_link}
\n
\n
#{settings_parser_jackett_link_descr}
\n
\n\n
\n
#{settings_parser_jackett_key}
\n
\n
#{settings_parser_jackett_key_descr}
\n
\n\n
#{settings_param_link_use_two}
\n\n
\n
#{settings_parser_jackett_link}
\n
\n
#{settings_parser_jackett_link_descr}
\n
\n\n
\n
#{settings_parser_jackett_key}
\n
\n
#{settings_parser_jackett_key_descr}
\n
\n\n
\n
#{settings_parser_jackett_interview}
\n
\n
\n
\n \n
\n
#{settings_param_link_use_one}
\n\n
\n
#{settings_parser_jackett_link}
\n
\n
#{settings_parser_prowlarr_link_descr}
\n
\n\n
\n
#{settings_parser_jackett_key}
\n
\n
#{settings_parser_prowlarr_key_descr}
\n
\n\n
#{settings_param_link_use_two}
\n\n
\n
#{settings_parser_jackett_link}
\n
\n
#{settings_parser_prowlarr_link_descr}
\n
\n\n
\n
#{settings_parser_jackett_key}
\n
\n
#{settings_parser_prowlarr_key_descr}
\n
\n
\n\n
#{more}
\n\n
\n
#{settings_parser_search}
\n
\n
#{settings_parser_search_descr}
\n
\n
\n
#{settings_parser_timeout_title}
\n
\n
#{settings_parser_timeout_descr}
\n
\n
\n
#{settings_parser_in_search}
\n
\n
#{settings_parser_in_search_descr}
\n
\n
\n
"; + var html$2g = "
\n
\n
#{settings_parser_use}
\n
\n
#{settings_parser_use_descr}
\n
\n
\n
\n
#{settings_parser_type}
\n
\n
\n\n
\n
#{settings_server_link}
\n
\n
\n\n
\n
#{settings_param_link_use_one}
\n\n
\n
#{settings_parser_jackett_link}
\n
\n
#{settings_parser_jackett_link_descr}
\n
\n\n
\n
#{settings_parser_jackett_key}
\n
\n
#{settings_parser_jackett_key_descr}
\n
\n\n
#{settings_param_link_use_two}
\n\n
\n
#{settings_parser_jackett_link}
\n
\n
#{settings_parser_jackett_link_descr}
\n
\n\n
\n
#{settings_parser_jackett_key}
\n
\n
#{settings_parser_jackett_key_descr}
\n
\n\n
\n
#{settings_parser_jackett_interview}
\n
\n
\n
\n \n
\n
#{settings_param_link_use_one}
\n\n
\n
#{settings_parser_jackett_link}
\n
\n
#{settings_parser_prowlarr_link_descr}
\n
\n\n
\n
#{settings_parser_jackett_key}
\n
\n
#{settings_parser_prowlarr_key_descr}
\n
\n\n
#{settings_param_link_use_two}
\n\n
\n
#{settings_parser_jackett_link}
\n
\n
#{settings_parser_prowlarr_link_descr}
\n
\n\n
\n
#{settings_parser_jackett_key}
\n
\n
#{settings_parser_prowlarr_key_descr}
\n
\n
\n\n
#{more}
\n\n
\n
#{settings_parser_search}
\n
\n
#{settings_parser_search_descr}
\n
\n
\n
#{settings_parser_timeout_title}
\n
\n
#{settings_parser_timeout_descr}
\n
\n
\n
#{settings_parser_in_search}
\n
\n
#{settings_parser_in_search_descr}
\n
\n
\n
"; - var html$2g = "
\n
\n
#{settings_server_client}
\n
\n
#{settings_server_client_descr}
\n
\n\n
\n
\n
#{settings_server_link}
\n
\n
\n\n
#{settings_server_links}
\n\n
\n
#{settings_server_link_one}
\n
\n
#{settings_server_link_one_descr}
\n
\n
\n\n
\n
#{settings_server_link_two}
\n
\n
#{settings_server_link_two_descr}
\n
\n
\n \n \n
#{settings_server_additionally}
\n\n
\n
#{settings_server_base}
\n
\n
#{settings_server_base_descr}
\n
\n \n
\n
#{settings_server_preload}
\n
\n
#{settings_server_preload_descr}
\n
\n\n
#{settings_server_auth}
\n\n
\n
#{settings_server_password_use}
\n
\n
\n \n
\n
\n
#{settings_server_login}
\n
\n
\n\n
\n
#{settings_server_password}
\n
\n
\n
\n
\n
"; + var html$2f = "
\n
\n
#{settings_server_client}
\n
\n
#{settings_server_client_descr}
\n
\n\n
\n
\n
#{settings_server_link}
\n
\n
\n\n
#{settings_server_links}
\n\n
\n
#{settings_server_link_one}
\n
\n
#{settings_server_link_one_descr}
\n
\n
\n\n
\n
#{settings_server_link_two}
\n
\n
#{settings_server_link_two_descr}
\n
\n
\n \n \n
#{settings_server_additionally}
\n\n
\n
#{settings_server_base}
\n
\n
#{settings_server_base_descr}
\n
\n \n
\n
#{settings_server_preload}
\n
\n
#{settings_server_preload_descr}
\n
\n\n
#{settings_server_auth}
\n\n
\n
#{settings_server_password_use}
\n
\n
\n \n
\n
\n
#{settings_server_login}
\n
\n
\n\n
\n
#{settings_server_password}
\n
\n
\n
\n
\n
"; - var html$2f = "
\n
\n
#{settings_player_type}
\n
\n
#{settings_player_type_descr}
\n
\n\n
\n
#{settings_player_iptv_type}
\n
\n
#{settings_player_iptv_type_descr}
\n
\n\n
\n
#{settings_player_torrent_type}
\n
\n
#{settings_player_torrent_type_descr}
\n
\n\n
\n
#{settings_player_launch_trailers}
\n
\n
\n \n
\n
#{settings_player_reset}
\n
\n
#{settings_player_reset_descr}
\n
\n\n
\n
#{settings_player_path}
\n
\n
#{settings_player_path_descr}
\n
\n \n
\n
#{settings_player_external_header}
\n \n
\n
#{settings_player_external_fullscreen}
\n
\n
\n
\n\n
\n
#{settings_player_normalization}
\n
\n
#{settings_player_normalization_descr}
\n
\n \n
\n
#{settings_player_next_episode}
\n
\n
#{settings_player_next_episode_descr}
\n
\n\n
\n
#{settings_player_timecode}
\n
\n
#{settings_player_timecode_descr}
\n
\n\n
\n
#{settings_player_scale}
\n
\n
#{settings_player_scale_descr}
\n
\n\n
\n
#{settings_player_hls_title}
\n
\n
#{settings_player_hls_descr}
\n
\n\n
\n
#{settings_player_rewind_title}
\n
\n
#{settings_player_rewind_descr}
\n
\n \n
\n
#{settings_player_subs}
\n\n
\n
#{settings_player_subs_use}
\n
\n
#{settings_player_subs_use_descr}
\n
\n
\n\n
#{more}
\n\n
\n
#{settings_player_quality}
\n
\n
#{settings_player_quality_descr}
\n
\n
"; + var html$2e = "
\n
\n
#{settings_player_type}
\n
\n
#{settings_player_type_descr}
\n
\n\n
\n
#{settings_player_iptv_type}
\n
\n
#{settings_player_iptv_type_descr}
\n
\n\n
\n
#{settings_player_torrent_type}
\n
\n
#{settings_player_torrent_type_descr}
\n
\n\n
\n
#{settings_player_launch_trailers}
\n
\n
\n \n
\n
#{settings_player_reset}
\n
\n
#{settings_player_reset_descr}
\n
\n\n
\n
#{settings_player_path}
\n
\n
#{settings_player_path_descr}
\n
\n \n
\n
#{settings_player_external_header}
\n \n
\n
#{settings_player_external_fullscreen}
\n
\n
\n
\n\n
\n
#{settings_player_normalization}
\n
\n
#{settings_player_normalization_descr}
\n
\n \n
\n
#{settings_player_next_episode}
\n
\n
#{settings_player_next_episode_descr}
\n
\n\n
\n
#{settings_player_timecode}
\n
\n
#{settings_player_timecode_descr}
\n
\n\n
\n
#{settings_player_scale}
\n
\n
#{settings_player_scale_descr}
\n
\n\n
\n
#{settings_player_hls_title}
\n
\n
#{settings_player_hls_descr}
\n
\n\n
\n
#{settings_player_rewind_title}
\n
\n
#{settings_player_rewind_descr}
\n
\n \n
\n
#{settings_player_subs}
\n\n
\n
#{settings_player_subs_use}
\n
\n
#{settings_player_subs_use_descr}
\n
\n
\n\n
#{more}
\n\n
\n
#{settings_player_quality}
\n
\n
#{settings_player_quality_descr}
\n
\n
"; - var html$2e = "
\n
\n
#{settings_rest_start}
\n
\n
#{settings_rest_start_descr}
\n
\n\n
\n
#{settings_rest_source_use}
\n
\n
#{settings_rest_source_descr}
\n
\n\n
\n
#{settings_rest_protocol_use}
\n
\n
#{settings_rest_protocol_descr}
\n
\n\n
\n
#{settings_request_caching_use}
\n
\n
#{settings_request_caching_descr}
\n
\n\n
#{settings_rest_screensaver}
\n\n
\n
#{settings_rest_screensaver_use}
\n
\n
\n\n
\n
#{settings_rest_screensaver_type}
\n
\n
\n\n
\n
#{settings_rest_screensaver_time}
\n
\n
\n\n \n
#{more}
\n\n
\n
#{settings_rest_pages}
\n
\n
#{settings_rest_pages_descr}
\n
\n\n
\n
#{settings_rest_time}
\n
\n
\n\n
\n
#{settings_rest_navigation}
\n
\n
\n\n
\n
#{settings_rest_keyboard}
\n
\n
\n\n\n
\n
#{settings_rest_card_quality}
\n
\n
#{settings_rest_card_quality_descr}
\n
\n\n
\n
#{settings_rest_card_episodes}
\n
\n
#{settings_rest_card_episodes_descr}
\n
\n\n
\n
#{settings_rest_device}
\n
\n
\n
"; + var html$2d = "
\n
\n
#{settings_rest_start}
\n
\n
#{settings_rest_start_descr}
\n
\n\n
\n
#{settings_rest_source_use}
\n
\n
#{settings_rest_source_descr}
\n
\n\n
\n
#{settings_rest_protocol_use}
\n
\n
#{settings_rest_protocol_descr}
\n
\n\n
\n
#{settings_request_caching_use}
\n
\n
#{settings_request_caching_descr}
\n
\n\n
#{settings_rest_screensaver}
\n\n
\n
#{settings_rest_screensaver_use}
\n
\n
\n\n
\n
#{settings_rest_screensaver_type}
\n
\n
\n\n
\n
#{settings_rest_screensaver_time}
\n
\n
\n\n \n
#{more}
\n\n
\n
#{settings_rest_pages}
\n
\n
#{settings_rest_pages_descr}
\n
\n\n
\n
#{settings_rest_time}
\n
\n
\n\n
\n
#{settings_rest_navigation}
\n
\n
\n\n
\n
#{settings_rest_keyboard}
\n
\n
\n\n\n
\n
#{settings_rest_card_quality}
\n
\n
#{settings_rest_card_quality_descr}
\n
\n\n
\n
#{settings_rest_card_episodes}
\n
\n
#{settings_rest_card_episodes_descr}
\n
\n\n
\n
#{settings_rest_device}
\n
\n
\n
"; - var html$2d = "
\n
\n
TMDB
\n
\n
#{settings_rest_tmdb_lang}
\n
\n\n
\n
#{settings_rest_tmdb_posters}
\n
\n
\n\n
\n
#{settings_rest_tmdb_prox_auto}
\n
\n
\n\n
\n
#{settings_rest_tmdb_prox}
\n
\n
\n\n
\n
Api
\n
\n
#{settings_rest_tmdb_api_descr}
\n
\n\n
\n
Image
\n
\n
#{settings_rest_tmdb_image_descr}
\n
\n
"; + var html$2c = "
\n
\n
TMDB
\n
\n
#{settings_rest_tmdb_lang}
\n
\n\n
\n
#{settings_rest_tmdb_posters}
\n
\n
\n\n
\n
#{settings_rest_tmdb_prox_auto}
\n
\n
\n\n
\n
#{settings_rest_tmdb_prox}
\n
\n
\n\n
\n
Api
\n
\n
#{settings_rest_tmdb_api_descr}
\n
\n\n
\n
Image
\n
\n
#{settings_rest_tmdb_image_descr}
\n
\n
"; - var html$2c = "
\n
\n
#{settings_plugins_add}
\n
#{settings_plugins_add_descr}
\n
\n
\n
#{settings_plugins_install}
\n
#{settings_plugins_install_descr}
\n
\n
"; + var html$2b = "
\n
\n
#{settings_plugins_add}
\n
#{settings_plugins_add_descr}
\n
\n
\n
#{settings_plugins_install}
\n
#{settings_plugins_install_descr}
\n
\n
"; - var html$2b = "
\n
\n
\n
https://{site}
\n #{settings_cub_sync_descr}\n
\n
\n
\n
\n\n
\n
#{settings_cub_sync}
\n
\n
\n\n
#{settings_cub_account} Premium
\n\n
\n
#{settings_cub_domain}
\n
\n
\n\n
\n
#{settings_cub_logged_in_as}
\n
\n
\n\n
\n
#{settings_cub_profile}
\n
\n
\n\n
\n
#{settings_cub_logout}
\n
\n\n
#{settings_cub_signin}
\n\n
\n
#{settings_cub_signin_button}
\n
\n
\n\n
#{more}
\n\n
\n
#{settings_cub_sync_btn}
\n
#{settings_cub_sync_btn_descr}
\n
\n\n
\n
#{settings_cub_backup}
\n
#{settings_cub_backup_descr}
\n
\n
"; + var html$2a = "
\n
\n
\n
https://{site}
\n #{settings_cub_sync_descr}\n
\n
\n
\n
\n\n
\n
#{settings_cub_sync}
\n
\n
\n\n
#{settings_cub_account} Premium
\n\n
\n
#{settings_cub_domain}
\n
\n
\n\n
\n
#{settings_cub_logged_in_as}
\n
\n
\n\n
\n
#{settings_cub_profile}
\n
\n
\n\n
\n
#{settings_cub_logout}
\n
\n\n
#{settings_cub_signin}
\n\n
\n
#{settings_cub_signin_button}
\n
\n
\n\n
#{more}
\n\n
\n
#{settings_cub_sync_btn}
\n
#{settings_cub_sync_btn_descr}
\n
\n\n
\n
#{settings_cub_backup}
\n
#{settings_cub_backup_descr}
\n
\n
"; - var html$2a = "
\n
\n
{title}
\n
\n
\n
"; + var html$29 = "
\n
\n
{title}
\n
\n
\n
"; - var html$29 = "
\n
\n \n\n
\n
\n \n
\n
\n
\n\n
{title}
\n
{release_year}
\n
"; + var html$28 = "
\n
\n \n\n
\n
\n \n
\n
\n
\n\n
{title}
\n
{release_year}
\n
"; - var html$28 = "
\n
{Title}
\n\n
\n
\n
#{torrent_item_seeds}: {Seeders}
\n
#{torrent_item_grabs}: {Peers}
\n
\n
{size}
\n
\n
"; + var html$27 = "
\n
{Title}
\n\n
\n
\n
#{torrent_item_seeds}: {Seeders}
\n
#{torrent_item_grabs}: {Peers}
\n
\n
{size}
\n
\n
"; - var html$27 = "
\n
\n
\n
\n
"; + var html$26 = "
\n
\n
\n
\n
"; - var html$26 = "
\n
\n
\n
\n \n
\n\n
\n
{num}
\n
{name}
\n
{date}
\n
\n
\n
\n
\n
\n
\n \n
\n
\n\n
\n
{title}
\n
{release_year}
\n
\n
\n
"; + var html$25 = "
\n
\n
\n
\n \n
\n\n
\n
{num}
\n
{name}
\n
{date}
\n
\n
\n
\n
\n
\n
\n \n
\n
\n\n
\n
{title}
\n
{release_year}
\n
\n
\n
"; - var html$25 = "
\n\n
\n
\n
\n \n
\n
\n\n
\n
\n
{title}
\n
{tagline}
\n
\n
{rating}
TMDB
\n
IMDB
\n
KP
\n\n
\n
\n
\n
\n
\n
#{reactions_none}
\n
\n\n
\n
\n \n\n #{title_watch}\n
\n\n
\n \n \n \n\n #{settings_input_links}\n
\n\n
\n \n\n #{title_reactions}\n
\n\n
\n \n \n \n \n\n #{title_subscribe}\n
\n\n
\n \n
\n
\n
\n
\n\n
\n
\n \n\n #{full_torrents}\n
\n\n
\n \n\n #{full_trailers}\n
\n
\n
"; + var html$24 = "
\n\n
\n
\n
\n \n
\n
\n\n
\n
\n
{title}
\n
{tagline}
\n
\n
{rating}
TMDB
\n
IMDB
\n
KP
\n\n
\n
\n
\n
\n
\n
#{reactions_none}
\n
\n\n
\n
\n \n\n #{title_watch}\n
\n\n
\n \n \n \n\n #{settings_input_links}\n
\n\n
\n \n\n #{title_reactions}\n
\n\n
\n \n \n \n \n\n #{title_subscribe}\n
\n\n
\n \n
\n
\n
\n
\n\n
\n
\n \n\n #{full_torrents}\n
\n\n
\n \n\n #{full_trailers}\n
\n
\n
"; - var html$24 = "
\n
\n
{text}
\n\n
\n
\n
#{full_date_of_release}
\n
{relise}
\n
\n\n
\n
#{full_budget}
\n
{budget}
\n
\n\n
\n
#{full_countries}
\n
{countries}
\n
\n
\n\n
\n
\n\n \n
"; + var html$23 = "
\n
\n
{text}
\n\n
\n
\n
#{full_date_of_release}
\n
{relise}
\n
\n\n
\n
#{full_budget}
\n
{budget}
\n
\n\n
\n
#{full_countries}
\n
{countries}
\n
\n
\n\n
\n
\n\n \n
"; - var html$23 = "
\n
\n \n
\n\n
\n
{name}
\n
{role}
\n
\n
"; + var html$22 = "
\n
\n \n
\n\n
\n
{name}
\n
{role}
\n
\n
"; - var html$22 = "
\n
{text}
\n\n
#{full_like}: {like_count}
\n
"; + var html$21 = "
\n
{text}
\n\n
#{full_like}: {like_count}
\n
"; - var html$21 = "
\n
\n \n
\n\n
\n
{num}
\n
{name}
\n
{date}
\n
\n
"; + var html$20 = "
\n
\n \n
\n\n
\n
{num}
\n
{name}
\n
{date}
\n
\n
"; - var html$20 = "
\n \n
"; + var html$1$ = "
\n \n
"; - var html$1$ = "
\n\n
\n
\n
\n
\n
\n
\n
\n
\n\n
\n
\n
\n
\n \n \n \n
\n
001
\n
\n \n \n \n
\n
\n
\n\n
\n
\n
\n
\n\n
\n
\n
\n \n \n \n \n
\n
\n \n \n \n \n
\n\n
\n
\n
\n
\n \n \n \n \n
\n
\n \n \n \n \n \n
\n
\n \n \n \n \n
\n
\n
\n \n \n \n
\n
\n \n \n \n \n
\n
\n
\n \n \n \n \n
\n
\n \n \n \n \n \n
\n
\n \n \n \n \n
\n
\n
\n
auto
\n
\n \n \n \n \n \n
\n
\n \n \n \n \n \n
\n
\n \n \n \n
\n
\n \n \n \n \n \n
\n
\n \n \n \n \n \n \n
\n
\n \n \n \n \n
\n \n
\n
\n
\n \n \n \n \n
\n
\n \n \n \n \n \n \n
\n
\n
\n
\n
"; + var html$1_ = "
\n\n
\n
\n
\n
\n
\n
\n
\n
\n\n
\n
\n
\n
\n \n \n \n
\n
001
\n
\n \n \n \n
\n
\n
\n\n
\n
\n
\n
\n\n
\n
\n
\n \n \n \n \n
\n
\n \n \n \n \n
\n\n
\n
\n
\n
\n \n \n \n \n
\n
\n \n \n \n \n \n
\n
\n \n \n \n \n
\n
\n
\n \n \n \n
\n
\n \n \n \n \n
\n
\n
\n \n \n \n \n
\n
\n \n \n \n \n \n
\n
\n \n \n \n \n
\n
\n
\n
auto
\n
\n \n \n \n \n \n
\n
\n \n \n \n \n \n
\n
\n \n \n \n
\n
\n \n \n \n \n \n
\n
\n \n \n \n \n \n \n
\n
\n \n \n \n \n
\n \n
\n
\n
\n \n \n \n \n
\n
\n \n \n \n \n \n \n
\n
\n
\n
\n
"; - var html$1_ = "
\n
\n
\n
\n \n \n \n \n
\n
\n \u25C0\u25C0\u25C0\n
\n
\n \u25B6\u25B6\u25B6\n
\n
\n
\n
\n
"; + var html$1Z = "
\n
\n
\n
\n \n \n \n \n
\n
\n \u25C0\u25C0\u25C0\n
\n
\n \u25B6\u25B6\u25B6\n
\n
\n
\n
\n
"; - var html$1Z = "
\n
\n
\n
\n
\n
\n\n
\n
\n #{loading}...\n
\n
\n \n
\n
\n \n
\n
\n
\n\n
\n
\n
"; + var html$1Y = "
\n
\n
\n
\n
\n
\n\n
\n
\n #{loading}...\n
\n
\n \n
\n
\n \n
\n
\n
\n\n
\n
\n
"; - var html$1Y = "
\n \n
"; + var html$1X = "
\n \n
"; - var html$1X = ""; + var html$1W = ""; - var html$1W = "
\n
\n
\n
\n
\n
\n
\n
\n
"; + var html$1V = "
\n
\n
\n
\n
\n
\n
\n
\n
"; - var html$1V = "
\n
{title}
\n
{subtitle}
\n
"; + var html$1U = "
\n
{title}
\n
{subtitle}
\n
"; - var html$1U = "
\n
{icon}
\n
\n
{title}
\n
{subtitle}
\n
\n
"; + var html$1T = "
\n
{icon}
\n
\n
{title}
\n
{subtitle}
\n
\n
"; - var html$1T = "
\n
\n
\n
\n
\n \n \n \n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
"; + var html$1S = "
\n
\n
\n
\n
\n \n \n \n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
"; - var html$1S = "
\n
\n \n
\n
\n
\n #{filter_sorted}
\n
\n\n
\n #{filter_filtred}
\n
\n
"; + var html$1R = "
\n
\n \n
\n
\n
\n #{filter_sorted}
\n
\n\n
\n #{filter_filtred}
\n
\n
"; - var html$1R = "
\n
\n
\n #{more}\n
\n
\n
"; + var html$1Q = "
\n
\n
\n #{more}\n
\n
\n
"; - var html$1Q = "
\n
#{search_input}...
\n
\n
\n
\n
\n
"; + var html$1P = "
\n
#{search_input}...
\n
\n
\n
\n
\n
"; - var html$1P = "
\n
\n
\n\n
\n\n
#{settings_input_links}
\n
\n
"; + var html$1O = "
\n
\n
\n\n
\n\n
#{settings_input_links}
\n
\n
"; - var html$1O = "
\n
\n
\n
{title}
\n
\n
\n \n
\n
\n
"; + var html$1N = "
\n
\n
\n
{title}
\n
\n
\n \n
\n
\n
"; - var html$1N = "
\n
\n
\n \n
\n
\n\n
\n
{name}
\n
{place}
\n
\n
"; + var html$1M = "
\n
\n
\n \n
\n
\n\n
\n
{name}
\n
{place}
\n
\n
"; - var html$1M = "
\n \n
"; + var html$1L = "
\n \n
"; - var html$1L = "
\n
\n
{text}
\n
"; + var html$1K = "
\n
\n
{text}
\n
"; - var html$1K = "
\n
\n \n
\n
{qr_text}
\n
\n\n
\n
{title}
\n
{text}
\n
\n
"; + var html$1J = "
\n
\n \n
\n
{qr_text}
\n
\n\n
\n
{title}
\n
{text}
\n
\n
"; - var html$1J = "
\n\n
\n
\n
\n \n
\n
\n\n
\n
\n
\n
{birthday}
\n
\n
\n \n
{name}
\n
{place}
\n\n
\n
\n \n \n \n
\n\n
\n \n \n \n \n \n
\n
\n
\n
\n
"; + var html$1I = "
\n\n
\n
\n
\n \n
\n
\n\n
\n
\n
\n
{birthday}
\n
\n
\n \n
{name}
\n
{place}
\n\n
\n
\n \n \n \n
\n\n
\n \n \n \n \n \n
\n
\n
\n
\n
"; - var html$1I = "
\n
\n
\n
{title}
\n
{descr}
\n
"; + var html$1H = "
\n
\n
\n
{title}
\n
{descr}
\n
"; - var html$1H = "
\n
{title}
\n
{text}
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
"; + var html$1G = "
\n
{title}
\n
{text}
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
"; - var html$1G = "
\n
\n
{title}
\n
{time}
\n
\n \n
{descr}
\n
"; + var html$1F = "
\n
\n
{title}
\n
{time}
\n
\n \n
{descr}
\n
"; - var html$1F = "
\n
\n
\n \n
\n
\n
\n
\n
{title}
\n
{time}
\n
\n \n
{descr}
\n
\n
"; + var html$1E = "
\n
\n
\n \n
\n
\n
\n
\n
{title}
\n
{time}
\n
\n \n
{descr}
\n
\n
"; - var html$1E = "
\n
{title}
\n
\n
\n
{date}
\n
{tracker}
\n\n
#{torrent_item_bitrate}: {bitrate} #{torrent_item_mb}
\n
#{torrent_item_seeds}: {seeds}
\n
#{torrent_item_grabs}: {grabs}
\n \n
{size}
\n
\n
"; + var html$1D = "
\n
{title}
\n
\n
\n
{date}
\n
{tracker}
\n\n
#{torrent_item_bitrate}: {bitrate} #{torrent_item_mb}
\n
#{torrent_item_seeds}: {seeds}
\n
#{torrent_item_grabs}: {grabs}
\n \n
{size}
\n
\n
"; - var html$1D = "
\n
{title}.{exe}
\n
{size}
\n
"; + var html$1C = "
\n
{title}.{exe}
\n
{size}
\n
"; - var html$1C = "
\n
\n
\n \n
\n\n
\n
{title}
\n
{original_title}
\n
\n
\n
\n \n
\n
"; + var html$1B = "
\n
\n
\n \n
\n\n
\n
{title}
\n
{original_title}
\n
\n
\n
\n \n
\n
"; - var html$1B = "
\n
#{about_text}
\n\n\n
\n
\n
\n #{about_channel}
\n @lampa_channel\n
\n\n
\n #{about_group}
\n @lampa_group\n
\n\n
\n #{about_version}
\n \n
\n\n
\n #{about_version} Android APK
\n \n
\n\n
\n Hash
\n c0d2afd1ce20e62685a23a544a65b096\n
\n\n
\n Builded
\n 2026-06-01 18:41\n
\n
\n
\n\n
\n

#{termsofuse_t_01}

\n\n

#{termsofuse_t_02}

\n\n
    \n
  1. \n
    #{termsofuse_t_03}
    \n\n
      \n
    1. #{termsofuse_t_04}

    2. \n\n
    3. #{termsofuse_t_05}

    4. \n\n
    5. #{termsofuse_t_06}

    6. \n\n
    7. #{termsofuse_t_07}

    8. \n
    \n \n
  2. \n\n
  3. \n
    #{termsofuse_t_08}
    \n\n
      \n
    1. #{termsofuse_t_09}

    2. \n
    3. #{termsofuse_t_10}

    4. \n
    \n
  4. \n\n
  5. \n
    #{termsofuse_t_11}
    \n\n
      \n
    1. #{termsofuse_t_12}

    2. \n
    3. #{termsofuse_t_13}

    4. \n
    \n
  6. \n
\n
\n
"; + var html$1A = "
\n
#{about_text}
\n\n\n
\n
\n
\n #{about_channel}
\n @lampa_channel\n
\n\n
\n #{about_group}
\n @lampa_group\n
\n\n
\n #{about_version}
\n \n
\n\n
\n #{about_version} Android APK
\n \n
\n\n
\n Hash
\n d249ef1a55a31c91f382c18c26319139\n
\n\n
\n Builded
\n 2026-06-08 10:40\n
\n
\n
\n\n
\n

#{termsofuse_t_01}

\n\n

#{termsofuse_t_02}

\n\n
    \n
  1. \n
    #{termsofuse_t_03}
    \n\n
      \n
    1. #{termsofuse_t_04}

    2. \n\n
    3. #{termsofuse_t_05}

    4. \n\n
    5. #{termsofuse_t_06}

    6. \n\n
    7. #{termsofuse_t_07}

    8. \n
    \n \n
  2. \n\n
  3. \n
    #{termsofuse_t_08}
    \n\n
      \n
    1. #{termsofuse_t_09}

    2. \n
    3. #{termsofuse_t_10}

    4. \n
    \n
  4. \n\n
  5. \n
    #{termsofuse_t_11}
    \n\n
      \n
    1. #{termsofuse_t_12}

    2. \n
    3. #{termsofuse_t_13}

    4. \n
    \n
  6. \n
\n
\n
"; - var html$1A = "
\n
\n
\n
{title}
\n
{text}
\n
\n
"; + var html$1z = "
\n
\n
\n
{title}
\n
{text}
\n
\n
"; - var html$1z = "
\n
\n \"\"\n
\n
\n
\n
\n
{title}
\n
{time}
\n
\n\n
\n\n
\n
{info}
\n
{quality}
\n
\n
\n
"; + var html$1y = "
\n
\n \"\"\n
\n
\n
\n
\n
{title}
\n
{time}
\n
\n\n
\n\n
\n
{info}
\n
{quality}
\n
\n
\n
"; - var html$1y = "
\n \n {rate}\n
"; + var html$1x = "
\n \n {rate}\n
"; - var html$1x = "
\n
{name}
\n
{head}
\n
{overview}
\n
"; + var html$1w = "
\n
{name}
\n
{head}
\n
{overview}
\n
"; - var html$1w = "
\n
\n
\n
{title}
\n
{text}
\n
\n
\n\n
\n
\n
\u041F\u0440\u0438\u0447\u0438\u043D\u044B
\n \n
\n\n
\n
\u041A\u0430\u043A \u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u043E?
\n \n
\n\n
\n
\u041A\u0430\u043A \u043F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C?
\n \n
\n
"; + var html$1v = "
\n
\n
\n
{title}
\n
{text}
\n
\n
\n\n
\n
\n
\u041F\u0440\u0438\u0447\u0438\u043D\u044B
\n \n
\n\n
\n
\u041A\u0430\u043A \u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u043E?
\n \n
\n\n
\n
\u041A\u0430\u043A \u043F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C?
\n \n
\n
"; - var html$1v = "
\n
\n
\n
{title}
\n
{text}
\n
\n
\n\n
\n
\n
\u041F\u0440\u0438\u0447\u0438\u043D\u044B
\n \n
\n\n
\n
\u0427\u0442\u043E \u0434\u0435\u043B\u0430\u0442\u044C?
\n \n
\n\n
\n
\u041A\u0430\u043A \u043F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C?
\n \n
\n
"; + var html$1u = "
\n
\n
\n
{title}
\n
{text}
\n
\n
\n\n
\n
\n
\u041F\u0440\u0438\u0447\u0438\u043D\u044B
\n \n
\n\n
\n
\u0427\u0442\u043E \u0434\u0435\u043B\u0430\u0442\u044C?
\n \n
\n\n
\n
\u041A\u0430\u043A \u043F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C?
\n \n
\n
"; - var html$1u = "
\n
\n
\n
{title}
\n
{text}
\n
\n
\n\n
\n
\n
#{torent_nohash_reasons}
\n \n
\n\n
\n
#{torent_nohash_do}
\n \n
\n\n
\n
#{torent_nohash_do}
\n \n
\n
"; + var html$1t = "
\n
\n
\n
{title}
\n
{text}
\n
\n
\n\n
\n
\n
#{torent_nohash_reasons}
\n \n
\n\n
\n
#{torent_nohash_do}
\n \n
\n\n
\n
#{torent_nohash_do}
\n \n
\n
"; - var html$1t = "
\n
\n \n
\n
\n
#{torrent_install_need}
\n
#{torrent_install_text}
\n \n
#{torrent_install_contact}
\n\n
\n
\n
LG - Samsung
\n
@lampa_group
\n
\n
\n
\n
"; + var html$1s = "
\n
\n \n
\n
\n
#{torrent_install_need}
\n
#{torrent_install_text}
\n \n
#{torrent_install_contact}
\n\n
\n
\n
LG - Samsung
\n
@lampa_group
\n
\n
\n
\n
"; - var html$1s = "
\n
#{torrent_error_text}
\n\n
\n
\n
\n
\n\n
\n
\n
    \n
  • #{torrent_error_step_1}
  • \n
  • #{torrent_error_step_2}
  • \n
  • #{torrent_error_step_3}
  • \n
  • #{torrent_error_step_4}
  • \n
  • #{torrent_error_step_5}
  • \n
  • #{torrent_error_step_6}
  • \n
\n
\n\n
\n
#{torrent_error_info_1}
\n
#{torrent_error_info_2}
\n
#{torrent_error_info_3}
\n
#{torrent_error_info_4}
\n
#{torrent_error_info_5}
\n
#{torrent_error_info_6}
\n
#{torrent_error_info_7}
\n
\n
\n\n
\n
#{torrent_error_start}
\n
\n
"; + var html$1r = "
\n
#{torrent_error_text}
\n\n
\n
\n
\n
\n\n
\n
\n
    \n
  • #{torrent_error_step_1}
  • \n
  • #{torrent_error_step_2}
  • \n
  • #{torrent_error_step_3}
  • \n
  • #{torrent_error_step_4}
  • \n
  • #{torrent_error_step_5}
  • \n
  • #{torrent_error_step_6}
  • \n
\n
\n\n
\n
#{torrent_error_info_1}
\n
#{torrent_error_info_2}
\n
#{torrent_error_info_3}
\n
#{torrent_error_info_4}
\n
#{torrent_error_info_5}
\n
#{torrent_error_info_6}
\n
#{torrent_error_info_7}
\n
\n
\n\n
\n
#{torrent_error_start}
\n
\n
"; - var html$1r = "
\n \n
\n
\n
{fname}
\n
#{torrent_serial_season} - {season}#{torrent_serial_date} - {air_date}
\n
\n
\n
{size}
\n
.{exe}
\n
\n
\n
\n
{episode}
\n
"; + var html$1q = "
\n \n
\n
\n
{fname}
\n
#{torrent_serial_season} - {season}#{torrent_serial_date} - {air_date}
\n
\n
\n
{size}
\n
.{exe}
\n
\n
\n
\n
{episode}
\n
"; - var html$1q = "
\n
\n
\n
"; + var html$1p = "
\n
\n
\n
"; - var html$1p = "
\n
\n
\n
"; + var html$1o = "
\n
\n
\n
"; - var html$1o = "\n\n"; + var html$1n = "\n\n"; - var html$1n = "\n\n"; + var html$1m = "\n\n"; - var html$1m = "\n\n"; + var html$1l = "\n\n"; - var html$1l = "\n\n"; + var html$1k = "\n\n"; - var html$1k = "\n \n \n \n \n \n \n \n"; + var html$1j = "\n \n \n \n \n \n \n \n"; - var html$1j = "\n \n \n \n"; + var html$1i = "\n \n \n \n"; - var html$1i = "\n\n"; + var html$1h = "\n\n"; - var html$1h = "\n\n"; + var html$1g = "\n\n"; - var html$1g = "\n\n"; + var html$1f = "\n\n"; - var html$1f = "\n\n"; + var html$1e = "\n\n"; - var html$1e = "\n\n"; + var html$1d = "\n\n"; - var html$1d = "\n\n"; + var html$1c = "\n\n"; - var html$1c = "\n\n"; + var html$1b = "\n\n"; - var html$1b = "\n\n\n\n\n"; + var html$1a = "\n\n\n\n\n"; - var html$1a = "\n\n"; + var html$19 = "\n\n"; - var html$19 = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"; + var html$18 = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"; - var html$18 = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"; + var html$17 = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"; - var html$17 = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"; + var html$16 = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"; - var html$16 = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"; + var html$15 = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"; - var html$15 = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"; + var html$14 = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"; - var html$14 = "\n\n\n\n\n"; + var html$13 = "\n\n\n\n\n"; - var html$13 = "\n\n \n \n\n"; + var html$12 = "\n\n \n \n\n"; - var html$12 = "
\n
\n
"; + var html$11 = "
\n
\n
"; - var html$11 = "\n#{time_viewed} - {time} #{time_from} {duration} / {percent}\n"; + var html$10 = "\n#{time_viewed} - {time} #{time_from} {duration} / {percent}\n"; - var html$10 = "
\n
#{empty_title}
\n
#{empty_text}
\n
"; + var html$$ = "
\n
#{empty_title}
\n
#{empty_text}
\n
"; - var html$$ = "
\n
\n \n \n
\n
\n
\n
\n
\n
\n
"; + var html$_ = "
\n
\n \n \n
\n
\n
\n
\n
\n
\n
"; - var html$_ = "
\n\n
\n
#{plugins_catalog_work}
\n
#{plugins_catalog_work_descr}
\n
\n \n
\n
\n\n
\n
#{plugins_catalog_popular}
\n
#{plugins_catalog_popular_descr}
\n
\n \n
\n
\n
"; + var html$Z = "
\n\n
\n
#{plugins_catalog_work}
\n
#{plugins_catalog_work_descr}
\n
\n \n
\n
\n\n
\n
#{plugins_catalog_popular}
\n
#{plugins_catalog_popular_descr}
\n
\n \n
\n
\n
"; - var html$Z = "
\n
{text}
\n\n
\n\n
\n \n
\n
"; + var html$Y = "
\n
{text}
\n\n
\n\n
\n \n
\n
"; - var html$Y = "
\n
\n
\n \n
\n
\n
\n
\n
\n
"; + var html$X = "
\n
\n
\n \n
\n
\n
\n
\n
\n
"; - var html$X = "
\n
\n
"; + var html$W = "
\n
\n
"; - var html$W = "
\n
\n
{title}
\n
\n
\n
"; + var html$V = "
\n
\n
{title}
\n
\n
\n
"; - var html$V = "
\n
\n
\n
\n
\n
\n
\n
\n
\n \n \n \n \n
\n
\n
\n
#{player_disabled}
\n
\n
"; + var html$U = "
\n
\n
\n
\n
\n
\n
\n
\n
\n \n \n \n \n
\n
\n
\n
#{player_disabled}
\n
\n
"; - var html$U = "
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
#{player_disabled}
\n
\n
\n
"; + var html$T = "
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
#{player_disabled}
\n
\n
\n
"; - var html$T = "
\n
\n
\n\n
\n
"; + var html$S = "
\n
\n
\n\n
\n
"; - var html$S = "
\n
\n \n
\n
\n
\n
\n
"; + var html$R = "
\n
\n \n
\n
\n
\n
\n
"; - var html$R = "
\n
\n \n
\n
\n
\n
\n
\n
"; + var html$Q = "
\n
\n \n
\n
\n
\n
\n
\n
"; - var html$Q = "
\n
\n \n
\n
"; + var html$P = "
\n
\n \n
\n
"; - var html$P = "
\n
\n \n \n \n \n
\n\n
\n #{account_create}\n
\n
"; + var html$O = "
\n
\n \n \n \n \n
\n\n
\n #{account_create}\n
\n
"; - var html$O = "
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n\n
\n #{account_limited}\n
\n
"; + var html$N = "
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n\n
\n #{account_limited}\n
\n
"; - var html$N = "
\n
\n \n
\n
#{account_qr_create}
\n
\n\n
\n
#{account_none_title}
\n
#{account_create}
\n
- #{account_none_include_1}\n
- #{account_none_include_2}\n
- #{account_none_include_3}\n
- #{account_none_include_4}\n
\n\n
#{settings_cub_signin_button}
\n
\n
"; + var html$M = "
\n
\n \n
\n
#{account_qr_create}
\n
\n\n
\n
#{account_none_title}
\n
#{account_create}
\n
- #{account_none_include_1}\n
- #{account_none_include_2}\n
- #{account_none_include_3}\n
- #{account_none_include_4}\n
\n\n
#{settings_cub_signin_button}
\n
\n
"; - var html$M = "
\n
\n \n
\n
#{account_qr_premium}
\n
\n\n
\n
CUB Premium
\n
#{account_premium}
\n
- #{account_premium_include_1}\n
- #{account_premium_include_2}\n
- #{account_premium_include_4}\n
\n
\n
"; + var html$L = "
\n
\n \n
\n
#{account_qr_premium}
\n
\n\n
\n
CUB Premium
\n
#{account_premium}
\n
- #{account_premium_include_1}\n
- #{account_premium_include_2}\n
- #{account_premium_include_4}\n
\n
\n
"; - var html$L = "
\n
CUB Premium
\n
\n #{account_premium}\n
\n
#{account_premium_more}
\n
{site}/premium
\n
"; + var html$K = "
\n
CUB Premium
\n
\n #{account_premium}\n
\n
#{account_premium_more}
\n
{site}/premium
\n
"; - var html$K = "
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n CUB Premium\n
\n
\n #{account_premium}\n
\n
\n
\n
#{account_premium_include_1}#{account_premium_include_text_1}
\n
#{filter_rating_from} 360 #{filter_rating_to} 5 040
\n
\n
\n
#{account_premium_include_2}#{account_premium_include_text_2}
\n
#{filter_rating_from} 100 #{filter_rating_to} 500
\n
\n
\n
#{account_premium_include_3}#{account_premium_include_text_3}
\n
#{filter_rating_from} 1 000 #{filter_rating_to} 10 000
\n
\n
\n
#{account_premium_include_4}#{account_premium_include_text_4}
\n
#{filter_rating_from} 3 #{filter_rating_to} 8
\n
\n
\n
#{account_premium_include_5}#{account_premium_include_text_5}
\n
\n
\n
\n
#{account_premium_include_6}#{account_premium_include_text_6}
\n
\n
\n
\n
#{account_premium_more}
\n
{site}/premium
\n
"; + var html$J = "
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n CUB Premium\n
\n
\n #{account_premium}\n
\n
\n
\n
#{account_premium_include_1}#{account_premium_include_text_1}
\n
#{filter_rating_from} 360 #{filter_rating_to} 5 040
\n
\n
\n
#{account_premium_include_2}#{account_premium_include_text_2}
\n
#{filter_rating_from} 100 #{filter_rating_to} 500
\n
\n
\n
#{account_premium_include_3}#{account_premium_include_text_3}
\n
#{filter_rating_from} 1 000 #{filter_rating_to} 10 000
\n
\n
\n
#{account_premium_include_4}#{account_premium_include_text_4}
\n
#{filter_rating_from} 3 #{filter_rating_to} 8
\n
\n
\n
#{account_premium_include_5}#{account_premium_include_text_5}
\n
\n
\n
\n
#{account_premium_include_6}#{account_premium_include_text_6}
\n
\n
\n
\n
#{account_premium_more}
\n
{site}/premium
\n
"; - var html$J = "
\n
\n
\n
\n
\n
\n
\n \"\"\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
"; + var html$I = "
\n
\n
\n
\n
\n
\n
\n \"\"\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
"; - var html$I = "
\n \n \n \n \n \n \n
"; + var html$H = "
\n \n \n \n \n \n \n
"; - var html$H = "
\n
\n \n \n \n \n \n \n \n \n \n
\n
\n #{https_text}\n
\n
"; + var html$G = "
\n
\n \n \n \n \n \n \n \n \n \n
\n
\n #{https_text}\n
\n
"; - var html$G = "
\n
\n
\n
\n \n
\n
#{back}
\n
\n\n
\n
\n \n
\n
#{title_main}
\n
\n\n
\n
\n \n
\n
#{search}
\n
\n\n
\n
\n \n
\n
#{menu_settings}
\n
\n
\n
"; + var html$F = "
\n
\n
\n
\n \n
\n
#{back}
\n
\n\n
\n
\n \n
\n
#{title_main}
\n
\n\n
\n
\n \n
\n
#{search}
\n
\n\n
\n
\n \n
\n
#{menu_settings}
\n
\n
\n
"; - var html$F = "
\n
\n \n
\n
{title}
\n
"; + var html$E = "
\n
\n \n
\n
{title}
\n
"; - var html$E = "
\n \n\n
\n #{account_code_where}\n
\n\n
#{account_code_input}
\n
"; + var html$D = "
\n \n\n
\n #{account_code_where}\n
\n\n
#{account_code_input}
\n
"; - var html$D = "
\n
\n \n
\n
#{account_qr_code}
\n
\n\n
\n
#{account_add_device_title}
\n
#{account_add_device_text}
\n\n
\n
\n
\n
\n
\n
\n
\n
\n\n
\n
\n
\n
\n
"; + var html$C = "
\n
\n \n
\n
#{account_qr_code}
\n
\n\n
\n
#{account_add_device_title}
\n
#{account_add_device_text}
\n\n
\n
\n
\n
\n
\n
\n
\n
\n\n
\n
\n
\n
\n
"; - var html$C = "
\n
\n
\n \n \n \n
\n
\n
\n\n
\n
\n \n
\n
\n\n
\n
\n
\n
\n
\n
\n
\n
"; + var html$B = "
\n
\n
\n \n \n \n
\n
\n
\n\n
\n
\n \n
\n
\n\n
\n
\n
\n
\n
\n
\n
\n
"; - var html$B = "
\n
\n \n
\n\n
\n
\n
\n
\n
"; + var html$A = "
\n
\n \n
\n\n
\n
\n
\n
\n
"; - var html$A = "
\n
\n
\n \n \n \n
\n
\n
\n\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n\n
\n
\n
\n
\n
\n
"; + var html$z = "
\n
\n
\n \n \n \n
\n
\n
\n\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n\n
\n
\n
\n
\n
\n
"; - var html$z = "
\n
\n
\n
"; + var html$y = "
\n
\n
\n
"; - var html$y = "
\n
\n \n \n \n \n \n \n \n \n\n \n 0\n \n \n 5\n \n \n 10\n \n \n 15\n \n \n 20\n \n \n 30\n \n \n 60\n \n \n 100\n \n \n 200\n \n \n 500\n \n \n 0.000\n Mbps\n \n \n\n \n \n \n
\n
"; - - var html$x = "
\n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\n
\n
\n
\n
"; + var html$x = "
\n
\n \n \n \n \n \n \n \n \n\n \n 0\n \n \n 5\n \n \n 10\n \n \n 15\n \n \n 20\n \n \n 30\n \n \n 60\n \n \n 100\n \n \n 200\n \n \n 500\n \n \n 0.000\n Mbps\n \n \n\n \n \n \n
\n
"; var html$w = "
\n
\n\n \n\n
\n\n
\n \n \n \n \n
\n\n
\n
\n
\n
\n
\n
\n\n
\n\n
\n
"; @@ -2714,129 +2712,128 @@ var html$o = "
\n
{icon}
\n
\n
{title}
\n
{text}
\n
\n
\n
"; var templates = { - head: html$2r, - wrap: html$2q, - menu: html$2p, - activitys: html$2o, - activity: html$2n, - activity_wait_refresh: html$2m, - settings: html$2k, - settings_main: html$2j, - settings_interface: html$2i, - settings_parser: html$2h, - settings_server: html$2g, - settings_player: html$2f, - settings_more: html$2e, - settings_tmdb: html$2d, - settings_plugins: html$2c, - settings_account: html$2b, - scroll: html$2l, - items_line: html$2a, - card: html$29, - card_parser: html$28, - card_watched: html$27, - card_episode: html$26, - full_start_new: html$25, - full_descr: html$24, - full_person: html$23, - full_review: html$22, - full_episode: html$21, - player: html$20, - player_panel: html$1$, - player_video: html$1_, - player_info: html$1Z, - player_footer: html$1Y, - player_footer_card: html$1X, - selectbox: html$1W, - selectbox_item: html$1V, - info: html$1T, - more: html$1R, - search: html$1Q, - settings_input: html$1P, - modal: html$1O, - company: html$1N, - modal_loading: html$1M, - modal_pending: html$1L, - modal_qr: html$1K, - person_start: html$1J, - empty: html$1I, - empty_filter: html$1H, - notice: html$1G, - notice_card: html$1F, - torrent: html$1E, - torrent_file: html$1D, - files: html$1C, - about: html$1B, - error: html$1A, - torrent_noconnect: html$1w, - torrent_file_serial: html$1r, - torrent_nocheck: html$1v, - torrent_nohash: html$1u, - torrent_install: html$1t, - torrent_error: html$1s, - filter: html$1S, - search_box: html$1q, - console: html$1p, - icon_star: html$1o, - icon_viewed: html$1n, - icon_lock: html$1m, - icon_like: html$1l, - icon_text: html$1k, - icon_card: html$1j, - icon_top: html$1i, - icon_fire: html$1h, - icon_hd: html$1g, - icon_collection: html$1f, - icon_search: html$1e, - icon_settings: html$1d, - icon_bell: html$1c, - icon_bell_plus: html$1b, - icon_broadcast: html$1a, - icon_create_account: html$19, - icon_empty_subscribe: html$18, - icon_empty_bookmarks: html$17, - icon_empty_history: html$16, - icon_empty_torrents: html$15, - icon_profile: html$14, - icon_back: html$13, - timeline: html$12, - timeline_details: html$11, - list_empty: html$10, - screensaver: html$$, - plugins_catalog: html$_, - broadcast: html$Z, - lang_choice: html$Y, - extensions: html$X, - extensions_block: html$W, - extensions_item: html$V, - extensions_recomend: html$U, - extensions_info: html$T, - extensions_theme: html$S, - extensions_screensaver: html$R, - iframe: html$Q, - account: html$P, - account_limited: html$O, - account_none: html$N, - account_premium: html$M, - cub_premium: html$L, - cub_premium_modal: html$K, - selectbox_icon: html$1U, - explorer: html$J, - explorer_button_back: html$I, - https: html$H, - navigation_bar: html$G, - head_backward: html$F, - account_add_device: html$E, - account_add_device_new: html$D, - feed_item: html$C, - feed_head: html$B, - feed_episode: html$A, - register: html$z, - speedtest: html$y, - season_episode: html$1z, - season_episode_rate: html$1y, - season_info: html$1x, - ad_bot: html$x, + head: html$2q, + wrap: html$2p, + menu: html$2o, + activitys: html$2n, + activity: html$2m, + activity_wait_refresh: html$2l, + settings: html$2j, + settings_main: html$2i, + settings_interface: html$2h, + settings_parser: html$2g, + settings_server: html$2f, + settings_player: html$2e, + settings_more: html$2d, + settings_tmdb: html$2c, + settings_plugins: html$2b, + settings_account: html$2a, + scroll: html$2k, + items_line: html$29, + card: html$28, + card_parser: html$27, + card_watched: html$26, + card_episode: html$25, + full_start_new: html$24, + full_descr: html$23, + full_person: html$22, + full_review: html$21, + full_episode: html$20, + player: html$1$, + player_panel: html$1_, + player_video: html$1Z, + player_info: html$1Y, + player_footer: html$1X, + player_footer_card: html$1W, + selectbox: html$1V, + selectbox_item: html$1U, + info: html$1S, + more: html$1Q, + search: html$1P, + settings_input: html$1O, + modal: html$1N, + company: html$1M, + modal_loading: html$1L, + modal_pending: html$1K, + modal_qr: html$1J, + person_start: html$1I, + empty: html$1H, + empty_filter: html$1G, + notice: html$1F, + notice_card: html$1E, + torrent: html$1D, + torrent_file: html$1C, + files: html$1B, + about: html$1A, + error: html$1z, + torrent_noconnect: html$1v, + torrent_file_serial: html$1q, + torrent_nocheck: html$1u, + torrent_nohash: html$1t, + torrent_install: html$1s, + torrent_error: html$1r, + filter: html$1R, + search_box: html$1p, + console: html$1o, + icon_star: html$1n, + icon_viewed: html$1m, + icon_lock: html$1l, + icon_like: html$1k, + icon_text: html$1j, + icon_card: html$1i, + icon_top: html$1h, + icon_fire: html$1g, + icon_hd: html$1f, + icon_collection: html$1e, + icon_search: html$1d, + icon_settings: html$1c, + icon_bell: html$1b, + icon_bell_plus: html$1a, + icon_broadcast: html$19, + icon_create_account: html$18, + icon_empty_subscribe: html$17, + icon_empty_bookmarks: html$16, + icon_empty_history: html$15, + icon_empty_torrents: html$14, + icon_profile: html$13, + icon_back: html$12, + timeline: html$11, + timeline_details: html$10, + list_empty: html$$, + screensaver: html$_, + plugins_catalog: html$Z, + broadcast: html$Y, + lang_choice: html$X, + extensions: html$W, + extensions_block: html$V, + extensions_item: html$U, + extensions_recomend: html$T, + extensions_info: html$S, + extensions_theme: html$R, + extensions_screensaver: html$Q, + iframe: html$P, + account: html$O, + account_limited: html$N, + account_none: html$M, + account_premium: html$L, + cub_premium: html$K, + cub_premium_modal: html$J, + selectbox_icon: html$1T, + explorer: html$I, + explorer_button_back: html$H, + https: html$G, + navigation_bar: html$F, + head_backward: html$E, + account_add_device: html$D, + account_add_device_new: html$C, + feed_item: html$B, + feed_head: html$A, + feed_episode: html$z, + register: html$y, + speedtest: html$x, + season_episode: html$1y, + season_episode_rate: html$1x, + season_info: html$1w, ad_video_block: html$w, discuss_rules: html$v, bookmarks_folder: html$u, @@ -2856,7 +2853,7 @@ * @returns {jQuery|string} - jQuery объект или строка */ - function get$h(name) { + function get$g(name) { var vars = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var like_static = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var tpl = templates[name]; @@ -2885,7 +2882,7 @@ if (!created[name]) { // создаём чистый шаблон без переменных - var raw = get$h(name, {}, false)[0]; + var raw = get$g(name, {}, false)[0]; created[name] = raw.cloneNode(true); // кэшируем "чистый" DOM } // клонируем кэш @@ -3105,7 +3102,7 @@ } var Template = { - get: get$h, + get: get$g, js: js, add: add$h, all: all$5, @@ -4071,6 +4068,7 @@ } function shortText(fullStr, strLen, separator) { + fullStr = fullStr + ''; if (fullStr.length <= strLen) return fullStr; separator = separator || '...'; var sepLen = separator.length, @@ -4488,7 +4486,7 @@ return filtred; } - function buildUrl(baseUrl, path, queryParams) { + function buildUrl$1(baseUrl, path, queryParams) { // Убираем все, что идет после хоста (например, /ts) var host = baseUrl.split('/').slice(0, 3).join('/'); // Убираем лишние "/" в начале и конце пути @@ -4804,7 +4802,7 @@ dcma: dcma, inputDisplay: inputDisplay, filterCardsByType: filterCardsByType, - buildUrl: buildUrl, + buildUrl: buildUrl$1, simpleMarkdownParser: simpleMarkdownParser, fixProtocolLink: fixProtocolLink, fixMirrorLink: fixMirrorLink, @@ -5823,7 +5821,7 @@ canvas.height = height; } - function get$g(img) { + function get$f(img) { reset$1(30, 17); var ratio = Math.max(canvas.width / img.width, canvas.height / img.height); var nw = img.width * ratio, @@ -5926,7 +5924,7 @@ } var Color = { - get: get$g, + get: get$f, extract: extract$2, palette: palette, rgba: rgba, @@ -6662,7 +6660,7 @@ }); } - function start$8(object) { + function start$9(object) { status$2.position_view = object.position; status$2.position_channel = object.position; status$2.active = object; @@ -6806,7 +6804,7 @@ var PlayerIPTV = { listener: listener$k, init: init$17, - start: start$8, + start: start$9, playning: playning, channel: channel$1, programReady: programReady, @@ -7419,7 +7417,7 @@ */ - function get$f() { + function get$e() { return playlist$1; } /** @@ -7437,7 +7435,7 @@ active: active$5, show: show$a, url: url$5, - get: get$f, + get: get$e, set: set$4, prev: prev, next: next, @@ -7454,7 +7452,7 @@ }; function update$f(time) { - var skip = get$e(time); + var skip = get$d(time); if (skip && !skip.segment.viewed) { skip.segment.viewed = true; @@ -7475,7 +7473,7 @@ listener$h.send('set', segments); } - function get$e(time) { + function get$d(time) { var skip = false; for (var i in segments) { @@ -7501,7 +7499,7 @@ listener: listener$h, update: update$f, set: set$3, - get: get$e, + get: get$d, all: all$4 }; @@ -12222,7 +12220,7 @@ listener$e.send('loadeddata', {}); scale(); if (neeed_speed) speed(neeed_speed); - loaded$1(); + loaded$2(); }); var pc = Boolean(Platform.desktop() || Platform.is('browser') || Platform.is('apple') && !Utils$1.isPWA()); // для страховки @@ -12420,7 +12418,7 @@ */ - function loaded$1() { + function loaded$2() { var tracks = []; var subs = _video.customSubs || _video.textTracks || []; console.log('Player', 'video full loaded'); @@ -12718,7 +12716,7 @@ !!videobox && display.append(videobox); bind$2(); setTimeout(function () { - load$4(src); + load$3(src); }, 100); return true; } @@ -12764,7 +12762,7 @@ if (/\.mpd/.test(src) && typeof dashjs !== 'undefined') { try { if (Platform.is('orsay') && Storage.field('player') == 'orsay') { - load$4(src); + load$3(src); } else { dash = dashjs.MediaPlayer().create(); dash.getSettings().streaming.abr.autoSwitchBitrate = false; @@ -12772,7 +12770,7 @@ } } catch (e) { console.log('Player', 'Dash error:', e.stack); - load$4(src); + load$3(src); } } else if (/\.m3u8/.test(src)) { if (navigator.userAgent.toLowerCase().indexOf('maple') > -1) src += '|COMPONENT=HLS'; @@ -12814,7 +12812,7 @@ if (data.details === Hls.ErrorDetails.MANIFEST_PARSING_ERROR) { if (data.reason === "no EXTM3U delimiter") { - load$4(src); + load$3(src); } else { listener$e.send('error', { error: 'details [' + data.details + '] fatal [' + data.fatal + ']', @@ -12851,7 +12849,7 @@ hls_parser.loadSource(src); hls_parser.on(Hls.Events.ERROR, function (event, data) { console.log('Player', 'hls parse error', data.reason, data.details, data.fatal); - if (!send_load_ready) load$4(src); + if (!send_load_ready) load$3(src); }); hls_parser.on(Hls.Events.MANIFEST_LOADED, function () { if (hls_parser.audioTracks.length) listener$e.send('translate', { @@ -12894,14 +12892,14 @@ current: hlsLevelName(select_level) }); console.log('Player', 'hls select level url:', select_level.url[0]); - load$4(select_level.url[0]); - } else load$4(src); + load$3(select_level.url[0]); + } else load$3(src); send_load_ready = true; }); - } else load$4(src); - } else load$4(src); - } else load$4(src); + } else load$3(src); + } else load$3(src); + } else load$3(src); } /** * Начать загрузку @@ -12909,7 +12907,7 @@ */ - function load$4(src) { + function load$3(src) { if (hls_parser) { hls_parser.destroy(); hls_parser = false; @@ -13491,7 +13489,7 @@ network$b.clear(); } - function error$2() { + function error$3() { var temp = Template.get('torrent_error', { ip: ip() }); @@ -13556,7 +13554,7 @@ remove: remove$4, connected: connected, parse: parse$1, - error: error$2, + error: error$3, cache: cache$1, clearFileName: clearFileName }; @@ -13580,7 +13578,7 @@ var listener$d = Subscribe$2(); var network$a = new Request(); var elems; - var error$1, stat_timer; + var error$2, stat_timer; function init$12() { html$i = Template.get('player_info'); @@ -13604,12 +13602,12 @@ function set$2(need, value) { if (need == 'name') elems.name.html(value);else if (need == 'size' && value.width && value.height) elems.size.text(value.width + 'x' + value.height);else if (need == 'error') { - clearTimeout(error$1); + clearTimeout(error$2); elems.error.removeClass('hide').text(value); - error$1 = setTimeout(function () { + error$2 = setTimeout(function () { elems.error.addClass('hide'); }, 10000); - } else if (need == 'stat') stat$3(value);else if (need == 'bitrate') elems.stat.html(value); + } else if (need == 'stat') stat$4(value);else if (need == 'bitrate') elems.stat.html(value); } function pieces(cache) { @@ -13648,7 +13646,7 @@ */ - function stat$3(url) { + function stat$4(url) { var wait = 0; elems.stat.text('- / - • - ' + Lang.translate('connected_seeds')); elems.speed.text('--'); @@ -13714,7 +13712,7 @@ elems.speed.text(''); elems.error.addClass('hide'); elems.pieces.empty(); - clearTimeout(error$1); + clearTimeout(error$2); clearInterval(stat_timer); network$a.clear(); } @@ -14647,7 +14645,7 @@ * @returns {void} */ - function start$7(on_cancel, text) { + function start$8(on_cancel, text) { callback_cancel = on_cancel; controller_enabled = Controller.enabled().name; loader = $("
\n
\n
".concat(Lang.translate('loading'), "
\n
\n
\n
")); @@ -14696,7 +14694,7 @@ */ - function stop() { + function stop$1() { if (loader) loader.remove(); clearTimeout(timer$5); if (controller_enabled) Controller.toggle(controller_enabled); @@ -14713,8 +14711,8 @@ } var Loading$1 = { - start: start$7, - stop: stop, + start: start$8, + stop: stop$1, setText: setText }; @@ -16220,7 +16218,7 @@ observe$3(); } - function start$6() { + function start$7() { var list = $(''); menu$3.find('.menu__item').each(function () { var item_orig = $(this); @@ -16323,7 +16321,7 @@ var Editor = { init: init$10, - start: start$6, + start: start$7, update: update$d, observe: observe$3 }; @@ -17402,7 +17400,7 @@ return Utils$1.protocol() + object$2.cub_domain + '/api/'; } - function load$3(path) { + function load$2(path) { var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var post = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; return new Promise(function (resolve, reject) { @@ -17427,7 +17425,7 @@ function persons(secuses, error) { if (permit.access && !window.lampa_settings.disable_features.persons) { - load$3('person/list').then(function (data) { + load$2('person/list').then(function (data) { Storage.set('person_subscribes_id', data.results.map(function (a) { return a.person_id; })); @@ -17440,7 +17438,7 @@ function user(secuses, error) { if (permit.access) { - load$3('users/get?device_name=' + decodeURIComponent(Storage.get('device_name'))).then(function (data) { + load$2('users/get?device_name=' + decodeURIComponent(Storage.get('device_name'))).then(function (data) { Storage.set('account_user', JSON.stringify(data.user)); if (secuses) secuses(data.user); })["catch"](error ? error : function () {}); @@ -17451,7 +17449,7 @@ function plugins(call) { if (permit.access) { - load$3('plugins/all', { + load$2('plugins/all', { timeout: 3000 }).then(function (result) { if (result.secuses) { @@ -17468,7 +17466,7 @@ function pluginToggle(plugin, status) { if (permit.access) { - load$3((plugin.author ? 'extensions' : 'plugins') + '/status', {}, { + load$2((plugin.author ? 'extensions' : 'plugins') + '/status', {}, { id: plugin.id, status: status })["catch"](function () {}); @@ -17477,7 +17475,7 @@ function notices(call) { if (permit.access) { - load$3('notice/all', { + load$2('notice/all', { cache: 1000 * 60 * 10 }).then(function (result) { if (result.secuses) { @@ -17498,7 +17496,7 @@ var error = arguments.length > 2 ? arguments[2] : undefined; if (permit.access) { - load$3('notifications/all').then(function (result) { + load$2('notifications/all').then(function (result) { if (params.to_card_subscribe) { var cards = []; result.notifications.forEach(function (n) { @@ -17529,7 +17527,7 @@ var error = arguments.length > 2 ? arguments[2] : undefined; if (permit.access && params.voice) { - load$3('notifications/add', {}, { + load$2('notifications/add', {}, { voice: params.voice, data: JSON.stringify(Utils$1.clearCard(params.card)), episode: params.episode, @@ -17544,7 +17542,7 @@ var Api$1 = { url: url$2, - load: load$3, + load: load$2, user: user, persons: persons, plugins: plugins, @@ -19107,11 +19105,11 @@ var lgbt = ["bisexual man", "bisexuality", "black lgbt", "closeted homosexual", "drag queen", "female homosexuality", "gay hardcore", "gay adoption", "gay artist", "gay bar", "gay club", "gay couple", "gay erotica", "gay for pay", "gay friend", "gay history", "gay interest", "gay kiss", "gay love", "gay love story", "gay man", "gay marriage", "gay men", "gay muslim", "gay parent", "gay pornography", "gay pride", "gay priest", "gay relationship", "gay rights", "gay romance", "gay sauna", "gay sex", "gay son", "gay teenager", "gay theme", "gay youth", "gender transition", "homoerotic", "homoeroticism", "homoerotism", "homofobia", "homophobia", "homophobic", "homophobic attack", "homosexual", "homosexual father", "homosexuality", "indigenous lgbt", "intersex", "intersexuality", "lesbian", "lesbian couple", "lesbian love", "lesbian maid", "lesbian nun", "lesbian relationship", "lesbian sex", "lgbt", "lgbt activist", "lgbt athlete", "lgbt history", "lgbt in africa", "lgbt in the military", "lgbt parenting", "lgbt rights", "lgbt teen", "male homosexuality", "queer", "queer cinema", "queer history", "queer loneliness", "queer love", "queer romance", "queer sexuality", "repressed gay", "teenage lesbian romance", "trans man", "trans woman", "transgender", "transgender rights", "transition", "transsexual", "transsexuality", "transvestism", "transvestite", "boys' love", "boys love"]; var adult = ['porn', 'sex', 'xxx', 'erotic', 'fetish', 'bdsm', 'bondage', 'sado', 'masochism', 'voyeurism', 'exhibitionism', 'incest', 'softcore', 'eroticism', 'erotica', 'nude', 'nudity', 'nudism', 'naked', 'pink film']; - var filter$3 = ['путин', 'россия', 'putin', 'russia', 'лукашенко', 'lukashenko', 'навальный', 'navalny', '^буча', 'мариуполь', 'гомосекс', 'homosex', 'кремль']; + var filter$2 = ['путин', 'россия', 'putin', 'russia', 'лукашенко', 'lukashenko', 'навальный', 'navalny', '^буча', 'мариуполь', 'гомосекс', 'homosex', 'кремль']; var Keys = { lgbt: lgbt, adult: adult, - filter: filter$3 + filter: filter$2 }; var network$7 = new Request(); @@ -19355,7 +19353,7 @@ return u + (/\?/.test(u) ? '&' : '?') + params; } - function get$d(method) { + function get$c(method) { var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var oncomplite = arguments.length > 2 ? arguments[2] : undefined; var onerror = arguments.length > 3 ? arguments[3] : undefined; @@ -19461,35 +19459,35 @@ var onerror = arguments.length > 2 ? arguments[2] : undefined; var parts_limit = 6; var parts_data = [function (call) { - get$d('movie/now_playing', params, function (json) { + get$c('movie/now_playing', params, function (json) { json.title = Lang.translate('title_now_watch'); call(json); }, call, { life: day$1 * 2 }); }, function (call) { - get$d('trending/movie/day', params, function (json) { + get$c('trending/movie/day', params, function (json) { json.title = Lang.translate('title_trend_day'); call(json); }, call, { life: day$1 * 2 }); }, function (call) { - get$d('trending/movie/week', params, function (json) { + get$c('trending/movie/week', params, function (json) { json.title = Lang.translate('title_trend_week'); call(json); }, call, { life: day$1 * 3 }); }, function (call) { - get$d('movie/upcoming', params, function (json) { + get$c('movie/upcoming', params, function (json) { json.title = Lang.translate('title_upcoming'); call(json); }, call, { life: day$1 * 7 }); }, function (call) { - get$d('movie/popular', params, function (json) { + get$c('movie/popular', params, function (json) { json.title = Lang.translate('title_popular_movie'); json.icon_svg = Template.string('icon_fire'); json.icon_bgcolor = '#fff'; @@ -19502,7 +19500,7 @@ life: day$1 * 3 }); }, function (call) { - get$d('trending/tv/week', params, function (json) { + get$c('trending/tv/week', params, function (json) { json.title = Lang.translate('title_popular_tv'); json.icon_svg = Template.string('icon_fire'); json.icon_bgcolor = '#fff'; @@ -19515,7 +19513,7 @@ life: day$1 * 3 }); }, function (call) { - get$d('movie/top_rated', params, function (json) { + get$c('movie/top_rated', params, function (json) { json.title = Lang.translate('title_top_movie'); json.icon_svg = Template.string('icon_top'); json.icon_bgcolor = '#e02129'; @@ -19527,7 +19525,7 @@ life: day$1 * 7 }); }, function (call) { - get$d('tv/top_rated', params, function (json) { + get$c('tv/top_rated', params, function (json) { json.title = Lang.translate('title_top_tv'); json.icon_svg = Template.string('icon_top'); json.icon_bgcolor = '#e02129'; @@ -19545,7 +19543,7 @@ Arrays.insert(parts_data, 0, Api.partPersons(parts_data, parts_limit, 'movie', start_shuffle)); genres$1.movie.forEach(function (genre) { var event = function event(call) { - get$d('discover/movie?with_genres=' + genre.id, params, function (json) { + get$c('discover/movie?with_genres=' + genre.id, params, function (json) { json.title = Lang.translate(genre.title.replace(/[^a-z_]/g, '')); call(json); }, call, { @@ -19573,7 +19571,7 @@ var parts_limit = 6; var parts_data = [function (call) { if (params.url == 'movie') { - get$d('discover/' + params.url + '?with_release_type=1', params, function (json) { + get$c('discover/' + params.url + '?with_release_type=1', params, function (json) { json.title = Lang.translate('title_now_watch'); call(json); }, call, { @@ -19581,7 +19579,7 @@ }); } else call(); }, function (call) { - get$d(params.url == 'movie' ? 'trending/movie/week' : 'trending/tv/week', params, function (json) { + get$c(params.url == 'movie' ? 'trending/movie/week' : 'trending/tv/week', params, function (json) { json.title = Lang.translate('title_popular'); json.icon_svg = Template.string('icon_fire'); json.icon_bgcolor = '#fff'; @@ -19594,7 +19592,7 @@ life: day$1 * 3 }); }, function (call) { - get$d('discover/' + params.url + '?' + (params.url == 'movie' ? 'primary_release_year' : 'first_air_date_year') + '=' + (new Date().getFullYear() - 1), params, function (json) { + get$c('discover/' + params.url + '?' + (params.url == 'movie' ? 'primary_release_year' : 'first_air_date_year') + '=' + (new Date().getFullYear() - 1), params, function (json) { json.title = Lang.translate('title_last_year'); call(json); }, call, { @@ -19606,7 +19604,7 @@ var reg = params.url == 'movie' ? 'primary_release_date' : 'first_air_date'; lte = reg + '.lte=' + lte; gte = reg + '.gte=' + gte; - get$d('discover/' + params.url + '?' + lte + '&' + gte, params, function (json) { + get$c('discover/' + params.url + '?' + lte + '&' + gte, params, function (json) { json.title = Lang.translate('title_worth_rewatch'); call(json); }, call, { @@ -19618,7 +19616,7 @@ var reg = params.url == 'movie' ? 'primary_release_date' : 'first_air_date'; lte = reg + '.lte=' + lte; gte = reg + '.gte=' + gte; - get$d('discover/' + params.url + '?' + lte + '&' + gte + '&vote_average.gte=8&vote_average.lte=9', params, function (json) { + get$c('discover/' + params.url + '?' + lte + '&' + gte + '&vote_average.gte=8&vote_average.lte=9', params, function (json) { json.title = Lang.translate('title_hight_voite'); json.icon_svg = Template.string('icon_star'); json.icon_bgcolor = '#fff'; @@ -19634,14 +19632,14 @@ if (params.genres) return call(); if (params.url == 'tv') { - get$d('trending/tv/week', params, function (json) { + get$c('trending/tv/week', params, function (json) { json.title = Lang.translate('title_this_week'); call(json); }, call, { life: day$1 * 3 }); } else { - get$d('movie/upcoming', params, function (json) { + get$c('movie/upcoming', params, function (json) { json.title = Lang.translate('title_upcoming'); json.results.forEach(function (card) { card.params = { @@ -19671,7 +19669,7 @@ if (fullcat) { genres$1[params.url].forEach(function (genre) { var event = function event(call) { - get$d('discover/' + params.url + '?with_genres=' + genre.id, params, function (json) { + get$c('discover/' + params.url + '?with_genres=' + genre.id, params, function (json) { json.title = Lang.translate(genre.title.replace(/[^a-z_]/g, '')); call(json); }, call, { @@ -19691,7 +19689,7 @@ gte = reg + '.gte=' + gte; var eventYear = function eventYear(call) { - get$d('discover/' + params.url + '?' + gte + '&' + lte, params, function (json) { + get$c('discover/' + params.url + '?' + gte + '&' + lte, params, function (json) { json.title = Lang.translate('title_best_of_' + year); call(json); }, call, { @@ -19702,7 +19700,7 @@ parts_data.push(eventYear); var eventComedy = function eventComedy(call) { - get$d('discover/' + params.url + '?' + gte + '&' + lte + '&with_genres=35', params, function (json) { + get$c('discover/' + params.url + '?' + gte + '&' + lte + '&with_genres=35', params, function (json) { json.title = Lang.translate('title_comedy_of_' + year); call(json); }, call, { @@ -19729,7 +19727,7 @@ var status = new Status(9); status.onComplite = oncomplite; if (Utils$1.dcma(params.method, params.id)) return onerror(); - get$d(params.method + '/' + params.id + '?append_to_response=content_ratings,release_dates,external_ids,keywords,alternative_titles', params, function (json) { + get$c(params.method + '/' + params.id + '?append_to_response=content_ratings,release_dates,external_ids,keywords,alternative_titles', params, function (json) { var _json$overview; json.source = 'tmdb'; @@ -19739,7 +19737,7 @@ } if (!((_json$overview = json.overview) !== null && _json$overview !== void 0 && _json$overview.trim()) && Storage.field('tmdb_lang') !== 'en') { - get$d(params.method + '/' + params.id, { + get$c(params.method + '/' + params.id, { langs: 'en' }, function (enjson) { var _enjson$overview; @@ -19754,7 +19752,7 @@ if (params.method == 'tv') { var season = Utils$1.countSeasons(json); - get$d('tv/' + json.id + '/season/' + season, {}, function (ep) { + get$c('tv/' + json.id + '/season/' + season, {}, function (ep) { status.append('episodes', ep); }, status.error.bind(status), { life: day$1 * 3 @@ -19762,7 +19760,7 @@ } else status.need--; if (json.belongs_to_collection) { - get$d('collection/' + json.belongs_to_collection.id, {}, function (collection) { + get$c('collection/' + json.belongs_to_collection.id, {}, function (collection) { collection.results = collection.parts.slice(0, 19); status.append('collection', collection); }, status.error.bind(status), { @@ -19779,17 +19777,17 @@ }); if (!permit.child_small) { - get$d(params.method + '/' + params.id + '/credits', params, function (json) { + get$c(params.method + '/' + params.id + '/credits', params, function (json) { status.append('persons', json); }, status.error.bind(status), { life: day$1 * 7 }); - get$d(params.method + '/' + params.id + '/recommendations', params, function (json) { + get$c(params.method + '/' + params.id + '/recommendations', params, function (json) { status.append('recomend', json); }, status.error.bind(status), { life: day$1 * 7 }); - get$d(params.method + '/' + params.id + '/similar', params, function (json) { + get$c(params.method + '/' + params.id + '/similar', params, function (json) { status.append('simular', json); }, status.error.bind(status), { life: day$1 * 7 @@ -19833,7 +19831,7 @@ }); }; - get$d(params.method + '/' + params.id + '/videos', { + get$c(params.method + '/' + params.id + '/videos', { langs: Storage.field('tmdb_lang') }, function (json) { status.append('one', json); @@ -19842,7 +19840,7 @@ }); if (lg !== 'en') { - get$d(params.method + '/' + params.id + '/videos', { + get$c(params.method + '/' + params.id + '/videos', { langs: 'en' }, function (json) { status.append('two', json); @@ -19879,17 +19877,17 @@ oncomplite(items); }; - get$d('search/movie', params, function (json) { + get$c('search/movie', params, function (json) { json.title = Lang.translate('menu_movies'); json.type = 'movie'; status.append('movie', json); }, status.error.bind(status)); - get$d('search/tv', params, function (json) { + get$c('search/tv', params, function (json) { json.title = Lang.translate('menu_tv'); json.type = 'tv'; status.append('tv', json); }, status.error.bind(status)); - get$d('search/person', params, function (json) { + get$c('search/person', params, function (json) { json.title = Lang.translate('title_actors'); json.type = 'person'; json.results.forEach(function (person) { @@ -20023,14 +20021,14 @@ }; if (!params.only_credits) { - get$d('person/' + params.id, params, function (json) { + get$c('person/' + params.id, params, function (json) { status.append('person', json); }, status.error.bind(status), { life: day$1 * 7 }); } - get$d('person/' + params.id + '/combined_credits', params, function (json) { + get$c('person/' + params.id + '/combined_credits', params, function (json) { status.append('credits', json); }, status.error.bind(status), { life: day$1 * 7 @@ -20101,7 +20099,7 @@ var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var oncomplite = arguments.length > 1 ? arguments[1] : undefined; var onerror = arguments.length > 2 ? arguments[2] : undefined; - get$d((params.type || 'tv') + '/' + params.id + '/external_ids', params, oncomplite, onerror, { + get$c((params.type || 'tv') + '/' + params.id + '/external_ids', params, oncomplite, onerror, { life: day$1 * 7 }); } @@ -20109,7 +20107,7 @@ function external_imdb_id() { var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var oncomplite = arguments.length > 1 ? arguments[1] : undefined; - get$d(params.type + '/' + params.id + '/external_ids', params, function (ids) { + get$c(params.type + '/' + params.id + '/external_ids', params, function (ids) { oncomplite(ids.imdb_id || ''); }, function () { oncomplite(''); @@ -20154,17 +20152,17 @@ } else onerror(); }; - get$d('company/' + params.id, params, function (json) { + get$c('company/' + params.id, params, function (json) { status.append('company', json); }, status.error.bind(status), { life: day$1 * 7 }); - get$d('discover/movie?sort_by=vote_count.desc&with_companies=' + params.id, params, function (json) { + get$c('discover/movie?sort_by=vote_count.desc&with_companies=' + params.id, params, function (json) { status.append('movie', json); }, status.error.bind(status), { life: day$1 * 7 }); - get$d('discover/tv?sort_by=vote_count.desc&with_companies=' + params.id, params, function (json) { + get$c('discover/tv?sort_by=vote_count.desc&with_companies=' + params.id, params, function (json) { status.append('tv', json); }, status.error.bind(status), { life: day$1 * 7 @@ -20175,7 +20173,7 @@ var status = new Status(from.length); status.onComplite = oncomplite; from.forEach(function (season) { - get$d('tv/' + tv.id + '/season/' + season, {}, function (json) { + get$c('tv/' + tv.id + '/season/' + season, {}, function (json) { status.append('' + season, json); }, status.error.bind(status), { life: day$1 * 3 @@ -20511,7 +20509,7 @@ seasons: seasons$2, find: find$2, external_ids: external_ids, - get: get$d, + get: get$c, menuCategory: menuCategory$2, discovery: discovery$2, parsePG: parsePG, @@ -21245,7 +21243,7 @@ }); } - function filter$2(episodes) { + function filter$1(episodes) { var filtred = []; var fileds = ['air_date', 'season_number', 'episode_number', 'name', 'still_path']; episodes.forEach(function (episode) { @@ -21281,7 +21279,7 @@ console.log('Timetable', 'parse:', object$1.id, 'new season:', object$1.season); TMDB.get('tv/' + object$1.id + '/season/' + object$1.season, {}, function (ep) { if (!ep.episodes) return save$3(); - object$1.episodes = filter$2(ep.episodes_original || ep.episodes); + object$1.episodes = filter$1(ep.episodes_original || ep.episodes); object$1.next = getNextEpisode(object$1.episodes); Cache.getData('timetable', object$1.id).then(function (obj) { if (obj) obj.episodes = object$1.episodes;else obj = Arrays.clone(object$1); @@ -21367,7 +21365,7 @@ */ - function get$c(elem, callback) { + function get$b(elem, callback) { var fid = data$2.filter(function (e) { return e.id == elem.id; }); @@ -21514,7 +21512,7 @@ var TimeTable = { init: init$U, - get: get$c, + get: get$b, add: add$9, all: all$3, update: update$a, @@ -21522,7 +21520,7 @@ recently: recently }; - var Watched$1 = { + var Watched = { onCreate: function onCreate() { var _this = this; @@ -21871,7 +21869,7 @@ Release: Release, Plugins: Plugins$1, Favorite: Favorite$1, - Watched: Watched$1, + Watched: Watched, Lgbt: Lgbt, Subscribe: Subscribe, Style: Style, @@ -21909,7 +21907,7 @@ return n.item.method == 'tv-voice'; }); // Получаем из истории только те карточки которые есть в уведомлениях - var history = get$b({ + var history = get$a({ type: 'history' }).filter(function (h) { return cub_notices.find(function (n) { @@ -22180,7 +22178,7 @@ */ - function get$b(params) { + function get$a(params) { if (Account$1.Permit.sync) { return Account$1.Bookmarks.get(params); } else { @@ -22256,7 +22254,7 @@ function all$2() { var result = {}; category$2.forEach(function (a) { - result[a] = get$b({ + result[a] = get$a({ type: a }); }); @@ -22264,13 +22262,13 @@ } function continues(type) { - var result = get$b({ + var result = get$a({ type: 'history' }); - var viewed = get$b({ + var viewed = get$a({ type: 'viewed' }); - var thrown = get$b({ + var thrown = get$a({ type: 'thrown' }); // Убираем из продолжить то что уже полностью просмотрено @@ -22296,7 +22294,7 @@ add: add$8, remove: remove$2, toggle: toggle$6, - get: get$b, + get: get$a, clear: clear$7, continues: continues, full: full$2, @@ -22677,7 +22675,7 @@ */ - function get$a(params) { + function get$9(params) { return bookmarks.filter(function (elem) { return elem.type == params.type; }).map(function (elem) { @@ -22830,7 +22828,7 @@ push: push$5, update: update$9, clear: clear$6, - get: get$a, + get: get$9, all: all$1, sync: sync$1, find: find$1 @@ -23691,7 +23689,7 @@ if (typeof requestAnimationFrame !== 'undefined') { Lampa.Listener.follow('request_error', function (e) { if (e.params.url.indexOf(object$2.cub_domain) > -1 && e.error.status == 0 && e.exception !== 'timeout') { - error('request'); + error$1('request'); } }); Lampa.Listener.follow('request_secuses', function (e) { @@ -23741,7 +23739,7 @@ if (status) marker_data.element.classList.add(status); } - function error(who) { + function error$1(who) { markers_object[who].error = true; markers_object[who].live = false; update$6(); @@ -23766,7 +23764,7 @@ var Markers = { init: init$M, - error: error, + error: error$1, pass: pass, live: live, normal: normal @@ -23781,7 +23779,7 @@ var listener$9 = Subscribe$2(); var expects = []; var timeping = 5000; - var timeout; + var timeout$1; var used_mirrors = -1; var terminal_access = false; @@ -23795,8 +23793,8 @@ var socket_url = ws + mirror + pt; if (window.lampa_settings.socket_url) socket_url = window.lampa_settings.socket_url; clearInterval(ping); - clearTimeout(timeout); - timeout = setTimeout(function () { + clearTimeout(timeout$1); + timeout$1 = setTimeout(function () { console.log('Socket', 'timeout close'); if (socket) socket.close(); }, 10000); @@ -23811,14 +23809,14 @@ socket.addEventListener('open', function (event) { console.log('Socket', 'open on ' + socket_url); timeping = 5000; - clearTimeout(timeout); + clearTimeout(timeout$1); send('start', {}); listener$9.send('open', {}); Markers.live('socket'); }); socket.addEventListener('close', function (event) { console.log('Socket', 'close', event.code); - clearTimeout(timeout); + clearTimeout(timeout$1); listener$9.send('close', {}); timeping = Math.min(1000 * 60 * 5, timeping); console.log('Socket', 'try connect to ' + socket_url + ' after', Math.round(timeping) / 1000, 'sec.'); @@ -24150,40 +24148,134 @@ confirm: confirm }; - var last_responce$1 = {}; + function init$J() { + var today = new Date(); + var date = today.toISOString().split('T')[0]; - function stat$2(method, name) { - var type = 'vast'; + if (Storage.get('metric_date') !== date) { + if (Storage.get('metric_adview', 0) > 0) histogram('adview', Storage.get('metric_adview', 0)); + Storage.set('metric_date', date); + Storage.set('metric_adview', 0); + } - if (name == 'plugin') { - var activity = Storage.get('activity', '{}'); + if (!Storage.get('metric_uid', '')) Storage.set('metric_uid', Utils$1.uid()); + $.ajax({ + dataType: 'json', + url: Utils$1.protocol() + object$2.cub_domain + '/api/metric/unic?platform=' + Platform.get() + '&uid=' + Storage.get('metric_uid', '') + '&premium=' + (Account$1.hasPremium() ? 1 : 0) + '&geo=' + VPN.code() + }); + counter('screen', Platform.get(), Platform.screen('tv') ? 'tv' : 'mobile'); + counter('client_region', VPN.code()); - if (activity.component) { - type = 'plugin'; - name = activity.component; + function playerStat(data) { + if (!data.iptv) { + counter('player_start', Platform.get(), data.stat_from, data.torrent_hash ? 'torrent' : data.youtube ? 'youtube' : data.continue_play ? 'continue' : 'online'); + + if (data.vast_url) { + counter('player_vast_url', Storage.get('activity', '{}').component || 'none', data.continue_play ? 'continue' : 'start'); + } } } - $.ajax({ - dataType: 'text', - url: Utils$1.protocol() + object$2.cub_domain + '/api/ad/stat?platform=' + Platform.get() + '&type=' + type + '&method=' + method + '&name=' + name + '&screen=' + (Platform.screen('tv') ? 'tv' : 'mobile') + Lampa.Player.listener.follow('start', function (data) { + playerStat(_objectSpread2(_objectSpread2({}, data), {}, { + stat_from: 'inner' + })); + }); + Lampa.Player.listener.follow('external', function (data) { + playerStat(_objectSpread2(_objectSpread2({}, data), {}, { + stat_from: 'external' + })); }); } - function log$1(data) { + function counter(method, v1, v2, v3) { $.ajax({ - type: 'POST', - // изменено на POST - dataType: 'text', - url: Utils$1.protocol() + object$2.cub_domain + '/api/adv/log', - data: _objectSpread2(_objectSpread2({ - platform: Platform.get() - }, data), last_responce$1) + dataType: 'json', + url: Utils$1.protocol() + object$2.cub_domain + '/api/metric/stat?method=' + method + '&value_one=' + (v1 || '') + '&value_two=' + (v2 || '') + '&value_three=' + (v3 || '') }); - last_responce$1 = {}; } - function getGuid$1() { + function histogram(method, value) { + $.ajax({ + dataType: 'json', + url: Utils$1.protocol() + object$2.cub_domain + '/api/metric/histogram?method=' + method + '&value=' + (value || 0) + }); + } + + var ServiceMetric = { + init: init$J, + counter: counter, + histogram: histogram + }; + + var sdk2_try = 0; + var sdk3_try = 0; + + function loadSDK(api) { + return api == 3 ? loadSDK3() : loadSDK2(); + } + + function loadSDK2() { + return new Promise(function (resolve, reject) { + if (window.VASTPlayer) { + return resolve(); + } + + if (sdk2_try > 1) { + return reject(new Error('VASTPlayer SDK load failed after multiple attempts')); + } + + sdk2_try++; + Utils$1.putScriptAsync([object$2.github_lampa + '/vender/vast/vast.js'], false, reject, resolve); + }); + } + + function loadSDK3() { + return new Promise(function (resolve, reject) { + if (window.google && window.google.ima) { + return resolve(); + } + + if (sdk3_try > 1) { + return reject(new Error('IMA SDK load failed after multiple attempts')); + } + + sdk3_try++; + Utils$1.putScriptAsync(['https://imasdk.googleapis.com/js/sdkloader/ima3.js'], false, reject, resolve); + }); + } + + function buildUrl(url) { + var movie = Storage.get('activity', '{}').movie; + var movie_genres = []; + var movie_id = movie ? movie.id : 0; + var movie_imdb = movie ? movie.imdb_id : ''; + var movie_type = movie ? movie.original_name ? 'tv' : 'movie' : 'movie'; + + try { + movie_genres = movie.genres.map(function (g) { + return g.id; + }); + } catch (e) {} + + var pixel_ratio = window.devicePixelRatio || 1; + var u = url.replace('{RANDOM}', Math.round(Date.now() * Math.random())); + u = u.replace(/{TIME}/g, Date.now()); + u = u.replace(/{WIDTH}/g, Math.round(window.innerWidth * pixel_ratio)); + u = u.replace(/{HEIGHT}/g, Math.round(window.innerHeight * pixel_ratio)); + u = u.replace(/{PLATFORM}/g, Platform.get()); + u = u.replace(/{UID}/g, encodeURIComponent(getUid())); + u = u.replace(/{PIXEL}/g, pixel_ratio); + u = u.replace(/{GUID}/g, encodeURIComponent(getGuid())); + u = u.replace(/{MOVIE_ID}/g, movie_id); + u = u.replace(/{MOVIE_GENRES}/g, movie_genres.join(',')); + u = u.replace(/{MOVIE_IMDB}/g, movie_imdb); + u = u.replace(/{MOVIE_TYPE}/g, movie_type); + u = u.replace(/{SCREEN}/g, encodeURIComponent(Platform.screen('tv') ? 'tv' : 'mobile')); + return u; + } + + function getGuid() { var guid = Storage.get('vast_device_guid', ''); if (!guid || guid.indexOf('00000000') === 0) { @@ -24194,7 +24286,7 @@ return guid; } - function getUid$1() { + function getUid() { var uid = Storage.get('vast_device_uid', ''); if (!uid) { @@ -24205,12 +24297,63 @@ return uid; } + function getMediaType(player_data) { + var is_torrent = Boolean(player_data.torrent_hash && Torserver.ip() && player_data.url.indexOf(Torserver.ip()) > -1); + var is_youtube = Boolean(player_data.youtube && Activity.active().component == 'full' && player_data.url.indexOf('youtube.com') > -1); + var is_continue = Boolean(player_data.continue_play && Lampa.PlayerPlaylist.get().length > 0 && Lampa.PlayerPlaylist.get().indexOf(player_data) > -1); + return { + iptv: player_data.iptv, + torrent: is_torrent, + youtube: is_youtube, + "continue": is_continue, + any: is_torrent || is_youtube || is_continue || player_data.iptv + }; + } + + function canShow(player_data) { + var player_type = getMediaType(player_data); + var ignore = window.lampa_settings.developer.ads ? false : Account$1.hasPremium() || Personal.confirm(); + return player_type.any ? false : !ignore; + } + + function metric(stat_name, method, ad_name) { + if (ad_name == 'plugin') { + var activity = Storage.get('activity', '{}'); + + if (activity.component) { + ad_name = activity.component; + } + + ServiceMetric.counter('ad_' + stat_name + '_plugin', ad_name, method, Platform.screen('tv') ? 'tv' : 'mobile'); + } else { + ServiceMetric.counter('ad_' + stat_name, ad_name, method, Platform.screen('tv') ? 'tv' : 'mobile'); + } + } + + var IMA = { + loadSDK: loadSDK, + loadSDK2: loadSDK2, + loadSDK3: loadSDK3, + buildUrl: buildUrl, + getGuid: getGuid, + getUid: getUid, + getMediaType: getMediaType, + canShow: canShow, + metric: metric + }; + + var last_responce = {}; + + function stat$3(method, name) { + IMA.metric('preroll', method, name); + } + window.adv_logs_responce_event = function (e) { - last_responce$1 = { + last_responce = { status: e.status, text: e.text }; - console.log('Ad', 'logs responce', last_responce$1); + console.log('Ad', 'logs responce', last_responce); }; /** * Извлекает skipoffset из VAST XML и возвращает в секундах @@ -24277,7 +24420,7 @@ key: "start", value: function start() { Storage.set('metric_adview', Storage.get('metric_adview', '0') + 1); - stat$2('launch', this.preroll.name); + stat$3('launch', this.preroll.name); this.elems.block = Template.js('ad_video_block'); this.elems.skip = this.elems.block.find('.ad-video-block__skip'); this.elems.progressbar = this.elems.block.find('.ad-video-block__progress-fill'); @@ -24307,7 +24450,7 @@ try { this.initialize(); - stat$2('run', this.preroll.name); + stat$3('run', this.preroll.name); } catch (e) { this.error(400, 'Initialize', e ? e.message : ''); } @@ -24410,14 +24553,14 @@ console.log('Ad', 'event', 'started'); this.elems.status.text('Started: ' + (this.player.adDuration ? Math.round(this.player.adDuration) + 's' : '')); - stat$2('started', this.preroll.name); + stat$3('started', this.preroll.name); clearTimeout(this.tiks.timeout); this.elems.loader.remove(); this.elems.container.style.opacity = 1; var duration = this.player.adDuration || this.skip_time; clearInterval(this.tiks.progress); clearTimeout(this.tiks.watch); - var creative_skip = getSkipOffsetSeconds(last_responce$1.text, duration); + var creative_skip = getSkipOffsetSeconds(last_responce.text, duration); creative_skip = creative_skip !== null ? creative_skip : duration * 0.8; console.log('Ad', 'creative skip offset:', creative_skip); this.started_time = Date.now(); @@ -24443,7 +24586,7 @@ key: "onEnd", value: function onEnd() { console.log('Ad', 'complete'); - stat$2('complete', this.preroll.name); + stat$3('complete', this.preroll.name); this.listener.send('ended'); } /** @@ -24481,33 +24624,7 @@ }, { key: "url", value: function url() { - var movie = Storage.get('activity', '{}').movie; - var movie_genres = []; - var movie_id = movie ? movie.id : 0; - var movie_imdb = movie ? movie.imdb_id : ''; - var movie_type = movie ? movie.original_name ? 'tv' : 'movie' : 'movie'; - - try { - movie_genres = movie.genres.map(function (g) { - return g.id; - }); - } catch (e) {} - - var pixel_ratio = window.devicePixelRatio || 1; - var u = this.preroll.url.replace('{RANDOM}', Math.round(Date.now() * Math.random())); - u = u.replace(/{TIME}/g, Date.now()); - u = u.replace(/{WIDTH}/g, Math.round(window.innerWidth * pixel_ratio)); - u = u.replace(/{HEIGHT}/g, Math.round(window.innerHeight * pixel_ratio)); - u = u.replace(/{PLATFORM}/g, Platform.get()); - u = u.replace(/{UID}/g, encodeURIComponent(getUid$1())); - u = u.replace(/{PIXEL}/g, pixel_ratio); - u = u.replace(/{GUID}/g, encodeURIComponent(getGuid$1())); - u = u.replace(/{MOVIE_ID}/g, movie_id); - u = u.replace(/{MOVIE_GENRES}/g, movie_genres.join(',')); - u = u.replace(/{MOVIE_IMDB}/g, movie_imdb); - u = u.replace(/{MOVIE_TYPE}/g, movie_type); - u = u.replace(/{SCREEN}/g, encodeURIComponent(Platform.screen('tv') ? 'tv' : 'mobile')); - return u; + return IMA.buildUrl(this.preroll.url); } /** * Обработка ошибки @@ -24519,13 +24636,8 @@ console.log('Ad', 'error', code, msg); this.stop(); this.listener.send('error'); - stat$2('error', this.preroll.name); - stat$2('error_' + code, this.preroll.name); - log$1({ - code: code, - name: this.preroll.name, - message: msg - }); + stat$3('error', this.preroll.name); + stat$3('error_' + code, this.preroll.name); } /** * Пропустить рекламу если можно @@ -24576,93 +24688,10 @@ return Vast; }(); - var IMA_SDK_URL = 'https://imasdk.googleapis.com/js/sdkloader/ima3.js'; - var last_responce = {}; - - function stat$1(method, name) { - var type = 'vast'; - - if (name == 'plugin') { - var activity = Storage.get('activity', '{}'); - - if (activity.component) { - type = 'plugin'; - name = activity.component; - } - } - - $.ajax({ - dataType: 'text', - url: Utils$1.protocol() + object$2.cub_domain + '/api/ad/stat?platform=' + Platform.get() + '&type=' + type + '&method=' + method + '&name=' + name + '&screen=' + (Platform.screen('tv') ? 'tv' : 'mobile') - }); + function stat$2(method, name) { + IMA.metric('preroll', method, name); } - function log(data) { - $.ajax({ - type: 'POST', - dataType: 'text', - url: Utils$1.protocol() + object$2.cub_domain + '/api/adv/log', - data: _objectSpread2(_objectSpread2({ - platform: Platform.get() - }, data), last_responce) - }); - last_responce = {}; - } - - function getGuid() { - var guid = Storage.get('vast_device_guid', ''); - - if (!guid || guid.indexOf('00000000') === 0) { - guid = Utils$1.guid(); - Storage.set('vast_device_guid', guid); - } - - return guid; - } - - function getUid() { - var uid = Storage.get('vast_device_uid', ''); - - if (!uid) { - uid = Utils$1.uid(15); - Storage.set('vast_device_uid', uid); - } - - return uid; - } - /** - * Загружает Google IMA SDK если ещё не загружен - * @returns {Promise} - */ - - - function loadImaSdk() { - return new Promise(function (resolve, reject) { - if (window.google && window.google.ima) { - resolve(); - return; - } - - var script = document.createElement('script'); - script.src = IMA_SDK_URL; - script.onload = resolve; - - script.onerror = function () { - return reject(new Error('IMA SDK load failed')); - }; - - document.head.appendChild(script); - }); - } - - window.adv_logs_responce_event = function (e) { - last_responce = { - status: e.status, - text: e.text - }; - console.log('Ad3', 'logs responce', last_responce); - }; - var Vast3 = /*#__PURE__*/function () { function Vast3(preroll) { _classCallCheck(this, Vast3); @@ -24692,7 +24721,7 @@ var _this = this; Storage.set('metric_adview', Storage.get('metric_adview', '0') + 1); - stat$1('launch', this.preroll.name); + stat$2('launch', this.preroll.name); this.elems.block = Template.js('ad_video_block'); this.elems.skip = this.elems.block.find('.ad-video-block__skip'); this.elems.skip.style.display = 'none'; @@ -24727,7 +24756,7 @@ this.timeout(); console.log('Ad3', 'run', this.preroll.name, 'from', this.preroll.name == 'plugin' ? 'plugin' : 'cub'); this.elems.status.text('Loading IMA SDK...'); - loadImaSdk().then(function () { + IMA.loadSDK3().then(function () { if (_this.removed) return; _this.elems.status.text('Initialize...'); @@ -24735,7 +24764,7 @@ try { _this.initialize(); - stat$1('run', _this.preroll.name); + stat$2('run', _this.preroll.name); } catch (e) { _this.error(400, 'Initialize', e ? e.message : ''); } @@ -24859,7 +24888,7 @@ var ad = adEvent.getAd(); var duration = ad ? ad.getDuration() : this.skip_time; this.elems.status.text('Started: ' + (duration ? Math.round(duration) + 's' : '')); - stat$1('started', this.preroll.name); + stat$2('started', this.preroll.name); clearTimeout(this.tiks.timeout); this.elems.loader.remove(); this.elems.container.style.opacity = 1; @@ -24938,7 +24967,7 @@ key: "onEnd", value: function onEnd() { console.log('Ad3', 'complete'); - stat$1('complete', this.preroll.name); + stat$2('complete', this.preroll.name); this.listener.send('ended'); } /** @@ -24948,33 +24977,7 @@ }, { key: "url", value: function url() { - var movie = Storage.get('activity', '{}').movie; - var movie_genres = []; - var movie_id = movie ? movie.id : 0; - var movie_imdb = movie ? movie.imdb_id : ''; - var movie_type = movie ? movie.original_name ? 'tv' : 'movie' : 'movie'; - - try { - movie_genres = movie.genres.map(function (g) { - return g.id; - }); - } catch (e) {} - - var pixel_ratio = window.devicePixelRatio || 1; - var u = this.preroll.url.replace('{RANDOM}', Math.round(Date.now() * Math.random())); - u = u.replace(/{TIME}/g, Date.now()); - u = u.replace(/{WIDTH}/g, Math.round(window.innerWidth * pixel_ratio)); - u = u.replace(/{HEIGHT}/g, Math.round(window.innerHeight * pixel_ratio)); - u = u.replace(/{PLATFORM}/g, Platform.get()); - u = u.replace(/{UID}/g, encodeURIComponent(getUid())); - u = u.replace(/{PIXEL}/g, pixel_ratio); - u = u.replace(/{GUID}/g, encodeURIComponent(getGuid())); - u = u.replace(/{MOVIE_ID}/g, movie_id); - u = u.replace(/{MOVIE_GENRES}/g, movie_genres.join(',')); - u = u.replace(/{MOVIE_IMDB}/g, movie_imdb); - u = u.replace(/{MOVIE_TYPE}/g, movie_type); - u = u.replace(/{SCREEN}/g, encodeURIComponent(Platform.screen('tv') ? 'tv' : 'mobile')); - return u; + return IMA.buildUrl(this.preroll.url); } /** * Обработка ошибки @@ -24986,13 +24989,8 @@ console.log('Ad3', 'error', code, msg); this.stop(); this.listener.send('error'); - stat$1('error', this.preroll.name); - stat$1('error_' + code, this.preroll.name); - log({ - code: code, - name: this.preroll.name, - message: msg - }); + stat$2('error', this.preroll.name); + stat$2('error_' + code, this.preroll.name); } /** * Пропустить рекламу если можно @@ -25055,234 +25053,196 @@ return Vast3; }(); - function init$J() { - var today = new Date(); - var date = today.toISOString().split('T')[0]; + var VastManager = /*#__PURE__*/function () { + function VastManager(params) { + _classCallCheck(this, VastManager); - if (Storage.get('metric_date') !== date) { - if (Storage.get('metric_adview', 0) > 0) histogram('adview', Storage.get('metric_adview', 0)); - Storage.set('metric_date', date); - Storage.set('metric_adview', 0); + this.played = { + time: 0, + prerolls: [] + }; + this.data_loaded = { + ad: [] + }; + Arrays.extend(params, { + api: 'preroll', + cooling: 1000 * 60 * 5 + }); + this.params = params; } - if (!Storage.get('metric_uid', '')) Storage.set('metric_uid', Utils$1.uid()); - $.ajax({ - dataType: 'json', - url: Utils$1.protocol() + object$2.cub_domain + '/api/metric/unic?platform=' + Platform.get() + '&uid=' + Storage.get('metric_uid', '') + '&premium=' + (Account$1.hasPremium() ? 1 : 0) + '&geo=' + VPN.code() - }); - counter('screen', Platform.get(), Platform.screen('tv') ? 'tv' : 'mobile'); - counter('client_region', VPN.code()); - - function playerStat(data) { - if (!data.iptv) { - counter('player_start', Platform.get(), data.stat_from, data.torrent_hash ? 'torrent' : data.youtube ? 'youtube' : data.continue_play ? 'continue' : 'online'); - - if (data.vast_url) { - counter('player_vast_url', Storage.get('activity', '{}').component || 'none', data.continue_play ? 'continue' : 'start'); - } + _createClass(VastManager, [{ + key: "init", + value: function init() { + this.load(); + Timer.add(1000 * 60 * 60, this.load.bind(this)); } - } + }, { + key: "load", + value: function load() { + var _this = this; - Lampa.Player.listener.follow('start', function (data) { - playerStat(_objectSpread2(_objectSpread2({}, data), {}, { - stat_from: 'inner' - })); - }); - Lampa.Player.listener.follow('external', function (data) { - playerStat(_objectSpread2(_objectSpread2({}, data), {}, { - stat_from: 'external' - })); - }); - } + var pos = 1; - function counter(method, v1, v2, v3) { - $.ajax({ - dataType: 'json', - url: Utils$1.protocol() + object$2.cub_domain + '/api/metric/stat?method=' + method + '&value_one=' + (v1 || '') + '&value_two=' + (v2 || '') + '&value_three=' + (v3 || '') - }); - } + var request = function request() { + var domain = object$2.soc_mirrors[pos]; - function histogram(method, value) { - $.ajax({ - dataType: 'json', - url: Utils$1.protocol() + object$2.cub_domain + '/api/metric/histogram?method=' + method + '&value=' + (value || 0) - }); - } - - var ServiceMetric = { - init: init$J, - counter: counter, - histogram: histogram - }; - - var played = { - time: 0, - prerolls: [], - user: {} - }; - var data_loaded = { - ad: [] - }; - - function init$I() { - load$2(); - Timer.add(1000 * 60 * 60, load$2); - } - - function load$2() { - var pos = 1; - - var request = function request() { - var domain = object$2.soc_mirrors[pos]; - - if (domain) { - $.ajax({ - url: Utils$1.protocol() + domain + '/api/ad/vast', - type: 'GET', - dataType: 'json', - timeout: 10000, - success: function success(data) { - if (data.ad && Arrays.isArray(data.ad)) { - data_loaded.ad = data.ad; - console.log('Ad', 'vast prerolls loaded', data_loaded.ad.length); - } else { - console.log('Ad', 'wrong vast prerolls format from', domain); - pos++; - request(); - } - }, - error: function error() { - console.log('Ad', 'no load vast prerolls from', domain); - pos++; - request(); + if (domain) { + $.ajax({ + url: Utils$1.protocol() + domain + '/api/ad/get/' + _this.params.api, + type: 'GET', + dataType: 'json', + timeout: 10000, + success: function success(data) { + if (data.ad && Arrays.isArray(data.ad)) { + _this.data_loaded.ad = data.ad; + console.log('Ad', 'manager ' + _this.params.api, 'loaded', _this.data_loaded.ad.length); + } else { + console.log('Ad', 'manager ' + _this.params.api, 'wrong format from', domain); + pos++; + request(); + } + }, + error: function error() { + console.log('Ad', 'manager ' + _this.params.api, 'no load from', domain); + pos++; + request(); + } + }); } - }); + }; + + request(); } - }; - - request(); - } - - function whitoutGenres(whitout_genre) { - var movie = Storage.get('activity', '{}').movie; - var movie_genres = []; - - try { - movie_genres = movie.genres.map(function (g) { - return g.id; - }); - var genres = whitout_genre.split(',').map(function (g) { - return parseInt(g); - }); - - if (genres.length && movie.genres.find(function (g) { - return genres.find(function (gg) { - return gg == g.id; - }); - })) { - return true; + }, { + key: "coolingReady", + value: function coolingReady() { + return Date.now() - this.played.time > this.params.cooling; } - } catch (e) {} - } + }, { + key: "markCooling", + value: function markCooling() { + this.played.time = Date.now(); + } + }, { + key: "whitoutGenres", + value: function whitoutGenres(whitout_genre) { + var movie = Storage.get('activity', '{}').movie; - function orderTag(tags) { - tags.sort(function (a, b) { - return b.impressions - a.impressions; - }); - return tags[0]; - } + try { + var genres = whitout_genre.split(',').map(function (g) { + return parseInt(g); + }); - function filter$1(view, player_data) { - view = view.filter(function (v) { - return !played.prerolls.find(function (pr) { - return pr == v.name; - }); - }); + if (genres.length && movie.genres.find(function (g) { + return genres.find(function (gg) { + return gg == g.id; + }); + })) { + return true; + } + } catch (e) {} + } + }, { + key: "orderTag", + value: function orderTag(tags) { + tags.sort(function (a, b) { + return b.impressions - a.impressions; + }); + return tags[0]; + } + }, { + key: "filter", + value: function filter(view, player_data) { + var _this2 = this; - if (!window.lampa_settings.developer.ads) { - view = view.filter(function (v) { - return whitoutGenres(v.whitout_genre) !== true; - }); - view = view.filter(function (v) { - return v.screen == (Platform.screen('tv') ? 'tv' : 'mobile') || v.screen == 'all'; - }); - view = view.filter(function (v) { - return v.platforms.indexOf(Platform.get()) !== -1 || v.platforms.indexOf('all') !== -1 || !v.platforms.length; - }); - view = view.filter(function (v) { - return v.region.split(',').indexOf(player_data.ad_region) !== -1 || v.region.indexOf('all') !== -1 || !v.region.length; - }); - } + view = view.filter(function (v) { + return !_this2.played.prerolls.find(function (pr) { + return pr == v.name; + }); + }); - console.log('Ad', 'filter view ', view); + if (!window.lampa_settings.developer.ads) { + view = view.filter(function (v) { + return _this2.whitoutGenres(v.whitout_genre) !== true; + }); + view = view.filter(function (v) { + return v.screen == (Platform.screen('tv') ? 'tv' : 'mobile') || v.screen == 'all'; + }); + view = view.filter(function (v) { + return v.platforms.indexOf(Platform.get()) !== -1 || v.platforms.indexOf('all') !== -1 || !v.platforms.length; + }); + view = view.filter(function (v) { + return v.region.split(',').indexOf(player_data.ad_region) !== -1 || v.region.indexOf('all') !== -1 || !v.region.length; + }); + } - if (view.length) { - var preroll = orderTag(view); - played.prerolls.push(preroll.name); - return preroll; - } + console.log('Ad', 'manager ' + this.params.api, 'filter view', view); - return null; - } + if (view.length) { + var preroll = this.orderTag(view); + this.played.prerolls.push(preroll.name); + return preroll; + } - function get$9(player_data) { - var first_run = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - if (first_run) played.prerolls = []; - var preroll = data_loaded.ad.length ? filter$1(data_loaded.ad, player_data) : null; - ServiceMetric.counter('ad_manager_get', data_loaded.ad.length ? 1 : 0, preroll ? 'show' : 'none', player_data.ad_region); + return null; + } + }, { + key: "get", + value: function get(player_data) { + var first_run = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + if (first_run) this.played.prerolls = []; + return this.data_loaded.ad.length ? this.filter(this.data_loaded.ad, player_data) : null; + } + }]); - if (preroll) { - played.user[preroll.name]++; - return preroll; - } - - return null; - } - - var Manager = { - init: init$I, - get: get$9 - }; + return VastManager; + }(); var running = 0; var player_data = {}; - var vast_api = false; - var waite_time = 0; + var Manager$1 = new VastManager({ + api: 'preroll', + cooling: 1000 * 60 * 5 + }); - function init$H() { - if (!(Platform.is('orsay') || Platform.is('netcast'))) { - Utils$1.putScriptAsync([object$2.github_lampa + '/vender/vast/vast.js'], false, false, function () { - vast_api = true; - }); - Manager.init(); - } + function init$I() { + Manager$1.init(); } + /** + * Показать преролл + * @param {Object} preroll - данные для показа рекламы + * @param {Number} num - номер показа рекламы (для повторов) + * @param {Function} started - вызывается при запуске рекламы + * @param {Function} ended - вызывается при окончании рекламы + * @return {void} + */ + function video(preroll, num, started, ended) { - console.log('Ad', 'launch'); - var item = preroll.vast_api == 3 ? new Vast3(preroll) : new Vast(preroll); - item.listener.follow('launch', started); - item.listener.follow('ended', function () { - if (num < 2) { - var next_preroll = getAnyPreroll(); - waite_time = Date.now(); - if (next_preroll) video(next_preroll, num + 1, started, ended);else ended(); - } else { - waite_time = Date.now(); - ended(); - } + console.log('Ad', 'preroll launch'); + var advert = preroll.vast_api == 3 ? new Vast3(preroll) : new Vast(preroll); + + var next = function next() { + var any = getAnyPreroll(); + any ? video(any, num + 1, started, ended) : ended(); + }; + + advert.listener.follow('launch', started); + advert.listener.follow('ended', function () { + num < 2 ? next() : ended(); }); - item.listener.follow('error', function () { - if (Date.now() - running < 15000 && num < 4) { - var next_preroll = getAnyPreroll(); - if (next_preroll) video(next_preroll, num + 1, started, ended);else ended(); - } else ended(); - }); - $.ajax({ - dataType: 'text', - url: Utils$1.protocol() + object$2.cub_domain + '/api/ad/stat?platform=' + Platform.get() + '&type=launch&method=vast' + advert.listener.follow('error', function () { + Date.now() - running < 15000 && num < 4 ? next() : ended(); }); } + /** + * Показать заставку (реклама) + * @param {Object} preroll - данные для показа рекламы + * @param {Function} call - вызывается при окончании рекламы + * @return {void} + */ + function launch(preroll, call) { var enabled = Controller.enabled().name; @@ -25317,6 +25277,12 @@ }); Controller.toggle('ad_preroll'); } + /** + * Получить данные для плагина + * @param {Object} data - данные плеера + * @return {Object|Boolean} данные для плагина или false, если не показывать + */ + function getVastPlugin(data) { var show = true; @@ -25330,59 +25296,66 @@ }; return false; } + /** + * Получить данные для показа рекламы (преролл или плагин) + * @param {Boolean} first_run - первый запуск (для сброса кулинга) + * @return {Object|Boolean} данные для показа рекламы или false, если не показывать + */ + function getAnyPreroll() { var first_run = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - var manager = Manager.get(player_data, first_run); + var manager = Manager$1.get(player_data, first_run); var plugin = getVastPlugin(player_data); - if (waite_time < Date.now() - 1000 * 60 * 5) return manager || plugin; - return false; + return Manager$1.coolingReady() ? manager || plugin : false; } + /** + * Показать рекламу (преролл или плагин) + * @param {Object} data - данные плеера + * @param {Function} call - вызывается при окончании рекламы + * @return {void} + */ + function show$5(data, call) { - if (!vast_api) { - if (!(Platform.is('orsay') || Platform.is('netcast'))) { - ServiceMetric.counter('no_vast_api', 1); - console.log('Ad', 'error', 'no vast api'); - } - } + player_data = data; // Пометить регион для таргетинга рекламы - var is_torrent = Boolean(data.torrent_hash && Torserver.ip() && data.url.indexOf(Torserver.ip()) > -1); - var is_youtube = Boolean(data.youtube && Activity.active().component == 'full' && data.url.indexOf('youtube.com') > -1); - var is_continue = Boolean(data.continue_play && Lampa.PlayerPlaylist.get().length > 0 && Lampa.PlayerPlaylist.get().indexOf(data) > -1); // Проверка IPTV + player_data.ad_region = VPN.code(); // Не показывать рекламу для iptv/torrent/youtube/continue - if (data.iptv && (Lampa.Activity.active().movie || Lampa.Activity.active().card)) ; + var type = IMA.getMediaType(data); - if (!vast_api || data.iptv || is_torrent || is_youtube || is_continue) { - console.log('Ad', 'skipped, no vast api or iptv/torrent/youtube/continue', vast_api, data.iptv, is_torrent, is_youtube, is_continue); - ServiceMetric.counter('vast_skip', data.iptv ? 1 : 0, is_torrent ? 1 : 0, is_continue ? 1 : 0); + if (type.any) { + console.log('Ad', 'preroll skipped, no vast api or iptv/torrent/youtube/continue', type); return call(); - } + } // Бывает что плеер по несколько раз запускается, + // проверяем чтобы реклама не запускалась несколько раз подряд + + + if (running) return console.log('Ad', 'preroll skipped, already running'); // Помечаем время запуска рекламы - if (running) return console.log('Ad', 'skipped, already running'); running = Date.now(); var ended = function ended() { running = 0; - console.log('Ad', 'call ended'); + Manager$1.markCooling(); + console.log('Ad', 'preroll ended'); call(); - }; + }; // Получаем данные для показа рекламы (преролл или плагин) + - player_data = data; - player_data.ad_region = VPN.code(); var preroll = getAnyPreroll(true); - console.log('Ad', 'any preroll', preroll); - var ignore = window.lampa_settings.developer.ads ? false : Account$1.hasPremium() || Personal.confirm(); - if (ignore) console.log('Ad', 'skipped, premium or torrent/youtube/iptv/continue'); - ServiceMetric.counter('ad_preroll', preroll ? 1 : 0, Account$1.hasPremium() ? 'premium' : Personal.confirm() ? 'personal' : 'none', VPN.code()); - if (preroll && !ignore) { + if (preroll && IMA.canShow(data)) { + // Загружаем SDK для выбранного преролла, чтобы он был готов к показу + IMA.loadSDK(preroll.vast_api)["catch"](function () { + console.log('Ad', 'IMA SDK load error', preroll.vast_api); + }); launch(preroll, ended); } else ended(); } var Preroll = { - init: init$H, + init: init$I, show: show$5 }; @@ -25793,7 +25766,7 @@ * Подписываемся на события */ - function init$G() { + function init$H() { PlayerPanel.init(); PlayerVideo.init(); PlayerInfo.init(); @@ -26492,7 +26465,7 @@ }); } - function start$5(data, need, inner) { + function start$6(data, need, inner) { var player_need = 'player' + (need ? '_' + need : ''); var launchInner = function launchInner() { @@ -26726,7 +26699,7 @@ }); }; - start$5(data, data.torrent_hash ? 'torrent' : '', lauch); + start$6(data, data.torrent_hash ? 'torrent' : '', lauch); launch_player = ''; } @@ -26753,7 +26726,7 @@ if (data.vast_url) Preroll.show(data, lauch);else lauch(); }; - start$5(data, 'iptv', ads); + start$6(data, 'iptv', ads); }); } /** @@ -26762,7 +26735,7 @@ */ - function stat(url) { + function stat$1(url) { if (work || preloader.wait) PlayerInfo.set('stat', url); } /** @@ -26866,12 +26839,12 @@ } var Player = { - init: init$G, + init: init$H, listener: listener$7, play: play$1, playlist: playlist, render: render$7, - stat: stat, + stat: stat$1, subtitles: subtitles, runas: runas, callback: onBack, @@ -26905,7 +26878,7 @@ var theme_elem = $('head meta[name="theme-color"]'); var view = 'one'; var src = ''; - var loaded = {}; + var loaded$1 = {}; var bokeh = { c: [], h: [], @@ -26919,9 +26892,9 @@ * Запуск */ - function init$F() { + function init$G() { Storage.listener.follow('change', function (event) { - if (event.name == 'background' || event.name == 'background_type') resize(); + if (event.name == 'background' || event.name == 'background_type') resize$1(); }); var u = Platform.any() ? object$2.github_lampa : './'; @@ -26953,7 +26926,7 @@ }); Lampa.Listener.follow('resize_end', function () { html$b[0].style.opacity = 1; - resize(); + resize$1(); }); html$b[0].toggleClass('hide', !Storage.field('background')); } @@ -27112,7 +27085,7 @@ */ - function resize() { + function resize$1() { background.one.canvas[0].width = window.screen_width; background.one.canvas[0].height = window.screen_height; background.two.canvas[0].width = window.screen_width; @@ -27126,7 +27099,7 @@ background.fade.canvas.width(window.screen_width); background.fade.canvas.height(window.screen_height); html$b[0].toggleClass('hide', !Storage.field('background')); - if (loaded[src]) draw(loaded[src], background[view]); + if (loaded$1[src]) draw(loaded$1[src], background[view]); } /** * Максимум картинок в памяти @@ -27134,11 +27107,11 @@ function limit$1() { - var a = Arrays.getKeys(loaded); + var a = Arrays.getKeys(loaded$1); if (a.length > 30) { var u = a.slice(0, 1); - delete loaded[u]; + delete loaded$1[u]; } } /** @@ -27147,8 +27120,8 @@ function load$1() { - if (loaded[src]) { - draw(loaded[src], bg()); + if (loaded$1[src]) { + draw(loaded$1[src], bg()); } else if (src) { limit$1(); var cache_src = src; @@ -27163,11 +27136,11 @@ colors = [[200, 200, 200], [100, 100, 100], [10, 10, 10]]; } - loaded[cache_src] = { + loaded$1[cache_src] = { img: img, palette: Color.palette(colors) }; - draw(loaded[cache_src], bg()); + draw(loaded$1[cache_src], bg()); }; img.onerror = function () { @@ -27228,8 +27201,8 @@ var Background = { render: render$6, change: change, - update: resize, - init: init$F, + update: resize$1, + init: init$G, immediately: immediately, theme: theme }; @@ -27238,7 +27211,7 @@ var need_update = false; var need_visible = false; - function init$E() { + function init$F() { window.screen_width = window.innerWidth; window.screen_height = window.innerHeight; $(window).on('resize', function () { @@ -27485,7 +27458,7 @@ var Layer = { update: update$5, visible: visible, - init: init$E + init: init$F }; /** @@ -28244,7 +28217,7 @@ } }; - function init$D() { + function init$E() { var agent = navigator.userAgent.toLowerCase(); if (typeof webOS !== 'undefined' && webOS.platform.tv === true) { @@ -28303,12 +28276,13 @@ } /** * Если это платформа - * @param {String} need - какая нужна? tizen, webos, android, orsay + * @param {String|Array} need - какая нужна? tizen, webos, android, netcast, orsay, apple, apple_tv, nw, electron * @returns Boolean */ function is(need) { + if (Arrays.isArray(need)) return need.indexOf(get$8()) >= 0; return get$8() == need; } /** @@ -28481,7 +28455,7 @@ } var Platform = { - init: init$D, + init: init$E, get: get$8, any: any, is: is, @@ -28499,7 +28473,7 @@ var reqCallback = {}; var timeCallback = {}; - function init$C() { + function init$D() { if (Platform.is('android')) { Params.listener.follow('button', function (e) { if (e.name === 'reset_player') { @@ -28671,7 +28645,7 @@ } var Android = { - init: init$C, + init: init$D, exit: exit, openTorrent: openTorrent, openPlayer: openPlayer, @@ -28689,7 +28663,7 @@ var network$5 = new Request(); var _connected = true; - function init$B() { + function init$C() { Timer.add(1000 * 60 * 15, function () { task$2(); }); @@ -28803,7 +28777,7 @@ } var Mirrors = { - init: init$B, + init: init$C, task: task$2, connected: function connected() { return _connected; @@ -32019,7 +31993,7 @@ var extensions; var listener$5 = Subscribe$2(); - function init$A() { + function init$B() { ParentalControl.add('extensions', { title: 'settings_main_plugins' }); @@ -32055,7 +32029,7 @@ } var Extensions = { - init: init$A, + init: init$B, listener: listener$5, show: show$4, render: render$4 @@ -32073,7 +32047,7 @@ * Запуск */ - function init$z() { + function init$A() { _loaded = Storage.get('plugins', '[]'); Settings.main().render().find('[data-component="plugins"]').unbind('hover:enter').on('hover:enter', function () { ParentalControl.personal('extensions', function () { @@ -32325,7 +32299,7 @@ } var Plugins = { - init: init$z, + init: init$A, load: load, remove: remove$1, loaded: function loaded() { @@ -35825,7 +35799,7 @@ var formats = ['asf', 'wmv', 'divx', 'avi', 'mp4', 'm4v', 'mov', '3gp', '3g2', 'mkv', 'trp', 'tp', 'mts', 'mpg', 'mpeg', 'dat', 'vob', 'rm', 'rmvb', 'm2ts', 'ts']; var formats_individual = ['vob', 'm2ts']; - function start$4(element, movie) { + function start$5(element, movie) { SERVER.object = element; if (movie) SERVER.movie = movie; @@ -36339,7 +36313,7 @@ } var Torrent = { - start: start$4, + start: start$5, open: open$4, opened: opened, back: back$4 @@ -36888,7 +36862,7 @@ additional = [], listener$4 = Subscribe$2(); - function init$y() { + function init$z() { Head.addIcon(Template.string('icon_search'), open$3).addClass('open--search'); } @@ -37040,7 +37014,7 @@ } var Search = { - init: init$y, + init: init$z, listener: listener$4, open: open$3, render: render$3, @@ -37080,7 +37054,7 @@ var network$2 = new Request(); - function init$x() { + function init$y() { Storage.set('parser_torrent_type', Storage.get('parser_torrent_type') || 'jackett'); var source = { title: Lang.translate('title_parser'), @@ -37515,7 +37489,7 @@ } var Parser = { - init: init$x, + init: init$y, get: get$5, jackett: jackett, clear: clear$3 @@ -40068,7 +40042,7 @@ * Запуск */ - function init$w() { + function init$x() { data = Storage.cache('recomends_scan', 300, []); Timer.add(120 * 1000, function () { var history = Favorite.get({ @@ -40201,7 +40175,7 @@ } var Recomends = { - init: init$w, + init: init$x, get: get$4, page: page }; @@ -40694,7 +40668,7 @@ */ - function init$v() { + function init$w() { content = Template.js('activitys'); slides = content.querySelector('.activitys__slides'); maxsave = Storage.get('pages_save_total', 5); @@ -40896,7 +40870,7 @@ limit(); create$4(object); activites.push(object); - start$3(object); + start$4(object); pushState(object); } /** @@ -41023,7 +40997,7 @@ if (previous_tree) { if (previous_tree.activity) { - start$3(previous_tree); + start$4(previous_tree); Lampa.Listener.send('activity', { component: previous_tree.component, type: 'archive', @@ -41032,7 +41006,7 @@ pushState(previous_tree, true); } else { create$4(previous_tree); - start$3(previous_tree); + start$4(previous_tree); pushState(previous_tree); } } @@ -41070,7 +41044,7 @@ */ - function start$3(object) { + function start$4(object) { Head.title(object.title); if (object.activity.is_stopped) { @@ -41221,7 +41195,7 @@ } var Activity = { - init: init$v, + init: init$w, listener: listener$3, push: push$3, back: back$3, @@ -42321,7 +42295,7 @@ * Запуск */ - function init$u() { + function init$v() { if (Platform.is('tizen')) { select('player', { 'inner': '#{settings_param_player_inner}', @@ -42984,7 +42958,7 @@ select('tmdb_proxy_image', '', ''); var Params = { listener: listener$1, - init: init$u, + init: init$v, bind: bind, update: update$3, field: field$1, @@ -43394,7 +43368,7 @@ var workers = {}; var reserve = {}; - function init$t() { + function init$u() { sync('online_view', 'array_string'); sync('torrents_view', 'array_string'); sync('search_history', 'array_string'); @@ -43704,7 +43678,7 @@ var Storage = { listener: listener, - init: init$t, + init: init$u, get: get$1, set: set, field: field, @@ -46365,7 +46339,7 @@ var html$7; var object; - function init$s() { + function init$t() { html$7 = Template.get('iframe'); } @@ -46401,7 +46375,7 @@ } var Iframe = { - init: init$s, + init: init$t, show: show$2, close: close$2, render: render$1 @@ -46428,7 +46402,7 @@ warn: console.warn }; - function init$r() { + function init$s() { Keypad.listener.follow('keydown', function (e) { if (e.code == 38 || e.code == 29460) { var enable = Controller.enabled(); @@ -46699,7 +46673,7 @@ } var Console = { - init: init$r, + init: init$s, "export": function _export() { return original; } @@ -47332,7 +47306,7 @@ } } - function init$q() { + function init$r() { memorys = Storage.cache('helper', 300, {}); Settings.listener.follow('open', function (e) { if (e.name == 'more') { @@ -47348,7 +47322,7 @@ var Helper$1 = { show: show, - init: init$q + init: init$r }; /* @@ -47365,7 +47339,7 @@ * Запуск */ - function init$p() { + function init$q() { if (typeof tizen !== 'undefined') { Timer.add(1000 * 60 * 10, lauchPick); lauchPick(); @@ -47513,7 +47487,7 @@ } var Tizen = { - init: init$p + init: init$q }; function create$1(data) { @@ -48320,7 +48294,7 @@ * LG webOS добавление/удаление приложения из лаунчера, но только для виджетов ручной установки */ - function init$o() { + function init$p() { if (!Platform.is('webos')) return; var field = $("
\n
\n \n \n \n \n \n \n
\n
".concat(Lang.translate('settings_webos_launcher'), "
\n
")); Settings.main().render().find('[data-component="more"]').after(field); @@ -48371,7 +48345,7 @@ } var WebOSLauncher = { - init: init$o + init: init$p }; /** @@ -48456,126 +48430,9 @@ open: open$1 }; - var CardClass = /*#__PURE__*/function () { - function CardClass(params) { - _classCallCheck(this, CardClass); - - this.params = params; - } - - _createClass(CardClass, [{ - key: "create", - value: function create() { - this.build(); - this.image(); - } - }, { - key: "build", - value: function build() { - var _this = this; - - this.card = Template.js('card'); - this.img = this.card.querySelector('.card__img') || {}; - this.card.querySelector('.card__title').innerText = this.params.title; - this.card.querySelector('.card__age').innerText = this.params.subtitle; - this.box = document.createElement('div'); - this.box.classList.add('card__textbox'); - this.box.innerText = this.params.text; - this.card.querySelector('.card__view').appendChild(this.box); - this.card.addEventListener('hover:enter', function () { - var tpl = Template.get('cub_premium'); - tpl.find('.cub-premium__title').text(Lang.translate('title_notice')); - tpl.find('.cub-premium__descr').eq(0).empty().text(Lang.translate('ad_notice_' + _this.params.type)); - Modal.open({ - title: '', - size: 'medium', - mask: true, - html: tpl, - onBack: function onBack() { - Modal.close(); - Controller.toggle('content'); - } - }); - }); - this.card.addEventListener('visible', this.visible.bind(this)); - } - }, { - key: "image", - value: function image() { - var _this2 = this; - - this.img.onload = function () { - _this2.card.classList.add('card--loaded'); - }; - - this.img.onerror = function () { - TMDB$1.broken(); - console.log('Img', 'noload', _this2.img.src); - _this2.img.src = './img/img_broken.svg'; - }; - } - }, { - key: "visible", - value: function visible() { - if (this.params.poster) this.img.src = Api.img(this.params.poster);else if (this.params.img) this.img.src = this.params.img;else this.img.src = './img/img_broken.svg'; - } - }, { - key: "destroy", - value: function destroy() { - this.img.onerror = function () {}; - - this.img.onload = function () {}; - - this.img.src = ''; - this.card.remove(); - this.card = null; - this.img = null; - } - }, { - key: "render", - value: function render(js) { - return js ? this.card : $(this.card); - } - }]); - - return CardClass; - }(); - - var Watched = /*#__PURE__*/function () { - function Watched() { - var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, Watched); - - var n = Math.floor(Math.random() * 5) + 1; - Arrays.extend(params, { - title: params.card.title || params.card.name, - subtitle: Lang.translate('title_notice'), - poster: params.card.poster_path, - text: Lang.translate('ad_notice_' + params.type + '_text_' + n) - }); - this.card = new CardClass(params); - this.card.create(); - } - - _createClass(Watched, [{ - key: "destroy", - value: function destroy() { - this.card.destroy(); - } - }, { - key: "render", - value: function render(js) { - return this.card.render(js); - } - }]); - - return Watched; - }(); - var network; - function init$n() { + function init$o() { network = new Request(); Socket.listener.follow('message', function (e) { if (e.method == 'premiere') update$1(e.data); @@ -48658,89 +48515,15 @@ } var Premiere = { - init: init$n + init: init$o }; - var BotClass = /*#__PURE__*/function () { - function BotClass(params) { - _classCallCheck(this, BotClass); + /** + * Показать уведомление о продлении премиум-статуса + * @returns {void} + */ - this.params = params; - this.build(); - this.image(); - } - - _createClass(BotClass, [{ - key: "build", - value: function build() { - var _this = this; - - this.card = Template.js('ad_bot'); - this.img = this.card.querySelector('.ad-bot__img') || {}; - this.card.querySelector('.ad-bot__title').innerText = this.params.title; - this.card.querySelector('.ad-bot__text').innerText = this.params.text; - this.card.querySelector('.ad-bot__more').innerText = Lang.translate('full_detail'); - this.card.querySelector('.ad-bot__info').innerText = Lang.translate('ad_disable'); - this.card.addEventListener('hover:enter', function () { - var tpl = Template.get('cub_premium'); - tpl.find('.cub-premium__title').text(Lang.translate('title_notice')); - tpl.find('.cub-premium__descr').eq(0).empty().text(Lang.translate('ad_notice_' + _this.params.type)); - Modal.open({ - title: '', - size: 'medium', - mask: true, - html: tpl, - onBack: function onBack() { - Modal.close(); - Controller.toggle('content'); - } - }); - }); - this.visible(); - } - }, { - key: "image", - value: function image() { - var _this2 = this; - - this.img.onload = function () { - _this2.card.classList.add('img--loaded'); - }; - - this.img.onerror = function () { - TMDB$1.broken(); - console.log('Img', 'noload', _this2.img.src); - _this2.img.src = './img/img_broken.svg'; - }; - } - }, { - key: "visible", - value: function visible() { - if (this.params.poster) this.img.src = Api.img(this.params.poster);else if (this.params.img) this.img.src = this.params.img;else this.img.src = './img/img_broken.svg'; - } - }, { - key: "destroy", - value: function destroy() { - this.img.onerror = function () {}; - - this.img.onload = function () {}; - - this.img.src = ''; - this.card.remove(); - this.card = null; - this.img = null; - } - }, { - key: "render", - value: function render(js) { - return js ? this.card : $(this.card); - } - }]); - - return BotClass; - }(); - - function init$m() { + function init$n() { if (Account$1.Permit.access && Lang.selected(['ru', 'uk', 'be', 'bg']) && window.lampa_settings.account_use) { if (Account$1.Permit.user.premium && !Account$1.hasPremium()) setTimeout(push$2, 5000); } @@ -48774,89 +48557,180 @@ } var Extend = { + init: init$n + }; + + var Manager = new VastManager({ + api: 'banner', + cooling: 1000 * 60 * 20 + }); + var adContainer, adDisplayContainer, adsLoader; + var adsManager = null; + var showTimeout = null; + var timeout = 1000 * 60; + var banner = null; + + function init$m() { + Manager.init(); + Lampa.Player.listener.follow('ready', function () { + Manager.markCooling(); + }); + Lampa.Player.listener.follow('destroy', stop); + Lampa.PlayerPanel.listener.follow('visible', function (e) { + return resize(e.status); + }); + var first = true; + Timer.add(1000 * 60, function () { + if (Lampa.Player.opened() && Manager.coolingReady() && IMA.canShow(Lampa.Player.playdata())) { + banner = Manager.get(Lampa.Player.playdata(), first); + console.log('Ad', 'show banner', banner); + + if (banner) { + first = false; + Manager.markCooling(); + stop(); + start$3(); + } else { + first = true; + } + } + }); + } + + function stat(method) { + IMA.metric('banner', method, banner.name); + } + + function resize(visible) { + if (!adContainer) return; + var panelHeight = visible ? Lampa.PlayerPanel.render()[0].offsetHeight : 0; + adContainer.style.height = window.innerHeight - panelHeight - 20 + 'px'; + + if (adsManager) { + var w = adContainer.offsetWidth || window.innerWidth; + var h = adContainer.offsetHeight || window.innerHeight; + + try { + adsManager.resize(w, h, google.ima.ViewMode.NORMAL); + } catch (ex) {} + } + } + + function loaded(event) { + var video = Lampa.PlayerVideo.video(); + if (!Lampa.Player.opened()) return; + stat('run'); + var adsRenderingSettings = new google.ima.AdsRenderingSettings(); + adsRenderingSettings.uiElements = []; + adsManager = event.getAdsManager(video, adsRenderingSettings); + adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, function (e) { + console.log('Ad', 'banner started'); + stat('started'); + showTimeout = setTimeout(function () { + console.log('Ad', 'banner complete'); + stat('complete'); + stop(); + }, timeout); + }); + adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, function (e) { + console.error('Ad', 'manager error', e.getError()); + error(200); + stop(); + }); + var player = Lampa.Player.render()[0]; + var w = player ? player.offsetWidth : window.innerWidth; + var h = player ? player.offsetHeight : window.innerHeight; + + try { + adsManager.init(w, h, google.ima.ViewMode.NORMAL); + adsManager.start(); + resize(Lampa.Player.render().hasClass('player--panel-visible')); + } catch (e) { + console.error('Ad', 'init error', e); + error(300); + stop(); + } + } + + function start$3() { + IMA.loadSDK3().then(function () { + if (!Lampa.Player.opened()) return; + var video = Lampa.PlayerVideo.video(); // Контейнер должен быть внутри .player, чтобы IMA SDK + // правильно рассчитывал позицию overlay относительно видео + + var player = Lampa.Player.render()[0]; + adContainer = document.createElement('div'); + adContainer.style.cssText = 'position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;pointer-events:none;'; + player.appendChild(adContainer); + adDisplayContainer = new google.ima.AdDisplayContainer(adContainer, video); + adsLoader = new google.ima.AdsLoader(adDisplayContainer); + adsLoader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, loaded); + adsLoader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, function (e) { + console.error('Ad', 'banner loader error', e.getError()); + error(100); + stop(); + }); // initialize() должен вызываться до requestAds() и из пользовательского контекста + + adDisplayContainer.initialize(); + var slotWidth = player.offsetWidth || window.innerWidth; + var slotHeight = player.offsetHeight || window.innerHeight; + var request = new google.ima.AdsRequest(); + request.adTagUrl = IMA.buildUrl(banner.url); + request.linearAdSlotWidth = slotWidth; + request.linearAdSlotHeight = slotHeight; + request.nonLinearAdSlotWidth = slotWidth; + request.nonLinearAdSlotHeight = Math.round(slotHeight * 0.3); + adsLoader.requestAds(request); + stat('launch'); + })["catch"](function (e) { + console.error('Ad', 'banner SDK load failed', e); + }); + } + + function error(code) { + IMA.metric('banner', 'error', banner.name); + IMA.metric('banner', 'error_' + code, banner.name); + } + + function stop() { + clearTimeout(showTimeout); + showTimeout = null; + + if (adsManager) { + try { + adsManager.stop(); + adsManager.destroy(); + } catch (e) {} + + adsManager = null; + } + + if (adsLoader) { + try { + adsLoader.destroy(); + } catch (e) {} + + adsLoader = null; + } + + if (adContainer) { + adContainer.remove(); + adContainer = null; + } + } + + var Banner = { init: init$m }; function init$l() { - Lang.add({ - ad_notice_tv_text_1: { - ru: 'Будьте в курсе новых серий - получайте уведомления о переводах на свой смартфон!', - uk: 'Будьте в курсі нових серій - отримуйте сповіщення про переклади на свій смартфон!', - be: 'Будзьце ў курсе новых серый - атрымлівайце апавяшчэння аб перакладах на свой смартфон!', - bg: 'Бъдете в час с новите серии - получавайте уведомление за преводите на своят смартфон!' - }, - ad_notice_tv_text_2: { - ru: 'Никогда не пропускайте новую серию - получайте уведомления о переводах на свой смартфон!', - uk: 'Ніколи не пропускайте нову серію - отримуйте сповіщення про переклади на свій смартфон!', - be: 'Ніколі не прапускайце новую серыю - атрымлівайце апавяшчэння аб перакладах на свой смартфон!', - bg: 'Бъдете в час с новите серии - получавайте уведомление за преводите на своят смартфон!' - }, - ad_notice_tv_text_3: { - ru: 'Оставайтесь в центре событий - получайте уведомления о переводах новых серий на свой смартфон!', - uk: 'Залишайтесь у центрі подій - отримуйте повідомлення про переведення нових серій на свій смартфон!', - be: 'Заставайцеся ў цэнтры падзей - атрымлівайце апавяшчэння аб перакладах новых серый на свой смартфон!', - bg: 'Бъдете в центъра на събитията - получавайте уведомление за преводите на новите серии на своят смартфон!' - }, - ad_notice_tv_text_4: { - ru: 'Будьте первыми, кто узнает о переводах новых серий - получайте уведомления на свой смартфон!', - uk: 'Будьте першими, хто дізнається про переклади нових серій – отримуйте повідомлення на свій смартфон!', - be: 'Будзьце першымі, хто даведаецца аб перакладах новых серый - атрымлівайце апавяшчэння на свой смартфон!', - bg: 'Бъдете първи, за да узнаете за превода на нови серии - получавайте уведомление на своят смартфон!' - }, - ad_notice_tv_text_5: { - ru: 'Не пропустите ни одной новой серии - получайте уведомления о переводах на свой смартфон и смотрите сериалы в любимом переводе!', - uk: 'Не пропустіть жодної нової серії – отримуйте повідомлення про переклади на свій смартфон та дивіться серіали у улюбленому перекладі!', - be: 'Не прапусціце ніводнай новай серыі - атрымлівайце апавяшчэнні аб перакладах на свой смартфон і глядзіце серыялы ў любімым перакладзе!', - bg: 'Не пропускайте нито една серия - получавайте уведомление за преводите на своят смартфон и гледайте сериалите с желаният превод!' - }, - ad_notice_tv: { - ru: 'Получение уведомлений о переводе сериала на свой смартфон - это удобный способ всегда оставаться в курсе и не пропустить ни одной серии. Вы больше не будете терять время на поиски новых серий и следить за релизами вручную. Просто подпишитесь на перевод и получайте уведомления о выходе новых серий на свой смартфон. Это сэкономит вам время и сделает просмотр сериалов еще более комфортным.', - uk: 'Отримання повідомлень про переведення серіалу на свій смартфон – це зручний спосіб завжди залишатися в курсі та не пропустити жодної серії. Ви більше не будете гаяти час на пошуки нових серій і стежити за релізами вручну. Просто підпишіться на переклад та отримуйте повідомлення про вихід нових серій на свій смартфон. Це заощадить вам час і зробить перегляд серіалів ще комфортнішим.', - be: 'Атрыманне апавяшчэнняў аб пераводзе серыяла на свой смартфон - гэта зручны спосаб заўсёды заставацца ў курсе і не прапусціць ніводнай серыі. Вы больш не будзеце марнаваць час на пошукі новых серый і сачыць за рэлізамі ўручную. Проста падпішыцеся на пераклад і атрымлівайце апавяшчэнні аб выхадзе новых серый на свой смартфон. Гэта зэканоміць вам час і зробіць прагляд серыялаў яшчэ камфортнейшым.', - bg: 'Получавайте уведомление за преведени сериали на своят смартфон - това е удобен начин винаги да си в час и да не пропуснеш нито една серия. Повече няма да губите време в търсене на нови излъчени серии. Това ще спести времето ви и ще направи прегледа на сериали още по-комфортно' - }, - ad_bot_tv_title: { - ru: 'Уведомления на вашем смартфоне', - uk: 'Сповіщення на вашому смартфоні', - be: 'Апавешчанні на вашым смартфоне', - bg: 'Известия на вашия смартфон' - }, - ad_bot_tv_text: { - ru: 'Будьте в курсе самых ожидаемых моментов! Теперь вы можете получать мгновенные уведомления о выходе новых серий и фильмов прямо на свой смартфон.', - uk: 'Будьте в курсі найочікуваніших моментів! Тепер ви можете отримувати миттєві сповіщення про виход нових серіалів і фільмів прямо на свій смартфон.', - be: 'Будзьце ў курсе самых чаканых момантаў! Цяпер вы можаце атрымліваць хуткія апавешчанні аб выходзе новых сэрыяў і фільмаў проста на свой смартфон.', - bg: 'Бъдете в течение на най-очакваните моменти! Сега можете да получавате мигновени известия за излизането на нови серии и филми директно на вашия смартфон.' - } - }); - Lampa.Listener.follow('line', function (event) { - if (event.type == 'create' && event.data.ad && !Account$1.hasPremium() && window.lampa_settings.account_use && !window.lampa_settings.disable_features.ads && Lang.selected(['ru', 'uk', 'be', 'bg']) && !Personal.confirm()) { - var item; - - if (event.data.ad == 'bot') { - item = new BotClass({ - card: event.data.results[0], - type: event.data.type, - title: Lang.translate('ad_bot_tv_title'), - text: Lang.translate('ad_bot_tv_text'), - poster: event.data.results[0].poster_path - }); - } else { - item = new Watched({ - card: event.data.results[0], - type: event.data.type - }); - } - - item.render(true).on('hover:focus', function (e) { - event.scroll.update(e.target); - }); - event.items.push(item); - event.scroll.append(item.render(true)); - } - }); Premiere.init(); Extend.init(); - Preroll.init(); + + if (!Platform.is(['orsay', 'netcast'])) { + Preroll.init(); + Banner.init(); + } } var AdManager = { @@ -51226,8 +51100,8 @@ console.log('App', 'is PWA:', Utils$1.isPWA()); console.log('App', 'platform:', Storage.get('platform', 'noname')); console.log('App', 'version:', object$2.app_version); - console.log('App', 'build date:', '2026-06-01 18:41'); - console.log('App', 'hash', 'c0d2afd1ce20e62685a23a544a65b096'); + console.log('App', 'build date:', '2026-06-08 10:40'); + console.log('App', 'hash', 'd249ef1a55a31c91f382c18c26319139'); console.log('App', 'location:', location.href); // Записываем uid if (!Storage.get('lampa_uid', '')) Storage.set('lampa_uid', Utils$1.uid()); // Ренедрим лампу diff --git a/assembly.json b/assembly.json index 17a1573..19f6951 100644 --- a/assembly.json +++ b/assembly.json @@ -3,6 +3,6 @@ "css_version": "3.2.0", "css_digital": 320, "app_digital": 320, - "time": 1780328466370, - "hash": "c0d2afd1ce20e62685a23a544a65b096" + "time": 1780904443300, + "hash": "d249ef1a55a31c91f382c18c26319139" } \ No newline at end of file diff --git a/css/app.css b/css/app.css index 2e80cb3..ea7ec94 100644 --- a/css/app.css +++ b/css/app.css @@ -13136,197 +13136,6 @@ body.mouse--controll .pincode__container { padding-right: 1em; } -.smart { - border: 0.3em solid #fff; - border-bottom: 0; - -webkit-border-top-right-radius: 1em; - -moz-border-radius-topright: 1em; - border-top-right-radius: 1em; - -webkit-border-top-left-radius: 1em; - -moz-border-radius-topleft: 1em; - border-top-left-radius: 1em; - position: relative; - background-color: rgba(255, 255, 255, 0.5); -} -.smart__camera { - background-color: #fff; - width: 30%; - margin: 0 auto; - padding: 0 0.3em 0.2em; - -webkit-border-bottom-left-radius: 0.3em; - -moz-border-radius-bottomleft: 0.3em; - border-bottom-left-radius: 0.3em; - -webkit-border-bottom-right-radius: 0.3em; - -moz-border-radius-bottomright: 0.3em; - border-bottom-right-radius: 0.3em; -} -.smart__camera::after { - display: block; - content: ""; - width: 0.5em; - height: 0.5em; - margin-left: auto; - background-color: black; - -webkit-border-radius: 100%; - -moz-border-radius: 100%; - border-radius: 100%; -} -.smart__power { - position: absolute; - top: 17%; - height: 18%; - width: 0.3em; - background-color: #fff; - left: 100%; - margin-left: 0.2em; -} -.smart__body { - padding: 1em; - padding-bottom: 0; -} - -.ad-bot { - width: 40em; - -webkit-flex-shrink: 0; - -ms-flex-negative: 0; - flex-shrink: 0; - margin-right: 1em; - line-height: 1.6; -} -@media screen and (max-width: 580px) { - .ad-bot { - width: 27em; - } -} -.ad-bot__content { - background-color: rgba(255, 255, 255, 0.2); - position: relative; - -webkit-border-radius: 1em; - -moz-border-radius: 1em; - border-radius: 1em; -} -.ad-bot__body { - display: -webkit-box; - display: -webkit-flex; - display: -moz-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: end; - -webkit-align-items: flex-end; - -moz-box-align: end; - -ms-flex-align: end; - align-items: flex-end; - height: 19em; -} -.ad-bot__left { - width: 40%; - padding: 2.1em; - padding-bottom: 0; -} -@media screen and (max-width: 580px) { - .ad-bot__left { - padding: 0.8em; - padding-bottom: 0; - } -} -.ad-bot__right { - width: 60%; - padding: 1.5em; -} -@media screen and (max-width: 580px) { - .ad-bot__right { - padding: 1em; - } -} -.ad-bot__title { - font-weight: 600; - font-size: 1.6em; -} -@media screen and (max-width: 580px) { - .ad-bot__title { - font-size: 1.4em; - } -} -.ad-bot__text { - margin-top: 1em; - overflow: hidden; - -o-text-overflow: "."; - text-overflow: "."; - display: -webkit-box; - -webkit-line-clamp: 5; - line-clamp: 5; - -webkit-box-orient: vertical; -} -@media screen and (max-width: 580px) { - .ad-bot__text { - -webkit-line-clamp: 3; - line-clamp: 3; - } -} -.ad-bot__more { - margin-top: 1em; -} -.ad-bot__imgbox { - padding-bottom: 150%; - position: relative; -} -.ad-bot__img { - -webkit-border-top-left-radius: 0.5em; - -moz-border-radius-topleft: 0.5em; - border-top-left-radius: 0.5em; - -webkit-border-top-right-radius: 0.5em; - -moz-border-radius-topright: 0.5em; - border-top-right-radius: 0.5em; - position: absolute; - top: 0; - left: 0; - height: 100%; - width: 100%; - opacity: 0; -} -.ad-bot__marker { - position: absolute; - top: 0; - right: 0; - background-color: gold; - color: #fff; - padding: 0.2em 0.3em; - -webkit-border-radius: 0.3em; - -moz-border-radius: 0.3em; - border-radius: 0.3em; - -webkit-border-top-right-radius: 1em; - -moz-border-radius-topright: 1em; - border-top-right-radius: 1em; -} -.ad-bot__marker:after { - content: "AD"; - font-size: 0.8em; -} -.ad-bot__info { - margin-top: 1.2em; -} -.ad-bot.focus .ad-bot__content::after, .ad-bot.hover .ad-bot__content::after { - content: ""; - position: absolute; - top: -0.5em; - left: -0.5em; - right: -0.5em; - bottom: -0.5em; - border: 0.3em solid #fff; - -webkit-border-radius: 1.4em; - -moz-border-radius: 1.4em; - border-radius: 1.4em; - z-index: -1; - pointer-events: none; -} -.ad-bot.img--loaded .ad-bot__img { - opacity: 1; -} - -body.size--bigger .ad-bot__body { - height: 21.7em; -} - .ad-countdown { display: -webkit-box; display: -webkit-flex;