diff --git a/setup.cfg b/setup.cfg index ec31875..e7b28b4 100644 --- a/setup.cfg +++ b/setup.cfg @@ -46,7 +46,7 @@ install_requires = requests >= 2.24.0, < 3.0.0 aiofiles >= 22.1.0, < 23.0.0 tenacity >= 8.0.1, < 9.0.0 - colorama >= 0.4.4, < 0.5.0 + loguru >= 0.7.2, < 0.8.0 humanize >= 3.13.1, < 4.0.0 tqdm >= 4.62.3, < 5.0.0 attrs >= 21.2.0, < 22.0.0 diff --git a/src/blrec/application.py b/src/blrec/application.py index d44282b..208f001 100644 --- a/src/blrec/application.py +++ b/src/blrec/application.py @@ -1,11 +1,11 @@ import asyncio -import logging import os from contextlib import suppress from typing import Iterator, List, Optional import attr import psutil +from loguru import logger from . import __prog__, __version__ from .bili.helpers import ensure_room_id @@ -33,8 +33,6 @@ from .task import ( ) from .webhook import WebHookEmitter -logger = logging.getLogger(__name__) - @attr.s(auto_attribs=True, slots=True, frozen=True) class AppInfo: @@ -100,6 +98,7 @@ class Application: await self.exit() async def launch(self) -> None: + self._setup_logger() logger.info('Launching Application...') self._setup() logger.debug(f'Default umask {os.umask(0o000)}') @@ -296,7 +295,6 @@ class Application: return await self._settings_manager.change_task_options(room_id, options) def _setup(self) -> None: - self._setup_logger() self._setup_exception_handler() self._setup_space_monitor() self._setup_space_event_submitter() diff --git a/src/blrec/bili/api.py b/src/blrec/bili/api.py index cebfecb..94eb76e 100644 --- a/src/blrec/bili/api.py +++ b/src/blrec/bili/api.py @@ -1,13 +1,12 @@ import asyncio import hashlib -import logging -import os from abc import ABC from datetime import datetime -from typing import Any, Dict, List, Mapping, Optional, Final +from typing import Any, Dict, Final, List, Mapping, Optional from urllib.parse import urlencode import aiohttp +from loguru import logger from tenacity import retry, stop_after_delay, wait_exponential from .exceptions import ApiRequestError @@ -16,10 +15,6 @@ from .typing import JsonResponse, QualityNumber, ResponseData __all__ = 'AppApi', 'WebApi' -logger = logging.getLogger(__name__) - -TRACE_API_REQ = bool(os.environ.get('BLREC_TRACE_API_REQ')) - BASE_HEADERS: Final = { 'Accept-Encoding': 'gzip, deflate, br', 'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en;q=0.3,en-US;q=0.2', # noqa @@ -34,8 +29,14 @@ BASE_HEADERS: Final = { class BaseApi(ABC): def __init__( - self, session: aiohttp.ClientSession, headers: Optional[Dict[str, str]] = None + self, + session: aiohttp.ClientSession, + headers: Optional[Dict[str, str]] = None, + *, + room_id: Optional[int] = None, ): + self._logger = logger.bind(room_id=room_id or '') + self.base_api_urls: List[str] = ['https://api.bilibili.com'] self.base_live_api_urls: List[str] = ['https://api.live.bilibili.com'] self.base_play_info_api_urls: List[str] = ['https://api.live.bilibili.com'] @@ -64,13 +65,13 @@ class BaseApi(ABC): should_check_response = kwds.pop('check_response', True) kwds = {'timeout': self.timeout, 'headers': self.headers, **kwds} async with self._session.get(*args, **kwds) as res: - if TRACE_API_REQ: - logger.debug(f'Request info: {res.request_info}') + self._logger.trace('Request: {}', res.request_info) + self._logger.trace('Response: {}', await res.text()) try: json_res = await res.json() except aiohttp.ContentTypeError: text_res = await res.text() - logger.debug(f'Response text: {text_res[:200]}') + self._logger.debug(f'Response text: {text_res[:200]}') raise if should_check_response: self._check_response(json_res) @@ -88,8 +89,7 @@ class BaseApi(ABC): return await self._get_json_res(url, *args, **kwds) except Exception as exc: exception = exc - if TRACE_API_REQ: - logger.debug(f'Failed to get json from {url}', exc_info=exc) + self._logger.trace('Failed to get json from {}: {}', url, repr(exc)) else: assert exception is not None raise exception @@ -106,14 +106,14 @@ class BaseApi(ABC): json_responses = [] for idx, item in enumerate(results): if isinstance(item, Exception): - if TRACE_API_REQ: - logger.debug(f'Failed to get json from {urls[idx]}', exc_info=item) + self._logger.trace( + 'Failed to get json from {}: {}', urls[idx], repr(item) + ) exceptions.append(item) elif isinstance(item, dict): json_responses.append(item) else: - if TRACE_API_REQ: - logger.debug(repr(item)) + self._logger.trace('{}', repr(item)) if not json_responses: raise exceptions[0] return json_responses diff --git a/src/blrec/bili/danmaku_client.py b/src/blrec/bili/danmaku_client.py index 88fc4cf..c7b86dc 100644 --- a/src/blrec/bili/danmaku_client.py +++ b/src/blrec/bili/danmaku_client.py @@ -1,6 +1,5 @@ import asyncio import json -import logging import struct from contextlib import suppress from enum import Enum, IntEnum @@ -11,11 +10,12 @@ import brotli from aiohttp import ClientSession from tenacity import retry, retry_if_exception_type, wait_exponential +from blrec.logging.context import async_task_with_logger_context + from ..event.event_emitter import EventEmitter, EventListener from ..exception import exception_callback -from ..logging.room_id import aio_task_with_room_id from ..utils.mixins import AsyncStoppableMixin -from ..utils.string import extract_uid_from_cookie, extract_buvid_from_cookie +from ..utils.string import extract_buvid_from_cookie, extract_uid_from_cookie from .api import AppApi, WebApi from .exceptions import DanmakuClientAuthError from .typing import ApiPlatform, Danmaku @@ -23,7 +23,7 @@ from .typing import ApiPlatform, Danmaku __all__ = 'DanmakuClient', 'DanmakuListener', 'Danmaku', 'DanmakuCommand' -logger = logging.getLogger(__name__) +from loguru import logger class DanmakuListener(EventListener): @@ -57,6 +57,9 @@ class DanmakuClient(EventEmitter[DanmakuListener], AsyncStoppableMixin): headers: Optional[Dict[str, str]] = None, ) -> None: super().__init__() + self._logger_context = {'room_id': room_id} + self._logger = logger.bind(**self._logger_context) + self.session = session self.appapi = appapi self.webapi = webapi @@ -86,24 +89,25 @@ class DanmakuClient(EventEmitter[DanmakuListener], AsyncStoppableMixin): await self._update_danmu_info() await self._connect() await self._create_message_loop() - logger.debug('Started danmaku client') + self._logger.debug('Started danmaku client') async def _do_stop(self) -> None: await self._terminate_message_loop() await self._disconnect() - logger.debug('Stopped danmaku client') + self._logger.debug('Stopped danmaku client') + @async_task_with_logger_context async def restart(self) -> None: - logger.debug('Restarting danmaku client...') + self._logger.debug('Restarting danmaku client...') await self.stop() await self.start() - logger.debug('Restarted danmaku client') + self._logger.debug('Restarted danmaku client') async def reconnect(self) -> None: if self.stopped: return - logger.debug('Reconnecting...') + self._logger.debug('Reconnecting...') await self._disconnect() await self._connect() await self._emit('client_reconnected') @@ -115,7 +119,7 @@ class DanmakuClient(EventEmitter[DanmakuListener], AsyncStoppableMixin): ), ) async def _connect(self) -> None: - logger.debug('Connecting to server...') + self._logger.debug('Connecting to server...') try: await self._connect_websocket() await self._send_auth() @@ -129,7 +133,7 @@ class DanmakuClient(EventEmitter[DanmakuListener], AsyncStoppableMixin): await self._update_danmu_info() raise else: - logger.debug('Connected to server') + self._logger.debug('Connected to server') await self._emit('client_connected') async def _connect_websocket(self) -> None: @@ -137,16 +141,16 @@ class DanmakuClient(EventEmitter[DanmakuListener], AsyncStoppableMixin): self._danmu_info['host_list'][self._host_index]['host'], self._danmu_info['host_list'][self._host_index]['wss_port'], ) - logger.debug(f'Connecting WebSocket... {url}') + self._logger.debug(f'Connecting WebSocket... {url}') try: self._ws = await self.session.ws_connect( url, timeout=5, headers=self.headers ) except Exception as exc: - logger.debug(f'Failed to connect WebSocket: {repr(exc)}') + self._logger.debug(f'Failed to connect WebSocket: {repr(exc)}') raise else: - logger.debug('Connected WebSocket') + self._logger.debug('Connected WebSocket') async def _send_auth(self) -> None: auth_msg = json.dumps( @@ -161,26 +165,28 @@ class DanmakuClient(EventEmitter[DanmakuListener], AsyncStoppableMixin): } ) data = Frame.encode(WS.OP_USER_AUTHENTICATION, auth_msg) - logger.debug('Sending user authentication...') + self._logger.debug('Sending user authentication...') try: await self._ws.send_bytes(data) except Exception as exc: - logger.debug(f'Failed to sent user authentication: {repr(exc)}') + self._logger.debug(f'Failed to sent user authentication: {repr(exc)}') raise else: - logger.debug('Sent user authentication') + self._logger.debug('Sent user authentication') async def _recieve_auth_reply(self) -> aiohttp.WSMessage: - logger.debug('Receiving user authentication reply...') + self._logger.debug('Receiving user authentication reply...') try: msg = await self._ws.receive(timeout=5) if msg.type != aiohttp.WSMsgType.BINARY: raise aiohttp.ClientError(msg) except Exception as exc: - logger.debug(f'Failed to receive user authentication reply: {repr(exc)}') + self._logger.debug( + f'Failed to receive user authentication reply: {repr(exc)}' + ) raise else: - logger.debug('Recieved user authentication reply') + self._logger.debug('Recieved user authentication reply') return msg async def _handle_auth_reply(self, reply: aiohttp.WSMessage) -> None: @@ -190,7 +196,7 @@ class DanmakuClient(EventEmitter[DanmakuListener], AsyncStoppableMixin): code = cast(int, json.loads(msg)['code']) if code == WS.AUTH_OK: - logger.debug('Auth OK') + self._logger.debug('Auth OK') self._create_heartbeat_task() elif code == WS.AUTH_TOKEN_ERROR: raise DanmakuClientAuthError(f'Token expired: {code}') @@ -204,7 +210,7 @@ class DanmakuClient(EventEmitter[DanmakuListener], AsyncStoppableMixin): self._api_platform = 'android' async def _update_danmu_info(self) -> None: - logger.debug(f'Updating danmu info via {self._api_platform} api...') + self._logger.debug(f'Updating danmu info via {self._api_platform} api...') api: Union[WebApi, AppApi] if self._api_platform == 'web': api = self.webapi @@ -213,15 +219,15 @@ class DanmakuClient(EventEmitter[DanmakuListener], AsyncStoppableMixin): try: self._danmu_info = await api.get_danmu_info(self._room_id) except Exception as exc: - logger.warning(f'Failed to update danmu info: {repr(exc)}') + self._logger.warning(f'Failed to update danmu info: {repr(exc)}') self._danmu_info = COMMON_DANMU_INFO else: - logger.debug('Danmu info updated') + self._logger.debug('Danmu info updated') async def _disconnect(self) -> None: await self._cancel_heartbeat_task() await self._close_websocket() - logger.debug('Disconnected from server') + self._logger.debug('Disconnected from server') await self._emit('client_disconnected') async def _close_websocket(self) -> None: @@ -237,14 +243,14 @@ class DanmakuClient(EventEmitter[DanmakuListener], AsyncStoppableMixin): with suppress(asyncio.CancelledError): await self._heartbeat_task - @aio_task_with_room_id + @async_task_with_logger_context async def _send_heartbeat(self) -> None: data = Frame.encode(WS.OP_HEARTBEAT, '') while True: try: await self._ws.send_bytes(data) except Exception as exc: - logger.warning(f'Failed to send heartbeat: {repr(exc)}') + self._logger.warning(f'Failed to send heartbeat: {repr(exc)}') await self._emit('error_occurred', exc) task = asyncio.create_task(self.restart()) task.add_done_callback(exception_callback) @@ -254,15 +260,15 @@ class DanmakuClient(EventEmitter[DanmakuListener], AsyncStoppableMixin): async def _create_message_loop(self) -> None: self._message_loop_task = asyncio.create_task(self._message_loop()) self._message_loop_task.add_done_callback(exception_callback) - logger.debug('Created message loop') + self._logger.debug('Created message loop') async def _terminate_message_loop(self) -> None: self._message_loop_task.cancel() with suppress(asyncio.CancelledError): await self._message_loop_task - logger.debug('Terminated message loop') + self._logger.debug('Terminated message loop') - @aio_task_with_room_id + @async_task_with_logger_context async def _message_loop(self) -> None: while True: for msg in await self._receive(): @@ -292,8 +298,7 @@ class DanmakuClient(EventEmitter[DanmakuListener], AsyncStoppableMixin): else: await self._handle_receive_error(ValueError(wsmsg)) - @staticmethod - async def _handle_data(data: bytes) -> Optional[List[Dict[str, Any]]]: + async def _handle_data(self, data: bytes) -> Optional[List[Dict[str, Any]]]: loop = asyncio.get_running_loop() try: @@ -304,12 +309,14 @@ class DanmakuClient(EventEmitter[DanmakuListener], AsyncStoppableMixin): elif op == WS.OP_HEARTBEAT_REPLY: pass except Exception as e: - logger.warning(f'Failed to handle data: {repr(e)}, data: {repr(data)}') + self._logger.warning( + f'Failed to handle data: {repr(e)}, data: {repr(data)}' + ) return None async def _handle_receive_error(self, exc: Exception) -> None: - logger.warning(f'Failed to receive message: {repr(exc)}') + self._logger.warning(f'Failed to receive message: {repr(exc)}') await self._emit('error_occurred', exc) if isinstance(exc, asyncio.TimeoutError): return @@ -322,7 +329,7 @@ class DanmakuClient(EventEmitter[DanmakuListener], AsyncStoppableMixin): async def _retry(self) -> None: if self._retry_count < self._MAX_RETRIES: if self._retry_delay > 0: - logger.debug( + self._logger.debug( 'Retry after {} second{}'.format( self._retry_delay, 's' if self._retry_delay > 1 else '' ) diff --git a/src/blrec/bili/helpers.py b/src/blrec/bili/helpers.py index 9e7eac4..b0b3051 100644 --- a/src/blrec/bili/helpers.py +++ b/src/blrec/bili/helpers.py @@ -13,7 +13,7 @@ __all__ = 'room_init', 'ensure_room_id' async def room_init(room_id: int) -> ResponseData: async with aiohttp.ClientSession(raise_for_status=True) as session: - api = WebApi(session) + api = WebApi(session, room_id=room_id) return await api.room_init(room_id) diff --git a/src/blrec/bili/live.py b/src/blrec/bili/live.py index 82e65d4..0104601 100644 --- a/src/blrec/bili/live.py +++ b/src/blrec/bili/live.py @@ -1,6 +1,5 @@ import asyncio import json -import logging import re import time from typing import Any, Dict, List @@ -26,7 +25,7 @@ from .typing import ApiPlatform, QualityNumber, ResponseData, StreamCodec, Strea __all__ = ('Live',) -logger = logging.getLogger(__name__) +from loguru import logger _INFO_PATTERN = re.compile( rb'' @@ -36,6 +35,8 @@ _LIVE_STATUS_PATTERN = re.compile(rb'"live_status"\s*:\s*(\d)') class Live: def __init__(self, room_id: int, user_agent: str = '', cookie: str = '') -> None: + self._logger = logger.bind(room_id=room_id) + self._room_id = room_id self._user_agent = user_agent self._cookie = cookie @@ -47,8 +48,8 @@ class Live: raise_for_status=True, trust_env=True, ) - self._appapi = AppApi(self._session, self.headers) - self._webapi = WebApi(self._session, self.headers) + self._appapi = AppApi(self._session, self.headers, room_id=room_id) + self._webapi = WebApi(self._session, self.headers, room_id=room_id) self._room_info: RoomInfo self._user_info: UserInfo @@ -189,7 +190,7 @@ class Live: try: self._user_info = await self.get_user_info(self._room_info.uid) except Exception as e: - logger.error(f'Failed to update user info: {repr(e)}') + self._logger.error(f'Failed to update user info: {repr(e)}') if raise_exception: raise return False @@ -200,7 +201,7 @@ class Live: try: self._room_info = await self.get_room_info() except Exception as e: - logger.error(f'Failed to update room info: {repr(e)}') + self._logger.error(f'Failed to update room info: {repr(e)}') if raise_exception: raise return False @@ -240,7 +241,7 @@ class Live: try: ts = await self.get_server_timestamp() except Exception as e: - logger.warning(f'Failed to get timestamp from server: {repr(e)}') + self._logger.warning(f'Failed to get timestamp from server: {repr(e)}') ts = int(time.time()) return ts diff --git a/src/blrec/bili/live_monitor.py b/src/blrec/bili/live_monitor.py index d63f1e8..3be4c32 100644 --- a/src/blrec/bili/live_monitor.py +++ b/src/blrec/bili/live_monitor.py @@ -1,10 +1,11 @@ import asyncio -import logging import random from contextlib import suppress +from loguru import logger + from blrec.exception import exception_callback -from blrec.logging.room_id import aio_task_with_room_id +from blrec.logging.context import async_task_with_logger_context from ..event.event_emitter import EventEmitter, EventListener from ..utils.mixins import SwitchableMixin @@ -17,9 +18,6 @@ from .typing import Danmaku __all__ = 'LiveMonitor', 'LiveEventListener' -logger = logging.getLogger(__name__) - - class LiveEventListener(EventListener): async def on_live_status_changed( self, current_status: LiveStatus, previous_status: LiveStatus @@ -45,6 +43,8 @@ class LiveEventListener(EventListener): class LiveMonitor(EventEmitter[LiveEventListener], DanmakuListener, SwitchableMixin): def __init__(self, danmaku_client: DanmakuClient, live: Live) -> None: super().__init__() + self._logger_context = {'room_id': live.room_id} + self._logger = logger.bind(**self._logger_context) self._danmaku_client = danmaku_client self._live = live @@ -61,13 +61,13 @@ class LiveMonitor(EventEmitter[LiveEventListener], DanmakuListener, SwitchableMi self._init_status() self._danmaku_client.add_listener(self) self._start_polling() - logger.debug('Enabled live monitor') + self._logger.debug('Enabled live monitor') def _do_disable(self) -> None: self._danmaku_client.remove_listener(self) asyncio.create_task(self._stop_polling()) asyncio.create_task(self._stop_checking()) - logger.debug('Disabled live monitor') + self._logger.debug('Disabled live monitor') def _start_polling(self) -> None: self._polling_task = asyncio.create_task(self._poll_live_status()) @@ -99,23 +99,23 @@ class LiveMonitor(EventEmitter[LiveEventListener], DanmakuListener, SwitchableMi # events if necessary. # make sure the recorder works well continuously after interruptions # such as an operating system hibernation. - logger.warning('The Danmaku Client Reconnected') + self._logger.warning('The Danmaku Client Reconnected') await self._live.update_room_info() current_status = self._live.room_info.live_status if current_status == self._previous_status: if current_status == LiveStatus.LIVE: - logger.debug('Simulating stream reset event') + self._logger.debug('Simulating stream reset event') await self._handle_status_change(current_status) else: if current_status == LiveStatus.LIVE: - logger.debug('Simulating live began event') + self._logger.debug('Simulating live began event') await self._handle_status_change(current_status) - logger.debug('Simulating live stream available event') + self._logger.debug('Simulating live stream available event') await self._handle_status_change(current_status) else: - logger.debug('Simulating live ended event') + self._logger.debug('Simulating live ended event') await self._handle_status_change(current_status) async def on_danmaku_received(self, danmu: Danmaku) -> None: @@ -135,7 +135,7 @@ class LiveMonitor(EventEmitter[LiveEventListener], DanmakuListener, SwitchableMi await self._emit('room_changed', self._live.room_info) async def _handle_status_change(self, current_status: LiveStatus) -> None: - logger.debug( + self._logger.debug( 'Live status changed from {} to {}'.format( self._previous_status.name, current_status.name ) @@ -163,62 +163,62 @@ class LiveMonitor(EventEmitter[LiveEventListener], DanmakuListener, SwitchableMi else: pass - logger.debug('Number of sequential LIVE status: {}'.format(self._status_count)) + self._logger.debug( + 'Number of sequential LIVE status: {}'.format(self._status_count) + ) self._previous_status = current_status - @aio_task_with_room_id async def check_live_status(self) -> None: - logger.debug('Checking live status...') + self._logger.debug('Checking live status...') try: await self._check_live_status() except Exception as e: - logger.warning(f'Failed to check live status: {repr(e)}') - logger.debug('Done checking live status') + self._logger.warning(f'Failed to check live status: {repr(e)}') + self._logger.debug('Done checking live status') - @aio_task_with_room_id async def _check_live_status(self) -> None: await self._live.update_room_info() current_status = self._live.room_info.live_status if current_status != self._previous_status: await self._handle_status_change(current_status) - @aio_task_with_room_id + @async_task_with_logger_context async def _poll_live_status(self) -> None: - logger.debug('Started polling live status') + self._logger.debug('Started polling live status') while True: try: await asyncio.sleep(600 + random.randrange(-60, 60)) await self._check_live_status() except asyncio.CancelledError: - logger.debug('Cancelled polling live status') + self._logger.debug('Cancelled polling live status') break except Exception as e: - logger.warning(f'Failed to poll live status: {repr(e)}') + self._logger.warning(f'Failed to poll live status: {repr(e)}') - logger.debug('Stopped polling live status') + self._logger.debug('Stopped polling live status') - @aio_task_with_room_id + @async_task_with_logger_context async def _check_if_stream_available(self) -> None: - logger.debug('Started checking if stream available') + self._logger.debug('Started checking if stream available') while True: try: streams = await self._live.get_live_streams() if streams: - logger.debug('live stream available') + self._logger.debug('live stream available') self._stream_available = True flv_formats = extract_formats(streams, 'flv') self._live._no_flv_stream = not flv_formats await self._emit('live_stream_available', self._live) break except asyncio.CancelledError: - logger.debug('Cancelled checking if stream available') + self._logger.debug('Cancelled checking if stream available') break except Exception as e: - logger.warning(f'Failed to check if stream available: {repr(e)}') + self._logger.warning(f'Failed to check if stream available: {repr(e)}') await asyncio.sleep(1) - logger.debug('Stopped checking if stream available') + self._logger.debug('Stopped checking if stream available') diff --git a/src/blrec/cli/main.py b/src/blrec/cli/main.py index 3e63e29..3efd037 100644 --- a/src/blrec/cli/main.py +++ b/src/blrec/cli/main.py @@ -1,4 +1,3 @@ -import logging import os import sys from copy import deepcopy @@ -6,13 +5,12 @@ from typing import Optional import typer import uvicorn +from loguru import logger from uvicorn.config import LOGGING_CONFIG from .. import __prog__, __version__ from ..logging import TqdmOutputStream -logger = logging.getLogger(__name__) - cli = typer.Typer() diff --git a/src/blrec/core/cover_downloader.py b/src/blrec/core/cover_downloader.py index 0265629..9ff7501 100644 --- a/src/blrec/core/cover_downloader.py +++ b/src/blrec/core/cover_downloader.py @@ -1,16 +1,15 @@ -import logging from enum import Enum from threading import Lock from typing import Set import aiofiles import aiohttp +from loguru import logger from tenacity import retry, stop_after_attempt, wait_fixed from blrec.bili.live import Live from blrec.event.event_emitter import EventEmitter, EventListener from blrec.exception import submit_exception -from blrec.logging.room_id import aio_task_with_room_id from blrec.path import cover_path from blrec.utils.hash import sha1sum from blrec.utils.mixins import SwitchableMixin @@ -20,9 +19,6 @@ from .stream_recorder import StreamRecorder, StreamRecorderEventListener __all__ = 'CoverDownloader', 'CoverDownloaderEventListener' -logger = logging.getLogger(__name__) - - class CoverDownloaderEventListener(EventListener): async def on_cover_image_downloaded(self, path: str) -> None: ... @@ -54,6 +50,8 @@ class CoverDownloader( cover_save_strategy: CoverSaveStrategy = CoverSaveStrategy.DEFAULT, ) -> None: super().__init__() + self._logger_context = {'room_id': live.room_id} + self._logger = logger.bind(**self._logger_context) self._live = live self._stream_recorder = stream_recorder self._lock: Lock = Lock() @@ -64,11 +62,11 @@ class CoverDownloader( def _do_enable(self) -> None: self._sha1_set.clear() self._stream_recorder.add_listener(self) - logger.debug('Enabled cover downloader') + self._logger.debug('Enabled cover downloader') def _do_disable(self) -> None: self._stream_recorder.remove_listener(self) - logger.debug('Disabled cover downloader') + self._logger.debug('Disabled cover downloader') async def on_video_file_completed(self, video_path: str) -> None: with self._lock: @@ -76,7 +74,6 @@ class CoverDownloader( return await self._save_cover(video_path) - @aio_task_with_room_id async def _save_cover(self, video_path: str) -> None: try: await self._live.update_room_info() @@ -92,10 +89,10 @@ class CoverDownloader( await self._save_file(path, data) self._sha1_set.add(sha1) except Exception as e: - logger.error(f'Failed to save cover image: {repr(e)}') + self._logger.error(f'Failed to save cover image: {repr(e)}') submit_exception(e) else: - logger.info(f'Saved cover image: {path}') + self._logger.info(f'Saved cover image: {path}') await self._emit('cover_image_downloaded', path) @retry(reraise=True, wait=wait_fixed(1), stop=stop_after_attempt(3)) diff --git a/src/blrec/core/danmaku_dumper.py b/src/blrec/core/danmaku_dumper.py index 62f75b1..f586b1b 100644 --- a/src/blrec/core/danmaku_dumper.py +++ b/src/blrec/core/danmaku_dumper.py @@ -1,11 +1,11 @@ import asyncio import html -import logging from contextlib import suppress from decimal import Decimal from threading import Lock from typing import Iterator, List, Optional +from loguru import logger from tenacity import AsyncRetrying, retry_if_not_exception_type, stop_after_attempt from blrec import __github__, __prog__, __version__ @@ -22,7 +22,7 @@ from blrec.danmaku.models import ( ) from blrec.event.event_emitter import EventEmitter, EventListener from blrec.exception import exception_callback, submit_exception -from blrec.logging.room_id import aio_task_with_room_id +from blrec.logging.context import async_task_with_logger_context from blrec.path import danmaku_path from blrec.utils.mixins import SwitchableMixin @@ -33,9 +33,6 @@ from .stream_recorder import StreamRecorder, StreamRecorderEventListener __all__ = 'DanmakuDumper', 'DanmakuDumperEventListener' -logger = logging.getLogger(__name__) - - class DanmakuDumperEventListener(EventListener): async def on_danmaku_file_created(self, path: str) -> None: ... @@ -62,6 +59,8 @@ class DanmakuDumper( record_super_chat: bool = False, ) -> None: super().__init__() + self._logger_context = {'room_id': live.room_id} + self._logger = logger.bind(**self._logger_context) self._live = live self._stream_recorder = stream_recorder @@ -97,13 +96,13 @@ class DanmakuDumper( def _do_enable(self) -> None: self._stream_recorder.add_listener(self) self._statistics.reset() - logger.debug('Enabled danmaku dumper') + self._logger.debug('Enabled danmaku dumper') def _do_disable(self) -> None: self._stream_recorder.remove_listener(self) asyncio.create_task(self._stop_dumping()) self._statistics.freeze() - logger.debug('Disabled danmaku dumper') + self._logger.debug('Disabled danmaku dumper') def set_live_start_time(self, time: int) -> None: self._live_start_time = time @@ -141,7 +140,7 @@ class DanmakuDumper( self._interrupted_timestamp = timestamp self._duration = duration self._stream_recording_interrupted = True - logger.debug( + self._logger.debug( 'Stream recording interrupted, ' f'timestamp: {timestamp}, duration: {duration}' ) @@ -153,13 +152,13 @@ class DanmakuDumper( - Decimal(str(self._interrupted_timestamp)) ) self._stream_recording_interrupted = False - logger.debug( + self._logger.debug( 'Stream recording recovered, ' f'timestamp: {timestamp}, delta: {self._delta}' ) async def on_duration_lost(self, duration: float) -> None: - logger.debug(f'Total duration lost: {(duration)}') + self._logger.debug(f'Total duration lost: ≈ {(duration)} s') self._delta = -duration def _start_dumping(self) -> None: @@ -179,14 +178,14 @@ class DanmakuDumper( with suppress(asyncio.CancelledError): await self._dump_task - @aio_task_with_room_id + @async_task_with_logger_context async def _do_dump(self) -> None: assert self._path is not None - logger.debug('Started dumping danmaku') + self._logger.debug('Started dumping danmaku') try: async with DanmakuWriter(self._path) as writer: - logger.info(f"Danmaku file created: '{self._path}'") + self._logger.info(f"Danmaku file created: '{self._path}'") await self._emit('danmaku_file_created', self._path) await writer.write_metadata(self._make_metadata()) @@ -201,9 +200,9 @@ class DanmakuDumper( submit_exception(e) raise finally: - logger.info(f"Danmaku file completed: '{self._path}'") + self._logger.info(f"Danmaku file completed: '{self._path}'") await self._emit('danmaku_file_completed', self._path) - logger.debug('Stopped dumping danmaku') + self._logger.debug('Stopped dumping danmaku') async def _dumping_loop(self, writer: DanmakuWriter) -> None: while True: @@ -230,7 +229,7 @@ class DanmakuDumper( continue await writer.write_super_chat_record(self._make_super_chat_record(msg)) else: - logger.warning(f'Unsupported message type: {repr(msg)}') + self._logger.warning(f'Unsupported message type: {repr(msg)}') def _make_metadata(self) -> Metadata: return Metadata( diff --git a/src/blrec/core/danmaku_receiver.py b/src/blrec/core/danmaku_receiver.py index d96ece5..4d8cf42 100644 --- a/src/blrec/core/danmaku_receiver.py +++ b/src/blrec/core/danmaku_receiver.py @@ -1,8 +1,10 @@ -import logging from asyncio import Queue, QueueFull from typing import Final +from loguru import logger + from blrec.bili.danmaku_client import DanmakuClient, DanmakuCommand, DanmakuListener +from blrec.bili.live import Live from blrec.bili.typing import Danmaku from blrec.utils.mixins import StoppableMixin @@ -12,25 +14,23 @@ from .typing import DanmakuMsg __all__ = ('DanmakuReceiver',) -logger = logging.getLogger(__name__) - - class DanmakuReceiver(DanmakuListener, StoppableMixin): _MAX_QUEUE_SIZE: Final[int] = 2000 - def __init__(self, danmaku_client: DanmakuClient) -> None: + def __init__(self, live: Live, danmaku_client: DanmakuClient) -> None: super().__init__() + self._logger = logger.bind(room_id=live.room_id) self._danmaku_client = danmaku_client self._queue: Queue[DanmakuMsg] = Queue(maxsize=self._MAX_QUEUE_SIZE) def _do_start(self) -> None: self._danmaku_client.add_listener(self) - logger.debug('Started danmaku receiver') + self._logger.debug('Started danmaku receiver') def _do_stop(self) -> None: self._danmaku_client.remove_listener(self) self._clear_queue() - logger.debug('Stopped danmaku receiver') + self._logger.debug('Stopped danmaku receiver') async def get_message(self) -> DanmakuMsg: return await self._queue.get() diff --git a/src/blrec/core/flv_stream_recorder_impl.py b/src/blrec/core/flv_stream_recorder_impl.py index 2ebba6d..efa0965 100644 --- a/src/blrec/core/flv_stream_recorder_impl.py +++ b/src/blrec/core/flv_stream_recorder_impl.py @@ -1,6 +1,6 @@ -import logging from typing import Optional +from loguru import logger from reactivex.scheduler import NewThreadScheduler from blrec.bili.live import Live @@ -16,9 +16,6 @@ from .stream_recorder_impl import StreamRecorderImpl __all__ = ('FLVStreamRecorderImpl',) -logger = logging.getLogger(__name__) - - class FLVStreamRecorderImpl(StreamRecorderImpl, SupportDebugMixin): def __init__( self, @@ -134,30 +131,33 @@ class FLVStreamRecorderImpl(StreamRecorderImpl, SupportDebugMixin): self._metadata_dumper.disable() def _run(self) -> None: - self._subscription = ( - self._stream_param_holder.get_stream_params() # type: ignore - .pipe( - self._stream_url_resolver, - self._stream_fetcher, - self._recording_monitor, - self._dl_statistics, - self._stream_parser, - self._connection_error_handler, - self._request_exception_handler, - flv_ops.process(sort_tags=True), - self._cutter, - self._limiter, - self._join_point_extractor, - self._prober, - self._injector, - self._analyser, - self._dumper, - self._rec_statistics, - self._progress_bar, - self._exception_handler, + with logger.contextualize(room_id=self._live.room_id): + self._subscription = ( + self._stream_param_holder.get_stream_params() # type: ignore + .pipe( + self._stream_url_resolver, + self._stream_fetcher, + self._recording_monitor, + self._dl_statistics, + self._stream_parser, + self._connection_error_handler, + self._request_exception_handler, + flv_ops.process(sort_tags=True), + self._cutter, + self._limiter, + self._join_point_extractor, + self._prober, + self._injector, + self._analyser, + self._dumper, + self._rec_statistics, + self._progress_bar, + self._exception_handler, + ) + .subscribe( + on_completed=self._on_completed, + scheduler=NewThreadScheduler( + self._thread_factory('StreamRecorder') + ), + ) ) - .subscribe( - on_completed=self._on_completed, - scheduler=NewThreadScheduler(self._thread_factory('StreamRecorder')), - ) - ) diff --git a/src/blrec/core/hls_stream_recorder_impl.py b/src/blrec/core/hls_stream_recorder_impl.py index 668c14f..484bf7a 100644 --- a/src/blrec/core/hls_stream_recorder_impl.py +++ b/src/blrec/core/hls_stream_recorder_impl.py @@ -1,6 +1,6 @@ -import logging from typing import Optional +from loguru import logger from reactivex.scheduler import NewThreadScheduler from blrec.bili.live import Live @@ -16,9 +16,6 @@ from .stream_recorder_impl import StreamRecorderImpl __all__ = ('HLSStreamRecorderImpl',) -logger = logging.getLogger(__name__) - - class HLSStreamRecorderImpl(StreamRecorderImpl): def __init__( self, @@ -123,32 +120,37 @@ class HLSStreamRecorderImpl(StreamRecorderImpl): self._ff_metadata_dumper.disable() def _run(self) -> None: - self._subscription = ( - self._stream_param_holder.get_stream_params() # type: ignore - .pipe( - self._stream_url_resolver, - self._playlist_fetcher, - self._recording_monitor, - self._connection_error_handler, - self._request_exception_handler, - self._playlist_resolver, - utils_ops.observe_on_new_thread( - queue_size=60, thread_name=f'SegmentFetcher::{self._live.room_id}' - ), - self._segment_fetcher, - self._dl_statistics, - self._prober, - self._analyser, - self._cutter, - self._limiter, - self._segment_dumper, - self._rec_statistics, - self._progress_bar, - self._playlist_dumper, - self._exception_handler, + with logger.contextualize(room_id=self._live.room_id): + self._subscription = ( + self._stream_param_holder.get_stream_params() # type: ignore + .pipe( + self._stream_url_resolver, + self._playlist_fetcher, + self._recording_monitor, + self._connection_error_handler, + self._request_exception_handler, + self._playlist_resolver, + utils_ops.observe_on_new_thread( + queue_size=60, + thread_name=f'SegmentFetcher::{self._live.room_id}', + logger_context={'room_id': self._live.room_id}, + ), + self._segment_fetcher, + self._dl_statistics, + self._prober, + self._analyser, + self._cutter, + self._limiter, + self._segment_dumper, + self._rec_statistics, + self._progress_bar, + self._playlist_dumper, + self._exception_handler, + ) + .subscribe( + on_completed=self._on_completed, + scheduler=NewThreadScheduler( + self._thread_factory('HLSStreamRecorder') + ), + ) ) - .subscribe( - on_completed=self._on_completed, - scheduler=NewThreadScheduler(self._thread_factory('HLSStreamRecorder')), - ) - ) diff --git a/src/blrec/core/models.py b/src/blrec/core/models.py index 4d8b8f6..ed1095f 100644 --- a/src/blrec/core/models.py +++ b/src/blrec/core/models.py @@ -1,12 +1,9 @@ -import logging from typing import Literal import attr from blrec.bili.typing import Danmaku -logger = logging.getLogger(__name__) - @attr.s(auto_attribs=True, frozen=True, slots=True) class DanmuMsg: diff --git a/src/blrec/core/operators/connection_error_handler.py b/src/blrec/core/operators/connection_error_handler.py index f4f2c5c..f28bd1f 100644 --- a/src/blrec/core/operators/connection_error_handler.py +++ b/src/blrec/core/operators/connection_error_handler.py @@ -1,11 +1,11 @@ from __future__ import annotations -import logging import time from typing import Optional, TypeVar import aiohttp import requests +from loguru import logger from reactivex import Observable, abc from blrec.bili.live import Live @@ -15,8 +15,6 @@ from blrec.utils.mixins import AsyncCooperationMixin __all__ = ('ConnectionErrorHandler',) -logger = logging.getLogger(__name__) - _T = TypeVar('_T') diff --git a/src/blrec/core/operators/exception_handler.py b/src/blrec/core/operators/exception_handler.py index ebe2398..3429f81 100644 --- a/src/blrec/core/operators/exception_handler.py +++ b/src/blrec/core/operators/exception_handler.py @@ -1,20 +1,19 @@ from __future__ import annotations import errno -import logging from typing import Optional, TypeVar +from loguru import logger from reactivex import Observable, abc from blrec.bili.exceptions import LiveRoomEncrypted, LiveRoomHidden, LiveRoomLocked +from blrec.exception.helpers import format_exception from blrec.utils import operators as utils_ops from blrec.utils.mixins import AsyncCooperationMixin __all__ = ('ExceptionHandler',) -logger = logging.getLogger(__name__) - _T = TypeVar('_T') @@ -28,12 +27,11 @@ class ExceptionHandler(AsyncCooperationMixin): scheduler: Optional[abc.SchedulerBase] = None, ) -> abc.DisposableBase: def on_error(exc: Exception) -> None: - logger.exception(repr(exc)) self._submit_exception(exc) try: raise exc except OSError as e: - logger.critical(repr(e), exc_info=e) + logger.critical('{}\n{}', repr(exc), format_exception(exc)) if e.errno == errno.ENOSPC: # OSError(28, 'No space left on device') observer.on_completed() diff --git a/src/blrec/core/operators/progress_bar.py b/src/blrec/core/operators/progress_bar.py index 14ce1a5..e8afd51 100644 --- a/src/blrec/core/operators/progress_bar.py +++ b/src/blrec/core/operators/progress_bar.py @@ -1,6 +1,5 @@ from __future__ import annotations -import logging import os from typing import Optional @@ -13,11 +12,8 @@ from blrec.flv.operators.typing import FLVStream, FLVStreamItem __all__ = ('ProgressBar',) - DISPLAY_PROGRESS = bool(os.environ.get('BLREC_PROGRESS')) -logger = logging.getLogger(__name__) - class ProgressBar: def __init__(self, live: Live) -> None: diff --git a/src/blrec/core/operators/recording_monitor.py b/src/blrec/core/operators/recording_monitor.py index d8c058f..70c2a20 100644 --- a/src/blrec/core/operators/recording_monitor.py +++ b/src/blrec/core/operators/recording_monitor.py @@ -1,6 +1,5 @@ from __future__ import annotations -import logging import time from typing import Callable, Final, Optional, Tuple, TypeVar @@ -12,8 +11,6 @@ from blrec.utils.mixins import AsyncCooperationMixin __all__ = ('RecordingMonitor',) -logger = logging.getLogger(__name__) - _T = TypeVar('_T') diff --git a/src/blrec/core/operators/request_exception_handler.py b/src/blrec/core/operators/request_exception_handler.py index b10a53e..e471d69 100644 --- a/src/blrec/core/operators/request_exception_handler.py +++ b/src/blrec/core/operators/request_exception_handler.py @@ -1,13 +1,13 @@ from __future__ import annotations import asyncio -import logging import time from typing import Optional, TypeVar import aiohttp import requests import urllib3 +from loguru import logger from reactivex import Observable, abc from reactivex import operators as ops @@ -17,8 +17,6 @@ from blrec.utils import operators as utils_ops __all__ = ('RequestExceptionHandler',) -logger = logging.getLogger(__name__) - _T = TypeVar('_T') diff --git a/src/blrec/core/operators/stream_fetcher.py b/src/blrec/core/operators/stream_fetcher.py index 6ec9953..24272c4 100644 --- a/src/blrec/core/operators/stream_fetcher.py +++ b/src/blrec/core/operators/stream_fetcher.py @@ -1,10 +1,10 @@ from __future__ import annotations import io -import logging from typing import Optional import requests +from loguru import logger from reactivex import Observable, abc from blrec.bili.live import Live @@ -13,9 +13,6 @@ from blrec.utils.mixins import AsyncCooperationMixin __all__ = ('StreamFetcher',) -logger = logging.getLogger(__name__) - - class StreamFetcher(AsyncCooperationMixin): def __init__( self, diff --git a/src/blrec/core/operators/stream_parser.py b/src/blrec/core/operators/stream_parser.py index c03c47a..25bfbe7 100644 --- a/src/blrec/core/operators/stream_parser.py +++ b/src/blrec/core/operators/stream_parser.py @@ -1,8 +1,8 @@ from __future__ import annotations import io -import logging +from loguru import logger from reactivex import Observable from reactivex import operators as ops @@ -16,9 +16,6 @@ from ..stream_param_holder import StreamParamHolder __all__ = ('StreamParser',) -logger = logging.getLogger(__name__) - - class StreamParser: def __init__( self, diff --git a/src/blrec/core/operators/stream_url_resolver.py b/src/blrec/core/operators/stream_url_resolver.py index ac5a652..a75f396 100644 --- a/src/blrec/core/operators/stream_url_resolver.py +++ b/src/blrec/core/operators/stream_url_resolver.py @@ -1,10 +1,10 @@ from __future__ import annotations -import logging from typing import Final, Optional from urllib.parse import urlparse import requests +from loguru import logger from reactivex import Observable, abc from reactivex import operators as ops @@ -28,9 +28,6 @@ from ..stream_param_holder import StreamParamHolder, StreamParams __all__ = ('StreamURLResolver',) -logger = logging.getLogger(__name__) - - class StreamURLResolver(AsyncCooperationMixin): _MAX_ATTEMPTS_FOR_NO_STREAM: Final[int] = 10 diff --git a/src/blrec/core/path_provider.py b/src/blrec/core/path_provider.py index 3db8fef..b7c83d4 100644 --- a/src/blrec/core/path_provider.py +++ b/src/blrec/core/path_provider.py @@ -1,4 +1,3 @@ -import logging import os import re from datetime import datetime @@ -10,8 +9,6 @@ from blrec.utils.mixins import AsyncCooperationMixin __all__ = ('PathProvider',) -logger = logging.getLogger(__name__) - class PathProvider(AsyncCooperationMixin): def __init__(self, live: Live, out_dir: str, path_template: str) -> None: diff --git a/src/blrec/core/raw_danmaku_dumper.py b/src/blrec/core/raw_danmaku_dumper.py index a14ac71..8a85aae 100644 --- a/src/blrec/core/raw_danmaku_dumper.py +++ b/src/blrec/core/raw_danmaku_dumper.py @@ -1,17 +1,17 @@ import asyncio import json -import logging from contextlib import suppress from threading import Lock import aiofiles from aiofiles.threadpool.text import AsyncTextIOWrapper +from loguru import logger from tenacity import AsyncRetrying, retry_if_not_exception_type, stop_after_attempt from blrec.bili.live import Live from blrec.event.event_emitter import EventEmitter, EventListener from blrec.exception import exception_callback, submit_exception -from blrec.logging.room_id import aio_task_with_room_id +from blrec.logging.context import async_task_with_logger_context from blrec.path import raw_danmaku_path from blrec.utils.mixins import SwitchableMixin @@ -21,9 +21,6 @@ from .stream_recorder import StreamRecorder, StreamRecorderEventListener __all__ = 'RawDanmakuDumper', 'RawDanmakuDumperEventListener' -logger = logging.getLogger(__name__) - - class RawDanmakuDumperEventListener(EventListener): async def on_raw_danmaku_file_created(self, path: str) -> None: ... @@ -44,19 +41,20 @@ class RawDanmakuDumper( danmaku_receiver: RawDanmakuReceiver, ) -> None: super().__init__() - self._live = live # @aio_task_with_room_id + self._logger_context = {'room_id': live.room_id} + self._logger = logger.bind(**self._logger_context) self._stream_recorder = stream_recorder self._receiver = danmaku_receiver self._lock: Lock = Lock() def _do_enable(self) -> None: self._stream_recorder.add_listener(self) - logger.debug('Enabled raw danmaku dumper') + self._logger.debug('Enabled raw danmaku dumper') def _do_disable(self) -> None: self._stream_recorder.remove_listener(self) asyncio.create_task(self._stop_dumping()) - logger.debug('Disabled raw danmaku dumper') + self._logger.debug('Disabled raw danmaku dumper') async def on_video_file_created( self, video_path: str, record_start_time: int @@ -87,12 +85,12 @@ class RawDanmakuDumper( with suppress(asyncio.CancelledError): await self._dump_task - @aio_task_with_room_id + @async_task_with_logger_context async def _do_dump(self) -> None: - logger.debug('Started dumping raw danmaku') + self._logger.debug('Started dumping raw danmaku') try: async with aiofiles.open(self._path, 'wt', encoding='utf8') as f: - logger.info(f"Raw danmaku file created: '{self._path}'") + self._logger.info(f"Raw danmaku file created: '{self._path}'") await self._emit('raw_danmaku_file_created', self._path) async for attempt in AsyncRetrying( @@ -110,9 +108,9 @@ class RawDanmakuDumper( json_string = json.dumps(danmu, ensure_ascii=False) await f.write(json_string + '\n') finally: - logger.info(f"Raw danmaku file completed: '{self._path}'") + self._logger.info(f"Raw danmaku file completed: '{self._path}'") await self._emit('raw_danmaku_file_completed', self._path) - logger.debug('Stopped dumping raw danmaku') + self._logger.debug('Stopped dumping raw danmaku') async def _dumping_loop(self, file: AsyncTextIOWrapper) -> None: while True: diff --git a/src/blrec/core/raw_danmaku_receiver.py b/src/blrec/core/raw_danmaku_receiver.py index 7a68c13..c118307 100644 --- a/src/blrec/core/raw_danmaku_receiver.py +++ b/src/blrec/core/raw_danmaku_receiver.py @@ -1,33 +1,33 @@ -import logging from asyncio import Queue, QueueFull from typing import Final +from loguru import logger + from blrec.bili.danmaku_client import DanmakuClient, DanmakuListener +from blrec.bili.live import Live from blrec.bili.typing import Danmaku from blrec.utils.mixins import StoppableMixin __all__ = ('RawDanmakuReceiver',) -logger = logging.getLogger(__name__) - - class RawDanmakuReceiver(DanmakuListener, StoppableMixin): _MAX_QUEUE_SIZE: Final[int] = 2000 - def __init__(self, danmaku_client: DanmakuClient) -> None: + def __init__(self, live: Live, danmaku_client: DanmakuClient) -> None: super().__init__() + self._logger = logger.bind(room_id=live.room_id) self._danmaku_client = danmaku_client self._queue: Queue[Danmaku] = Queue(maxsize=self._MAX_QUEUE_SIZE) def _do_start(self) -> None: self._danmaku_client.add_listener(self) - logger.debug('Started raw danmaku receiver') + self._logger.debug('Started raw danmaku receiver') def _do_stop(self) -> None: self._danmaku_client.remove_listener(self) self._clear_queue() - logger.debug('Stopped raw danmaku receiver') + self._logger.debug('Stopped raw danmaku receiver') async def get_raw_danmaku(self) -> Danmaku: return await self._queue.get() diff --git a/src/blrec/core/recorder.py b/src/blrec/core/recorder.py index 2493644..a3134c4 100644 --- a/src/blrec/core/recorder.py +++ b/src/blrec/core/recorder.py @@ -1,11 +1,11 @@ from __future__ import annotations import asyncio -import logging from datetime import datetime from typing import Iterator, Optional import humanize +from loguru import logger from blrec.bili.danmaku_client import DanmakuClient from blrec.bili.live import Live @@ -32,9 +32,6 @@ from .stream_recorder import StreamRecorder, StreamRecorderEventListener __all__ = 'RecorderEventListener', 'Recorder' -logger = logging.getLogger(__name__) - - class RecorderEventListener(EventListener): async def on_recording_started(self, recorder: Recorder) -> None: ... @@ -105,6 +102,8 @@ class Recorder( save_raw_danmaku: bool = False, ) -> None: super().__init__() + self._logger_context = {'room_id': live.room_id} + self._logger = logger.bind(**self._logger_context) self._live = live self._danmaku_client = danmaku_client @@ -130,9 +129,9 @@ class Recorder( duration_limit=duration_limit, ) - self._danmaku_receiver = DanmakuReceiver(danmaku_client) + self._danmaku_receiver = DanmakuReceiver(live, danmaku_client) self._danmaku_dumper = DanmakuDumper( - self._live, + live, self._stream_recorder, self._danmaku_receiver, danmu_uname=danmu_uname, @@ -141,13 +140,13 @@ class Recorder( record_guard_buy=record_guard_buy, record_super_chat=record_super_chat, ) - self._raw_danmaku_receiver = RawDanmakuReceiver(danmaku_client) + self._raw_danmaku_receiver = RawDanmakuReceiver(live, danmaku_client) self._raw_danmaku_dumper = RawDanmakuDumper( - self._live, self._stream_recorder, self._raw_danmaku_receiver + live, self._stream_recorder, self._raw_danmaku_receiver ) self._cover_downloader = CoverDownloader( - self._live, + live, self._stream_recorder, save_cover=save_cover, cover_save_strategy=cover_save_strategy, @@ -380,12 +379,12 @@ class Recorder( return self._stream_recorder.cut_stream() async def on_live_began(self, live: Live) -> None: - logger.info('The live has began') + self._logger.info('The live has began') self._print_live_info() await self._start_recording() async def on_live_ended(self, live: Live) -> None: - logger.info('The live has ended') + self._logger.info('The live has ended') await asyncio.sleep(3) self._stream_available = False self._stream_recorder.stream_available_time = None @@ -393,13 +392,13 @@ class Recorder( self._print_waiting_message() async def on_live_stream_available(self, live: Live) -> None: - logger.debug('The live stream becomes available') + self._logger.debug('The live stream becomes available') self._stream_available = True self._stream_recorder.stream_available_time = await live.get_timestamp() await self._stream_recorder.start() async def on_live_stream_reset(self, live: Live) -> None: - logger.warning('The live stream has been reset') + self._logger.warning('The live stream has been reset') if not self._recording: await self._start_recording() @@ -429,7 +428,7 @@ class Recorder( await self._emit('cover_image_downloaded', self, path) async def on_stream_recording_completed(self) -> None: - logger.debug('Stream recording completed') + self._logger.debug('Stream recording completed') await self._stop_recording() async def _do_start(self) -> None: @@ -437,7 +436,7 @@ class Recorder( self._danmaku_dumper.add_listener(self) self._raw_danmaku_dumper.add_listener(self) self._cover_downloader.add_listener(self) - logger.debug('Started recorder') + self._logger.debug('Started recorder') self._print_live_info() if self._live.is_living(): @@ -452,7 +451,7 @@ class Recorder( self._danmaku_dumper.remove_listener(self) self._raw_danmaku_dumper.remove_listener(self) self._cover_downloader.remove_listener(self) - logger.debug('Stopped recorder') + self._logger.debug('Stopped recorder') async def _start_recording(self) -> None: if self._recording: @@ -471,7 +470,7 @@ class Recorder( if self._stream_available: await self._stream_recorder.start() - logger.info('Started recording') + self._logger.info('Started recording') await self._emit('recording_started', self) async def _stop_recording(self) -> None: @@ -489,10 +488,10 @@ class Recorder( self._stream_recorder.remove_listener(self) if self._stopped: - logger.info('Recording Cancelled') + self._logger.info('Recording Cancelled') await self._emit('recording_cancelled', self) else: - logger.info('Recording Finished') + self._logger.info('Recording Finished') await self._emit('recording_finished', self) async def _prepare(self) -> None: @@ -502,7 +501,7 @@ class Recorder( self._stream_recorder.clear_files() def _print_waiting_message(self) -> None: - logger.info('Waiting... until the live starts') + self._logger.info('Waiting... until the live starts') def _print_live_info(self) -> None: room_info = self._live.room_info @@ -537,7 +536,7 @@ description : {room_info.description} =============================================================================== """ - logger.info(msg) + self._logger.info(msg) def _print_changed_room_info(self, room_info: RoomInfo) -> None: msg = f""" @@ -549,4 +548,4 @@ parent area id : {room_info.parent_area_id} parent area name : {room_info.parent_area_name} =============================================================================== """ - logger.info(msg) + self._logger.info(msg) diff --git a/src/blrec/core/stream_param_holder.py b/src/blrec/core/stream_param_holder.py index 8874a22..d3910a9 100644 --- a/src/blrec/core/stream_param_holder.py +++ b/src/blrec/core/stream_param_holder.py @@ -1,6 +1,5 @@ from __future__ import annotations -import logging from typing import Any, Final, Optional import attr @@ -13,9 +12,6 @@ from blrec.bili.typing import ApiPlatform, QualityNumber, StreamFormat __all__ = ('StreamParamHolder',) -logger = logging.getLogger(__name__) - - @attr.s(auto_attribs=True, frozen=True, slots=True) class StreamParams: stream_format: StreamFormat diff --git a/src/blrec/core/stream_recorder.py b/src/blrec/core/stream_recorder.py index b19bebc..5dd54a3 100644 --- a/src/blrec/core/stream_recorder.py +++ b/src/blrec/core/stream_recorder.py @@ -1,8 +1,9 @@ import asyncio -import logging import time from typing import Iterator, Optional +from loguru import logger + from blrec.bili.live import Live from blrec.bili.live_monitor import LiveMonitor from blrec.bili.typing import QualityNumber, StreamFormat @@ -20,9 +21,6 @@ from .typing import MetaData __all__ = 'StreamRecorder', 'StreamRecorderEventListener' -logger = logging.getLogger(__name__) - - class StreamRecorder( StreamRecorderEventListener, EventEmitter[StreamRecorderEventListener], @@ -46,6 +44,8 @@ class StreamRecorder( duration_limit: int = 0, ) -> None: super().__init__() + self._logger_context = {'room_id': live.room_id} + self._logger = logger.bind(**self._logger_context) self._live = live self._live_monitor = live_monitor @@ -58,7 +58,7 @@ class StreamRecorder( elif stream_format == 'fmp4': cls = HLSStreamRecorderImpl # type: ignore else: - logger.warning( + self._logger.warning( f'The specified stream format ({stream_format}) is ' 'unsupported, will using the stream format (flv) instead.' ) @@ -242,7 +242,7 @@ class StreamRecorder( if self._live.has_no_flv_streams(): if stream_format == 'flv': - logger.warning( + self._logger.warning( 'The specified stream format (flv) is not available, ' 'falling back to stream format (fmp4).' ) @@ -250,7 +250,7 @@ class StreamRecorder( self.hls_stream_available_time = self.stream_available_time else: if stream_format == 'fmp4': - logger.info('Waiting for the fmp4 stream becomes available...') + self._logger.info('Waiting for the fmp4 stream becomes available...') available = await self._wait_fmp4_stream() if available: if self.stream_available_time is not None: @@ -258,7 +258,7 @@ class StreamRecorder( await self._live.get_timestamp() ) else: - logger.warning( + self._logger.warning( 'The specified stream format (fmp4) is not available ' f'in {self.fmp4_stream_timeout} seconcds, ' 'falling back to stream format (flv).' @@ -312,7 +312,7 @@ class StreamRecorder( elif stream_format == 'fmp4': cls = HLSStreamRecorderImpl # type: ignore else: - logger.warning( + self._logger.warning( f'The specified stream format ({stream_format}) is ' 'unsupported, will using the stream format (flv) instead.' ) @@ -342,4 +342,4 @@ class StreamRecorder( self._impl.stream_available_time = stream_available_time self._impl.hls_stream_available_time = hls_stream_available_time - logger.debug(f'Changed stream recorder impl to {cls.__name__}') + self._logger.debug(f'Changed stream recorder impl to {cls.__name__}') diff --git a/src/blrec/core/stream_recorder_impl.py b/src/blrec/core/stream_recorder_impl.py index e15d1db..0624f24 100644 --- a/src/blrec/core/stream_recorder_impl.py +++ b/src/blrec/core/stream_recorder_impl.py @@ -7,6 +7,7 @@ from typing import Any, Iterator, List, Optional, Tuple, Union import requests import urllib3 +from loguru import logger from reactivex import abc from reactivex.typing import StartableFactory, StartableTarget @@ -29,7 +30,6 @@ from .stream_param_holder import StreamParamHolder __all__ = ('StreamRecorderImpl',) -logger = logging.getLogger(__name__) logging.getLogger(urllib3.__name__).setLevel(logging.WARNING) @@ -78,6 +78,8 @@ class StreamRecorderImpl( duration_limit: int = 0, ) -> None: super().__init__() + self._logger_context = {'room_id': live.room_id} + self._logger = logger.bind(**self._logger_context) self._live = live self._live_monitor = live_monitor @@ -282,14 +284,14 @@ class StreamRecorderImpl( self._completed = False async def _do_start(self) -> None: - logger.debug('Starting stream recorder...') + self._logger.debug('Starting stream recorder...') self._on_start() self._reset() self._run() - logger.debug('Started stream recorder') + self._logger.debug('Started stream recorder') async def _do_stop(self) -> None: - logger.debug('Stopping stream recorder...') + self._logger.debug('Stopping stream recorder...') self._stream_param_holder.cancel() thread = self._thread_factory('StreamRecorderDisposer')(self._dispose) thread.start() @@ -297,7 +299,7 @@ class StreamRecorderImpl( await self._loop.run_in_executor(None, thread.join, 30) self._threads.clear() self._on_stop() - logger.debug('Stopped stream recorder') + self._logger.debug('Stopped stream recorder') def _on_start(self) -> None: pass @@ -311,10 +313,15 @@ class StreamRecorderImpl( def _thread_factory(self, name: str) -> StartableFactory: def factory(target: StartableTarget) -> Thread: + def run() -> None: + with logger.contextualize(room_id=self._live.room_id): + target() + thread = Thread( - target=target, daemon=True, name=f'{name}::{self._live.room_id}' + target=run, daemon=True, name=f'{name}::{self._live.room_id}' ) self._threads.append(thread) + return thread return factory @@ -334,24 +341,24 @@ class StreamRecorderImpl( self._emit_event('stream_recording_completed') def _on_profile_updated(self, profile: StreamProfile) -> None: - logger.debug(f'Stream profile: {profile}') + self._logger.debug(f'Stream profile: {profile}') self._stream_profile = profile def _on_video_file_opened(self, args: Tuple[str, int]) -> None: - logger.info(f"Video file created: '{args[0]}'") + self._logger.info(f"Video file created: '{args[0]}'") self._files.append(args[0]) self._record_start_time = args[1] self._emit_event('video_file_created', *args) def _on_video_file_closed(self, path: str) -> None: - logger.info(f"Video file completed: '{path}'") + self._logger.info(f"Video file completed: '{path}'") self._emit_event('video_file_completed', path) def _on_recording_interrupted(self, args: Tuple[float, float]) -> None: timestamp, duration = args[0], args[1] datetime_string = datetime.fromtimestamp(timestamp).isoformat() duration_string = format_timestamp(int(duration * 1000)) - logger.info( + self._logger.warning( f'Recording interrupted, datetime: {datetime_string}, ' f'duration: {duration_string}' ) @@ -359,11 +366,11 @@ class StreamRecorderImpl( def _on_recording_recovered(self, timestamp: float) -> None: datetime_string = datetime.fromtimestamp(timestamp).isoformat() - logger.info(f'Recording recovered, datetime: {(datetime_string)}') + self._logger.warning(f'Recording recovered, datetime: {(datetime_string)}') self._emit_event('stream_recording_recovered', timestamp) def _on_duration_lost(self, duration: float) -> None: - logger.info(f'Total duration lost: {(duration)}') + self._logger.warning(f'Total duration lost: ≈ {(duration)} s') self._emit_event('duration_lost', duration) def _emit_event(self, name: str, *args: Any, **kwds: Any) -> None: diff --git a/src/blrec/danmaku/combination.py b/src/blrec/danmaku/combination.py index 2409297..1ec8535 100644 --- a/src/blrec/danmaku/combination.py +++ b/src/blrec/danmaku/combination.py @@ -1,18 +1,12 @@ -import logging from typing import Iterable - -from .io import DanmakuReader, DanmakuWriter from .common import copy_damus +from .io import DanmakuReader, DanmakuWriter from .typing import TimebaseType - __all__ = 'TimebaseType', 'DanmakuCombinator' -logger = logging.getLogger(__name__) - - class DanmakuCombinator: def __init__( self, diff --git a/src/blrec/danmaku/concatenation.py b/src/blrec/danmaku/concatenation.py index dad69ac..da84261 100644 --- a/src/blrec/danmaku/concatenation.py +++ b/src/blrec/danmaku/concatenation.py @@ -1,13 +1,7 @@ -import logging from typing import Iterable - -from .io import DanmakuReader, DanmakuWriter from .common import copy_damus - - -logger = logging.getLogger(__name__) - +from .io import DanmakuReader, DanmakuWriter __all__ = 'DanmakuConcatenator' diff --git a/src/blrec/danmaku/io.py b/src/blrec/danmaku/io.py index c63c68d..7d7b9d5 100644 --- a/src/blrec/danmaku/io.py +++ b/src/blrec/danmaku/io.py @@ -2,7 +2,6 @@ from __future__ import annotations import asyncio import html -import logging import unicodedata from datetime import datetime, timedelta, timezone from typing import Any, AsyncIterator, Final, List @@ -24,9 +23,6 @@ from .typing import Element __all__ = 'DanmakuReader', 'DanmakuWriter' -logger = logging.getLogger(__name__) - - class DanmakuReader: # TODO rewrite def __init__(self, path: str) -> None: self._path = path diff --git a/src/blrec/data/webapp/548.e2df47ddad764d0b.js b/src/blrec/data/webapp/548.e2df47ddad764d0b.js new file mode 100644 index 0000000..8f06db5 --- /dev/null +++ b/src/blrec/data/webapp/548.e2df47ddad764d0b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkblrec=self.webpackChunkblrec||[]).push([[548],{2548:(ns,xe,c)=>{c.r(xe),c.d(xe,{SettingsModule:()=>_t});var p=c(6895),r=c(433),ge=c(5681),en=c(5655),nn=c(1971),l=c(6704),O=c(5635),U=c(1243),Oe=c(8213),G=c(8521),t=c(4650),ue=c(7570),on=c(3353),Ct=c(445);let sn=(()=>{class i{}return i.\u0275fac=function(e){return new(e||i)},i.\u0275mod=t.oAB({type:i}),i.\u0275inj=t.cJS({imports:[Ct.vT,p.ez,on.ud,ue.cg]}),i})();var zt=c(8e3),_=c(5156),Q=c(6616),lt=c(1102),Me=c(4383),ct=c(6287),D=c(655),E=c(3187),be=c(7579),ln=c(9770),ie=c(9646),cn=c(6451),gn=c(9751),un=c(1135),mn=c(5698),Pe=c(3900),gt=c(2722),ut=c(3303),Te=c(4788),u=c(3679);const V=["*"];function bn(i,n){1&i&&t.Hsn(0)}const Pn=["nz-list-item-actions",""];function Tn(i,n){}function wn(i,n){1&i&&t._UZ(0,"em",3)}function Fn(i,n){if(1&i&&(t.TgZ(0,"li"),t.YNc(1,Tn,0,0,"ng-template",1),t.YNc(2,wn,1,0,"em",2),t.qZA()),2&i){const e=n.$implicit,o=n.last;t.xp6(1),t.Q6J("ngTemplateOutlet",e),t.xp6(1),t.Q6J("ngIf",!o)}}function Sn(i,n){}const we=function(i,n){return{$implicit:i,index:n}};function yn(i,n){if(1&i&&(t.ynx(0),t.YNc(1,Sn,0,0,"ng-template",9),t.BQk()),2&i){const e=n.$implicit,o=n.index,a=t.oxw(2);t.xp6(1),t.Q6J("ngTemplateOutlet",a.nzRenderItem)("ngTemplateOutletContext",t.WLB(2,we,e,o))}}function An(i,n){if(1&i&&(t.TgZ(0,"div",7),t.YNc(1,yn,2,5,"ng-container",8),t.Hsn(2,4),t.qZA()),2&i){const e=t.oxw();t.xp6(1),t.Q6J("ngForOf",e.nzDataSource)}}function kn(i,n){if(1&i&&(t.ynx(0),t._uU(1),t.BQk()),2&i){const e=t.oxw(2);t.xp6(1),t.Oqu(e.nzHeader)}}function Dn(i,n){if(1&i&&(t.TgZ(0,"nz-list-header"),t.YNc(1,kn,2,1,"ng-container",10),t.qZA()),2&i){const e=t.oxw();t.xp6(1),t.Q6J("nzStringTemplateOutlet",e.nzHeader)}}function En(i,n){1&i&&t._UZ(0,"div"),2&i&&t.Udp("min-height",53,"px")}function Zn(i,n){}function Nn(i,n){if(1&i&&(t.TgZ(0,"div",13),t.YNc(1,Zn,0,0,"ng-template",9),t.qZA()),2&i){const e=n.$implicit,o=n.index,a=t.oxw(2);t.Q6J("nzSpan",a.nzGrid.span||null)("nzXs",a.nzGrid.xs||null)("nzSm",a.nzGrid.sm||null)("nzMd",a.nzGrid.md||null)("nzLg",a.nzGrid.lg||null)("nzXl",a.nzGrid.xl||null)("nzXXl",a.nzGrid.xxl||null),t.xp6(1),t.Q6J("ngTemplateOutlet",a.nzRenderItem)("ngTemplateOutletContext",t.WLB(9,we,e,o))}}function Bn(i,n){if(1&i&&(t.TgZ(0,"div",11),t.YNc(1,Nn,2,12,"div",12),t.qZA()),2&i){const e=t.oxw();t.Q6J("nzGutter",e.nzGrid.gutter||null),t.xp6(1),t.Q6J("ngForOf",e.nzDataSource)}}function Un(i,n){if(1&i&&t._UZ(0,"nz-list-empty",14),2&i){const e=t.oxw();t.Q6J("nzNoResult",e.nzNoResult)}}function In(i,n){if(1&i&&(t.ynx(0),t._uU(1),t.BQk()),2&i){const e=t.oxw(2);t.xp6(1),t.Oqu(e.nzFooter)}}function Jn(i,n){if(1&i&&(t.TgZ(0,"nz-list-footer"),t.YNc(1,In,2,1,"ng-container",10),t.qZA()),2&i){const e=t.oxw();t.xp6(1),t.Q6J("nzStringTemplateOutlet",e.nzFooter)}}function Qn(i,n){}function Vn(i,n){}function Ln(i,n){if(1&i&&(t.TgZ(0,"nz-list-pagination"),t.YNc(1,Vn,0,0,"ng-template",6),t.qZA()),2&i){const e=t.oxw();t.xp6(1),t.Q6J("ngTemplateOutlet",e.nzPagination)}}const qn=[[["nz-list-header"]],[["nz-list-footer"],["","nz-list-footer",""]],[["nz-list-load-more"],["","nz-list-load-more",""]],[["nz-list-pagination"],["","nz-list-pagination",""]],"*"],Yn=["nz-list-header","nz-list-footer, [nz-list-footer]","nz-list-load-more, [nz-list-load-more]","nz-list-pagination, [nz-list-pagination]","*"];function Wn(i,n){if(1&i&&t._UZ(0,"ul",6),2&i){const e=t.oxw(2);t.Q6J("nzActions",e.nzActions)}}function Rn(i,n){if(1&i&&(t.YNc(0,Wn,1,1,"ul",5),t.Hsn(1)),2&i){const e=t.oxw();t.Q6J("ngIf",e.nzActions&&e.nzActions.length>0)}}function Gn(i,n){if(1&i&&(t.ynx(0),t._uU(1),t.BQk()),2&i){const e=t.oxw(3);t.xp6(1),t.Oqu(e.nzContent)}}function Hn(i,n){if(1&i&&(t.ynx(0),t.YNc(1,Gn,2,1,"ng-container",8),t.BQk()),2&i){const e=t.oxw(2);t.xp6(1),t.Q6J("nzStringTemplateOutlet",e.nzContent)}}function $n(i,n){if(1&i&&(t.Hsn(0,1),t.Hsn(1,2),t.YNc(2,Hn,2,1,"ng-container",7)),2&i){const e=t.oxw();t.xp6(2),t.Q6J("ngIf",e.nzContent)}}function Kn(i,n){1&i&&t.Hsn(0,3)}function Xn(i,n){}function jn(i,n){}function ti(i,n){}function ei(i,n){}function ni(i,n){if(1&i&&(t.YNc(0,Xn,0,0,"ng-template",9),t.YNc(1,jn,0,0,"ng-template",9),t.YNc(2,ti,0,0,"ng-template",9),t.YNc(3,ei,0,0,"ng-template",9)),2&i){const e=t.oxw(),o=t.MAs(3),a=t.MAs(5),s=t.MAs(1);t.Q6J("ngTemplateOutlet",o),t.xp6(1),t.Q6J("ngTemplateOutlet",e.nzExtra),t.xp6(1),t.Q6J("ngTemplateOutlet",a),t.xp6(1),t.Q6J("ngTemplateOutlet",s)}}function ii(i,n){}function oi(i,n){}function ai(i,n){}function ri(i,n){if(1&i&&(t.TgZ(0,"nz-list-item-extra"),t.YNc(1,ai,0,0,"ng-template",9),t.qZA()),2&i){const e=t.oxw(2);t.xp6(1),t.Q6J("ngTemplateOutlet",e.nzExtra)}}function si(i,n){}function li(i,n){if(1&i&&(t.ynx(0),t.TgZ(1,"div",10),t.YNc(2,ii,0,0,"ng-template",9),t.YNc(3,oi,0,0,"ng-template",9),t.qZA(),t.YNc(4,ri,2,1,"nz-list-item-extra",7),t.YNc(5,si,0,0,"ng-template",9),t.BQk()),2&i){const e=t.oxw(),o=t.MAs(3),a=t.MAs(1),s=t.MAs(5);t.xp6(2),t.Q6J("ngTemplateOutlet",o),t.xp6(1),t.Q6J("ngTemplateOutlet",a),t.xp6(1),t.Q6J("ngIf",e.nzExtra),t.xp6(1),t.Q6J("ngTemplateOutlet",s)}}const ci=[[["nz-list-item-actions"],["","nz-list-item-actions",""]],[["nz-list-item-meta"],["","nz-list-item-meta",""]],"*",[["nz-list-item-extra"],["","nz-list-item-extra",""]]],gi=["nz-list-item-actions, [nz-list-item-actions]","nz-list-item-meta, [nz-list-item-meta]","*","nz-list-item-extra, [nz-list-item-extra]"];let de=(()=>{class i{}return i.\u0275fac=function(e){return new(e||i)},i.\u0275cmp=t.Xpm({type:i,selectors:[["nz-list-item-extra"],["","nz-list-item-extra",""]],hostAttrs:[1,"ant-list-item-extra"],exportAs:["nzListItemExtra"],ngContentSelectors:V,decls:1,vars:0,template:function(e,o){1&e&&(t.F$t(),t.Hsn(0))},encapsulation:2,changeDetection:0}),i})(),Se=(()=>{class i{}return i.\u0275fac=function(e){return new(e||i)},i.\u0275cmp=t.Xpm({type:i,selectors:[["nz-list-item-action"]],viewQuery:function(e,o){if(1&e&&t.Gf(t.Rgc,5),2&e){let a;t.iGM(a=t.CRH())&&(o.templateRef=a.first)}},exportAs:["nzListItemAction"],ngContentSelectors:V,decls:1,vars:0,template:function(e,o){1&e&&(t.F$t(),t.YNc(0,bn,1,0,"ng-template"))},encapsulation:2,changeDetection:0}),i})(),ye=(()=>{class i{constructor(e,o,a){this.ngZone=e,this.nzActions=[],this.actions=[],this.inputActionChanges$=new be.x,this.contentChildrenChanges$=(0,ln.P)(()=>this.nzListItemActions?(0,ie.of)(null):this.ngZone.onStable.pipe((0,mn.q)(1),this.enterZone(),(0,Pe.w)(()=>this.contentChildrenChanges$))),(0,cn.T)(this.contentChildrenChanges$,this.inputActionChanges$).pipe((0,gt.R)(a)).subscribe(()=>{this.actions=this.nzActions.length?this.nzActions:this.nzListItemActions.map(s=>s.templateRef),o.detectChanges()})}ngOnChanges(){this.inputActionChanges$.next(null)}enterZone(){return e=>new gn.y(o=>e.subscribe({next:a=>this.ngZone.run(()=>o.next(a))}))}}return i.\u0275fac=function(e){return new(e||i)(t.Y36(t.R0b),t.Y36(t.sBO),t.Y36(ut.kn))},i.\u0275cmp=t.Xpm({type:i,selectors:[["ul","nz-list-item-actions",""]],contentQueries:function(e,o,a){if(1&e&&t.Suo(a,Se,4),2&e){let s;t.iGM(s=t.CRH())&&(o.nzListItemActions=s)}},hostAttrs:[1,"ant-list-item-action"],inputs:{nzActions:"nzActions"},exportAs:["nzListItemActions"],features:[t._Bn([ut.kn]),t.TTD],attrs:Pn,decls:1,vars:1,consts:[[4,"ngFor","ngForOf"],[3,"ngTemplateOutlet"],["class","ant-list-item-action-split",4,"ngIf"],[1,"ant-list-item-action-split"]],template:function(e,o){1&e&&t.YNc(0,Fn,3,2,"li",0),2&e&&t.Q6J("ngForOf",o.actions)},dependencies:[p.sg,p.O5,p.tP],encapsulation:2,changeDetection:0}),i})(),he=(()=>{class i{}return i.\u0275fac=function(e){return new(e||i)},i.\u0275cmp=t.Xpm({type:i,selectors:[["nz-list-empty"]],hostAttrs:[1,"ant-list-empty-text"],inputs:{nzNoResult:"nzNoResult"},exportAs:["nzListHeader"],decls:1,vars:2,consts:[[3,"nzComponentName","specificContent"]],template:function(e,o){1&e&&t._UZ(0,"nz-embed-empty",0),2&e&&t.Q6J("nzComponentName","list")("specificContent",o.nzNoResult)},dependencies:[Te.gB],encapsulation:2,changeDetection:0}),i})(),_e=(()=>{class i{}return i.\u0275fac=function(e){return new(e||i)},i.\u0275cmp=t.Xpm({type:i,selectors:[["nz-list-header"]],hostAttrs:[1,"ant-list-header"],exportAs:["nzListHeader"],ngContentSelectors:V,decls:1,vars:0,template:function(e,o){1&e&&(t.F$t(),t.Hsn(0))},encapsulation:2,changeDetection:0}),i})(),fe=(()=>{class i{}return i.\u0275fac=function(e){return new(e||i)},i.\u0275cmp=t.Xpm({type:i,selectors:[["nz-list-footer"]],hostAttrs:[1,"ant-list-footer"],exportAs:["nzListFooter"],ngContentSelectors:V,decls:1,vars:0,template:function(e,o){1&e&&(t.F$t(),t.Hsn(0))},encapsulation:2,changeDetection:0}),i})(),Ce=(()=>{class i{}return i.\u0275fac=function(e){return new(e||i)},i.\u0275cmp=t.Xpm({type:i,selectors:[["nz-list-pagination"]],hostAttrs:[1,"ant-list-pagination"],exportAs:["nzListPagination"],ngContentSelectors:V,decls:1,vars:0,template:function(e,o){1&e&&(t.F$t(),t.Hsn(0))},encapsulation:2,changeDetection:0}),i})(),Ae=(()=>{class i{}return i.\u0275fac=function(e){return new(e||i)},i.\u0275dir=t.lG2({type:i,selectors:[["nz-list-load-more"]],exportAs:["nzListLoadMoreDirective"]}),i})(),ve=(()=>{class i{constructor(e){this.directionality=e,this.nzBordered=!1,this.nzGrid="",this.nzItemLayout="horizontal",this.nzRenderItem=null,this.nzLoading=!1,this.nzLoadMore=null,this.nzSize="default",this.nzSplit=!0,this.hasSomethingAfterLastItem=!1,this.dir="ltr",this.itemLayoutNotifySource=new un.X(this.nzItemLayout),this.destroy$=new be.x}get itemLayoutNotify$(){return this.itemLayoutNotifySource.asObservable()}ngOnInit(){this.dir=this.directionality.value,this.directionality.change?.pipe((0,gt.R)(this.destroy$)).subscribe(e=>{this.dir=e})}getSomethingAfterLastItem(){return!!(this.nzLoadMore||this.nzPagination||this.nzFooter||this.nzListFooterComponent||this.nzListPaginationComponent||this.nzListLoadMoreDirective)}ngOnChanges(e){e.nzItemLayout&&this.itemLayoutNotifySource.next(this.nzItemLayout)}ngOnDestroy(){this.itemLayoutNotifySource.unsubscribe(),this.destroy$.next(),this.destroy$.complete()}ngAfterContentInit(){this.hasSomethingAfterLastItem=this.getSomethingAfterLastItem()}}return i.\u0275fac=function(e){return new(e||i)(t.Y36(Ct.Is,8))},i.\u0275cmp=t.Xpm({type:i,selectors:[["nz-list"],["","nz-list",""]],contentQueries:function(e,o,a){if(1&e&&(t.Suo(a,fe,5),t.Suo(a,Ce,5),t.Suo(a,Ae,5)),2&e){let s;t.iGM(s=t.CRH())&&(o.nzListFooterComponent=s.first),t.iGM(s=t.CRH())&&(o.nzListPaginationComponent=s.first),t.iGM(s=t.CRH())&&(o.nzListLoadMoreDirective=s.first)}},hostAttrs:[1,"ant-list"],hostVars:16,hostBindings:function(e,o){2&e&&t.ekj("ant-list-rtl","rtl"===o.dir)("ant-list-vertical","vertical"===o.nzItemLayout)("ant-list-lg","large"===o.nzSize)("ant-list-sm","small"===o.nzSize)("ant-list-split",o.nzSplit)("ant-list-bordered",o.nzBordered)("ant-list-loading",o.nzLoading)("ant-list-something-after-last-item",o.hasSomethingAfterLastItem)},inputs:{nzDataSource:"nzDataSource",nzBordered:"nzBordered",nzGrid:"nzGrid",nzHeader:"nzHeader",nzFooter:"nzFooter",nzItemLayout:"nzItemLayout",nzRenderItem:"nzRenderItem",nzLoading:"nzLoading",nzLoadMore:"nzLoadMore",nzPagination:"nzPagination",nzSize:"nzSize",nzSplit:"nzSplit",nzNoResult:"nzNoResult"},exportAs:["nzList"],features:[t.TTD],ngContentSelectors:Yn,decls:15,vars:9,consts:[["itemsTpl",""],[4,"ngIf"],[3,"nzSpinning"],[3,"min-height",4,"ngIf"],["nz-row","",3,"nzGutter",4,"ngIf","ngIfElse"],[3,"nzNoResult",4,"ngIf"],[3,"ngTemplateOutlet"],[1,"ant-list-items"],[4,"ngFor","ngForOf"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[4,"nzStringTemplateOutlet"],["nz-row","",3,"nzGutter"],["nz-col","",3,"nzSpan","nzXs","nzSm","nzMd","nzLg","nzXl","nzXXl",4,"ngFor","ngForOf"],["nz-col","",3,"nzSpan","nzXs","nzSm","nzMd","nzLg","nzXl","nzXXl"],[3,"nzNoResult"]],template:function(e,o){if(1&e&&(t.F$t(qn),t.YNc(0,An,3,1,"ng-template",null,0,t.W1O),t.YNc(2,Dn,2,1,"nz-list-header",1),t.Hsn(3),t.TgZ(4,"nz-spin",2),t.ynx(5),t.YNc(6,En,1,2,"div",3),t.YNc(7,Bn,2,2,"div",4),t.YNc(8,Un,1,1,"nz-list-empty",5),t.BQk(),t.qZA(),t.YNc(9,Jn,2,1,"nz-list-footer",1),t.Hsn(10,1),t.YNc(11,Qn,0,0,"ng-template",6),t.Hsn(12,2),t.YNc(13,Ln,2,1,"nz-list-pagination",1),t.Hsn(14,3)),2&e){const a=t.MAs(1);t.xp6(2),t.Q6J("ngIf",o.nzHeader),t.xp6(2),t.Q6J("nzSpinning",o.nzLoading),t.xp6(2),t.Q6J("ngIf",o.nzLoading&&o.nzDataSource&&0===o.nzDataSource.length),t.xp6(1),t.Q6J("ngIf",o.nzGrid&&o.nzDataSource)("ngIfElse",a),t.xp6(1),t.Q6J("ngIf",!o.nzLoading&&o.nzDataSource&&0===o.nzDataSource.length),t.xp6(1),t.Q6J("ngIf",o.nzFooter),t.xp6(2),t.Q6J("ngTemplateOutlet",o.nzLoadMore),t.xp6(2),t.Q6J("ngIf",o.nzPagination)}},dependencies:[p.sg,p.O5,p.tP,ge.W,u.t3,u.SK,ct.f,_e,fe,Ce,he],encapsulation:2,changeDetection:0}),(0,D.gn)([(0,E.yF)()],i.prototype,"nzBordered",void 0),(0,D.gn)([(0,E.yF)()],i.prototype,"nzLoading",void 0),(0,D.gn)([(0,E.yF)()],i.prototype,"nzSplit",void 0),i})(),ke=(()=>{class i{constructor(e,o,a,s){this.parentComp=a,this.cdr=s,this.nzActions=[],this.nzExtra=null,this.nzNoFlex=!1,o.addClass(e.nativeElement,"ant-list-item")}get isVerticalAndExtra(){return!("vertical"!==this.itemLayout||!this.listItemExtraDirective&&!this.nzExtra)}ngAfterViewInit(){this.itemLayout$=this.parentComp.itemLayoutNotify$.subscribe(e=>{this.itemLayout=e,this.cdr.detectChanges()})}ngOnDestroy(){this.itemLayout$&&this.itemLayout$.unsubscribe()}}return i.\u0275fac=function(e){return new(e||i)(t.Y36(t.SBq),t.Y36(t.Qsj),t.Y36(ve),t.Y36(t.sBO))},i.\u0275cmp=t.Xpm({type:i,selectors:[["nz-list-item"],["","nz-list-item",""]],contentQueries:function(e,o,a){if(1&e&&t.Suo(a,de,5),2&e){let s;t.iGM(s=t.CRH())&&(o.listItemExtraDirective=s.first)}},hostVars:2,hostBindings:function(e,o){2&e&&t.ekj("ant-list-item-no-flex",o.nzNoFlex)},inputs:{nzActions:"nzActions",nzContent:"nzContent",nzExtra:"nzExtra",nzNoFlex:"nzNoFlex"},exportAs:["nzListItem"],ngContentSelectors:gi,decls:9,vars:2,consts:[["actionsTpl",""],["contentTpl",""],["extraTpl",""],["simpleTpl",""],[4,"ngIf","ngIfElse"],["nz-list-item-actions","",3,"nzActions",4,"ngIf"],["nz-list-item-actions","",3,"nzActions"],[4,"ngIf"],[4,"nzStringTemplateOutlet"],[3,"ngTemplateOutlet"],[1,"ant-list-item-main"]],template:function(e,o){if(1&e&&(t.F$t(ci),t.YNc(0,Rn,2,1,"ng-template",null,0,t.W1O),t.YNc(2,$n,3,1,"ng-template",null,1,t.W1O),t.YNc(4,Kn,1,0,"ng-template",null,2,t.W1O),t.YNc(6,ni,4,4,"ng-template",null,3,t.W1O),t.YNc(8,li,6,4,"ng-container",4)),2&e){const a=t.MAs(7);t.xp6(8),t.Q6J("ngIf",o.isVerticalAndExtra)("ngIfElse",a)}},dependencies:[p.O5,p.tP,ct.f,ye,de],encapsulation:2,changeDetection:0}),(0,D.gn)([(0,E.yF)()],i.prototype,"nzNoFlex",void 0),i})(),pi=(()=>{class i{}return i.\u0275fac=function(e){return new(e||i)},i.\u0275mod=t.oAB({type:i}),i.\u0275inj=t.cJS({imports:[Ct.vT,p.ez,ge.j,u.Jb,Me.Rt,ct.T,Te.Xo]}),i})();var oe=c(9562),di=c(2577),H=c(6675),hi=c(4968),ae=c(9300),_i=c(2539),mt=c(2536),De=c(4903);const Ee=["*"],fi=["collapseHeader"];function Ci(i,n){if(1&i&&(t.ynx(0),t._UZ(1,"span",7),t.BQk()),2&i){const e=n.$implicit,o=t.oxw(2);t.xp6(1),t.Q6J("nzType",e||"right")("nzRotate",o.nzActive?90:0)}}function vi(i,n){if(1&i&&(t.TgZ(0,"div"),t.YNc(1,Ci,2,2,"ng-container",3),t.qZA()),2&i){const e=t.oxw();t.xp6(1),t.Q6J("nzStringTemplateOutlet",e.nzExpandedIcon)}}function zi(i,n){if(1&i&&(t.ynx(0),t._uU(1),t.BQk()),2&i){const e=t.oxw();t.xp6(1),t.Oqu(e.nzHeader)}}function xi(i,n){if(1&i&&(t.ynx(0),t._uU(1),t.BQk()),2&i){const e=t.oxw(2);t.xp6(1),t.Oqu(e.nzExtra)}}function Oi(i,n){if(1&i&&(t.TgZ(0,"div",8),t.YNc(1,xi,2,1,"ng-container",3),t.qZA()),2&i){const e=t.oxw();t.xp6(1),t.Q6J("nzStringTemplateOutlet",e.nzExtra)}}const Ze="collapse";let Ne=(()=>{class i{constructor(e,o,a,s){this.nzConfigService=e,this.cdr=o,this.directionality=a,this.destroy$=s,this._nzModuleName=Ze,this.nzAccordion=!1,this.nzBordered=!0,this.nzGhost=!1,this.nzExpandIconPosition="left",this.dir="ltr",this.listOfNzCollapsePanelComponent=[],this.nzConfigService.getConfigChangeEventForComponent(Ze).pipe((0,gt.R)(this.destroy$)).subscribe(()=>{this.cdr.markForCheck()})}ngOnInit(){this.directionality.change?.pipe((0,gt.R)(this.destroy$)).subscribe(e=>{this.dir=e,this.cdr.detectChanges()}),this.dir=this.directionality.value}addPanel(e){this.listOfNzCollapsePanelComponent.push(e)}removePanel(e){this.listOfNzCollapsePanelComponent.splice(this.listOfNzCollapsePanelComponent.indexOf(e),1)}click(e){this.nzAccordion&&!e.nzActive&&this.listOfNzCollapsePanelComponent.filter(o=>o!==e).forEach(o=>{o.nzActive&&(o.nzActive=!1,o.nzActiveChange.emit(o.nzActive),o.markForCheck())}),e.nzActive=!e.nzActive,e.nzActiveChange.emit(e.nzActive)}}return i.\u0275fac=function(e){return new(e||i)(t.Y36(mt.jY),t.Y36(t.sBO),t.Y36(Ct.Is,8),t.Y36(ut.kn))},i.\u0275cmp=t.Xpm({type:i,selectors:[["nz-collapse"]],hostAttrs:[1,"ant-collapse"],hostVars:10,hostBindings:function(e,o){2&e&&t.ekj("ant-collapse-icon-position-left","left"===o.nzExpandIconPosition)("ant-collapse-icon-position-right","right"===o.nzExpandIconPosition)("ant-collapse-ghost",o.nzGhost)("ant-collapse-borderless",!o.nzBordered)("ant-collapse-rtl","rtl"===o.dir)},inputs:{nzAccordion:"nzAccordion",nzBordered:"nzBordered",nzGhost:"nzGhost",nzExpandIconPosition:"nzExpandIconPosition"},exportAs:["nzCollapse"],features:[t._Bn([ut.kn])],ngContentSelectors:Ee,decls:1,vars:0,template:function(e,o){1&e&&(t.F$t(),t.Hsn(0))},encapsulation:2,changeDetection:0}),(0,D.gn)([(0,mt.oS)(),(0,E.yF)()],i.prototype,"nzAccordion",void 0),(0,D.gn)([(0,mt.oS)(),(0,E.yF)()],i.prototype,"nzBordered",void 0),(0,D.gn)([(0,mt.oS)(),(0,E.yF)()],i.prototype,"nzGhost",void 0),i})();const Be="collapsePanel";let Mi=(()=>{class i{constructor(e,o,a,s,g,m){this.nzConfigService=e,this.ngZone=o,this.cdr=a,this.destroy$=s,this.nzCollapseComponent=g,this.noAnimation=m,this._nzModuleName=Be,this.nzActive=!1,this.nzDisabled=!1,this.nzShowArrow=!0,this.nzActiveChange=new t.vpe,this.nzConfigService.getConfigChangeEventForComponent(Be).pipe((0,gt.R)(this.destroy$)).subscribe(()=>{this.cdr.markForCheck()})}markForCheck(){this.cdr.markForCheck()}ngOnInit(){this.nzCollapseComponent.addPanel(this),this.ngZone.runOutsideAngular(()=>(0,hi.R)(this.collapseHeader.nativeElement,"click").pipe((0,ae.h)(()=>!this.nzDisabled),(0,gt.R)(this.destroy$)).subscribe(()=>{this.ngZone.run(()=>{this.nzCollapseComponent.click(this),this.cdr.markForCheck()})}))}ngOnDestroy(){this.nzCollapseComponent.removePanel(this)}}return i.\u0275fac=function(e){return new(e||i)(t.Y36(mt.jY),t.Y36(t.R0b),t.Y36(t.sBO),t.Y36(ut.kn),t.Y36(Ne,1),t.Y36(De.P,8))},i.\u0275cmp=t.Xpm({type:i,selectors:[["nz-collapse-panel"]],viewQuery:function(e,o){if(1&e&&t.Gf(fi,7),2&e){let a;t.iGM(a=t.CRH())&&(o.collapseHeader=a.first)}},hostAttrs:[1,"ant-collapse-item"],hostVars:6,hostBindings:function(e,o){2&e&&t.ekj("ant-collapse-no-arrow",!o.nzShowArrow)("ant-collapse-item-active",o.nzActive)("ant-collapse-item-disabled",o.nzDisabled)},inputs:{nzActive:"nzActive",nzDisabled:"nzDisabled",nzShowArrow:"nzShowArrow",nzExtra:"nzExtra",nzHeader:"nzHeader",nzExpandedIcon:"nzExpandedIcon"},outputs:{nzActiveChange:"nzActiveChange"},exportAs:["nzCollapsePanel"],features:[t._Bn([ut.kn])],ngContentSelectors:Ee,decls:8,vars:8,consts:[["role","button",1,"ant-collapse-header"],["collapseHeader",""],[4,"ngIf"],[4,"nzStringTemplateOutlet"],["class","ant-collapse-extra",4,"ngIf"],[1,"ant-collapse-content"],[1,"ant-collapse-content-box"],["nz-icon","",1,"ant-collapse-arrow",3,"nzType","nzRotate"],[1,"ant-collapse-extra"]],template:function(e,o){1&e&&(t.F$t(),t.TgZ(0,"div",0,1),t.YNc(2,vi,2,1,"div",2),t.YNc(3,zi,2,1,"ng-container",3),t.YNc(4,Oi,2,1,"div",4),t.qZA(),t.TgZ(5,"div",5)(6,"div",6),t.Hsn(7),t.qZA()()),2&e&&(t.uIk("aria-expanded",o.nzActive),t.xp6(2),t.Q6J("ngIf",o.nzShowArrow),t.xp6(1),t.Q6J("nzStringTemplateOutlet",o.nzHeader),t.xp6(1),t.Q6J("ngIf",o.nzExtra),t.xp6(1),t.ekj("ant-collapse-content-active",o.nzActive),t.Q6J("@.disabled",!(null==o.noAnimation||!o.noAnimation.nzNoAnimation))("@collapseMotion",o.nzActive?"expanded":"hidden"))},dependencies:[p.O5,lt.Ls,ct.f],encapsulation:2,data:{animation:[_i.J_]},changeDetection:0}),(0,D.gn)([(0,E.yF)()],i.prototype,"nzActive",void 0),(0,D.gn)([(0,E.yF)()],i.prototype,"nzDisabled",void 0),(0,D.gn)([(0,mt.oS)(),(0,E.yF)()],i.prototype,"nzShowArrow",void 0),i})(),bi=(()=>{class i{}return i.\u0275fac=function(e){return new(e||i)},i.\u0275mod=t.oAB({type:i}),i.\u0275inj=t.cJS({imports:[Ct.vT,p.ez,lt.PV,ct.T,De.g]}),i})();var Pi=c(4466),w=c(262),F=c(4007),Z=c(324),L=c(387),S=c(5136);class ${constructor(n,e,o){this.logger=n,this.notification=e,this.settingService=o}resolve(n,e){return this.settingService.getSettings(["output","logging","biliApi","header","danmaku","recorder","postprocessing","space"]).pipe((0,F.X)(3,300),(0,w.K)(o=>{throw this.logger.error("Failed to get settings:",o),this.notification.error("\u83b7\u53d6\u8bbe\u7f6e\u51fa\u9519",o.message,{nzDuration:0}),o}))}}$.\u0275fac=function(n){return new(n||$)(t.LFG(Z.Kf),t.LFG(L.zb),t.LFG(S.R))},$.\u0275prov=t.Yz7({token:$,factory:$.\u0275fac});var T=c(4004);class K{constructor(n,e,o){this.logger=n,this.notification=e,this.settingService=o}resolve(n,e){return this.settingService.getSettings(["emailNotification"]).pipe((0,T.U)(o=>o.emailNotification),(0,F.X)(3,300),(0,w.K)(o=>{throw this.logger.error("Failed to get email notification settings:",o),this.notification.error("\u83b7\u53d6\u90ae\u4ef6\u901a\u77e5\u8bbe\u7f6e\u51fa\u9519",o.message,{nzDuration:0}),o}))}}K.\u0275fac=function(n){return new(n||K)(t.LFG(Z.Kf),t.LFG(L.zb),t.LFG(S.R))},K.\u0275prov=t.Yz7({token:K,factory:K.\u0275fac});class X{constructor(n,e,o){this.logger=n,this.notification=e,this.settingService=o}resolve(n,e){return this.settingService.getSettings(["serverchanNotification"]).pipe((0,T.U)(o=>o.serverchanNotification),(0,F.X)(3,300),(0,w.K)(o=>{throw this.logger.error("Failed to get ServerChan notification settings:",o),this.notification.error("\u83b7\u53d6 ServerChan \u901a\u77e5\u8bbe\u7f6e\u51fa\u9519",o.message,{nzDuration:0}),o}))}}X.\u0275fac=function(n){return new(n||X)(t.LFG(Z.Kf),t.LFG(L.zb),t.LFG(S.R))},X.\u0275prov=t.Yz7({token:X,factory:X.\u0275fac});class j{constructor(n,e,o){this.logger=n,this.notification=e,this.settingService=o}resolve(n,e){return this.settingService.getSettings(["pushdeerNotification"]).pipe((0,T.U)(o=>o.pushdeerNotification),(0,F.X)(3,300),(0,w.K)(o=>{throw this.logger.error("Failed to get PushDeer notification settings:",o),this.notification.error("\u83b7\u53d6 pushdeer \u901a\u77e5\u8bbe\u7f6e\u51fa\u9519",o.message,{nzDuration:0}),o}))}}j.\u0275fac=function(n){return new(n||j)(t.LFG(Z.Kf),t.LFG(L.zb),t.LFG(S.R))},j.\u0275prov=t.Yz7({token:j,factory:j.\u0275fac});class tt{constructor(n,e,o){this.logger=n,this.notification=e,this.settingService=o}resolve(n,e){return this.settingService.getSettings(["pushplusNotification"]).pipe((0,T.U)(o=>o.pushplusNotification),(0,F.X)(3,300),(0,w.K)(o=>{throw this.logger.error("Failed to get pushplus notification settings:",o),this.notification.error("\u83b7\u53d6 pushplus \u901a\u77e5\u8bbe\u7f6e\u51fa\u9519",o.message,{nzDuration:0}),o}))}}tt.\u0275fac=function(n){return new(n||tt)(t.LFG(Z.Kf),t.LFG(L.zb),t.LFG(S.R))},tt.\u0275prov=t.Yz7({token:tt,factory:tt.\u0275fac});class et{constructor(n,e,o){this.logger=n,this.notification=e,this.settingService=o}resolve(n,e){return this.settingService.getSettings(["telegramNotification"]).pipe((0,T.U)(o=>o.telegramNotification),(0,F.X)(3,300),(0,w.K)(o=>{throw this.logger.error("Failed to get telegram notification settings:",o),this.notification.error("\u83b7\u53d6 telegram \u901a\u77e5\u8bbe\u7f6e\u51fa\u9519",o.message,{nzDuration:0}),o}))}}et.\u0275fac=function(n){return new(n||et)(t.LFG(Z.Kf),t.LFG(L.zb),t.LFG(S.R))},et.\u0275prov=t.Yz7({token:et,factory:et.\u0275fac});class nt{constructor(n,e,o){this.logger=n,this.notification=e,this.settingService=o}resolve(n,e){return this.settingService.getSettings(["webhooks"]).pipe((0,T.U)(o=>o.webhooks),(0,F.X)(3,300),(0,w.K)(o=>{throw this.logger.error("Failed to get webhook settings:",o),this.notification.error("\u83b7\u53d6 Webhook \u8bbe\u7f6e\u51fa\u9519",o.message,{nzDuration:0}),o}))}}nt.\u0275fac=function(n){return new(n||nt)(t.LFG(Z.Kf),t.LFG(L.zb),t.LFG(S.R))},nt.\u0275prov=t.Yz7({token:nt,factory:nt.\u0275fac});var v=c(6582);class it{constructor(n,e,o){this.logger=n,this.notification=e,this.settingService=o}resolve(n,e){return this.settingService.getSettings(["barkNotification"]).pipe((0,T.U)(o=>o.barkNotification),(0,F.X)(3,300),(0,w.K)(o=>{throw this.logger.error("Failed to get bark notification settings:",o),this.notification.error("\u83b7\u53d6 bark \u901a\u77e5\u8bbe\u7f6e\u51fa\u9519",o.message,{nzDuration:0}),o}))}}it.\u0275fac=function(n){return new(n||it)(t.LFG(Z.Kf),t.LFG(L.zb),t.LFG(S.R))},it.\u0275prov=t.Yz7({token:it,factory:it.\u0275fac});var Ue=c(5026),Ti=c(5363),wi=c(4986),Ie=c(4704),b=c(2340);const x="RouterScrollService",Je="defaultViewport",Qe="customViewport";class pt{constructor(n,e,o,a){this.router=n,this.activatedRoute=e,this.viewportScroller=o,this.logger=a,this.addQueue=[],this.addBeforeNavigationQueue=[],this.removeQueue=[],this.routeStrategies=[],this.scrollDefaultViewport=!0,this.customViewportToScroll=null,b.N.traceRouterScrolling&&this.logger.trace(`${x}:: constructor`),b.N.traceRouterScrolling&&this.logger.trace(`${x}:: Subscribing to router events`);const s=this.router.events.pipe((0,ae.h)(g=>g instanceof v.OD||g instanceof v.m2),(0,T.U)(g=>g),(0,Ue.R)((g,m)=>{b.N.traceRouterScrolling&&this.logger.trace(`${x}:: Updating the known scroll positions`);const h={...g.positions};return m instanceof v.OD&&this.scrollDefaultViewport&&(b.N.traceRouterScrolling&&this.logger.trace(`${x}:: Storing the scroll position of the default viewport`),h[`${m.id}-${Je}`]=this.viewportScroller.getScrollPosition()),m instanceof v.OD&&this.customViewportToScroll&&(b.N.traceRouterScrolling&&this.logger.trace(`${x}:: Storing the scroll position of the custom viewport`),h[`${m.id}-${Qe}`]=this.customViewportToScroll.scrollTop),{event:m,positions:h,trigger:m instanceof v.OD?m.navigationTrigger:g.trigger,idToRestore:m instanceof v.OD&&m.restoredState&&m.restoredState.navigationId+1||g.idToRestore,routeData:this.activatedRoute.firstChild?.routeConfig?.data}},{event:{},positions:{},idToRestore:-1}),(0,ae.h)(g=>!!g.trigger),(0,Ti.Q)(wi.z));this.scrollPositionRestorationSubscription=s.subscribe(g=>{const m=this.routeStrategies.find(ft=>g.event.url.indexOf(ft.partialRoute)>-1),h=m&&m.behaviour===Ie.g.KEEP_POSITION||!1,k=g.routeData&&g.routeData.scrollBehavior&&g.routeData.scrollBehavior===Ie.g.KEEP_POSITION||!1,J=h||k;if(g.event instanceof v.m2){this.processRemoveQueue(this.removeQueue);const ft=g.trigger&&"imperative"===g.trigger||!1,ce=!J||ft;b.N.traceRouterScrolling&&(this.logger.trace(`${x}:: Existing strategy with keep position behavior? `,h),this.logger.trace(`${x}:: Route data with keep position behavior? `,k),this.logger.trace(`${x}:: Imperative trigger? `,ft),this.logger.debug(`${x}:: Should scroll? `,ce)),ce?(this.scrollDefaultViewport&&(b.N.traceRouterScrolling&&this.logger.debug(`${x}:: Scrolling the default viewport`),this.viewportScroller.scrollToPosition([0,0])),this.customViewportToScroll&&(b.N.traceRouterScrolling&&this.logger.debug(`${x}:: Scrolling a custom viewport: `,this.customViewportToScroll),this.customViewportToScroll.scrollTop=0)):(b.N.traceRouterScrolling&&this.logger.debug(`${x}:: Not scrolling`),this.scrollDefaultViewport&&this.viewportScroller.scrollToPosition(g.positions[`${g.idToRestore}-${Je}`]),this.customViewportToScroll&&(this.customViewportToScroll.scrollTop=g.positions[`${g.idToRestore}-${Qe}`])),this.processRemoveQueue(this.addBeforeNavigationQueue.map(es=>es.partialRoute),!0),this.processAddQueue(this.addQueue),this.addQueue=[],this.removeQueue=[],this.addBeforeNavigationQueue=[]}else this.processAddQueue(this.addBeforeNavigationQueue)})}addStrategyOnceBeforeNavigationForPartialRoute(n,e){b.N.traceRouterScrolling&&this.logger.trace(`${x}:: Adding a strategy once for before navigation towards [${n}]: `,e),this.addBeforeNavigationQueue.push({partialRoute:n,behaviour:e,onceBeforeNavigation:!0})}addStrategyForPartialRoute(n,e){b.N.traceRouterScrolling&&this.logger.trace(`${x}:: Adding a strategy for partial route: [${n}]`,e),this.addQueue.push({partialRoute:n,behaviour:e})}removeStrategyForPartialRoute(n){b.N.traceRouterScrolling&&this.logger.trace(`${x}:: Removing strategory for: [${n}]: `),this.removeQueue.push(n)}setCustomViewportToScroll(n){b.N.traceRouterScrolling&&this.logger.trace(`${x}:: Setting a custom viewport to scroll: `,n),this.customViewportToScroll=n}disableScrollDefaultViewport(){b.N.traceRouterScrolling&&this.logger.trace(`${x}:: Disabling scrolling the default viewport`),this.scrollDefaultViewport=!1}enableScrollDefaultViewPort(){b.N.traceRouterScrolling&&this.logger.trace(`${x}:: Enabling scrolling the default viewport`),this.scrollDefaultViewport=!0}processAddQueue(n){for(const e of n)-1===this.routeStrategyPosition(e.partialRoute)&&this.routeStrategies.push(e)}processRemoveQueue(n,e=!1){for(const o of n){const a=this.routeStrategyPosition(o);!e&&a>-1&&this.routeStrategies[a].onceBeforeNavigation||a>-1&&this.routeStrategies.splice(a,1)}}routeStrategyPosition(n){return this.routeStrategies.map(e=>e.partialRoute).indexOf(n)}ngOnDestroy(){b.N.traceRouterScrolling&&this.logger.trace(`${x}:: ngOnDestroy`),this.scrollPositionRestorationSubscription&&this.scrollPositionRestorationSubscription.unsubscribe()}}pt.\u0275fac=function(n){return new(n||pt)(t.LFG(v.F0),t.LFG(v.gz),t.LFG(p.EM),t.LFG(Z.Kf))},pt.\u0275prov=t.Yz7({token:pt,factory:pt.\u0275fac,providedIn:"root"});var q=c(4670),Fi=c(3496),Si=c(1149),yi=c(7242);const M=function Ai(i,n){var e={};return n=(0,yi.Z)(n,3),(0,Si.Z)(i,function(o,a,s){(0,Fi.Z)(e,a,n(o,a,s))}),e};var re=c(8505),ki=c(4884),Di=c(4116),Ve=c(4825),Le=c(4177),qe=c(8706),Ei=c(5202),Zi=c(1986),Ni=c(7583),Ji=Object.prototype.hasOwnProperty;var Li=c(1854),qi=c(2134),se=c(9651);function P(i){const n="result"in i;return M(i.diff,()=>n)}class z{constructor(n,e){this.message=n,this.settingService=e}syncSettings(n,e,o,a=!0){return o.pipe((0,Ue.R)(([,s],g)=>[s,g,(0,qi.e5)(g,s,a)],[e,e,{}]),(0,ae.h)(([,,s])=>!function Qi(i){if(null==i)return!0;if((0,qe.Z)(i)&&((0,Le.Z)(i)||"string"==typeof i||"function"==typeof i.splice||(0,Ei.Z)(i)||(0,Ni.Z)(i)||(0,Ve.Z)(i)))return!i.length;var n=(0,Di.Z)(i);if("[object Map]"==n||"[object Set]"==n)return!i.size;if((0,Zi.Z)(i))return!(0,ki.Z)(i).length;for(var e in i)if(Ji.call(i,e))return!1;return!0}(s)),(0,Pe.w)(([s,g,m])=>this.settingService.changeSettings({[n]:m}).pipe((0,F.X)(3,300),(0,re.b)(h=>{console.assert((0,Li.Z)(h[n],g),"result settings should equal current settings",{curr:g,result:h[n]})},h=>{this.message.error(`\u8bbe\u7f6e\u51fa\u9519: ${h.message}`)}),(0,T.U)(h=>({prev:s,curr:g,diff:m,result:h[n]})),(0,w.K)(h=>(0,ie.of)({prev:s,curr:g,diff:m,error:h})))),(0,re.b)(s=>console.debug(`${n} settings sync detail:`,s)))}}z.\u0275fac=function(n){return new(n||z)(t.LFG(se.dD),t.LFG(S.R))},z.\u0275prov=t.Yz7({token:z,factory:z.\u0275fac,providedIn:"root"});var d=c(4960);class y{get actionable(){return this.directive?.valueAccessor instanceof U.i}constructor(){}onClick(n){n.target===n.currentTarget&&(n.preventDefault(),n.stopPropagation(),this.directive?.valueAccessor instanceof U.i&&this.directive.control.setValue(!this.directive.control.value))}}y.\u0275fac=function(n){return new(n||y)},y.\u0275dir=t.lG2({type:y,selectors:[["","appSwitchActionable",""]],contentQueries:function(n,e,o){if(1&n&&t.Suo(o,r.u,5),2&n){let a;t.iGM(a=t.CRH())&&(e.directive=a.first)}},hostVars:2,hostBindings:function(n,e){1&n&&t.NdJ("click",function(a){return e.onClick(a)}),2&n&&t.ekj("actionable",e.actionable)}});class xt{constructor(n,e,o){this.changeDetector=e,this.settingsSyncService=o,this.syncFailedWarningTip=d.yT,this.intervalOptions=[{label:"\u4e0d\u68c0\u6d4b",value:0},{label:"10 \u79d2",value:10},{label:"30 \u79d2",value:30},{label:"1 \u5206\u949f",value:60},{label:"3 \u5206\u949f",value:180},{label:"5 \u5206\u949f",value:300},{label:"10 \u5206\u949f",value:600}],this.thresholdOptions=[{label:"1 GB",value:1024**3},{label:"3 GB",value:1024**3*3},{label:"5 GB",value:1024**3*5},{label:"10 GB",value:1024**3*10},{label:"20 GB",value:1024**3*20}],this.settingsForm=n.group({recycleRecords:[""],checkInterval:[""],spaceThreshold:[""]})}get recycleRecordsControl(){return this.settingsForm.get("recycleRecords")}get checkIntervalControl(){return this.settingsForm.get("checkInterval")}get spaceThresholdControl(){return this.settingsForm.get("spaceThreshold")}ngOnChanges(){this.syncStatus=M(this.settings,()=>!0),this.settingsForm.setValue(this.settings)}ngOnInit(){this.settingsSyncService.syncSettings("space",this.settings,this.settingsForm.valueChanges).subscribe(n=>{this.syncStatus={...this.syncStatus,...P(n)},this.changeDetector.markForCheck()})}}xt.\u0275fac=function(n){return new(n||xt)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(z))},xt.\u0275cmp=t.Xpm({type:xt,selectors:[["app-disk-space-settings"]],inputs:{settings:"settings"},features:[t.TTD],decls:16,vars:9,consts:[["nz-form","",3,"formGroup"],[1,"setting-item"],["nzNoColon","",1,"setting-label"],[1,"setting-control","select",3,"nzWarningTip","nzValidateStatus"],["formControlName","checkInterval",3,"nzOptions"],["formControlName","spaceThreshold",3,"nzOptions"],["appSwitchActionable","",1,"setting-item"],[1,"setting-control","switch",3,"nzWarningTip","nzValidateStatus"],["formControlName","recycleRecords"]],template:function(n,e){1&n&&(t.TgZ(0,"form",0)(1,"nz-form-item",1)(2,"nz-form-label",2),t._uU(3,"\u786c\u76d8\u7a7a\u95f4\u68c0\u6d4b\u95f4\u9694"),t.qZA(),t.TgZ(4,"nz-form-control",3),t._UZ(5,"nz-select",4),t.qZA()(),t.TgZ(6,"nz-form-item",1)(7,"nz-form-label",2),t._uU(8,"\u786c\u76d8\u7a7a\u95f4\u68c0\u6d4b\u9608\u503c"),t.qZA(),t.TgZ(9,"nz-form-control",3),t._UZ(10,"nz-select",5),t.qZA()(),t.TgZ(11,"nz-form-item",6)(12,"nz-form-label",2),t._uU(13,"\u7a7a\u95f4\u4e0d\u8db3\u5220\u9664\u65e7\u5f55\u64ad\u6587\u4ef6"),t.qZA(),t.TgZ(14,"nz-form-control",7),t._UZ(15,"nz-switch",8),t.qZA()()()),2&n&&(t.Q6J("formGroup",e.settingsForm),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.checkInterval?e.checkIntervalControl:"warning"),t.xp6(1),t.Q6J("nzOptions",e.intervalOptions),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.spaceThreshold?e.spaceThresholdControl:"warning"),t.xp6(1),t.Q6J("nzOptions",e.thresholdOptions),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.recycleRecords?e.recycleRecordsControl:"warning"))},dependencies:[r._Y,r.JJ,r.JL,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,U.i,zt.Vq,y],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});var I=c(7044);class Ot{}Ot.\u0275fac=function(n){return new(n||Ot)},Ot.\u0275cmp=t.Xpm({type:Ot,selectors:[["app-notification-settings"]],decls:30,vars:0,consts:[["routerLink","email-notification",1,"setting-item"],[1,"setting-label"],[1,"setting-control"],["nz-icon","","nzType","right"],["routerLink","serverchan-notification",1,"setting-item"],["routerLink","pushdeer-notification",1,"setting-item"],["routerLink","pushplus-notification",1,"setting-item"],["routerLink","telegram-notification",1,"setting-item"],["routerLink","bark-notification",1,"setting-item"]],template:function(n,e){1&n&&(t.TgZ(0,"a",0)(1,"span",1),t._uU(2,"\u90ae\u7bb1\u901a\u77e5"),t.qZA(),t.TgZ(3,"span",2),t._UZ(4,"i",3),t.qZA()(),t.TgZ(5,"a",4)(6,"span",1),t._uU(7,"ServerChan \u901a\u77e5"),t.qZA(),t.TgZ(8,"span",2),t._UZ(9,"i",3),t.qZA()(),t.TgZ(10,"a",5)(11,"span",1),t._uU(12,"PushDeer \u901a\u77e5"),t.qZA(),t.TgZ(13,"span",2),t._UZ(14,"i",3),t.qZA()(),t.TgZ(15,"a",6)(16,"span",1),t._uU(17,"pushplus \u901a\u77e5"),t.qZA(),t.TgZ(18,"span",2),t._UZ(19,"i",3),t.qZA()(),t.TgZ(20,"a",7)(21,"span",1),t._uU(22,"telegram \u901a\u77e5"),t.qZA(),t.TgZ(23,"span",2),t._UZ(24,"i",3),t.qZA()(),t.TgZ(25,"a",8)(26,"span",1),t._uU(27,"Bark \u901a\u77e5"),t.qZA(),t.TgZ(28,"span",2),t._UZ(29,"i",3),t.qZA()())},dependencies:[v.rH,I.w,lt.Ls],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});var Yi=Math.ceil,Wi=Math.max;var Hi=c(3093),Ye=c(6667),Mt=c(1999);var Xi=/\s/;var eo=/^\s+/;const io=function no(i){return i&&i.slice(0,function ji(i){for(var n=i.length;n--&&Xi.test(i.charAt(n)););return n}(i)+1).replace(eo,"")};var oo=c(6460),ao=/^[-+]0x[0-9a-f]+$/i,ro=/^0b[01]+$/i,so=/^0o[0-7]+$/i,lo=parseInt;const ze=function mo(i){return i?Infinity===(i=function co(i){if("number"==typeof i)return i;if((0,oo.Z)(i))return NaN;if((0,Mt.Z)(i)){var n="function"==typeof i.valueOf?i.valueOf():i;i=(0,Mt.Z)(n)?n+"":n}if("string"!=typeof i)return 0===i?i:+i;i=io(i);var e=ro.test(i);return e||so.test(i)?lo(i.slice(2),e?2:8):ao.test(i)?NaN:+i}(i))||-Infinity===i?17976931348623157e292*(i<0?-1:1):i==i?i:0:0===i?i:0},_o=function po(i){return function(n,e,o){return o&&"number"!=typeof o&&function $i(i,n,e){if(!(0,Mt.Z)(e))return!1;var o=typeof n;return!!("number"==o?(0,qe.Z)(e)&&(0,Ye.Z)(n,e.length):"string"==o&&n in e)&&(0,Hi.Z)(e[n],i)}(n,e,o)&&(e=o=void 0),n=ze(n),void 0===e?(e=n,n=0):e=ze(e),function Ri(i,n,e,o){for(var a=-1,s=Wi(Yi((n-i)/(e||1)),0),g=Array(s);s--;)g[o?s:++a]=i,i+=e;return g}(n,e,o=void 0===o?n{return(i=ot||(ot={}))[i.EACCES=13]="EACCES",i[i.ENOTDIR=20]="ENOTDIR",ot;var i})(),fo=c(529),Co=c(7930);class Y{constructor(n,e){this.http=n,this.url=e}validateDir(n){const e=this.url.makeApiUrl("/api/v1/validation/dir");return this.http.post(e,{path:n})}validateCookie(n){const e=this.url.makeApiUrl("/api/v1/validation/cookie");return this.http.post(e,{cookie:n})}}function vo(i,n){1&i&&(t.ynx(0),t._uU(1," \u8bf7\u8f93\u5165\u4fdd\u5b58\u4f4d\u7f6e "),t.BQk())}function zo(i,n){1&i&&(t.ynx(0),t._uU(1," \u4e0d\u662f\u4e00\u4e2a\u76ee\u5f55 "),t.BQk())}function xo(i,n){1&i&&(t.ynx(0),t._uU(1," \u6ca1\u6709\u8bfb\u5199\u6743\u9650 "),t.BQk())}function Oo(i,n){1&i&&(t.ynx(0),t._uU(1," \u672a\u80fd\u8fdb\u884c\u9a8c\u8bc1 "),t.BQk())}function Mo(i,n){if(1&i&&(t.YNc(0,vo,2,0,"ng-container",6),t.YNc(1,zo,2,0,"ng-container",6),t.YNc(2,xo,2,0,"ng-container",6),t.YNc(3,Oo,2,0,"ng-container",6)),2&i){const e=n.$implicit;t.Q6J("ngIf",e.hasError("required")),t.xp6(1),t.Q6J("ngIf",e.hasError("notADirectory")),t.xp6(1),t.Q6J("ngIf",e.hasError("noPermissions")),t.xp6(1),t.Q6J("ngIf",e.hasError("failedToValidate"))}}function bo(i,n){if(1&i&&(t.ynx(0),t.TgZ(1,"form",2)(2,"nz-form-item")(3,"nz-form-control",3),t._UZ(4,"input",4),t.YNc(5,Mo,4,4,"ng-template",null,5,t.W1O),t.qZA()()(),t.BQk()),2&i){const e=t.MAs(6),o=t.oxw();t.xp6(1),t.Q6J("formGroup",o.settingsForm),t.xp6(2),t.Q6J("nzErrorTip",e)}}Y.\u0275fac=function(n){return new(n||Y)(t.LFG(fo.eN),t.LFG(Co.i))},Y.\u0275prov=t.Yz7({token:Y,factory:Y.\u0275fac,providedIn:"root"});class bt{constructor(n,e,o){this.changeDetector=e,this.validationService=o,this.value="",this.visible=!1,this.visibleChange=new t.vpe,this.cancel=new t.vpe,this.confirm=new t.vpe,this.logDirAsyncValidator=a=>this.validationService.validateDir(a.value).pipe((0,T.U)(s=>{switch(s.code){case ot.ENOTDIR:return{error:!0,notADirectory:!0};case ot.EACCES:return{error:!0,noPermissions:!0};default:return null}}),(0,w.K)(()=>(0,ie.of)({error:!0,failedToValidate:!0}))),this.settingsForm=n.group({logDir:["",[r.kI.required],[this.logDirAsyncValidator]]})}get control(){return this.settingsForm.get("logDir")}ngOnChanges(){this.setValue()}open(){this.setValue(),this.setVisible(!0)}close(){this.setVisible(!1)}setVisible(n){this.visible=n,this.visibleChange.emit(n),this.changeDetector.markForCheck()}setValue(){this.control.setValue(this.value),this.changeDetector.markForCheck()}handleCancel(){this.cancel.emit(),this.close()}handleConfirm(){this.confirm.emit(this.control.value.trim()),this.close()}}bt.\u0275fac=function(n){return new(n||bt)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(Y))},bt.\u0275cmp=t.Xpm({type:bt,selectors:[["app-logdir-edit-dialog"]],inputs:{value:"value",visible:"visible"},outputs:{visibleChange:"visibleChange",cancel:"cancel",confirm:"confirm"},features:[t.TTD],decls:2,vars:2,consts:[["nzTitle","\u4fee\u6539\u65e5\u5fd7\u6587\u4ef6\u5b58\u653e\u76ee\u5f55","nzCentered","",3,"nzVisible","nzOkDisabled","nzVisibleChange","nzOnOk","nzOnCancel"],[4,"nzModalContent"],["nz-form","",3,"formGroup"],["nzHasFeedback","","nzValidatingTip","\u6b63\u5728\u9a8c\u8bc1...",3,"nzErrorTip"],["type","text","required","","nz-input","","formControlName","logDir"],["errorTip",""],[4,"ngIf"]],template:function(n,e){1&n&&(t.TgZ(0,"nz-modal",0),t.NdJ("nzVisibleChange",function(a){return e.visible=a})("nzOnOk",function(){return e.handleConfirm()})("nzOnCancel",function(){return e.handleCancel()}),t.YNc(1,bo,7,2,"ng-container",1),t.qZA()),2&n&&t.Q6J("nzVisible",e.visible)("nzOkDisabled",e.control.invalid||e.control.value.trim()===e.value)},dependencies:[p.O5,r._Y,r.Fj,r.JJ,r.JL,r.Q7,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.Fd,O.Zp,_.du,_.Hf],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class Pt{constructor(n,e,o){this.changeDetector=e,this.settingsSyncService=o,this.syncFailedWarningTip=d.yT,this.logLevelOptions=[{label:"DEBUG",value:"DEBUG"},{label:"INFO",value:"INFO"},{label:"WARNING",value:"WARNING"},{label:"ERROR",value:"ERROR"},{label:"CRITICAL",value:"CRITICAL"}],this.backupOptions=_o(0,91).map(a=>({label:a.toString(),value:a})),this.settingsForm=n.group({logDir:[""],consoleLogLevel:[""],backupCount:[""]})}get logDirControl(){return this.settingsForm.get("logDir")}get consoleLogLevelControl(){return this.settingsForm.get("consoleLogLevel")}get backupCountControl(){return this.settingsForm.get("backupCount")}ngOnChanges(){this.syncStatus=M(this.settings,()=>!0),this.settingsForm.setValue(this.settings)}ngOnInit(){this.settingsSyncService.syncSettings("logging",this.settings,this.settingsForm.valueChanges).subscribe(n=>{this.syncStatus={...this.syncStatus,...P(n)},this.changeDetector.markForCheck()})}}Pt.\u0275fac=function(n){return new(n||Pt)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(z))},Pt.\u0275cmp=t.Xpm({type:Pt,selectors:[["app-logging-settings"]],inputs:{settings:"settings"},features:[t.TTD],decls:19,vars:11,consts:[["nz-form","",3,"formGroup"],[1,"setting-item","actionable",3,"click"],[1,"setting-label"],[3,"nzWarningTip","nzValidateStatus"],[1,"setting-value"],[3,"value","confirm"],["logDirEditDialog",""],["appSwitchActionable","",1,"setting-item"],["nzNoColon","",1,"setting-label"],[1,"setting-control","select",3,"nzWarningTip","nzValidateStatus"],["formControlName","consoleLogLevel",3,"nzOptions"],[1,"setting-item"],["formControlName","backupCount",3,"nzOptions"]],template:function(n,e){if(1&n){const o=t.EpF();t.TgZ(0,"form",0)(1,"nz-form-item",1),t.NdJ("click",function(){t.CHM(o);const s=t.MAs(8);return t.KtG(s.open())}),t.TgZ(2,"nz-form-label",2),t._uU(3,"\u65e5\u5fd7\u6587\u4ef6\u5b58\u653e\u76ee\u5f55"),t.qZA(),t.TgZ(4,"nz-form-control",3)(5,"nz-form-text",4),t._uU(6),t.qZA(),t.TgZ(7,"app-logdir-edit-dialog",5,6),t.NdJ("confirm",function(s){return e.logDirControl.setValue(s)}),t.qZA()()(),t.TgZ(9,"nz-form-item",7)(10,"nz-form-label",8),t._uU(11,"\u7ec8\u7aef\u65e5\u5fd7\u8f93\u51fa\u7ea7\u522b"),t.qZA(),t.TgZ(12,"nz-form-control",9),t._UZ(13,"nz-select",10),t.qZA()(),t.TgZ(14,"nz-form-item",11)(15,"nz-form-label",8),t._uU(16,"\u65e5\u5fd7\u6587\u4ef6\u5907\u4efd\u6570\u91cf"),t.qZA(),t.TgZ(17,"nz-form-control",9),t._UZ(18,"nz-select",12),t.qZA()()()}2&n&&(t.Q6J("formGroup",e.settingsForm),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.logDir?e.logDirControl:"warning"),t.xp6(2),t.hij("",e.logDirControl.value," "),t.xp6(1),t.Q6J("value",e.logDirControl.value),t.xp6(5),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.consoleLogLevel?e.consoleLogLevelControl:"warning"),t.xp6(1),t.Q6J("nzOptions",e.logLevelOptions),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.backupCount?e.backupCountControl:"warning"),t.xp6(1),t.Q6J("nzOptions",e.backupOptions))},dependencies:[r._Y,r.JJ,r.JL,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,l.EF,zt.Vq,y,bt],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class Tt{constructor(n,e,o){this.changeDetector=e,this.settingsSyncService=o,this.syncFailedWarningTip=d.yT,this.settingsForm=n.group({danmuUname:[""],recordGiftSend:[""],recordFreeGifts:[""],recordGuardBuy:[""],recordSuperChat:[""],saveRawDanmaku:[""]})}get danmuUnameControl(){return this.settingsForm.get("danmuUname")}get recordGiftSendControl(){return this.settingsForm.get("recordGiftSend")}get recordFreeGiftsControl(){return this.settingsForm.get("recordFreeGifts")}get recordGuardBuyControl(){return this.settingsForm.get("recordGuardBuy")}get recordSuperChatControl(){return this.settingsForm.get("recordSuperChat")}get saveRawDanmakuControl(){return this.settingsForm.get("saveRawDanmaku")}ngOnChanges(){this.syncStatus=M(this.settings,()=>!0),this.settingsForm.setValue(this.settings)}ngOnInit(){this.settingsSyncService.syncSettings("danmaku",this.settings,this.settingsForm.valueChanges).subscribe(n=>{this.syncStatus={...this.syncStatus,...P(n)},this.changeDetector.markForCheck()})}}function Po(i,n){1&i&&(t.TgZ(0,"p"),t._uU(1," \u81ea\u52a8: \u6ca1\u51fa\u9519\u5c31\u5220\u9664\u6e90\u6587\u4ef6"),t._UZ(2,"br"),t._uU(3," \u8c28\u614e: \u6ca1\u51fa\u9519\u4e14\u6ca1\u8b66\u544a\u624d\u5220\u9664\u6e90\u6587\u4ef6"),t._UZ(4,"br"),t._uU(5," \u4ece\u4e0d: \u603b\u662f\u4fdd\u7559\u6e90\u6587\u4ef6"),t._UZ(6,"br"),t.qZA())}function To(i,n){if(1&i&&(t.ynx(0),t.TgZ(1,"label",13),t._uU(2),t.qZA(),t.BQk()),2&i){const e=n.$implicit;t.xp6(1),t.Q6J("nzValue",e.value),t.xp6(1),t.Oqu(e.label)}}Tt.\u0275fac=function(n){return new(n||Tt)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(z))},Tt.\u0275cmp=t.Xpm({type:Tt,selectors:[["app-danmaku-settings"]],inputs:{settings:"settings"},features:[t.TTD],decls:31,vars:13,consts:[["nz-form","",3,"formGroup"],["appSwitchActionable","",1,"setting-item"],["nzNoColon","","nzTooltipTitle","\u8bb0\u5f55\u793c\u7269\u4fe1\u606f\u5230\u5f39\u5e55\u6587\u4ef6\u91cc",1,"setting-label"],[1,"setting-control","switch",3,"nzWarningTip","nzValidateStatus"],["formControlName","recordGiftSend"],["nzNoColon","","nzTooltipTitle","\u8bb0\u5f55\u514d\u8d39\u793c\u7269\u4fe1\u606f\u5230\u5f39\u5e55\u6587\u4ef6\u91cc",1,"setting-label"],["formControlName","recordFreeGifts"],["nzNoColon","","nzTooltipTitle","\u8bb0\u5f55\u4e0a\u8230\u4fe1\u606f\u5230\u5f39\u5e55\u6587\u4ef6\u91cc",1,"setting-label"],["formControlName","recordGuardBuy"],["nzNoColon","","nzTooltipTitle","\u8bb0\u5f55 Super Chat \u4fe1\u606f\u5230\u5f39\u5e55\u6587\u4ef6\u91cc",1,"setting-label"],["formControlName","recordSuperChat"],["nzNoColon","","nzTooltipTitle","\u53d1\u9001\u8005: \u5f39\u5e55\u5185\u5bb9",1,"setting-label"],["formControlName","danmuUname"],["nzNoColon","","nzTooltipTitle","\u4fdd\u5b58\u539f\u59cb\u5f39\u5e55\u5230 JSON lines \u6587\u4ef6\uff0c\u4e3b\u8981\u7528\u4e8e\u5206\u6790\u8c03\u8bd5\u3002",1,"setting-label"],["formControlName","saveRawDanmaku"]],template:function(n,e){1&n&&(t.TgZ(0,"form",0)(1,"nz-form-item",1)(2,"nz-form-label",2),t._uU(3,"\u8bb0\u5f55\u793c\u7269"),t.qZA(),t.TgZ(4,"nz-form-control",3),t._UZ(5,"nz-switch",4),t.qZA()(),t.TgZ(6,"nz-form-item",1)(7,"nz-form-label",5),t._uU(8,"\u8bb0\u5f55\u514d\u8d39\u793c\u7269"),t.qZA(),t.TgZ(9,"nz-form-control",3),t._UZ(10,"nz-switch",6),t.qZA()(),t.TgZ(11,"nz-form-item",1)(12,"nz-form-label",7),t._uU(13,"\u8bb0\u5f55\u4e0a\u8230"),t.qZA(),t.TgZ(14,"nz-form-control",3),t._UZ(15,"nz-switch",8),t.qZA()(),t.TgZ(16,"nz-form-item",1)(17,"nz-form-label",9),t._uU(18,"\u8bb0\u5f55 Super Chat"),t.qZA(),t.TgZ(19,"nz-form-control",3),t._UZ(20,"nz-switch",10),t.qZA()(),t.TgZ(21,"nz-form-item",1)(22,"nz-form-label",11),t._uU(23,"\u5f39\u5e55\u524d\u52a0\u7528\u6237\u540d"),t.qZA(),t.TgZ(24,"nz-form-control",3),t._UZ(25,"nz-switch",12),t.qZA()(),t.TgZ(26,"nz-form-item",1)(27,"nz-form-label",13),t._uU(28,"\u4fdd\u5b58\u539f\u59cb\u5f39\u5e55"),t.qZA(),t.TgZ(29,"nz-form-control",3),t._UZ(30,"nz-switch",14),t.qZA()()()),2&n&&(t.Q6J("formGroup",e.settingsForm),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.recordGiftSend?e.recordGiftSendControl:"warning"),t.xp6(5),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.recordFreeGifts?e.recordFreeGiftsControl:"warning"),t.xp6(5),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.recordGuardBuy?e.recordGuardBuyControl:"warning"),t.xp6(5),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.recordSuperChat?e.recordSuperChatControl:"warning"),t.xp6(5),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.danmuUname?e.danmuUnameControl:"warning"),t.xp6(5),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.saveRawDanmaku?e.saveRawDanmakuControl:"warning"))},dependencies:[r._Y,r.JJ,r.JL,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,U.i,y],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class wt{constructor(n,e,o){this.changeDetector=e,this.settingsSyncService=o,this.deleteStrategies=d.rc,this.syncFailedWarningTip=d.yT,this.settingsForm=n.group({injectExtraMetadata:[""],remuxToMp4:[""],deleteSource:[""]})}get injectExtraMetadataControl(){return this.settingsForm.get("injectExtraMetadata")}get remuxToMp4Control(){return this.settingsForm.get("remuxToMp4")}get deleteSourceControl(){return this.settingsForm.get("deleteSource")}ngOnChanges(){this.syncStatus=M(this.settings,()=>!0),this.settingsForm.setValue(this.settings)}ngOnInit(){this.settingsSyncService.syncSettings("postprocessing",this.settings,this.settingsForm.valueChanges).subscribe(n=>{this.syncStatus={...this.syncStatus,...P(n)},this.changeDetector.markForCheck()})}}wt.\u0275fac=function(n){return new(n||wt)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(z))},wt.\u0275cmp=t.Xpm({type:wt,selectors:[["app-post-processing-settings"]],inputs:{settings:"settings"},features:[t.TTD],decls:19,vars:11,consts:[["nz-form","",3,"formGroup"],["appSwitchActionable","",1,"setting-item"],["nzNoColon","","nzTooltipTitle","\u6dfb\u52a0\u5173\u952e\u5e27\u7b49\u5143\u6570\u636e\u4f7f\u5b9a\u4f4d\u64ad\u653e\u548c\u62d6\u8fdb\u5ea6\u6761\u4e0d\u4f1a\u5361\u987f",1,"setting-label"],[1,"setting-control","switch",3,"nzWarningTip","nzValidateStatus"],["formControlName","injectExtraMetadata",3,"nzDisabled"],["nzNoColon","","nzTooltipTitle","\u8c03\u7528 ffmpeg \u8fdb\u884c\u8f6c\u6362\uff0c\u9700\u8981\u5b89\u88c5 ffmpeg \u3002",1,"setting-label"],["formControlName","remuxToMp4"],[1,"setting-item"],["nzNoColon","",1,"setting-label",3,"nzTooltipTitle"],["deleteSourceTip",""],[1,"setting-control","radio",3,"nzWarningTip","nzValidateStatus"],["formControlName","deleteSource",3,"nzDisabled"],[4,"ngFor","ngForOf"],["nz-radio-button","",3,"nzValue"]],template:function(n,e){if(1&n&&(t.TgZ(0,"form",0)(1,"nz-form-item",1)(2,"nz-form-label",2),t._uU(3,"flv \u6dfb\u52a0\u5143\u6570\u636e"),t.qZA(),t.TgZ(4,"nz-form-control",3),t._UZ(5,"nz-switch",4),t.qZA()(),t.TgZ(6,"nz-form-item",1)(7,"nz-form-label",5),t._uU(8,"\u8f6c\u5c01\u88c5\u4e3a mp4"),t.qZA(),t.TgZ(9,"nz-form-control",3),t._UZ(10,"nz-switch",6),t.qZA()(),t.TgZ(11,"nz-form-item",7)(12,"nz-form-label",8),t._uU(13,"\u6e90\u6587\u4ef6\u5220\u9664\u7b56\u7565"),t.qZA(),t.YNc(14,Po,7,0,"ng-template",null,9,t.W1O),t.TgZ(16,"nz-form-control",10)(17,"nz-radio-group",11),t.YNc(18,To,3,2,"ng-container",12),t.qZA()()()()),2&n){const o=t.MAs(15);t.Q6J("formGroup",e.settingsForm),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.injectExtraMetadata?e.injectExtraMetadataControl:"warning"),t.xp6(1),t.Q6J("nzDisabled",e.remuxToMp4Control.value),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.remuxToMp4?e.remuxToMp4Control:"warning"),t.xp6(3),t.Q6J("nzTooltipTitle",o),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.deleteSource?e.deleteSourceControl:"warning"),t.xp6(1),t.Q6J("nzDisabled",!e.remuxToMp4Control.value),t.xp6(1),t.Q6J("ngForOf",e.deleteStrategies)}},dependencies:[p.sg,r._Y,r.JJ,r.JL,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,U.i,G.Of,G.Bq,G.Dg,y],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});var W=c(3523);function wo(i,n){1&i&&(t.TgZ(0,"p"),t._uU(1," \u9009\u62e9\u8981\u5f55\u5236\u7684\u76f4\u64ad\u6d41\u683c\u5f0f "),t._UZ(2,"br"),t.TgZ(3,"b"),t._uU(4,"FLV:"),t.qZA(),t._uU(5," flv \u6d41\u5728\u7f51\u7edc\u4e0d\u7a33\u5b9a\u7684\u60c5\u51b5\u4e0b\u5bb9\u6613\u4e2d\u65ad\u4e22\u5931\u6570\u636e\u6216\u5f55\u5236\u5230\u4e8c\u538b\u753b\u8d28\u3002\u6ca1\u6709 flv \u6d41\u7684\u76f4\u64ad\u4f1a\u81ea\u52a8\u5207\u6362\u5f55\u5236 fmp4 \u6d41\u3002 "),t._UZ(6,"br"),t.TgZ(7,"b"),t._uU(8,"HLS (fmp4):"),t.qZA(),t._uU(9," hls \u6d41\u57fa\u672c\u4e0d\u53d7\u7f51\u7edc\u6ce2\u52a8\u5f71\u54cd\uff0c\u4f46\u4e0d\u662f\u6240\u6709\u76f4\u64ad\u95f4\u90fd\u652f\u6301\u3002\u6709 flv \u6d41\u7684\u76f4\u64ad\uff0c\u5728\u8bbe\u5b9a\u7684\u7b49\u5f85\u65f6\u95f4\u5185\u6ca1\u6709 fmp4 \u6d41\u4f1a\u81ea\u52a8\u5207\u6362\u5f55\u5236 flv \u6d41\u3002 "),t._UZ(10,"br"),t.TgZ(11,"b"),t._uU(12,"P.S."),t.qZA(),t._UZ(13,"br"),t._uU(14," WEB \u7aef\u76f4\u64ad\u64ad\u653e\u5668\u662f Hls7Player \u7684\u76f4\u64ad\u95f4\u652f\u6301\u5f55\u5236 fmp4 \u6d41, fMp4Player \u5219\u4e0d\u652f\u6301\u3002 "),t.qZA())}function Fo(i,n){1&i&&(t.TgZ(0,"p"),t._uU(1," \u5982\u679c\u8d85\u8fc7\u6240\u8bbe\u7f6e\u7684\u7b49\u5f85\u65f6\u95f4 fmp4 \u6d41\u8fd8\u6ca1\u6709\u5c31\u5207\u6362\u4e3a\u5f55\u5236 flv \u6d41 "),t._UZ(2,"br"),t._uU(3," fmp4 \u6d41\u5728\u521a\u63a8\u6d41\u662f\u6ca1\u6709\u7684\uff0c\u8981\u8fc7\u4e00\u4f1a\u624d\u6709\u3002 "),t._UZ(4,"br"),t._uU(5," fmp4 \u6d41\u51fa\u73b0\u7684\u65f6\u95f4\u548c\u76f4\u64ad\u5ef6\u8fdf\u6709\u5173\uff0c\u4e00\u822c\u90fd\u5728 10 \u79d2\u5185\uff0c\u4f46\u4e5f\u6709\u5ef6\u8fdf\u6bd4\u8f83\u5927\u8d85\u8fc7 1 \u5206\u949f\u7684\u3002 "),t._UZ(6,"br"),t._uU(7," \u63a8\u8350\u5168\u5c40\u8bbe\u7f6e\u4e3a 10 \u79d2\uff0c\u4e2a\u522b\u5ef6\u8fdf\u6bd4\u8f83\u5927\u7684\u76f4\u64ad\u95f4\u5355\u72ec\u8bbe\u7f6e\u3002 "),t.qZA())}function So(i,n){if(1&i&&(t.TgZ(0,"nz-form-item",1)(1,"nz-form-label",2),t._uU(2,"fmp4 \u6d41\u7b49\u5f85\u65f6\u95f4"),t.qZA(),t.YNc(3,Fo,8,0,"ng-template",null,19,t.W1O),t.TgZ(5,"nz-form-control",4),t._UZ(6,"nz-select",20),t.qZA()()),2&i){const e=t.MAs(4),o=t.oxw();t.xp6(1),t.Q6J("nzTooltipTitle",e),t.xp6(4),t.Q6J("nzWarningTip",o.syncFailedWarningTip)("nzValidateStatus",o.syncStatus.fmp4StreamTimeout?o.fmp4StreamTimeoutControl:"warning"),t.xp6(1),t.Q6J("nzOptions",o.fmp4StreamTimeoutOptions)}}function yo(i,n){1&i&&(t.TgZ(0,"p"),t._uU(1," \u9ed8\u8ba4: \u6bcf\u4e2a\u5206\u5272\u7684\u5f55\u64ad\u6587\u4ef6\u5bf9\u5e94\u4fdd\u5b58\u4e00\u4e2a\u5c01\u9762\u6587\u4ef6\uff0c\u4e0d\u7ba1\u5c01\u9762\u662f\u5426\u76f8\u540c\u3002"),t._UZ(2,"br"),t._uU(3," \u53bb\u91cd: \u76f8\u540c\u7684\u5c01\u9762\u53ea\u4fdd\u5b58\u4e00\u6b21"),t._UZ(4,"br"),t._uU(5," P.S. "),t._UZ(6,"br"),t._uU(7," \u5224\u65ad\u662f\u5426\u76f8\u540c\u662f\u4f9d\u636e\u5c01\u9762\u6570\u636e\u7684 sha1\uff0c\u53ea\u5728\u5355\u6b21\u5f55\u5236\u5185\u6709\u6548\u3002 "),t.qZA())}function Ao(i,n){if(1&i&&(t.ynx(0),t.TgZ(1,"label",21),t._uU(2),t.qZA(),t.BQk()),2&i){const e=n.$implicit;t.xp6(1),t.Q6J("nzValue",e.value),t.xp6(1),t.Oqu(e.label)}}function ko(i,n){if(1&i&&(t.TgZ(0,"nz-form-item",1)(1,"nz-form-label",22),t._uU(2,"\u6570\u636e\u8bfb\u53d6\u8d85\u65f6"),t.qZA(),t.TgZ(3,"nz-form-control",4),t._UZ(4,"nz-select",23),t.qZA()()),2&i){const e=t.oxw();t.xp6(3),t.Q6J("nzWarningTip",e.syncStatus.readTimeout?"\u65e0\u7f1d\u62fc\u63a5\u4f1a\u5931\u6548\uff01":e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.readTimeout&&e.readTimeoutControl.value<=3?e.readTimeoutControl:"warning"),t.xp6(1),t.Q6J("nzOptions",e.readTimeoutOptions)}}function Do(i,n){if(1&i&&(t.TgZ(0,"nz-form-item",1)(1,"nz-form-label",24),t._uU(2,"\u786c\u76d8\u5199\u5165\u7f13\u51b2"),t.qZA(),t.TgZ(3,"nz-form-control",4),t._UZ(4,"nz-select",25),t.qZA()()),2&i){const e=t.oxw();t.xp6(3),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.bufferSize?e.bufferSizeControl:"warning"),t.xp6(1),t.Q6J("nzOptions",e.bufferOptions)}}class Ft{constructor(n,e,o){this.changeDetector=e,this.settingsSyncService=o,this.syncFailedWarningTip=d.yT,this.streamFormatOptions=(0,W.Z)(d.tp),this.recordingModeOptions=(0,W.Z)(d.kV),this.fmp4StreamTimeoutOptions=(0,W.Z)(d.D4),this.qualityOptions=(0,W.Z)(d.O6),this.readTimeoutOptions=(0,W.Z)(d.D4),this.disconnectionTimeoutOptions=(0,W.Z)(d.$w),this.bufferOptions=(0,W.Z)(d.Rc),this.coverSaveStrategies=(0,W.Z)(d.J_),this.settingsForm=n.group({streamFormat:[""],recordingMode:[""],qualityNumber:[""],fmp4StreamTimeout:[""],readTimeout:[""],disconnectionTimeout:[""],bufferSize:[""],saveCover:[""],coverSaveStrategy:[""]})}get streamFormatControl(){return this.settingsForm.get("streamFormat")}get recordingModeControl(){return this.settingsForm.get("recordingMode")}get qualityNumberControl(){return this.settingsForm.get("qualityNumber")}get fmp4StreamTimeoutControl(){return this.settingsForm.get("fmp4StreamTimeout")}get readTimeoutControl(){return this.settingsForm.get("readTimeout")}get disconnectionTimeoutControl(){return this.settingsForm.get("disconnectionTimeout")}get bufferSizeControl(){return this.settingsForm.get("bufferSize")}get saveCoverControl(){return this.settingsForm.get("saveCover")}get coverSaveStrategyControl(){return this.settingsForm.get("coverSaveStrategy")}ngOnChanges(){this.syncStatus=M(this.settings,()=>!0),this.settingsForm.setValue(this.settings)}ngOnInit(){this.settingsSyncService.syncSettings("recorder",this.settings,this.settingsForm.valueChanges).subscribe(n=>{this.syncStatus={...this.syncStatus,...P(n)},this.changeDetector.markForCheck()})}}function Eo(i,n){1&i&&(t.ynx(0),t._uU(1," \u8bf7\u8f93\u5165 User Agent "),t.BQk())}function Zo(i,n){1&i&&t.YNc(0,Eo,2,0,"ng-container",6),2&i&&t.Q6J("ngIf",n.$implicit.hasError("required"))}function No(i,n){if(1&i&&(t.ynx(0),t.TgZ(1,"form",2)(2,"nz-form-item")(3,"nz-form-control",3),t._UZ(4,"textarea",4),t.YNc(5,Zo,1,1,"ng-template",null,5,t.W1O),t.qZA()()(),t.BQk()),2&i){const e=t.MAs(6),o=t.oxw();t.xp6(1),t.Q6J("formGroup",o.settingsForm),t.xp6(2),t.Q6J("nzWarningTip",o.warningTip)("nzValidateStatus",o.control.valid&&o.control.value.trim()!==o.value?"warning":o.control)("nzErrorTip",e),t.xp6(1),t.Q6J("rows",3)}}Ft.\u0275fac=function(n){return new(n||Ft)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(z))},Ft.\u0275cmp=t.Xpm({type:Ft,selectors:[["app-recorder-settings"]],inputs:{settings:"settings"},features:[t.TTD],decls:34,vars:21,consts:[["nz-form","",3,"formGroup"],[1,"setting-item"],["nzNoColon","",1,"setting-label",3,"nzTooltipTitle"],["streamFormatTip",""],[1,"setting-control","select",3,"nzWarningTip","nzValidateStatus"],["formControlName","streamFormat",3,"nzOptions"],["class","setting-item",4,"ngIf"],["nzNoColon","","nzTooltipTitle","\u6240\u9009\u753b\u8d28\u4e0d\u5b58\u5728\u5c06\u4ee5\u539f\u753b\u4ee3\u66ff",1,"setting-label"],["formControlName","qualityNumber",3,"nzOptions"],["appSwitchActionable","",1,"setting-item"],["nzNoColon","","nzTooltipTitle","\u5f55\u64ad\u6587\u4ef6\u5b8c\u6210\u65f6\u4fdd\u5b58\u5f53\u524d\u76f4\u64ad\u95f4\u7684\u5c01\u9762",1,"setting-label"],[1,"setting-control","switch",3,"nzWarningTip","nzValidateStatus"],["formControlName","saveCover"],["coverSaveStrategyTip",""],[1,"setting-control","radio",3,"nzWarningTip","nzValidateStatus"],["formControlName","coverSaveStrategy",3,"nzDisabled"],[4,"ngFor","ngForOf"],["nzNoColon","","nzTooltipTitle","\u65ad\u7f51\u8d85\u8fc7\u7b49\u5f85\u65f6\u95f4\u5c31\u7ed3\u675f\u5f55\u5236\uff0c\u5982\u679c\u7f51\u7edc\u6062\u590d\u540e\u4ecd\u672a\u4e0b\u64ad\u4f1a\u81ea\u52a8\u91cd\u65b0\u5f00\u59cb\u5f55\u5236\u3002",1,"setting-label"],["formControlName","disconnectionTimeout",3,"nzOptions"],["fmp4StreamTimeoutTip",""],["formControlName","fmp4StreamTimeout",3,"nzOptions"],["nz-radio-button","",3,"nzValue"],["nzNoColon","","nzTooltipTitle","\u8d85\u65f6\u65f6\u95f4\u8bbe\u7f6e\u5f97\u6bd4\u8f83\u957f\u76f8\u5bf9\u4e0d\u5bb9\u6613\u56e0\u7f51\u7edc\u4e0d\u7a33\u5b9a\u800c\u51fa\u73b0\u6d41\u4e2d\u65ad\uff0c\u4f46\u662f\u4e00\u65e6\u51fa\u73b0\u4e2d\u65ad\u5c31\u65e0\u6cd5\u5b9e\u73b0\u65e0\u7f1d\u62fc\u63a5\u4e14\u6f0f\u5f55\u8f83\u591a\u3002",1,"setting-label"],["formControlName","readTimeout",3,"nzOptions"],["nzNoColon","","nzTooltipTitle","\u786c\u76d8\u5199\u5165\u7f13\u51b2\u8bbe\u7f6e\u5f97\u6bd4\u8f83\u5927\u53ef\u4ee5\u51cf\u5c11\u5bf9\u786c\u76d8\u7684\u5199\u5165\uff0c\u4f46\u9700\u8981\u5360\u7528\u66f4\u591a\u7684\u5185\u5b58\u3002",1,"setting-label"],["formControlName","bufferSize",3,"nzOptions"]],template:function(n,e){if(1&n&&(t.TgZ(0,"form",0)(1,"nz-form-item",1)(2,"nz-form-label",2),t._uU(3,"\u76f4\u64ad\u6d41\u683c\u5f0f"),t.qZA(),t.YNc(4,wo,15,0,"ng-template",null,3,t.W1O),t.TgZ(6,"nz-form-control",4),t._UZ(7,"nz-select",5),t.qZA()(),t.YNc(8,So,7,4,"nz-form-item",6),t.TgZ(9,"nz-form-item",1)(10,"nz-form-label",7),t._uU(11,"\u753b\u8d28"),t.qZA(),t.TgZ(12,"nz-form-control",4),t._UZ(13,"nz-select",8),t.qZA()(),t.TgZ(14,"nz-form-item",9)(15,"nz-form-label",10),t._uU(16,"\u4fdd\u5b58\u5c01\u9762"),t.qZA(),t.TgZ(17,"nz-form-control",11),t._UZ(18,"nz-switch",12),t.qZA()(),t.TgZ(19,"nz-form-item",1)(20,"nz-form-label",2),t._uU(21,"\u5c01\u9762\u4fdd\u5b58\u7b56\u7565"),t.qZA(),t.YNc(22,yo,8,0,"ng-template",null,13,t.W1O),t.TgZ(24,"nz-form-control",14)(25,"nz-radio-group",15),t.YNc(26,Ao,3,2,"ng-container",16),t.qZA()()(),t.YNc(27,ko,5,3,"nz-form-item",6),t.TgZ(28,"nz-form-item",1)(29,"nz-form-label",17),t._uU(30,"\u65ad\u7f51\u7b49\u5f85\u65f6\u95f4"),t.qZA(),t.TgZ(31,"nz-form-control",4),t._UZ(32,"nz-select",18),t.qZA()(),t.YNc(33,Do,5,3,"nz-form-item",6),t.qZA()),2&n){const o=t.MAs(5),a=t.MAs(23);t.Q6J("formGroup",e.settingsForm),t.xp6(2),t.Q6J("nzTooltipTitle",o),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.streamFormat?e.streamFormatControl:"warning"),t.xp6(1),t.Q6J("nzOptions",e.streamFormatOptions),t.xp6(1),t.Q6J("ngIf","fmp4"===e.streamFormatControl.value),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.qualityNumber?e.qualityNumberControl:"warning"),t.xp6(1),t.Q6J("nzOptions",e.qualityOptions),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.saveCover?e.saveCoverControl:"warning"),t.xp6(3),t.Q6J("nzTooltipTitle",a),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.coverSaveStrategy?e.coverSaveStrategyControl:"warning"),t.xp6(1),t.Q6J("nzDisabled",!e.saveCoverControl.value),t.xp6(1),t.Q6J("ngForOf",e.coverSaveStrategies),t.xp6(1),t.Q6J("ngIf","flv"===e.streamFormatControl.value),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.disconnectionTimeout?e.disconnectionTimeoutControl:"warning"),t.xp6(1),t.Q6J("nzOptions",e.disconnectionTimeoutOptions),t.xp6(1),t.Q6J("ngIf","flv"===e.streamFormatControl.value)}},dependencies:[p.sg,p.O5,r._Y,r.JJ,r.JL,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,U.i,G.Of,G.Bq,G.Dg,zt.Vq,y],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class St{constructor(n,e){this.changeDetector=e,this.value="",this.visible=!1,this.visibleChange=new t.vpe,this.cancel=new t.vpe,this.confirm=new t.vpe,this.warningTip="\u5168\u90e8\u4efb\u52a1\u90fd\u9700\u91cd\u542f\u5f39\u5e55\u5ba2\u6237\u7aef\u624d\u80fd\u751f\u6548\uff0c\u6b63\u5728\u5f55\u5236\u7684\u4efb\u52a1\u53ef\u80fd\u4f1a\u4e22\u5931\u5f39\u5e55\uff01",this.settingsForm=n.group({userAgent:["",[r.kI.required]]})}get control(){return this.settingsForm.get("userAgent")}ngOnChanges(){this.setValue()}open(){this.setValue(),this.setVisible(!0)}close(){this.setVisible(!1)}setVisible(n){this.visible=n,this.visibleChange.emit(n),this.changeDetector.markForCheck()}setValue(){this.control.setValue(this.value),this.changeDetector.markForCheck()}handleCancel(){this.cancel.emit(),this.close()}handleConfirm(){this.confirm.emit(this.control.value.trim()),this.close()}}St.\u0275fac=function(n){return new(n||St)(t.Y36(r.qu),t.Y36(t.sBO))},St.\u0275cmp=t.Xpm({type:St,selectors:[["app-user-agent-edit-dialog"]],inputs:{value:"value",visible:"visible"},outputs:{visibleChange:"visibleChange",cancel:"cancel",confirm:"confirm"},features:[t.TTD],decls:2,vars:2,consts:[["nzTitle","\u4fee\u6539 User Agent","nzOkDanger","","nzCentered","",3,"nzVisible","nzOkDisabled","nzVisibleChange","nzOnOk","nzOnCancel"],[4,"nzModalContent"],["nz-form","",3,"formGroup"],[3,"nzWarningTip","nzValidateStatus","nzErrorTip"],["required","","nz-input","","formControlName","userAgent",3,"rows"],["errorTip",""],[4,"ngIf"]],template:function(n,e){1&n&&(t.TgZ(0,"nz-modal",0),t.NdJ("nzVisibleChange",function(a){return e.visible=a})("nzOnOk",function(){return e.handleConfirm()})("nzOnCancel",function(){return e.handleCancel()}),t.YNc(1,No,7,5,"ng-container",1),t.qZA()),2&n&&t.Q6J("nzVisible",e.visible)("nzOkDisabled",e.control.invalid||e.control.value.trim()===e.value)},dependencies:[p.O5,r._Y,r.Fj,r.JJ,r.JL,r.Q7,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.Fd,O.Zp,_.du,_.Hf],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});var dt=c(1664);function Bo(i,n){if(1&i&&(t.ynx(0),t.TgZ(1,"form",3)(2,"nz-form-item")(3,"nz-form-control",4),t._UZ(4,"textarea",5),t.qZA()()(),t.BQk()),2&i){const e=t.oxw();t.xp6(1),t.Q6J("formGroup",e.settingsForm),t.xp6(2),t.Q6J("nzWarningTip",e.warningTip)("nzValidateStatus",e.control.valid&&e.control.value.trim()!==e.value?"warning":e.control),t.xp6(1),t.Q6J("rows",5)}}function Uo(i,n){if(1&i){const e=t.EpF();t.TgZ(0,"button",6),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.testCookie())}),t._uU(1," \u6d4b\u8bd5 "),t.qZA(),t.TgZ(2,"button",7),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.handleCancel())}),t._uU(3,"\u53d6\u6d88"),t.qZA(),t.TgZ(4,"button",8),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.handleConfirm())}),t._uU(5," \u786e\u5b9a "),t.qZA()}if(2&i){const e=t.oxw();t.Q6J("disabled",""===e.control.value.trim()),t.xp6(4),t.Q6J("disabled",e.control.invalid||e.control.value.trim()===e.value)}}class yt{constructor(n,e,o,a){this.changeDetector=e,this.validationService=o,this.message=a,this.value="",this.visible=!1,this.visibleChange=new t.vpe,this.cancel=new t.vpe,this.confirm=new t.vpe,this.warningTip="\u5168\u90e8\u4efb\u52a1\u90fd\u9700\u91cd\u542f\u5f39\u5e55\u5ba2\u6237\u7aef\u624d\u80fd\u751f\u6548\uff0c\u6b63\u5728\u5f55\u5236\u7684\u4efb\u52a1\u53ef\u80fd\u4f1a\u4e22\u5931\u5f39\u5e55\uff01",this.settingsForm=n.group({cookie:[""]})}get control(){return this.settingsForm.get("cookie")}ngOnChanges(){this.setValue()}open(){this.setValue(),this.setVisible(!0)}close(){this.setVisible(!1)}setVisible(n){this.visible=n,this.visibleChange.emit(n),this.changeDetector.markForCheck()}setValue(){this.control.setValue(this.value),this.changeDetector.markForCheck()}handleCancel(){this.cancel.emit(),this.close()}handleConfirm(){this.confirm.emit(this.control.value.trim()),this.close()}testCookie(){this.validationService.validateCookie(this.control.value).subscribe(n=>{0===n.code?this.message.success(`uid: ${n.data?.mid}, uname: ${n.data?.uname}`):this.message.error(`${n.code}: ${n.message}`)})}}yt.\u0275fac=function(n){return new(n||yt)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(Y),t.Y36(se.dD))},yt.\u0275cmp=t.Xpm({type:yt,selectors:[["app-cookie-edit-dialog"]],inputs:{value:"value",visible:"visible"},outputs:{visibleChange:"visibleChange",cancel:"cancel",confirm:"confirm"},features:[t.TTD],decls:3,vars:1,consts:[["nzTitle","\u4fee\u6539 Cookie","nzCentered","",3,"nzVisible","nzVisibleChange"],[4,"nzModalContent"],[3,"nzModalFooter"],["nz-form","",3,"formGroup"],[3,"nzWarningTip","nzValidateStatus"],["wrap","soft","nz-input","","formControlName","cookie",3,"rows"],["nz-button","","nzType","primary",3,"disabled","click"],["nz-button","","nzType","default",3,"click"],["nz-button","","nzType","primary","nzDanger","",3,"disabled","click"]],template:function(n,e){1&n&&(t.TgZ(0,"nz-modal",0),t.NdJ("nzVisibleChange",function(a){return e.visible=a}),t.YNc(1,Bo,5,4,"ng-container",1),t.YNc(2,Uo,6,2,"ng-template",2),t.qZA()),2&n&&t.Q6J("nzVisible",e.visible)},dependencies:[r._Y,r.Fj,r.JJ,r.JL,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.Fd,O.Zp,_.du,_.Uh,_.Hf,Q.ix,I.w,dt.dQ],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class At{constructor(n,e,o){this.changeDetector=e,this.settingsSyncService=o,this.syncFailedWarningTip=d.yT,this.settingsForm=n.group({userAgent:["",[r.kI.required]],cookie:[""]})}get userAgentControl(){return this.settingsForm.get("userAgent")}get cookieControl(){return this.settingsForm.get("cookie")}ngOnChanges(){this.syncStatus=M(this.settings,()=>!0),this.settingsForm.setValue(this.settings)}ngOnInit(){this.settingsSyncService.syncSettings("header",this.settings,this.settingsForm.valueChanges).subscribe(n=>{this.syncStatus={...this.syncStatus,...P(n)},this.changeDetector.markForCheck()})}}At.\u0275fac=function(n){return new(n||At)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(z))},At.\u0275cmp=t.Xpm({type:At,selectors:[["app-header-settings"]],inputs:{settings:"settings"},features:[t.TTD],decls:17,vars:9,consts:[["nz-form","",3,"formGroup"],[1,"setting-item","actionable",3,"click"],[1,"setting-label"],[3,"nzWarningTip","nzValidateStatus"],[1,"setting-value"],[3,"value","confirm"],["userAgentEditDialog",""],["cookieEditDialog",""]],template:function(n,e){if(1&n){const o=t.EpF();t.TgZ(0,"form",0)(1,"nz-form-item",1),t.NdJ("click",function(){t.CHM(o);const s=t.MAs(8);return t.KtG(s.open())}),t.TgZ(2,"nz-form-label",2),t._uU(3,"User Agent"),t.qZA(),t.TgZ(4,"nz-form-control",3)(5,"nz-form-text",4),t._uU(6),t.qZA(),t.TgZ(7,"app-user-agent-edit-dialog",5,6),t.NdJ("confirm",function(s){return e.userAgentControl.setValue(s)}),t.qZA()()(),t.TgZ(9,"nz-form-item",1),t.NdJ("click",function(){t.CHM(o);const s=t.MAs(16);return t.KtG(s.open())}),t.TgZ(10,"nz-form-label",2),t._uU(11,"Cookie"),t.qZA(),t.TgZ(12,"nz-form-control",3)(13,"nz-form-text",4),t._uU(14),t.qZA(),t.TgZ(15,"app-cookie-edit-dialog",5,7),t.NdJ("confirm",function(s){return e.cookieControl.setValue(s)}),t.qZA()()()()}2&n&&(t.Q6J("formGroup",e.settingsForm),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.userAgent?e.userAgentControl:"warning"),t.xp6(2),t.hij("",e.userAgentControl.value," "),t.xp6(1),t.Q6J("value",e.userAgentControl.value),t.xp6(5),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.cookie?e.cookieControl:"warning"),t.xp6(2),t.hij("",e.cookieControl.value," "),t.xp6(1),t.Q6J("value",e.cookieControl.value))},dependencies:[r._Y,r.JL,r.sg,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,l.EF,St,yt],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});var at=c(9089),Io=c(6457),Jo=c(4501);function Qo(i,n){1&i&&(t.ynx(0),t._uU(1," \u8bf7\u8f93\u5165\u4fdd\u5b58\u4f4d\u7f6e "),t.BQk())}function Vo(i,n){1&i&&(t.ynx(0),t._uU(1," \u4e0d\u662f\u4e00\u4e2a\u76ee\u5f55 "),t.BQk())}function Lo(i,n){1&i&&(t.ynx(0),t._uU(1," \u6ca1\u6709\u8bfb\u5199\u6743\u9650 "),t.BQk())}function qo(i,n){1&i&&(t.ynx(0),t._uU(1," \u672a\u80fd\u8fdb\u884c\u9a8c\u8bc1 "),t.BQk())}function Yo(i,n){if(1&i&&(t.YNc(0,Qo,2,0,"ng-container",6),t.YNc(1,Vo,2,0,"ng-container",6),t.YNc(2,Lo,2,0,"ng-container",6),t.YNc(3,qo,2,0,"ng-container",6)),2&i){const e=n.$implicit;t.Q6J("ngIf",e.hasError("required")),t.xp6(1),t.Q6J("ngIf",e.hasError("notADirectory")),t.xp6(1),t.Q6J("ngIf",e.hasError("noPermissions")),t.xp6(1),t.Q6J("ngIf",e.hasError("failedToValidate"))}}function Wo(i,n){if(1&i&&(t.ynx(0),t.TgZ(1,"form",2)(2,"nz-form-item")(3,"nz-form-control",3),t._UZ(4,"input",4),t.YNc(5,Yo,4,4,"ng-template",null,5,t.W1O),t.qZA()()(),t.BQk()),2&i){const e=t.MAs(6),o=t.oxw();t.xp6(1),t.Q6J("formGroup",o.settingsForm),t.xp6(2),t.Q6J("nzErrorTip",e)}}class kt{constructor(n,e,o){this.changeDetector=e,this.validationService=o,this.value="",this.visible=!1,this.visibleChange=new t.vpe,this.cancel=new t.vpe,this.confirm=new t.vpe,this.outDirAsyncValidator=a=>this.validationService.validateDir(a.value).pipe((0,T.U)(s=>{switch(s.code){case ot.ENOTDIR:return{error:!0,notADirectory:!0};case ot.EACCES:return{error:!0,noPermissions:!0};default:return null}}),(0,w.K)(()=>(0,ie.of)({error:!0,failedToValidate:!0}))),this.settingsForm=n.group({outDir:["",[r.kI.required],[this.outDirAsyncValidator]]})}get control(){return this.settingsForm.get("outDir")}ngOnChanges(){this.setValue()}open(){this.setValue(),this.setVisible(!0)}close(){this.setVisible(!1)}setVisible(n){this.visible=n,this.visibleChange.emit(n),this.changeDetector.markForCheck()}setValue(){this.control.setValue(this.value),this.changeDetector.markForCheck()}handleCancel(){this.cancel.emit(),this.close()}handleConfirm(){this.confirm.emit(this.control.value.trim()),this.close()}}function Ro(i,n){1&i&&(t.ynx(0),t._uU(1," \u8bf7\u8f93\u5165\u8def\u5f84\u6a21\u677f "),t.BQk())}function Go(i,n){1&i&&(t.ynx(0),t._uU(1," \u8def\u5f84\u6a21\u677f\u6709\u9519\u8bef "),t.BQk())}function Ho(i,n){if(1&i&&(t.YNc(0,Ro,2,0,"ng-container",12),t.YNc(1,Go,2,0,"ng-container",12)),2&i){const e=n.$implicit;t.Q6J("ngIf",e.hasError("required")),t.xp6(1),t.Q6J("ngIf",e.hasError("pattern"))}}function $o(i,n){if(1&i&&(t.TgZ(0,"tr")(1,"td"),t._uU(2),t.qZA(),t.TgZ(3,"td"),t._uU(4),t.qZA()()),2&i){const e=n.$implicit;t.xp6(2),t.Oqu(e.name),t.xp6(2),t.Oqu(e.desc)}}function Ko(i,n){if(1&i&&(t.ynx(0),t.TgZ(1,"form",3)(2,"nz-form-item")(3,"nz-form-control",4),t._UZ(4,"input",5),t.YNc(5,Ho,2,2,"ng-template",null,6,t.W1O),t.qZA()(),t.TgZ(7,"nz-collapse")(8,"nz-collapse-panel",7)(9,"nz-table",8,9)(11,"thead")(12,"tr")(13,"th"),t._uU(14,"\u53d8\u91cf"),t.qZA(),t.TgZ(15,"th"),t._uU(16,"\u8bf4\u660e"),t.qZA()()(),t.TgZ(17,"tbody"),t.YNc(18,$o,5,2,"tr",10),t.qZA()(),t.TgZ(19,"p",11)(20,"strong"),t._uU(21," \u6ce8\u610f\uff1a\u53d8\u91cf\u540d\u5fc5\u987b\u653e\u5728\u82b1\u62ec\u53f7\u4e2d\uff01\u4f7f\u7528\u65e5\u671f\u65f6\u95f4\u53d8\u91cf\u4ee5\u907f\u514d\u547d\u540d\u51b2\u7a81\uff01 "),t.qZA()()()()(),t.BQk()),2&i){const e=t.MAs(6),o=t.MAs(10),a=t.oxw();t.xp6(1),t.Q6J("formGroup",a.settingsForm),t.xp6(2),t.Q6J("nzErrorTip",e),t.xp6(1),t.Q6J("pattern",a.pathTemplatePattern),t.xp6(5),t.Q6J("nzData",a.pathTemplateVariables)("nzPageSize",11)("nzShowPagination",!1)("nzSize","small"),t.xp6(9),t.Q6J("ngForOf",o.data)}}function Xo(i,n){if(1&i){const e=t.EpF();t.TgZ(0,"button",13),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.restoreDefault())}),t._uU(1," \u6062\u590d\u9ed8\u8ba4 "),t.qZA(),t.TgZ(2,"button",14),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.handleCancel())}),t._uU(3,"\u53d6\u6d88"),t.qZA(),t.TgZ(4,"button",13),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.handleConfirm())}),t._uU(5," \u786e\u5b9a "),t.qZA()}if(2&i){const e=t.oxw();t.Q6J("disabled",e.control.value.trim()===e.pathTemplateDefault),t.xp6(4),t.Q6J("disabled",e.control.invalid||e.control.value.trim()===e.value)}}kt.\u0275fac=function(n){return new(n||kt)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(Y))},kt.\u0275cmp=t.Xpm({type:kt,selectors:[["app-outdir-edit-dialog"]],inputs:{value:"value",visible:"visible"},outputs:{visibleChange:"visibleChange",cancel:"cancel",confirm:"confirm"},features:[t.TTD],decls:2,vars:2,consts:[["nzTitle","\u4fee\u6539\u6587\u4ef6\u5b58\u653e\u76ee\u5f55","nzCentered","",3,"nzVisible","nzOkDisabled","nzVisibleChange","nzOnOk","nzOnCancel"],[4,"nzModalContent"],["nz-form","",3,"formGroup"],["nzHasFeedback","","nzValidatingTip","\u6b63\u5728\u9a8c\u9a8c...",3,"nzErrorTip"],["type","text","required","","nz-input","","formControlName","outDir"],["errorTip",""],[4,"ngIf"]],template:function(n,e){1&n&&(t.TgZ(0,"nz-modal",0),t.NdJ("nzVisibleChange",function(a){return e.visible=a})("nzOnOk",function(){return e.handleConfirm()})("nzOnCancel",function(){return e.handleCancel()}),t.YNc(1,Wo,7,2,"ng-container",1),t.qZA()),2&n&&t.Q6J("nzVisible",e.visible)("nzOkDisabled",e.control.invalid||e.control.value.trim()===e.value)},dependencies:[p.O5,r._Y,r.Fj,r.JJ,r.JL,r.Q7,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.Fd,O.Zp,_.du,_.Hf],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class Dt{constructor(n,e){this.changeDetector=e,this.value="",this.visible=!1,this.visibleChange=new t.vpe,this.cancel=new t.vpe,this.confirm=new t.vpe,this.pathTemplatePattern=d._m,this.pathTemplateDefault=d.ip,this.pathTemplateVariables=d.Dr,this.settingsForm=n.group({pathTemplate:["",[r.kI.required,r.kI.pattern(this.pathTemplatePattern)]]})}get control(){return this.settingsForm.get("pathTemplate")}ngOnChanges(){this.setValue()}open(){this.setValue(),this.setVisible(!0)}close(){this.setVisible(!1)}setVisible(n){this.visible=n,this.visibleChange.emit(n),this.changeDetector.markForCheck()}setValue(){this.control.setValue(this.value),this.changeDetector.markForCheck()}handleCancel(){this.cancel.emit(),this.close()}handleConfirm(){this.confirm.emit(this.control.value.trim()),this.close()}restoreDefault(){this.control.setValue(this.pathTemplateDefault)}}function jo(i,n){1&i&&(t.TgZ(0,"p"),t._uU(1," \u81ea\u52a8\u5206\u5272\u6587\u4ef6\u4ee5\u9650\u5236\u5f55\u64ad\u6587\u4ef6\u5927\u5c0f "),t._UZ(2,"br"),t._uU(3," \u683c\u5f0f\uff1a\u6570\u5b57 + \u5355\u4f4d(GB, MB, KB, B) "),t._UZ(4,"br"),t._uU(5," \u4e0d\u81ea\u52a8\u5206\u5272\u6587\u4ef6\u8bbe\u7f6e\u4e3a "),t.TgZ(6,"strong"),t._uU(7,"0 B"),t.qZA(),t._UZ(8,"br"),t.qZA())}function ta(i,n){1&i&&(t.TgZ(0,"p"),t._uU(1," \u81ea\u52a8\u5206\u5272\u6587\u4ef6\u4ee5\u9650\u5236\u5f55\u64ad\u6587\u4ef6\u65f6\u957f "),t._UZ(2,"br"),t._uU(3," \u683c\u5f0f\uff1aHH:MM:SS "),t._UZ(4,"br"),t._uU(5," \u4e0d\u81ea\u52a8\u5206\u5272\u6587\u4ef6\u8bbe\u7f6e\u4e3a "),t.TgZ(6,"strong"),t._uU(7,"00:00:00"),t.qZA(),t._UZ(8,"br"),t.qZA())}Dt.\u0275fac=function(n){return new(n||Dt)(t.Y36(r.qu),t.Y36(t.sBO))},Dt.\u0275cmp=t.Xpm({type:Dt,selectors:[["app-path-template-edit-dialog"]],inputs:{value:"value",visible:"visible"},outputs:{visibleChange:"visibleChange",cancel:"cancel",confirm:"confirm"},features:[t.TTD],decls:3,vars:2,consts:[["nzTitle","\u4fee\u6539\u6587\u4ef6\u8def\u5f84\u6a21\u677f","nzCentered","",3,"nzVisible","nzOkDisabled","nzVisibleChange"],[4,"nzModalContent"],[3,"nzModalFooter"],["nz-form","",3,"formGroup"],[3,"nzErrorTip"],["type","text","required","","nz-input","","formControlName","pathTemplate",3,"pattern"],["errorTip",""],["nzHeader","\u6a21\u677f\u53d8\u91cf\u8bf4\u660e"],[3,"nzData","nzPageSize","nzShowPagination","nzSize"],["table",""],[4,"ngFor","ngForOf"],[1,"footnote"],[4,"ngIf"],["nz-button","","nzType","default",3,"disabled","click"],["nz-button","","nzType","default",3,"click"]],template:function(n,e){1&n&&(t.TgZ(0,"nz-modal",0),t.NdJ("nzVisibleChange",function(a){return e.visible=a}),t.YNc(1,Ko,22,8,"ng-container",1),t.YNc(2,Xo,6,2,"ng-template",2),t.qZA()),2&n&&t.Q6J("nzVisible",e.visible)("nzOkDisabled",e.control.invalid||e.control.value.trim()===e.value)},dependencies:[p.sg,p.O5,r._Y,r.Fj,r.JJ,r.JL,r.Q7,r.c5,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.Fd,O.Zp,_.du,_.Uh,_.Hf,Q.ix,I.w,dt.dQ,H.N8,H.Uo,H._C,H.Om,H.p0,H.$Z,Mi,Ne],styles:[".footnote[_ngcontent-%COMP%]{margin-top:1em;margin-bottom:0}"],changeDetection:0});class Et{constructor(n,e,o){this.changeDetector=e,this.settingsSyncService=o,this.syncFailedWarningTip=d.yT,this.settingsForm=n.group({outDir:[""],pathTemplate:[""],filesizeLimit:["",[r.kI.required,r.kI.min(0),r.kI.max(0xf9ff5c28f5)]],durationLimit:["",[r.kI.required,r.kI.min(0),r.kI.max(359999)]]})}get outDirControl(){return this.settingsForm.get("outDir")}get pathTemplateControl(){return this.settingsForm.get("pathTemplate")}get filesizeLimitControl(){return this.settingsForm.get("filesizeLimit")}get durationLimitControl(){return this.settingsForm.get("durationLimit")}ngOnChanges(){this.syncStatus=M(this.settings,()=>!0),this.settingsForm.setValue(this.settings)}ngOnInit(){this.settingsSyncService.syncSettings("output",this.settings,this.settingsForm.valueChanges.pipe((0,at.Sc)(this.settingsForm))).subscribe(n=>{this.syncStatus={...this.syncStatus,...P(n)},this.changeDetector.markForCheck()})}}Et.\u0275fac=function(n){return new(n||Et)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(z))},Et.\u0275cmp=t.Xpm({type:Et,selectors:[["app-output-settings"]],inputs:{settings:"settings"},features:[t.TTD],decls:31,vars:15,consts:[["nz-form","",3,"formGroup"],[1,"setting-item","actionable",3,"click"],[1,"setting-label"],[3,"nzWarningTip","nzValidateStatus"],[1,"setting-value"],[3,"value","confirm"],["outDirEditDialog",""],["pathTemplateEditDialog",""],[1,"setting-item"],["nzNoColon","",1,"setting-label",3,"nzTooltipTitle"],["filesizeLimitTip",""],[1,"setting-control","select",3,"nzWarningTip","nzValidateStatus"],["formControlName","filesizeLimit"],["durationLimitTip",""],["formControlName","durationLimit"]],template:function(n,e){if(1&n){const o=t.EpF();t.TgZ(0,"form",0)(1,"nz-form-item",1),t.NdJ("click",function(){t.CHM(o);const s=t.MAs(8);return t.KtG(s.open())}),t.TgZ(2,"nz-form-label",2),t._uU(3,"\u5b58\u653e\u76ee\u5f55"),t.qZA(),t.TgZ(4,"nz-form-control",3)(5,"nz-form-text",4),t._uU(6),t.qZA(),t.TgZ(7,"app-outdir-edit-dialog",5,6),t.NdJ("confirm",function(s){return e.outDirControl.setValue(s)}),t.qZA()()(),t.TgZ(9,"nz-form-item",1),t.NdJ("click",function(){t.CHM(o);const s=t.MAs(16);return t.KtG(s.open())}),t.TgZ(10,"nz-form-label",2),t._uU(11,"\u8def\u5f84\u6a21\u677f"),t.qZA(),t.TgZ(12,"nz-form-control",3)(13,"nz-form-text",4),t._uU(14),t.qZA(),t.TgZ(15,"app-path-template-edit-dialog",5,7),t.NdJ("confirm",function(s){return e.pathTemplateControl.setValue(s)}),t.qZA()()(),t.TgZ(17,"nz-form-item",8)(18,"nz-form-label",9),t._uU(19,"\u5927\u5c0f\u9650\u5236"),t.qZA(),t.YNc(20,jo,9,0,"ng-template",null,10,t.W1O),t.TgZ(22,"nz-form-control",11),t._UZ(23,"app-input-filesize",12),t.qZA()(),t.TgZ(24,"nz-form-item",8)(25,"nz-form-label",9),t._uU(26,"\u65f6\u957f\u9650\u5236"),t.qZA(),t.YNc(27,ta,9,0,"ng-template",null,13,t.W1O),t.TgZ(29,"nz-form-control",11),t._UZ(30,"app-input-duration",14),t.qZA()()()}if(2&n){const o=t.MAs(21),a=t.MAs(28);t.Q6J("formGroup",e.settingsForm),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.outDir?e.outDirControl:"warning"),t.xp6(2),t.hij("",e.outDirControl.value," "),t.xp6(1),t.Q6J("value",e.outDirControl.value),t.xp6(5),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.pathTemplate?e.pathTemplateControl:"warning"),t.xp6(2),t.hij("",e.pathTemplateControl.value," "),t.xp6(1),t.Q6J("value",e.pathTemplateControl.value),t.xp6(3),t.Q6J("nzTooltipTitle",o),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.filesizeLimit?e.filesizeLimitControl:"warning"),t.xp6(3),t.Q6J("nzTooltipTitle",a),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.durationLimit?e.durationLimitControl:"warning")}},dependencies:[r._Y,r.JJ,r.JL,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,l.EF,Io.i,Jo.q,kt,Dt],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class Zt{}Zt.\u0275fac=function(n){return new(n||Zt)},Zt.\u0275cmp=t.Xpm({type:Zt,selectors:[["app-webhook-settings"]],decls:5,vars:0,consts:[["routerLink","webhooks",1,"setting-item"],[1,"setting-label"],[1,"setting-control"],["nz-icon","","nzType","right"]],template:function(n,e){1&n&&(t.TgZ(0,"a",0)(1,"span",1),t._uU(2,"Webhooks"),t.qZA(),t.TgZ(3,"span",2),t._UZ(4,"i",3),t.qZA()())},dependencies:[v.rH,I.w,lt.Ls],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class Nt{validate(n){return(i=>{const o=i.value.split("\n").map(a=>a.trim()).filter(a=>!!a).filter(a=>!/^https?:\/\/\S+$/.test(a));return o.length>0?{baseUrl:{value:o}}:null})(n)}}function ea(i,n){1&i&&(t.ynx(0),t._uU(1," \u4e0d\u80fd\u4e3a\u7a7a "),t.BQk())}function na(i,n){if(1&i&&(t.ynx(0),t._uU(1),t.ALo(2,"json"),t.BQk()),2&i){const e=t.oxw().$implicit;t.xp6(1),t.hij(" \u8f93\u5165\u65e0\u6548: ",t.lcZ(2,1,e.getError("baseUrl").value)," ")}}function ia(i,n){if(1&i&&(t.YNc(0,ea,2,0,"ng-container",7),t.YNc(1,na,3,3,"ng-container",7)),2&i){const e=n.$implicit;t.Q6J("ngIf",e.hasError("required")),t.xp6(1),t.Q6J("ngIf",e.hasError("baseUrl"))}}function oa(i,n){if(1&i&&(t.ynx(0),t.TgZ(1,"form",3)(2,"nz-form-item")(3,"nz-form-control",4),t._UZ(4,"textarea",5),t.YNc(5,ia,2,2,"ng-template",null,6,t.W1O),t.qZA()()(),t.BQk()),2&i){const e=t.MAs(6),o=t.oxw();t.xp6(1),t.Q6J("formGroup",o.settingsForm),t.xp6(2),t.Q6J("nzErrorTip",e),t.xp6(1),t.Q6J("rows",5)}}function aa(i,n){if(1&i){const e=t.EpF();t.TgZ(0,"button",8),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.restoreDefault())}),t._uU(1," \u6062\u590d\u9ed8\u8ba4 "),t.qZA(),t.TgZ(2,"button",9),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.handleCancel())}),t._uU(3,"\u53d6\u6d88"),t.qZA(),t.TgZ(4,"button",10),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.handleConfirm())}),t._uU(5," \u786e\u5b9a "),t.qZA()}if(2&i){const e=t.oxw();t.Q6J("disabled",e.control.value.trim()===e.defaultBaseApiUrl),t.xp6(4),t.Q6J("disabled",e.control.invalid||e.control.value.trim()===e.value)}}Nt.\u0275fac=function(n){return new(n||Nt)},Nt.\u0275dir=t.lG2({type:Nt,selectors:[["","appBaseUrlValidator",""]],features:[t._Bn([{provide:r.Cf,useExisting:Nt,multi:!0}])]});class Bt{constructor(n,e){this.changeDetector=e,this.value=[],this.visible=!1,this.visibleChange=new t.vpe,this.cancel=new t.vpe,this.confirm=new t.vpe,this.defaultBaseApiUrl=d.QL,this.settingsForm=n.group({baseApiUrls:["",[r.kI.required,i=>{const o=i.value.split("\n").map(a=>a.trim()).filter(a=>!!a).filter(a=>!/^https?:\/\/\S+$/.test(a));return o.length>0?{baseUrl:{value:o}}:null}]]})}get control(){return this.settingsForm.get("baseApiUrls")}ngOnChanges(){this.setValue()}open(){this.setValue(),this.setVisible(!0)}close(){this.setVisible(!1)}setVisible(n){this.visible=n,this.visibleChange.emit(n),this.changeDetector.markForCheck()}setValue(){this.control.setValue(this.value.join("\n")),this.changeDetector.markForCheck()}handleCancel(){this.cancel.emit(),this.close()}handleConfirm(){const e=this.control.value.split("\n").map(o=>o.trim()).filter(o=>!!o);this.confirm.emit(e),this.close()}restoreDefault(){this.control.setValue(this.defaultBaseApiUrl)}}function ra(i,n){1&i&&(t.ynx(0),t._uU(1," \u4e0d\u80fd\u4e3a\u7a7a "),t.BQk())}function sa(i,n){if(1&i&&(t.ynx(0),t._uU(1),t.ALo(2,"json"),t.BQk()),2&i){const e=t.oxw().$implicit;t.xp6(1),t.hij(" \u8f93\u5165\u65e0\u6548: ",t.lcZ(2,1,e.getError("baseUrl").value)," ")}}function la(i,n){if(1&i&&(t.YNc(0,ra,2,0,"ng-container",7),t.YNc(1,sa,3,3,"ng-container",7)),2&i){const e=n.$implicit;t.Q6J("ngIf",e.hasError("required")),t.xp6(1),t.Q6J("ngIf",e.hasError("baseUrl"))}}function ca(i,n){if(1&i&&(t.ynx(0),t.TgZ(1,"form",3)(2,"nz-form-item")(3,"nz-form-control",4),t._UZ(4,"textarea",5),t.YNc(5,la,2,2,"ng-template",null,6,t.W1O),t.qZA()()(),t.BQk()),2&i){const e=t.MAs(6),o=t.oxw();t.xp6(1),t.Q6J("formGroup",o.settingsForm),t.xp6(2),t.Q6J("nzErrorTip",e),t.xp6(1),t.Q6J("rows",5)}}function ga(i,n){if(1&i){const e=t.EpF();t.TgZ(0,"button",8),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.restoreDefault())}),t._uU(1," \u6062\u590d\u9ed8\u8ba4 "),t.qZA(),t.TgZ(2,"button",9),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.handleCancel())}),t._uU(3,"\u53d6\u6d88"),t.qZA(),t.TgZ(4,"button",10),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.handleConfirm())}),t._uU(5," \u786e\u5b9a "),t.qZA()}if(2&i){const e=t.oxw();t.Q6J("disabled",e.control.value.trim()===e.defaultBaseLiveApiUrl),t.xp6(4),t.Q6J("disabled",e.control.invalid||e.control.value.trim()===e.value)}}Bt.\u0275fac=function(n){return new(n||Bt)(t.Y36(r.qu),t.Y36(t.sBO))},Bt.\u0275cmp=t.Xpm({type:Bt,selectors:[["app-base-api-url-edit-dialog"]],inputs:{value:"value",visible:"visible"},outputs:{visibleChange:"visibleChange",cancel:"cancel",confirm:"confirm"},features:[t.TTD],decls:3,vars:2,consts:[["nzTitle","\u4fee\u6539\u4e3b\u7ad9 API \u4e3b\u673a\u5730\u5740","nzCentered","",3,"nzVisible","nzOkDisabled","nzVisibleChange"],[4,"nzModalContent"],[3,"nzModalFooter"],["nz-form","",3,"formGroup"],[3,"nzErrorTip"],["wrap","soft","nz-input","","required","","formControlName","baseApiUrls",3,"rows"],["errorTip",""],[4,"ngIf"],["nz-button","","nzType","default",3,"disabled","click"],["nz-button","","nzType","default",3,"click"],["nz-button","","nzDanger","","nzType","default",3,"disabled","click"]],template:function(n,e){1&n&&(t.TgZ(0,"nz-modal",0),t.NdJ("nzVisibleChange",function(a){return e.visible=a}),t.YNc(1,oa,7,3,"ng-container",1),t.YNc(2,aa,6,2,"ng-template",2),t.qZA()),2&n&&t.Q6J("nzVisible",e.visible)("nzOkDisabled",e.control.invalid||e.control.value.trim()===e.value)},dependencies:[p.O5,r._Y,r.Fj,r.JJ,r.JL,r.Q7,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.Fd,O.Zp,_.du,_.Uh,_.Hf,Q.ix,I.w,dt.dQ,p.Ts],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class Ut{constructor(n,e){this.changeDetector=e,this.value=[],this.visible=!1,this.visibleChange=new t.vpe,this.cancel=new t.vpe,this.confirm=new t.vpe,this.defaultBaseLiveApiUrl=d.gZ,this.settingsForm=n.group({baseLiveApiUrls:["",[r.kI.required,i=>{const o=i.value.split("\n").map(a=>a.trim()).filter(a=>!!a).filter(a=>!/^https?:\/\/\S+$/.test(a));return o.length>0?{baseUrl:{value:o}}:null}]]})}get control(){return this.settingsForm.get("baseLiveApiUrls")}ngOnChanges(){this.setValue()}open(){this.setValue(),this.setVisible(!0)}close(){this.setVisible(!1)}setVisible(n){this.visible=n,this.visibleChange.emit(n),this.changeDetector.markForCheck()}setValue(){this.control.setValue(this.value.join("\n")),this.changeDetector.markForCheck()}handleCancel(){this.cancel.emit(),this.close()}handleConfirm(){const e=this.control.value.split("\n").map(o=>o.trim()).filter(o=>!!o);this.confirm.emit(e),this.close()}restoreDefault(){this.control.setValue(this.defaultBaseLiveApiUrl)}}function ua(i,n){1&i&&(t.ynx(0),t._uU(1," \u4e0d\u80fd\u4e3a\u7a7a "),t.BQk())}function ma(i,n){if(1&i&&(t.ynx(0),t._uU(1),t.ALo(2,"json"),t.BQk()),2&i){const e=t.oxw().$implicit;t.xp6(1),t.hij(" \u8f93\u5165\u65e0\u6548: ",t.lcZ(2,1,e.getError("baseUrl").value)," ")}}function pa(i,n){if(1&i&&(t.YNc(0,ua,2,0,"ng-container",7),t.YNc(1,ma,3,3,"ng-container",7)),2&i){const e=n.$implicit;t.Q6J("ngIf",e.hasError("required")),t.xp6(1),t.Q6J("ngIf",e.hasError("baseUrl"))}}function da(i,n){if(1&i&&(t.ynx(0),t.TgZ(1,"form",3)(2,"nz-form-item")(3,"nz-form-control",4),t._UZ(4,"textarea",5),t.YNc(5,pa,2,2,"ng-template",null,6,t.W1O),t.qZA()()(),t.BQk()),2&i){const e=t.MAs(6),o=t.oxw();t.xp6(1),t.Q6J("formGroup",o.settingsForm),t.xp6(2),t.Q6J("nzErrorTip",e),t.xp6(1),t.Q6J("rows",5)}}function ha(i,n){if(1&i){const e=t.EpF();t.TgZ(0,"button",8),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.restoreDefault())}),t._uU(1," \u6062\u590d\u9ed8\u8ba4 "),t.qZA(),t.TgZ(2,"button",9),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.handleCancel())}),t._uU(3,"\u53d6\u6d88"),t.qZA(),t.TgZ(4,"button",10),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.handleConfirm())}),t._uU(5," \u786e\u5b9a "),t.qZA()}if(2&i){const e=t.oxw();t.Q6J("disabled",e.control.value.trim()===e.defaultBasePlayInfoApiUrl),t.xp6(4),t.Q6J("disabled",e.control.invalid||e.control.value.trim()===e.value)}}Ut.\u0275fac=function(n){return new(n||Ut)(t.Y36(r.qu),t.Y36(t.sBO))},Ut.\u0275cmp=t.Xpm({type:Ut,selectors:[["app-base-live-api-url-edit-dialog"]],inputs:{value:"value",visible:"visible"},outputs:{visibleChange:"visibleChange",cancel:"cancel",confirm:"confirm"},features:[t.TTD],decls:3,vars:2,consts:[["nzTitle","\u4fee\u6539\u76f4\u64ad API \u4e3b\u673a\u5730\u5740","nzCentered","",3,"nzVisible","nzOkDisabled","nzVisibleChange"],[4,"nzModalContent"],[3,"nzModalFooter"],["nz-form","",3,"formGroup"],[3,"nzErrorTip"],["wrap","soft","nz-input","","required","","formControlName","baseLiveApiUrls",3,"rows"],["errorTip",""],[4,"ngIf"],["nz-button","","nzType","default",3,"disabled","click"],["nz-button","","nzType","default",3,"click"],["nz-button","","nzDanger","","nzType","default",3,"disabled","click"]],template:function(n,e){1&n&&(t.TgZ(0,"nz-modal",0),t.NdJ("nzVisibleChange",function(a){return e.visible=a}),t.YNc(1,ca,7,3,"ng-container",1),t.YNc(2,ga,6,2,"ng-template",2),t.qZA()),2&n&&t.Q6J("nzVisible",e.visible)("nzOkDisabled",e.control.invalid||e.control.value.trim()===e.value)},dependencies:[p.O5,r._Y,r.Fj,r.JJ,r.JL,r.Q7,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.Fd,O.Zp,_.du,_.Uh,_.Hf,Q.ix,I.w,dt.dQ,p.Ts],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class It{constructor(n,e){this.changeDetector=e,this.value=[],this.visible=!1,this.visibleChange=new t.vpe,this.cancel=new t.vpe,this.confirm=new t.vpe,this.defaultBasePlayInfoApiUrl=d.gZ,this.settingsForm=n.group({basePlayInfoApiUrls:["",[r.kI.required,i=>{const o=i.value.split("\n").map(a=>a.trim()).filter(a=>!!a).filter(a=>!/^https?:\/\/\S+$/.test(a));return o.length>0?{baseUrl:{value:o}}:null}]]})}get control(){return this.settingsForm.get("basePlayInfoApiUrls")}ngOnChanges(){this.setValue()}open(){this.setValue(),this.setVisible(!0)}close(){this.setVisible(!1)}setVisible(n){this.visible=n,this.visibleChange.emit(n),this.changeDetector.markForCheck()}setValue(){this.control.setValue(this.value.join("\n")),this.changeDetector.markForCheck()}handleCancel(){this.cancel.emit(),this.close()}handleConfirm(){const e=this.control.value.split("\n").map(o=>o.trim()).filter(o=>!!o);this.confirm.emit(e),this.close()}restoreDefault(){this.control.setValue(this.defaultBasePlayInfoApiUrl)}}function _a(i,n){1&i&&(t.TgZ(0,"p"),t._uU(1,"\u8bbe\u7f6e\u5185\u5bb9\uff1a\u53d1\u9001\u4e3b\u7ad9 API \u8bf7\u6c42\u6240\u7528\u7684\u4e3b\u673a\u7684\u5730\u5740\uff0c\u4e00\u884c\u4e00\u4e2a\u3002"),t.qZA(),t.TgZ(2,"p"),t._uU(3,"\u8bf7\u6c42\u65b9\u5f0f\uff1a\u5148\u7528\u7b2c\u4e00\u4e2a\u53d1\u9001\u8bf7\u6c42\uff0c\u51fa\u9519\u5c31\u7528\u7b2c\u4e8c\u4e2a\uff0c\u4ee5\u6b64\u7c7b\u63a8\u3002"),t.qZA(),t.TgZ(4,"p"),t._uU(5,"\u4e3b\u8981\u76ee\u7684\uff1a\u7f13\u89e3\u8bf7\u6c42\u8fc7\u591a\u88ab\u98ce\u63a7"),t.qZA())}function fa(i,n){1&i&&(t.TgZ(0,"p"),t._uU(1," \u8bbe\u7f6e\u5185\u5bb9\uff1a\u53d1\u9001\u76f4\u64ad API (\u76f4\u64ad\u6d41 API getRoomPlayInfo \u9664\u5916) \u8bf7\u6c42\u6240\u7528\u7684\u4e3b\u673a\u7684\u5730\u5740\uff0c\u4e00\u884c\u4e00\u4e2a\u3002 "),t.qZA(),t.TgZ(2,"p"),t._uU(3,"\u8bf7\u6c42\u65b9\u5f0f\uff1a\u5148\u7528\u7b2c\u4e00\u4e2a\u53d1\u9001\u8bf7\u6c42\uff0c\u51fa\u9519\u5c31\u7528\u7b2c\u4e8c\u4e2a\uff0c\u4ee5\u6b64\u7c7b\u63a8\u3002"),t.qZA(),t.TgZ(4,"p"),t._uU(5,"\u4e3b\u8981\u76ee\u7684\uff1a\u7f13\u89e3\u8bf7\u6c42\u8fc7\u591a\u88ab\u98ce\u63a7"),t.qZA())}function Ca(i,n){1&i&&(t.TgZ(0,"p"),t._uU(1," \u8bbe\u7f6e\u5185\u5bb9\uff1a\u53d1\u9001\u76f4\u64ad\u6d41 API (getRoomPlayInfo) \u8bf7\u6c42\u6240\u7528\u7684\u4e3b\u673a\u7684\u5730\u5740\uff0c\u4e00\u884c\u4e00\u4e2a\u3002 "),t.qZA(),t.TgZ(2,"p"),t._uU(3," \u8bf7\u6c42\u65b9\u5f0f\uff1a\u540c\u65f6\u5e76\u53d1\u5411\u5168\u90e8 API \u4e3b\u673a\u53d1\u9001\u8bf7\u6c42\uff08\u4ece\u5168\u90e8\u6210\u529f\u7684\u8bf7\u6c42\u7ed3\u679c\u4e2d\u63d0\u53d6\u76f4\u64ad\u6d41\u8d28\u91cf\u8f83\u597d\u7684\u76f4\u64ad\u6d41\u5730\u5740\uff09 "),t.qZA(),t.TgZ(4,"p"),t._uU(5,"\u4e3b\u8981\u76ee\u7684\uff1a\u6539\u53d8\u5f55\u5236\u7684\u76f4\u64ad\u6d41\u7684 CDN"),t.qZA(),t.TgZ(6,"p"),t._uU(7," P.S\uff1a\u56fd\u5916 IP \u7684\u8bf7\u6c42\u7ed3\u679c\u6ca1\u6709 HLS(fmp4) \u6d41\uff0c\u8981\u540c\u65f6\u652f\u6301 fmp4 \u548c flv \u53ef\u4ee5\u6df7\u7528\u56fd\u5185\u548c\u56fd\u5916\u7684 API \u4e3b\u673a\u3002 "),t.qZA())}It.\u0275fac=function(n){return new(n||It)(t.Y36(r.qu),t.Y36(t.sBO))},It.\u0275cmp=t.Xpm({type:It,selectors:[["app-base-play-info-api-url-edit-dialog"]],inputs:{value:"value",visible:"visible"},outputs:{visibleChange:"visibleChange",cancel:"cancel",confirm:"confirm"},features:[t.TTD],decls:3,vars:2,consts:[["nzTitle","\u4fee\u6539\u76f4\u64ad\u6d41 API \u4e3b\u673a\u5730\u5740","nzCentered","",3,"nzVisible","nzOkDisabled","nzVisibleChange"],[4,"nzModalContent"],[3,"nzModalFooter"],["nz-form","",3,"formGroup"],[3,"nzErrorTip"],["wrap","soft","nz-input","","required","","formControlName","basePlayInfoApiUrls",3,"rows"],["errorTip",""],[4,"ngIf"],["nz-button","","nzType","default",3,"disabled","click"],["nz-button","","nzType","default",3,"click"],["nz-button","","nzDanger","","nzType","default",3,"disabled","click"]],template:function(n,e){1&n&&(t.TgZ(0,"nz-modal",0),t.NdJ("nzVisibleChange",function(a){return e.visible=a}),t.YNc(1,da,7,3,"ng-container",1),t.YNc(2,ha,6,2,"ng-template",2),t.qZA()),2&n&&t.Q6J("nzVisible",e.visible)("nzOkDisabled",e.control.invalid||e.control.value.trim()===e.value)},dependencies:[p.O5,r._Y,r.Fj,r.JJ,r.JL,r.Q7,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.Fd,O.Zp,_.du,_.Uh,_.Hf,Q.ix,I.w,dt.dQ,p.Ts],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class Jt{constructor(n,e,o){this.changeDetector=e,this.settingsSyncService=o,this.syncFailedWarningTip=d.yT,this.settingsForm=n.group({baseApiUrls:[[]],baseLiveApiUrls:[[]],basePlayInfoApiUrls:[[]]})}get baseApiUrlsControl(){return this.settingsForm.get("baseApiUrls")}get baseLiveApiUrlsControl(){return this.settingsForm.get("baseLiveApiUrls")}get basePlayInfoApiUrlsControl(){return this.settingsForm.get("basePlayInfoApiUrls")}ngOnChanges(){this.syncStatus=M(this.settings,()=>!0),this.settingsForm.setValue(this.settings)}ngOnInit(){this.settingsSyncService.syncSettings("biliApi",this.settings,this.settingsForm.valueChanges,!1).subscribe(n=>{this.syncStatus={...this.syncStatus,...P(n)},this.changeDetector.markForCheck()})}}Jt.\u0275fac=function(n){return new(n||Jt)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(z))},Jt.\u0275cmp=t.Xpm({type:Jt,selectors:[["app-bili-api-settings"]],inputs:{settings:"settings"},features:[t.TTD],decls:31,vars:16,consts:[["nz-form","",3,"formGroup"],[1,"setting-item","actionable",3,"click"],[1,"setting-label",3,"nzTooltipTitle"],["baseApiUrlsTip",""],[3,"nzWarningTip","nzValidateStatus"],[1,"setting-value"],[3,"value","confirm"],["baseApiUrlsEditDialog",""],["baseLiveApiUrlsTip",""],["baseLiveApiUrlsEditDialog",""],["basePalyInfoApiUrlTip",""],["basePlayInfoApiUrlsEditDialog",""]],template:function(n,e){if(1&n){const o=t.EpF();t.TgZ(0,"form",0)(1,"nz-form-item",1),t.NdJ("click",function(){t.CHM(o);const s=t.MAs(10);return t.KtG(s.open())}),t.TgZ(2,"nz-form-label",2),t._uU(3,"\u4e3b\u7ad9 API \u4e3b\u673a\u5730\u5740"),t.qZA(),t.YNc(4,_a,6,0,"ng-template",null,3,t.W1O),t.TgZ(6,"nz-form-control",4)(7,"nz-form-text",5),t._uU(8),t.qZA(),t.TgZ(9,"app-base-api-url-edit-dialog",6,7),t.NdJ("confirm",function(s){return e.baseApiUrlsControl.setValue(s)}),t.qZA()()(),t.TgZ(11,"nz-form-item",1),t.NdJ("click",function(){t.CHM(o);const s=t.MAs(20);return t.KtG(s.open())}),t.TgZ(12,"nz-form-label",2),t._uU(13,"\u76f4\u64ad API \u4e3b\u673a\u5730\u5740"),t.qZA(),t.YNc(14,fa,6,0,"ng-template",null,8,t.W1O),t.TgZ(16,"nz-form-control",4)(17,"nz-form-text",5),t._uU(18),t.qZA(),t.TgZ(19,"app-base-live-api-url-edit-dialog",6,9),t.NdJ("confirm",function(s){return e.baseLiveApiUrlsControl.setValue(s)}),t.qZA()()(),t.TgZ(21,"nz-form-item",1),t.NdJ("click",function(){t.CHM(o);const s=t.MAs(30);return t.KtG(s.open())}),t.TgZ(22,"nz-form-label",2),t._uU(23,"\u76f4\u64ad\u6d41 API \u4e3b\u673a\u5730\u5740"),t.qZA(),t.YNc(24,Ca,8,0,"ng-template",null,10,t.W1O),t.TgZ(26,"nz-form-control",4)(27,"nz-form-text",5),t._uU(28),t.qZA(),t.TgZ(29,"app-base-play-info-api-url-edit-dialog",6,11),t.NdJ("confirm",function(s){return e.basePlayInfoApiUrlsControl.setValue(s)}),t.qZA()()()()}if(2&n){const o=t.MAs(5),a=t.MAs(15),s=t.MAs(25);t.Q6J("formGroup",e.settingsForm),t.xp6(2),t.Q6J("nzTooltipTitle",o),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.baseApiUrls?e.baseApiUrlsControl:"warning"),t.xp6(2),t.hij("",e.baseApiUrlsControl.value," "),t.xp6(1),t.Q6J("value",e.baseApiUrlsControl.value),t.xp6(3),t.Q6J("nzTooltipTitle",a),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.baseLiveApiUrls?e.baseLiveApiUrlsControl:"warning"),t.xp6(2),t.hij("",e.baseLiveApiUrlsControl.value," "),t.xp6(1),t.Q6J("value",e.baseLiveApiUrlsControl.value),t.xp6(3),t.Q6J("nzTooltipTitle",s),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.basePlayInfoApiUrls?e.basePlayInfoApiUrlsControl:"warning"),t.xp6(2),t.hij("",e.basePlayInfoApiUrlsControl.value," "),t.xp6(1),t.Q6J("value",e.basePlayInfoApiUrlsControl.value)}},dependencies:[r._Y,r.JL,r.sg,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,l.EF,Bt,Ut,It],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}nz-form-control[_ngcontent-%COMP%]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}"],changeDetection:0});const va=["innerContent"];class Qt{constructor(n,e,o,a){this.changeDetector=n,this.route=e,this.logger=o,this.routerScrollService=a}ngOnInit(){this.route.data.subscribe(n=>{this.settings=n.settings,this.changeDetector.markForCheck()})}ngAfterViewInit(){this.innerContent?this.routerScrollService.setCustomViewportToScroll(this.innerContent.nativeElement):this.logger.error("The content element could not be found!")}}Qt.\u0275fac=function(n){return new(n||Qt)(t.Y36(t.sBO),t.Y36(v.gz),t.Y36(Z.Kf),t.Y36(pt))},Qt.\u0275cmp=t.Xpm({type:Qt,selectors:[["app-settings"]],viewQuery:function(n,e){if(1&n&&t.Gf(va,5),2&n){let o;t.iGM(o=t.CRH())&&(e.innerContent=o.first)}},decls:24,vars:8,consts:[[1,"inner-content"],["innerContent",""],[1,"main-settings","settings-page"],[1,"settings-page-content"],["name","\u6587\u4ef6"],[3,"settings"],["name","\u5f55\u5236"],["name","\u5f39\u5e55"],["name","\u6587\u4ef6\u5904\u7406"],["name","\u786c\u76d8\u7a7a\u95f4"],["name","BILI API"],["name","\u7f51\u7edc\u8bf7\u6c42"],["name","\u65e5\u5fd7"],["name","\u901a\u77e5"],["name","Webhook"]],template:function(n,e){1&n&&(t.TgZ(0,"div",0,1)(2,"div",2)(3,"div",3)(4,"app-page-section",4),t._UZ(5,"app-output-settings",5),t.qZA(),t.TgZ(6,"app-page-section",6),t._UZ(7,"app-recorder-settings",5),t.qZA(),t.TgZ(8,"app-page-section",7),t._UZ(9,"app-danmaku-settings",5),t.qZA(),t.TgZ(10,"app-page-section",8),t._UZ(11,"app-post-processing-settings",5),t.qZA(),t.TgZ(12,"app-page-section",9),t._UZ(13,"app-disk-space-settings",5),t.qZA(),t.TgZ(14,"app-page-section",10),t._UZ(15,"app-bili-api-settings",5),t.qZA(),t.TgZ(16,"app-page-section",11),t._UZ(17,"app-header-settings",5),t.qZA(),t.TgZ(18,"app-page-section",12),t._UZ(19,"app-logging-settings",5),t.qZA(),t.TgZ(20,"app-page-section",13),t._UZ(21,"app-notification-settings"),t.qZA(),t.TgZ(22,"app-page-section",14),t._UZ(23,"app-webhook-settings"),t.qZA()()()()),2&n&&(t.xp6(5),t.Q6J("settings",e.settings.output),t.xp6(2),t.Q6J("settings",e.settings.recorder),t.xp6(2),t.Q6J("settings",e.settings.danmaku),t.xp6(2),t.Q6J("settings",e.settings.postprocessing),t.xp6(2),t.Q6J("settings",e.settings.space),t.xp6(2),t.Q6J("settings",e.settings.biliApi),t.xp6(2),t.Q6J("settings",e.settings.header),t.xp6(2),t.Q6J("settings",e.settings.logging))},dependencies:[q.g,xt,Ot,Pt,Tt,wt,Ft,At,Et,Zt,Jt],styles:[".inner-content[_ngcontent-%COMP%]{height:100%;width:100%;position:relative;display:block;margin:0;padding:1rem;background:#f1f1f1;overflow:auto}.settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}.inner-content[_ngcontent-%COMP%]{padding-top:0}"]});var za=c(7298),xa=c(6198),Ge=c(3449),Oa=c(2168);const ba=function Ma(i,n,e,o){if(!(0,Mt.Z)(i))return i;for(var a=-1,s=(n=(0,Ge.Z)(n,i)).length,g=s-1,m=i;null!=m&&++a0&&e(m)?n>1?Ke(m,n-1,e,o,a):(0,ya.Z)(a,m):o||(a[a.length]=m)}return a},Za=function Ea(i){return null!=i&&i.length?Da(i,1):[]},Ba=function Na(i,n,e){switch(e.length){case 0:return i.call(n);case 1:return i.call(n,e[0]);case 2:return i.call(n,e[0],e[1]);case 3:return i.call(n,e[0],e[1],e[2])}return i.apply(n,e)};var Xe=Math.max;const Qa=function Ja(i){return function(){return i}};var je=c(2370),Va=c(9940),Ya=800,Wa=16,Ra=Date.now;const $a=function Ga(i){var n=0,e=0;return function(){var o=Ra(),a=Wa-(o-e);if(e=o,a>0){if(++n>=Ya)return arguments[0]}else n=0;return i.apply(void 0,arguments)}}(je.Z?function(i,n){return(0,je.Z)(i,"toString",{configurable:!0,enumerable:!1,value:Qa(n),writable:!0})}:Va.Z),f=function Ka(i){return $a(function Ua(i,n,e){return n=Xe(void 0===n?i.length-1:n,0),function(){for(var o=arguments,a=-1,s=Xe(o.length-n,0),g=Array(s);++a!0),this.settingsForm.setValue(this.settings)}ngOnInit(){this.settingsSyncService.syncSettings(this.keyOfSettings,this.settingsForm.value,this.settingsForm.valueChanges).subscribe(n=>{this.syncStatus={...this.syncStatus,...P(n)},this.changeDetector.markForCheck()})}}N.\u0275fac=function(n){return new(n||N)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(z))},N.\u0275cmp=t.Xpm({type:N,selectors:[["app-event-settings"]],inputs:{settings:"settings",keyOfSettings:"keyOfSettings"},features:[t.TTD],decls:21,vars:9,consts:[["nz-form","",3,"formGroup"],["appSwitchActionable","",1,"setting-item"],["nzNoColon","",1,"setting-label"],[1,"setting-control","switch",3,"nzWarningTip","nzValidateStatus"],["formControlName","notifyBegan"],["formControlName","notifyEnded"],["formControlName","notifyError"],["formControlName","notifySpace"]],template:function(n,e){1&n&&(t.TgZ(0,"form",0)(1,"nz-form-item",1)(2,"nz-form-label",2),t._uU(3,"\u5f00\u64ad\u53d1\u9001\u901a\u77e5"),t.qZA(),t.TgZ(4,"nz-form-control",3),t._UZ(5,"nz-switch",4),t.qZA()(),t.TgZ(6,"nz-form-item",1)(7,"nz-form-label",2),t._uU(8,"\u4e0b\u64ad\u53d1\u9001\u901a\u77e5"),t.qZA(),t.TgZ(9,"nz-form-control",3),t._UZ(10,"nz-switch",5),t.qZA()(),t.TgZ(11,"nz-form-item",1)(12,"nz-form-label",2),t._uU(13,"\u51fa\u9519\u53d1\u9001\u901a\u77e5"),t.qZA(),t.TgZ(14,"nz-form-control",3),t._UZ(15,"nz-switch",6),t.qZA()(),t.TgZ(16,"nz-form-item",1)(17,"nz-form-label",2),t._uU(18,"\u7a7a\u95f4\u4e0d\u8db3\u53d1\u9001\u901a\u77e5"),t.qZA(),t.TgZ(19,"nz-form-control",3),t._UZ(20,"nz-switch",7),t.qZA()()()),2&n&&(t.Q6J("formGroup",e.settingsForm),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.notifyBegan?e.notifyBeganControl:"warning"),t.xp6(5),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.notifyEnded?e.notifyEndedControl:"warning"),t.xp6(5),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.notifyError?e.notifyErrorControl:"warning"),t.xp6(5),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.notifySpace?e.notifySpaceControl:"warning"))},dependencies:[r._Y,r.JJ,r.JL,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,U.i,y],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});var ja=c(6422);function tr(i,n){1&i&&(t.ynx(0),t._uU(1," \u8bf7\u8f93\u5165\u90ae\u7bb1\u5730\u5740\uff01 "),t.BQk())}function er(i,n){1&i&&(t.ynx(0),t._uU(1," \u90ae\u7bb1\u5730\u5740\u65e0\u6548! "),t.BQk())}function nr(i,n){if(1&i&&(t.YNc(0,tr,2,0,"ng-container",17),t.YNc(1,er,2,0,"ng-container",17)),2&i){const e=n.$implicit;t.Q6J("ngIf",e.hasError("required")),t.xp6(1),t.Q6J("ngIf",e.hasError("email"))}}function ir(i,n){1&i&&(t.ynx(0),t._uU(1," \u8bf7\u8f93\u5165\u6388\u6743\u7801\uff01 "),t.BQk())}function or(i,n){1&i&&t.YNc(0,ir,2,0,"ng-container",17),2&i&&t.Q6J("ngIf",n.$implicit.hasError("required"))}function ar(i,n){1&i&&(t.ynx(0),t._uU(1," \u8bf7\u8f93\u5165 SMTP \u4e3b\u673a\uff01 "),t.BQk())}function rr(i,n){1&i&&t.YNc(0,ar,2,0,"ng-container",17),2&i&&t.Q6J("ngIf",n.$implicit.hasError("required"))}function sr(i,n){1&i&&(t.ynx(0),t._uU(1," \u8bf7\u8f93\u5165 SMTP \u7aef\u53e3\uff01 "),t.BQk())}function lr(i,n){1&i&&(t.ynx(0),t._uU(1," SMTP \u7aef\u53e3\u65e0\u6548\uff01 "),t.BQk())}function cr(i,n){if(1&i&&(t.YNc(0,sr,2,0,"ng-container",17),t.YNc(1,lr,2,0,"ng-container",17)),2&i){const e=n.$implicit;t.Q6J("ngIf",e.hasError("required")),t.xp6(1),t.Q6J("ngIf",e.hasError("pattern"))}}function gr(i,n){1&i&&(t.ynx(0),t._uU(1," \u8bf7\u8f93\u5165\u90ae\u7bb1\u5730\u5740\uff01 "),t.BQk())}function ur(i,n){1&i&&(t.ynx(0),t._uU(1," \u90ae\u7bb1\u5730\u5740\u65e0\u6548! "),t.BQk())}function mr(i,n){if(1&i&&(t.YNc(0,gr,2,0,"ng-container",17),t.YNc(1,ur,2,0,"ng-container",17)),2&i){const e=n.$implicit;t.Q6J("ngIf",e.hasError("required")),t.xp6(1),t.Q6J("ngIf",e.hasError("email"))}}class Vt{constructor(n,e,o){this.changeDetector=e,this.settingsSyncService=o,this.syncFailedWarningTip=d.yT,this.settingsForm=n.group({srcAddr:["",[r.kI.required,r.kI.email]],dstAddr:["",[r.kI.required,r.kI.email]],authCode:["",[r.kI.required]],smtpHost:["",[r.kI.required]],smtpPort:["",[r.kI.required,r.kI.pattern(/\d+/)]]})}get srcAddrControl(){return this.settingsForm.get("srcAddr")}get dstAddrControl(){return this.settingsForm.get("dstAddr")}get authCodeControl(){return this.settingsForm.get("authCode")}get smtpHostControl(){return this.settingsForm.get("smtpHost")}get smtpPortControl(){return this.settingsForm.get("smtpPort")}ngOnChanges(){this.syncStatus=M(this.settings,()=>!0),this.settingsForm.setValue(this.settings)}ngOnInit(){this.settingsSyncService.syncSettings("emailNotification",this.settings,this.settingsForm.valueChanges.pipe((0,at.Sc)(this.settingsForm),(0,T.U)(n=>(0,ja.Z)(n,(e,o,a)=>{o="smtpPort"===a?parseInt(o):o,Reflect.set(e,a,o)},{})))).subscribe(n=>{this.syncStatus={...this.syncStatus,...P(n)},this.changeDetector.markForCheck()})}}Vt.\u0275fac=function(n){return new(n||Vt)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(z))},Vt.\u0275cmp=t.Xpm({type:Vt,selectors:[["app-email-settings"]],inputs:{settings:"settings"},features:[t.TTD],decls:36,vars:16,consts:[["nz-form","",3,"formGroup"],[1,"setting-item"],["nzFor","srcAddr","nzNoColon","","nzRequired","",1,"setting-label"],["nzHasFeedback","",1,"setting-control","input",3,"nzErrorTip","nzWarningTip","nzValidateStatus"],["id","srcAddr","type","email","placeholder","\u53d1\u9001\u901a\u77e5\u7684\u90ae\u7bb1\u5730\u5740","required","","nz-input","","formControlName","srcAddr"],["emailErrorTip",""],["nzFor","authCode","nzNoColon","","nzRequired","",1,"setting-label"],["id","authCode","type","text","placeholder","\u53d1\u9001\u90ae\u7bb1\u7684 SMTP \u6388\u6743\u7801","required","","nz-input","","formControlName","authCode"],["authCodeErrorTip",""],["nzFor","smtpHost","nzNoColon","","nzRequired","",1,"setting-label"],["id","smtpHost","type","text","placeholder","\u53d1\u9001\u90ae\u7bb1\u7684 SMTP \u4e3b\u673a\uff0c\u4f8b\u5982\uff1asmtp.163.com \u3002","required","","nz-input","","formControlName","smtpHost"],["smtpHostErrorTip",""],["nzFor","smtpPort","nzNoColon","","nzRequired","",1,"setting-label"],["id","smtpPort","type","text","pattern","\\d+","placeholder","\u53d1\u9001\u90ae\u7bb1\u7684 SMTP \u4e3b\u673a\u7aef\u53e3\uff0c\u901a\u5e38\u4e3a 465 \u3002","required","","nz-input","","formControlName","smtpPort"],["smtpPortErrorTip",""],["nzFor","dstAddr","nzNoColon","","nzRequired","",1,"setting-label"],["id","dstAddr","type","email","placeholder","\u63a5\u6536\u901a\u77e5\u7684\u90ae\u7bb1\u5730\u5740\uff0c\u53ef\u4ee5\u548c\u53d1\u9001\u90ae\u7bb1\u76f8\u540c\u5b9e\u73b0\u81ea\u53d1\u81ea\u6536\u3002","required","","nz-input","","formControlName","dstAddr"],[4,"ngIf"]],template:function(n,e){if(1&n&&(t.TgZ(0,"form",0)(1,"nz-form-item",1)(2,"nz-form-label",2),t._uU(3,"\u53d1\u9001\u90ae\u7bb1"),t.qZA(),t.TgZ(4,"nz-form-control",3),t._UZ(5,"input",4),t.YNc(6,nr,2,2,"ng-template",null,5,t.W1O),t.qZA()(),t.TgZ(8,"nz-form-item",1)(9,"nz-form-label",6),t._uU(10,"\u6388\u6743\u7801"),t.qZA(),t.TgZ(11,"nz-form-control",3),t._UZ(12,"input",7),t.YNc(13,or,1,1,"ng-template",null,8,t.W1O),t.qZA()(),t.TgZ(15,"nz-form-item",1)(16,"nz-form-label",9),t._uU(17,"SMTP \u4e3b\u673a"),t.qZA(),t.TgZ(18,"nz-form-control",3),t._UZ(19,"input",10),t.YNc(20,rr,1,1,"ng-template",null,11,t.W1O),t.qZA()(),t.TgZ(22,"nz-form-item",1)(23,"nz-form-label",12),t._uU(24,"SMTP \u7aef\u53e3"),t.qZA(),t.TgZ(25,"nz-form-control",3),t._UZ(26,"input",13),t.YNc(27,cr,2,2,"ng-template",null,14,t.W1O),t.qZA()(),t.TgZ(29,"nz-form-item",1)(30,"nz-form-label",15),t._uU(31,"\u63a5\u6536\u90ae\u7bb1"),t.qZA(),t.TgZ(32,"nz-form-control",3),t._UZ(33,"input",16),t.YNc(34,mr,2,2,"ng-template",null,5,t.W1O),t.qZA()()()),2&n){const o=t.MAs(7),a=t.MAs(14),s=t.MAs(21),g=t.MAs(28);t.Q6J("formGroup",e.settingsForm),t.xp6(4),t.Q6J("nzErrorTip",o)("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.srcAddrControl.valid&&!e.syncStatus.srcAddr?"warning":e.srcAddrControl),t.xp6(7),t.Q6J("nzErrorTip",a)("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.authCodeControl.valid&&!e.syncStatus.authCode?"warning":e.authCodeControl),t.xp6(7),t.Q6J("nzErrorTip",s)("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.smtpHostControl.valid&&!e.syncStatus.smtpHost?"warning":e.smtpHostControl),t.xp6(7),t.Q6J("nzErrorTip",g)("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.smtpPortControl.valid&&!e.syncStatus.smtpPort?"warning":e.smtpPortControl),t.xp6(7),t.Q6J("nzErrorTip",o)("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.dstAddrControl.valid&&!e.syncStatus.dstAddr?"warning":e.dstAddrControl)}},dependencies:[p.O5,r._Y,r.Fj,r.JJ,r.JL,r.Q7,r.c5,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,O.Zp],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}.setting-label[_ngcontent-%COMP%]{max-width:6em!important;width:6em!important}"],changeDetection:0});class B{constructor(n,e,o){this.changeDetector=e,this.settingsSyncService=o,this.syncFailedWarningTip=d.yT,this.settingsForm=n.group({enabled:[""]})}get enabledControl(){return this.settingsForm.get("enabled")}ngOnChanges(){this.syncStatus=M(this.settings,()=>!0),this.settingsForm.setValue(this.settings)}ngOnInit(){this.settingsSyncService.syncSettings(this.keyOfSettings,this.settings,this.settingsForm.valueChanges).subscribe(n=>{this.syncStatus={...this.syncStatus,...P(n)},this.changeDetector.markForCheck()})}}B.\u0275fac=function(n){return new(n||B)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(z))},B.\u0275cmp=t.Xpm({type:B,selectors:[["app-notifier-settings"]],inputs:{settings:"settings",keyOfSettings:"keyOfSettings"},features:[t.TTD],decls:6,vars:3,consts:[["nz-form","",3,"formGroup"],["appSwitchActionable","",1,"setting-item"],["nzNoColon","",1,"setting-label"],[1,"setting-control","switch",3,"nzWarningTip","nzValidateStatus"],["formControlName","enabled"]],template:function(n,e){1&n&&(t.TgZ(0,"form",0)(1,"nz-form-item",1)(2,"nz-form-label",2),t._uU(3,"\u5141\u8bb8\u901a\u77e5"),t.qZA(),t.TgZ(4,"nz-form-control",3),t._UZ(5,"nz-switch",4),t.qZA()()()),2&n&&(t.Q6J("formGroup",e.settingsForm),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.enabled?e.enabledControl:"warning"))},dependencies:[r._Y,r.JJ,r.JL,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,U.i,y],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class A{constructor(n,e,o){this.changeDetector=n,this.message=e,this.settingService=o}ngOnInit(){switch(this.keyOfSettings){case"emailNotification":this.messageTypes=["text","html"];break;case"serverchanNotification":this.messageTypes=["markdown"];break;case"pushdeerNotification":this.messageTypes=["markdown","text"];break;case"pushplusNotification":this.messageTypes=["markdown","text","html"];break;case"telegramNotification":this.messageTypes=["markdown","html"]}}ngOnChanges(n){this.updateCommonSettings()}changeBeganMessageTemplateSettings(n){this.changeMessageTemplateSettings({beganMessageType:n.messageType,beganMessageTitle:n.messageTitle,beganMessageContent:n.messageContent}).subscribe()}changeEndedMessageTemplateSettings(n){this.changeMessageTemplateSettings({endedMessageType:n.messageType,endedMessageTitle:n.messageTitle,endedMessageContent:n.messageContent}).subscribe()}changeSpaceMessageTemplateSettings(n){this.changeMessageTemplateSettings({spaceMessageType:n.messageType,spaceMessageTitle:n.messageTitle,spaceMessageContent:n.messageContent}).subscribe()}changeErrorMessageTemplateSettings(n){this.changeMessageTemplateSettings({errorMessageType:n.messageType,errorMessageTitle:n.messageTitle,errorMessageContent:n.messageContent}).subscribe()}changeMessageTemplateSettings(n){return this.settingService.changeSettings({[this.keyOfSettings]:n}).pipe((0,F.X)(3,300),(0,re.b)(e=>{this.message.success("\u4fee\u6539\u6d88\u606f\u6a21\u677f\u8bbe\u7f6e\u6210\u529f"),this.settings={...this.settings,...e[this.keyOfSettings]},this.updateCommonSettings(),this.changeDetector.markForCheck()},e=>{this.message.error(`\u4fee\u6539\u6d88\u606f\u6a21\u677f\u8bbe\u7f6e\u51fa\u9519: ${e.message}`)}))}updateCommonSettings(){this.beganMessageTemplateSettings={messageType:this.settings.beganMessageType,messageTitle:this.settings.beganMessageTitle,messageContent:this.settings.beganMessageContent},this.endedMessageTemplateSettings={messageType:this.settings.endedMessageType,messageTitle:this.settings.endedMessageTitle,messageContent:this.settings.endedMessageContent},this.spaceMessageTemplateSettings={messageType:this.settings.spaceMessageType,messageTitle:this.settings.spaceMessageTitle,messageContent:this.settings.spaceMessageContent},this.errorMessageTemplateSettings={messageType:this.settings.errorMessageType,messageTitle:this.settings.errorMessageTitle,messageContent:this.settings.errorMessageContent}}}function pr(i,n){if(1&i&&(t.TgZ(0,"app-page-section"),t._UZ(1,"app-notifier-settings",2),t.qZA(),t.TgZ(2,"app-page-section",3),t._UZ(3,"app-email-settings",4),t.qZA(),t.TgZ(4,"app-page-section",5),t._UZ(5,"app-event-settings",2),t.qZA(),t.TgZ(6,"app-page-section",6),t._UZ(7,"app-message-template-settings",2),t.qZA()),2&i){const e=t.oxw();t.xp6(1),t.Q6J("settings",e.notifierSettings),t.xp6(2),t.Q6J("settings",e.emailSettings),t.xp6(2),t.Q6J("settings",e.notificationSettings),t.xp6(2),t.Q6J("settings",e.messageTemplateSettings)}}A.\u0275fac=function(n){return new(n||A)(t.Y36(t.sBO),t.Y36(se.dD),t.Y36(S.R))},A.\u0275cmp=t.Xpm({type:A,selectors:[["app-message-template-settings"]],inputs:{settings:"settings",keyOfSettings:"keyOfSettings"},features:[t.TTD],decls:20,vars:12,consts:[[1,"setting-item","actionable",3,"click"],[1,"setting-label"],[3,"title","value","messageTypes","confirm"],["beganMessageTemplateEditDialog",""],["endedMessageTemplateEditDialog",""],["errorMessageTemplateEditDialog",""],["spaceMessageTemplateEditDialog",""]],template:function(n,e){if(1&n){const o=t.EpF();t.TgZ(0,"a",0),t.NdJ("click",function(){t.CHM(o);const s=t.MAs(4);return t.KtG(s.open())}),t.TgZ(1,"span",1),t._uU(2,"\u5f00\u64ad\u6d88\u606f\u6a21\u677f"),t.qZA()(),t.TgZ(3,"app-message-template-edit-dialog",2,3),t.NdJ("confirm",function(s){return e.changeBeganMessageTemplateSettings(s)}),t.qZA(),t.TgZ(5,"a",0),t.NdJ("click",function(){t.CHM(o);const s=t.MAs(9);return t.KtG(s.open())}),t.TgZ(6,"span",1),t._uU(7,"\u4e0b\u64ad\u6d88\u606f\u6a21\u677f"),t.qZA()(),t.TgZ(8,"app-message-template-edit-dialog",2,4),t.NdJ("confirm",function(s){return e.changeEndedMessageTemplateSettings(s)}),t.qZA(),t.TgZ(10,"a",0),t.NdJ("click",function(){t.CHM(o);const s=t.MAs(14);return t.KtG(s.open())}),t.TgZ(11,"span",1),t._uU(12,"\u5f02\u5e38\u6d88\u606f\u6a21\u677f"),t.qZA()(),t.TgZ(13,"app-message-template-edit-dialog",2,5),t.NdJ("confirm",function(s){return e.changeErrorMessageTemplateSettings(s)}),t.qZA(),t.TgZ(15,"a",0),t.NdJ("click",function(){t.CHM(o);const s=t.MAs(19);return t.KtG(s.open())}),t.TgZ(16,"span",1),t._uU(17,"\u7a7a\u95f4\u4e0d\u8db3\u6d88\u606f\u6a21\u677f"),t.qZA()(),t.TgZ(18,"app-message-template-edit-dialog",2,6),t.NdJ("confirm",function(s){return e.changeSpaceMessageTemplateSettings(s)}),t.qZA()}2&n&&(t.xp6(3),t.Q6J("title","\u4fee\u6539\u5f00\u64ad\u6d88\u606f\u6a21\u677f")("value",e.beganMessageTemplateSettings)("messageTypes",e.messageTypes),t.xp6(5),t.Q6J("title","\u4fee\u6539\u4e0b\u64ad\u6d88\u606f\u6a21\u677f")("value",e.endedMessageTemplateSettings)("messageTypes",e.messageTypes),t.xp6(5),t.Q6J("title","\u4fee\u6539\u5f02\u5e38\u6d88\u606f\u6a21\u677f")("value",e.errorMessageTemplateSettings)("messageTypes",e.messageTypes),t.xp6(5),t.Q6J("title","\u4fee\u6539\u7a7a\u95f4\u4e0d\u8db3\u6d88\u606f\u6a21\u677f")("value",e.spaceMessageTemplateSettings)("messageTypes",e.messageTypes))},styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class Lt{constructor(n,e){this.changeDetector=n,this.route=e}ngOnInit(){this.route.data.subscribe(n=>{const e=n.settings;this.emailSettings=f(e,C.gP),this.notifierSettings=f(e,C._1),this.notificationSettings=f(e,C.X),this.messageTemplateSettings=f(e,C.tI),this.changeDetector.markForCheck()})}}function dr(i,n){1&i&&(t.ynx(0),t._uU(1," \u8bf7\u8f93\u5165 sendkey\uff01 "),t.BQk())}function hr(i,n){1&i&&(t.ynx(0),t._uU(1," sendkey \u65e0\u6548 "),t.BQk())}function _r(i,n){if(1&i&&(t.YNc(0,dr,2,0,"ng-container",6),t.YNc(1,hr,2,0,"ng-container",6)),2&i){const e=n.$implicit;t.Q6J("ngIf",e.hasError("required")),t.xp6(1),t.Q6J("ngIf",e.hasError("pattern"))}}Lt.\u0275fac=function(n){return new(n||Lt)(t.Y36(t.sBO),t.Y36(v.gz))},Lt.\u0275cmp=t.Xpm({type:Lt,selectors:[["app-email-notification-settings"]],decls:2,vars:0,consts:[["pageTitle","\u90ae\u4ef6\u901a\u77e5"],["appSubPageContent",""],["keyOfSettings","emailNotification",3,"settings"],["name","\u90ae\u7bb1"],[3,"settings"],["name","\u4e8b\u4ef6"],["name","\u6d88\u606f"]],template:function(n,e){1&n&&(t.TgZ(0,"app-sub-page",0),t.YNc(1,pr,8,4,"ng-template",1),t.qZA())},dependencies:[rt.Y,st.q,q.g,N,Vt,B,A],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class qt{constructor(n,e,o){this.changeDetector=e,this.settingsSyncService=o,this.syncFailedWarningTip=d.yT,this.settingsForm=n.group({sendkey:["",[r.kI.required,r.kI.pattern(/^[a-zA-Z\d]+$/)]]})}get sendkeyControl(){return this.settingsForm.get("sendkey")}ngOnChanges(){this.syncStatus=M(this.settings,()=>!0),this.settingsForm.setValue(this.settings)}ngOnInit(){this.settingsSyncService.syncSettings("serverchanNotification",this.settings,this.settingsForm.valueChanges.pipe((0,at.Sc)(this.settingsForm))).subscribe(n=>{this.syncStatus={...this.syncStatus,...P(n)},this.changeDetector.markForCheck()})}}function fr(i,n){if(1&i&&(t.TgZ(0,"app-page-section"),t._UZ(1,"app-notifier-settings",2),t.qZA(),t.TgZ(2,"app-page-section",3),t._UZ(3,"app-serverchan-settings",4),t.qZA(),t.TgZ(4,"app-page-section",5),t._UZ(5,"app-event-settings",2),t.qZA(),t.TgZ(6,"app-page-section",6),t._UZ(7,"app-message-template-settings",2),t.qZA()),2&i){const e=t.oxw();t.xp6(1),t.Q6J("settings",e.notifierSettings),t.xp6(2),t.Q6J("settings",e.serverchanSettings),t.xp6(2),t.Q6J("settings",e.notificationSettings),t.xp6(2),t.Q6J("settings",e.messageTemplateSettings)}}qt.\u0275fac=function(n){return new(n||qt)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(z))},qt.\u0275cmp=t.Xpm({type:qt,selectors:[["app-serverchan-settings"]],inputs:{settings:"settings"},features:[t.TTD],decls:8,vars:4,consts:[["nz-form","",3,"formGroup"],[1,"setting-item"],["nzFor","sendkey","nzNoColon","","nzRequired","",1,"setting-label"],["nzHasFeedback","",1,"setting-control","input",3,"nzErrorTip","nzWarningTip","nzValidateStatus"],["id","sendkey","type","text","required","","nz-input","","formControlName","sendkey"],["sendkeyErrorTip",""],[4,"ngIf"]],template:function(n,e){if(1&n&&(t.TgZ(0,"form",0)(1,"nz-form-item",1)(2,"nz-form-label",2),t._uU(3,"sendkey"),t.qZA(),t.TgZ(4,"nz-form-control",3),t._UZ(5,"input",4),t.YNc(6,_r,2,2,"ng-template",null,5,t.W1O),t.qZA()()()),2&n){const o=t.MAs(7);t.Q6J("formGroup",e.settingsForm),t.xp6(4),t.Q6J("nzErrorTip",o)("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.sendkeyControl.valid&&!e.syncStatus.sendkey?"warning":e.sendkeyControl)}},dependencies:[p.O5,r._Y,r.Fj,r.JJ,r.JL,r.Q7,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,O.Zp],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}.setting-label[_ngcontent-%COMP%]{max-width:5em!important;width:5em!important}"],changeDetection:0});class Yt{constructor(n,e){this.changeDetector=n,this.route=e}ngOnInit(){this.route.data.subscribe(n=>{const e=n.settings;this.serverchanSettings=f(e,C.gq),this.notifierSettings=f(e,C._1),this.notificationSettings=f(e,C.X),this.messageTemplateSettings=f(e,C.tI),this.changeDetector.markForCheck()})}}function Cr(i,n){1&i&&(t.ynx(0),t._uU(1," server \u65e0\u6548 "),t.BQk())}function vr(i,n){1&i&&t.YNc(0,Cr,2,0,"ng-container",9),2&i&&t.Q6J("ngIf",n.$implicit.hasError("pattern"))}function zr(i,n){1&i&&(t.ynx(0),t._uU(1," \u8bf7\u8f93\u5165 pushkey\uff01 "),t.BQk())}function xr(i,n){1&i&&(t.ynx(0),t._uU(1," pushkey \u65e0\u6548 "),t.BQk())}function Or(i,n){if(1&i&&(t.YNc(0,zr,2,0,"ng-container",9),t.YNc(1,xr,2,0,"ng-container",9)),2&i){const e=n.$implicit;t.Q6J("ngIf",e.hasError("required")),t.xp6(1),t.Q6J("ngIf",e.hasError("pattern"))}}Yt.\u0275fac=function(n){return new(n||Yt)(t.Y36(t.sBO),t.Y36(v.gz))},Yt.\u0275cmp=t.Xpm({type:Yt,selectors:[["app-serverchan-notification-settings"]],decls:2,vars:0,consts:[["pageTitle","ServerChan \u901a\u77e5"],["appSubPageContent",""],["keyOfSettings","serverchanNotification",3,"settings"],["name","ServerChan"],[3,"settings"],["name","\u4e8b\u4ef6"],["name","\u6d88\u606f"]],template:function(n,e){1&n&&(t.TgZ(0,"app-sub-page",0),t.YNc(1,fr,8,4,"ng-template",1),t.qZA())},dependencies:[rt.Y,st.q,q.g,N,qt,B,A],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class Wt{constructor(n,e,o){this.changeDetector=e,this.settingsSyncService=o,this.syncFailedWarningTip=d.yT,this.settingsForm=n.group({server:["",[r.kI.pattern(/^https?:\/\/.+/)]],pushkey:["",[r.kI.required,r.kI.pattern(/^PDU\d+T[a-zA-Z\d]{32}(,PDU\d+T[a-zA-Z\d]{32}){0,99}$/)]]})}get serverControl(){return this.settingsForm.get("server")}get pushkeyControl(){return this.settingsForm.get("pushkey")}ngOnChanges(){this.syncStatus=M(this.settings,()=>!0),console.log(this.settings),this.settingsForm.setValue(this.settings)}ngOnInit(){this.settingsSyncService.syncSettings("pushdeerNotification",this.settings,this.settingsForm.valueChanges.pipe((0,at.Sc)(this.settingsForm))).subscribe(n=>{this.syncStatus={...this.syncStatus,...P(n)},this.changeDetector.markForCheck()})}}function Mr(i,n){if(1&i&&(t.TgZ(0,"app-page-section"),t._UZ(1,"app-notifier-settings",2),t.qZA(),t.TgZ(2,"app-page-section",3),t._UZ(3,"app-pushdeer-settings",4),t.qZA(),t.TgZ(4,"app-page-section",5),t._UZ(5,"app-event-settings",2),t.qZA(),t.TgZ(6,"app-page-section",6),t._UZ(7,"app-message-template-settings",2),t.qZA()),2&i){const e=t.oxw();t.xp6(1),t.Q6J("settings",e.notifierSettings),t.xp6(2),t.Q6J("settings",e.pushdeerSettings),t.xp6(2),t.Q6J("settings",e.notificationSettings),t.xp6(2),t.Q6J("settings",e.messageTemplateSettings)}}Wt.\u0275fac=function(n){return new(n||Wt)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(z))},Wt.\u0275cmp=t.Xpm({type:Wt,selectors:[["app-pushdeer-settings"]],inputs:{settings:"settings"},features:[t.TTD],decls:15,vars:7,consts:[["nz-form","",3,"formGroup"],[1,"setting-item"],["nzFor","server","nzNoColon","",1,"setting-label","align-required"],["nzHasFeedback","",1,"setting-control","input",3,"nzErrorTip","nzWarningTip","nzValidateStatus"],["id","server","type","url","placeholder","\u9ed8\u8ba4\u4e3a\u5b98\u65b9\u670d\u52a1\u5668 https://api2.pushdeer.com","nz-input","","formControlName","server"],["serverErrorTip",""],["nzFor","pushkey","nzNoColon","","nzRequired","",1,"setting-label"],["id","pushkey","type","text","placeholder","\u591a\u4e2a key \u7528 , \u9694\u5f00\uff0c\u5728\u7ebf\u7248\u6700\u591a 10 \u4e2a\uff0c\u81ea\u67b6\u7248\u9ed8\u8ba4\u6700\u591a 100 \u4e2a\u3002","required","","nz-input","","formControlName","pushkey"],["pushkeyErrorTip",""],[4,"ngIf"]],template:function(n,e){if(1&n&&(t.TgZ(0,"form",0)(1,"nz-form-item",1)(2,"nz-form-label",2),t._uU(3,"server"),t.qZA(),t.TgZ(4,"nz-form-control",3),t._UZ(5,"input",4),t.YNc(6,vr,1,1,"ng-template",null,5,t.W1O),t.qZA()(),t.TgZ(8,"nz-form-item",1)(9,"nz-form-label",6),t._uU(10,"pushkey"),t.qZA(),t.TgZ(11,"nz-form-control",3),t._UZ(12,"input",7),t.YNc(13,Or,2,2,"ng-template",null,8,t.W1O),t.qZA()()()),2&n){const o=t.MAs(7),a=t.MAs(14);t.Q6J("formGroup",e.settingsForm),t.xp6(4),t.Q6J("nzErrorTip",o)("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.serverControl.valid&&!e.syncStatus.server?"warning":e.serverControl),t.xp6(7),t.Q6J("nzErrorTip",a)("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.pushkeyControl.valid&&!e.syncStatus.pushkey?"warning":e.pushkeyControl)}},dependencies:[p.O5,r._Y,r.Fj,r.JJ,r.JL,r.Q7,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,O.Zp],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}.setting-label[_ngcontent-%COMP%]{max-width:5em!important;width:5em!important}"],changeDetection:0});class Rt{constructor(n,e){this.changeDetector=n,this.route=e}ngOnInit(){this.route.data.subscribe(n=>{const e=n.settings;this.pushdeerSettings=f(e,C.jK),this.notifierSettings=f(e,C._1),this.notificationSettings=f(e,C.X),this.messageTemplateSettings=f(e,C.tI),this.changeDetector.markForCheck()})}}function br(i,n){1&i&&(t.ynx(0),t._uU(1," \u8bf7\u8f93\u5165 token\uff01 "),t.BQk())}function Pr(i,n){1&i&&(t.ynx(0),t._uU(1," token \u65e0\u6548 "),t.BQk())}function Tr(i,n){if(1&i&&(t.YNc(0,br,2,0,"ng-container",9),t.YNc(1,Pr,2,0,"ng-container",9)),2&i){const e=n.$implicit;t.Q6J("ngIf",e.hasError("required")),t.xp6(1),t.Q6J("ngIf",e.hasError("pattern"))}}Rt.\u0275fac=function(n){return new(n||Rt)(t.Y36(t.sBO),t.Y36(v.gz))},Rt.\u0275cmp=t.Xpm({type:Rt,selectors:[["app-pushdeer-notification-settings"]],decls:2,vars:0,consts:[["pageTitle","PushDeer \u901a\u77e5"],["appSubPageContent",""],["keyOfSettings","pushdeerNotification",3,"settings"],["name","PushDeer"],[3,"settings"],["name","\u4e8b\u4ef6"],["name","\u6d88\u606f"]],template:function(n,e){1&n&&(t.TgZ(0,"app-sub-page",0),t.YNc(1,Mr,8,4,"ng-template",1),t.qZA())},dependencies:[rt.Y,st.q,q.g,N,Wt,B,A],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class Gt{constructor(n,e,o){this.changeDetector=e,this.settingsSyncService=o,this.syncFailedWarningTip=d.yT,this.settingsForm=n.group({token:["",[r.kI.required,r.kI.pattern(/^[a-z\d]{32}$/)]],topic:[""]})}get tokenControl(){return this.settingsForm.get("token")}get topicControl(){return this.settingsForm.get("topic")}ngOnChanges(){this.syncStatus=M(this.settings,()=>!0),this.settingsForm.setValue(this.settings)}ngOnInit(){this.settingsSyncService.syncSettings("pushplusNotification",this.settings,this.settingsForm.valueChanges.pipe((0,at.Sc)(this.settingsForm))).subscribe(n=>{this.syncStatus={...this.syncStatus,...P(n)},this.changeDetector.markForCheck()})}}function wr(i,n){if(1&i&&(t.TgZ(0,"app-page-section"),t._UZ(1,"app-notifier-settings",2),t.qZA(),t.TgZ(2,"app-page-section",3),t._UZ(3,"app-pushplus-settings",4),t.qZA(),t.TgZ(4,"app-page-section",5),t._UZ(5,"app-event-settings",2),t.qZA(),t.TgZ(6,"app-page-section",6),t._UZ(7,"app-message-template-settings",2),t.qZA()),2&i){const e=t.oxw();t.xp6(1),t.Q6J("settings",e.notifierSettings),t.xp6(2),t.Q6J("settings",e.pushplusSettings),t.xp6(2),t.Q6J("settings",e.notificationSettings),t.xp6(2),t.Q6J("settings",e.messageTemplateSettings)}}Gt.\u0275fac=function(n){return new(n||Gt)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(z))},Gt.\u0275cmp=t.Xpm({type:Gt,selectors:[["app-pushplus-settings"]],inputs:{settings:"settings"},features:[t.TTD],decls:13,vars:6,consts:[["nz-form","",3,"formGroup"],[1,"setting-item"],["nzFor","token","nzNoColon","","nzRequired","",1,"setting-label","required"],["nzHasFeedback","",1,"setting-control","input",3,"nzErrorTip","nzWarningTip","nzValidateStatus"],["id","token","type","text","required","","nz-input","","formControlName","token"],["tokenErrorTip",""],["nzFor","topic","nzNoColon","",1,"setting-label","align-required"],[1,"setting-control","input",3,"nzWarningTip","nzValidateStatus"],["id","topic","type","text","nz-input","","formControlName","topic"],[4,"ngIf"]],template:function(n,e){if(1&n&&(t.TgZ(0,"form",0)(1,"nz-form-item",1)(2,"nz-form-label",2),t._uU(3,"token"),t.qZA(),t.TgZ(4,"nz-form-control",3),t._UZ(5,"input",4),t.YNc(6,Tr,2,2,"ng-template",null,5,t.W1O),t.qZA()(),t.TgZ(8,"nz-form-item",1)(9,"nz-form-label",6),t._uU(10,"topic"),t.qZA(),t.TgZ(11,"nz-form-control",7),t._UZ(12,"input",8),t.qZA()()()),2&n){const o=t.MAs(7);t.Q6J("formGroup",e.settingsForm),t.xp6(4),t.Q6J("nzErrorTip",o)("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.tokenControl.valid&&!e.syncStatus.token?"warning":e.tokenControl),t.xp6(7),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.topicControl.valid&&!e.syncStatus.topic?"warning":e.topicControl)}},dependencies:[p.O5,r._Y,r.Fj,r.JJ,r.JL,r.Q7,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,O.Zp],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}.setting-label[_ngcontent-%COMP%]{max-width:4em!important;width:4em!important}"],changeDetection:0});class Ht{constructor(n,e){this.changeDetector=n,this.route=e}ngOnInit(){this.route.data.subscribe(n=>{const e=n.settings;this.pushplusSettings=f(e,C.q1),this.notifierSettings=f(e,C._1),this.notificationSettings=f(e,C.X),this.messageTemplateSettings=f(e,C.tI),this.changeDetector.markForCheck()})}}function Fr(i,n){1&i&&(t.ynx(0),t._uU(1," \u8bf7\u8f93\u5165 token\uff01 "),t.BQk())}function Sr(i,n){1&i&&(t.ynx(0),t._uU(1," token \u65e0\u6548 "),t.BQk())}function yr(i,n){if(1&i&&(t.YNc(0,Fr,2,0,"ng-container",12),t.YNc(1,Sr,2,0,"ng-container",12)),2&i){const e=n.$implicit;t.Q6J("ngIf",e.hasError("required")),t.xp6(1),t.Q6J("ngIf",e.hasError("pattern"))}}function Ar(i,n){1&i&&(t.ynx(0),t._uU(1," \u8bf7\u8f93\u5165 chatid\uff01 "),t.BQk())}function kr(i,n){1&i&&(t.ynx(0),t._uU(1," chatid \u65e0\u6548 "),t.BQk())}function Dr(i,n){if(1&i&&(t.YNc(0,Ar,2,0,"ng-container",12),t.YNc(1,kr,2,0,"ng-container",12)),2&i){const e=n.$implicit;t.Q6J("ngIf",e.hasError("required")),t.xp6(1),t.Q6J("ngIf",e.hasError("pattern"))}}function Er(i,n){1&i&&(t.ynx(0),t._uU(1," server \u65e0\u6548 "),t.BQk())}function Zr(i,n){1&i&&t.YNc(0,Er,2,0,"ng-container",12),2&i&&t.Q6J("ngIf",n.$implicit.hasError("pattern"))}Ht.\u0275fac=function(n){return new(n||Ht)(t.Y36(t.sBO),t.Y36(v.gz))},Ht.\u0275cmp=t.Xpm({type:Ht,selectors:[["app-pushplus-notification-settings"]],decls:2,vars:0,consts:[["pageTitle","pushplus \u901a\u77e5"],["appSubPageContent",""],["keyOfSettings","pushplusNotification",3,"settings"],["name","pushplus"],[3,"settings"],["name","\u4e8b\u4ef6"],["name","\u6d88\u606f"]],template:function(n,e){1&n&&(t.TgZ(0,"app-sub-page",0),t.YNc(1,wr,8,4,"ng-template",1),t.qZA())},dependencies:[rt.Y,st.q,q.g,N,Gt,B,A],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class $t{constructor(n,e,o){this.changeDetector=e,this.settingsSyncService=o,this.syncFailedWarningTip=d.yT,this.settingsForm=n.group({token:["",[r.kI.required,r.kI.pattern(/^[0-9]{8,10}:[a-zA-Z0-9_-]{35}$/)]],chatid:["",[r.kI.required,r.kI.pattern(/^(-|[0-9]){0,}$/)]],server:["",[r.kI.pattern(/^https?:\/\/[a-zA-Z0-9-_.]+(:[0-9]+)?/)]]})}get tokenControl(){return this.settingsForm.get("token")}get chatidControl(){return this.settingsForm.get("chatid")}get serverControl(){return this.settingsForm.get("server")}ngOnChanges(){this.syncStatus=M(this.settings,()=>!0),console.log(this.settings),this.settingsForm.setValue(this.settings)}ngOnInit(){this.settingsSyncService.syncSettings("telegramNotification",this.settings,this.settingsForm.valueChanges.pipe((0,at.Sc)(this.settingsForm))).subscribe(n=>{this.syncStatus={...this.syncStatus,...P(n)},this.changeDetector.markForCheck()})}}function Nr(i,n){if(1&i&&(t.TgZ(0,"app-page-section"),t._UZ(1,"app-notifier-settings",2),t.qZA(),t.TgZ(2,"app-page-section",3),t._UZ(3,"app-telegram-settings",4),t.qZA(),t.TgZ(4,"app-page-section",5),t._UZ(5,"app-event-settings",2),t.qZA(),t.TgZ(6,"app-page-section",6),t._UZ(7,"app-message-template-settings",2),t.qZA()),2&i){const e=t.oxw();t.xp6(1),t.Q6J("settings",e.notifierSettings),t.xp6(2),t.Q6J("settings",e.telegramSettings),t.xp6(2),t.Q6J("settings",e.notificationSettings),t.xp6(2),t.Q6J("settings",e.messageTemplateSettings)}}$t.\u0275fac=function(n){return new(n||$t)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(z))},$t.\u0275cmp=t.Xpm({type:$t,selectors:[["app-telegram-settings"]],inputs:{settings:"settings"},features:[t.TTD],decls:22,vars:10,consts:[["nz-form","",3,"formGroup"],[1,"setting-item"],["nzFor","token","nzNoColon","","nzRequired","",1,"setting-label","required"],["nzHasFeedback","",1,"setting-control","input",3,"nzErrorTip","nzWarningTip","nzValidateStatus"],["id","token","type","text","required","","nz-input","","formControlName","token"],["tokenErrorTip",""],["nzFor","chatid","nzNoColon","","nzRequired","",1,"setting-label"],["id","chatid","type","text","required","","nz-input","","formControlName","chatid"],["chatidErrorTip",""],["nzFor","server","nzNoColon","",1,"setting-label","align-required"],["id","server","type","url","placeholder","\u9ed8\u8ba4\u4e3a\u5b98\u65b9\u63a5\u53e3 https://api.telegram.org","nz-input","","formControlName","server"],["serverErrorTip",""],[4,"ngIf"]],template:function(n,e){if(1&n&&(t.TgZ(0,"form",0)(1,"nz-form-item",1)(2,"nz-form-label",2),t._uU(3,"token"),t.qZA(),t.TgZ(4,"nz-form-control",3),t._UZ(5,"input",4),t.YNc(6,yr,2,2,"ng-template",null,5,t.W1O),t.qZA()(),t.TgZ(8,"nz-form-item",1)(9,"nz-form-label",6),t._uU(10,"chatid"),t.qZA(),t.TgZ(11,"nz-form-control",3),t._UZ(12,"input",7),t.YNc(13,Dr,2,2,"ng-template",null,8,t.W1O),t.qZA()(),t.TgZ(15,"nz-form-item",1)(16,"nz-form-label",9),t._uU(17,"server"),t.qZA(),t.TgZ(18,"nz-form-control",3),t._UZ(19,"input",10),t.YNc(20,Zr,1,1,"ng-template",null,11,t.W1O),t.qZA()()()),2&n){const o=t.MAs(7),a=t.MAs(14),s=t.MAs(21);t.Q6J("formGroup",e.settingsForm),t.xp6(4),t.Q6J("nzErrorTip",o)("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.tokenControl.valid&&!e.syncStatus.token?"warning":e.tokenControl),t.xp6(7),t.Q6J("nzErrorTip",a)("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.chatidControl.valid&&!e.syncStatus.chatid?"warning":e.chatidControl),t.xp6(7),t.Q6J("nzErrorTip",s)("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.serverControl.valid&&!e.syncStatus.server?"warning":e.serverControl)}},dependencies:[p.O5,r._Y,r.Fj,r.JJ,r.JL,r.Q7,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,O.Zp],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}.setting-label[_ngcontent-%COMP%]{max-width:4em!important;width:4em!important}"],changeDetection:0});class Kt{constructor(n,e){this.changeDetector=n,this.route=e}ngOnInit(){this.route.data.subscribe(n=>{const e=n.settings;this.telegramSettings=f(e,C.wA),this.notifierSettings=f(e,C._1),this.notificationSettings=f(e,C.X),this.messageTemplateSettings=f(e,C.tI),this.changeDetector.markForCheck()})}}function Br(i,n){1&i&&(t.ynx(0),t._uU(1," server \u65e0\u6548 "),t.BQk())}function Ur(i,n){1&i&&t.YNc(0,Br,2,0,"ng-container",9),2&i&&t.Q6J("ngIf",n.$implicit.hasError("pattern"))}function Ir(i,n){1&i&&(t.ynx(0),t._uU(1," \u8bf7\u8f93\u5165 pushkey\uff01 "),t.BQk())}function Jr(i,n){1&i&&(t.ynx(0),t._uU(1," pushkey \u65e0\u6548 "),t.BQk())}function Qr(i,n){if(1&i&&(t.YNc(0,Ir,2,0,"ng-container",9),t.YNc(1,Jr,2,0,"ng-container",9)),2&i){const e=n.$implicit;t.Q6J("ngIf",e.hasError("required")),t.xp6(1),t.Q6J("ngIf",e.hasError("pattern"))}}Kt.\u0275fac=function(n){return new(n||Kt)(t.Y36(t.sBO),t.Y36(v.gz))},Kt.\u0275cmp=t.Xpm({type:Kt,selectors:[["app-telegram-notification-settings"]],decls:2,vars:0,consts:[["pageTitle","telegram \u901a\u77e5"],["appSubPageContent",""],["keyOfSettings","telegramNotification",3,"settings"],["name","telegram"],[3,"settings"],["name","\u4e8b\u4ef6"],["name","\u6d88\u606f"]],template:function(n,e){1&n&&(t.TgZ(0,"app-sub-page",0),t.YNc(1,Nr,8,4,"ng-template",1),t.qZA())},dependencies:[rt.Y,st.q,q.g,N,$t,B,A],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class Xt{constructor(n,e,o){this.changeDetector=e,this.settingsSyncService=o,this.syncFailedWarningTip=d.yT,this.settingsForm=n.group({server:["",[r.kI.pattern(/^https?:\/\/.+/)]],pushkey:["",[r.kI.required,r.kI.pattern(/^[a-zA-Z\d]+$/)]]})}get serverControl(){return this.settingsForm.get("server")}get pushkeyControl(){return this.settingsForm.get("pushkey")}ngOnChanges(){this.syncStatus=M(this.settings,()=>!0),console.log(this.settings),this.settingsForm.setValue(this.settings)}ngOnInit(){this.settingsSyncService.syncSettings("barkNotification",this.settings,this.settingsForm.valueChanges.pipe((0,at.Sc)(this.settingsForm))).subscribe(n=>{this.syncStatus={...this.syncStatus,...P(n)},this.changeDetector.markForCheck()})}}function Vr(i,n){if(1&i&&(t.TgZ(0,"app-page-section"),t._UZ(1,"app-notifier-settings",2),t.qZA(),t.TgZ(2,"app-page-section",3),t._UZ(3,"app-bark-settings",4),t.qZA(),t.TgZ(4,"app-page-section",5),t._UZ(5,"app-event-settings",2),t.qZA(),t.TgZ(6,"app-page-section",6),t._UZ(7,"app-message-template-settings",2),t.qZA()),2&i){const e=t.oxw();t.xp6(1),t.Q6J("settings",e.notifierSettings),t.xp6(2),t.Q6J("settings",e.barkSettings),t.xp6(2),t.Q6J("settings",e.notificationSettings),t.xp6(2),t.Q6J("settings",e.messageTemplateSettings)}}Xt.\u0275fac=function(n){return new(n||Xt)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(z))},Xt.\u0275cmp=t.Xpm({type:Xt,selectors:[["app-bark-settings"]],inputs:{settings:"settings"},features:[t.TTD],decls:15,vars:7,consts:[["nz-form","",3,"formGroup"],[1,"setting-item"],["nzFor","server","nzNoColon","",1,"setting-label","align-required"],["nzHasFeedback","",1,"setting-control","input",3,"nzErrorTip","nzWarningTip","nzValidateStatus"],["id","server","type","url","placeholder","\u9ed8\u8ba4\u4e3a\u5b98\u65b9\u670d\u52a1\u5668\uff0c\u5982\u679c\u81ea\u5b9a\u4e49\u670d\u52a1\u5668\u4e14url\u5e26\u8def\u5f84\uff0curl\u672b\u5c3e\u8bf7\u52a0\u4e0a/","nz-input","","formControlName","server"],["serverErrorTip",""],["nzFor","pushkey","nzNoColon","","nzRequired","",1,"setting-label"],["id","pushkey","type","text","placeholder","","required","","nz-input","","formControlName","pushkey"],["pushkeyErrorTip",""],[4,"ngIf"]],template:function(n,e){if(1&n&&(t.TgZ(0,"form",0)(1,"nz-form-item",1)(2,"nz-form-label",2),t._uU(3,"server"),t.qZA(),t.TgZ(4,"nz-form-control",3),t._UZ(5,"input",4),t.YNc(6,Ur,1,1,"ng-template",null,5,t.W1O),t.qZA()(),t.TgZ(8,"nz-form-item",1)(9,"nz-form-label",6),t._uU(10,"pushkey"),t.qZA(),t.TgZ(11,"nz-form-control",3),t._UZ(12,"input",7),t.YNc(13,Qr,2,2,"ng-template",null,8,t.W1O),t.qZA()()()),2&n){const o=t.MAs(7),a=t.MAs(14);t.Q6J("formGroup",e.settingsForm),t.xp6(4),t.Q6J("nzErrorTip",o)("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.serverControl.valid&&!e.syncStatus.server?"warning":e.serverControl),t.xp6(7),t.Q6J("nzErrorTip",a)("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.pushkeyControl.valid&&!e.syncStatus.pushkey?"warning":e.pushkeyControl)}},dependencies:[p.O5,r._Y,r.Fj,r.JJ,r.JL,r.Q7,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,O.Zp],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}.setting-label[_ngcontent-%COMP%]{max-width:5em!important;width:5em!important}"],changeDetection:0});class jt{constructor(n,e){this.changeDetector=n,this.route=e}ngOnInit(){this.route.data.subscribe(n=>{const e=n.settings;this.barkSettings=f(e,C.LV),this.notifierSettings=f(e,C._1),this.notificationSettings=f(e,C.X),this.messageTemplateSettings=f(e,C.tI),this.changeDetector.markForCheck()})}}function Lr(i,n){1&i&&(t.ynx(0),t._uU(1," \u8bf7\u8f93\u5165 url\uff01 "),t.BQk())}function qr(i,n){1&i&&(t.ynx(0),t._uU(1," url \u65e0\u6548\uff01 "),t.BQk())}function Yr(i,n){if(1&i&&(t.YNc(0,Lr,2,0,"ng-container",29),t.YNc(1,qr,2,0,"ng-container",29)),2&i){const e=n.$implicit;t.Q6J("ngIf",e.hasError("required")),t.xp6(1),t.Q6J("ngIf",e.hasError("pattern"))}}function Wr(i,n){if(1&i){const e=t.EpF();t.ynx(0),t.TgZ(1,"form",2)(2,"nz-form-item",3)(3,"nz-form-label",4),t._uU(4,"URL"),t.qZA(),t.TgZ(5,"nz-form-control",5),t._UZ(6,"input",6),t.YNc(7,Yr,2,2,"ng-template",null,7,t.W1O),t.qZA()(),t.TgZ(9,"div",8)(10,"h2"),t._uU(11,"\u4e8b\u4ef6"),t.qZA(),t.TgZ(12,"nz-form-item",3)(13,"nz-form-control",9)(14,"label",10),t.NdJ("nzCheckedChange",function(a){t.CHM(e);const s=t.oxw();return t.KtG(s.setAllChecked(a))}),t._uU(15,"\u5168\u9009"),t.qZA()()(),t.TgZ(16,"nz-form-item",3)(17,"nz-form-control",11)(18,"label",12),t._uU(19,"\u5f00\u64ad"),t.qZA()()(),t.TgZ(20,"nz-form-item",3)(21,"nz-form-control",11)(22,"label",13),t._uU(23,"\u4e0b\u64ad"),t.qZA()()(),t.TgZ(24,"nz-form-item",3)(25,"nz-form-control",11)(26,"label",14),t._uU(27,"\u76f4\u64ad\u95f4\u4fe1\u606f\u6539\u53d8"),t.qZA()()(),t.TgZ(28,"nz-form-item",3)(29,"nz-form-control",11)(30,"label",15),t._uU(31,"\u5f55\u5236\u5f00\u59cb"),t.qZA()()(),t.TgZ(32,"nz-form-item",3)(33,"nz-form-control",11)(34,"label",16),t._uU(35,"\u5f55\u5236\u5b8c\u6210"),t.qZA()()(),t.TgZ(36,"nz-form-item",3)(37,"nz-form-control",11)(38,"label",17),t._uU(39,"\u5f55\u5236\u53d6\u6d88"),t.qZA()()(),t.TgZ(40,"nz-form-item",3)(41,"nz-form-control",11)(42,"label",18),t._uU(43,"\u89c6\u9891\u6587\u4ef6\u521b\u5efa"),t.qZA()()(),t.TgZ(44,"nz-form-item",3)(45,"nz-form-control",11)(46,"label",19),t._uU(47,"\u89c6\u9891\u6587\u4ef6\u5b8c\u6210"),t.qZA()()(),t.TgZ(48,"nz-form-item",3)(49,"nz-form-control",11)(50,"label",20),t._uU(51,"\u5f39\u5e55\u6587\u4ef6\u521b\u5efa"),t.qZA()()(),t.TgZ(52,"nz-form-item",3)(53,"nz-form-control",11)(54,"label",21),t._uU(55,"\u5f39\u5e55\u6587\u4ef6\u5b8c\u6210"),t.qZA()()(),t.TgZ(56,"nz-form-item",3)(57,"nz-form-control",11)(58,"label",22),t._uU(59,"\u539f\u59cb\u5f39\u5e55\u6587\u4ef6\u521b\u5efa"),t.qZA()()(),t.TgZ(60,"nz-form-item",3)(61,"nz-form-control",11)(62,"label",23),t._uU(63,"\u539f\u59cb\u5f39\u5e55\u6587\u4ef6\u5b8c\u6210"),t.qZA()()(),t.TgZ(64,"nz-form-item",3)(65,"nz-form-control",11)(66,"label",24),t._uU(67,"\u76f4\u64ad\u5c01\u9762\u4e0b\u8f7d\u5b8c\u6210"),t.qZA()()(),t.TgZ(68,"nz-form-item",3)(69,"nz-form-control",11)(70,"label",25),t._uU(71,"\u89c6\u9891\u540e\u5904\u7406\u5b8c\u6210"),t.qZA()()(),t.TgZ(72,"nz-form-item",3)(73,"nz-form-control",11)(74,"label",26),t._uU(75,"\u6587\u4ef6\u540e\u5904\u7406\u5b8c\u6210"),t.qZA()()(),t.TgZ(76,"nz-form-item",3)(77,"nz-form-control",11)(78,"label",27),t._uU(79,"\u786c\u76d8\u7a7a\u95f4\u4e0d\u8db3"),t.qZA()()(),t.TgZ(80,"nz-form-item",3)(81,"nz-form-control",11)(82,"label",28),t._uU(83,"\u7a0b\u5e8f\u51fa\u73b0\u5f02\u5e38"),t.qZA()()()()(),t.BQk()}if(2&i){const e=t.MAs(8),o=t.oxw();t.xp6(1),t.Q6J("formGroup",o.settingsForm),t.xp6(4),t.Q6J("nzErrorTip",e),t.xp6(9),t.Q6J("nzChecked",o.allChecked)("nzIndeterminate",o.indeterminate)}}jt.\u0275fac=function(n){return new(n||jt)(t.Y36(t.sBO),t.Y36(v.gz))},jt.\u0275cmp=t.Xpm({type:jt,selectors:[["app-bark-notification-settings"]],decls:2,vars:0,consts:[["pageTitle","Bark \u901a\u77e5"],["appSubPageContent",""],["keyOfSettings","barkNotification",3,"settings"],["name","Bark"],[3,"settings"],["name","\u4e8b\u4ef6"],["name","\u6d88\u606f"]],template:function(n,e){1&n&&(t.TgZ(0,"app-sub-page",0),t.YNc(1,Vr,8,4,"ng-template",1),t.qZA())},dependencies:[rt.Y,st.q,q.g,N,Xt,B,A],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});const Rr={url:"",liveBegan:!0,liveEnded:!0,roomChange:!0,recordingStarted:!0,recordingFinished:!0,recordingCancelled:!0,videoFileCreated:!0,videoFileCompleted:!0,danmakuFileCreated:!0,danmakuFileCompleted:!0,rawDanmakuFileCreated:!0,rawDanmakuFileCompleted:!0,coverImageDownloaded:!0,videoPostprocessingCompleted:!0,postprocessingCompleted:!0,spaceNoEnough:!0,errorOccurred:!0};class te{constructor(n,e){this.changeDetector=e,this.title="\u6807\u9898",this.okButtonText="\u786e\u5b9a",this.visible=!1,this.visibleChange=new t.vpe,this.cancel=new t.vpe,this.confirm=new t.vpe,this.allChecked=!1,this.indeterminate=!0,this.settingsForm=n.group({url:["",[r.kI.required,r.kI.pattern(/^https?:\/\/.*$/)]],liveBegan:[""],liveEnded:[""],roomChange:[""],recordingStarted:[""],recordingFinished:[""],recordingCancelled:[""],videoFileCreated:[""],videoFileCompleted:[""],danmakuFileCreated:[""],danmakuFileCompleted:[""],rawDanmakuFileCreated:[""],rawDanmakuFileCompleted:[""],coverImageDownloaded:[""],videoPostprocessingCompleted:[""],postprocessingCompleted:[""],spaceNoEnough:[""],errorOccurred:[""]}),this.checkboxControls=Object.entries(this.settingsForm.controls).filter(([o])=>"url"!==o).map(([,o])=>o),this.checkboxControls.forEach(o=>o.valueChanges.subscribe(()=>this.updateAllChecked()))}ngOnChanges(){this.setValue()}open(){this.setValue(),this.setVisible(!0)}close(){this.settingsForm.reset(),this.setVisible(!1)}setVisible(n){this.visible=n,this.visibleChange.emit(n),this.changeDetector.markForCheck()}setValue(){void 0===this.settings&&(this.settings={...Rr}),this.settingsForm.setValue(this.settings),this.changeDetector.markForCheck()}handleCancel(){this.cancel.emit(),this.close()}handleConfirm(){this.confirm.emit(this.settingsForm.value),this.close()}setAllChecked(n){this.indeterminate=!1,this.allChecked=n,this.checkboxControls.forEach(e=>e.setValue(n))}updateAllChecked(){const n=this.checkboxControls.map(e=>e.value);this.allChecked=n.every(e=>e),this.indeterminate=!this.allChecked&&n.some(e=>e)}}te.\u0275fac=function(n){return new(n||te)(t.Y36(r.qu),t.Y36(t.sBO))},te.\u0275cmp=t.Xpm({type:te,selectors:[["app-webhook-edit-dialog"]],inputs:{settings:"settings",title:"title",okButtonText:"okButtonText",visible:"visible"},outputs:{visibleChange:"visibleChange",cancel:"cancel",confirm:"confirm"},features:[t.TTD],decls:2,vars:4,consts:[["nzCentered","",3,"nzTitle","nzOkText","nzVisible","nzOkDisabled","nzOnOk","nzOnCancel"],[4,"nzModalContent"],["nz-form","",3,"formGroup"],[1,"setting-item"],["nzFor","url","nzNoColon","",1,"setting-label"],["nzHasFeedback","",1,"setting-control","input",3,"nzErrorTip"],["id","url","type","url","required","","nz-input","","formControlName","url"],["urlErrorTip",""],[1,"form-group"],[1,"setting-control","checkbox","check-all"],["nz-checkbox","",3,"nzChecked","nzIndeterminate","nzCheckedChange"],[1,"setting-control","checkbox"],["nz-checkbox","","formControlName","liveBegan"],["nz-checkbox","","formControlName","liveEnded"],["nz-checkbox","","formControlName","roomChange"],["nz-checkbox","","formControlName","recordingStarted"],["nz-checkbox","","formControlName","recordingFinished"],["nz-checkbox","","formControlName","recordingCancelled"],["nz-checkbox","","formControlName","videoFileCreated"],["nz-checkbox","","formControlName","videoFileCompleted"],["nz-checkbox","","formControlName","danmakuFileCreated"],["nz-checkbox","","formControlName","danmakuFileCompleted"],["nz-checkbox","","formControlName","rawDanmakuFileCreated"],["nz-checkbox","","formControlName","rawDanmakuFileCompleted"],["nz-checkbox","","formControlName","coverImageDownloaded"],["nz-checkbox","","formControlName","videoPostprocessingCompleted"],["nz-checkbox","","formControlName","postprocessingCompleted"],["nz-checkbox","","formControlName","spaceNoEnough"],["nz-checkbox","","formControlName","errorOccurred"],[4,"ngIf"]],template:function(n,e){1&n&&(t.TgZ(0,"nz-modal",0),t.NdJ("nzOnOk",function(){return e.handleConfirm()})("nzOnCancel",function(){return e.handleCancel()}),t.YNc(1,Wr,84,4,"ng-container",1),t.qZA()),2&n&&t.Q6J("nzTitle",e.title)("nzOkText",e.okButtonText)("nzVisible",e.visible)("nzOkDisabled",e.settingsForm.invalid)},dependencies:[p.O5,r._Y,r.Fj,r.JJ,r.JL,r.Q7,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,O.Zp,Oe.Ie,_.du,_.Hf],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}.setting-item[_ngcontent-%COMP%]{padding:1em 0;border:none}.setting-item[_ngcontent-%COMP%]:first-child{padding-top:0}.setting-item[_ngcontent-%COMP%]:first-child .setting-control[_ngcontent-%COMP%]{flex:1 1 auto;max-width:100%!important}.setting-item[_ngcontent-%COMP%]:last-child{padding-bottom:0}.setting-item[_ngcontent-%COMP%] .check-all[_ngcontent-%COMP%]{border-bottom:1px solid rgba(0,0,0,.06)}"],changeDetection:0});var tn=c(3325);function Gr(i,n){1&i&&t._UZ(0,"nz-list-empty")}function Hr(i,n){if(1&i){const e=t.EpF();t.TgZ(0,"nz-list-item",9)(1,"span",10),t._uU(2),t.qZA(),t.TgZ(3,"button",11),t._UZ(4,"i",12),t.qZA(),t.TgZ(5,"nz-dropdown-menu",null,13)(7,"ul",14)(8,"li",15),t.NdJ("click",function(){const s=t.CHM(e).index,g=t.oxw();return t.KtG(g.edit.emit(s))}),t._uU(9,"\u4fee\u6539"),t.qZA(),t.TgZ(10,"li",15),t.NdJ("click",function(){const s=t.CHM(e).index,g=t.oxw();return t.KtG(g.remove.emit(s))}),t._uU(11,"\u5220\u9664"),t.qZA()()()()}if(2&i){const e=n.$implicit,o=t.MAs(6);t.xp6(2),t.Oqu(e.url),t.xp6(1),t.Q6J("nzDropdownMenu",o)}}class ee{constructor(){this.header="",this.addable=!0,this.clearable=!0,this.add=new t.vpe,this.edit=new t.vpe,this.remove=new t.vpe,this.clear=new t.vpe}}function $r(i,n){if(1&i){const e=t.EpF();t.TgZ(0,"app-page-section")(1,"app-webhook-list",3),t.NdJ("add",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.addWebhook())})("edit",function(a){t.CHM(e);const s=t.oxw();return t.KtG(s.editWebhook(a))})("remove",function(a){t.CHM(e);const s=t.oxw();return t.KtG(s.removeWebhook(a))})("clear",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.clearWebhook())}),t.qZA()()}if(2&i){const e=t.oxw();t.xp6(1),t.Q6J("data",e.webhooks)("addable",e.canAdd)}}ee.\u0275fac=function(n){return new(n||ee)},ee.\u0275cmp=t.Xpm({type:ee,selectors:[["app-webhook-list"]],inputs:{data:"data",header:"header",addable:"addable",clearable:"clearable"},outputs:{add:"add",edit:"edit",remove:"remove",clear:"clear"},decls:11,vars:5,consts:[["nzBordered","",1,"list"],[1,"list-header"],[1,"list-actions"],["nz-button","","nzType","text","nzSize","large","nz-tooltip","","nzTooltipTitle","\u6e05\u7a7a",1,"clear-button",3,"disabled","click"],["nz-icon","","nzType","clear"],["nz-button","","nzType","text","nzSize","large","nz-tooltip","","nzTooltipTitle","\u6dfb\u52a0",1,"add-button",3,"disabled","click"],["nz-icon","","nzType","plus"],[4,"ngIf"],["class","list-item",4,"ngFor","ngForOf"],[1,"list-item"],[1,"item-content"],["nz-button","","nzType","text","nzSize","default","nz-dropdown","","nzPlacement","bottomRight",1,"more-action-button",3,"nzDropdownMenu"],["nz-icon","","nzType","more"],["menu","nzDropdownMenu"],["nz-menu",""],["nz-menu-item","",3,"click"]],template:function(n,e){1&n&&(t.TgZ(0,"nz-list",0)(1,"nz-list-header",1)(2,"h3"),t._uU(3),t.qZA(),t.TgZ(4,"div",2)(5,"button",3),t.NdJ("click",function(){return e.clear.emit()}),t._UZ(6,"i",4),t.qZA(),t.TgZ(7,"button",5),t.NdJ("click",function(){return e.add.emit()}),t._UZ(8,"i",6),t.qZA()()(),t.YNc(9,Gr,1,0,"nz-list-empty",7),t.YNc(10,Hr,12,2,"nz-list-item",8),t.qZA()),2&n&&(t.xp6(3),t.Oqu(e.header),t.xp6(2),t.Q6J("disabled",e.data.length<=0||!e.clearable),t.xp6(2),t.Q6J("disabled",!e.addable),t.xp6(2),t.Q6J("ngIf",e.data.length<=0),t.xp6(1),t.Q6J("ngForOf",e.data))},dependencies:[p.sg,p.O5,Q.ix,I.w,lt.Ls,ve,_e,he,ke,tn.wO,tn.r9,oe.cm,oe.RR,oe.wA,ue.SY],styles:[".list[_ngcontent-%COMP%]{background-color:#fff}.list[_ngcontent-%COMP%] .list-header[_ngcontent-%COMP%]{display:flex;flex-wrap:nowrap;align-items:center;padding:.5em 1.5em}.list[_ngcontent-%COMP%] .list-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0}.list[_ngcontent-%COMP%] .list-header[_ngcontent-%COMP%] .list-actions[_ngcontent-%COMP%]{margin-left:auto;position:relative;left:1em}.list[_ngcontent-%COMP%] .list-item[_ngcontent-%COMP%]{display:flex;flex-wrap:nowrap;padding:.5em 1.5em}.list[_ngcontent-%COMP%] .list-item[_ngcontent-%COMP%] .item-content[_ngcontent-%COMP%]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.list[_ngcontent-%COMP%] .list-item[_ngcontent-%COMP%] .more-action-button[_ngcontent-%COMP%]{margin-left:auto;flex:0 0 auto;position:relative;left:1em}"],changeDetection:0});class R{constructor(n,e,o,a,s){this.changeDetector=n,this.route=e,this.message=o,this.modal=a,this.settingService=s,this.dialogTitle="",this.dialogOkButtonText="",this.dialogVisible=!1,this.editingIndex=-1}get canAdd(){return this.webhooks.length{this.webhooks=n.settings,this.changeDetector.markForCheck()})}addWebhook(){this.editingIndex=-1,this.editingSettings=void 0,this.dialogTitle="\u6dfb\u52a0 webhook",this.dialogOkButtonText="\u6dfb\u52a0",this.dialogVisible=!0}removeWebhook(n){const e=this.webhooks.filter((o,a)=>a!==n);this.changeSettings(e).subscribe(()=>this.reset())}editWebhook(n){this.editingIndex=n,this.editingSettings={...this.webhooks[n]},this.dialogTitle="\u4fee\u6539 webhook",this.dialogOkButtonText="\u4fdd\u5b58",this.dialogVisible=!0}clearWebhook(){this.modal.confirm({nzTitle:"\u786e\u5b9a\u8981\u6e05\u7a7a Webhook \uff1f",nzOnOk:()=>new Promise((n,e)=>{this.changeSettings([]).subscribe(n,e)})})}onDialogCanceled(){this.reset()}onDialogConfirmed(n){let e;-1===this.editingIndex?e=[...this.webhooks,n]:(e=[...this.webhooks],e[this.editingIndex]=n),this.changeSettings(e).subscribe(()=>this.reset())}reset(){this.editingIndex=-1,delete this.editingSettings}changeSettings(n){return this.settingService.changeSettings({webhooks:n}).pipe((0,F.X)(3,300),(0,re.b)(e=>{this.webhooks=e.webhooks,this.changeDetector.markForCheck()},e=>{this.message.error(`Webhook \u8bbe\u7f6e\u51fa\u9519: ${e.message}`)}))}}R.MAX_WEBHOOKS=50,R.\u0275fac=function(n){return new(n||R)(t.Y36(t.sBO),t.Y36(v.gz),t.Y36(se.dD),t.Y36(_.Sf),t.Y36(S.R))},R.\u0275cmp=t.Xpm({type:R,selectors:[["app-webhook-manager"]],decls:3,vars:4,consts:[["pageTitle","Webhooks"],["appSubPageContent",""],[3,"title","okButtonText","settings","visible","visibleChange","cancel","confirm"],["header","Webhook \u5217\u8868",3,"data","addable","add","edit","remove","clear"]],template:function(n,e){1&n&&(t.TgZ(0,"app-sub-page",0),t.YNc(1,$r,2,2,"ng-template",1),t.qZA(),t.TgZ(2,"app-webhook-edit-dialog",2),t.NdJ("visibleChange",function(a){return e.dialogVisible=a})("cancel",function(){return e.onDialogCanceled()})("confirm",function(a){return e.onDialogConfirmed(a)}),t.qZA()),2&n&&(t.xp6(2),t.Q6J("title",e.dialogTitle)("okButtonText",e.dialogOkButtonText)("settings",e.editingSettings)("visible",e.dialogVisible))},dependencies:[rt.Y,st.q,q.g,te,ee],changeDetection:0});const Kr=[{path:"email-notification",component:Lt,resolve:{settings:K}},{path:"serverchan-notification",component:Yt,resolve:{settings:X}},{path:"pushdeer-notification",component:Rt,resolve:{settings:j}},{path:"pushplus-notification",component:Ht,resolve:{settings:tt}},{path:"telegram-notification",component:Kt,resolve:{settings:et}},{path:"bark-notification",component:jt,resolve:{settings:it}},{path:"webhooks",component:R,resolve:{settings:nt}},{path:"",component:Qt,resolve:{settings:$}}];class ht{}function Xr(i,n){1&i&&(t.TgZ(0,"p"),t._uU(1," \u8bed\u6cd5\u3001\u53d8\u91cf\u53c2\u8003 "),t.TgZ(2,"a",16),t._uU(3,"wiki"),t.qZA()(),t.TgZ(4,"p"),t._uU(5,"\u7a7a\u503c\u5c06\u4f7f\u7528\u9ed8\u8ba4\u6d88\u606f\u6a21\u677f"),t.qZA())}function jr(i,n){if(1&i&&(t.ynx(0),t.YNc(1,Xr,6,0,"ng-template",null,3,t.W1O),t.TgZ(3,"form",4)(4,"nz-form-item",5)(5,"nz-form-label",6),t._uU(6," \u6d88\u606f\u6807\u9898 "),t.qZA(),t.TgZ(7,"nz-form-control",7),t._UZ(8,"input",8),t.qZA()(),t.TgZ(9,"nz-form-item",9)(10,"nz-form-label",10),t._uU(11," \u6d88\u606f\u7c7b\u578b "),t.qZA(),t.TgZ(12,"nz-form-control",11),t._UZ(13,"nz-select",12),t.qZA()(),t.TgZ(14,"nz-form-item",13)(15,"nz-form-label",6),t._uU(16," \u6d88\u606f\u5185\u5bb9 "),t.qZA(),t.TgZ(17,"nz-form-control",14),t._UZ(18,"textarea",15),t.qZA()()(),t.BQk()),2&i){const e=t.MAs(2),o=t.oxw();t.xp6(3),t.Q6J("nzLayout","vertical")("formGroup",o.settingsForm),t.xp6(2),t.Q6J("nzTooltipTitle",e),t.xp6(8),t.Q6J("nzOptions",o.MESSAGE_TYPE_OPTIONS),t.xp6(2),t.Q6J("nzTooltipTitle",e),t.xp6(3),t.Q6J("rows",10)}}function ts(i,n){if(1&i){const e=t.EpF();t.TgZ(0,"button",17),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.handleCancel())}),t._uU(1,"\u53d6\u6d88"),t.qZA(),t.TgZ(2,"button",18),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.handleConfirm())}),t._uU(3," \u786e\u5b9a "),t.qZA()}if(2&i){const e=t.oxw();t.xp6(2),t.Q6J("disabled",e.settingsForm.invalid)}}ht.\u0275fac=function(n){return new(n||ht)},ht.\u0275mod=t.oAB({type:ht}),ht.\u0275inj=t.cJS({imports:[v.Bz.forChild(Kr),v.Bz]});class ne{constructor(n,e){this.changeDetector=e,this.messageTypes=[],this.title="\u4fee\u6539\u6d88\u606f\u6a21\u677f",this.visible=!1,this.visibleChange=new t.vpe,this.cancel=new t.vpe,this.confirm=new t.vpe,this.MESSAGE_TYPE_OPTIONS=[],this.settingsForm=n.group({messageType:[""],messageTitle:[""],messageContent:[""]})}get messageTypeControl(){return this.settingsForm.get("messageType")}get messageTitleControl(){return this.settingsForm.get("messageTitle")}get messageContentControl(){return this.settingsForm.get("messageContent")}ngOnInit(){this.MESSAGE_TYPE_OPTIONS=Array.from(new Set(this.messageTypes)).map(n=>({label:n,value:n}))}ngOnChanges(){this.setValue()}open(){this.setValue(),this.setVisible(!0)}close(){this.setVisible(!1)}setVisible(n){this.visible=n,this.visibleChange.emit(n),this.changeDetector.markForCheck()}setValue(){this.settingsForm.setValue(this.value),this.changeDetector.markForCheck()}handleCancel(){this.cancel.emit(),this.close()}handleConfirm(){this.confirm.emit(this.settingsForm.value),this.close()}}ne.\u0275fac=function(n){return new(n||ne)(t.Y36(r.qu),t.Y36(t.sBO))},ne.\u0275cmp=t.Xpm({type:ne,selectors:[["app-message-template-edit-dialog"]],inputs:{value:"value",messageTypes:"messageTypes",title:"title",visible:"visible"},outputs:{visibleChange:"visibleChange",cancel:"cancel",confirm:"confirm"},features:[t.TTD],decls:4,vars:3,consts:[["nzCentered","",3,"nzTitle","nzVisible","nzOkDisabled","nzVisibleChange","nzOnOk","nzOnCancel"],[4,"nzModalContent"],["modalFooter",""],["messageTemplateTip",""],["nz-form","",3,"nzLayout","formGroup"],[1,"setting-item","input"],["nzFor","messageTitle","nzNoColon","",1,"setting-label",3,"nzTooltipTitle"],[1,"setting-control","input"],["type","text","nz-input","","formControlName","messageTitle"],[1,"setting-item","switch"],["nzFor","messageType","nzNoColon","",1,"setting-label"],[1,"setting-control","select"],["formControlName","messageType",3,"nzOptions"],[1,"setting-item","textarea"],[1,"setting-control","textarea"],["nz-input","","wrap","off","formControlName","messageContent",3,"rows"],["href","https://github.com/acgnhiki/blrec/wiki/MessageTemplate","_blank",""],["nz-button","","nzType","default",3,"click"],["nz-button","","nzType","default",3,"disabled","click"]],template:function(n,e){1&n&&(t.TgZ(0,"nz-modal",0),t.NdJ("nzVisibleChange",function(a){return e.visible=a})("nzOnOk",function(){return e.handleConfirm()})("nzOnCancel",function(){return e.handleCancel()}),t.YNc(1,jr,19,6,"ng-container",1),t.YNc(2,ts,4,1,"ng-template",null,2,t.W1O),t.qZA()),2&n&&t.Q6J("nzTitle",e.title)("nzVisible",e.visible)("nzOkDisabled",e.settingsForm.invalid)},dependencies:[r._Y,r.Fj,r.JJ,r.JL,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,O.Zp,zt.Vq,_.du,_.Hf,Q.ix,I.w,dt.dQ],styles:["textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}"],changeDetection:0});class _t{}_t.\u0275fac=function(n){return new(n||_t)},_t.\u0275mod=t.oAB({type:_t}),_t.\u0275inj=t.cJS({providers:[$,K,X,j,tt,et,it,nt],imports:[p.ez,ht,r.u5,r.UX,ge.j,en.KJ,nn.vh,l.U5,O.o7,U.m,Oe.Wr,G.aF,sn,zt.LV,_.Qp,Q.sL,lt.PV,pi,oe.b1,ue.cg,di.S,H.HQ,bi,Pi.m]}),t.B6R(A,[ne],[])}}]); \ No newline at end of file diff --git a/src/blrec/data/webapp/548.f8a3199ca2412e0d.js b/src/blrec/data/webapp/548.f8a3199ca2412e0d.js deleted file mode 100644 index 50d177c..0000000 --- a/src/blrec/data/webapp/548.f8a3199ca2412e0d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkblrec=self.webpackChunkblrec||[]).push([[548],{2548:(ns,xe,c)=>{c.r(xe),c.d(xe,{SettingsModule:()=>_t});var p=c(6895),r=c(433),ge=c(5681),en=c(5655),nn=c(1971),l=c(6704),O=c(5635),U=c(1243),Oe=c(8213),G=c(8521),t=c(4650),ue=c(7570),on=c(3353),Ct=c(445);let sn=(()=>{class i{}return i.\u0275fac=function(e){return new(e||i)},i.\u0275mod=t.oAB({type:i}),i.\u0275inj=t.cJS({imports:[Ct.vT,p.ez,on.ud,ue.cg]}),i})();var zt=c(8e3),_=c(5156),Q=c(6616),lt=c(1102),Me=c(4383),ct=c(6287),D=c(655),E=c(3187),be=c(7579),ln=c(9770),ie=c(9646),cn=c(6451),gn=c(9751),un=c(1135),mn=c(5698),Pe=c(3900),gt=c(2722),ut=c(3303),Te=c(4788),u=c(3679);const V=["*"];function bn(i,n){1&i&&t.Hsn(0)}const Pn=["nz-list-item-actions",""];function Tn(i,n){}function wn(i,n){1&i&&t._UZ(0,"em",3)}function Fn(i,n){if(1&i&&(t.TgZ(0,"li"),t.YNc(1,Tn,0,0,"ng-template",1),t.YNc(2,wn,1,0,"em",2),t.qZA()),2&i){const e=n.$implicit,o=n.last;t.xp6(1),t.Q6J("ngTemplateOutlet",e),t.xp6(1),t.Q6J("ngIf",!o)}}function Sn(i,n){}const we=function(i,n){return{$implicit:i,index:n}};function yn(i,n){if(1&i&&(t.ynx(0),t.YNc(1,Sn,0,0,"ng-template",9),t.BQk()),2&i){const e=n.$implicit,o=n.index,a=t.oxw(2);t.xp6(1),t.Q6J("ngTemplateOutlet",a.nzRenderItem)("ngTemplateOutletContext",t.WLB(2,we,e,o))}}function An(i,n){if(1&i&&(t.TgZ(0,"div",7),t.YNc(1,yn,2,5,"ng-container",8),t.Hsn(2,4),t.qZA()),2&i){const e=t.oxw();t.xp6(1),t.Q6J("ngForOf",e.nzDataSource)}}function kn(i,n){if(1&i&&(t.ynx(0),t._uU(1),t.BQk()),2&i){const e=t.oxw(2);t.xp6(1),t.Oqu(e.nzHeader)}}function Dn(i,n){if(1&i&&(t.TgZ(0,"nz-list-header"),t.YNc(1,kn,2,1,"ng-container",10),t.qZA()),2&i){const e=t.oxw();t.xp6(1),t.Q6J("nzStringTemplateOutlet",e.nzHeader)}}function En(i,n){1&i&&t._UZ(0,"div"),2&i&&t.Udp("min-height",53,"px")}function Zn(i,n){}function Nn(i,n){if(1&i&&(t.TgZ(0,"div",13),t.YNc(1,Zn,0,0,"ng-template",9),t.qZA()),2&i){const e=n.$implicit,o=n.index,a=t.oxw(2);t.Q6J("nzSpan",a.nzGrid.span||null)("nzXs",a.nzGrid.xs||null)("nzSm",a.nzGrid.sm||null)("nzMd",a.nzGrid.md||null)("nzLg",a.nzGrid.lg||null)("nzXl",a.nzGrid.xl||null)("nzXXl",a.nzGrid.xxl||null),t.xp6(1),t.Q6J("ngTemplateOutlet",a.nzRenderItem)("ngTemplateOutletContext",t.WLB(9,we,e,o))}}function Bn(i,n){if(1&i&&(t.TgZ(0,"div",11),t.YNc(1,Nn,2,12,"div",12),t.qZA()),2&i){const e=t.oxw();t.Q6J("nzGutter",e.nzGrid.gutter||null),t.xp6(1),t.Q6J("ngForOf",e.nzDataSource)}}function Un(i,n){if(1&i&&t._UZ(0,"nz-list-empty",14),2&i){const e=t.oxw();t.Q6J("nzNoResult",e.nzNoResult)}}function In(i,n){if(1&i&&(t.ynx(0),t._uU(1),t.BQk()),2&i){const e=t.oxw(2);t.xp6(1),t.Oqu(e.nzFooter)}}function Jn(i,n){if(1&i&&(t.TgZ(0,"nz-list-footer"),t.YNc(1,In,2,1,"ng-container",10),t.qZA()),2&i){const e=t.oxw();t.xp6(1),t.Q6J("nzStringTemplateOutlet",e.nzFooter)}}function Qn(i,n){}function Vn(i,n){}function Ln(i,n){if(1&i&&(t.TgZ(0,"nz-list-pagination"),t.YNc(1,Vn,0,0,"ng-template",6),t.qZA()),2&i){const e=t.oxw();t.xp6(1),t.Q6J("ngTemplateOutlet",e.nzPagination)}}const qn=[[["nz-list-header"]],[["nz-list-footer"],["","nz-list-footer",""]],[["nz-list-load-more"],["","nz-list-load-more",""]],[["nz-list-pagination"],["","nz-list-pagination",""]],"*"],Yn=["nz-list-header","nz-list-footer, [nz-list-footer]","nz-list-load-more, [nz-list-load-more]","nz-list-pagination, [nz-list-pagination]","*"];function Wn(i,n){if(1&i&&t._UZ(0,"ul",6),2&i){const e=t.oxw(2);t.Q6J("nzActions",e.nzActions)}}function Rn(i,n){if(1&i&&(t.YNc(0,Wn,1,1,"ul",5),t.Hsn(1)),2&i){const e=t.oxw();t.Q6J("ngIf",e.nzActions&&e.nzActions.length>0)}}function Gn(i,n){if(1&i&&(t.ynx(0),t._uU(1),t.BQk()),2&i){const e=t.oxw(3);t.xp6(1),t.Oqu(e.nzContent)}}function Hn(i,n){if(1&i&&(t.ynx(0),t.YNc(1,Gn,2,1,"ng-container",8),t.BQk()),2&i){const e=t.oxw(2);t.xp6(1),t.Q6J("nzStringTemplateOutlet",e.nzContent)}}function $n(i,n){if(1&i&&(t.Hsn(0,1),t.Hsn(1,2),t.YNc(2,Hn,2,1,"ng-container",7)),2&i){const e=t.oxw();t.xp6(2),t.Q6J("ngIf",e.nzContent)}}function Kn(i,n){1&i&&t.Hsn(0,3)}function Xn(i,n){}function jn(i,n){}function ti(i,n){}function ei(i,n){}function ni(i,n){if(1&i&&(t.YNc(0,Xn,0,0,"ng-template",9),t.YNc(1,jn,0,0,"ng-template",9),t.YNc(2,ti,0,0,"ng-template",9),t.YNc(3,ei,0,0,"ng-template",9)),2&i){const e=t.oxw(),o=t.MAs(3),a=t.MAs(5),s=t.MAs(1);t.Q6J("ngTemplateOutlet",o),t.xp6(1),t.Q6J("ngTemplateOutlet",e.nzExtra),t.xp6(1),t.Q6J("ngTemplateOutlet",a),t.xp6(1),t.Q6J("ngTemplateOutlet",s)}}function ii(i,n){}function oi(i,n){}function ai(i,n){}function ri(i,n){if(1&i&&(t.TgZ(0,"nz-list-item-extra"),t.YNc(1,ai,0,0,"ng-template",9),t.qZA()),2&i){const e=t.oxw(2);t.xp6(1),t.Q6J("ngTemplateOutlet",e.nzExtra)}}function si(i,n){}function li(i,n){if(1&i&&(t.ynx(0),t.TgZ(1,"div",10),t.YNc(2,ii,0,0,"ng-template",9),t.YNc(3,oi,0,0,"ng-template",9),t.qZA(),t.YNc(4,ri,2,1,"nz-list-item-extra",7),t.YNc(5,si,0,0,"ng-template",9),t.BQk()),2&i){const e=t.oxw(),o=t.MAs(3),a=t.MAs(1),s=t.MAs(5);t.xp6(2),t.Q6J("ngTemplateOutlet",o),t.xp6(1),t.Q6J("ngTemplateOutlet",a),t.xp6(1),t.Q6J("ngIf",e.nzExtra),t.xp6(1),t.Q6J("ngTemplateOutlet",s)}}const ci=[[["nz-list-item-actions"],["","nz-list-item-actions",""]],[["nz-list-item-meta"],["","nz-list-item-meta",""]],"*",[["nz-list-item-extra"],["","nz-list-item-extra",""]]],gi=["nz-list-item-actions, [nz-list-item-actions]","nz-list-item-meta, [nz-list-item-meta]","*","nz-list-item-extra, [nz-list-item-extra]"];let de=(()=>{class i{}return i.\u0275fac=function(e){return new(e||i)},i.\u0275cmp=t.Xpm({type:i,selectors:[["nz-list-item-extra"],["","nz-list-item-extra",""]],hostAttrs:[1,"ant-list-item-extra"],exportAs:["nzListItemExtra"],ngContentSelectors:V,decls:1,vars:0,template:function(e,o){1&e&&(t.F$t(),t.Hsn(0))},encapsulation:2,changeDetection:0}),i})(),Se=(()=>{class i{}return i.\u0275fac=function(e){return new(e||i)},i.\u0275cmp=t.Xpm({type:i,selectors:[["nz-list-item-action"]],viewQuery:function(e,o){if(1&e&&t.Gf(t.Rgc,5),2&e){let a;t.iGM(a=t.CRH())&&(o.templateRef=a.first)}},exportAs:["nzListItemAction"],ngContentSelectors:V,decls:1,vars:0,template:function(e,o){1&e&&(t.F$t(),t.YNc(0,bn,1,0,"ng-template"))},encapsulation:2,changeDetection:0}),i})(),ye=(()=>{class i{constructor(e,o,a){this.ngZone=e,this.nzActions=[],this.actions=[],this.inputActionChanges$=new be.x,this.contentChildrenChanges$=(0,ln.P)(()=>this.nzListItemActions?(0,ie.of)(null):this.ngZone.onStable.pipe((0,mn.q)(1),this.enterZone(),(0,Pe.w)(()=>this.contentChildrenChanges$))),(0,cn.T)(this.contentChildrenChanges$,this.inputActionChanges$).pipe((0,gt.R)(a)).subscribe(()=>{this.actions=this.nzActions.length?this.nzActions:this.nzListItemActions.map(s=>s.templateRef),o.detectChanges()})}ngOnChanges(){this.inputActionChanges$.next(null)}enterZone(){return e=>new gn.y(o=>e.subscribe({next:a=>this.ngZone.run(()=>o.next(a))}))}}return i.\u0275fac=function(e){return new(e||i)(t.Y36(t.R0b),t.Y36(t.sBO),t.Y36(ut.kn))},i.\u0275cmp=t.Xpm({type:i,selectors:[["ul","nz-list-item-actions",""]],contentQueries:function(e,o,a){if(1&e&&t.Suo(a,Se,4),2&e){let s;t.iGM(s=t.CRH())&&(o.nzListItemActions=s)}},hostAttrs:[1,"ant-list-item-action"],inputs:{nzActions:"nzActions"},exportAs:["nzListItemActions"],features:[t._Bn([ut.kn]),t.TTD],attrs:Pn,decls:1,vars:1,consts:[[4,"ngFor","ngForOf"],[3,"ngTemplateOutlet"],["class","ant-list-item-action-split",4,"ngIf"],[1,"ant-list-item-action-split"]],template:function(e,o){1&e&&t.YNc(0,Fn,3,2,"li",0),2&e&&t.Q6J("ngForOf",o.actions)},dependencies:[p.sg,p.O5,p.tP],encapsulation:2,changeDetection:0}),i})(),he=(()=>{class i{}return i.\u0275fac=function(e){return new(e||i)},i.\u0275cmp=t.Xpm({type:i,selectors:[["nz-list-empty"]],hostAttrs:[1,"ant-list-empty-text"],inputs:{nzNoResult:"nzNoResult"},exportAs:["nzListHeader"],decls:1,vars:2,consts:[[3,"nzComponentName","specificContent"]],template:function(e,o){1&e&&t._UZ(0,"nz-embed-empty",0),2&e&&t.Q6J("nzComponentName","list")("specificContent",o.nzNoResult)},dependencies:[Te.gB],encapsulation:2,changeDetection:0}),i})(),_e=(()=>{class i{}return i.\u0275fac=function(e){return new(e||i)},i.\u0275cmp=t.Xpm({type:i,selectors:[["nz-list-header"]],hostAttrs:[1,"ant-list-header"],exportAs:["nzListHeader"],ngContentSelectors:V,decls:1,vars:0,template:function(e,o){1&e&&(t.F$t(),t.Hsn(0))},encapsulation:2,changeDetection:0}),i})(),fe=(()=>{class i{}return i.\u0275fac=function(e){return new(e||i)},i.\u0275cmp=t.Xpm({type:i,selectors:[["nz-list-footer"]],hostAttrs:[1,"ant-list-footer"],exportAs:["nzListFooter"],ngContentSelectors:V,decls:1,vars:0,template:function(e,o){1&e&&(t.F$t(),t.Hsn(0))},encapsulation:2,changeDetection:0}),i})(),Ce=(()=>{class i{}return i.\u0275fac=function(e){return new(e||i)},i.\u0275cmp=t.Xpm({type:i,selectors:[["nz-list-pagination"]],hostAttrs:[1,"ant-list-pagination"],exportAs:["nzListPagination"],ngContentSelectors:V,decls:1,vars:0,template:function(e,o){1&e&&(t.F$t(),t.Hsn(0))},encapsulation:2,changeDetection:0}),i})(),Ae=(()=>{class i{}return i.\u0275fac=function(e){return new(e||i)},i.\u0275dir=t.lG2({type:i,selectors:[["nz-list-load-more"]],exportAs:["nzListLoadMoreDirective"]}),i})(),ve=(()=>{class i{constructor(e){this.directionality=e,this.nzBordered=!1,this.nzGrid="",this.nzItemLayout="horizontal",this.nzRenderItem=null,this.nzLoading=!1,this.nzLoadMore=null,this.nzSize="default",this.nzSplit=!0,this.hasSomethingAfterLastItem=!1,this.dir="ltr",this.itemLayoutNotifySource=new un.X(this.nzItemLayout),this.destroy$=new be.x}get itemLayoutNotify$(){return this.itemLayoutNotifySource.asObservable()}ngOnInit(){this.dir=this.directionality.value,this.directionality.change?.pipe((0,gt.R)(this.destroy$)).subscribe(e=>{this.dir=e})}getSomethingAfterLastItem(){return!!(this.nzLoadMore||this.nzPagination||this.nzFooter||this.nzListFooterComponent||this.nzListPaginationComponent||this.nzListLoadMoreDirective)}ngOnChanges(e){e.nzItemLayout&&this.itemLayoutNotifySource.next(this.nzItemLayout)}ngOnDestroy(){this.itemLayoutNotifySource.unsubscribe(),this.destroy$.next(),this.destroy$.complete()}ngAfterContentInit(){this.hasSomethingAfterLastItem=this.getSomethingAfterLastItem()}}return i.\u0275fac=function(e){return new(e||i)(t.Y36(Ct.Is,8))},i.\u0275cmp=t.Xpm({type:i,selectors:[["nz-list"],["","nz-list",""]],contentQueries:function(e,o,a){if(1&e&&(t.Suo(a,fe,5),t.Suo(a,Ce,5),t.Suo(a,Ae,5)),2&e){let s;t.iGM(s=t.CRH())&&(o.nzListFooterComponent=s.first),t.iGM(s=t.CRH())&&(o.nzListPaginationComponent=s.first),t.iGM(s=t.CRH())&&(o.nzListLoadMoreDirective=s.first)}},hostAttrs:[1,"ant-list"],hostVars:16,hostBindings:function(e,o){2&e&&t.ekj("ant-list-rtl","rtl"===o.dir)("ant-list-vertical","vertical"===o.nzItemLayout)("ant-list-lg","large"===o.nzSize)("ant-list-sm","small"===o.nzSize)("ant-list-split",o.nzSplit)("ant-list-bordered",o.nzBordered)("ant-list-loading",o.nzLoading)("ant-list-something-after-last-item",o.hasSomethingAfterLastItem)},inputs:{nzDataSource:"nzDataSource",nzBordered:"nzBordered",nzGrid:"nzGrid",nzHeader:"nzHeader",nzFooter:"nzFooter",nzItemLayout:"nzItemLayout",nzRenderItem:"nzRenderItem",nzLoading:"nzLoading",nzLoadMore:"nzLoadMore",nzPagination:"nzPagination",nzSize:"nzSize",nzSplit:"nzSplit",nzNoResult:"nzNoResult"},exportAs:["nzList"],features:[t.TTD],ngContentSelectors:Yn,decls:15,vars:9,consts:[["itemsTpl",""],[4,"ngIf"],[3,"nzSpinning"],[3,"min-height",4,"ngIf"],["nz-row","",3,"nzGutter",4,"ngIf","ngIfElse"],[3,"nzNoResult",4,"ngIf"],[3,"ngTemplateOutlet"],[1,"ant-list-items"],[4,"ngFor","ngForOf"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[4,"nzStringTemplateOutlet"],["nz-row","",3,"nzGutter"],["nz-col","",3,"nzSpan","nzXs","nzSm","nzMd","nzLg","nzXl","nzXXl",4,"ngFor","ngForOf"],["nz-col","",3,"nzSpan","nzXs","nzSm","nzMd","nzLg","nzXl","nzXXl"],[3,"nzNoResult"]],template:function(e,o){if(1&e&&(t.F$t(qn),t.YNc(0,An,3,1,"ng-template",null,0,t.W1O),t.YNc(2,Dn,2,1,"nz-list-header",1),t.Hsn(3),t.TgZ(4,"nz-spin",2),t.ynx(5),t.YNc(6,En,1,2,"div",3),t.YNc(7,Bn,2,2,"div",4),t.YNc(8,Un,1,1,"nz-list-empty",5),t.BQk(),t.qZA(),t.YNc(9,Jn,2,1,"nz-list-footer",1),t.Hsn(10,1),t.YNc(11,Qn,0,0,"ng-template",6),t.Hsn(12,2),t.YNc(13,Ln,2,1,"nz-list-pagination",1),t.Hsn(14,3)),2&e){const a=t.MAs(1);t.xp6(2),t.Q6J("ngIf",o.nzHeader),t.xp6(2),t.Q6J("nzSpinning",o.nzLoading),t.xp6(2),t.Q6J("ngIf",o.nzLoading&&o.nzDataSource&&0===o.nzDataSource.length),t.xp6(1),t.Q6J("ngIf",o.nzGrid&&o.nzDataSource)("ngIfElse",a),t.xp6(1),t.Q6J("ngIf",!o.nzLoading&&o.nzDataSource&&0===o.nzDataSource.length),t.xp6(1),t.Q6J("ngIf",o.nzFooter),t.xp6(2),t.Q6J("ngTemplateOutlet",o.nzLoadMore),t.xp6(2),t.Q6J("ngIf",o.nzPagination)}},dependencies:[p.sg,p.O5,p.tP,ge.W,u.t3,u.SK,ct.f,_e,fe,Ce,he],encapsulation:2,changeDetection:0}),(0,D.gn)([(0,E.yF)()],i.prototype,"nzBordered",void 0),(0,D.gn)([(0,E.yF)()],i.prototype,"nzLoading",void 0),(0,D.gn)([(0,E.yF)()],i.prototype,"nzSplit",void 0),i})(),ke=(()=>{class i{constructor(e,o,a,s){this.parentComp=a,this.cdr=s,this.nzActions=[],this.nzExtra=null,this.nzNoFlex=!1,o.addClass(e.nativeElement,"ant-list-item")}get isVerticalAndExtra(){return!("vertical"!==this.itemLayout||!this.listItemExtraDirective&&!this.nzExtra)}ngAfterViewInit(){this.itemLayout$=this.parentComp.itemLayoutNotify$.subscribe(e=>{this.itemLayout=e,this.cdr.detectChanges()})}ngOnDestroy(){this.itemLayout$&&this.itemLayout$.unsubscribe()}}return i.\u0275fac=function(e){return new(e||i)(t.Y36(t.SBq),t.Y36(t.Qsj),t.Y36(ve),t.Y36(t.sBO))},i.\u0275cmp=t.Xpm({type:i,selectors:[["nz-list-item"],["","nz-list-item",""]],contentQueries:function(e,o,a){if(1&e&&t.Suo(a,de,5),2&e){let s;t.iGM(s=t.CRH())&&(o.listItemExtraDirective=s.first)}},hostVars:2,hostBindings:function(e,o){2&e&&t.ekj("ant-list-item-no-flex",o.nzNoFlex)},inputs:{nzActions:"nzActions",nzContent:"nzContent",nzExtra:"nzExtra",nzNoFlex:"nzNoFlex"},exportAs:["nzListItem"],ngContentSelectors:gi,decls:9,vars:2,consts:[["actionsTpl",""],["contentTpl",""],["extraTpl",""],["simpleTpl",""],[4,"ngIf","ngIfElse"],["nz-list-item-actions","",3,"nzActions",4,"ngIf"],["nz-list-item-actions","",3,"nzActions"],[4,"ngIf"],[4,"nzStringTemplateOutlet"],[3,"ngTemplateOutlet"],[1,"ant-list-item-main"]],template:function(e,o){if(1&e&&(t.F$t(ci),t.YNc(0,Rn,2,1,"ng-template",null,0,t.W1O),t.YNc(2,$n,3,1,"ng-template",null,1,t.W1O),t.YNc(4,Kn,1,0,"ng-template",null,2,t.W1O),t.YNc(6,ni,4,4,"ng-template",null,3,t.W1O),t.YNc(8,li,6,4,"ng-container",4)),2&e){const a=t.MAs(7);t.xp6(8),t.Q6J("ngIf",o.isVerticalAndExtra)("ngIfElse",a)}},dependencies:[p.O5,p.tP,ct.f,ye,de],encapsulation:2,changeDetection:0}),(0,D.gn)([(0,E.yF)()],i.prototype,"nzNoFlex",void 0),i})(),pi=(()=>{class i{}return i.\u0275fac=function(e){return new(e||i)},i.\u0275mod=t.oAB({type:i}),i.\u0275inj=t.cJS({imports:[Ct.vT,p.ez,ge.j,u.Jb,Me.Rt,ct.T,Te.Xo]}),i})();var oe=c(9562),di=c(2577),H=c(6675),hi=c(4968),ae=c(9300),_i=c(2539),mt=c(2536),De=c(4903);const Ee=["*"],fi=["collapseHeader"];function Ci(i,n){if(1&i&&(t.ynx(0),t._UZ(1,"span",7),t.BQk()),2&i){const e=n.$implicit,o=t.oxw(2);t.xp6(1),t.Q6J("nzType",e||"right")("nzRotate",o.nzActive?90:0)}}function vi(i,n){if(1&i&&(t.TgZ(0,"div"),t.YNc(1,Ci,2,2,"ng-container",3),t.qZA()),2&i){const e=t.oxw();t.xp6(1),t.Q6J("nzStringTemplateOutlet",e.nzExpandedIcon)}}function zi(i,n){if(1&i&&(t.ynx(0),t._uU(1),t.BQk()),2&i){const e=t.oxw();t.xp6(1),t.Oqu(e.nzHeader)}}function xi(i,n){if(1&i&&(t.ynx(0),t._uU(1),t.BQk()),2&i){const e=t.oxw(2);t.xp6(1),t.Oqu(e.nzExtra)}}function Oi(i,n){if(1&i&&(t.TgZ(0,"div",8),t.YNc(1,xi,2,1,"ng-container",3),t.qZA()),2&i){const e=t.oxw();t.xp6(1),t.Q6J("nzStringTemplateOutlet",e.nzExtra)}}const Ze="collapse";let Ne=(()=>{class i{constructor(e,o,a,s){this.nzConfigService=e,this.cdr=o,this.directionality=a,this.destroy$=s,this._nzModuleName=Ze,this.nzAccordion=!1,this.nzBordered=!0,this.nzGhost=!1,this.nzExpandIconPosition="left",this.dir="ltr",this.listOfNzCollapsePanelComponent=[],this.nzConfigService.getConfigChangeEventForComponent(Ze).pipe((0,gt.R)(this.destroy$)).subscribe(()=>{this.cdr.markForCheck()})}ngOnInit(){this.directionality.change?.pipe((0,gt.R)(this.destroy$)).subscribe(e=>{this.dir=e,this.cdr.detectChanges()}),this.dir=this.directionality.value}addPanel(e){this.listOfNzCollapsePanelComponent.push(e)}removePanel(e){this.listOfNzCollapsePanelComponent.splice(this.listOfNzCollapsePanelComponent.indexOf(e),1)}click(e){this.nzAccordion&&!e.nzActive&&this.listOfNzCollapsePanelComponent.filter(o=>o!==e).forEach(o=>{o.nzActive&&(o.nzActive=!1,o.nzActiveChange.emit(o.nzActive),o.markForCheck())}),e.nzActive=!e.nzActive,e.nzActiveChange.emit(e.nzActive)}}return i.\u0275fac=function(e){return new(e||i)(t.Y36(mt.jY),t.Y36(t.sBO),t.Y36(Ct.Is,8),t.Y36(ut.kn))},i.\u0275cmp=t.Xpm({type:i,selectors:[["nz-collapse"]],hostAttrs:[1,"ant-collapse"],hostVars:10,hostBindings:function(e,o){2&e&&t.ekj("ant-collapse-icon-position-left","left"===o.nzExpandIconPosition)("ant-collapse-icon-position-right","right"===o.nzExpandIconPosition)("ant-collapse-ghost",o.nzGhost)("ant-collapse-borderless",!o.nzBordered)("ant-collapse-rtl","rtl"===o.dir)},inputs:{nzAccordion:"nzAccordion",nzBordered:"nzBordered",nzGhost:"nzGhost",nzExpandIconPosition:"nzExpandIconPosition"},exportAs:["nzCollapse"],features:[t._Bn([ut.kn])],ngContentSelectors:Ee,decls:1,vars:0,template:function(e,o){1&e&&(t.F$t(),t.Hsn(0))},encapsulation:2,changeDetection:0}),(0,D.gn)([(0,mt.oS)(),(0,E.yF)()],i.prototype,"nzAccordion",void 0),(0,D.gn)([(0,mt.oS)(),(0,E.yF)()],i.prototype,"nzBordered",void 0),(0,D.gn)([(0,mt.oS)(),(0,E.yF)()],i.prototype,"nzGhost",void 0),i})();const Be="collapsePanel";let Mi=(()=>{class i{constructor(e,o,a,s,g,m){this.nzConfigService=e,this.ngZone=o,this.cdr=a,this.destroy$=s,this.nzCollapseComponent=g,this.noAnimation=m,this._nzModuleName=Be,this.nzActive=!1,this.nzDisabled=!1,this.nzShowArrow=!0,this.nzActiveChange=new t.vpe,this.nzConfigService.getConfigChangeEventForComponent(Be).pipe((0,gt.R)(this.destroy$)).subscribe(()=>{this.cdr.markForCheck()})}markForCheck(){this.cdr.markForCheck()}ngOnInit(){this.nzCollapseComponent.addPanel(this),this.ngZone.runOutsideAngular(()=>(0,hi.R)(this.collapseHeader.nativeElement,"click").pipe((0,ae.h)(()=>!this.nzDisabled),(0,gt.R)(this.destroy$)).subscribe(()=>{this.ngZone.run(()=>{this.nzCollapseComponent.click(this),this.cdr.markForCheck()})}))}ngOnDestroy(){this.nzCollapseComponent.removePanel(this)}}return i.\u0275fac=function(e){return new(e||i)(t.Y36(mt.jY),t.Y36(t.R0b),t.Y36(t.sBO),t.Y36(ut.kn),t.Y36(Ne,1),t.Y36(De.P,8))},i.\u0275cmp=t.Xpm({type:i,selectors:[["nz-collapse-panel"]],viewQuery:function(e,o){if(1&e&&t.Gf(fi,7),2&e){let a;t.iGM(a=t.CRH())&&(o.collapseHeader=a.first)}},hostAttrs:[1,"ant-collapse-item"],hostVars:6,hostBindings:function(e,o){2&e&&t.ekj("ant-collapse-no-arrow",!o.nzShowArrow)("ant-collapse-item-active",o.nzActive)("ant-collapse-item-disabled",o.nzDisabled)},inputs:{nzActive:"nzActive",nzDisabled:"nzDisabled",nzShowArrow:"nzShowArrow",nzExtra:"nzExtra",nzHeader:"nzHeader",nzExpandedIcon:"nzExpandedIcon"},outputs:{nzActiveChange:"nzActiveChange"},exportAs:["nzCollapsePanel"],features:[t._Bn([ut.kn])],ngContentSelectors:Ee,decls:8,vars:8,consts:[["role","button",1,"ant-collapse-header"],["collapseHeader",""],[4,"ngIf"],[4,"nzStringTemplateOutlet"],["class","ant-collapse-extra",4,"ngIf"],[1,"ant-collapse-content"],[1,"ant-collapse-content-box"],["nz-icon","",1,"ant-collapse-arrow",3,"nzType","nzRotate"],[1,"ant-collapse-extra"]],template:function(e,o){1&e&&(t.F$t(),t.TgZ(0,"div",0,1),t.YNc(2,vi,2,1,"div",2),t.YNc(3,zi,2,1,"ng-container",3),t.YNc(4,Oi,2,1,"div",4),t.qZA(),t.TgZ(5,"div",5)(6,"div",6),t.Hsn(7),t.qZA()()),2&e&&(t.uIk("aria-expanded",o.nzActive),t.xp6(2),t.Q6J("ngIf",o.nzShowArrow),t.xp6(1),t.Q6J("nzStringTemplateOutlet",o.nzHeader),t.xp6(1),t.Q6J("ngIf",o.nzExtra),t.xp6(1),t.ekj("ant-collapse-content-active",o.nzActive),t.Q6J("@.disabled",!(null==o.noAnimation||!o.noAnimation.nzNoAnimation))("@collapseMotion",o.nzActive?"expanded":"hidden"))},dependencies:[p.O5,lt.Ls,ct.f],encapsulation:2,data:{animation:[_i.J_]},changeDetection:0}),(0,D.gn)([(0,E.yF)()],i.prototype,"nzActive",void 0),(0,D.gn)([(0,E.yF)()],i.prototype,"nzDisabled",void 0),(0,D.gn)([(0,mt.oS)(),(0,E.yF)()],i.prototype,"nzShowArrow",void 0),i})(),bi=(()=>{class i{}return i.\u0275fac=function(e){return new(e||i)},i.\u0275mod=t.oAB({type:i}),i.\u0275inj=t.cJS({imports:[Ct.vT,p.ez,lt.PV,ct.T,De.g]}),i})();var Pi=c(4466),w=c(262),F=c(4007),Z=c(324),L=c(387),S=c(5136);class ${constructor(n,e,o){this.logger=n,this.notification=e,this.settingService=o}resolve(n,e){return this.settingService.getSettings(["output","logging","biliApi","header","danmaku","recorder","postprocessing","space"]).pipe((0,F.X)(3,300),(0,w.K)(o=>{throw this.logger.error("Failed to get settings:",o),this.notification.error("\u83b7\u53d6\u8bbe\u7f6e\u51fa\u9519",o.message,{nzDuration:0}),o}))}}$.\u0275fac=function(n){return new(n||$)(t.LFG(Z.Kf),t.LFG(L.zb),t.LFG(S.R))},$.\u0275prov=t.Yz7({token:$,factory:$.\u0275fac});var T=c(4004);class K{constructor(n,e,o){this.logger=n,this.notification=e,this.settingService=o}resolve(n,e){return this.settingService.getSettings(["emailNotification"]).pipe((0,T.U)(o=>o.emailNotification),(0,F.X)(3,300),(0,w.K)(o=>{throw this.logger.error("Failed to get email notification settings:",o),this.notification.error("\u83b7\u53d6\u90ae\u4ef6\u901a\u77e5\u8bbe\u7f6e\u51fa\u9519",o.message,{nzDuration:0}),o}))}}K.\u0275fac=function(n){return new(n||K)(t.LFG(Z.Kf),t.LFG(L.zb),t.LFG(S.R))},K.\u0275prov=t.Yz7({token:K,factory:K.\u0275fac});class X{constructor(n,e,o){this.logger=n,this.notification=e,this.settingService=o}resolve(n,e){return this.settingService.getSettings(["serverchanNotification"]).pipe((0,T.U)(o=>o.serverchanNotification),(0,F.X)(3,300),(0,w.K)(o=>{throw this.logger.error("Failed to get ServerChan notification settings:",o),this.notification.error("\u83b7\u53d6 ServerChan \u901a\u77e5\u8bbe\u7f6e\u51fa\u9519",o.message,{nzDuration:0}),o}))}}X.\u0275fac=function(n){return new(n||X)(t.LFG(Z.Kf),t.LFG(L.zb),t.LFG(S.R))},X.\u0275prov=t.Yz7({token:X,factory:X.\u0275fac});class j{constructor(n,e,o){this.logger=n,this.notification=e,this.settingService=o}resolve(n,e){return this.settingService.getSettings(["pushdeerNotification"]).pipe((0,T.U)(o=>o.pushdeerNotification),(0,F.X)(3,300),(0,w.K)(o=>{throw this.logger.error("Failed to get PushDeer notification settings:",o),this.notification.error("\u83b7\u53d6 pushdeer \u901a\u77e5\u8bbe\u7f6e\u51fa\u9519",o.message,{nzDuration:0}),o}))}}j.\u0275fac=function(n){return new(n||j)(t.LFG(Z.Kf),t.LFG(L.zb),t.LFG(S.R))},j.\u0275prov=t.Yz7({token:j,factory:j.\u0275fac});class tt{constructor(n,e,o){this.logger=n,this.notification=e,this.settingService=o}resolve(n,e){return this.settingService.getSettings(["pushplusNotification"]).pipe((0,T.U)(o=>o.pushplusNotification),(0,F.X)(3,300),(0,w.K)(o=>{throw this.logger.error("Failed to get pushplus notification settings:",o),this.notification.error("\u83b7\u53d6 pushplus \u901a\u77e5\u8bbe\u7f6e\u51fa\u9519",o.message,{nzDuration:0}),o}))}}tt.\u0275fac=function(n){return new(n||tt)(t.LFG(Z.Kf),t.LFG(L.zb),t.LFG(S.R))},tt.\u0275prov=t.Yz7({token:tt,factory:tt.\u0275fac});class et{constructor(n,e,o){this.logger=n,this.notification=e,this.settingService=o}resolve(n,e){return this.settingService.getSettings(["telegramNotification"]).pipe((0,T.U)(o=>o.telegramNotification),(0,F.X)(3,300),(0,w.K)(o=>{throw this.logger.error("Failed to get telegram notification settings:",o),this.notification.error("\u83b7\u53d6 telegram \u901a\u77e5\u8bbe\u7f6e\u51fa\u9519",o.message,{nzDuration:0}),o}))}}et.\u0275fac=function(n){return new(n||et)(t.LFG(Z.Kf),t.LFG(L.zb),t.LFG(S.R))},et.\u0275prov=t.Yz7({token:et,factory:et.\u0275fac});class nt{constructor(n,e,o){this.logger=n,this.notification=e,this.settingService=o}resolve(n,e){return this.settingService.getSettings(["webhooks"]).pipe((0,T.U)(o=>o.webhooks),(0,F.X)(3,300),(0,w.K)(o=>{throw this.logger.error("Failed to get webhook settings:",o),this.notification.error("\u83b7\u53d6 Webhook \u8bbe\u7f6e\u51fa\u9519",o.message,{nzDuration:0}),o}))}}nt.\u0275fac=function(n){return new(n||nt)(t.LFG(Z.Kf),t.LFG(L.zb),t.LFG(S.R))},nt.\u0275prov=t.Yz7({token:nt,factory:nt.\u0275fac});var v=c(6582);class it{constructor(n,e,o){this.logger=n,this.notification=e,this.settingService=o}resolve(n,e){return this.settingService.getSettings(["barkNotification"]).pipe((0,T.U)(o=>o.barkNotification),(0,F.X)(3,300),(0,w.K)(o=>{throw this.logger.error("Failed to get bark notification settings:",o),this.notification.error("\u83b7\u53d6 bark \u901a\u77e5\u8bbe\u7f6e\u51fa\u9519",o.message,{nzDuration:0}),o}))}}it.\u0275fac=function(n){return new(n||it)(t.LFG(Z.Kf),t.LFG(L.zb),t.LFG(S.R))},it.\u0275prov=t.Yz7({token:it,factory:it.\u0275fac});var Ue=c(5026),Ti=c(5363),wi=c(4986),Ie=c(4704),b=c(2340);const x="RouterScrollService",Je="defaultViewport",Qe="customViewport";class pt{constructor(n,e,o,a){this.router=n,this.activatedRoute=e,this.viewportScroller=o,this.logger=a,this.addQueue=[],this.addBeforeNavigationQueue=[],this.removeQueue=[],this.routeStrategies=[],this.scrollDefaultViewport=!0,this.customViewportToScroll=null,b.N.traceRouterScrolling&&this.logger.trace(`${x}:: constructor`),b.N.traceRouterScrolling&&this.logger.trace(`${x}:: Subscribing to router events`);const s=this.router.events.pipe((0,ae.h)(g=>g instanceof v.OD||g instanceof v.m2),(0,T.U)(g=>g),(0,Ue.R)((g,m)=>{b.N.traceRouterScrolling&&this.logger.trace(`${x}:: Updating the known scroll positions`);const h={...g.positions};return m instanceof v.OD&&this.scrollDefaultViewport&&(b.N.traceRouterScrolling&&this.logger.trace(`${x}:: Storing the scroll position of the default viewport`),h[`${m.id}-${Je}`]=this.viewportScroller.getScrollPosition()),m instanceof v.OD&&this.customViewportToScroll&&(b.N.traceRouterScrolling&&this.logger.trace(`${x}:: Storing the scroll position of the custom viewport`),h[`${m.id}-${Qe}`]=this.customViewportToScroll.scrollTop),{event:m,positions:h,trigger:m instanceof v.OD?m.navigationTrigger:g.trigger,idToRestore:m instanceof v.OD&&m.restoredState&&m.restoredState.navigationId+1||g.idToRestore,routeData:this.activatedRoute.firstChild?.routeConfig?.data}},{event:{},positions:{},idToRestore:-1}),(0,ae.h)(g=>!!g.trigger),(0,Ti.Q)(wi.z));this.scrollPositionRestorationSubscription=s.subscribe(g=>{const m=this.routeStrategies.find(ft=>g.event.url.indexOf(ft.partialRoute)>-1),h=m&&m.behaviour===Ie.g.KEEP_POSITION||!1,k=g.routeData&&g.routeData.scrollBehavior&&g.routeData.scrollBehavior===Ie.g.KEEP_POSITION||!1,J=h||k;if(g.event instanceof v.m2){this.processRemoveQueue(this.removeQueue);const ft=g.trigger&&"imperative"===g.trigger||!1,ce=!J||ft;b.N.traceRouterScrolling&&(this.logger.trace(`${x}:: Existing strategy with keep position behavior? `,h),this.logger.trace(`${x}:: Route data with keep position behavior? `,k),this.logger.trace(`${x}:: Imperative trigger? `,ft),this.logger.debug(`${x}:: Should scroll? `,ce)),ce?(this.scrollDefaultViewport&&(b.N.traceRouterScrolling&&this.logger.debug(`${x}:: Scrolling the default viewport`),this.viewportScroller.scrollToPosition([0,0])),this.customViewportToScroll&&(b.N.traceRouterScrolling&&this.logger.debug(`${x}:: Scrolling a custom viewport: `,this.customViewportToScroll),this.customViewportToScroll.scrollTop=0)):(b.N.traceRouterScrolling&&this.logger.debug(`${x}:: Not scrolling`),this.scrollDefaultViewport&&this.viewportScroller.scrollToPosition(g.positions[`${g.idToRestore}-${Je}`]),this.customViewportToScroll&&(this.customViewportToScroll.scrollTop=g.positions[`${g.idToRestore}-${Qe}`])),this.processRemoveQueue(this.addBeforeNavigationQueue.map(es=>es.partialRoute),!0),this.processAddQueue(this.addQueue),this.addQueue=[],this.removeQueue=[],this.addBeforeNavigationQueue=[]}else this.processAddQueue(this.addBeforeNavigationQueue)})}addStrategyOnceBeforeNavigationForPartialRoute(n,e){b.N.traceRouterScrolling&&this.logger.trace(`${x}:: Adding a strategy once for before navigation towards [${n}]: `,e),this.addBeforeNavigationQueue.push({partialRoute:n,behaviour:e,onceBeforeNavigation:!0})}addStrategyForPartialRoute(n,e){b.N.traceRouterScrolling&&this.logger.trace(`${x}:: Adding a strategy for partial route: [${n}]`,e),this.addQueue.push({partialRoute:n,behaviour:e})}removeStrategyForPartialRoute(n){b.N.traceRouterScrolling&&this.logger.trace(`${x}:: Removing strategory for: [${n}]: `),this.removeQueue.push(n)}setCustomViewportToScroll(n){b.N.traceRouterScrolling&&this.logger.trace(`${x}:: Setting a custom viewport to scroll: `,n),this.customViewportToScroll=n}disableScrollDefaultViewport(){b.N.traceRouterScrolling&&this.logger.trace(`${x}:: Disabling scrolling the default viewport`),this.scrollDefaultViewport=!1}enableScrollDefaultViewPort(){b.N.traceRouterScrolling&&this.logger.trace(`${x}:: Enabling scrolling the default viewport`),this.scrollDefaultViewport=!0}processAddQueue(n){for(const e of n)-1===this.routeStrategyPosition(e.partialRoute)&&this.routeStrategies.push(e)}processRemoveQueue(n,e=!1){for(const o of n){const a=this.routeStrategyPosition(o);!e&&a>-1&&this.routeStrategies[a].onceBeforeNavigation||a>-1&&this.routeStrategies.splice(a,1)}}routeStrategyPosition(n){return this.routeStrategies.map(e=>e.partialRoute).indexOf(n)}ngOnDestroy(){b.N.traceRouterScrolling&&this.logger.trace(`${x}:: ngOnDestroy`),this.scrollPositionRestorationSubscription&&this.scrollPositionRestorationSubscription.unsubscribe()}}pt.\u0275fac=function(n){return new(n||pt)(t.LFG(v.F0),t.LFG(v.gz),t.LFG(p.EM),t.LFG(Z.Kf))},pt.\u0275prov=t.Yz7({token:pt,factory:pt.\u0275fac,providedIn:"root"});var q=c(4670),Fi=c(3496),Si=c(1149),yi=c(7242);const M=function Ai(i,n){var e={};return n=(0,yi.Z)(n,3),(0,Si.Z)(i,function(o,a,s){(0,Fi.Z)(e,a,n(o,a,s))}),e};var re=c(8505),ki=c(4884),Di=c(4116),Ve=c(4825),Le=c(4177),qe=c(8706),Ei=c(5202),Zi=c(1986),Ni=c(7583),Ji=Object.prototype.hasOwnProperty;var Li=c(1854),qi=c(2134),se=c(9651);function P(i){const n="result"in i;return M(i.diff,()=>n)}class z{constructor(n,e){this.message=n,this.settingService=e}syncSettings(n,e,o,a=!0){return o.pipe((0,Ue.R)(([,s],g)=>[s,g,(0,qi.e5)(g,s,a)],[e,e,{}]),(0,ae.h)(([,,s])=>!function Qi(i){if(null==i)return!0;if((0,qe.Z)(i)&&((0,Le.Z)(i)||"string"==typeof i||"function"==typeof i.splice||(0,Ei.Z)(i)||(0,Ni.Z)(i)||(0,Ve.Z)(i)))return!i.length;var n=(0,Di.Z)(i);if("[object Map]"==n||"[object Set]"==n)return!i.size;if((0,Zi.Z)(i))return!(0,ki.Z)(i).length;for(var e in i)if(Ji.call(i,e))return!1;return!0}(s)),(0,Pe.w)(([s,g,m])=>this.settingService.changeSettings({[n]:m}).pipe((0,F.X)(3,300),(0,re.b)(h=>{console.assert((0,Li.Z)(h[n],g),"result settings should equal current settings",{curr:g,result:h[n]})},h=>{this.message.error(`\u8bbe\u7f6e\u51fa\u9519: ${h.message}`)}),(0,T.U)(h=>({prev:s,curr:g,diff:m,result:h[n]})),(0,w.K)(h=>(0,ie.of)({prev:s,curr:g,diff:m,error:h})))),(0,re.b)(s=>console.debug(`${n} settings sync detail:`,s)))}}z.\u0275fac=function(n){return new(n||z)(t.LFG(se.dD),t.LFG(S.R))},z.\u0275prov=t.Yz7({token:z,factory:z.\u0275fac,providedIn:"root"});var d=c(4960);class y{get actionable(){return this.directive?.valueAccessor instanceof U.i}constructor(){}onClick(n){n.target===n.currentTarget&&(n.preventDefault(),n.stopPropagation(),this.directive?.valueAccessor instanceof U.i&&this.directive.control.setValue(!this.directive.control.value))}}y.\u0275fac=function(n){return new(n||y)},y.\u0275dir=t.lG2({type:y,selectors:[["","appSwitchActionable",""]],contentQueries:function(n,e,o){if(1&n&&t.Suo(o,r.u,5),2&n){let a;t.iGM(a=t.CRH())&&(e.directive=a.first)}},hostVars:2,hostBindings:function(n,e){1&n&&t.NdJ("click",function(a){return e.onClick(a)}),2&n&&t.ekj("actionable",e.actionable)}});class xt{constructor(n,e,o){this.changeDetector=e,this.settingsSyncService=o,this.syncFailedWarningTip=d.yT,this.intervalOptions=[{label:"\u4e0d\u68c0\u6d4b",value:0},{label:"10 \u79d2",value:10},{label:"30 \u79d2",value:30},{label:"1 \u5206\u949f",value:60},{label:"3 \u5206\u949f",value:180},{label:"5 \u5206\u949f",value:300},{label:"10 \u5206\u949f",value:600}],this.thresholdOptions=[{label:"1 GB",value:1024**3},{label:"3 GB",value:1024**3*3},{label:"5 GB",value:1024**3*5},{label:"10 GB",value:1024**3*10},{label:"20 GB",value:1024**3*20}],this.settingsForm=n.group({recycleRecords:[""],checkInterval:[""],spaceThreshold:[""]})}get recycleRecordsControl(){return this.settingsForm.get("recycleRecords")}get checkIntervalControl(){return this.settingsForm.get("checkInterval")}get spaceThresholdControl(){return this.settingsForm.get("spaceThreshold")}ngOnChanges(){this.syncStatus=M(this.settings,()=>!0),this.settingsForm.setValue(this.settings)}ngOnInit(){this.settingsSyncService.syncSettings("space",this.settings,this.settingsForm.valueChanges).subscribe(n=>{this.syncStatus={...this.syncStatus,...P(n)},this.changeDetector.markForCheck()})}}xt.\u0275fac=function(n){return new(n||xt)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(z))},xt.\u0275cmp=t.Xpm({type:xt,selectors:[["app-disk-space-settings"]],inputs:{settings:"settings"},features:[t.TTD],decls:16,vars:9,consts:[["nz-form","",3,"formGroup"],[1,"setting-item"],["nzNoColon","",1,"setting-label"],[1,"setting-control","select",3,"nzWarningTip","nzValidateStatus"],["formControlName","checkInterval",3,"nzOptions"],["formControlName","spaceThreshold",3,"nzOptions"],["appSwitchActionable","",1,"setting-item"],[1,"setting-control","switch",3,"nzWarningTip","nzValidateStatus"],["formControlName","recycleRecords"]],template:function(n,e){1&n&&(t.TgZ(0,"form",0)(1,"nz-form-item",1)(2,"nz-form-label",2),t._uU(3,"\u786c\u76d8\u7a7a\u95f4\u68c0\u6d4b\u95f4\u9694"),t.qZA(),t.TgZ(4,"nz-form-control",3),t._UZ(5,"nz-select",4),t.qZA()(),t.TgZ(6,"nz-form-item",1)(7,"nz-form-label",2),t._uU(8,"\u786c\u76d8\u7a7a\u95f4\u68c0\u6d4b\u9608\u503c"),t.qZA(),t.TgZ(9,"nz-form-control",3),t._UZ(10,"nz-select",5),t.qZA()(),t.TgZ(11,"nz-form-item",6)(12,"nz-form-label",2),t._uU(13,"\u7a7a\u95f4\u4e0d\u8db3\u5220\u9664\u65e7\u5f55\u64ad\u6587\u4ef6"),t.qZA(),t.TgZ(14,"nz-form-control",7),t._UZ(15,"nz-switch",8),t.qZA()()()),2&n&&(t.Q6J("formGroup",e.settingsForm),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.checkInterval?e.checkIntervalControl:"warning"),t.xp6(1),t.Q6J("nzOptions",e.intervalOptions),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.spaceThreshold?e.spaceThresholdControl:"warning"),t.xp6(1),t.Q6J("nzOptions",e.thresholdOptions),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.recycleRecords?e.recycleRecordsControl:"warning"))},dependencies:[r._Y,r.JJ,r.JL,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,U.i,zt.Vq,y],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});var I=c(7044);class Ot{}Ot.\u0275fac=function(n){return new(n||Ot)},Ot.\u0275cmp=t.Xpm({type:Ot,selectors:[["app-notification-settings"]],decls:30,vars:0,consts:[["routerLink","email-notification",1,"setting-item"],[1,"setting-label"],[1,"setting-control"],["nz-icon","","nzType","right"],["routerLink","serverchan-notification",1,"setting-item"],["routerLink","pushdeer-notification",1,"setting-item"],["routerLink","pushplus-notification",1,"setting-item"],["routerLink","telegram-notification",1,"setting-item"],["routerLink","bark-notification",1,"setting-item"]],template:function(n,e){1&n&&(t.TgZ(0,"a",0)(1,"span",1),t._uU(2,"\u90ae\u7bb1\u901a\u77e5"),t.qZA(),t.TgZ(3,"span",2),t._UZ(4,"i",3),t.qZA()(),t.TgZ(5,"a",4)(6,"span",1),t._uU(7,"ServerChan \u901a\u77e5"),t.qZA(),t.TgZ(8,"span",2),t._UZ(9,"i",3),t.qZA()(),t.TgZ(10,"a",5)(11,"span",1),t._uU(12,"PushDeer \u901a\u77e5"),t.qZA(),t.TgZ(13,"span",2),t._UZ(14,"i",3),t.qZA()(),t.TgZ(15,"a",6)(16,"span",1),t._uU(17,"pushplus \u901a\u77e5"),t.qZA(),t.TgZ(18,"span",2),t._UZ(19,"i",3),t.qZA()(),t.TgZ(20,"a",7)(21,"span",1),t._uU(22,"telegram \u901a\u77e5"),t.qZA(),t.TgZ(23,"span",2),t._UZ(24,"i",3),t.qZA()(),t.TgZ(25,"a",8)(26,"span",1),t._uU(27,"Bark \u901a\u77e5"),t.qZA(),t.TgZ(28,"span",2),t._UZ(29,"i",3),t.qZA()())},dependencies:[v.rH,I.w,lt.Ls],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});var Yi=Math.ceil,Wi=Math.max;var Hi=c(3093),Ye=c(6667),Mt=c(1999);var Xi=/\s/;var eo=/^\s+/;const io=function no(i){return i&&i.slice(0,function ji(i){for(var n=i.length;n--&&Xi.test(i.charAt(n)););return n}(i)+1).replace(eo,"")};var oo=c(6460),ao=/^[-+]0x[0-9a-f]+$/i,ro=/^0b[01]+$/i,so=/^0o[0-7]+$/i,lo=parseInt;const ze=function mo(i){return i?Infinity===(i=function co(i){if("number"==typeof i)return i;if((0,oo.Z)(i))return NaN;if((0,Mt.Z)(i)){var n="function"==typeof i.valueOf?i.valueOf():i;i=(0,Mt.Z)(n)?n+"":n}if("string"!=typeof i)return 0===i?i:+i;i=io(i);var e=ro.test(i);return e||so.test(i)?lo(i.slice(2),e?2:8):ao.test(i)?NaN:+i}(i))||-Infinity===i?17976931348623157e292*(i<0?-1:1):i==i?i:0:0===i?i:0},_o=function po(i){return function(n,e,o){return o&&"number"!=typeof o&&function $i(i,n,e){if(!(0,Mt.Z)(e))return!1;var o=typeof n;return!!("number"==o?(0,qe.Z)(e)&&(0,Ye.Z)(n,e.length):"string"==o&&n in e)&&(0,Hi.Z)(e[n],i)}(n,e,o)&&(e=o=void 0),n=ze(n),void 0===e?(e=n,n=0):e=ze(e),function Ri(i,n,e,o){for(var a=-1,s=Wi(Yi((n-i)/(e||1)),0),g=Array(s);s--;)g[o?s:++a]=i,i+=e;return g}(n,e,o=void 0===o?n{return(i=ot||(ot={}))[i.EACCES=13]="EACCES",i[i.ENOTDIR=20]="ENOTDIR",ot;var i})(),fo=c(529),Co=c(7930);class Y{constructor(n,e){this.http=n,this.url=e}validateDir(n){const e=this.url.makeApiUrl("/api/v1/validation/dir");return this.http.post(e,{path:n})}validateCookie(n){const e=this.url.makeApiUrl("/api/v1/validation/cookie");return this.http.post(e,{cookie:n})}}function vo(i,n){1&i&&(t.ynx(0),t._uU(1," \u8bf7\u8f93\u5165\u4fdd\u5b58\u4f4d\u7f6e "),t.BQk())}function zo(i,n){1&i&&(t.ynx(0),t._uU(1," \u4e0d\u662f\u4e00\u4e2a\u76ee\u5f55 "),t.BQk())}function xo(i,n){1&i&&(t.ynx(0),t._uU(1," \u6ca1\u6709\u8bfb\u5199\u6743\u9650 "),t.BQk())}function Oo(i,n){1&i&&(t.ynx(0),t._uU(1," \u672a\u80fd\u8fdb\u884c\u9a8c\u8bc1 "),t.BQk())}function Mo(i,n){if(1&i&&(t.YNc(0,vo,2,0,"ng-container",6),t.YNc(1,zo,2,0,"ng-container",6),t.YNc(2,xo,2,0,"ng-container",6),t.YNc(3,Oo,2,0,"ng-container",6)),2&i){const e=n.$implicit;t.Q6J("ngIf",e.hasError("required")),t.xp6(1),t.Q6J("ngIf",e.hasError("notADirectory")),t.xp6(1),t.Q6J("ngIf",e.hasError("noPermissions")),t.xp6(1),t.Q6J("ngIf",e.hasError("failedToValidate"))}}function bo(i,n){if(1&i&&(t.ynx(0),t.TgZ(1,"form",2)(2,"nz-form-item")(3,"nz-form-control",3),t._UZ(4,"input",4),t.YNc(5,Mo,4,4,"ng-template",null,5,t.W1O),t.qZA()()(),t.BQk()),2&i){const e=t.MAs(6),o=t.oxw();t.xp6(1),t.Q6J("formGroup",o.settingsForm),t.xp6(2),t.Q6J("nzErrorTip",e)}}Y.\u0275fac=function(n){return new(n||Y)(t.LFG(fo.eN),t.LFG(Co.i))},Y.\u0275prov=t.Yz7({token:Y,factory:Y.\u0275fac,providedIn:"root"});class bt{constructor(n,e,o){this.changeDetector=e,this.validationService=o,this.value="",this.visible=!1,this.visibleChange=new t.vpe,this.cancel=new t.vpe,this.confirm=new t.vpe,this.logDirAsyncValidator=a=>this.validationService.validateDir(a.value).pipe((0,T.U)(s=>{switch(s.code){case ot.ENOTDIR:return{error:!0,notADirectory:!0};case ot.EACCES:return{error:!0,noPermissions:!0};default:return null}}),(0,w.K)(()=>(0,ie.of)({error:!0,failedToValidate:!0}))),this.settingsForm=n.group({logDir:["",[r.kI.required],[this.logDirAsyncValidator]]})}get control(){return this.settingsForm.get("logDir")}ngOnChanges(){this.setValue()}open(){this.setValue(),this.setVisible(!0)}close(){this.setVisible(!1)}setVisible(n){this.visible=n,this.visibleChange.emit(n),this.changeDetector.markForCheck()}setValue(){this.control.setValue(this.value),this.changeDetector.markForCheck()}handleCancel(){this.cancel.emit(),this.close()}handleConfirm(){this.confirm.emit(this.control.value.trim()),this.close()}}bt.\u0275fac=function(n){return new(n||bt)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(Y))},bt.\u0275cmp=t.Xpm({type:bt,selectors:[["app-logdir-edit-dialog"]],inputs:{value:"value",visible:"visible"},outputs:{visibleChange:"visibleChange",cancel:"cancel",confirm:"confirm"},features:[t.TTD],decls:2,vars:2,consts:[["nzTitle","\u4fee\u6539\u65e5\u5fd7\u6587\u4ef6\u5b58\u653e\u76ee\u5f55","nzCentered","",3,"nzVisible","nzOkDisabled","nzVisibleChange","nzOnOk","nzOnCancel"],[4,"nzModalContent"],["nz-form","",3,"formGroup"],["nzHasFeedback","","nzValidatingTip","\u6b63\u5728\u9a8c\u8bc1...",3,"nzErrorTip"],["type","text","required","","nz-input","","formControlName","logDir"],["errorTip",""],[4,"ngIf"]],template:function(n,e){1&n&&(t.TgZ(0,"nz-modal",0),t.NdJ("nzVisibleChange",function(a){return e.visible=a})("nzOnOk",function(){return e.handleConfirm()})("nzOnCancel",function(){return e.handleCancel()}),t.YNc(1,bo,7,2,"ng-container",1),t.qZA()),2&n&&t.Q6J("nzVisible",e.visible)("nzOkDisabled",e.control.invalid||e.control.value.trim()===e.value)},dependencies:[p.O5,r._Y,r.Fj,r.JJ,r.JL,r.Q7,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.Fd,O.Zp,_.du,_.Hf],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class Pt{constructor(n,e,o){this.changeDetector=e,this.settingsSyncService=o,this.syncFailedWarningTip=d.yT,this.logLevelOptions=[{label:"VERBOSE",value:"NOTSET"},{label:"DEBUG",value:"DEBUG"},{label:"INFO",value:"INFO"},{label:"WARNING",value:"WARNING"},{label:"ERROR",value:"ERROR"},{label:"CRITICAL",value:"CRITICAL"}],this.backupOptions=_o(0,91).map(a=>({label:a.toString(),value:a})),this.settingsForm=n.group({logDir:[""],consoleLogLevel:[""],backupCount:[""]})}get logDirControl(){return this.settingsForm.get("logDir")}get consoleLogLevelControl(){return this.settingsForm.get("consoleLogLevel")}get backupCountControl(){return this.settingsForm.get("backupCount")}ngOnChanges(){this.syncStatus=M(this.settings,()=>!0),this.settingsForm.setValue(this.settings)}ngOnInit(){this.settingsSyncService.syncSettings("logging",this.settings,this.settingsForm.valueChanges).subscribe(n=>{this.syncStatus={...this.syncStatus,...P(n)},this.changeDetector.markForCheck()})}}Pt.\u0275fac=function(n){return new(n||Pt)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(z))},Pt.\u0275cmp=t.Xpm({type:Pt,selectors:[["app-logging-settings"]],inputs:{settings:"settings"},features:[t.TTD],decls:19,vars:11,consts:[["nz-form","",3,"formGroup"],[1,"setting-item","actionable",3,"click"],[1,"setting-label"],[3,"nzWarningTip","nzValidateStatus"],[1,"setting-value"],[3,"value","confirm"],["logDirEditDialog",""],["appSwitchActionable","",1,"setting-item"],["nzNoColon","",1,"setting-label"],[1,"setting-control","select",3,"nzWarningTip","nzValidateStatus"],["formControlName","consoleLogLevel",3,"nzOptions"],[1,"setting-item"],["formControlName","backupCount",3,"nzOptions"]],template:function(n,e){if(1&n){const o=t.EpF();t.TgZ(0,"form",0)(1,"nz-form-item",1),t.NdJ("click",function(){t.CHM(o);const s=t.MAs(8);return t.KtG(s.open())}),t.TgZ(2,"nz-form-label",2),t._uU(3,"\u65e5\u5fd7\u6587\u4ef6\u5b58\u653e\u76ee\u5f55"),t.qZA(),t.TgZ(4,"nz-form-control",3)(5,"nz-form-text",4),t._uU(6),t.qZA(),t.TgZ(7,"app-logdir-edit-dialog",5,6),t.NdJ("confirm",function(s){return e.logDirControl.setValue(s)}),t.qZA()()(),t.TgZ(9,"nz-form-item",7)(10,"nz-form-label",8),t._uU(11,"\u7ec8\u7aef\u65e5\u5fd7\u8f93\u51fa\u7ea7\u522b"),t.qZA(),t.TgZ(12,"nz-form-control",9),t._UZ(13,"nz-select",10),t.qZA()(),t.TgZ(14,"nz-form-item",11)(15,"nz-form-label",8),t._uU(16,"\u65e5\u5fd7\u6587\u4ef6\u5907\u4efd\u6570\u91cf"),t.qZA(),t.TgZ(17,"nz-form-control",9),t._UZ(18,"nz-select",12),t.qZA()()()}2&n&&(t.Q6J("formGroup",e.settingsForm),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.logDir?e.logDirControl:"warning"),t.xp6(2),t.hij("",e.logDirControl.value," "),t.xp6(1),t.Q6J("value",e.logDirControl.value),t.xp6(5),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.consoleLogLevel?e.consoleLogLevelControl:"warning"),t.xp6(1),t.Q6J("nzOptions",e.logLevelOptions),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.backupCount?e.backupCountControl:"warning"),t.xp6(1),t.Q6J("nzOptions",e.backupOptions))},dependencies:[r._Y,r.JJ,r.JL,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,l.EF,zt.Vq,y,bt],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class Tt{constructor(n,e,o){this.changeDetector=e,this.settingsSyncService=o,this.syncFailedWarningTip=d.yT,this.settingsForm=n.group({danmuUname:[""],recordGiftSend:[""],recordFreeGifts:[""],recordGuardBuy:[""],recordSuperChat:[""],saveRawDanmaku:[""]})}get danmuUnameControl(){return this.settingsForm.get("danmuUname")}get recordGiftSendControl(){return this.settingsForm.get("recordGiftSend")}get recordFreeGiftsControl(){return this.settingsForm.get("recordFreeGifts")}get recordGuardBuyControl(){return this.settingsForm.get("recordGuardBuy")}get recordSuperChatControl(){return this.settingsForm.get("recordSuperChat")}get saveRawDanmakuControl(){return this.settingsForm.get("saveRawDanmaku")}ngOnChanges(){this.syncStatus=M(this.settings,()=>!0),this.settingsForm.setValue(this.settings)}ngOnInit(){this.settingsSyncService.syncSettings("danmaku",this.settings,this.settingsForm.valueChanges).subscribe(n=>{this.syncStatus={...this.syncStatus,...P(n)},this.changeDetector.markForCheck()})}}function Po(i,n){1&i&&(t.TgZ(0,"p"),t._uU(1," \u81ea\u52a8: \u6ca1\u51fa\u9519\u5c31\u5220\u9664\u6e90\u6587\u4ef6"),t._UZ(2,"br"),t._uU(3," \u8c28\u614e: \u6ca1\u51fa\u9519\u4e14\u6ca1\u8b66\u544a\u624d\u5220\u9664\u6e90\u6587\u4ef6"),t._UZ(4,"br"),t._uU(5," \u4ece\u4e0d: \u603b\u662f\u4fdd\u7559\u6e90\u6587\u4ef6"),t._UZ(6,"br"),t.qZA())}function To(i,n){if(1&i&&(t.ynx(0),t.TgZ(1,"label",13),t._uU(2),t.qZA(),t.BQk()),2&i){const e=n.$implicit;t.xp6(1),t.Q6J("nzValue",e.value),t.xp6(1),t.Oqu(e.label)}}Tt.\u0275fac=function(n){return new(n||Tt)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(z))},Tt.\u0275cmp=t.Xpm({type:Tt,selectors:[["app-danmaku-settings"]],inputs:{settings:"settings"},features:[t.TTD],decls:31,vars:13,consts:[["nz-form","",3,"formGroup"],["appSwitchActionable","",1,"setting-item"],["nzNoColon","","nzTooltipTitle","\u8bb0\u5f55\u793c\u7269\u4fe1\u606f\u5230\u5f39\u5e55\u6587\u4ef6\u91cc",1,"setting-label"],[1,"setting-control","switch",3,"nzWarningTip","nzValidateStatus"],["formControlName","recordGiftSend"],["nzNoColon","","nzTooltipTitle","\u8bb0\u5f55\u514d\u8d39\u793c\u7269\u4fe1\u606f\u5230\u5f39\u5e55\u6587\u4ef6\u91cc",1,"setting-label"],["formControlName","recordFreeGifts"],["nzNoColon","","nzTooltipTitle","\u8bb0\u5f55\u4e0a\u8230\u4fe1\u606f\u5230\u5f39\u5e55\u6587\u4ef6\u91cc",1,"setting-label"],["formControlName","recordGuardBuy"],["nzNoColon","","nzTooltipTitle","\u8bb0\u5f55 Super Chat \u4fe1\u606f\u5230\u5f39\u5e55\u6587\u4ef6\u91cc",1,"setting-label"],["formControlName","recordSuperChat"],["nzNoColon","","nzTooltipTitle","\u53d1\u9001\u8005: \u5f39\u5e55\u5185\u5bb9",1,"setting-label"],["formControlName","danmuUname"],["nzNoColon","","nzTooltipTitle","\u4fdd\u5b58\u539f\u59cb\u5f39\u5e55\u5230 JSON lines \u6587\u4ef6\uff0c\u4e3b\u8981\u7528\u4e8e\u5206\u6790\u8c03\u8bd5\u3002",1,"setting-label"],["formControlName","saveRawDanmaku"]],template:function(n,e){1&n&&(t.TgZ(0,"form",0)(1,"nz-form-item",1)(2,"nz-form-label",2),t._uU(3,"\u8bb0\u5f55\u793c\u7269"),t.qZA(),t.TgZ(4,"nz-form-control",3),t._UZ(5,"nz-switch",4),t.qZA()(),t.TgZ(6,"nz-form-item",1)(7,"nz-form-label",5),t._uU(8,"\u8bb0\u5f55\u514d\u8d39\u793c\u7269"),t.qZA(),t.TgZ(9,"nz-form-control",3),t._UZ(10,"nz-switch",6),t.qZA()(),t.TgZ(11,"nz-form-item",1)(12,"nz-form-label",7),t._uU(13,"\u8bb0\u5f55\u4e0a\u8230"),t.qZA(),t.TgZ(14,"nz-form-control",3),t._UZ(15,"nz-switch",8),t.qZA()(),t.TgZ(16,"nz-form-item",1)(17,"nz-form-label",9),t._uU(18,"\u8bb0\u5f55 Super Chat"),t.qZA(),t.TgZ(19,"nz-form-control",3),t._UZ(20,"nz-switch",10),t.qZA()(),t.TgZ(21,"nz-form-item",1)(22,"nz-form-label",11),t._uU(23,"\u5f39\u5e55\u524d\u52a0\u7528\u6237\u540d"),t.qZA(),t.TgZ(24,"nz-form-control",3),t._UZ(25,"nz-switch",12),t.qZA()(),t.TgZ(26,"nz-form-item",1)(27,"nz-form-label",13),t._uU(28,"\u4fdd\u5b58\u539f\u59cb\u5f39\u5e55"),t.qZA(),t.TgZ(29,"nz-form-control",3),t._UZ(30,"nz-switch",14),t.qZA()()()),2&n&&(t.Q6J("formGroup",e.settingsForm),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.recordGiftSend?e.recordGiftSendControl:"warning"),t.xp6(5),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.recordFreeGifts?e.recordFreeGiftsControl:"warning"),t.xp6(5),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.recordGuardBuy?e.recordGuardBuyControl:"warning"),t.xp6(5),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.recordSuperChat?e.recordSuperChatControl:"warning"),t.xp6(5),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.danmuUname?e.danmuUnameControl:"warning"),t.xp6(5),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.saveRawDanmaku?e.saveRawDanmakuControl:"warning"))},dependencies:[r._Y,r.JJ,r.JL,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,U.i,y],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class wt{constructor(n,e,o){this.changeDetector=e,this.settingsSyncService=o,this.deleteStrategies=d.rc,this.syncFailedWarningTip=d.yT,this.settingsForm=n.group({injectExtraMetadata:[""],remuxToMp4:[""],deleteSource:[""]})}get injectExtraMetadataControl(){return this.settingsForm.get("injectExtraMetadata")}get remuxToMp4Control(){return this.settingsForm.get("remuxToMp4")}get deleteSourceControl(){return this.settingsForm.get("deleteSource")}ngOnChanges(){this.syncStatus=M(this.settings,()=>!0),this.settingsForm.setValue(this.settings)}ngOnInit(){this.settingsSyncService.syncSettings("postprocessing",this.settings,this.settingsForm.valueChanges).subscribe(n=>{this.syncStatus={...this.syncStatus,...P(n)},this.changeDetector.markForCheck()})}}wt.\u0275fac=function(n){return new(n||wt)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(z))},wt.\u0275cmp=t.Xpm({type:wt,selectors:[["app-post-processing-settings"]],inputs:{settings:"settings"},features:[t.TTD],decls:19,vars:11,consts:[["nz-form","",3,"formGroup"],["appSwitchActionable","",1,"setting-item"],["nzNoColon","","nzTooltipTitle","\u6dfb\u52a0\u5173\u952e\u5e27\u7b49\u5143\u6570\u636e\u4f7f\u5b9a\u4f4d\u64ad\u653e\u548c\u62d6\u8fdb\u5ea6\u6761\u4e0d\u4f1a\u5361\u987f",1,"setting-label"],[1,"setting-control","switch",3,"nzWarningTip","nzValidateStatus"],["formControlName","injectExtraMetadata",3,"nzDisabled"],["nzNoColon","","nzTooltipTitle","\u8c03\u7528 ffmpeg \u8fdb\u884c\u8f6c\u6362\uff0c\u9700\u8981\u5b89\u88c5 ffmpeg \u3002",1,"setting-label"],["formControlName","remuxToMp4"],[1,"setting-item"],["nzNoColon","",1,"setting-label",3,"nzTooltipTitle"],["deleteSourceTip",""],[1,"setting-control","radio",3,"nzWarningTip","nzValidateStatus"],["formControlName","deleteSource",3,"nzDisabled"],[4,"ngFor","ngForOf"],["nz-radio-button","",3,"nzValue"]],template:function(n,e){if(1&n&&(t.TgZ(0,"form",0)(1,"nz-form-item",1)(2,"nz-form-label",2),t._uU(3,"flv \u6dfb\u52a0\u5143\u6570\u636e"),t.qZA(),t.TgZ(4,"nz-form-control",3),t._UZ(5,"nz-switch",4),t.qZA()(),t.TgZ(6,"nz-form-item",1)(7,"nz-form-label",5),t._uU(8,"\u8f6c\u5c01\u88c5\u4e3a mp4"),t.qZA(),t.TgZ(9,"nz-form-control",3),t._UZ(10,"nz-switch",6),t.qZA()(),t.TgZ(11,"nz-form-item",7)(12,"nz-form-label",8),t._uU(13,"\u6e90\u6587\u4ef6\u5220\u9664\u7b56\u7565"),t.qZA(),t.YNc(14,Po,7,0,"ng-template",null,9,t.W1O),t.TgZ(16,"nz-form-control",10)(17,"nz-radio-group",11),t.YNc(18,To,3,2,"ng-container",12),t.qZA()()()()),2&n){const o=t.MAs(15);t.Q6J("formGroup",e.settingsForm),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.injectExtraMetadata?e.injectExtraMetadataControl:"warning"),t.xp6(1),t.Q6J("nzDisabled",e.remuxToMp4Control.value),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.remuxToMp4?e.remuxToMp4Control:"warning"),t.xp6(3),t.Q6J("nzTooltipTitle",o),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.deleteSource?e.deleteSourceControl:"warning"),t.xp6(1),t.Q6J("nzDisabled",!e.remuxToMp4Control.value),t.xp6(1),t.Q6J("ngForOf",e.deleteStrategies)}},dependencies:[p.sg,r._Y,r.JJ,r.JL,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,U.i,G.Of,G.Bq,G.Dg,y],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});var W=c(3523);function wo(i,n){1&i&&(t.TgZ(0,"p"),t._uU(1," \u9009\u62e9\u8981\u5f55\u5236\u7684\u76f4\u64ad\u6d41\u683c\u5f0f "),t._UZ(2,"br"),t.TgZ(3,"b"),t._uU(4,"FLV:"),t.qZA(),t._uU(5," flv \u6d41\u5728\u7f51\u7edc\u4e0d\u7a33\u5b9a\u7684\u60c5\u51b5\u4e0b\u5bb9\u6613\u4e2d\u65ad\u4e22\u5931\u6570\u636e\u6216\u5f55\u5236\u5230\u4e8c\u538b\u753b\u8d28\u3002\u6ca1\u6709 flv \u6d41\u7684\u76f4\u64ad\u4f1a\u81ea\u52a8\u5207\u6362\u5f55\u5236 fmp4 \u6d41\u3002 "),t._UZ(6,"br"),t.TgZ(7,"b"),t._uU(8,"HLS (fmp4):"),t.qZA(),t._uU(9," hls \u6d41\u57fa\u672c\u4e0d\u53d7\u7f51\u7edc\u6ce2\u52a8\u5f71\u54cd\uff0c\u4f46\u4e0d\u662f\u6240\u6709\u76f4\u64ad\u95f4\u90fd\u652f\u6301\u3002\u6709 flv \u6d41\u7684\u76f4\u64ad\uff0c\u5728\u8bbe\u5b9a\u7684\u7b49\u5f85\u65f6\u95f4\u5185\u6ca1\u6709 fmp4 \u6d41\u4f1a\u81ea\u52a8\u5207\u6362\u5f55\u5236 flv \u6d41\u3002 "),t._UZ(10,"br"),t.TgZ(11,"b"),t._uU(12,"P.S."),t.qZA(),t._UZ(13,"br"),t._uU(14," WEB \u7aef\u76f4\u64ad\u64ad\u653e\u5668\u662f Hls7Player \u7684\u76f4\u64ad\u95f4\u652f\u6301\u5f55\u5236 fmp4 \u6d41, fMp4Player \u5219\u4e0d\u652f\u6301\u3002 "),t.qZA())}function Fo(i,n){1&i&&(t.TgZ(0,"p"),t._uU(1," \u5982\u679c\u8d85\u8fc7\u6240\u8bbe\u7f6e\u7684\u7b49\u5f85\u65f6\u95f4 fmp4 \u6d41\u8fd8\u6ca1\u6709\u5c31\u5207\u6362\u4e3a\u5f55\u5236 flv \u6d41 "),t._UZ(2,"br"),t._uU(3," fmp4 \u6d41\u5728\u521a\u63a8\u6d41\u662f\u6ca1\u6709\u7684\uff0c\u8981\u8fc7\u4e00\u4f1a\u624d\u6709\u3002 "),t._UZ(4,"br"),t._uU(5," fmp4 \u6d41\u51fa\u73b0\u7684\u65f6\u95f4\u548c\u76f4\u64ad\u5ef6\u8fdf\u6709\u5173\uff0c\u4e00\u822c\u90fd\u5728 10 \u79d2\u5185\uff0c\u4f46\u4e5f\u6709\u5ef6\u8fdf\u6bd4\u8f83\u5927\u8d85\u8fc7 1 \u5206\u949f\u7684\u3002 "),t._UZ(6,"br"),t._uU(7," \u63a8\u8350\u5168\u5c40\u8bbe\u7f6e\u4e3a 10 \u79d2\uff0c\u4e2a\u522b\u5ef6\u8fdf\u6bd4\u8f83\u5927\u7684\u76f4\u64ad\u95f4\u5355\u72ec\u8bbe\u7f6e\u3002 "),t.qZA())}function So(i,n){if(1&i&&(t.TgZ(0,"nz-form-item",1)(1,"nz-form-label",2),t._uU(2,"fmp4 \u6d41\u7b49\u5f85\u65f6\u95f4"),t.qZA(),t.YNc(3,Fo,8,0,"ng-template",null,19,t.W1O),t.TgZ(5,"nz-form-control",4),t._UZ(6,"nz-select",20),t.qZA()()),2&i){const e=t.MAs(4),o=t.oxw();t.xp6(1),t.Q6J("nzTooltipTitle",e),t.xp6(4),t.Q6J("nzWarningTip",o.syncFailedWarningTip)("nzValidateStatus",o.syncStatus.fmp4StreamTimeout?o.fmp4StreamTimeoutControl:"warning"),t.xp6(1),t.Q6J("nzOptions",o.fmp4StreamTimeoutOptions)}}function yo(i,n){1&i&&(t.TgZ(0,"p"),t._uU(1," \u9ed8\u8ba4: \u6bcf\u4e2a\u5206\u5272\u7684\u5f55\u64ad\u6587\u4ef6\u5bf9\u5e94\u4fdd\u5b58\u4e00\u4e2a\u5c01\u9762\u6587\u4ef6\uff0c\u4e0d\u7ba1\u5c01\u9762\u662f\u5426\u76f8\u540c\u3002"),t._UZ(2,"br"),t._uU(3," \u53bb\u91cd: \u76f8\u540c\u7684\u5c01\u9762\u53ea\u4fdd\u5b58\u4e00\u6b21"),t._UZ(4,"br"),t._uU(5," P.S. "),t._UZ(6,"br"),t._uU(7," \u5224\u65ad\u662f\u5426\u76f8\u540c\u662f\u4f9d\u636e\u5c01\u9762\u6570\u636e\u7684 sha1\uff0c\u53ea\u5728\u5355\u6b21\u5f55\u5236\u5185\u6709\u6548\u3002 "),t.qZA())}function Ao(i,n){if(1&i&&(t.ynx(0),t.TgZ(1,"label",21),t._uU(2),t.qZA(),t.BQk()),2&i){const e=n.$implicit;t.xp6(1),t.Q6J("nzValue",e.value),t.xp6(1),t.Oqu(e.label)}}function ko(i,n){if(1&i&&(t.TgZ(0,"nz-form-item",1)(1,"nz-form-label",22),t._uU(2,"\u6570\u636e\u8bfb\u53d6\u8d85\u65f6"),t.qZA(),t.TgZ(3,"nz-form-control",4),t._UZ(4,"nz-select",23),t.qZA()()),2&i){const e=t.oxw();t.xp6(3),t.Q6J("nzWarningTip",e.syncStatus.readTimeout?"\u65e0\u7f1d\u62fc\u63a5\u4f1a\u5931\u6548\uff01":e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.readTimeout&&e.readTimeoutControl.value<=3?e.readTimeoutControl:"warning"),t.xp6(1),t.Q6J("nzOptions",e.readTimeoutOptions)}}function Do(i,n){if(1&i&&(t.TgZ(0,"nz-form-item",1)(1,"nz-form-label",24),t._uU(2,"\u786c\u76d8\u5199\u5165\u7f13\u51b2"),t.qZA(),t.TgZ(3,"nz-form-control",4),t._UZ(4,"nz-select",25),t.qZA()()),2&i){const e=t.oxw();t.xp6(3),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.bufferSize?e.bufferSizeControl:"warning"),t.xp6(1),t.Q6J("nzOptions",e.bufferOptions)}}class Ft{constructor(n,e,o){this.changeDetector=e,this.settingsSyncService=o,this.syncFailedWarningTip=d.yT,this.streamFormatOptions=(0,W.Z)(d.tp),this.recordingModeOptions=(0,W.Z)(d.kV),this.fmp4StreamTimeoutOptions=(0,W.Z)(d.D4),this.qualityOptions=(0,W.Z)(d.O6),this.readTimeoutOptions=(0,W.Z)(d.D4),this.disconnectionTimeoutOptions=(0,W.Z)(d.$w),this.bufferOptions=(0,W.Z)(d.Rc),this.coverSaveStrategies=(0,W.Z)(d.J_),this.settingsForm=n.group({streamFormat:[""],recordingMode:[""],qualityNumber:[""],fmp4StreamTimeout:[""],readTimeout:[""],disconnectionTimeout:[""],bufferSize:[""],saveCover:[""],coverSaveStrategy:[""]})}get streamFormatControl(){return this.settingsForm.get("streamFormat")}get recordingModeControl(){return this.settingsForm.get("recordingMode")}get qualityNumberControl(){return this.settingsForm.get("qualityNumber")}get fmp4StreamTimeoutControl(){return this.settingsForm.get("fmp4StreamTimeout")}get readTimeoutControl(){return this.settingsForm.get("readTimeout")}get disconnectionTimeoutControl(){return this.settingsForm.get("disconnectionTimeout")}get bufferSizeControl(){return this.settingsForm.get("bufferSize")}get saveCoverControl(){return this.settingsForm.get("saveCover")}get coverSaveStrategyControl(){return this.settingsForm.get("coverSaveStrategy")}ngOnChanges(){this.syncStatus=M(this.settings,()=>!0),this.settingsForm.setValue(this.settings)}ngOnInit(){this.settingsSyncService.syncSettings("recorder",this.settings,this.settingsForm.valueChanges).subscribe(n=>{this.syncStatus={...this.syncStatus,...P(n)},this.changeDetector.markForCheck()})}}function Eo(i,n){1&i&&(t.ynx(0),t._uU(1," \u8bf7\u8f93\u5165 User Agent "),t.BQk())}function Zo(i,n){1&i&&t.YNc(0,Eo,2,0,"ng-container",6),2&i&&t.Q6J("ngIf",n.$implicit.hasError("required"))}function No(i,n){if(1&i&&(t.ynx(0),t.TgZ(1,"form",2)(2,"nz-form-item")(3,"nz-form-control",3),t._UZ(4,"textarea",4),t.YNc(5,Zo,1,1,"ng-template",null,5,t.W1O),t.qZA()()(),t.BQk()),2&i){const e=t.MAs(6),o=t.oxw();t.xp6(1),t.Q6J("formGroup",o.settingsForm),t.xp6(2),t.Q6J("nzWarningTip",o.warningTip)("nzValidateStatus",o.control.valid&&o.control.value.trim()!==o.value?"warning":o.control)("nzErrorTip",e),t.xp6(1),t.Q6J("rows",3)}}Ft.\u0275fac=function(n){return new(n||Ft)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(z))},Ft.\u0275cmp=t.Xpm({type:Ft,selectors:[["app-recorder-settings"]],inputs:{settings:"settings"},features:[t.TTD],decls:34,vars:21,consts:[["nz-form","",3,"formGroup"],[1,"setting-item"],["nzNoColon","",1,"setting-label",3,"nzTooltipTitle"],["streamFormatTip",""],[1,"setting-control","select",3,"nzWarningTip","nzValidateStatus"],["formControlName","streamFormat",3,"nzOptions"],["class","setting-item",4,"ngIf"],["nzNoColon","","nzTooltipTitle","\u6240\u9009\u753b\u8d28\u4e0d\u5b58\u5728\u5c06\u4ee5\u539f\u753b\u4ee3\u66ff",1,"setting-label"],["formControlName","qualityNumber",3,"nzOptions"],["appSwitchActionable","",1,"setting-item"],["nzNoColon","","nzTooltipTitle","\u5f55\u64ad\u6587\u4ef6\u5b8c\u6210\u65f6\u4fdd\u5b58\u5f53\u524d\u76f4\u64ad\u95f4\u7684\u5c01\u9762",1,"setting-label"],[1,"setting-control","switch",3,"nzWarningTip","nzValidateStatus"],["formControlName","saveCover"],["coverSaveStrategyTip",""],[1,"setting-control","radio",3,"nzWarningTip","nzValidateStatus"],["formControlName","coverSaveStrategy",3,"nzDisabled"],[4,"ngFor","ngForOf"],["nzNoColon","","nzTooltipTitle","\u65ad\u7f51\u8d85\u8fc7\u7b49\u5f85\u65f6\u95f4\u5c31\u7ed3\u675f\u5f55\u5236\uff0c\u5982\u679c\u7f51\u7edc\u6062\u590d\u540e\u4ecd\u672a\u4e0b\u64ad\u4f1a\u81ea\u52a8\u91cd\u65b0\u5f00\u59cb\u5f55\u5236\u3002",1,"setting-label"],["formControlName","disconnectionTimeout",3,"nzOptions"],["fmp4StreamTimeoutTip",""],["formControlName","fmp4StreamTimeout",3,"nzOptions"],["nz-radio-button","",3,"nzValue"],["nzNoColon","","nzTooltipTitle","\u8d85\u65f6\u65f6\u95f4\u8bbe\u7f6e\u5f97\u6bd4\u8f83\u957f\u76f8\u5bf9\u4e0d\u5bb9\u6613\u56e0\u7f51\u7edc\u4e0d\u7a33\u5b9a\u800c\u51fa\u73b0\u6d41\u4e2d\u65ad\uff0c\u4f46\u662f\u4e00\u65e6\u51fa\u73b0\u4e2d\u65ad\u5c31\u65e0\u6cd5\u5b9e\u73b0\u65e0\u7f1d\u62fc\u63a5\u4e14\u6f0f\u5f55\u8f83\u591a\u3002",1,"setting-label"],["formControlName","readTimeout",3,"nzOptions"],["nzNoColon","","nzTooltipTitle","\u786c\u76d8\u5199\u5165\u7f13\u51b2\u8bbe\u7f6e\u5f97\u6bd4\u8f83\u5927\u53ef\u4ee5\u51cf\u5c11\u5bf9\u786c\u76d8\u7684\u5199\u5165\uff0c\u4f46\u9700\u8981\u5360\u7528\u66f4\u591a\u7684\u5185\u5b58\u3002",1,"setting-label"],["formControlName","bufferSize",3,"nzOptions"]],template:function(n,e){if(1&n&&(t.TgZ(0,"form",0)(1,"nz-form-item",1)(2,"nz-form-label",2),t._uU(3,"\u76f4\u64ad\u6d41\u683c\u5f0f"),t.qZA(),t.YNc(4,wo,15,0,"ng-template",null,3,t.W1O),t.TgZ(6,"nz-form-control",4),t._UZ(7,"nz-select",5),t.qZA()(),t.YNc(8,So,7,4,"nz-form-item",6),t.TgZ(9,"nz-form-item",1)(10,"nz-form-label",7),t._uU(11,"\u753b\u8d28"),t.qZA(),t.TgZ(12,"nz-form-control",4),t._UZ(13,"nz-select",8),t.qZA()(),t.TgZ(14,"nz-form-item",9)(15,"nz-form-label",10),t._uU(16,"\u4fdd\u5b58\u5c01\u9762"),t.qZA(),t.TgZ(17,"nz-form-control",11),t._UZ(18,"nz-switch",12),t.qZA()(),t.TgZ(19,"nz-form-item",1)(20,"nz-form-label",2),t._uU(21,"\u5c01\u9762\u4fdd\u5b58\u7b56\u7565"),t.qZA(),t.YNc(22,yo,8,0,"ng-template",null,13,t.W1O),t.TgZ(24,"nz-form-control",14)(25,"nz-radio-group",15),t.YNc(26,Ao,3,2,"ng-container",16),t.qZA()()(),t.YNc(27,ko,5,3,"nz-form-item",6),t.TgZ(28,"nz-form-item",1)(29,"nz-form-label",17),t._uU(30,"\u65ad\u7f51\u7b49\u5f85\u65f6\u95f4"),t.qZA(),t.TgZ(31,"nz-form-control",4),t._UZ(32,"nz-select",18),t.qZA()(),t.YNc(33,Do,5,3,"nz-form-item",6),t.qZA()),2&n){const o=t.MAs(5),a=t.MAs(23);t.Q6J("formGroup",e.settingsForm),t.xp6(2),t.Q6J("nzTooltipTitle",o),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.streamFormat?e.streamFormatControl:"warning"),t.xp6(1),t.Q6J("nzOptions",e.streamFormatOptions),t.xp6(1),t.Q6J("ngIf","fmp4"===e.streamFormatControl.value),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.qualityNumber?e.qualityNumberControl:"warning"),t.xp6(1),t.Q6J("nzOptions",e.qualityOptions),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.saveCover?e.saveCoverControl:"warning"),t.xp6(3),t.Q6J("nzTooltipTitle",a),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.coverSaveStrategy?e.coverSaveStrategyControl:"warning"),t.xp6(1),t.Q6J("nzDisabled",!e.saveCoverControl.value),t.xp6(1),t.Q6J("ngForOf",e.coverSaveStrategies),t.xp6(1),t.Q6J("ngIf","flv"===e.streamFormatControl.value),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.disconnectionTimeout?e.disconnectionTimeoutControl:"warning"),t.xp6(1),t.Q6J("nzOptions",e.disconnectionTimeoutOptions),t.xp6(1),t.Q6J("ngIf","flv"===e.streamFormatControl.value)}},dependencies:[p.sg,p.O5,r._Y,r.JJ,r.JL,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,U.i,G.Of,G.Bq,G.Dg,zt.Vq,y],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class St{constructor(n,e){this.changeDetector=e,this.value="",this.visible=!1,this.visibleChange=new t.vpe,this.cancel=new t.vpe,this.confirm=new t.vpe,this.warningTip="\u5168\u90e8\u4efb\u52a1\u90fd\u9700\u91cd\u542f\u5f39\u5e55\u5ba2\u6237\u7aef\u624d\u80fd\u751f\u6548\uff0c\u6b63\u5728\u5f55\u5236\u7684\u4efb\u52a1\u53ef\u80fd\u4f1a\u4e22\u5931\u5f39\u5e55\uff01",this.settingsForm=n.group({userAgent:["",[r.kI.required]]})}get control(){return this.settingsForm.get("userAgent")}ngOnChanges(){this.setValue()}open(){this.setValue(),this.setVisible(!0)}close(){this.setVisible(!1)}setVisible(n){this.visible=n,this.visibleChange.emit(n),this.changeDetector.markForCheck()}setValue(){this.control.setValue(this.value),this.changeDetector.markForCheck()}handleCancel(){this.cancel.emit(),this.close()}handleConfirm(){this.confirm.emit(this.control.value.trim()),this.close()}}St.\u0275fac=function(n){return new(n||St)(t.Y36(r.qu),t.Y36(t.sBO))},St.\u0275cmp=t.Xpm({type:St,selectors:[["app-user-agent-edit-dialog"]],inputs:{value:"value",visible:"visible"},outputs:{visibleChange:"visibleChange",cancel:"cancel",confirm:"confirm"},features:[t.TTD],decls:2,vars:2,consts:[["nzTitle","\u4fee\u6539 User Agent","nzOkDanger","","nzCentered","",3,"nzVisible","nzOkDisabled","nzVisibleChange","nzOnOk","nzOnCancel"],[4,"nzModalContent"],["nz-form","",3,"formGroup"],[3,"nzWarningTip","nzValidateStatus","nzErrorTip"],["required","","nz-input","","formControlName","userAgent",3,"rows"],["errorTip",""],[4,"ngIf"]],template:function(n,e){1&n&&(t.TgZ(0,"nz-modal",0),t.NdJ("nzVisibleChange",function(a){return e.visible=a})("nzOnOk",function(){return e.handleConfirm()})("nzOnCancel",function(){return e.handleCancel()}),t.YNc(1,No,7,5,"ng-container",1),t.qZA()),2&n&&t.Q6J("nzVisible",e.visible)("nzOkDisabled",e.control.invalid||e.control.value.trim()===e.value)},dependencies:[p.O5,r._Y,r.Fj,r.JJ,r.JL,r.Q7,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.Fd,O.Zp,_.du,_.Hf],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});var dt=c(1664);function Bo(i,n){if(1&i&&(t.ynx(0),t.TgZ(1,"form",3)(2,"nz-form-item")(3,"nz-form-control",4),t._UZ(4,"textarea",5),t.qZA()()(),t.BQk()),2&i){const e=t.oxw();t.xp6(1),t.Q6J("formGroup",e.settingsForm),t.xp6(2),t.Q6J("nzWarningTip",e.warningTip)("nzValidateStatus",e.control.valid&&e.control.value.trim()!==e.value?"warning":e.control),t.xp6(1),t.Q6J("rows",5)}}function Uo(i,n){if(1&i){const e=t.EpF();t.TgZ(0,"button",6),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.testCookie())}),t._uU(1," \u6d4b\u8bd5 "),t.qZA(),t.TgZ(2,"button",7),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.handleCancel())}),t._uU(3,"\u53d6\u6d88"),t.qZA(),t.TgZ(4,"button",8),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.handleConfirm())}),t._uU(5," \u786e\u5b9a "),t.qZA()}if(2&i){const e=t.oxw();t.Q6J("disabled",""===e.control.value.trim()),t.xp6(4),t.Q6J("disabled",e.control.invalid||e.control.value.trim()===e.value)}}class yt{constructor(n,e,o,a){this.changeDetector=e,this.validationService=o,this.message=a,this.value="",this.visible=!1,this.visibleChange=new t.vpe,this.cancel=new t.vpe,this.confirm=new t.vpe,this.warningTip="\u5168\u90e8\u4efb\u52a1\u90fd\u9700\u91cd\u542f\u5f39\u5e55\u5ba2\u6237\u7aef\u624d\u80fd\u751f\u6548\uff0c\u6b63\u5728\u5f55\u5236\u7684\u4efb\u52a1\u53ef\u80fd\u4f1a\u4e22\u5931\u5f39\u5e55\uff01",this.settingsForm=n.group({cookie:[""]})}get control(){return this.settingsForm.get("cookie")}ngOnChanges(){this.setValue()}open(){this.setValue(),this.setVisible(!0)}close(){this.setVisible(!1)}setVisible(n){this.visible=n,this.visibleChange.emit(n),this.changeDetector.markForCheck()}setValue(){this.control.setValue(this.value),this.changeDetector.markForCheck()}handleCancel(){this.cancel.emit(),this.close()}handleConfirm(){this.confirm.emit(this.control.value.trim()),this.close()}testCookie(){this.validationService.validateCookie(this.control.value).subscribe(n=>{0===n.code?this.message.success(`uid: ${n.data?.mid}, uname: ${n.data?.uname}`):this.message.error(`${n.code}: ${n.message}`)})}}yt.\u0275fac=function(n){return new(n||yt)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(Y),t.Y36(se.dD))},yt.\u0275cmp=t.Xpm({type:yt,selectors:[["app-cookie-edit-dialog"]],inputs:{value:"value",visible:"visible"},outputs:{visibleChange:"visibleChange",cancel:"cancel",confirm:"confirm"},features:[t.TTD],decls:3,vars:1,consts:[["nzTitle","\u4fee\u6539 Cookie","nzCentered","",3,"nzVisible","nzVisibleChange"],[4,"nzModalContent"],[3,"nzModalFooter"],["nz-form","",3,"formGroup"],[3,"nzWarningTip","nzValidateStatus"],["wrap","soft","nz-input","","formControlName","cookie",3,"rows"],["nz-button","","nzType","primary",3,"disabled","click"],["nz-button","","nzType","default",3,"click"],["nz-button","","nzType","primary","nzDanger","",3,"disabled","click"]],template:function(n,e){1&n&&(t.TgZ(0,"nz-modal",0),t.NdJ("nzVisibleChange",function(a){return e.visible=a}),t.YNc(1,Bo,5,4,"ng-container",1),t.YNc(2,Uo,6,2,"ng-template",2),t.qZA()),2&n&&t.Q6J("nzVisible",e.visible)},dependencies:[r._Y,r.Fj,r.JJ,r.JL,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.Fd,O.Zp,_.du,_.Uh,_.Hf,Q.ix,I.w,dt.dQ],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class At{constructor(n,e,o){this.changeDetector=e,this.settingsSyncService=o,this.syncFailedWarningTip=d.yT,this.settingsForm=n.group({userAgent:["",[r.kI.required]],cookie:[""]})}get userAgentControl(){return this.settingsForm.get("userAgent")}get cookieControl(){return this.settingsForm.get("cookie")}ngOnChanges(){this.syncStatus=M(this.settings,()=>!0),this.settingsForm.setValue(this.settings)}ngOnInit(){this.settingsSyncService.syncSettings("header",this.settings,this.settingsForm.valueChanges).subscribe(n=>{this.syncStatus={...this.syncStatus,...P(n)},this.changeDetector.markForCheck()})}}At.\u0275fac=function(n){return new(n||At)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(z))},At.\u0275cmp=t.Xpm({type:At,selectors:[["app-header-settings"]],inputs:{settings:"settings"},features:[t.TTD],decls:17,vars:9,consts:[["nz-form","",3,"formGroup"],[1,"setting-item","actionable",3,"click"],[1,"setting-label"],[3,"nzWarningTip","nzValidateStatus"],[1,"setting-value"],[3,"value","confirm"],["userAgentEditDialog",""],["cookieEditDialog",""]],template:function(n,e){if(1&n){const o=t.EpF();t.TgZ(0,"form",0)(1,"nz-form-item",1),t.NdJ("click",function(){t.CHM(o);const s=t.MAs(8);return t.KtG(s.open())}),t.TgZ(2,"nz-form-label",2),t._uU(3,"User Agent"),t.qZA(),t.TgZ(4,"nz-form-control",3)(5,"nz-form-text",4),t._uU(6),t.qZA(),t.TgZ(7,"app-user-agent-edit-dialog",5,6),t.NdJ("confirm",function(s){return e.userAgentControl.setValue(s)}),t.qZA()()(),t.TgZ(9,"nz-form-item",1),t.NdJ("click",function(){t.CHM(o);const s=t.MAs(16);return t.KtG(s.open())}),t.TgZ(10,"nz-form-label",2),t._uU(11,"Cookie"),t.qZA(),t.TgZ(12,"nz-form-control",3)(13,"nz-form-text",4),t._uU(14),t.qZA(),t.TgZ(15,"app-cookie-edit-dialog",5,7),t.NdJ("confirm",function(s){return e.cookieControl.setValue(s)}),t.qZA()()()()}2&n&&(t.Q6J("formGroup",e.settingsForm),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.userAgent?e.userAgentControl:"warning"),t.xp6(2),t.hij("",e.userAgentControl.value," "),t.xp6(1),t.Q6J("value",e.userAgentControl.value),t.xp6(5),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.cookie?e.cookieControl:"warning"),t.xp6(2),t.hij("",e.cookieControl.value," "),t.xp6(1),t.Q6J("value",e.cookieControl.value))},dependencies:[r._Y,r.JL,r.sg,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,l.EF,St,yt],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});var at=c(9089),Io=c(6457),Jo=c(4501);function Qo(i,n){1&i&&(t.ynx(0),t._uU(1," \u8bf7\u8f93\u5165\u4fdd\u5b58\u4f4d\u7f6e "),t.BQk())}function Vo(i,n){1&i&&(t.ynx(0),t._uU(1," \u4e0d\u662f\u4e00\u4e2a\u76ee\u5f55 "),t.BQk())}function Lo(i,n){1&i&&(t.ynx(0),t._uU(1," \u6ca1\u6709\u8bfb\u5199\u6743\u9650 "),t.BQk())}function qo(i,n){1&i&&(t.ynx(0),t._uU(1," \u672a\u80fd\u8fdb\u884c\u9a8c\u8bc1 "),t.BQk())}function Yo(i,n){if(1&i&&(t.YNc(0,Qo,2,0,"ng-container",6),t.YNc(1,Vo,2,0,"ng-container",6),t.YNc(2,Lo,2,0,"ng-container",6),t.YNc(3,qo,2,0,"ng-container",6)),2&i){const e=n.$implicit;t.Q6J("ngIf",e.hasError("required")),t.xp6(1),t.Q6J("ngIf",e.hasError("notADirectory")),t.xp6(1),t.Q6J("ngIf",e.hasError("noPermissions")),t.xp6(1),t.Q6J("ngIf",e.hasError("failedToValidate"))}}function Wo(i,n){if(1&i&&(t.ynx(0),t.TgZ(1,"form",2)(2,"nz-form-item")(3,"nz-form-control",3),t._UZ(4,"input",4),t.YNc(5,Yo,4,4,"ng-template",null,5,t.W1O),t.qZA()()(),t.BQk()),2&i){const e=t.MAs(6),o=t.oxw();t.xp6(1),t.Q6J("formGroup",o.settingsForm),t.xp6(2),t.Q6J("nzErrorTip",e)}}class kt{constructor(n,e,o){this.changeDetector=e,this.validationService=o,this.value="",this.visible=!1,this.visibleChange=new t.vpe,this.cancel=new t.vpe,this.confirm=new t.vpe,this.outDirAsyncValidator=a=>this.validationService.validateDir(a.value).pipe((0,T.U)(s=>{switch(s.code){case ot.ENOTDIR:return{error:!0,notADirectory:!0};case ot.EACCES:return{error:!0,noPermissions:!0};default:return null}}),(0,w.K)(()=>(0,ie.of)({error:!0,failedToValidate:!0}))),this.settingsForm=n.group({outDir:["",[r.kI.required],[this.outDirAsyncValidator]]})}get control(){return this.settingsForm.get("outDir")}ngOnChanges(){this.setValue()}open(){this.setValue(),this.setVisible(!0)}close(){this.setVisible(!1)}setVisible(n){this.visible=n,this.visibleChange.emit(n),this.changeDetector.markForCheck()}setValue(){this.control.setValue(this.value),this.changeDetector.markForCheck()}handleCancel(){this.cancel.emit(),this.close()}handleConfirm(){this.confirm.emit(this.control.value.trim()),this.close()}}function Ro(i,n){1&i&&(t.ynx(0),t._uU(1," \u8bf7\u8f93\u5165\u8def\u5f84\u6a21\u677f "),t.BQk())}function Go(i,n){1&i&&(t.ynx(0),t._uU(1," \u8def\u5f84\u6a21\u677f\u6709\u9519\u8bef "),t.BQk())}function Ho(i,n){if(1&i&&(t.YNc(0,Ro,2,0,"ng-container",12),t.YNc(1,Go,2,0,"ng-container",12)),2&i){const e=n.$implicit;t.Q6J("ngIf",e.hasError("required")),t.xp6(1),t.Q6J("ngIf",e.hasError("pattern"))}}function $o(i,n){if(1&i&&(t.TgZ(0,"tr")(1,"td"),t._uU(2),t.qZA(),t.TgZ(3,"td"),t._uU(4),t.qZA()()),2&i){const e=n.$implicit;t.xp6(2),t.Oqu(e.name),t.xp6(2),t.Oqu(e.desc)}}function Ko(i,n){if(1&i&&(t.ynx(0),t.TgZ(1,"form",3)(2,"nz-form-item")(3,"nz-form-control",4),t._UZ(4,"input",5),t.YNc(5,Ho,2,2,"ng-template",null,6,t.W1O),t.qZA()(),t.TgZ(7,"nz-collapse")(8,"nz-collapse-panel",7)(9,"nz-table",8,9)(11,"thead")(12,"tr")(13,"th"),t._uU(14,"\u53d8\u91cf"),t.qZA(),t.TgZ(15,"th"),t._uU(16,"\u8bf4\u660e"),t.qZA()()(),t.TgZ(17,"tbody"),t.YNc(18,$o,5,2,"tr",10),t.qZA()(),t.TgZ(19,"p",11)(20,"strong"),t._uU(21," \u6ce8\u610f\uff1a\u53d8\u91cf\u540d\u5fc5\u987b\u653e\u5728\u82b1\u62ec\u53f7\u4e2d\uff01\u4f7f\u7528\u65e5\u671f\u65f6\u95f4\u53d8\u91cf\u4ee5\u907f\u514d\u547d\u540d\u51b2\u7a81\uff01 "),t.qZA()()()()(),t.BQk()),2&i){const e=t.MAs(6),o=t.MAs(10),a=t.oxw();t.xp6(1),t.Q6J("formGroup",a.settingsForm),t.xp6(2),t.Q6J("nzErrorTip",e),t.xp6(1),t.Q6J("pattern",a.pathTemplatePattern),t.xp6(5),t.Q6J("nzData",a.pathTemplateVariables)("nzPageSize",11)("nzShowPagination",!1)("nzSize","small"),t.xp6(9),t.Q6J("ngForOf",o.data)}}function Xo(i,n){if(1&i){const e=t.EpF();t.TgZ(0,"button",13),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.restoreDefault())}),t._uU(1," \u6062\u590d\u9ed8\u8ba4 "),t.qZA(),t.TgZ(2,"button",14),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.handleCancel())}),t._uU(3,"\u53d6\u6d88"),t.qZA(),t.TgZ(4,"button",13),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.handleConfirm())}),t._uU(5," \u786e\u5b9a "),t.qZA()}if(2&i){const e=t.oxw();t.Q6J("disabled",e.control.value.trim()===e.pathTemplateDefault),t.xp6(4),t.Q6J("disabled",e.control.invalid||e.control.value.trim()===e.value)}}kt.\u0275fac=function(n){return new(n||kt)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(Y))},kt.\u0275cmp=t.Xpm({type:kt,selectors:[["app-outdir-edit-dialog"]],inputs:{value:"value",visible:"visible"},outputs:{visibleChange:"visibleChange",cancel:"cancel",confirm:"confirm"},features:[t.TTD],decls:2,vars:2,consts:[["nzTitle","\u4fee\u6539\u6587\u4ef6\u5b58\u653e\u76ee\u5f55","nzCentered","",3,"nzVisible","nzOkDisabled","nzVisibleChange","nzOnOk","nzOnCancel"],[4,"nzModalContent"],["nz-form","",3,"formGroup"],["nzHasFeedback","","nzValidatingTip","\u6b63\u5728\u9a8c\u9a8c...",3,"nzErrorTip"],["type","text","required","","nz-input","","formControlName","outDir"],["errorTip",""],[4,"ngIf"]],template:function(n,e){1&n&&(t.TgZ(0,"nz-modal",0),t.NdJ("nzVisibleChange",function(a){return e.visible=a})("nzOnOk",function(){return e.handleConfirm()})("nzOnCancel",function(){return e.handleCancel()}),t.YNc(1,Wo,7,2,"ng-container",1),t.qZA()),2&n&&t.Q6J("nzVisible",e.visible)("nzOkDisabled",e.control.invalid||e.control.value.trim()===e.value)},dependencies:[p.O5,r._Y,r.Fj,r.JJ,r.JL,r.Q7,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.Fd,O.Zp,_.du,_.Hf],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class Dt{constructor(n,e){this.changeDetector=e,this.value="",this.visible=!1,this.visibleChange=new t.vpe,this.cancel=new t.vpe,this.confirm=new t.vpe,this.pathTemplatePattern=d._m,this.pathTemplateDefault=d.ip,this.pathTemplateVariables=d.Dr,this.settingsForm=n.group({pathTemplate:["",[r.kI.required,r.kI.pattern(this.pathTemplatePattern)]]})}get control(){return this.settingsForm.get("pathTemplate")}ngOnChanges(){this.setValue()}open(){this.setValue(),this.setVisible(!0)}close(){this.setVisible(!1)}setVisible(n){this.visible=n,this.visibleChange.emit(n),this.changeDetector.markForCheck()}setValue(){this.control.setValue(this.value),this.changeDetector.markForCheck()}handleCancel(){this.cancel.emit(),this.close()}handleConfirm(){this.confirm.emit(this.control.value.trim()),this.close()}restoreDefault(){this.control.setValue(this.pathTemplateDefault)}}function jo(i,n){1&i&&(t.TgZ(0,"p"),t._uU(1," \u81ea\u52a8\u5206\u5272\u6587\u4ef6\u4ee5\u9650\u5236\u5f55\u64ad\u6587\u4ef6\u5927\u5c0f "),t._UZ(2,"br"),t._uU(3," \u683c\u5f0f\uff1a\u6570\u5b57 + \u5355\u4f4d(GB, MB, KB, B) "),t._UZ(4,"br"),t._uU(5," \u4e0d\u81ea\u52a8\u5206\u5272\u6587\u4ef6\u8bbe\u7f6e\u4e3a "),t.TgZ(6,"strong"),t._uU(7,"0 B"),t.qZA(),t._UZ(8,"br"),t.qZA())}function ta(i,n){1&i&&(t.TgZ(0,"p"),t._uU(1," \u81ea\u52a8\u5206\u5272\u6587\u4ef6\u4ee5\u9650\u5236\u5f55\u64ad\u6587\u4ef6\u65f6\u957f "),t._UZ(2,"br"),t._uU(3," \u683c\u5f0f\uff1aHH:MM:SS "),t._UZ(4,"br"),t._uU(5," \u4e0d\u81ea\u52a8\u5206\u5272\u6587\u4ef6\u8bbe\u7f6e\u4e3a "),t.TgZ(6,"strong"),t._uU(7,"00:00:00"),t.qZA(),t._UZ(8,"br"),t.qZA())}Dt.\u0275fac=function(n){return new(n||Dt)(t.Y36(r.qu),t.Y36(t.sBO))},Dt.\u0275cmp=t.Xpm({type:Dt,selectors:[["app-path-template-edit-dialog"]],inputs:{value:"value",visible:"visible"},outputs:{visibleChange:"visibleChange",cancel:"cancel",confirm:"confirm"},features:[t.TTD],decls:3,vars:2,consts:[["nzTitle","\u4fee\u6539\u6587\u4ef6\u8def\u5f84\u6a21\u677f","nzCentered","",3,"nzVisible","nzOkDisabled","nzVisibleChange"],[4,"nzModalContent"],[3,"nzModalFooter"],["nz-form","",3,"formGroup"],[3,"nzErrorTip"],["type","text","required","","nz-input","","formControlName","pathTemplate",3,"pattern"],["errorTip",""],["nzHeader","\u6a21\u677f\u53d8\u91cf\u8bf4\u660e"],[3,"nzData","nzPageSize","nzShowPagination","nzSize"],["table",""],[4,"ngFor","ngForOf"],[1,"footnote"],[4,"ngIf"],["nz-button","","nzType","default",3,"disabled","click"],["nz-button","","nzType","default",3,"click"]],template:function(n,e){1&n&&(t.TgZ(0,"nz-modal",0),t.NdJ("nzVisibleChange",function(a){return e.visible=a}),t.YNc(1,Ko,22,8,"ng-container",1),t.YNc(2,Xo,6,2,"ng-template",2),t.qZA()),2&n&&t.Q6J("nzVisible",e.visible)("nzOkDisabled",e.control.invalid||e.control.value.trim()===e.value)},dependencies:[p.sg,p.O5,r._Y,r.Fj,r.JJ,r.JL,r.Q7,r.c5,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.Fd,O.Zp,_.du,_.Uh,_.Hf,Q.ix,I.w,dt.dQ,H.N8,H.Uo,H._C,H.Om,H.p0,H.$Z,Mi,Ne],styles:[".footnote[_ngcontent-%COMP%]{margin-top:1em;margin-bottom:0}"],changeDetection:0});class Et{constructor(n,e,o){this.changeDetector=e,this.settingsSyncService=o,this.syncFailedWarningTip=d.yT,this.settingsForm=n.group({outDir:[""],pathTemplate:[""],filesizeLimit:["",[r.kI.required,r.kI.min(0),r.kI.max(0xf9ff5c28f5)]],durationLimit:["",[r.kI.required,r.kI.min(0),r.kI.max(359999)]]})}get outDirControl(){return this.settingsForm.get("outDir")}get pathTemplateControl(){return this.settingsForm.get("pathTemplate")}get filesizeLimitControl(){return this.settingsForm.get("filesizeLimit")}get durationLimitControl(){return this.settingsForm.get("durationLimit")}ngOnChanges(){this.syncStatus=M(this.settings,()=>!0),this.settingsForm.setValue(this.settings)}ngOnInit(){this.settingsSyncService.syncSettings("output",this.settings,this.settingsForm.valueChanges.pipe((0,at.Sc)(this.settingsForm))).subscribe(n=>{this.syncStatus={...this.syncStatus,...P(n)},this.changeDetector.markForCheck()})}}Et.\u0275fac=function(n){return new(n||Et)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(z))},Et.\u0275cmp=t.Xpm({type:Et,selectors:[["app-output-settings"]],inputs:{settings:"settings"},features:[t.TTD],decls:31,vars:15,consts:[["nz-form","",3,"formGroup"],[1,"setting-item","actionable",3,"click"],[1,"setting-label"],[3,"nzWarningTip","nzValidateStatus"],[1,"setting-value"],[3,"value","confirm"],["outDirEditDialog",""],["pathTemplateEditDialog",""],[1,"setting-item"],["nzNoColon","",1,"setting-label",3,"nzTooltipTitle"],["filesizeLimitTip",""],[1,"setting-control","select",3,"nzWarningTip","nzValidateStatus"],["formControlName","filesizeLimit"],["durationLimitTip",""],["formControlName","durationLimit"]],template:function(n,e){if(1&n){const o=t.EpF();t.TgZ(0,"form",0)(1,"nz-form-item",1),t.NdJ("click",function(){t.CHM(o);const s=t.MAs(8);return t.KtG(s.open())}),t.TgZ(2,"nz-form-label",2),t._uU(3,"\u5b58\u653e\u76ee\u5f55"),t.qZA(),t.TgZ(4,"nz-form-control",3)(5,"nz-form-text",4),t._uU(6),t.qZA(),t.TgZ(7,"app-outdir-edit-dialog",5,6),t.NdJ("confirm",function(s){return e.outDirControl.setValue(s)}),t.qZA()()(),t.TgZ(9,"nz-form-item",1),t.NdJ("click",function(){t.CHM(o);const s=t.MAs(16);return t.KtG(s.open())}),t.TgZ(10,"nz-form-label",2),t._uU(11,"\u8def\u5f84\u6a21\u677f"),t.qZA(),t.TgZ(12,"nz-form-control",3)(13,"nz-form-text",4),t._uU(14),t.qZA(),t.TgZ(15,"app-path-template-edit-dialog",5,7),t.NdJ("confirm",function(s){return e.pathTemplateControl.setValue(s)}),t.qZA()()(),t.TgZ(17,"nz-form-item",8)(18,"nz-form-label",9),t._uU(19,"\u5927\u5c0f\u9650\u5236"),t.qZA(),t.YNc(20,jo,9,0,"ng-template",null,10,t.W1O),t.TgZ(22,"nz-form-control",11),t._UZ(23,"app-input-filesize",12),t.qZA()(),t.TgZ(24,"nz-form-item",8)(25,"nz-form-label",9),t._uU(26,"\u65f6\u957f\u9650\u5236"),t.qZA(),t.YNc(27,ta,9,0,"ng-template",null,13,t.W1O),t.TgZ(29,"nz-form-control",11),t._UZ(30,"app-input-duration",14),t.qZA()()()}if(2&n){const o=t.MAs(21),a=t.MAs(28);t.Q6J("formGroup",e.settingsForm),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.outDir?e.outDirControl:"warning"),t.xp6(2),t.hij("",e.outDirControl.value," "),t.xp6(1),t.Q6J("value",e.outDirControl.value),t.xp6(5),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.pathTemplate?e.pathTemplateControl:"warning"),t.xp6(2),t.hij("",e.pathTemplateControl.value," "),t.xp6(1),t.Q6J("value",e.pathTemplateControl.value),t.xp6(3),t.Q6J("nzTooltipTitle",o),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.filesizeLimit?e.filesizeLimitControl:"warning"),t.xp6(3),t.Q6J("nzTooltipTitle",a),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.durationLimit?e.durationLimitControl:"warning")}},dependencies:[r._Y,r.JJ,r.JL,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,l.EF,Io.i,Jo.q,kt,Dt],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class Zt{}Zt.\u0275fac=function(n){return new(n||Zt)},Zt.\u0275cmp=t.Xpm({type:Zt,selectors:[["app-webhook-settings"]],decls:5,vars:0,consts:[["routerLink","webhooks",1,"setting-item"],[1,"setting-label"],[1,"setting-control"],["nz-icon","","nzType","right"]],template:function(n,e){1&n&&(t.TgZ(0,"a",0)(1,"span",1),t._uU(2,"Webhooks"),t.qZA(),t.TgZ(3,"span",2),t._UZ(4,"i",3),t.qZA()())},dependencies:[v.rH,I.w,lt.Ls],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class Nt{validate(n){return(i=>{const o=i.value.split("\n").map(a=>a.trim()).filter(a=>!!a).filter(a=>!/^https?:\/\/\S+$/.test(a));return o.length>0?{baseUrl:{value:o}}:null})(n)}}function ea(i,n){1&i&&(t.ynx(0),t._uU(1," \u4e0d\u80fd\u4e3a\u7a7a "),t.BQk())}function na(i,n){if(1&i&&(t.ynx(0),t._uU(1),t.ALo(2,"json"),t.BQk()),2&i){const e=t.oxw().$implicit;t.xp6(1),t.hij(" \u8f93\u5165\u65e0\u6548: ",t.lcZ(2,1,e.getError("baseUrl").value)," ")}}function ia(i,n){if(1&i&&(t.YNc(0,ea,2,0,"ng-container",7),t.YNc(1,na,3,3,"ng-container",7)),2&i){const e=n.$implicit;t.Q6J("ngIf",e.hasError("required")),t.xp6(1),t.Q6J("ngIf",e.hasError("baseUrl"))}}function oa(i,n){if(1&i&&(t.ynx(0),t.TgZ(1,"form",3)(2,"nz-form-item")(3,"nz-form-control",4),t._UZ(4,"textarea",5),t.YNc(5,ia,2,2,"ng-template",null,6,t.W1O),t.qZA()()(),t.BQk()),2&i){const e=t.MAs(6),o=t.oxw();t.xp6(1),t.Q6J("formGroup",o.settingsForm),t.xp6(2),t.Q6J("nzErrorTip",e),t.xp6(1),t.Q6J("rows",5)}}function aa(i,n){if(1&i){const e=t.EpF();t.TgZ(0,"button",8),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.restoreDefault())}),t._uU(1," \u6062\u590d\u9ed8\u8ba4 "),t.qZA(),t.TgZ(2,"button",9),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.handleCancel())}),t._uU(3,"\u53d6\u6d88"),t.qZA(),t.TgZ(4,"button",10),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.handleConfirm())}),t._uU(5," \u786e\u5b9a "),t.qZA()}if(2&i){const e=t.oxw();t.Q6J("disabled",e.control.value.trim()===e.defaultBaseApiUrl),t.xp6(4),t.Q6J("disabled",e.control.invalid||e.control.value.trim()===e.value)}}Nt.\u0275fac=function(n){return new(n||Nt)},Nt.\u0275dir=t.lG2({type:Nt,selectors:[["","appBaseUrlValidator",""]],features:[t._Bn([{provide:r.Cf,useExisting:Nt,multi:!0}])]});class Bt{constructor(n,e){this.changeDetector=e,this.value=[],this.visible=!1,this.visibleChange=new t.vpe,this.cancel=new t.vpe,this.confirm=new t.vpe,this.defaultBaseApiUrl=d.QL,this.settingsForm=n.group({baseApiUrls:["",[r.kI.required,i=>{const o=i.value.split("\n").map(a=>a.trim()).filter(a=>!!a).filter(a=>!/^https?:\/\/\S+$/.test(a));return o.length>0?{baseUrl:{value:o}}:null}]]})}get control(){return this.settingsForm.get("baseApiUrls")}ngOnChanges(){this.setValue()}open(){this.setValue(),this.setVisible(!0)}close(){this.setVisible(!1)}setVisible(n){this.visible=n,this.visibleChange.emit(n),this.changeDetector.markForCheck()}setValue(){this.control.setValue(this.value.join("\n")),this.changeDetector.markForCheck()}handleCancel(){this.cancel.emit(),this.close()}handleConfirm(){const e=this.control.value.split("\n").map(o=>o.trim()).filter(o=>!!o);this.confirm.emit(e),this.close()}restoreDefault(){this.control.setValue(this.defaultBaseApiUrl)}}function ra(i,n){1&i&&(t.ynx(0),t._uU(1," \u4e0d\u80fd\u4e3a\u7a7a "),t.BQk())}function sa(i,n){if(1&i&&(t.ynx(0),t._uU(1),t.ALo(2,"json"),t.BQk()),2&i){const e=t.oxw().$implicit;t.xp6(1),t.hij(" \u8f93\u5165\u65e0\u6548: ",t.lcZ(2,1,e.getError("baseUrl").value)," ")}}function la(i,n){if(1&i&&(t.YNc(0,ra,2,0,"ng-container",7),t.YNc(1,sa,3,3,"ng-container",7)),2&i){const e=n.$implicit;t.Q6J("ngIf",e.hasError("required")),t.xp6(1),t.Q6J("ngIf",e.hasError("baseUrl"))}}function ca(i,n){if(1&i&&(t.ynx(0),t.TgZ(1,"form",3)(2,"nz-form-item")(3,"nz-form-control",4),t._UZ(4,"textarea",5),t.YNc(5,la,2,2,"ng-template",null,6,t.W1O),t.qZA()()(),t.BQk()),2&i){const e=t.MAs(6),o=t.oxw();t.xp6(1),t.Q6J("formGroup",o.settingsForm),t.xp6(2),t.Q6J("nzErrorTip",e),t.xp6(1),t.Q6J("rows",5)}}function ga(i,n){if(1&i){const e=t.EpF();t.TgZ(0,"button",8),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.restoreDefault())}),t._uU(1," \u6062\u590d\u9ed8\u8ba4 "),t.qZA(),t.TgZ(2,"button",9),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.handleCancel())}),t._uU(3,"\u53d6\u6d88"),t.qZA(),t.TgZ(4,"button",10),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.handleConfirm())}),t._uU(5," \u786e\u5b9a "),t.qZA()}if(2&i){const e=t.oxw();t.Q6J("disabled",e.control.value.trim()===e.defaultBaseLiveApiUrl),t.xp6(4),t.Q6J("disabled",e.control.invalid||e.control.value.trim()===e.value)}}Bt.\u0275fac=function(n){return new(n||Bt)(t.Y36(r.qu),t.Y36(t.sBO))},Bt.\u0275cmp=t.Xpm({type:Bt,selectors:[["app-base-api-url-edit-dialog"]],inputs:{value:"value",visible:"visible"},outputs:{visibleChange:"visibleChange",cancel:"cancel",confirm:"confirm"},features:[t.TTD],decls:3,vars:2,consts:[["nzTitle","\u4fee\u6539\u4e3b\u7ad9 API \u4e3b\u673a\u5730\u5740","nzCentered","",3,"nzVisible","nzOkDisabled","nzVisibleChange"],[4,"nzModalContent"],[3,"nzModalFooter"],["nz-form","",3,"formGroup"],[3,"nzErrorTip"],["wrap","soft","nz-input","","required","","formControlName","baseApiUrls",3,"rows"],["errorTip",""],[4,"ngIf"],["nz-button","","nzType","default",3,"disabled","click"],["nz-button","","nzType","default",3,"click"],["nz-button","","nzDanger","","nzType","default",3,"disabled","click"]],template:function(n,e){1&n&&(t.TgZ(0,"nz-modal",0),t.NdJ("nzVisibleChange",function(a){return e.visible=a}),t.YNc(1,oa,7,3,"ng-container",1),t.YNc(2,aa,6,2,"ng-template",2),t.qZA()),2&n&&t.Q6J("nzVisible",e.visible)("nzOkDisabled",e.control.invalid||e.control.value.trim()===e.value)},dependencies:[p.O5,r._Y,r.Fj,r.JJ,r.JL,r.Q7,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.Fd,O.Zp,_.du,_.Uh,_.Hf,Q.ix,I.w,dt.dQ,p.Ts],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class Ut{constructor(n,e){this.changeDetector=e,this.value=[],this.visible=!1,this.visibleChange=new t.vpe,this.cancel=new t.vpe,this.confirm=new t.vpe,this.defaultBaseLiveApiUrl=d.gZ,this.settingsForm=n.group({baseLiveApiUrls:["",[r.kI.required,i=>{const o=i.value.split("\n").map(a=>a.trim()).filter(a=>!!a).filter(a=>!/^https?:\/\/\S+$/.test(a));return o.length>0?{baseUrl:{value:o}}:null}]]})}get control(){return this.settingsForm.get("baseLiveApiUrls")}ngOnChanges(){this.setValue()}open(){this.setValue(),this.setVisible(!0)}close(){this.setVisible(!1)}setVisible(n){this.visible=n,this.visibleChange.emit(n),this.changeDetector.markForCheck()}setValue(){this.control.setValue(this.value.join("\n")),this.changeDetector.markForCheck()}handleCancel(){this.cancel.emit(),this.close()}handleConfirm(){const e=this.control.value.split("\n").map(o=>o.trim()).filter(o=>!!o);this.confirm.emit(e),this.close()}restoreDefault(){this.control.setValue(this.defaultBaseLiveApiUrl)}}function ua(i,n){1&i&&(t.ynx(0),t._uU(1," \u4e0d\u80fd\u4e3a\u7a7a "),t.BQk())}function ma(i,n){if(1&i&&(t.ynx(0),t._uU(1),t.ALo(2,"json"),t.BQk()),2&i){const e=t.oxw().$implicit;t.xp6(1),t.hij(" \u8f93\u5165\u65e0\u6548: ",t.lcZ(2,1,e.getError("baseUrl").value)," ")}}function pa(i,n){if(1&i&&(t.YNc(0,ua,2,0,"ng-container",7),t.YNc(1,ma,3,3,"ng-container",7)),2&i){const e=n.$implicit;t.Q6J("ngIf",e.hasError("required")),t.xp6(1),t.Q6J("ngIf",e.hasError("baseUrl"))}}function da(i,n){if(1&i&&(t.ynx(0),t.TgZ(1,"form",3)(2,"nz-form-item")(3,"nz-form-control",4),t._UZ(4,"textarea",5),t.YNc(5,pa,2,2,"ng-template",null,6,t.W1O),t.qZA()()(),t.BQk()),2&i){const e=t.MAs(6),o=t.oxw();t.xp6(1),t.Q6J("formGroup",o.settingsForm),t.xp6(2),t.Q6J("nzErrorTip",e),t.xp6(1),t.Q6J("rows",5)}}function ha(i,n){if(1&i){const e=t.EpF();t.TgZ(0,"button",8),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.restoreDefault())}),t._uU(1," \u6062\u590d\u9ed8\u8ba4 "),t.qZA(),t.TgZ(2,"button",9),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.handleCancel())}),t._uU(3,"\u53d6\u6d88"),t.qZA(),t.TgZ(4,"button",10),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.handleConfirm())}),t._uU(5," \u786e\u5b9a "),t.qZA()}if(2&i){const e=t.oxw();t.Q6J("disabled",e.control.value.trim()===e.defaultBasePlayInfoApiUrl),t.xp6(4),t.Q6J("disabled",e.control.invalid||e.control.value.trim()===e.value)}}Ut.\u0275fac=function(n){return new(n||Ut)(t.Y36(r.qu),t.Y36(t.sBO))},Ut.\u0275cmp=t.Xpm({type:Ut,selectors:[["app-base-live-api-url-edit-dialog"]],inputs:{value:"value",visible:"visible"},outputs:{visibleChange:"visibleChange",cancel:"cancel",confirm:"confirm"},features:[t.TTD],decls:3,vars:2,consts:[["nzTitle","\u4fee\u6539\u76f4\u64ad API \u4e3b\u673a\u5730\u5740","nzCentered","",3,"nzVisible","nzOkDisabled","nzVisibleChange"],[4,"nzModalContent"],[3,"nzModalFooter"],["nz-form","",3,"formGroup"],[3,"nzErrorTip"],["wrap","soft","nz-input","","required","","formControlName","baseLiveApiUrls",3,"rows"],["errorTip",""],[4,"ngIf"],["nz-button","","nzType","default",3,"disabled","click"],["nz-button","","nzType","default",3,"click"],["nz-button","","nzDanger","","nzType","default",3,"disabled","click"]],template:function(n,e){1&n&&(t.TgZ(0,"nz-modal",0),t.NdJ("nzVisibleChange",function(a){return e.visible=a}),t.YNc(1,ca,7,3,"ng-container",1),t.YNc(2,ga,6,2,"ng-template",2),t.qZA()),2&n&&t.Q6J("nzVisible",e.visible)("nzOkDisabled",e.control.invalid||e.control.value.trim()===e.value)},dependencies:[p.O5,r._Y,r.Fj,r.JJ,r.JL,r.Q7,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.Fd,O.Zp,_.du,_.Uh,_.Hf,Q.ix,I.w,dt.dQ,p.Ts],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class It{constructor(n,e){this.changeDetector=e,this.value=[],this.visible=!1,this.visibleChange=new t.vpe,this.cancel=new t.vpe,this.confirm=new t.vpe,this.defaultBasePlayInfoApiUrl=d.gZ,this.settingsForm=n.group({basePlayInfoApiUrls:["",[r.kI.required,i=>{const o=i.value.split("\n").map(a=>a.trim()).filter(a=>!!a).filter(a=>!/^https?:\/\/\S+$/.test(a));return o.length>0?{baseUrl:{value:o}}:null}]]})}get control(){return this.settingsForm.get("basePlayInfoApiUrls")}ngOnChanges(){this.setValue()}open(){this.setValue(),this.setVisible(!0)}close(){this.setVisible(!1)}setVisible(n){this.visible=n,this.visibleChange.emit(n),this.changeDetector.markForCheck()}setValue(){this.control.setValue(this.value.join("\n")),this.changeDetector.markForCheck()}handleCancel(){this.cancel.emit(),this.close()}handleConfirm(){const e=this.control.value.split("\n").map(o=>o.trim()).filter(o=>!!o);this.confirm.emit(e),this.close()}restoreDefault(){this.control.setValue(this.defaultBasePlayInfoApiUrl)}}function _a(i,n){1&i&&(t.TgZ(0,"p"),t._uU(1,"\u8bbe\u7f6e\u5185\u5bb9\uff1a\u53d1\u9001\u4e3b\u7ad9 API \u8bf7\u6c42\u6240\u7528\u7684\u4e3b\u673a\u7684\u5730\u5740\uff0c\u4e00\u884c\u4e00\u4e2a\u3002"),t.qZA(),t.TgZ(2,"p"),t._uU(3,"\u8bf7\u6c42\u65b9\u5f0f\uff1a\u5148\u7528\u7b2c\u4e00\u4e2a\u53d1\u9001\u8bf7\u6c42\uff0c\u51fa\u9519\u5c31\u7528\u7b2c\u4e8c\u4e2a\uff0c\u4ee5\u6b64\u7c7b\u63a8\u3002"),t.qZA(),t.TgZ(4,"p"),t._uU(5,"\u4e3b\u8981\u76ee\u7684\uff1a\u7f13\u89e3\u8bf7\u6c42\u8fc7\u591a\u88ab\u98ce\u63a7"),t.qZA())}function fa(i,n){1&i&&(t.TgZ(0,"p"),t._uU(1," \u8bbe\u7f6e\u5185\u5bb9\uff1a\u53d1\u9001\u76f4\u64ad API (\u76f4\u64ad\u6d41 API getRoomPlayInfo \u9664\u5916) \u8bf7\u6c42\u6240\u7528\u7684\u4e3b\u673a\u7684\u5730\u5740\uff0c\u4e00\u884c\u4e00\u4e2a\u3002 "),t.qZA(),t.TgZ(2,"p"),t._uU(3,"\u8bf7\u6c42\u65b9\u5f0f\uff1a\u5148\u7528\u7b2c\u4e00\u4e2a\u53d1\u9001\u8bf7\u6c42\uff0c\u51fa\u9519\u5c31\u7528\u7b2c\u4e8c\u4e2a\uff0c\u4ee5\u6b64\u7c7b\u63a8\u3002"),t.qZA(),t.TgZ(4,"p"),t._uU(5,"\u4e3b\u8981\u76ee\u7684\uff1a\u7f13\u89e3\u8bf7\u6c42\u8fc7\u591a\u88ab\u98ce\u63a7"),t.qZA())}function Ca(i,n){1&i&&(t.TgZ(0,"p"),t._uU(1," \u8bbe\u7f6e\u5185\u5bb9\uff1a\u53d1\u9001\u76f4\u64ad\u6d41 API (getRoomPlayInfo) \u8bf7\u6c42\u6240\u7528\u7684\u4e3b\u673a\u7684\u5730\u5740\uff0c\u4e00\u884c\u4e00\u4e2a\u3002 "),t.qZA(),t.TgZ(2,"p"),t._uU(3," \u8bf7\u6c42\u65b9\u5f0f\uff1a\u540c\u65f6\u5e76\u53d1\u5411\u5168\u90e8 API \u4e3b\u673a\u53d1\u9001\u8bf7\u6c42\uff08\u4ece\u5168\u90e8\u6210\u529f\u7684\u8bf7\u6c42\u7ed3\u679c\u4e2d\u63d0\u53d6\u76f4\u64ad\u6d41\u8d28\u91cf\u8f83\u597d\u7684\u76f4\u64ad\u6d41\u5730\u5740\uff09 "),t.qZA(),t.TgZ(4,"p"),t._uU(5,"\u4e3b\u8981\u76ee\u7684\uff1a\u6539\u53d8\u5f55\u5236\u7684\u76f4\u64ad\u6d41\u7684 CDN"),t.qZA(),t.TgZ(6,"p"),t._uU(7," P.S\uff1a\u56fd\u5916 IP \u7684\u8bf7\u6c42\u7ed3\u679c\u6ca1\u6709 HLS(fmp4) \u6d41\uff0c\u8981\u540c\u65f6\u652f\u6301 fmp4 \u548c flv \u53ef\u4ee5\u6df7\u7528\u56fd\u5185\u548c\u56fd\u5916\u7684 API \u4e3b\u673a\u3002 "),t.qZA())}It.\u0275fac=function(n){return new(n||It)(t.Y36(r.qu),t.Y36(t.sBO))},It.\u0275cmp=t.Xpm({type:It,selectors:[["app-base-play-info-api-url-edit-dialog"]],inputs:{value:"value",visible:"visible"},outputs:{visibleChange:"visibleChange",cancel:"cancel",confirm:"confirm"},features:[t.TTD],decls:3,vars:2,consts:[["nzTitle","\u4fee\u6539\u76f4\u64ad\u6d41 API \u4e3b\u673a\u5730\u5740","nzCentered","",3,"nzVisible","nzOkDisabled","nzVisibleChange"],[4,"nzModalContent"],[3,"nzModalFooter"],["nz-form","",3,"formGroup"],[3,"nzErrorTip"],["wrap","soft","nz-input","","required","","formControlName","basePlayInfoApiUrls",3,"rows"],["errorTip",""],[4,"ngIf"],["nz-button","","nzType","default",3,"disabled","click"],["nz-button","","nzType","default",3,"click"],["nz-button","","nzDanger","","nzType","default",3,"disabled","click"]],template:function(n,e){1&n&&(t.TgZ(0,"nz-modal",0),t.NdJ("nzVisibleChange",function(a){return e.visible=a}),t.YNc(1,da,7,3,"ng-container",1),t.YNc(2,ha,6,2,"ng-template",2),t.qZA()),2&n&&t.Q6J("nzVisible",e.visible)("nzOkDisabled",e.control.invalid||e.control.value.trim()===e.value)},dependencies:[p.O5,r._Y,r.Fj,r.JJ,r.JL,r.Q7,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.Fd,O.Zp,_.du,_.Uh,_.Hf,Q.ix,I.w,dt.dQ,p.Ts],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class Jt{constructor(n,e,o){this.changeDetector=e,this.settingsSyncService=o,this.syncFailedWarningTip=d.yT,this.settingsForm=n.group({baseApiUrls:[[]],baseLiveApiUrls:[[]],basePlayInfoApiUrls:[[]]})}get baseApiUrlsControl(){return this.settingsForm.get("baseApiUrls")}get baseLiveApiUrlsControl(){return this.settingsForm.get("baseLiveApiUrls")}get basePlayInfoApiUrlsControl(){return this.settingsForm.get("basePlayInfoApiUrls")}ngOnChanges(){this.syncStatus=M(this.settings,()=>!0),this.settingsForm.setValue(this.settings)}ngOnInit(){this.settingsSyncService.syncSettings("biliApi",this.settings,this.settingsForm.valueChanges,!1).subscribe(n=>{this.syncStatus={...this.syncStatus,...P(n)},this.changeDetector.markForCheck()})}}Jt.\u0275fac=function(n){return new(n||Jt)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(z))},Jt.\u0275cmp=t.Xpm({type:Jt,selectors:[["app-bili-api-settings"]],inputs:{settings:"settings"},features:[t.TTD],decls:31,vars:16,consts:[["nz-form","",3,"formGroup"],[1,"setting-item","actionable",3,"click"],[1,"setting-label",3,"nzTooltipTitle"],["baseApiUrlsTip",""],[3,"nzWarningTip","nzValidateStatus"],[1,"setting-value"],[3,"value","confirm"],["baseApiUrlsEditDialog",""],["baseLiveApiUrlsTip",""],["baseLiveApiUrlsEditDialog",""],["basePalyInfoApiUrlTip",""],["basePlayInfoApiUrlsEditDialog",""]],template:function(n,e){if(1&n){const o=t.EpF();t.TgZ(0,"form",0)(1,"nz-form-item",1),t.NdJ("click",function(){t.CHM(o);const s=t.MAs(10);return t.KtG(s.open())}),t.TgZ(2,"nz-form-label",2),t._uU(3,"\u4e3b\u7ad9 API \u4e3b\u673a\u5730\u5740"),t.qZA(),t.YNc(4,_a,6,0,"ng-template",null,3,t.W1O),t.TgZ(6,"nz-form-control",4)(7,"nz-form-text",5),t._uU(8),t.qZA(),t.TgZ(9,"app-base-api-url-edit-dialog",6,7),t.NdJ("confirm",function(s){return e.baseApiUrlsControl.setValue(s)}),t.qZA()()(),t.TgZ(11,"nz-form-item",1),t.NdJ("click",function(){t.CHM(o);const s=t.MAs(20);return t.KtG(s.open())}),t.TgZ(12,"nz-form-label",2),t._uU(13,"\u76f4\u64ad API \u4e3b\u673a\u5730\u5740"),t.qZA(),t.YNc(14,fa,6,0,"ng-template",null,8,t.W1O),t.TgZ(16,"nz-form-control",4)(17,"nz-form-text",5),t._uU(18),t.qZA(),t.TgZ(19,"app-base-live-api-url-edit-dialog",6,9),t.NdJ("confirm",function(s){return e.baseLiveApiUrlsControl.setValue(s)}),t.qZA()()(),t.TgZ(21,"nz-form-item",1),t.NdJ("click",function(){t.CHM(o);const s=t.MAs(30);return t.KtG(s.open())}),t.TgZ(22,"nz-form-label",2),t._uU(23,"\u76f4\u64ad\u6d41 API \u4e3b\u673a\u5730\u5740"),t.qZA(),t.YNc(24,Ca,8,0,"ng-template",null,10,t.W1O),t.TgZ(26,"nz-form-control",4)(27,"nz-form-text",5),t._uU(28),t.qZA(),t.TgZ(29,"app-base-play-info-api-url-edit-dialog",6,11),t.NdJ("confirm",function(s){return e.basePlayInfoApiUrlsControl.setValue(s)}),t.qZA()()()()}if(2&n){const o=t.MAs(5),a=t.MAs(15),s=t.MAs(25);t.Q6J("formGroup",e.settingsForm),t.xp6(2),t.Q6J("nzTooltipTitle",o),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.baseApiUrls?e.baseApiUrlsControl:"warning"),t.xp6(2),t.hij("",e.baseApiUrlsControl.value," "),t.xp6(1),t.Q6J("value",e.baseApiUrlsControl.value),t.xp6(3),t.Q6J("nzTooltipTitle",a),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.baseLiveApiUrls?e.baseLiveApiUrlsControl:"warning"),t.xp6(2),t.hij("",e.baseLiveApiUrlsControl.value," "),t.xp6(1),t.Q6J("value",e.baseLiveApiUrlsControl.value),t.xp6(3),t.Q6J("nzTooltipTitle",s),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.basePlayInfoApiUrls?e.basePlayInfoApiUrlsControl:"warning"),t.xp6(2),t.hij("",e.basePlayInfoApiUrlsControl.value," "),t.xp6(1),t.Q6J("value",e.basePlayInfoApiUrlsControl.value)}},dependencies:[r._Y,r.JL,r.sg,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,l.EF,Bt,Ut,It],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}nz-form-control[_ngcontent-%COMP%]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}"],changeDetection:0});const va=["innerContent"];class Qt{constructor(n,e,o,a){this.changeDetector=n,this.route=e,this.logger=o,this.routerScrollService=a}ngOnInit(){this.route.data.subscribe(n=>{this.settings=n.settings,this.changeDetector.markForCheck()})}ngAfterViewInit(){this.innerContent?this.routerScrollService.setCustomViewportToScroll(this.innerContent.nativeElement):this.logger.error("The content element could not be found!")}}Qt.\u0275fac=function(n){return new(n||Qt)(t.Y36(t.sBO),t.Y36(v.gz),t.Y36(Z.Kf),t.Y36(pt))},Qt.\u0275cmp=t.Xpm({type:Qt,selectors:[["app-settings"]],viewQuery:function(n,e){if(1&n&&t.Gf(va,5),2&n){let o;t.iGM(o=t.CRH())&&(e.innerContent=o.first)}},decls:24,vars:8,consts:[[1,"inner-content"],["innerContent",""],[1,"main-settings","settings-page"],[1,"settings-page-content"],["name","\u6587\u4ef6"],[3,"settings"],["name","\u5f55\u5236"],["name","\u5f39\u5e55"],["name","\u6587\u4ef6\u5904\u7406"],["name","\u786c\u76d8\u7a7a\u95f4"],["name","BILI API"],["name","\u7f51\u7edc\u8bf7\u6c42"],["name","\u65e5\u5fd7"],["name","\u901a\u77e5"],["name","Webhook"]],template:function(n,e){1&n&&(t.TgZ(0,"div",0,1)(2,"div",2)(3,"div",3)(4,"app-page-section",4),t._UZ(5,"app-output-settings",5),t.qZA(),t.TgZ(6,"app-page-section",6),t._UZ(7,"app-recorder-settings",5),t.qZA(),t.TgZ(8,"app-page-section",7),t._UZ(9,"app-danmaku-settings",5),t.qZA(),t.TgZ(10,"app-page-section",8),t._UZ(11,"app-post-processing-settings",5),t.qZA(),t.TgZ(12,"app-page-section",9),t._UZ(13,"app-disk-space-settings",5),t.qZA(),t.TgZ(14,"app-page-section",10),t._UZ(15,"app-bili-api-settings",5),t.qZA(),t.TgZ(16,"app-page-section",11),t._UZ(17,"app-header-settings",5),t.qZA(),t.TgZ(18,"app-page-section",12),t._UZ(19,"app-logging-settings",5),t.qZA(),t.TgZ(20,"app-page-section",13),t._UZ(21,"app-notification-settings"),t.qZA(),t.TgZ(22,"app-page-section",14),t._UZ(23,"app-webhook-settings"),t.qZA()()()()),2&n&&(t.xp6(5),t.Q6J("settings",e.settings.output),t.xp6(2),t.Q6J("settings",e.settings.recorder),t.xp6(2),t.Q6J("settings",e.settings.danmaku),t.xp6(2),t.Q6J("settings",e.settings.postprocessing),t.xp6(2),t.Q6J("settings",e.settings.space),t.xp6(2),t.Q6J("settings",e.settings.biliApi),t.xp6(2),t.Q6J("settings",e.settings.header),t.xp6(2),t.Q6J("settings",e.settings.logging))},dependencies:[q.g,xt,Ot,Pt,Tt,wt,Ft,At,Et,Zt,Jt],styles:[".inner-content[_ngcontent-%COMP%]{height:100%;width:100%;position:relative;display:block;margin:0;padding:1rem;background:#f1f1f1;overflow:auto}.settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}.inner-content[_ngcontent-%COMP%]{padding-top:0}"]});var za=c(7298),xa=c(6198),Ge=c(3449),Oa=c(2168);const ba=function Ma(i,n,e,o){if(!(0,Mt.Z)(i))return i;for(var a=-1,s=(n=(0,Ge.Z)(n,i)).length,g=s-1,m=i;null!=m&&++a0&&e(m)?n>1?Ke(m,n-1,e,o,a):(0,ya.Z)(a,m):o||(a[a.length]=m)}return a},Za=function Ea(i){return null!=i&&i.length?Da(i,1):[]},Ba=function Na(i,n,e){switch(e.length){case 0:return i.call(n);case 1:return i.call(n,e[0]);case 2:return i.call(n,e[0],e[1]);case 3:return i.call(n,e[0],e[1],e[2])}return i.apply(n,e)};var Xe=Math.max;const Qa=function Ja(i){return function(){return i}};var je=c(2370),Va=c(9940),Ya=800,Wa=16,Ra=Date.now;const $a=function Ga(i){var n=0,e=0;return function(){var o=Ra(),a=Wa-(o-e);if(e=o,a>0){if(++n>=Ya)return arguments[0]}else n=0;return i.apply(void 0,arguments)}}(je.Z?function(i,n){return(0,je.Z)(i,"toString",{configurable:!0,enumerable:!1,value:Qa(n),writable:!0})}:Va.Z),f=function Ka(i){return $a(function Ua(i,n,e){return n=Xe(void 0===n?i.length-1:n,0),function(){for(var o=arguments,a=-1,s=Xe(o.length-n,0),g=Array(s);++a!0),this.settingsForm.setValue(this.settings)}ngOnInit(){this.settingsSyncService.syncSettings(this.keyOfSettings,this.settingsForm.value,this.settingsForm.valueChanges).subscribe(n=>{this.syncStatus={...this.syncStatus,...P(n)},this.changeDetector.markForCheck()})}}N.\u0275fac=function(n){return new(n||N)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(z))},N.\u0275cmp=t.Xpm({type:N,selectors:[["app-event-settings"]],inputs:{settings:"settings",keyOfSettings:"keyOfSettings"},features:[t.TTD],decls:21,vars:9,consts:[["nz-form","",3,"formGroup"],["appSwitchActionable","",1,"setting-item"],["nzNoColon","",1,"setting-label"],[1,"setting-control","switch",3,"nzWarningTip","nzValidateStatus"],["formControlName","notifyBegan"],["formControlName","notifyEnded"],["formControlName","notifyError"],["formControlName","notifySpace"]],template:function(n,e){1&n&&(t.TgZ(0,"form",0)(1,"nz-form-item",1)(2,"nz-form-label",2),t._uU(3,"\u5f00\u64ad\u53d1\u9001\u901a\u77e5"),t.qZA(),t.TgZ(4,"nz-form-control",3),t._UZ(5,"nz-switch",4),t.qZA()(),t.TgZ(6,"nz-form-item",1)(7,"nz-form-label",2),t._uU(8,"\u4e0b\u64ad\u53d1\u9001\u901a\u77e5"),t.qZA(),t.TgZ(9,"nz-form-control",3),t._UZ(10,"nz-switch",5),t.qZA()(),t.TgZ(11,"nz-form-item",1)(12,"nz-form-label",2),t._uU(13,"\u51fa\u9519\u53d1\u9001\u901a\u77e5"),t.qZA(),t.TgZ(14,"nz-form-control",3),t._UZ(15,"nz-switch",6),t.qZA()(),t.TgZ(16,"nz-form-item",1)(17,"nz-form-label",2),t._uU(18,"\u7a7a\u95f4\u4e0d\u8db3\u53d1\u9001\u901a\u77e5"),t.qZA(),t.TgZ(19,"nz-form-control",3),t._UZ(20,"nz-switch",7),t.qZA()()()),2&n&&(t.Q6J("formGroup",e.settingsForm),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.notifyBegan?e.notifyBeganControl:"warning"),t.xp6(5),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.notifyEnded?e.notifyEndedControl:"warning"),t.xp6(5),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.notifyError?e.notifyErrorControl:"warning"),t.xp6(5),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.notifySpace?e.notifySpaceControl:"warning"))},dependencies:[r._Y,r.JJ,r.JL,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,U.i,y],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});var ja=c(6422);function tr(i,n){1&i&&(t.ynx(0),t._uU(1," \u8bf7\u8f93\u5165\u90ae\u7bb1\u5730\u5740\uff01 "),t.BQk())}function er(i,n){1&i&&(t.ynx(0),t._uU(1," \u90ae\u7bb1\u5730\u5740\u65e0\u6548! "),t.BQk())}function nr(i,n){if(1&i&&(t.YNc(0,tr,2,0,"ng-container",17),t.YNc(1,er,2,0,"ng-container",17)),2&i){const e=n.$implicit;t.Q6J("ngIf",e.hasError("required")),t.xp6(1),t.Q6J("ngIf",e.hasError("email"))}}function ir(i,n){1&i&&(t.ynx(0),t._uU(1," \u8bf7\u8f93\u5165\u6388\u6743\u7801\uff01 "),t.BQk())}function or(i,n){1&i&&t.YNc(0,ir,2,0,"ng-container",17),2&i&&t.Q6J("ngIf",n.$implicit.hasError("required"))}function ar(i,n){1&i&&(t.ynx(0),t._uU(1," \u8bf7\u8f93\u5165 SMTP \u4e3b\u673a\uff01 "),t.BQk())}function rr(i,n){1&i&&t.YNc(0,ar,2,0,"ng-container",17),2&i&&t.Q6J("ngIf",n.$implicit.hasError("required"))}function sr(i,n){1&i&&(t.ynx(0),t._uU(1," \u8bf7\u8f93\u5165 SMTP \u7aef\u53e3\uff01 "),t.BQk())}function lr(i,n){1&i&&(t.ynx(0),t._uU(1," SMTP \u7aef\u53e3\u65e0\u6548\uff01 "),t.BQk())}function cr(i,n){if(1&i&&(t.YNc(0,sr,2,0,"ng-container",17),t.YNc(1,lr,2,0,"ng-container",17)),2&i){const e=n.$implicit;t.Q6J("ngIf",e.hasError("required")),t.xp6(1),t.Q6J("ngIf",e.hasError("pattern"))}}function gr(i,n){1&i&&(t.ynx(0),t._uU(1," \u8bf7\u8f93\u5165\u90ae\u7bb1\u5730\u5740\uff01 "),t.BQk())}function ur(i,n){1&i&&(t.ynx(0),t._uU(1," \u90ae\u7bb1\u5730\u5740\u65e0\u6548! "),t.BQk())}function mr(i,n){if(1&i&&(t.YNc(0,gr,2,0,"ng-container",17),t.YNc(1,ur,2,0,"ng-container",17)),2&i){const e=n.$implicit;t.Q6J("ngIf",e.hasError("required")),t.xp6(1),t.Q6J("ngIf",e.hasError("email"))}}class Vt{constructor(n,e,o){this.changeDetector=e,this.settingsSyncService=o,this.syncFailedWarningTip=d.yT,this.settingsForm=n.group({srcAddr:["",[r.kI.required,r.kI.email]],dstAddr:["",[r.kI.required,r.kI.email]],authCode:["",[r.kI.required]],smtpHost:["",[r.kI.required]],smtpPort:["",[r.kI.required,r.kI.pattern(/\d+/)]]})}get srcAddrControl(){return this.settingsForm.get("srcAddr")}get dstAddrControl(){return this.settingsForm.get("dstAddr")}get authCodeControl(){return this.settingsForm.get("authCode")}get smtpHostControl(){return this.settingsForm.get("smtpHost")}get smtpPortControl(){return this.settingsForm.get("smtpPort")}ngOnChanges(){this.syncStatus=M(this.settings,()=>!0),this.settingsForm.setValue(this.settings)}ngOnInit(){this.settingsSyncService.syncSettings("emailNotification",this.settings,this.settingsForm.valueChanges.pipe((0,at.Sc)(this.settingsForm),(0,T.U)(n=>(0,ja.Z)(n,(e,o,a)=>{o="smtpPort"===a?parseInt(o):o,Reflect.set(e,a,o)},{})))).subscribe(n=>{this.syncStatus={...this.syncStatus,...P(n)},this.changeDetector.markForCheck()})}}Vt.\u0275fac=function(n){return new(n||Vt)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(z))},Vt.\u0275cmp=t.Xpm({type:Vt,selectors:[["app-email-settings"]],inputs:{settings:"settings"},features:[t.TTD],decls:36,vars:16,consts:[["nz-form","",3,"formGroup"],[1,"setting-item"],["nzFor","srcAddr","nzNoColon","","nzRequired","",1,"setting-label"],["nzHasFeedback","",1,"setting-control","input",3,"nzErrorTip","nzWarningTip","nzValidateStatus"],["id","srcAddr","type","email","placeholder","\u53d1\u9001\u901a\u77e5\u7684\u90ae\u7bb1\u5730\u5740","required","","nz-input","","formControlName","srcAddr"],["emailErrorTip",""],["nzFor","authCode","nzNoColon","","nzRequired","",1,"setting-label"],["id","authCode","type","text","placeholder","\u53d1\u9001\u90ae\u7bb1\u7684 SMTP \u6388\u6743\u7801","required","","nz-input","","formControlName","authCode"],["authCodeErrorTip",""],["nzFor","smtpHost","nzNoColon","","nzRequired","",1,"setting-label"],["id","smtpHost","type","text","placeholder","\u53d1\u9001\u90ae\u7bb1\u7684 SMTP \u4e3b\u673a\uff0c\u4f8b\u5982\uff1asmtp.163.com \u3002","required","","nz-input","","formControlName","smtpHost"],["smtpHostErrorTip",""],["nzFor","smtpPort","nzNoColon","","nzRequired","",1,"setting-label"],["id","smtpPort","type","text","pattern","\\d+","placeholder","\u53d1\u9001\u90ae\u7bb1\u7684 SMTP \u4e3b\u673a\u7aef\u53e3\uff0c\u901a\u5e38\u4e3a 465 \u3002","required","","nz-input","","formControlName","smtpPort"],["smtpPortErrorTip",""],["nzFor","dstAddr","nzNoColon","","nzRequired","",1,"setting-label"],["id","dstAddr","type","email","placeholder","\u63a5\u6536\u901a\u77e5\u7684\u90ae\u7bb1\u5730\u5740\uff0c\u53ef\u4ee5\u548c\u53d1\u9001\u90ae\u7bb1\u76f8\u540c\u5b9e\u73b0\u81ea\u53d1\u81ea\u6536\u3002","required","","nz-input","","formControlName","dstAddr"],[4,"ngIf"]],template:function(n,e){if(1&n&&(t.TgZ(0,"form",0)(1,"nz-form-item",1)(2,"nz-form-label",2),t._uU(3,"\u53d1\u9001\u90ae\u7bb1"),t.qZA(),t.TgZ(4,"nz-form-control",3),t._UZ(5,"input",4),t.YNc(6,nr,2,2,"ng-template",null,5,t.W1O),t.qZA()(),t.TgZ(8,"nz-form-item",1)(9,"nz-form-label",6),t._uU(10,"\u6388\u6743\u7801"),t.qZA(),t.TgZ(11,"nz-form-control",3),t._UZ(12,"input",7),t.YNc(13,or,1,1,"ng-template",null,8,t.W1O),t.qZA()(),t.TgZ(15,"nz-form-item",1)(16,"nz-form-label",9),t._uU(17,"SMTP \u4e3b\u673a"),t.qZA(),t.TgZ(18,"nz-form-control",3),t._UZ(19,"input",10),t.YNc(20,rr,1,1,"ng-template",null,11,t.W1O),t.qZA()(),t.TgZ(22,"nz-form-item",1)(23,"nz-form-label",12),t._uU(24,"SMTP \u7aef\u53e3"),t.qZA(),t.TgZ(25,"nz-form-control",3),t._UZ(26,"input",13),t.YNc(27,cr,2,2,"ng-template",null,14,t.W1O),t.qZA()(),t.TgZ(29,"nz-form-item",1)(30,"nz-form-label",15),t._uU(31,"\u63a5\u6536\u90ae\u7bb1"),t.qZA(),t.TgZ(32,"nz-form-control",3),t._UZ(33,"input",16),t.YNc(34,mr,2,2,"ng-template",null,5,t.W1O),t.qZA()()()),2&n){const o=t.MAs(7),a=t.MAs(14),s=t.MAs(21),g=t.MAs(28);t.Q6J("formGroup",e.settingsForm),t.xp6(4),t.Q6J("nzErrorTip",o)("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.srcAddrControl.valid&&!e.syncStatus.srcAddr?"warning":e.srcAddrControl),t.xp6(7),t.Q6J("nzErrorTip",a)("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.authCodeControl.valid&&!e.syncStatus.authCode?"warning":e.authCodeControl),t.xp6(7),t.Q6J("nzErrorTip",s)("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.smtpHostControl.valid&&!e.syncStatus.smtpHost?"warning":e.smtpHostControl),t.xp6(7),t.Q6J("nzErrorTip",g)("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.smtpPortControl.valid&&!e.syncStatus.smtpPort?"warning":e.smtpPortControl),t.xp6(7),t.Q6J("nzErrorTip",o)("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.dstAddrControl.valid&&!e.syncStatus.dstAddr?"warning":e.dstAddrControl)}},dependencies:[p.O5,r._Y,r.Fj,r.JJ,r.JL,r.Q7,r.c5,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,O.Zp],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}.setting-label[_ngcontent-%COMP%]{max-width:6em!important;width:6em!important}"],changeDetection:0});class B{constructor(n,e,o){this.changeDetector=e,this.settingsSyncService=o,this.syncFailedWarningTip=d.yT,this.settingsForm=n.group({enabled:[""]})}get enabledControl(){return this.settingsForm.get("enabled")}ngOnChanges(){this.syncStatus=M(this.settings,()=>!0),this.settingsForm.setValue(this.settings)}ngOnInit(){this.settingsSyncService.syncSettings(this.keyOfSettings,this.settings,this.settingsForm.valueChanges).subscribe(n=>{this.syncStatus={...this.syncStatus,...P(n)},this.changeDetector.markForCheck()})}}B.\u0275fac=function(n){return new(n||B)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(z))},B.\u0275cmp=t.Xpm({type:B,selectors:[["app-notifier-settings"]],inputs:{settings:"settings",keyOfSettings:"keyOfSettings"},features:[t.TTD],decls:6,vars:3,consts:[["nz-form","",3,"formGroup"],["appSwitchActionable","",1,"setting-item"],["nzNoColon","",1,"setting-label"],[1,"setting-control","switch",3,"nzWarningTip","nzValidateStatus"],["formControlName","enabled"]],template:function(n,e){1&n&&(t.TgZ(0,"form",0)(1,"nz-form-item",1)(2,"nz-form-label",2),t._uU(3,"\u5141\u8bb8\u901a\u77e5"),t.qZA(),t.TgZ(4,"nz-form-control",3),t._UZ(5,"nz-switch",4),t.qZA()()()),2&n&&(t.Q6J("formGroup",e.settingsForm),t.xp6(4),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.syncStatus.enabled?e.enabledControl:"warning"))},dependencies:[r._Y,r.JJ,r.JL,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,U.i,y],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class A{constructor(n,e,o){this.changeDetector=n,this.message=e,this.settingService=o}ngOnInit(){switch(this.keyOfSettings){case"emailNotification":this.messageTypes=["text","html"];break;case"serverchanNotification":this.messageTypes=["markdown"];break;case"pushdeerNotification":this.messageTypes=["markdown","text"];break;case"pushplusNotification":this.messageTypes=["markdown","text","html"];break;case"telegramNotification":this.messageTypes=["markdown","html"]}}ngOnChanges(n){this.updateCommonSettings()}changeBeganMessageTemplateSettings(n){this.changeMessageTemplateSettings({beganMessageType:n.messageType,beganMessageTitle:n.messageTitle,beganMessageContent:n.messageContent}).subscribe()}changeEndedMessageTemplateSettings(n){this.changeMessageTemplateSettings({endedMessageType:n.messageType,endedMessageTitle:n.messageTitle,endedMessageContent:n.messageContent}).subscribe()}changeSpaceMessageTemplateSettings(n){this.changeMessageTemplateSettings({spaceMessageType:n.messageType,spaceMessageTitle:n.messageTitle,spaceMessageContent:n.messageContent}).subscribe()}changeErrorMessageTemplateSettings(n){this.changeMessageTemplateSettings({errorMessageType:n.messageType,errorMessageTitle:n.messageTitle,errorMessageContent:n.messageContent}).subscribe()}changeMessageTemplateSettings(n){return this.settingService.changeSettings({[this.keyOfSettings]:n}).pipe((0,F.X)(3,300),(0,re.b)(e=>{this.message.success("\u4fee\u6539\u6d88\u606f\u6a21\u677f\u8bbe\u7f6e\u6210\u529f"),this.settings={...this.settings,...e[this.keyOfSettings]},this.updateCommonSettings(),this.changeDetector.markForCheck()},e=>{this.message.error(`\u4fee\u6539\u6d88\u606f\u6a21\u677f\u8bbe\u7f6e\u51fa\u9519: ${e.message}`)}))}updateCommonSettings(){this.beganMessageTemplateSettings={messageType:this.settings.beganMessageType,messageTitle:this.settings.beganMessageTitle,messageContent:this.settings.beganMessageContent},this.endedMessageTemplateSettings={messageType:this.settings.endedMessageType,messageTitle:this.settings.endedMessageTitle,messageContent:this.settings.endedMessageContent},this.spaceMessageTemplateSettings={messageType:this.settings.spaceMessageType,messageTitle:this.settings.spaceMessageTitle,messageContent:this.settings.spaceMessageContent},this.errorMessageTemplateSettings={messageType:this.settings.errorMessageType,messageTitle:this.settings.errorMessageTitle,messageContent:this.settings.errorMessageContent}}}function pr(i,n){if(1&i&&(t.TgZ(0,"app-page-section"),t._UZ(1,"app-notifier-settings",2),t.qZA(),t.TgZ(2,"app-page-section",3),t._UZ(3,"app-email-settings",4),t.qZA(),t.TgZ(4,"app-page-section",5),t._UZ(5,"app-event-settings",2),t.qZA(),t.TgZ(6,"app-page-section",6),t._UZ(7,"app-message-template-settings",2),t.qZA()),2&i){const e=t.oxw();t.xp6(1),t.Q6J("settings",e.notifierSettings),t.xp6(2),t.Q6J("settings",e.emailSettings),t.xp6(2),t.Q6J("settings",e.notificationSettings),t.xp6(2),t.Q6J("settings",e.messageTemplateSettings)}}A.\u0275fac=function(n){return new(n||A)(t.Y36(t.sBO),t.Y36(se.dD),t.Y36(S.R))},A.\u0275cmp=t.Xpm({type:A,selectors:[["app-message-template-settings"]],inputs:{settings:"settings",keyOfSettings:"keyOfSettings"},features:[t.TTD],decls:20,vars:12,consts:[[1,"setting-item","actionable",3,"click"],[1,"setting-label"],[3,"title","value","messageTypes","confirm"],["beganMessageTemplateEditDialog",""],["endedMessageTemplateEditDialog",""],["errorMessageTemplateEditDialog",""],["spaceMessageTemplateEditDialog",""]],template:function(n,e){if(1&n){const o=t.EpF();t.TgZ(0,"a",0),t.NdJ("click",function(){t.CHM(o);const s=t.MAs(4);return t.KtG(s.open())}),t.TgZ(1,"span",1),t._uU(2,"\u5f00\u64ad\u6d88\u606f\u6a21\u677f"),t.qZA()(),t.TgZ(3,"app-message-template-edit-dialog",2,3),t.NdJ("confirm",function(s){return e.changeBeganMessageTemplateSettings(s)}),t.qZA(),t.TgZ(5,"a",0),t.NdJ("click",function(){t.CHM(o);const s=t.MAs(9);return t.KtG(s.open())}),t.TgZ(6,"span",1),t._uU(7,"\u4e0b\u64ad\u6d88\u606f\u6a21\u677f"),t.qZA()(),t.TgZ(8,"app-message-template-edit-dialog",2,4),t.NdJ("confirm",function(s){return e.changeEndedMessageTemplateSettings(s)}),t.qZA(),t.TgZ(10,"a",0),t.NdJ("click",function(){t.CHM(o);const s=t.MAs(14);return t.KtG(s.open())}),t.TgZ(11,"span",1),t._uU(12,"\u5f02\u5e38\u6d88\u606f\u6a21\u677f"),t.qZA()(),t.TgZ(13,"app-message-template-edit-dialog",2,5),t.NdJ("confirm",function(s){return e.changeErrorMessageTemplateSettings(s)}),t.qZA(),t.TgZ(15,"a",0),t.NdJ("click",function(){t.CHM(o);const s=t.MAs(19);return t.KtG(s.open())}),t.TgZ(16,"span",1),t._uU(17,"\u7a7a\u95f4\u4e0d\u8db3\u6d88\u606f\u6a21\u677f"),t.qZA()(),t.TgZ(18,"app-message-template-edit-dialog",2,6),t.NdJ("confirm",function(s){return e.changeSpaceMessageTemplateSettings(s)}),t.qZA()}2&n&&(t.xp6(3),t.Q6J("title","\u4fee\u6539\u5f00\u64ad\u6d88\u606f\u6a21\u677f")("value",e.beganMessageTemplateSettings)("messageTypes",e.messageTypes),t.xp6(5),t.Q6J("title","\u4fee\u6539\u4e0b\u64ad\u6d88\u606f\u6a21\u677f")("value",e.endedMessageTemplateSettings)("messageTypes",e.messageTypes),t.xp6(5),t.Q6J("title","\u4fee\u6539\u5f02\u5e38\u6d88\u606f\u6a21\u677f")("value",e.errorMessageTemplateSettings)("messageTypes",e.messageTypes),t.xp6(5),t.Q6J("title","\u4fee\u6539\u7a7a\u95f4\u4e0d\u8db3\u6d88\u606f\u6a21\u677f")("value",e.spaceMessageTemplateSettings)("messageTypes",e.messageTypes))},styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class Lt{constructor(n,e){this.changeDetector=n,this.route=e}ngOnInit(){this.route.data.subscribe(n=>{const e=n.settings;this.emailSettings=f(e,C.gP),this.notifierSettings=f(e,C._1),this.notificationSettings=f(e,C.X),this.messageTemplateSettings=f(e,C.tI),this.changeDetector.markForCheck()})}}function dr(i,n){1&i&&(t.ynx(0),t._uU(1," \u8bf7\u8f93\u5165 sendkey\uff01 "),t.BQk())}function hr(i,n){1&i&&(t.ynx(0),t._uU(1," sendkey \u65e0\u6548 "),t.BQk())}function _r(i,n){if(1&i&&(t.YNc(0,dr,2,0,"ng-container",6),t.YNc(1,hr,2,0,"ng-container",6)),2&i){const e=n.$implicit;t.Q6J("ngIf",e.hasError("required")),t.xp6(1),t.Q6J("ngIf",e.hasError("pattern"))}}Lt.\u0275fac=function(n){return new(n||Lt)(t.Y36(t.sBO),t.Y36(v.gz))},Lt.\u0275cmp=t.Xpm({type:Lt,selectors:[["app-email-notification-settings"]],decls:2,vars:0,consts:[["pageTitle","\u90ae\u4ef6\u901a\u77e5"],["appSubPageContent",""],["keyOfSettings","emailNotification",3,"settings"],["name","\u90ae\u7bb1"],[3,"settings"],["name","\u4e8b\u4ef6"],["name","\u6d88\u606f"]],template:function(n,e){1&n&&(t.TgZ(0,"app-sub-page",0),t.YNc(1,pr,8,4,"ng-template",1),t.qZA())},dependencies:[rt.Y,st.q,q.g,N,Vt,B,A],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class qt{constructor(n,e,o){this.changeDetector=e,this.settingsSyncService=o,this.syncFailedWarningTip=d.yT,this.settingsForm=n.group({sendkey:["",[r.kI.required,r.kI.pattern(/^[a-zA-Z\d]+$/)]]})}get sendkeyControl(){return this.settingsForm.get("sendkey")}ngOnChanges(){this.syncStatus=M(this.settings,()=>!0),this.settingsForm.setValue(this.settings)}ngOnInit(){this.settingsSyncService.syncSettings("serverchanNotification",this.settings,this.settingsForm.valueChanges.pipe((0,at.Sc)(this.settingsForm))).subscribe(n=>{this.syncStatus={...this.syncStatus,...P(n)},this.changeDetector.markForCheck()})}}function fr(i,n){if(1&i&&(t.TgZ(0,"app-page-section"),t._UZ(1,"app-notifier-settings",2),t.qZA(),t.TgZ(2,"app-page-section",3),t._UZ(3,"app-serverchan-settings",4),t.qZA(),t.TgZ(4,"app-page-section",5),t._UZ(5,"app-event-settings",2),t.qZA(),t.TgZ(6,"app-page-section",6),t._UZ(7,"app-message-template-settings",2),t.qZA()),2&i){const e=t.oxw();t.xp6(1),t.Q6J("settings",e.notifierSettings),t.xp6(2),t.Q6J("settings",e.serverchanSettings),t.xp6(2),t.Q6J("settings",e.notificationSettings),t.xp6(2),t.Q6J("settings",e.messageTemplateSettings)}}qt.\u0275fac=function(n){return new(n||qt)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(z))},qt.\u0275cmp=t.Xpm({type:qt,selectors:[["app-serverchan-settings"]],inputs:{settings:"settings"},features:[t.TTD],decls:8,vars:4,consts:[["nz-form","",3,"formGroup"],[1,"setting-item"],["nzFor","sendkey","nzNoColon","","nzRequired","",1,"setting-label"],["nzHasFeedback","",1,"setting-control","input",3,"nzErrorTip","nzWarningTip","nzValidateStatus"],["id","sendkey","type","text","required","","nz-input","","formControlName","sendkey"],["sendkeyErrorTip",""],[4,"ngIf"]],template:function(n,e){if(1&n&&(t.TgZ(0,"form",0)(1,"nz-form-item",1)(2,"nz-form-label",2),t._uU(3,"sendkey"),t.qZA(),t.TgZ(4,"nz-form-control",3),t._UZ(5,"input",4),t.YNc(6,_r,2,2,"ng-template",null,5,t.W1O),t.qZA()()()),2&n){const o=t.MAs(7);t.Q6J("formGroup",e.settingsForm),t.xp6(4),t.Q6J("nzErrorTip",o)("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.sendkeyControl.valid&&!e.syncStatus.sendkey?"warning":e.sendkeyControl)}},dependencies:[p.O5,r._Y,r.Fj,r.JJ,r.JL,r.Q7,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,O.Zp],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}.setting-label[_ngcontent-%COMP%]{max-width:5em!important;width:5em!important}"],changeDetection:0});class Yt{constructor(n,e){this.changeDetector=n,this.route=e}ngOnInit(){this.route.data.subscribe(n=>{const e=n.settings;this.serverchanSettings=f(e,C.gq),this.notifierSettings=f(e,C._1),this.notificationSettings=f(e,C.X),this.messageTemplateSettings=f(e,C.tI),this.changeDetector.markForCheck()})}}function Cr(i,n){1&i&&(t.ynx(0),t._uU(1," server \u65e0\u6548 "),t.BQk())}function vr(i,n){1&i&&t.YNc(0,Cr,2,0,"ng-container",9),2&i&&t.Q6J("ngIf",n.$implicit.hasError("pattern"))}function zr(i,n){1&i&&(t.ynx(0),t._uU(1," \u8bf7\u8f93\u5165 pushkey\uff01 "),t.BQk())}function xr(i,n){1&i&&(t.ynx(0),t._uU(1," pushkey \u65e0\u6548 "),t.BQk())}function Or(i,n){if(1&i&&(t.YNc(0,zr,2,0,"ng-container",9),t.YNc(1,xr,2,0,"ng-container",9)),2&i){const e=n.$implicit;t.Q6J("ngIf",e.hasError("required")),t.xp6(1),t.Q6J("ngIf",e.hasError("pattern"))}}Yt.\u0275fac=function(n){return new(n||Yt)(t.Y36(t.sBO),t.Y36(v.gz))},Yt.\u0275cmp=t.Xpm({type:Yt,selectors:[["app-serverchan-notification-settings"]],decls:2,vars:0,consts:[["pageTitle","ServerChan \u901a\u77e5"],["appSubPageContent",""],["keyOfSettings","serverchanNotification",3,"settings"],["name","ServerChan"],[3,"settings"],["name","\u4e8b\u4ef6"],["name","\u6d88\u606f"]],template:function(n,e){1&n&&(t.TgZ(0,"app-sub-page",0),t.YNc(1,fr,8,4,"ng-template",1),t.qZA())},dependencies:[rt.Y,st.q,q.g,N,qt,B,A],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class Wt{constructor(n,e,o){this.changeDetector=e,this.settingsSyncService=o,this.syncFailedWarningTip=d.yT,this.settingsForm=n.group({server:["",[r.kI.pattern(/^https?:\/\/.+/)]],pushkey:["",[r.kI.required,r.kI.pattern(/^PDU\d+T[a-zA-Z\d]{32}(,PDU\d+T[a-zA-Z\d]{32}){0,99}$/)]]})}get serverControl(){return this.settingsForm.get("server")}get pushkeyControl(){return this.settingsForm.get("pushkey")}ngOnChanges(){this.syncStatus=M(this.settings,()=>!0),console.log(this.settings),this.settingsForm.setValue(this.settings)}ngOnInit(){this.settingsSyncService.syncSettings("pushdeerNotification",this.settings,this.settingsForm.valueChanges.pipe((0,at.Sc)(this.settingsForm))).subscribe(n=>{this.syncStatus={...this.syncStatus,...P(n)},this.changeDetector.markForCheck()})}}function Mr(i,n){if(1&i&&(t.TgZ(0,"app-page-section"),t._UZ(1,"app-notifier-settings",2),t.qZA(),t.TgZ(2,"app-page-section",3),t._UZ(3,"app-pushdeer-settings",4),t.qZA(),t.TgZ(4,"app-page-section",5),t._UZ(5,"app-event-settings",2),t.qZA(),t.TgZ(6,"app-page-section",6),t._UZ(7,"app-message-template-settings",2),t.qZA()),2&i){const e=t.oxw();t.xp6(1),t.Q6J("settings",e.notifierSettings),t.xp6(2),t.Q6J("settings",e.pushdeerSettings),t.xp6(2),t.Q6J("settings",e.notificationSettings),t.xp6(2),t.Q6J("settings",e.messageTemplateSettings)}}Wt.\u0275fac=function(n){return new(n||Wt)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(z))},Wt.\u0275cmp=t.Xpm({type:Wt,selectors:[["app-pushdeer-settings"]],inputs:{settings:"settings"},features:[t.TTD],decls:15,vars:7,consts:[["nz-form","",3,"formGroup"],[1,"setting-item"],["nzFor","server","nzNoColon","",1,"setting-label","align-required"],["nzHasFeedback","",1,"setting-control","input",3,"nzErrorTip","nzWarningTip","nzValidateStatus"],["id","server","type","url","placeholder","\u9ed8\u8ba4\u4e3a\u5b98\u65b9\u670d\u52a1\u5668 https://api2.pushdeer.com","nz-input","","formControlName","server"],["serverErrorTip",""],["nzFor","pushkey","nzNoColon","","nzRequired","",1,"setting-label"],["id","pushkey","type","text","placeholder","\u591a\u4e2a key \u7528 , \u9694\u5f00\uff0c\u5728\u7ebf\u7248\u6700\u591a 10 \u4e2a\uff0c\u81ea\u67b6\u7248\u9ed8\u8ba4\u6700\u591a 100 \u4e2a\u3002","required","","nz-input","","formControlName","pushkey"],["pushkeyErrorTip",""],[4,"ngIf"]],template:function(n,e){if(1&n&&(t.TgZ(0,"form",0)(1,"nz-form-item",1)(2,"nz-form-label",2),t._uU(3,"server"),t.qZA(),t.TgZ(4,"nz-form-control",3),t._UZ(5,"input",4),t.YNc(6,vr,1,1,"ng-template",null,5,t.W1O),t.qZA()(),t.TgZ(8,"nz-form-item",1)(9,"nz-form-label",6),t._uU(10,"pushkey"),t.qZA(),t.TgZ(11,"nz-form-control",3),t._UZ(12,"input",7),t.YNc(13,Or,2,2,"ng-template",null,8,t.W1O),t.qZA()()()),2&n){const o=t.MAs(7),a=t.MAs(14);t.Q6J("formGroup",e.settingsForm),t.xp6(4),t.Q6J("nzErrorTip",o)("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.serverControl.valid&&!e.syncStatus.server?"warning":e.serverControl),t.xp6(7),t.Q6J("nzErrorTip",a)("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.pushkeyControl.valid&&!e.syncStatus.pushkey?"warning":e.pushkeyControl)}},dependencies:[p.O5,r._Y,r.Fj,r.JJ,r.JL,r.Q7,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,O.Zp],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}.setting-label[_ngcontent-%COMP%]{max-width:5em!important;width:5em!important}"],changeDetection:0});class Rt{constructor(n,e){this.changeDetector=n,this.route=e}ngOnInit(){this.route.data.subscribe(n=>{const e=n.settings;this.pushdeerSettings=f(e,C.jK),this.notifierSettings=f(e,C._1),this.notificationSettings=f(e,C.X),this.messageTemplateSettings=f(e,C.tI),this.changeDetector.markForCheck()})}}function br(i,n){1&i&&(t.ynx(0),t._uU(1," \u8bf7\u8f93\u5165 token\uff01 "),t.BQk())}function Pr(i,n){1&i&&(t.ynx(0),t._uU(1," token \u65e0\u6548 "),t.BQk())}function Tr(i,n){if(1&i&&(t.YNc(0,br,2,0,"ng-container",9),t.YNc(1,Pr,2,0,"ng-container",9)),2&i){const e=n.$implicit;t.Q6J("ngIf",e.hasError("required")),t.xp6(1),t.Q6J("ngIf",e.hasError("pattern"))}}Rt.\u0275fac=function(n){return new(n||Rt)(t.Y36(t.sBO),t.Y36(v.gz))},Rt.\u0275cmp=t.Xpm({type:Rt,selectors:[["app-pushdeer-notification-settings"]],decls:2,vars:0,consts:[["pageTitle","PushDeer \u901a\u77e5"],["appSubPageContent",""],["keyOfSettings","pushdeerNotification",3,"settings"],["name","PushDeer"],[3,"settings"],["name","\u4e8b\u4ef6"],["name","\u6d88\u606f"]],template:function(n,e){1&n&&(t.TgZ(0,"app-sub-page",0),t.YNc(1,Mr,8,4,"ng-template",1),t.qZA())},dependencies:[rt.Y,st.q,q.g,N,Wt,B,A],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class Gt{constructor(n,e,o){this.changeDetector=e,this.settingsSyncService=o,this.syncFailedWarningTip=d.yT,this.settingsForm=n.group({token:["",[r.kI.required,r.kI.pattern(/^[a-z\d]{32}$/)]],topic:[""]})}get tokenControl(){return this.settingsForm.get("token")}get topicControl(){return this.settingsForm.get("topic")}ngOnChanges(){this.syncStatus=M(this.settings,()=>!0),this.settingsForm.setValue(this.settings)}ngOnInit(){this.settingsSyncService.syncSettings("pushplusNotification",this.settings,this.settingsForm.valueChanges.pipe((0,at.Sc)(this.settingsForm))).subscribe(n=>{this.syncStatus={...this.syncStatus,...P(n)},this.changeDetector.markForCheck()})}}function wr(i,n){if(1&i&&(t.TgZ(0,"app-page-section"),t._UZ(1,"app-notifier-settings",2),t.qZA(),t.TgZ(2,"app-page-section",3),t._UZ(3,"app-pushplus-settings",4),t.qZA(),t.TgZ(4,"app-page-section",5),t._UZ(5,"app-event-settings",2),t.qZA(),t.TgZ(6,"app-page-section",6),t._UZ(7,"app-message-template-settings",2),t.qZA()),2&i){const e=t.oxw();t.xp6(1),t.Q6J("settings",e.notifierSettings),t.xp6(2),t.Q6J("settings",e.pushplusSettings),t.xp6(2),t.Q6J("settings",e.notificationSettings),t.xp6(2),t.Q6J("settings",e.messageTemplateSettings)}}Gt.\u0275fac=function(n){return new(n||Gt)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(z))},Gt.\u0275cmp=t.Xpm({type:Gt,selectors:[["app-pushplus-settings"]],inputs:{settings:"settings"},features:[t.TTD],decls:13,vars:6,consts:[["nz-form","",3,"formGroup"],[1,"setting-item"],["nzFor","token","nzNoColon","","nzRequired","",1,"setting-label","required"],["nzHasFeedback","",1,"setting-control","input",3,"nzErrorTip","nzWarningTip","nzValidateStatus"],["id","token","type","text","required","","nz-input","","formControlName","token"],["tokenErrorTip",""],["nzFor","topic","nzNoColon","",1,"setting-label","align-required"],[1,"setting-control","input",3,"nzWarningTip","nzValidateStatus"],["id","topic","type","text","nz-input","","formControlName","topic"],[4,"ngIf"]],template:function(n,e){if(1&n&&(t.TgZ(0,"form",0)(1,"nz-form-item",1)(2,"nz-form-label",2),t._uU(3,"token"),t.qZA(),t.TgZ(4,"nz-form-control",3),t._UZ(5,"input",4),t.YNc(6,Tr,2,2,"ng-template",null,5,t.W1O),t.qZA()(),t.TgZ(8,"nz-form-item",1)(9,"nz-form-label",6),t._uU(10,"topic"),t.qZA(),t.TgZ(11,"nz-form-control",7),t._UZ(12,"input",8),t.qZA()()()),2&n){const o=t.MAs(7);t.Q6J("formGroup",e.settingsForm),t.xp6(4),t.Q6J("nzErrorTip",o)("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.tokenControl.valid&&!e.syncStatus.token?"warning":e.tokenControl),t.xp6(7),t.Q6J("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.topicControl.valid&&!e.syncStatus.topic?"warning":e.topicControl)}},dependencies:[p.O5,r._Y,r.Fj,r.JJ,r.JL,r.Q7,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,O.Zp],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}.setting-label[_ngcontent-%COMP%]{max-width:4em!important;width:4em!important}"],changeDetection:0});class Ht{constructor(n,e){this.changeDetector=n,this.route=e}ngOnInit(){this.route.data.subscribe(n=>{const e=n.settings;this.pushplusSettings=f(e,C.q1),this.notifierSettings=f(e,C._1),this.notificationSettings=f(e,C.X),this.messageTemplateSettings=f(e,C.tI),this.changeDetector.markForCheck()})}}function Fr(i,n){1&i&&(t.ynx(0),t._uU(1," \u8bf7\u8f93\u5165 token\uff01 "),t.BQk())}function Sr(i,n){1&i&&(t.ynx(0),t._uU(1," token \u65e0\u6548 "),t.BQk())}function yr(i,n){if(1&i&&(t.YNc(0,Fr,2,0,"ng-container",12),t.YNc(1,Sr,2,0,"ng-container",12)),2&i){const e=n.$implicit;t.Q6J("ngIf",e.hasError("required")),t.xp6(1),t.Q6J("ngIf",e.hasError("pattern"))}}function Ar(i,n){1&i&&(t.ynx(0),t._uU(1," \u8bf7\u8f93\u5165 chatid\uff01 "),t.BQk())}function kr(i,n){1&i&&(t.ynx(0),t._uU(1," chatid \u65e0\u6548 "),t.BQk())}function Dr(i,n){if(1&i&&(t.YNc(0,Ar,2,0,"ng-container",12),t.YNc(1,kr,2,0,"ng-container",12)),2&i){const e=n.$implicit;t.Q6J("ngIf",e.hasError("required")),t.xp6(1),t.Q6J("ngIf",e.hasError("pattern"))}}function Er(i,n){1&i&&(t.ynx(0),t._uU(1," server \u65e0\u6548 "),t.BQk())}function Zr(i,n){1&i&&t.YNc(0,Er,2,0,"ng-container",12),2&i&&t.Q6J("ngIf",n.$implicit.hasError("pattern"))}Ht.\u0275fac=function(n){return new(n||Ht)(t.Y36(t.sBO),t.Y36(v.gz))},Ht.\u0275cmp=t.Xpm({type:Ht,selectors:[["app-pushplus-notification-settings"]],decls:2,vars:0,consts:[["pageTitle","pushplus \u901a\u77e5"],["appSubPageContent",""],["keyOfSettings","pushplusNotification",3,"settings"],["name","pushplus"],[3,"settings"],["name","\u4e8b\u4ef6"],["name","\u6d88\u606f"]],template:function(n,e){1&n&&(t.TgZ(0,"app-sub-page",0),t.YNc(1,wr,8,4,"ng-template",1),t.qZA())},dependencies:[rt.Y,st.q,q.g,N,Gt,B,A],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class $t{constructor(n,e,o){this.changeDetector=e,this.settingsSyncService=o,this.syncFailedWarningTip=d.yT,this.settingsForm=n.group({token:["",[r.kI.required,r.kI.pattern(/^[0-9]{8,10}:[a-zA-Z0-9_-]{35}$/)]],chatid:["",[r.kI.required,r.kI.pattern(/^(-|[0-9]){0,}$/)]],server:["",[r.kI.pattern(/^https?:\/\/[a-zA-Z0-9-_.]+(:[0-9]+)?/)]]})}get tokenControl(){return this.settingsForm.get("token")}get chatidControl(){return this.settingsForm.get("chatid")}get serverControl(){return this.settingsForm.get("server")}ngOnChanges(){this.syncStatus=M(this.settings,()=>!0),console.log(this.settings),this.settingsForm.setValue(this.settings)}ngOnInit(){this.settingsSyncService.syncSettings("telegramNotification",this.settings,this.settingsForm.valueChanges.pipe((0,at.Sc)(this.settingsForm))).subscribe(n=>{this.syncStatus={...this.syncStatus,...P(n)},this.changeDetector.markForCheck()})}}function Nr(i,n){if(1&i&&(t.TgZ(0,"app-page-section"),t._UZ(1,"app-notifier-settings",2),t.qZA(),t.TgZ(2,"app-page-section",3),t._UZ(3,"app-telegram-settings",4),t.qZA(),t.TgZ(4,"app-page-section",5),t._UZ(5,"app-event-settings",2),t.qZA(),t.TgZ(6,"app-page-section",6),t._UZ(7,"app-message-template-settings",2),t.qZA()),2&i){const e=t.oxw();t.xp6(1),t.Q6J("settings",e.notifierSettings),t.xp6(2),t.Q6J("settings",e.telegramSettings),t.xp6(2),t.Q6J("settings",e.notificationSettings),t.xp6(2),t.Q6J("settings",e.messageTemplateSettings)}}$t.\u0275fac=function(n){return new(n||$t)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(z))},$t.\u0275cmp=t.Xpm({type:$t,selectors:[["app-telegram-settings"]],inputs:{settings:"settings"},features:[t.TTD],decls:22,vars:10,consts:[["nz-form","",3,"formGroup"],[1,"setting-item"],["nzFor","token","nzNoColon","","nzRequired","",1,"setting-label","required"],["nzHasFeedback","",1,"setting-control","input",3,"nzErrorTip","nzWarningTip","nzValidateStatus"],["id","token","type","text","required","","nz-input","","formControlName","token"],["tokenErrorTip",""],["nzFor","chatid","nzNoColon","","nzRequired","",1,"setting-label"],["id","chatid","type","text","required","","nz-input","","formControlName","chatid"],["chatidErrorTip",""],["nzFor","server","nzNoColon","",1,"setting-label","align-required"],["id","server","type","url","placeholder","\u9ed8\u8ba4\u4e3a\u5b98\u65b9\u63a5\u53e3 https://api.telegram.org","nz-input","","formControlName","server"],["serverErrorTip",""],[4,"ngIf"]],template:function(n,e){if(1&n&&(t.TgZ(0,"form",0)(1,"nz-form-item",1)(2,"nz-form-label",2),t._uU(3,"token"),t.qZA(),t.TgZ(4,"nz-form-control",3),t._UZ(5,"input",4),t.YNc(6,yr,2,2,"ng-template",null,5,t.W1O),t.qZA()(),t.TgZ(8,"nz-form-item",1)(9,"nz-form-label",6),t._uU(10,"chatid"),t.qZA(),t.TgZ(11,"nz-form-control",3),t._UZ(12,"input",7),t.YNc(13,Dr,2,2,"ng-template",null,8,t.W1O),t.qZA()(),t.TgZ(15,"nz-form-item",1)(16,"nz-form-label",9),t._uU(17,"server"),t.qZA(),t.TgZ(18,"nz-form-control",3),t._UZ(19,"input",10),t.YNc(20,Zr,1,1,"ng-template",null,11,t.W1O),t.qZA()()()),2&n){const o=t.MAs(7),a=t.MAs(14),s=t.MAs(21);t.Q6J("formGroup",e.settingsForm),t.xp6(4),t.Q6J("nzErrorTip",o)("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.tokenControl.valid&&!e.syncStatus.token?"warning":e.tokenControl),t.xp6(7),t.Q6J("nzErrorTip",a)("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.chatidControl.valid&&!e.syncStatus.chatid?"warning":e.chatidControl),t.xp6(7),t.Q6J("nzErrorTip",s)("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.serverControl.valid&&!e.syncStatus.server?"warning":e.serverControl)}},dependencies:[p.O5,r._Y,r.Fj,r.JJ,r.JL,r.Q7,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,O.Zp],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}.setting-label[_ngcontent-%COMP%]{max-width:4em!important;width:4em!important}"],changeDetection:0});class Kt{constructor(n,e){this.changeDetector=n,this.route=e}ngOnInit(){this.route.data.subscribe(n=>{const e=n.settings;this.telegramSettings=f(e,C.wA),this.notifierSettings=f(e,C._1),this.notificationSettings=f(e,C.X),this.messageTemplateSettings=f(e,C.tI),this.changeDetector.markForCheck()})}}function Br(i,n){1&i&&(t.ynx(0),t._uU(1," server \u65e0\u6548 "),t.BQk())}function Ur(i,n){1&i&&t.YNc(0,Br,2,0,"ng-container",9),2&i&&t.Q6J("ngIf",n.$implicit.hasError("pattern"))}function Ir(i,n){1&i&&(t.ynx(0),t._uU(1," \u8bf7\u8f93\u5165 pushkey\uff01 "),t.BQk())}function Jr(i,n){1&i&&(t.ynx(0),t._uU(1," pushkey \u65e0\u6548 "),t.BQk())}function Qr(i,n){if(1&i&&(t.YNc(0,Ir,2,0,"ng-container",9),t.YNc(1,Jr,2,0,"ng-container",9)),2&i){const e=n.$implicit;t.Q6J("ngIf",e.hasError("required")),t.xp6(1),t.Q6J("ngIf",e.hasError("pattern"))}}Kt.\u0275fac=function(n){return new(n||Kt)(t.Y36(t.sBO),t.Y36(v.gz))},Kt.\u0275cmp=t.Xpm({type:Kt,selectors:[["app-telegram-notification-settings"]],decls:2,vars:0,consts:[["pageTitle","telegram \u901a\u77e5"],["appSubPageContent",""],["keyOfSettings","telegramNotification",3,"settings"],["name","telegram"],[3,"settings"],["name","\u4e8b\u4ef6"],["name","\u6d88\u606f"]],template:function(n,e){1&n&&(t.TgZ(0,"app-sub-page",0),t.YNc(1,Nr,8,4,"ng-template",1),t.qZA())},dependencies:[rt.Y,st.q,q.g,N,$t,B,A],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});class Xt{constructor(n,e,o){this.changeDetector=e,this.settingsSyncService=o,this.syncFailedWarningTip=d.yT,this.settingsForm=n.group({server:["",[r.kI.pattern(/^https?:\/\/.+/)]],pushkey:["",[r.kI.required,r.kI.pattern(/^[a-zA-Z\d]+$/)]]})}get serverControl(){return this.settingsForm.get("server")}get pushkeyControl(){return this.settingsForm.get("pushkey")}ngOnChanges(){this.syncStatus=M(this.settings,()=>!0),console.log(this.settings),this.settingsForm.setValue(this.settings)}ngOnInit(){this.settingsSyncService.syncSettings("barkNotification",this.settings,this.settingsForm.valueChanges.pipe((0,at.Sc)(this.settingsForm))).subscribe(n=>{this.syncStatus={...this.syncStatus,...P(n)},this.changeDetector.markForCheck()})}}function Vr(i,n){if(1&i&&(t.TgZ(0,"app-page-section"),t._UZ(1,"app-notifier-settings",2),t.qZA(),t.TgZ(2,"app-page-section",3),t._UZ(3,"app-bark-settings",4),t.qZA(),t.TgZ(4,"app-page-section",5),t._UZ(5,"app-event-settings",2),t.qZA(),t.TgZ(6,"app-page-section",6),t._UZ(7,"app-message-template-settings",2),t.qZA()),2&i){const e=t.oxw();t.xp6(1),t.Q6J("settings",e.notifierSettings),t.xp6(2),t.Q6J("settings",e.barkSettings),t.xp6(2),t.Q6J("settings",e.notificationSettings),t.xp6(2),t.Q6J("settings",e.messageTemplateSettings)}}Xt.\u0275fac=function(n){return new(n||Xt)(t.Y36(r.qu),t.Y36(t.sBO),t.Y36(z))},Xt.\u0275cmp=t.Xpm({type:Xt,selectors:[["app-bark-settings"]],inputs:{settings:"settings"},features:[t.TTD],decls:15,vars:7,consts:[["nz-form","",3,"formGroup"],[1,"setting-item"],["nzFor","server","nzNoColon","",1,"setting-label","align-required"],["nzHasFeedback","",1,"setting-control","input",3,"nzErrorTip","nzWarningTip","nzValidateStatus"],["id","server","type","url","placeholder","\u9ed8\u8ba4\u4e3a\u5b98\u65b9\u670d\u52a1\u5668\uff0c\u5982\u679c\u81ea\u5b9a\u4e49\u670d\u52a1\u5668\u4e14url\u5e26\u8def\u5f84\uff0curl\u672b\u5c3e\u8bf7\u52a0\u4e0a/","nz-input","","formControlName","server"],["serverErrorTip",""],["nzFor","pushkey","nzNoColon","","nzRequired","",1,"setting-label"],["id","pushkey","type","text","placeholder","","required","","nz-input","","formControlName","pushkey"],["pushkeyErrorTip",""],[4,"ngIf"]],template:function(n,e){if(1&n&&(t.TgZ(0,"form",0)(1,"nz-form-item",1)(2,"nz-form-label",2),t._uU(3,"server"),t.qZA(),t.TgZ(4,"nz-form-control",3),t._UZ(5,"input",4),t.YNc(6,Ur,1,1,"ng-template",null,5,t.W1O),t.qZA()(),t.TgZ(8,"nz-form-item",1)(9,"nz-form-label",6),t._uU(10,"pushkey"),t.qZA(),t.TgZ(11,"nz-form-control",3),t._UZ(12,"input",7),t.YNc(13,Qr,2,2,"ng-template",null,8,t.W1O),t.qZA()()()),2&n){const o=t.MAs(7),a=t.MAs(14);t.Q6J("formGroup",e.settingsForm),t.xp6(4),t.Q6J("nzErrorTip",o)("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.serverControl.valid&&!e.syncStatus.server?"warning":e.serverControl),t.xp6(7),t.Q6J("nzErrorTip",a)("nzWarningTip",e.syncFailedWarningTip)("nzValidateStatus",e.pushkeyControl.valid&&!e.syncStatus.pushkey?"warning":e.pushkeyControl)}},dependencies:[p.O5,r._Y,r.Fj,r.JJ,r.JL,r.Q7,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,O.Zp],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}.setting-label[_ngcontent-%COMP%]{max-width:5em!important;width:5em!important}"],changeDetection:0});class jt{constructor(n,e){this.changeDetector=n,this.route=e}ngOnInit(){this.route.data.subscribe(n=>{const e=n.settings;this.barkSettings=f(e,C.LV),this.notifierSettings=f(e,C._1),this.notificationSettings=f(e,C.X),this.messageTemplateSettings=f(e,C.tI),this.changeDetector.markForCheck()})}}function Lr(i,n){1&i&&(t.ynx(0),t._uU(1," \u8bf7\u8f93\u5165 url\uff01 "),t.BQk())}function qr(i,n){1&i&&(t.ynx(0),t._uU(1," url \u65e0\u6548\uff01 "),t.BQk())}function Yr(i,n){if(1&i&&(t.YNc(0,Lr,2,0,"ng-container",29),t.YNc(1,qr,2,0,"ng-container",29)),2&i){const e=n.$implicit;t.Q6J("ngIf",e.hasError("required")),t.xp6(1),t.Q6J("ngIf",e.hasError("pattern"))}}function Wr(i,n){if(1&i){const e=t.EpF();t.ynx(0),t.TgZ(1,"form",2)(2,"nz-form-item",3)(3,"nz-form-label",4),t._uU(4,"URL"),t.qZA(),t.TgZ(5,"nz-form-control",5),t._UZ(6,"input",6),t.YNc(7,Yr,2,2,"ng-template",null,7,t.W1O),t.qZA()(),t.TgZ(9,"div",8)(10,"h2"),t._uU(11,"\u4e8b\u4ef6"),t.qZA(),t.TgZ(12,"nz-form-item",3)(13,"nz-form-control",9)(14,"label",10),t.NdJ("nzCheckedChange",function(a){t.CHM(e);const s=t.oxw();return t.KtG(s.setAllChecked(a))}),t._uU(15,"\u5168\u9009"),t.qZA()()(),t.TgZ(16,"nz-form-item",3)(17,"nz-form-control",11)(18,"label",12),t._uU(19,"\u5f00\u64ad"),t.qZA()()(),t.TgZ(20,"nz-form-item",3)(21,"nz-form-control",11)(22,"label",13),t._uU(23,"\u4e0b\u64ad"),t.qZA()()(),t.TgZ(24,"nz-form-item",3)(25,"nz-form-control",11)(26,"label",14),t._uU(27,"\u76f4\u64ad\u95f4\u4fe1\u606f\u6539\u53d8"),t.qZA()()(),t.TgZ(28,"nz-form-item",3)(29,"nz-form-control",11)(30,"label",15),t._uU(31,"\u5f55\u5236\u5f00\u59cb"),t.qZA()()(),t.TgZ(32,"nz-form-item",3)(33,"nz-form-control",11)(34,"label",16),t._uU(35,"\u5f55\u5236\u5b8c\u6210"),t.qZA()()(),t.TgZ(36,"nz-form-item",3)(37,"nz-form-control",11)(38,"label",17),t._uU(39,"\u5f55\u5236\u53d6\u6d88"),t.qZA()()(),t.TgZ(40,"nz-form-item",3)(41,"nz-form-control",11)(42,"label",18),t._uU(43,"\u89c6\u9891\u6587\u4ef6\u521b\u5efa"),t.qZA()()(),t.TgZ(44,"nz-form-item",3)(45,"nz-form-control",11)(46,"label",19),t._uU(47,"\u89c6\u9891\u6587\u4ef6\u5b8c\u6210"),t.qZA()()(),t.TgZ(48,"nz-form-item",3)(49,"nz-form-control",11)(50,"label",20),t._uU(51,"\u5f39\u5e55\u6587\u4ef6\u521b\u5efa"),t.qZA()()(),t.TgZ(52,"nz-form-item",3)(53,"nz-form-control",11)(54,"label",21),t._uU(55,"\u5f39\u5e55\u6587\u4ef6\u5b8c\u6210"),t.qZA()()(),t.TgZ(56,"nz-form-item",3)(57,"nz-form-control",11)(58,"label",22),t._uU(59,"\u539f\u59cb\u5f39\u5e55\u6587\u4ef6\u521b\u5efa"),t.qZA()()(),t.TgZ(60,"nz-form-item",3)(61,"nz-form-control",11)(62,"label",23),t._uU(63,"\u539f\u59cb\u5f39\u5e55\u6587\u4ef6\u5b8c\u6210"),t.qZA()()(),t.TgZ(64,"nz-form-item",3)(65,"nz-form-control",11)(66,"label",24),t._uU(67,"\u76f4\u64ad\u5c01\u9762\u4e0b\u8f7d\u5b8c\u6210"),t.qZA()()(),t.TgZ(68,"nz-form-item",3)(69,"nz-form-control",11)(70,"label",25),t._uU(71,"\u89c6\u9891\u540e\u5904\u7406\u5b8c\u6210"),t.qZA()()(),t.TgZ(72,"nz-form-item",3)(73,"nz-form-control",11)(74,"label",26),t._uU(75,"\u6587\u4ef6\u540e\u5904\u7406\u5b8c\u6210"),t.qZA()()(),t.TgZ(76,"nz-form-item",3)(77,"nz-form-control",11)(78,"label",27),t._uU(79,"\u786c\u76d8\u7a7a\u95f4\u4e0d\u8db3"),t.qZA()()(),t.TgZ(80,"nz-form-item",3)(81,"nz-form-control",11)(82,"label",28),t._uU(83,"\u7a0b\u5e8f\u51fa\u73b0\u5f02\u5e38"),t.qZA()()()()(),t.BQk()}if(2&i){const e=t.MAs(8),o=t.oxw();t.xp6(1),t.Q6J("formGroup",o.settingsForm),t.xp6(4),t.Q6J("nzErrorTip",e),t.xp6(9),t.Q6J("nzChecked",o.allChecked)("nzIndeterminate",o.indeterminate)}}jt.\u0275fac=function(n){return new(n||jt)(t.Y36(t.sBO),t.Y36(v.gz))},jt.\u0275cmp=t.Xpm({type:jt,selectors:[["app-bark-notification-settings"]],decls:2,vars:0,consts:[["pageTitle","Bark \u901a\u77e5"],["appSubPageContent",""],["keyOfSettings","barkNotification",3,"settings"],["name","Bark"],[3,"settings"],["name","\u4e8b\u4ef6"],["name","\u6d88\u606f"]],template:function(n,e){1&n&&(t.TgZ(0,"app-sub-page",0),t.YNc(1,Vr,8,4,"ng-template",1),t.qZA())},dependencies:[rt.Y,st.q,q.g,N,Xt,B,A],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}"],changeDetection:0});const Rr={url:"",liveBegan:!0,liveEnded:!0,roomChange:!0,recordingStarted:!0,recordingFinished:!0,recordingCancelled:!0,videoFileCreated:!0,videoFileCompleted:!0,danmakuFileCreated:!0,danmakuFileCompleted:!0,rawDanmakuFileCreated:!0,rawDanmakuFileCompleted:!0,coverImageDownloaded:!0,videoPostprocessingCompleted:!0,postprocessingCompleted:!0,spaceNoEnough:!0,errorOccurred:!0};class te{constructor(n,e){this.changeDetector=e,this.title="\u6807\u9898",this.okButtonText="\u786e\u5b9a",this.visible=!1,this.visibleChange=new t.vpe,this.cancel=new t.vpe,this.confirm=new t.vpe,this.allChecked=!1,this.indeterminate=!0,this.settingsForm=n.group({url:["",[r.kI.required,r.kI.pattern(/^https?:\/\/.*$/)]],liveBegan:[""],liveEnded:[""],roomChange:[""],recordingStarted:[""],recordingFinished:[""],recordingCancelled:[""],videoFileCreated:[""],videoFileCompleted:[""],danmakuFileCreated:[""],danmakuFileCompleted:[""],rawDanmakuFileCreated:[""],rawDanmakuFileCompleted:[""],coverImageDownloaded:[""],videoPostprocessingCompleted:[""],postprocessingCompleted:[""],spaceNoEnough:[""],errorOccurred:[""]}),this.checkboxControls=Object.entries(this.settingsForm.controls).filter(([o])=>"url"!==o).map(([,o])=>o),this.checkboxControls.forEach(o=>o.valueChanges.subscribe(()=>this.updateAllChecked()))}ngOnChanges(){this.setValue()}open(){this.setValue(),this.setVisible(!0)}close(){this.settingsForm.reset(),this.setVisible(!1)}setVisible(n){this.visible=n,this.visibleChange.emit(n),this.changeDetector.markForCheck()}setValue(){void 0===this.settings&&(this.settings={...Rr}),this.settingsForm.setValue(this.settings),this.changeDetector.markForCheck()}handleCancel(){this.cancel.emit(),this.close()}handleConfirm(){this.confirm.emit(this.settingsForm.value),this.close()}setAllChecked(n){this.indeterminate=!1,this.allChecked=n,this.checkboxControls.forEach(e=>e.setValue(n))}updateAllChecked(){const n=this.checkboxControls.map(e=>e.value);this.allChecked=n.every(e=>e),this.indeterminate=!this.allChecked&&n.some(e=>e)}}te.\u0275fac=function(n){return new(n||te)(t.Y36(r.qu),t.Y36(t.sBO))},te.\u0275cmp=t.Xpm({type:te,selectors:[["app-webhook-edit-dialog"]],inputs:{settings:"settings",title:"title",okButtonText:"okButtonText",visible:"visible"},outputs:{visibleChange:"visibleChange",cancel:"cancel",confirm:"confirm"},features:[t.TTD],decls:2,vars:4,consts:[["nzCentered","",3,"nzTitle","nzOkText","nzVisible","nzOkDisabled","nzOnOk","nzOnCancel"],[4,"nzModalContent"],["nz-form","",3,"formGroup"],[1,"setting-item"],["nzFor","url","nzNoColon","",1,"setting-label"],["nzHasFeedback","",1,"setting-control","input",3,"nzErrorTip"],["id","url","type","url","required","","nz-input","","formControlName","url"],["urlErrorTip",""],[1,"form-group"],[1,"setting-control","checkbox","check-all"],["nz-checkbox","",3,"nzChecked","nzIndeterminate","nzCheckedChange"],[1,"setting-control","checkbox"],["nz-checkbox","","formControlName","liveBegan"],["nz-checkbox","","formControlName","liveEnded"],["nz-checkbox","","formControlName","roomChange"],["nz-checkbox","","formControlName","recordingStarted"],["nz-checkbox","","formControlName","recordingFinished"],["nz-checkbox","","formControlName","recordingCancelled"],["nz-checkbox","","formControlName","videoFileCreated"],["nz-checkbox","","formControlName","videoFileCompleted"],["nz-checkbox","","formControlName","danmakuFileCreated"],["nz-checkbox","","formControlName","danmakuFileCompleted"],["nz-checkbox","","formControlName","rawDanmakuFileCreated"],["nz-checkbox","","formControlName","rawDanmakuFileCompleted"],["nz-checkbox","","formControlName","coverImageDownloaded"],["nz-checkbox","","formControlName","videoPostprocessingCompleted"],["nz-checkbox","","formControlName","postprocessingCompleted"],["nz-checkbox","","formControlName","spaceNoEnough"],["nz-checkbox","","formControlName","errorOccurred"],[4,"ngIf"]],template:function(n,e){1&n&&(t.TgZ(0,"nz-modal",0),t.NdJ("nzOnOk",function(){return e.handleConfirm()})("nzOnCancel",function(){return e.handleCancel()}),t.YNc(1,Wr,84,4,"ng-container",1),t.qZA()),2&n&&t.Q6J("nzTitle",e.title)("nzOkText",e.okButtonText)("nzVisible",e.visible)("nzOkDisabled",e.settingsForm.invalid)},dependencies:[p.O5,r._Y,r.Fj,r.JJ,r.JL,r.Q7,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,O.Zp,Oe.Ie,_.du,_.Hf],styles:[".settings-page[_ngcontent-%COMP%]{max-width:680px;margin:0 auto}.setting-item[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:1em 2em;border-top:1px solid rgba(0,0,0,.06)}.setting-item[_ngcontent-%COMP%]:first-child{border-top:none}.settings-page-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.form-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-weight:700;font-size:1.2em;border-bottom:1px solid rgba(0,0,0,.1)}.setting-item[_ngcontent-%COMP%]{gap:.5em}.setting-item.actionable[_ngcontent-%COMP%]{cursor:pointer}.setting-item.actionable[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]{outline:none;text-decoration:none;color:inherit;cursor:pointer;height:60px}a.setting-item[_ngcontent-%COMP%]:hover{background-color:#2021241a}a.setting-item[_ngcontent-%COMP%]:not(:first-child){height:61px}.setting-label[_ngcontent-%COMP%]{padding:0!important;max-width:-moz-fit-content!important;max-width:fit-content!important;text-align:left}.setting-label.align-required[_ngcontent-%COMP%]{position:relative;left:11px}.setting-control[_ngcontent-%COMP%], .setting-value[_ngcontent-%COMP%]{max-width:-moz-fit-content!important;max-width:fit-content!important;margin-left:auto!important}.setting-control.input[_ngcontent-%COMP%], .setting-value.input[_ngcontent-%COMP%]{max-width:100%!important}.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{max-width:8em!important;width:8em!important}.setting-control.switch[_ngcontent-%COMP%], .setting-value.switch[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center}.setting-control.checkbox[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .setting-value.checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{width:100%}.setting-control.textarea[_ngcontent-%COMP%], .setting-value.textarea[_ngcontent-%COMP%]{max-width:100%!important;width:100%!important;margin-left:0}.setting-control.textarea[_ngcontent-%COMP%]::-webkit-scrollbar, .setting-value.textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}@media screen and (max-width: 332px){.setting-control.radio[_ngcontent-%COMP%], .setting-value.radio[_ngcontent-%COMP%]{margin-left:0!important}}@media screen and (max-width: 319px){.setting-control.select[_ngcontent-%COMP%], .setting-value.select[_ngcontent-%COMP%]{margin-left:0!important}}.setting-value[_ngcontent-%COMP%]{color:#5f6368;font-weight:400;width:100%;max-height:3em;overflow:hidden}.setting-item[_ngcontent-%COMP%]{padding:1em 0;border:none}.setting-item[_ngcontent-%COMP%]:first-child{padding-top:0}.setting-item[_ngcontent-%COMP%]:first-child .setting-control[_ngcontent-%COMP%]{flex:1 1 auto;max-width:100%!important}.setting-item[_ngcontent-%COMP%]:last-child{padding-bottom:0}.setting-item[_ngcontent-%COMP%] .check-all[_ngcontent-%COMP%]{border-bottom:1px solid rgba(0,0,0,.06)}"],changeDetection:0});var tn=c(3325);function Gr(i,n){1&i&&t._UZ(0,"nz-list-empty")}function Hr(i,n){if(1&i){const e=t.EpF();t.TgZ(0,"nz-list-item",9)(1,"span",10),t._uU(2),t.qZA(),t.TgZ(3,"button",11),t._UZ(4,"i",12),t.qZA(),t.TgZ(5,"nz-dropdown-menu",null,13)(7,"ul",14)(8,"li",15),t.NdJ("click",function(){const s=t.CHM(e).index,g=t.oxw();return t.KtG(g.edit.emit(s))}),t._uU(9,"\u4fee\u6539"),t.qZA(),t.TgZ(10,"li",15),t.NdJ("click",function(){const s=t.CHM(e).index,g=t.oxw();return t.KtG(g.remove.emit(s))}),t._uU(11,"\u5220\u9664"),t.qZA()()()()}if(2&i){const e=n.$implicit,o=t.MAs(6);t.xp6(2),t.Oqu(e.url),t.xp6(1),t.Q6J("nzDropdownMenu",o)}}class ee{constructor(){this.header="",this.addable=!0,this.clearable=!0,this.add=new t.vpe,this.edit=new t.vpe,this.remove=new t.vpe,this.clear=new t.vpe}}function $r(i,n){if(1&i){const e=t.EpF();t.TgZ(0,"app-page-section")(1,"app-webhook-list",3),t.NdJ("add",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.addWebhook())})("edit",function(a){t.CHM(e);const s=t.oxw();return t.KtG(s.editWebhook(a))})("remove",function(a){t.CHM(e);const s=t.oxw();return t.KtG(s.removeWebhook(a))})("clear",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.clearWebhook())}),t.qZA()()}if(2&i){const e=t.oxw();t.xp6(1),t.Q6J("data",e.webhooks)("addable",e.canAdd)}}ee.\u0275fac=function(n){return new(n||ee)},ee.\u0275cmp=t.Xpm({type:ee,selectors:[["app-webhook-list"]],inputs:{data:"data",header:"header",addable:"addable",clearable:"clearable"},outputs:{add:"add",edit:"edit",remove:"remove",clear:"clear"},decls:11,vars:5,consts:[["nzBordered","",1,"list"],[1,"list-header"],[1,"list-actions"],["nz-button","","nzType","text","nzSize","large","nz-tooltip","","nzTooltipTitle","\u6e05\u7a7a",1,"clear-button",3,"disabled","click"],["nz-icon","","nzType","clear"],["nz-button","","nzType","text","nzSize","large","nz-tooltip","","nzTooltipTitle","\u6dfb\u52a0",1,"add-button",3,"disabled","click"],["nz-icon","","nzType","plus"],[4,"ngIf"],["class","list-item",4,"ngFor","ngForOf"],[1,"list-item"],[1,"item-content"],["nz-button","","nzType","text","nzSize","default","nz-dropdown","","nzPlacement","bottomRight",1,"more-action-button",3,"nzDropdownMenu"],["nz-icon","","nzType","more"],["menu","nzDropdownMenu"],["nz-menu",""],["nz-menu-item","",3,"click"]],template:function(n,e){1&n&&(t.TgZ(0,"nz-list",0)(1,"nz-list-header",1)(2,"h3"),t._uU(3),t.qZA(),t.TgZ(4,"div",2)(5,"button",3),t.NdJ("click",function(){return e.clear.emit()}),t._UZ(6,"i",4),t.qZA(),t.TgZ(7,"button",5),t.NdJ("click",function(){return e.add.emit()}),t._UZ(8,"i",6),t.qZA()()(),t.YNc(9,Gr,1,0,"nz-list-empty",7),t.YNc(10,Hr,12,2,"nz-list-item",8),t.qZA()),2&n&&(t.xp6(3),t.Oqu(e.header),t.xp6(2),t.Q6J("disabled",e.data.length<=0||!e.clearable),t.xp6(2),t.Q6J("disabled",!e.addable),t.xp6(2),t.Q6J("ngIf",e.data.length<=0),t.xp6(1),t.Q6J("ngForOf",e.data))},dependencies:[p.sg,p.O5,Q.ix,I.w,lt.Ls,ve,_e,he,ke,tn.wO,tn.r9,oe.cm,oe.RR,oe.wA,ue.SY],styles:[".list[_ngcontent-%COMP%]{background-color:#fff}.list[_ngcontent-%COMP%] .list-header[_ngcontent-%COMP%]{display:flex;flex-wrap:nowrap;align-items:center;padding:.5em 1.5em}.list[_ngcontent-%COMP%] .list-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0}.list[_ngcontent-%COMP%] .list-header[_ngcontent-%COMP%] .list-actions[_ngcontent-%COMP%]{margin-left:auto;position:relative;left:1em}.list[_ngcontent-%COMP%] .list-item[_ngcontent-%COMP%]{display:flex;flex-wrap:nowrap;padding:.5em 1.5em}.list[_ngcontent-%COMP%] .list-item[_ngcontent-%COMP%] .item-content[_ngcontent-%COMP%]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.list[_ngcontent-%COMP%] .list-item[_ngcontent-%COMP%] .more-action-button[_ngcontent-%COMP%]{margin-left:auto;flex:0 0 auto;position:relative;left:1em}"],changeDetection:0});class R{constructor(n,e,o,a,s){this.changeDetector=n,this.route=e,this.message=o,this.modal=a,this.settingService=s,this.dialogTitle="",this.dialogOkButtonText="",this.dialogVisible=!1,this.editingIndex=-1}get canAdd(){return this.webhooks.length{this.webhooks=n.settings,this.changeDetector.markForCheck()})}addWebhook(){this.editingIndex=-1,this.editingSettings=void 0,this.dialogTitle="\u6dfb\u52a0 webhook",this.dialogOkButtonText="\u6dfb\u52a0",this.dialogVisible=!0}removeWebhook(n){const e=this.webhooks.filter((o,a)=>a!==n);this.changeSettings(e).subscribe(()=>this.reset())}editWebhook(n){this.editingIndex=n,this.editingSettings={...this.webhooks[n]},this.dialogTitle="\u4fee\u6539 webhook",this.dialogOkButtonText="\u4fdd\u5b58",this.dialogVisible=!0}clearWebhook(){this.modal.confirm({nzTitle:"\u786e\u5b9a\u8981\u6e05\u7a7a Webhook \uff1f",nzOnOk:()=>new Promise((n,e)=>{this.changeSettings([]).subscribe(n,e)})})}onDialogCanceled(){this.reset()}onDialogConfirmed(n){let e;-1===this.editingIndex?e=[...this.webhooks,n]:(e=[...this.webhooks],e[this.editingIndex]=n),this.changeSettings(e).subscribe(()=>this.reset())}reset(){this.editingIndex=-1,delete this.editingSettings}changeSettings(n){return this.settingService.changeSettings({webhooks:n}).pipe((0,F.X)(3,300),(0,re.b)(e=>{this.webhooks=e.webhooks,this.changeDetector.markForCheck()},e=>{this.message.error(`Webhook \u8bbe\u7f6e\u51fa\u9519: ${e.message}`)}))}}R.MAX_WEBHOOKS=50,R.\u0275fac=function(n){return new(n||R)(t.Y36(t.sBO),t.Y36(v.gz),t.Y36(se.dD),t.Y36(_.Sf),t.Y36(S.R))},R.\u0275cmp=t.Xpm({type:R,selectors:[["app-webhook-manager"]],decls:3,vars:4,consts:[["pageTitle","Webhooks"],["appSubPageContent",""],[3,"title","okButtonText","settings","visible","visibleChange","cancel","confirm"],["header","Webhook \u5217\u8868",3,"data","addable","add","edit","remove","clear"]],template:function(n,e){1&n&&(t.TgZ(0,"app-sub-page",0),t.YNc(1,$r,2,2,"ng-template",1),t.qZA(),t.TgZ(2,"app-webhook-edit-dialog",2),t.NdJ("visibleChange",function(a){return e.dialogVisible=a})("cancel",function(){return e.onDialogCanceled()})("confirm",function(a){return e.onDialogConfirmed(a)}),t.qZA()),2&n&&(t.xp6(2),t.Q6J("title",e.dialogTitle)("okButtonText",e.dialogOkButtonText)("settings",e.editingSettings)("visible",e.dialogVisible))},dependencies:[rt.Y,st.q,q.g,te,ee],changeDetection:0});const Kr=[{path:"email-notification",component:Lt,resolve:{settings:K}},{path:"serverchan-notification",component:Yt,resolve:{settings:X}},{path:"pushdeer-notification",component:Rt,resolve:{settings:j}},{path:"pushplus-notification",component:Ht,resolve:{settings:tt}},{path:"telegram-notification",component:Kt,resolve:{settings:et}},{path:"bark-notification",component:jt,resolve:{settings:it}},{path:"webhooks",component:R,resolve:{settings:nt}},{path:"",component:Qt,resolve:{settings:$}}];class ht{}function Xr(i,n){1&i&&(t.TgZ(0,"p"),t._uU(1," \u8bed\u6cd5\u3001\u53d8\u91cf\u53c2\u8003 "),t.TgZ(2,"a",16),t._uU(3,"wiki"),t.qZA()(),t.TgZ(4,"p"),t._uU(5,"\u7a7a\u503c\u5c06\u4f7f\u7528\u9ed8\u8ba4\u6d88\u606f\u6a21\u677f"),t.qZA())}function jr(i,n){if(1&i&&(t.ynx(0),t.YNc(1,Xr,6,0,"ng-template",null,3,t.W1O),t.TgZ(3,"form",4)(4,"nz-form-item",5)(5,"nz-form-label",6),t._uU(6," \u6d88\u606f\u6807\u9898 "),t.qZA(),t.TgZ(7,"nz-form-control",7),t._UZ(8,"input",8),t.qZA()(),t.TgZ(9,"nz-form-item",9)(10,"nz-form-label",10),t._uU(11," \u6d88\u606f\u7c7b\u578b "),t.qZA(),t.TgZ(12,"nz-form-control",11),t._UZ(13,"nz-select",12),t.qZA()(),t.TgZ(14,"nz-form-item",13)(15,"nz-form-label",6),t._uU(16," \u6d88\u606f\u5185\u5bb9 "),t.qZA(),t.TgZ(17,"nz-form-control",14),t._UZ(18,"textarea",15),t.qZA()()(),t.BQk()),2&i){const e=t.MAs(2),o=t.oxw();t.xp6(3),t.Q6J("nzLayout","vertical")("formGroup",o.settingsForm),t.xp6(2),t.Q6J("nzTooltipTitle",e),t.xp6(8),t.Q6J("nzOptions",o.MESSAGE_TYPE_OPTIONS),t.xp6(2),t.Q6J("nzTooltipTitle",e),t.xp6(3),t.Q6J("rows",10)}}function ts(i,n){if(1&i){const e=t.EpF();t.TgZ(0,"button",17),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.handleCancel())}),t._uU(1,"\u53d6\u6d88"),t.qZA(),t.TgZ(2,"button",18),t.NdJ("click",function(){t.CHM(e);const a=t.oxw();return t.KtG(a.handleConfirm())}),t._uU(3," \u786e\u5b9a "),t.qZA()}if(2&i){const e=t.oxw();t.xp6(2),t.Q6J("disabled",e.settingsForm.invalid)}}ht.\u0275fac=function(n){return new(n||ht)},ht.\u0275mod=t.oAB({type:ht}),ht.\u0275inj=t.cJS({imports:[v.Bz.forChild(Kr),v.Bz]});class ne{constructor(n,e){this.changeDetector=e,this.messageTypes=[],this.title="\u4fee\u6539\u6d88\u606f\u6a21\u677f",this.visible=!1,this.visibleChange=new t.vpe,this.cancel=new t.vpe,this.confirm=new t.vpe,this.MESSAGE_TYPE_OPTIONS=[],this.settingsForm=n.group({messageType:[""],messageTitle:[""],messageContent:[""]})}get messageTypeControl(){return this.settingsForm.get("messageType")}get messageTitleControl(){return this.settingsForm.get("messageTitle")}get messageContentControl(){return this.settingsForm.get("messageContent")}ngOnInit(){this.MESSAGE_TYPE_OPTIONS=Array.from(new Set(this.messageTypes)).map(n=>({label:n,value:n}))}ngOnChanges(){this.setValue()}open(){this.setValue(),this.setVisible(!0)}close(){this.setVisible(!1)}setVisible(n){this.visible=n,this.visibleChange.emit(n),this.changeDetector.markForCheck()}setValue(){this.settingsForm.setValue(this.value),this.changeDetector.markForCheck()}handleCancel(){this.cancel.emit(),this.close()}handleConfirm(){this.confirm.emit(this.settingsForm.value),this.close()}}ne.\u0275fac=function(n){return new(n||ne)(t.Y36(r.qu),t.Y36(t.sBO))},ne.\u0275cmp=t.Xpm({type:ne,selectors:[["app-message-template-edit-dialog"]],inputs:{value:"value",messageTypes:"messageTypes",title:"title",visible:"visible"},outputs:{visibleChange:"visibleChange",cancel:"cancel",confirm:"confirm"},features:[t.TTD],decls:4,vars:3,consts:[["nzCentered","",3,"nzTitle","nzVisible","nzOkDisabled","nzVisibleChange","nzOnOk","nzOnCancel"],[4,"nzModalContent"],["modalFooter",""],["messageTemplateTip",""],["nz-form","",3,"nzLayout","formGroup"],[1,"setting-item","input"],["nzFor","messageTitle","nzNoColon","",1,"setting-label",3,"nzTooltipTitle"],[1,"setting-control","input"],["type","text","nz-input","","formControlName","messageTitle"],[1,"setting-item","switch"],["nzFor","messageType","nzNoColon","",1,"setting-label"],[1,"setting-control","select"],["formControlName","messageType",3,"nzOptions"],[1,"setting-item","textarea"],[1,"setting-control","textarea"],["nz-input","","wrap","off","formControlName","messageContent",3,"rows"],["href","https://github.com/acgnhiki/blrec/wiki/MessageTemplate","_blank",""],["nz-button","","nzType","default",3,"click"],["nz-button","","nzType","default",3,"disabled","click"]],template:function(n,e){1&n&&(t.TgZ(0,"nz-modal",0),t.NdJ("nzVisibleChange",function(a){return e.visible=a})("nzOnOk",function(){return e.handleConfirm()})("nzOnCancel",function(){return e.handleCancel()}),t.YNc(1,jr,19,6,"ng-container",1),t.YNc(2,ts,4,1,"ng-template",null,2,t.W1O),t.qZA()),2&n&&t.Q6J("nzTitle",e.title)("nzVisible",e.visible)("nzOkDisabled",e.settingsForm.invalid)},dependencies:[r._Y,r.Fj,r.JJ,r.JL,r.sg,r.u,u.t3,u.SK,l.Lr,l.Nx,l.iK,l.Fd,O.Zp,zt.Vq,_.du,_.Hf,Q.ix,I.w,dt.dQ],styles:["textarea[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px;height:4px}"],changeDetection:0});class _t{}_t.\u0275fac=function(n){return new(n||_t)},_t.\u0275mod=t.oAB({type:_t}),_t.\u0275inj=t.cJS({providers:[$,K,X,j,tt,et,it,nt],imports:[p.ez,ht,r.u5,r.UX,ge.j,en.KJ,nn.vh,l.U5,O.o7,U.m,Oe.Wr,G.aF,sn,zt.LV,_.Qp,Q.sL,lt.PV,pi,oe.b1,ue.cg,di.S,H.HQ,bi,Pi.m]}),t.B6R(A,[ne],[])}}]); \ No newline at end of file diff --git a/src/blrec/data/webapp/index.html b/src/blrec/data/webapp/index.html index deb0058..479ece9 100644 --- a/src/blrec/data/webapp/index.html +++ b/src/blrec/data/webapp/index.html @@ -10,6 +10,6 @@ - + \ No newline at end of file diff --git a/src/blrec/data/webapp/ngsw.json b/src/blrec/data/webapp/ngsw.json index b0e6c3c..3defc99 100644 --- a/src/blrec/data/webapp/ngsw.json +++ b/src/blrec/data/webapp/ngsw.json @@ -1,6 +1,6 @@ { "configVersion": 1, - "timestamp": 1697949101780, + "timestamp": 1699163406878, "index": "/index.html", "assetGroups": [ { @@ -15,14 +15,14 @@ "/287.63ace7ac80c3d9f2.js", "/386.2404f3bc252e1df3.js", "/503.6553f508f4a9247d.js", - "/548.f8a3199ca2412e0d.js", + "/548.e2df47ddad764d0b.js", "/688.7032fddba7983cf6.js", "/common.1fc175bce139f4df.js", "/index.html", "/main.f21b7d831ad9cafb.js", "/manifest.webmanifest", "/polyfills.4e5433063877ea34.js", - "/runtime.8688afa20dbe5cc7.js", + "/runtime.4d25db3be3119aaf.js", "/styles.ae81e04dfa5b2860.css" ], "patterns": [] @@ -1638,7 +1638,7 @@ "/287.63ace7ac80c3d9f2.js": "7a52c7715de66142dae39668a3a0fb0f9ee4bb50", "/386.2404f3bc252e1df3.js": "f937945645579b9651be2666f70cec2c5de4e367", "/503.6553f508f4a9247d.js": "0878ea0e91bfd5458dd55875561e91060ecb0837", - "/548.f8a3199ca2412e0d.js": "58ae6ac139c0b62ed266313e7a75a8266770387f", + "/548.e2df47ddad764d0b.js": "0b60f5f001bd127b90d490617bba2091c4c39de3", "/688.7032fddba7983cf6.js": "eae55044529782a51b7e534365255bbfa5522b05", "/assets/animal/panda.js": "fec2868bb3053dd2da45f96bbcb86d5116ed72b1", "/assets/animal/panda.svg": "bebd302cdc601e0ead3a6d2710acf8753f3d83b1", @@ -3234,11 +3234,11 @@ "/assets/twotone/warning.js": "fb2d7ea232f3a99bf8f080dbc94c65699232ac01", "/assets/twotone/warning.svg": "8c7a2d3e765a2e7dd58ac674870c6655cecb0068", "/common.1fc175bce139f4df.js": "af1775164711ec49e5c3a91ee45bd77509c17c54", - "/index.html": "28dc5eb629ca29943d45677dac7fded24c0362c3", + "/index.html": "2a844a95b7b6367d4be88cef11f92da722cdfb0b", "/main.f21b7d831ad9cafb.js": "fc51efa446c2ac21ee17e165217dd3faeacc5290", "/manifest.webmanifest": "62c1cb8c5ad2af551a956b97013ab55ce77dd586", "/polyfills.4e5433063877ea34.js": "68159ab99e0608976404a17132f60b5ceb6f12d2", - "/runtime.8688afa20dbe5cc7.js": "602d7051e97524a7becae76c8e76e7db29370b2b", + "/runtime.4d25db3be3119aaf.js": "a384a1a5336bd3394ebe6d0560ed6c28b7020af9", "/styles.ae81e04dfa5b2860.css": "5933b4f1c4d8fcc1891b68940ee78af4091472b7" }, "navigationUrls": [ diff --git a/src/blrec/data/webapp/runtime.4d25db3be3119aaf.js b/src/blrec/data/webapp/runtime.4d25db3be3119aaf.js new file mode 100644 index 0000000..516a746 --- /dev/null +++ b/src/blrec/data/webapp/runtime.4d25db3be3119aaf.js @@ -0,0 +1 @@ +(()=>{"use strict";var e,v={},m={};function r(e){var n=m[e];if(void 0!==n)return n.exports;var t=m[e]={exports:{}};return v[e](t,t.exports,r),t.exports}r.m=v,e=[],r.O=(n,t,f,o)=>{if(!t){var a=1/0;for(i=0;i=o)&&Object.keys(r.O).every(p=>r.O[p](t[u]))?t.splice(u--,1):(c=!1,o0&&e[i-1][2]>o;i--)e[i]=e[i-1];e[i]=[t,f,o]},r.n=e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return r.d(n,{a:n}),n},r.d=(e,n)=>{for(var t in n)r.o(n,t)&&!r.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:n[t]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((n,t)=>(r.f[t](e,n),n),[])),r.u=e=>(592===e?"common":e)+"."+{103:"4a2aea63cc3bf42b",287:"63ace7ac80c3d9f2",386:"2404f3bc252e1df3",503:"6553f508f4a9247d",548:"e2df47ddad764d0b",592:"1fc175bce139f4df",688:"7032fddba7983cf6"}[e]+".js",r.miniCssF=e=>{},r.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),(()=>{var e={},n="blrec:";r.l=(t,f,o,i)=>{if(e[t])e[t].push(f);else{var a,c;if(void 0!==o)for(var u=document.getElementsByTagName("script"),d=0;d{a.onerror=a.onload=null,clearTimeout(b);var _=e[t];if(delete e[t],a.parentNode&&a.parentNode.removeChild(a),_&&_.forEach(h=>h(p)),g)return g(p)},b=setTimeout(s.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=s.bind(null,a.onerror),a.onload=s.bind(null,a.onload),c&&document.head.appendChild(a)}}})(),r.r=e=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;r.tt=()=>(void 0===e&&(e={createScriptURL:n=>n},typeof trustedTypes<"u"&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("angular#bundler",e))),e)})(),r.tu=e=>r.tt().createScriptURL(e),r.p="",(()=>{var e={666:0};r.f.j=(f,o)=>{var i=r.o(e,f)?e[f]:void 0;if(0!==i)if(i)o.push(i[2]);else if(666!=f){var a=new Promise((l,s)=>i=e[f]=[l,s]);o.push(i[2]=a);var c=r.p+r.u(f),u=new Error;r.l(c,l=>{if(r.o(e,f)&&(0!==(i=e[f])&&(e[f]=void 0),i)){var s=l&&("load"===l.type?"missing":l.type),b=l&&l.target&&l.target.src;u.message="Loading chunk "+f+" failed.\n("+s+": "+b+")",u.name="ChunkLoadError",u.type=s,u.request=b,i[1](u)}},"chunk-"+f,f)}else e[f]=0},r.O.j=f=>0===e[f];var n=(f,o)=>{var u,d,[i,a,c]=o,l=0;if(i.some(b=>0!==e[b])){for(u in a)r.o(a,u)&&(r.m[u]=a[u]);if(c)var s=c(r)}for(f&&f(o);l{"use strict";var e,v={},m={};function r(e){var n=m[e];if(void 0!==n)return n.exports;var t=m[e]={exports:{}};return v[e](t,t.exports,r),t.exports}r.m=v,e=[],r.O=(n,t,i,o)=>{if(!t){var a=1/0;for(f=0;f=o)&&Object.keys(r.O).every(b=>r.O[b](t[u]))?t.splice(u--,1):(c=!1,o0&&e[f-1][2]>o;f--)e[f]=e[f-1];e[f]=[t,i,o]},r.n=e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return r.d(n,{a:n}),n},r.d=(e,n)=>{for(var t in n)r.o(n,t)&&!r.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:n[t]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((n,t)=>(r.f[t](e,n),n),[])),r.u=e=>(592===e?"common":e)+"."+{103:"4a2aea63cc3bf42b",287:"63ace7ac80c3d9f2",386:"2404f3bc252e1df3",503:"6553f508f4a9247d",548:"f8a3199ca2412e0d",592:"1fc175bce139f4df",688:"7032fddba7983cf6"}[e]+".js",r.miniCssF=e=>{},r.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),(()=>{var e={},n="blrec:";r.l=(t,i,o,f)=>{if(e[t])e[t].push(i);else{var a,c;if(void 0!==o)for(var u=document.getElementsByTagName("script"),d=0;d{a.onerror=a.onload=null,clearTimeout(p);var _=e[t];if(delete e[t],a.parentNode&&a.parentNode.removeChild(a),_&&_.forEach(h=>h(b)),g)return g(b)},p=setTimeout(s.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=s.bind(null,a.onerror),a.onload=s.bind(null,a.onload),c&&document.head.appendChild(a)}}})(),r.r=e=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;r.tt=()=>(void 0===e&&(e={createScriptURL:n=>n},typeof trustedTypes<"u"&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("angular#bundler",e))),e)})(),r.tu=e=>r.tt().createScriptURL(e),r.p="",(()=>{var e={666:0};r.f.j=(i,o)=>{var f=r.o(e,i)?e[i]:void 0;if(0!==f)if(f)o.push(f[2]);else if(666!=i){var a=new Promise((l,s)=>f=e[i]=[l,s]);o.push(f[2]=a);var c=r.p+r.u(i),u=new Error;r.l(c,l=>{if(r.o(e,i)&&(0!==(f=e[i])&&(e[i]=void 0),f)){var s=l&&("load"===l.type?"missing":l.type),p=l&&l.target&&l.target.src;u.message="Loading chunk "+i+" failed.\n("+s+": "+p+")",u.name="ChunkLoadError",u.type=s,u.request=p,f[1](u)}},"chunk-"+i,i)}else e[i]=0},r.O.j=i=>0===e[i];var n=(i,o)=>{var u,d,[f,a,c]=o,l=0;if(f.some(p=>0!==e[p])){for(u in a)r.o(a,u)&&(r.m[u]=a[u]);if(c)var s=c(r)}for(i&&i(o);l bool: return shutil.disk_usage(path).free > size -async def delete_file( - path: str, log_level: Literal['INFO', 'DEBUG'] = 'INFO' -) -> None: +async def delete_file(path: str, log_level: Literal['INFO', 'DEBUG'] = 'INFO') -> None: loop = asyncio.get_running_loop() try: @@ -22,4 +18,4 @@ async def delete_file( except Exception as e: logger.error(f'Failed to delete {path!r}, due to: {repr(e)}') else: - logger.log(logging.getLevelName(log_level), f'Deleted {path!r}') + logger.log(log_level, f'Deleted {path!r}') diff --git a/src/blrec/disk_space/space_monitor.py b/src/blrec/disk_space/space_monitor.py index f6f0e12..34f8bd3 100644 --- a/src/blrec/disk_space/space_monitor.py +++ b/src/blrec/disk_space/space_monitor.py @@ -1,11 +1,11 @@ import asyncio -import logging import shutil from contextlib import suppress +from loguru import logger + from ..event.event_emitter import EventEmitter, EventListener from ..exception import exception_callback -from ..logging.room_id import aio_task_with_room_id from ..utils.mixins import AsyncStoppableMixin, SwitchableMixin from .helpers import is_space_enough from .models import DiskUsage @@ -13,9 +13,6 @@ from .models import DiskUsage __all__ = 'SpaceMonitor', 'SpaceEventListener' -logger = logging.getLogger(__name__) - - class SpaceEventListener(EventListener): async def on_space_no_enough( self, path: str, threshold: int, disk_usage: DiskUsage @@ -76,7 +73,6 @@ class SpaceMonitor( with suppress(asyncio.CancelledError): await self._polling_task - @aio_task_with_room_id async def _polling_loop(self) -> None: while True: if not is_space_enough(self.path, self.space_threshold): diff --git a/src/blrec/disk_space/space_reclaimer.py b/src/blrec/disk_space/space_reclaimer.py index a146c68..5a2b351 100644 --- a/src/blrec/disk_space/space_reclaimer.py +++ b/src/blrec/disk_space/space_reclaimer.py @@ -1,25 +1,21 @@ -import os -import glob -from datetime import datetime -from pathlib import Path -import logging import asyncio +import glob +import os +from datetime import datetime from functools import partial +from pathlib import Path from typing import Iterable, List -from tenacity import retry, wait_none, stop_after_attempt, retry_if_exception_type +from loguru import logger +from tenacity import retry, retry_if_exception_type, stop_after_attempt, wait_none -from .helpers import delete_file, is_space_enough -from .space_monitor import SpaceMonitor, DiskUsage, SpaceEventListener from ..utils.mixins import SwitchableMixin - +from .helpers import delete_file, is_space_enough +from .space_monitor import DiskUsage, SpaceEventListener, SpaceMonitor __all__ = ('SpaceReclaimer',) -logger = logging.getLogger(__name__) - - class SpaceReclaimer(SpaceEventListener, SwitchableMixin): _SUFFIX_SET = frozenset( ( diff --git a/src/blrec/event/event_emitter.py b/src/blrec/event/event_emitter.py index c1bc4a9..73b33c8 100644 --- a/src/blrec/event/event_emitter.py +++ b/src/blrec/event/event_emitter.py @@ -1,12 +1,11 @@ from __future__ import annotations + from abc import ABC from contextlib import suppress -from typing import Any, List, Generic, TypeVar - +from typing import Any, Generic, List, TypeVar from ..exception import ExceptionSubmitter - __all__ = 'EventListener', 'EventEmitter' diff --git a/src/blrec/exception/exception_handler.py b/src/blrec/exception/exception_handler.py index 0d07df6..775ee37 100644 --- a/src/blrec/exception/exception_handler.py +++ b/src/blrec/exception/exception_handler.py @@ -1,14 +1,10 @@ -import logging +from loguru import logger - -from .exception_center import ExceptionCenter from ..utils.mixins import SwitchableMixin +from .exception_center import ExceptionCenter +from .helpers import format_exception - -logger = logging.getLogger(__name__) - - -__all__ = 'ExceptionHandler', +__all__ = ('ExceptionHandler',) class ExceptionHandler(SwitchableMixin): @@ -25,5 +21,4 @@ class ExceptionHandler(SwitchableMixin): self._log_exception(exc) def _log_exception(self, exc: BaseException) -> None: - exc_info = (type(exc), exc, exc.__traceback__) - logger.critical(type(exc).__name__, exc_info=exc_info) + logger.critical('{}\n{}', repr(exc), format_exception(exc)) diff --git a/src/blrec/flv/io.py b/src/blrec/flv/io.py index cc351b7..8922768 100644 --- a/src/blrec/flv/io.py +++ b/src/blrec/flv/io.py @@ -1,4 +1,3 @@ -import logging from io import SEEK_CUR from typing import Iterable, Iterator @@ -11,9 +10,6 @@ from .utils import AutoRollbacker, OffsetRepositor __all__ = 'FlvReader', 'FlvWriter' -logger = logging.getLogger(__name__) - - class FlvReader: def __init__( self, diff --git a/src/blrec/flv/metadata_analysis.py b/src/blrec/flv/metadata_analysis.py index 6c0709c..fed5070 100644 --- a/src/blrec/flv/metadata_analysis.py +++ b/src/blrec/flv/metadata_analysis.py @@ -1,8 +1,8 @@ import json -import logging import os import attr +from loguru import logger from reactivex import Observable from reactivex import operators as ops @@ -13,9 +13,6 @@ from .operators.helpers import from_file __all__ = 'AnalysingProgress', 'analyse_metadata' -logger = logging.getLogger(__name__) - - @attr.s(auto_attribs=True, slots=True, frozen=True) class AnalysingProgress: count: int diff --git a/src/blrec/flv/metadata_dumper.py b/src/blrec/flv/metadata_dumper.py index 65b68c6..549009e 100644 --- a/src/blrec/flv/metadata_dumper.py +++ b/src/blrec/flv/metadata_dumper.py @@ -1,9 +1,9 @@ import json -import logging from contextlib import suppress from typing import List, Optional import attr +from loguru import logger from ..flv import operators as flv_ops from ..path import extra_metadata_path @@ -11,8 +11,6 @@ from ..utils.mixins import SwitchableMixin __all__ = ('MetadataDumper',) -logger = logging.getLogger(__name__) - class MetadataDumper(SwitchableMixin): def __init__( diff --git a/src/blrec/flv/metadata_injection.py b/src/blrec/flv/metadata_injection.py index 9385949..70297b1 100644 --- a/src/blrec/flv/metadata_injection.py +++ b/src/blrec/flv/metadata_injection.py @@ -1,4 +1,3 @@ -import logging import os from datetime import datetime from typing import Any, Dict @@ -16,9 +15,6 @@ from .operators.helpers import from_file __all__ = 'InjectingProgress', 'inject_metadata' -logger = logging.getLogger(__name__) - - @attr.s(auto_attribs=True, slots=True, frozen=True) class InjectingProgress: count: int diff --git a/src/blrec/flv/operators/analyse.py b/src/blrec/flv/operators/analyse.py index c136c9d..3af29fb 100644 --- a/src/blrec/flv/operators/analyse.py +++ b/src/blrec/flv/operators/analyse.py @@ -4,10 +4,10 @@ ref: https://github.com/ioppermann/yamdi/blob/master/yamdi.c """ from __future__ import annotations -import logging from typing import List, Optional, TypedDict import attr +from loguru import logger from reactivex import Observable, Subject, abc from reactivex.disposable import CompositeDisposable, Disposable, SerialDisposable @@ -25,8 +25,6 @@ from .typing import FLVStream, FLVStreamItem __all__ = 'Analyser', 'MetaData', 'KeyFrames' -logger = logging.getLogger(__name__) - @attr.s(auto_attribs=True, slots=True, frozen=True, kw_only=True) class KeyFrames: diff --git a/src/blrec/flv/operators/concat.py b/src/blrec/flv/operators/concat.py index 177aa79..40936b5 100644 --- a/src/blrec/flv/operators/concat.py +++ b/src/blrec/flv/operators/concat.py @@ -1,10 +1,10 @@ from __future__ import annotations -import logging from enum import IntEnum, auto from typing import Callable, List, Optional, TypedDict, cast import attr +from loguru import logger from reactivex import Observable, Subject, abc from reactivex.disposable import CompositeDisposable, Disposable, SerialDisposable from typing_extensions import TypeGuard @@ -26,8 +26,6 @@ from .typing import FLVStream, FLVStreamItem __all__ = ('concat', 'JoinPointExtractor', 'JoinPoint', 'JoinPointData') -logger = logging.getLogger(__name__) - @attr.s(auto_attribs=True, slots=True, frozen=True) class JoinPoint: diff --git a/src/blrec/flv/operators/correct.py b/src/blrec/flv/operators/correct.py index 3a75e0a..73f4d41 100644 --- a/src/blrec/flv/operators/correct.py +++ b/src/blrec/flv/operators/correct.py @@ -1,6 +1,6 @@ -import logging from typing import Callable, Optional +from loguru import logger from reactivex import Observable, abc from reactivex.disposable import CompositeDisposable, Disposable, SerialDisposable @@ -10,8 +10,6 @@ from .typing import FLVStream, FLVStreamItem __all__ = ('correct',) -logger = logging.getLogger(__name__) - def correct() -> Callable[[FLVStream], FLVStream]: def _correct(source: FLVStream) -> FLVStream: diff --git a/src/blrec/flv/operators/cut.py b/src/blrec/flv/operators/cut.py index 4383dd7..c2666d2 100644 --- a/src/blrec/flv/operators/cut.py +++ b/src/blrec/flv/operators/cut.py @@ -1,8 +1,8 @@ from __future__ import annotations -import logging from typing import Optional +from loguru import logger from reactivex import Observable, abc from reactivex.disposable import CompositeDisposable, Disposable, SerialDisposable @@ -20,9 +20,6 @@ from .typing import FLVStream, FLVStreamItem __all__ = ('Cutter',) -logger = logging.getLogger(__name__) - - class Cutter: def __init__(self, min_duration: int = 5_000) -> None: self._min_duration = min_duration # milliseconds diff --git a/src/blrec/flv/operators/defragment.py b/src/blrec/flv/operators/defragment.py index 0b96ab2..6fff3cb 100644 --- a/src/blrec/flv/operators/defragment.py +++ b/src/blrec/flv/operators/defragment.py @@ -1,6 +1,6 @@ -import logging from typing import Callable, List, Optional +from loguru import logger from reactivex import Observable, abc from reactivex.disposable import CompositeDisposable, Disposable, SerialDisposable @@ -9,8 +9,6 @@ from .typing import FLVStream, FLVStreamItem __all__ = ('defragment',) -logger = logging.getLogger(__name__) - def defragment(min_tags: int = 10) -> Callable[[FLVStream], FLVStream]: def _defragment(source: FLVStream) -> FLVStream: diff --git a/src/blrec/flv/operators/dump.py b/src/blrec/flv/operators/dump.py index 42b3d29..153c447 100644 --- a/src/blrec/flv/operators/dump.py +++ b/src/blrec/flv/operators/dump.py @@ -1,7 +1,7 @@ import io -import logging from typing import Callable, Optional, Tuple +from loguru import logger from reactivex import Observable, Subject, abc from reactivex.disposable import CompositeDisposable, Disposable, SerialDisposable @@ -11,8 +11,6 @@ from .typing import FLVStream, FLVStreamItem __all__ = ('Dumper',) -logger = logging.getLogger(__name__) - class Dumper: def __init__( diff --git a/src/blrec/flv/operators/fix.py b/src/blrec/flv/operators/fix.py index 789cc7a..d2b2700 100644 --- a/src/blrec/flv/operators/fix.py +++ b/src/blrec/flv/operators/fix.py @@ -1,7 +1,7 @@ -import logging import math from typing import Callable, Optional +from loguru import logger from reactivex import Observable, abc from reactivex.disposable import CompositeDisposable, Disposable, SerialDisposable @@ -17,8 +17,6 @@ from .typing import FLVStream, FLVStreamItem __all__ = ('fix',) -logger = logging.getLogger(__name__) - def fix() -> Callable[[FLVStream], FLVStream]: def _fix(source: FLVStream) -> FLVStream: diff --git a/src/blrec/flv/operators/helpers.py b/src/blrec/flv/operators/helpers.py index c88d4c8..077549e 100644 --- a/src/blrec/flv/operators/helpers.py +++ b/src/blrec/flv/operators/helpers.py @@ -1,5 +1,4 @@ import io -import logging from reactivex import of @@ -8,8 +7,6 @@ from .typing import FLVStream __all__ = ('from_file', 'from_stream') -logger = logging.getLogger(__name__) - def from_stream( stream: io.RawIOBase, diff --git a/src/blrec/flv/operators/inject.py b/src/blrec/flv/operators/inject.py index dc10399..8ed2483 100644 --- a/src/blrec/flv/operators/inject.py +++ b/src/blrec/flv/operators/inject.py @@ -1,8 +1,8 @@ from __future__ import annotations -import logging from typing import Any, Callable, Dict, Optional, cast +from loguru import logger from reactivex import Observable, abc from ..common import ( @@ -19,9 +19,6 @@ from .typing import FLVStream, FLVStreamItem __all__ = ('Injector',) -logger = logging.getLogger(__name__) - - class Injector: def __init__( self, metadata_provider: Callable[[Dict[str, Any]], Dict[str, Any]] diff --git a/src/blrec/flv/operators/limit.py b/src/blrec/flv/operators/limit.py index e30ae79..ae35bcb 100644 --- a/src/blrec/flv/operators/limit.py +++ b/src/blrec/flv/operators/limit.py @@ -1,8 +1,8 @@ from __future__ import annotations -import logging from typing import Optional +from loguru import logger from reactivex import Observable, abc from reactivex.disposable import CompositeDisposable, Disposable, SerialDisposable @@ -19,9 +19,6 @@ from .typing import FLVStream, FLVStreamItem __all__ = ('Limiter',) -logger = logging.getLogger(__name__) - - class Limiter: def __init__( self, diff --git a/src/blrec/flv/operators/parse.py b/src/blrec/flv/operators/parse.py index 695cda9..b317774 100644 --- a/src/blrec/flv/operators/parse.py +++ b/src/blrec/flv/operators/parse.py @@ -1,10 +1,12 @@ import io -import logging from typing import Callable, Optional +from loguru import logger from reactivex import Observable, abc from reactivex.disposable import CompositeDisposable, Disposable, SerialDisposable +from blrec.exception.helpers import format_exception + from ..common import create_avc_end_sequence_tag, is_avc_end_sequence from ..io import FlvReader from ..models import FlvTag @@ -12,8 +14,6 @@ from .typing import FLVStream, FLVStreamItem __all__ = ('parse',) -logger = logging.getLogger(__name__) - def parse( *, @@ -60,7 +60,9 @@ def parse( observer.on_error(e) except ValueError as e: logger.debug( - f'Error occurred while parsing stream: {repr(e)}', exc_info=e + 'Error occurred while parsing stream: {}\n{}', + repr(e), + format_exception(e), ) if not ignore_value_error: observer.on_error(e) diff --git a/src/blrec/flv/operators/probe.py b/src/blrec/flv/operators/probe.py index 943a54e..c83e459 100644 --- a/src/blrec/flv/operators/probe.py +++ b/src/blrec/flv/operators/probe.py @@ -1,9 +1,9 @@ from __future__ import annotations import io -import logging from typing import List, Optional, cast +from loguru import logger from reactivex import Observable, Subject, abc from reactivex.disposable import CompositeDisposable, Disposable, SerialDisposable @@ -16,9 +16,6 @@ from .typing import FLVStream, FLVStreamItem __all__ = ('Prober', 'StreamProfile') -logger = logging.getLogger(__name__) - - class Prober: def __init__(self) -> None: self._profiles: Subject[StreamProfile] = Subject() diff --git a/src/blrec/flv/operators/process.py b/src/blrec/flv/operators/process.py index 1bbf01e..c1f3b4f 100644 --- a/src/blrec/flv/operators/process.py +++ b/src/blrec/flv/operators/process.py @@ -1,4 +1,3 @@ -import logging from typing import Callable from reactivex import operators as ops @@ -14,8 +13,6 @@ from .typing import FLVStream __all__ = ('process',) -logger = logging.getLogger(__name__) - def process(sort_tags: bool = False) -> Callable[[FLVStream], FLVStream]: def _process(source: FLVStream) -> FLVStream: diff --git a/src/blrec/flv/operators/progress.py b/src/blrec/flv/operators/progress.py index f15c321..7c6f118 100644 --- a/src/blrec/flv/operators/progress.py +++ b/src/blrec/flv/operators/progress.py @@ -1,6 +1,5 @@ from __future__ import annotations -import logging from typing import Optional from reactivex import Observable, abc @@ -12,9 +11,6 @@ from .typing import FLVStream, FLVStreamItem __all__ = ('ProgressBar',) -logger = logging.getLogger(__name__) - - class ProgressBar: def __init__( self, diff --git a/src/blrec/flv/operators/sort.py b/src/blrec/flv/operators/sort.py index a0cc758..fb1284d 100644 --- a/src/blrec/flv/operators/sort.py +++ b/src/blrec/flv/operators/sort.py @@ -1,7 +1,6 @@ -import logging -import os from typing import Callable, List, Optional +from loguru import logger from reactivex import Observable, abc from reactivex.disposable import CompositeDisposable, Disposable, SerialDisposable @@ -20,10 +19,6 @@ from .typing import FLVStream, FLVStreamItem __all__ = ('sort',) -logger = logging.getLogger(__name__) - -TRACE_OP_SORT = bool(os.environ.get('BLREC_TRACE_OP_SORT')) - def sort() -> Callable[[FLVStream], FLVStream]: "Sort tags in GOP by timestamp to ensure subsequent operators work as expected." @@ -46,14 +41,17 @@ def sort() -> Callable[[FLVStream], FLVStream]: if not gop_tags: return - if TRACE_OP_SORT: - logger.debug( - 'Tags in GOP:\n' - f'Number of tags: {len(gop_tags)}\n' - f'Total size of tags: {sum(map(len, gop_tags))}\n' - f'The first tag is {gop_tags[0]}\n' - f'The last tag is {gop_tags[-1]}' - ) + logger.opt(lazy=True).trace( + 'Tags in GOP:\n' + 'Number of tags: {}\n' + 'Total size of tags: {}\n' + 'The first tag is {}\n' + 'The last tag is {}', + lambda: len(gop_tags), + lambda: sum(map(len, gop_tags)), + lambda: gop_tags[0], + lambda: gop_tags[-1], + ) if len(gop_tags) < 10: avc_header_tag = find_avc_header_tag(gop_tags) diff --git a/src/blrec/flv/operators/split.py b/src/blrec/flv/operators/split.py index 7994181..34ef95c 100644 --- a/src/blrec/flv/operators/split.py +++ b/src/blrec/flv/operators/split.py @@ -1,6 +1,6 @@ -import logging from typing import Callable, Optional +from loguru import logger from reactivex import Observable, abc from reactivex.disposable import CompositeDisposable, Disposable, SerialDisposable @@ -15,8 +15,6 @@ from .typing import FLVStream, FLVStreamItem __all__ = ('split',) -logger = logging.getLogger(__name__) - def split() -> Callable[[FLVStream], FLVStream]: def _split(source: FLVStream) -> FLVStream: diff --git a/src/blrec/flv/scriptdata.py b/src/blrec/flv/scriptdata.py index 85b43ff..b040f36 100644 --- a/src/blrec/flv/scriptdata.py +++ b/src/blrec/flv/scriptdata.py @@ -1,7 +1,8 @@ -import logging from io import BytesIO from typing import Any, BinaryIO, Mapping, TypedDict +from loguru import logger + from .amf import AMFReader, AMFWriter __all__ = ( @@ -14,8 +15,6 @@ __all__ = ( 'ScriptDataDumper', ) -logger = logging.getLogger(__name__) - class ScriptData(TypedDict): name: str diff --git a/src/blrec/hls/metadata_dumper.py b/src/blrec/hls/metadata_dumper.py index 3068e12..77c18c2 100644 --- a/src/blrec/hls/metadata_dumper.py +++ b/src/blrec/hls/metadata_dumper.py @@ -1,10 +1,11 @@ from __future__ import annotations import json -import logging from contextlib import suppress from typing import Any, Callable, Dict, Tuple +from loguru import logger + from blrec.path.helpers import record_metadata_path from blrec.utils.mixins import SwitchableMixin @@ -12,8 +13,6 @@ from . import operators as hls_ops __all__ = ('MetadataDumper',) -logger = logging.getLogger(__name__) - class MetadataDumper(SwitchableMixin): def __init__( diff --git a/src/blrec/hls/operators/analyser.py b/src/blrec/hls/operators/analyser.py index 4539288..3c12093 100644 --- a/src/blrec/hls/operators/analyser.py +++ b/src/blrec/hls/operators/analyser.py @@ -1,21 +1,18 @@ from __future__ import annotations -import logging from typing import Optional, Union import attr from reactivex import Observable, abc from reactivex.disposable import CompositeDisposable, Disposable, SerialDisposable -from .prober import Prober, StreamProfile -from .segment_fetcher import InitSectionData, SegmentData from .playlist_dumper import PlaylistDumper +from .prober import Prober, StreamProfile from .segment_dumper import SegmentDumper +from .segment_fetcher import InitSectionData, SegmentData __all__ = ('Analyser', 'MetaData') -logger = logging.getLogger(__name__) - @attr.s(auto_attribs=True, slots=True, frozen=True, kw_only=True) class MetaData: diff --git a/src/blrec/hls/operators/cutter.py b/src/blrec/hls/operators/cutter.py index e9ebbc7..da0e618 100644 --- a/src/blrec/hls/operators/cutter.py +++ b/src/blrec/hls/operators/cutter.py @@ -1,20 +1,16 @@ from __future__ import annotations -import logging from typing import Optional, Tuple, Union from reactivex import Observable, abc from reactivex.disposable import CompositeDisposable, Disposable, SerialDisposable -from .segment_fetcher import InitSectionData, SegmentData from .playlist_dumper import PlaylistDumper +from .segment_fetcher import InitSectionData, SegmentData __all__ = ('Cutter',) -logger = logging.getLogger(__name__) - - class Cutter: def __init__( self, playlist_dumper: PlaylistDumper, min_duration: float = 5.0 diff --git a/src/blrec/hls/operators/limiter.py b/src/blrec/hls/operators/limiter.py index 85ac7a6..73a7ebe 100644 --- a/src/blrec/hls/operators/limiter.py +++ b/src/blrec/hls/operators/limiter.py @@ -1,21 +1,18 @@ from __future__ import annotations -import logging from typing import Optional, Union +from loguru import logger from reactivex import Observable, abc from reactivex.disposable import CompositeDisposable, Disposable, SerialDisposable -from .segment_fetcher import InitSectionData, SegmentData from .playlist_dumper import PlaylistDumper from .segment_dumper import SegmentDumper +from .segment_fetcher import InitSectionData, SegmentData __all__ = ('Limiter',) -logger = logging.getLogger(__name__) - - class Limiter: def __init__( self, diff --git a/src/blrec/hls/operators/playlist_dumper.py b/src/blrec/hls/operators/playlist_dumper.py index 9101682..f5fdd39 100644 --- a/src/blrec/hls/operators/playlist_dumper.py +++ b/src/blrec/hls/operators/playlist_dumper.py @@ -1,24 +1,22 @@ from __future__ import annotations import io -import logging from copy import deepcopy from decimal import Decimal from pathlib import PurePath from typing import Optional, Tuple, Union import m3u8 +from loguru import logger from reactivex import Observable, Subject, abc from reactivex.disposable import CompositeDisposable, Disposable, SerialDisposable from ..helpler import sequence_number_of -from .segment_fetcher import InitSectionData, SegmentData from .segment_dumper import SegmentDumper +from .segment_fetcher import InitSectionData, SegmentData __all__ = ('PlaylistDumper',) -logger = logging.getLogger(__name__) - class PlaylistDumper: def __init__(self, segment_dumper: SegmentDumper) -> None: diff --git a/src/blrec/hls/operators/playlist_fetcher.py b/src/blrec/hls/operators/playlist_fetcher.py index 8a8e224..2610b97 100644 --- a/src/blrec/hls/operators/playlist_fetcher.py +++ b/src/blrec/hls/operators/playlist_fetcher.py @@ -1,6 +1,5 @@ from __future__ import annotations -import logging import time from datetime import datetime from typing import Optional @@ -8,6 +7,7 @@ from typing import Optional import m3u8 import requests import urllib3 +from loguru import logger from reactivex import Observable, abc from reactivex.disposable import CompositeDisposable, Disposable, SerialDisposable from tenacity import retry, retry_if_exception_type, stop_after_delay, wait_exponential @@ -18,9 +18,6 @@ from blrec.utils.mixins import SupportDebugMixin __all__ = ('PlaylistFetcher',) -logger = logging.getLogger(__name__) - - class PlaylistFetcher(SupportDebugMixin): def __init__(self, live: Live, session: requests.Session) -> None: super().__init__() diff --git a/src/blrec/hls/operators/playlist_resolver.py b/src/blrec/hls/operators/playlist_resolver.py index 1deac56..6590975 100644 --- a/src/blrec/hls/operators/playlist_resolver.py +++ b/src/blrec/hls/operators/playlist_resolver.py @@ -1,9 +1,9 @@ from __future__ import annotations -import logging from typing import Optional import m3u8 +from loguru import logger from reactivex import Observable, abc from reactivex import operators as ops from reactivex.disposable import CompositeDisposable, Disposable, SerialDisposable @@ -17,9 +17,6 @@ from ..helpler import sequence_number_of __all__ = ('PlaylistResolver',) -logger = logging.getLogger(__name__) - - class PlaylistResolver: def __init__(self, stream_url_resolver: core_ops.StreamURLResolver) -> None: self._stream_url_resolver = stream_url_resolver diff --git a/src/blrec/hls/operators/prober.py b/src/blrec/hls/operators/prober.py index 7d42c8e..906d0be 100644 --- a/src/blrec/hls/operators/prober.py +++ b/src/blrec/hls/operators/prober.py @@ -1,9 +1,9 @@ from __future__ import annotations import io -import logging from typing import List, Optional, Union +from loguru import logger from reactivex import Observable, Subject, abc from reactivex.disposable import CompositeDisposable, Disposable, SerialDisposable @@ -14,9 +14,6 @@ from .segment_fetcher import InitSectionData, SegmentData __all__ = ('Prober', 'StreamProfile') -logger = logging.getLogger(__name__) - - class Prober: def __init__(self) -> None: self._profiles: Subject[StreamProfile] = Subject() diff --git a/src/blrec/hls/operators/segment_dumper.py b/src/blrec/hls/operators/segment_dumper.py index 9e19d11..8384044 100644 --- a/src/blrec/hls/operators/segment_dumper.py +++ b/src/blrec/hls/operators/segment_dumper.py @@ -1,10 +1,10 @@ import io -import logging from datetime import datetime, timedelta, timezone from pathlib import PurePath from typing import Callable, Optional, Tuple, Union import attr +from loguru import logger from reactivex import Observable, Subject, abc from reactivex.disposable import CompositeDisposable, Disposable, SerialDisposable @@ -15,8 +15,6 @@ from .segment_fetcher import InitSectionData, SegmentData __all__ = ('SegmentDumper',) -logger = logging.getLogger(__name__) - class SegmentDumper: def __init__( @@ -126,7 +124,7 @@ class SegmentDumper: prev_audio_profile['codec_name'] != curr_audio_profile['codec_name'] or prev_audio_profile['channels'] != curr_audio_profile['channels'] or prev_audio_profile['sample_rate'] != curr_audio_profile['sample_rate'] - or prev_audio_profile['bit_rate'] != curr_audio_profile['bit_rate'] + or prev_audio_profile.get('bit_rate') != curr_audio_profile.get('bit_rate') ): logger.warning('Audio parameters changed') return True diff --git a/src/blrec/hls/operators/segment_fetcher.py b/src/blrec/hls/operators/segment_fetcher.py index f1559be..7d22871 100644 --- a/src/blrec/hls/operators/segment_fetcher.py +++ b/src/blrec/hls/operators/segment_fetcher.py @@ -1,6 +1,5 @@ from __future__ import annotations -import logging import time from typing import Optional, Union @@ -8,6 +7,7 @@ import attr import m3u8 import requests import urllib3 +from loguru import logger from reactivex import Observable, abc from reactivex import operators as ops from reactivex.disposable import CompositeDisposable, Disposable, SerialDisposable @@ -24,15 +24,13 @@ from blrec.bili.live import Live from blrec.core import operators as core_ops from blrec.utils import operators as utils_ops from blrec.utils.hash import cksum +from blrec.exception.helpers import format_exception from ..exceptions import FetchSegmentError __all__ = ('SegmentFetcher', 'InitSectionData', 'SegmentData') -logger = logging.getLogger(__name__) - - @attr.s(auto_attribs=True, slots=True, frozen=True) class InitSectionData: segment: m3u8.Segment @@ -136,7 +134,9 @@ class SegmentFetcher: else: logger.warning(f'Segment data corrupted: {url}') except Exception as exc: - logger.warning(f'Failed to fetch segment {url}', exc_info=exc) + logger.warning( + 'Failed to fetch segment: {}\n{}', url, format_exception(exc) + ) attempts += 1 if attempts > 3: attempts = 0 diff --git a/src/blrec/logging/__init__.py b/src/blrec/logging/__init__.py index e207a32..e285766 100644 --- a/src/blrec/logging/__init__.py +++ b/src/blrec/logging/__init__.py @@ -1,8 +1,3 @@ -from .configure_logging import configure_logger, TqdmOutputStream, ConsoleHandler +from .configure_logging import TqdmOutputStream, configure_logger - -__all__ = ( - 'configure_logger', - 'TqdmOutputStream', - 'ConsoleHandler', -) \ No newline at end of file +__all__ = ('configure_logger', 'TqdmOutputStream') diff --git a/src/blrec/logging/configure_logging.py b/src/blrec/logging/configure_logging.py index d975252..2cd565a 100644 --- a/src/blrec/logging/configure_logging.py +++ b/src/blrec/logging/configure_logging.py @@ -1,85 +1,46 @@ -import asyncio -import atexit -import logging import os -import threading +import sys from datetime import datetime -from logging import Handler, LogRecord -from logging.handlers import TimedRotatingFileHandler -from typing import Any, List, Optional +from typing import Optional -from colorama import Back, Fore, Style, deinit, init +from loguru import logger from tqdm import tqdm from .typing import LOG_LEVEL -__all__ = 'configure_logger', 'ConsoleHandler', 'TqdmOutputStream' +__all__ = 'configure_logger', 'TqdmOutputStream' +LOGURU_CONSOLE_FORMAT = ( + '{time:YYYY-MM-DD HH:mm:ss.SSS} | ' + '{level} | ' + '{module}:{line} | ' + '{extra[room_id]} - ' + '{message}' +) -DISPLAY_PROGRESS = bool(os.environ.get('BLREC_PROGRESS')) +LOGURU_FILE_FORMAT = ( + '{time:YYYY-MM-DD HH:mm:ss.SSS} | ' + '{level} | ' + '{name}:{function}:{line} | ' + '{extra[room_id]} - ' + '{message}' +) class TqdmOutputStream: def write(self, string: str = '') -> None: - tqdm.write(string, end='') + tqdm.write(string, file=sys.stderr, end='') + + def isatty(self) -> bool: + return sys.stderr.isatty() -class ConsoleHandler(logging.StreamHandler): - def __init__(self, stream=None) -> None: # type: ignore - super().__init__(stream) +_console_handler_id: Optional[int] = None +_file_handler_id: Optional[int] = None - def format(self, record: LogRecord) -> str: - msg = super().format(record) - - level = record.levelno - if level == logging.DEBUG: - style = Fore.GREEN - elif level == logging.WARNING: - style = Fore.YELLOW - elif level == logging.ERROR: - style = Fore.RED - elif level == logging.CRITICAL: - style = Fore.WHITE + Back.RED + Style.BRIGHT - else: - style = '' - - return style + msg + Style.RESET_ALL if style else msg - - -_old_factory = logging.getLogRecordFactory() - - -def obtain_room_id() -> str: - try: - task = asyncio.current_task() - assert task is not None - except Exception: - name = threading.current_thread().getName() - else: - name = task.get_name() - - if '::' in name: - if room_id := name.split('::')[-1]: - return room_id - - return '' - - -def record_factory(*args: Any, **kwargs: Any) -> LogRecord: - record = _old_factory(*args, **kwargs) - - if room_id := obtain_room_id(): - record.roomid = '[' + room_id + '] ' # type: ignore - else: - record.roomid = '' # type: ignore - - return record - - -logging.setLogRecordFactory(record_factory) - - -_old_handlers: List[Handler] = [] +_old_log_dir: Optional[str] = None +_old_console_log_level: Optional[LOG_LEVEL] = None +_old_backup_count: Optional[int] = None def configure_logger( @@ -88,52 +49,55 @@ def configure_logger( console_log_level: LOG_LEVEL = 'INFO', backup_count: Optional[int] = None, ) -> None: - # config root logger - logger = logging.getLogger() - logger.setLevel(logging.DEBUG) + global _console_handler_id, _file_handler_id + global _old_log_dir, _old_console_log_level, _old_backup_count - # config formatter - formatter = logging.Formatter( - '[%(asctime)s] [%(levelname)s] [%(module)s] %(roomid)s%(message)s' - ) + logger.configure(extra={'room_id': ''}) - # logging to console - if DISPLAY_PROGRESS: - console_handler = ConsoleHandler(TqdmOutputStream()) - else: - console_handler = ConsoleHandler() - console_handler.setLevel(logging.getLevelName(console_log_level)) - console_handler.setFormatter(formatter) - logger.addHandler(console_handler) + if console_log_level != _old_console_log_level: + if _console_handler_id is not None: + logger.remove(_console_handler_id) + else: + logger.remove() # remove the default stderr handler - # logging to file - log_file_path = make_log_file_path(log_dir) - file_handler = TimedRotatingFileHandler( - filename=log_file_path, - when='MIDNIGHT', - backupCount=backup_count or 0, - encoding='utf-8', - ) - file_handler.setLevel(logging.DEBUG) - file_handler.setFormatter(formatter) - logger.addHandler(file_handler) + if bool(os.environ.get('BLREC_PROGRESS')): + _console_handler_id = logger.add( + TqdmOutputStream(), + level=console_log_level, + format=LOGURU_CONSOLE_FORMAT, + ) + else: + _console_handler_id = logger.add( + sys.stderr, level=console_log_level, format=LOGURU_CONSOLE_FORMAT + ) - # remove old handlers after re-configured - for handler in _old_handlers: - logger.removeHandler(handler) + _old_console_log_level = console_log_level - # retain old handlers for the removing - _old_handlers.append(console_handler) - _old_handlers.append(file_handler) + if log_dir != _old_log_dir or backup_count != _old_backup_count: + log_file_path = make_log_file_path(log_dir) + logger.info(f'log file: {log_file_path}') - logger.info(f'log file: {log_file_path}') + file_handler_id = logger.add( + log_file_path, + level='TRACE' if bool(os.environ.get('BLREC_TRACE')) else 'DEBUG', + format=LOGURU_FILE_FORMAT, + enqueue=True, + rotation="00:00", + retention=backup_count, + backtrace=True, + diagnose=True, + ) + + if _file_handler_id is not None: + logger.remove(_file_handler_id) + + _file_handler_id = file_handler_id + + _old_log_dir = log_dir + _old_backup_count = backup_count def make_log_file_path(log_dir: str) -> str: - data_time_string = datetime.now().strftime("%Y-%m-%d-%H%M%S-%f") + data_time_string = datetime.now().strftime("%Y-%m-%d_%H-%M-%S_%f") filename = f'blrec_{data_time_string}.log' return os.path.abspath(os.path.join(log_dir, filename)) - - -init() -atexit.register(deinit) diff --git a/src/blrec/logging/context.py b/src/blrec/logging/context.py new file mode 100644 index 0000000..4bbb914 --- /dev/null +++ b/src/blrec/logging/context.py @@ -0,0 +1,19 @@ +from functools import wraps +from typing import Any, Awaitable, Callable, TypeVar + +from loguru import logger + +_T = TypeVar('_T') + +__all__ = ('async_task_with_logger_context',) + + +def async_task_with_logger_context( + func: Callable[..., Awaitable[_T]] +) -> Callable[..., Awaitable[_T]]: + @wraps(func) + async def wrapper(obj: Any, *arg: Any, **kwargs: Any) -> _T: + with logger.contextualize(**obj._logger_context): + return await func(obj, *arg, **kwargs) + + return wrapper diff --git a/src/blrec/logging/room_id.py b/src/blrec/logging/room_id.py deleted file mode 100644 index 96c7534..0000000 --- a/src/blrec/logging/room_id.py +++ /dev/null @@ -1,46 +0,0 @@ -import threading -import asyncio -from functools import wraps -from typing import Any, Awaitable, Callable, TypeVar - - -_T = TypeVar('_T') - - -def with_room_id(room_id: int): # type: ignore - def decorate(func: Callable[..., _T]) -> Callable[..., _T]: - @wraps(func) - def wrapper(*arg: Any, **kwargs: Any) -> _T: - curr_thread = threading.current_thread() - old_name = curr_thread.getName() - curr_thread.setName(f'{func.__qualname__}::{room_id}') - try: - return func(*arg, **kwargs) - finally: - curr_thread.setName(old_name) - return wrapper - return decorate - - -def aio_task_with_room_id( - func: Callable[..., Awaitable[_T]] -) -> Callable[..., Awaitable[_T]]: - @wraps(func) - async def wrapper(obj: Any, *arg: Any, **kwargs: Any) -> _T: - if hasattr(obj, '_room_id'): - room_id = obj._room_id - elif hasattr(obj, '_live'): - room_id = obj._live.room_id - else: - room_id = '' - - curr_task = asyncio.current_task() - assert curr_task is not None - old_name = curr_task.get_name() - curr_task.set_name(f'{func.__qualname__}::{room_id}') - try: - return await func(obj, *arg, **kwargs) - finally: - curr_task.set_name(old_name) - - return wrapper diff --git a/src/blrec/logging/typing.py b/src/blrec/logging/typing.py index b211714..4be07be 100644 --- a/src/blrec/logging/typing.py +++ b/src/blrec/logging/typing.py @@ -1,20 +1,5 @@ from typing import Literal -# CRITICAL = 50 -# FATAL = CRITICAL -# ERROR = 40 -# WARNING = 30 -# WARN = WARNING -# INFO = 20 -# DEBUG = 10 -# NOTSET = 0 - LOG_LEVEL = Literal[ - 'CRITICAL', - 'FATAL', - 'ERROR', - 'WARNING', - 'INFO', - 'DEBUG', - 'NOTSET', # equivalent to verbose + 'TRACE', 'DEBUG', 'INFO', 'SUCCESS', 'WARNING', 'ERROR', 'CRITICAL', ] diff --git a/src/blrec/notification/notifiers.py b/src/blrec/notification/notifiers.py index aacd760..617bce3 100644 --- a/src/blrec/notification/notifiers.py +++ b/src/blrec/notification/notifiers.py @@ -1,5 +1,4 @@ import asyncio -import logging import os from abc import ABC, abstractmethod from datetime import datetime @@ -30,13 +29,13 @@ from ..exception import ExceptionCenter, format_exception from ..setting.typing import MessageType from ..utils.mixins import SwitchableMixin from .providers import ( + Bark, EmailService, MessagingProvider, Pushdeer, Pushplus, Serverchan, Telegram, - Bark, ) __all__ = ( @@ -51,7 +50,7 @@ __all__ = ( ) -logger = logging.getLogger(__name__) +from loguru import logger class Notifier(SwitchableMixin, ABC): diff --git a/src/blrec/notification/providers.py b/src/blrec/notification/providers.py index 007620d..0036f43 100644 --- a/src/blrec/notification/providers.py +++ b/src/blrec/notification/providers.py @@ -1,5 +1,4 @@ import asyncio -import logging import smtplib import ssl from abc import ABC, abstractmethod @@ -11,13 +10,13 @@ from urllib.parse import urljoin import aiohttp from ..setting.typing import ( + BarkMessageType, EmailMessageType, MessageType, PushdeerMessageType, PushplusMessageType, ServerchanMessageType, TelegramMessageType, - BarkMessageType, ) from ..utils.patterns import Singleton @@ -32,9 +31,6 @@ __all__ = ( ) -logger = logging.getLogger(__name__) - - class MessagingProvider(Singleton, ABC): def __init__(self) -> None: super().__init__() diff --git a/src/blrec/postprocess/ffmpeg_metadata.py b/src/blrec/postprocess/ffmpeg_metadata.py index 7945fd9..b25705a 100644 --- a/src/blrec/postprocess/ffmpeg_metadata.py +++ b/src/blrec/postprocess/ffmpeg_metadata.py @@ -2,13 +2,13 @@ from __future__ import annotations import asyncio import json -import logging import os from decimal import Decimal from typing import Iterable, List, Tuple, cast import aiofiles import m3u8 +from loguru import logger from blrec.flv.helpers import make_comment_for_joinpoints from blrec.flv.operators import JoinPoint @@ -17,8 +17,6 @@ from blrec.path.helpers import ffmpeg_metadata_path, playlist_path from .helpers import get_extra_metadata, get_metadata, get_record_metadata -logger = logging.getLogger(__name__) - async def make_metadata_file(video_path: str) -> str: path = ffmpeg_metadata_path(video_path) diff --git a/src/blrec/postprocess/helpers.py b/src/blrec/postprocess/helpers.py index 9a203d6..e5b05a2 100644 --- a/src/blrec/postprocess/helpers.py +++ b/src/blrec/postprocess/helpers.py @@ -1,11 +1,11 @@ import asyncio import json -import logging import os import shutil from typing import Any, Dict, Iterable, Literal import aiofiles +from loguru import logger from blrec.path.helpers import ( cover_path, @@ -18,8 +18,6 @@ from blrec.path.helpers import ( from ..flv.helpers import get_extra_metadata as _get_extra_metadata from ..flv.helpers import get_metadata as _get_metadata -logger = logging.getLogger(__name__) - async def discard_files( paths: Iterable[str], log_level: Literal['INFO', 'DEBUG'] = 'INFO' @@ -41,7 +39,7 @@ async def discard_dir(path: str, log_level: Literal['INFO', 'DEBUG'] = 'INFO') - except Exception as e: logger.error(f'Failed to delete {path!r}, due to: {repr(e)}') else: - logger.log(logging.getLevelName(log_level), f'Deleted {path!r}') + logger.log(log_level, f'Deleted {path!r}') def files_related(video_path: str) -> Iterable[str]: diff --git a/src/blrec/postprocess/postprocessor.py b/src/blrec/postprocess/postprocessor.py index ae76151..1342583 100644 --- a/src/blrec/postprocess/postprocessor.py +++ b/src/blrec/postprocess/postprocessor.py @@ -1,14 +1,16 @@ from __future__ import annotations import asyncio -import logging import os from contextlib import suppress from pathlib import PurePath from typing import Any, Awaitable, Dict, Final, Iterator, List, Optional, Tuple, Union +from loguru import logger from reactivex.scheduler import ThreadPoolScheduler +from blrec.logging.context import async_task_with_logger_context + from ..bili.live import Live from ..core import Recorder, RecorderEventListener from ..event.event_emitter import EventEmitter, EventListener @@ -16,7 +18,6 @@ from ..exception import exception_callback, submit_exception from ..flv.helpers import is_valid_flv_file from ..flv.metadata_analysis import analyse_metadata from ..flv.metadata_injection import InjectingProgress, inject_metadata -from ..logging.room_id import aio_task_with_room_id from ..path import ( extra_metadata_path, ffmpeg_metadata_path, @@ -40,8 +41,6 @@ __all__ = ( DISPLAY_PROGRESS = bool(os.environ.get('BLREC_PROGRESS')) -logger = logging.getLogger(__name__) - class PostprocessorEventListener(EventListener): async def on_video_postprocessing_completed( @@ -75,6 +74,8 @@ class Postprocessor( ) -> None: super().__init__() self._init_for_debug(live.room_id) + self._logger_context = {'room_id': live.room_id} + self._logger = logger.bind(**self._logger_context) self._live = live self._recorder = recorder @@ -125,7 +126,7 @@ class Postprocessor( self._task = asyncio.create_task(self._worker()) self._task.add_done_callback(exception_callback) - logger.debug('Started postprocessor') + self._logger.debug('Started postprocessor') async def _do_stop(self) -> None: self._recorder.remove_listener(self) @@ -139,9 +140,9 @@ class Postprocessor( del self._scheduler del self._task - logger.debug('Stopped postprocessor') + self._logger.debug('Stopped postprocessor') - @aio_task_with_room_id + @async_task_with_logger_context async def _worker(self) -> None: while True: await self._postprocess() @@ -155,7 +156,7 @@ class Postprocessor( self._completed_files.append(video_path) async with self._worker_semaphore: - logger.debug(f'Postprocessing... {video_path}') + self._logger.debug(f'Postprocessing... {video_path}') await self._wait_for_metadata_file(video_path) try: @@ -180,7 +181,7 @@ class Postprocessor( async def _process_flv(self, video_path: str) -> str: if not await self._is_vaild_flv_file(video_path): - logger.warning(f'The flv file may be invalid: {video_path}') + self._logger.warning(f'The flv file may be invalid: {video_path}') if os.path.getsize(video_path) < 1024**2: return video_path @@ -217,28 +218,28 @@ class Postprocessor( return result_path async def _inject_extra_metadata(self, path: str) -> str: - logger.info(f"Injecting metadata for '{path}' ...") + self._logger.info(f"Injecting metadata for '{path}' ...") try: try: metadata = await get_extra_metadata(path) except Exception as e: - logger.warning(f'Failed to get extra metadata: {repr(e)}') - logger.info(f"Analysing metadata for '{path}' ...") + self._logger.warning(f'Failed to get extra metadata: {repr(e)}') + self._logger.info(f"Analysing metadata for '{path}' ...") await self._analyse_metadata(path) metadata = await get_extra_metadata(path) else: if 'keyframes' not in metadata: - logger.warning('The keyframes metadata lost') - logger.info(f"Analysing metadata for '{path}' ...") + self._logger.warning('The keyframes metadata lost') + self._logger.info(f"Analysing metadata for '{path}' ...") await self._analyse_metadata(path) new_metadata = await get_extra_metadata(path) metadata.update(new_metadata) await self._inject_metadata(path, metadata) except Exception as e: - logger.error(f"Failed to inject metadata for '{path}': {repr(e)}") + self._logger.error(f"Failed to inject metadata for '{path}': {repr(e)}") submit_exception(e) else: - logger.info(f"Successfully injected metadata for '{path}'") + self._logger.info(f"Successfully injected metadata for '{path}'") return path async def _remux_video_to_mp4(self, in_path: str) -> Tuple[str, RemuxingResult]: @@ -255,22 +256,22 @@ class Postprocessor( else: raise NotImplementedError(in_path) - logger.info(f"Remuxing '{in_path}' to '{out_path}' ...") + self._logger.info(f"Remuxing '{in_path}' to '{out_path}' ...") remux_result = await self._remux_video(in_path, out_path, metadata_path) if remux_result.is_failed(): - logger.error(f"Failed to remux '{in_path}' to '{out_path}'") + self._logger.error(f"Failed to remux '{in_path}' to '{out_path}'") result_path = _in_path if ext == 'm4s' else in_path elif remux_result.is_warned(): - logger.warning('Remuxing done, but ran into problems.') + self._logger.warning('Remuxing done, but ran into problems.') result_path = out_path elif remux_result.is_successful(): - logger.info(f"Successfully remuxed '{in_path}' to '{out_path}'") + self._logger.info(f"Successfully remuxed '{in_path}' to '{out_path}'") result_path = out_path else: pass - logger.debug(f'ffmpeg output:\n{remux_result.output}') + self._logger.debug(f'ffmpeg output:\n{remux_result.output}') if not self._debug and ext == '.flv': await discard_file(metadata_path, 'DEBUG') @@ -370,7 +371,7 @@ class Postprocessor( if await loop.run_in_executor(None, os.path.isfile, path): break else: - logger.debug(f'Not found metadata file: {path}') + self._logger.debug(f'Not found metadata file: {path}') await asyncio.sleep(1) else: - logger.warning(f'No such metadata file: {path}') + self._logger.warning(f'No such metadata file: {path}') diff --git a/src/blrec/setting/models.py b/src/blrec/setting/models.py index f0795ac..daa0232 100644 --- a/src/blrec/setting/models.py +++ b/src/blrec/setting/models.py @@ -1,6 +1,5 @@ from __future__ import annotations -import logging import os import re from typing import ClassVar, Collection, Final, List, Optional, TypeVar @@ -28,9 +27,6 @@ from .typing import ( TelegramMessageType, ) -logger = logging.getLogger(__name__) - - __all__ = ( 'DEFAULT_SETTINGS_FILE', 'EnvSettings', diff --git a/src/blrec/task/task.py b/src/blrec/task/task.py index 1249281..4df1b3b 100644 --- a/src/blrec/task/task.py +++ b/src/blrec/task/task.py @@ -1,4 +1,3 @@ -import logging import os from contextlib import suppress from pathlib import PurePath @@ -19,7 +18,6 @@ from blrec.event.event_submitters import ( ) from blrec.flv.metadata_injection import InjectingProgress from blrec.flv.operators import StreamProfile -from blrec.logging.room_id import aio_task_with_room_id from blrec.postprocess import DeleteStrategy, Postprocessor, PostprocessorStatus from blrec.postprocess.remux import RemuxingProgress from blrec.setting.typing import RecordingMode @@ -36,9 +34,6 @@ from .models import ( __all__ = ('RecordTask',) -logger = logging.getLogger(__name__) - - class RecordTask: def __init__( self, @@ -444,19 +439,16 @@ class RecordTask: def cut_stream(self) -> bool: return self._recorder.cut_stream() - @aio_task_with_room_id async def setup(self) -> None: await self._live.init() await self._setup() self._ready = True - @aio_task_with_room_id async def destroy(self) -> None: await self._destroy() await self._live.deinit() self._ready = False - @aio_task_with_room_id async def enable_monitor(self) -> None: if self._monitor_enabled: return @@ -465,7 +457,6 @@ class RecordTask: await self._danmaku_client.start() self._live_monitor.enable() - @aio_task_with_room_id async def disable_monitor(self) -> None: if not self._monitor_enabled: return @@ -474,7 +465,6 @@ class RecordTask: self._live_monitor.disable() await self._danmaku_client.stop() - @aio_task_with_room_id async def enable_recorder(self) -> None: if self._recorder_enabled: return @@ -483,7 +473,6 @@ class RecordTask: await self._postprocessor.start() await self._recorder.start() - @aio_task_with_room_id async def disable_recorder(self, force: bool = False) -> None: if not self._recorder_enabled: return @@ -496,11 +485,9 @@ class RecordTask: await self._recorder.stop() await self._postprocessor.stop() - @aio_task_with_room_id async def update_info(self, raise_exception: bool = False) -> bool: return await self._live.update_info(raise_exception=raise_exception) - @aio_task_with_room_id async def restart_danmaku_client(self) -> None: await self._danmaku_client.restart() diff --git a/src/blrec/task/task_manager.py b/src/blrec/task/task_manager.py index 18eaceb..b7ce565 100644 --- a/src/blrec/task/task_manager.py +++ b/src/blrec/task/task_manager.py @@ -1,7 +1,6 @@ from __future__ import annotations import asyncio -import logging from typing import TYPE_CHECKING, Dict, Iterator, Optional import aiohttp @@ -19,6 +18,8 @@ from .task import RecordTask if TYPE_CHECKING: from ..setting import SettingsManager +from loguru import logger + from ..setting import ( BiliApiSettings, DanmakuSettings, @@ -32,9 +33,6 @@ from ..setting import ( __all__ = ('RecordTaskManager',) -logger = logging.getLogger(__name__) - - class RecordTaskManager: def __init__(self, settings_manager: SettingsManager) -> None: self._settings_manager = settings_manager diff --git a/src/blrec/utils/mixins.py b/src/blrec/utils/mixins.py index 9db975b..fe2270d 100644 --- a/src/blrec/utils/mixins.py +++ b/src/blrec/utils/mixins.py @@ -5,8 +5,6 @@ from abc import ABC, abstractmethod from concurrent.futures import Future from typing import Awaitable, TypeVar, final -from blrec.logging.room_id import aio_task_with_room_id - class SwitchableMixin(ABC): def __init__(self) -> None: @@ -140,10 +138,6 @@ class AsyncCooperationMixin(ABC): future = self._run_coroutine(coro) return future.result() - @aio_task_with_room_id - async def _with_room_id(self, coro: Awaitable[_T]) -> _T: - return await coro - class SupportDebugMixin(ABC): def __init__(self) -> None: diff --git a/src/blrec/utils/operators/observe_on.py b/src/blrec/utils/operators/observe_on.py index f700be5..f643a41 100644 --- a/src/blrec/utils/operators/observe_on.py +++ b/src/blrec/utils/operators/observe_on.py @@ -1,7 +1,8 @@ from queue import Queue from threading import Thread, current_thread -from typing import Any, Callable, Optional, TypeVar +from typing import Any, Callable, Dict, Optional, TypeVar +from loguru import logger from reactivex import Observable, abc from reactivex.disposable import CompositeDisposable, Disposable, SerialDisposable @@ -9,7 +10,9 @@ _T = TypeVar('_T') def observe_on_new_thread( - queue_size: Optional[int] = None, thread_name: Optional[str] = None + queue_size: Optional[int] = None, + thread_name: Optional[str] = None, + logger_context: Optional[Dict[str, Any]] = None, ) -> Callable[[Observable[_T]], Observable[_T]]: def observe_on(source: Observable[_T]) -> Observable[_T]: def subscribe( @@ -21,8 +24,9 @@ def observe_on_new_thread( queue: Queue[Callable[..., Any]] = Queue(maxsize=queue_size or 0) def run() -> None: - while not disposed: - queue.get()() + with logger.contextualize(**(logger_context or {})): + while not disposed: + queue.get()() thread = Thread(target=run, name=thread_name, daemon=True) thread.start() diff --git a/src/blrec/web/main.py b/src/blrec/web/main.py index bdacb5a..a17308c 100644 --- a/src/blrec/web/main.py +++ b/src/blrec/web/main.py @@ -1,4 +1,3 @@ -import logging import os from typing import Optional, Tuple @@ -22,9 +21,6 @@ from . import security from .routers import application, settings, tasks, update, validation, websockets from .schemas import ResponseMessage -logger = logging.getLogger(__name__) - - _env_settings = EnvSettings() _path = os.path.abspath(os.path.expanduser(_env_settings.settings_file)) if not file_exists(_path): diff --git a/src/blrec/web/routers/update.py b/src/blrec/web/routers/update.py index 54754e1..6ebdd1f 100644 --- a/src/blrec/web/routers/update.py +++ b/src/blrec/web/routers/update.py @@ -1,32 +1,21 @@ import asyncio -import logging from fastapi import APIRouter +from loguru import logger from ... import __prog__ from ...application import Application from ...update.helpers import get_latest_version_string - -logger = logging.getLogger(__name__) - - app: Application = None # type: ignore # bypass flake8 F821 -router = APIRouter( - prefix='/api/v1/update', - tags=['update'], -) +router = APIRouter(prefix='/api/v1/update', tags=['update']) -@router.get( - '/version/latest', -) +@router.get('/version/latest') async def get_latest_version() -> str: try: return await get_latest_version_string(__prog__) or '' except asyncio.TimeoutError: - logger.warning( - 'Timeout error occurred while getting the latest version string' - ) + logger.warning('Timeout error occurred while getting the latest version string') return '' diff --git a/src/blrec/web/routers/websockets.py b/src/blrec/web/routers/websockets.py index 7dcc333..d9c1ff4 100644 --- a/src/blrec/web/routers/websockets.py +++ b/src/blrec/web/routers/websockets.py @@ -1,28 +1,21 @@ -import logging import asyncio import json +import logging -from fastapi import ( - APIRouter, - WebSocket, - WebSocketDisconnect, -) +from fastapi import APIRouter, WebSocket, WebSocketDisconnect +from loguru import logger from websockets.exceptions import ConnectionClosed +from ...application import Application from ...event import EventCenter from ...event.typing import Event from ...exception import ExceptionCenter, format_exception -from ...application import Application - -logger = logging.getLogger(__name__) logging.getLogger('websockets').setLevel(logging.WARNING) app: Application = None # type: ignore # bypass flake8 F821 -router = APIRouter( - tags=['websockets'], -) +router = APIRouter(tags=['websockets']) @router.websocket('/ws/v1/events') @@ -75,7 +68,6 @@ async def receive_exception(websocket: WebSocket) -> None: def on_exception(exc: BaseException) -> None: asyncio.create_task(send_exception(exc)) - subscription = ExceptionCenter.get_instance().exceptions \ - .subscribe(on_exception) + subscription = ExceptionCenter.get_instance().exceptions.subscribe(on_exception) await future diff --git a/src/blrec/web/security.py b/src/blrec/web/security.py index ecc16bc..9a79af2 100644 --- a/src/blrec/web/security.py +++ b/src/blrec/web/security.py @@ -1,13 +1,9 @@ -import logging import secrets from typing import Dict, Optional, Set from fastapi import Header, Request, status from fastapi.exceptions import HTTPException -logger = logging.getLogger(__name__) - - api_key = '' MAX_WHITELIST = 100 diff --git a/src/blrec/webhook/models.py b/src/blrec/webhook/models.py index 1bbda49..dc0c8f7 100644 --- a/src/blrec/webhook/models.py +++ b/src/blrec/webhook/models.py @@ -1,35 +1,31 @@ from __future__ import annotations -import logging + from typing import Set, Tuple, Type import attr -from ..setting import WebHookSettings from ..event import ( + CoverImageDownloadedEvent, + DanmakuFileCompletedEvent, + DanmakuFileCreatedEvent, LiveBeganEvent, LiveEndedEvent, - RoomChangeEvent, - RecordingStartedEvent, - RecordingFinishedEvent, - RecordingCancelledEvent, - VideoFileCreatedEvent, - VideoFileCompletedEvent, - DanmakuFileCreatedEvent, - DanmakuFileCompletedEvent, - RawDanmakuFileCreatedEvent, - RawDanmakuFileCompletedEvent, - CoverImageDownloadedEvent, - SpaceNoEnoughEvent, - VideoPostprocessingCompletedEvent, PostprocessingCompletedEvent, + RawDanmakuFileCompletedEvent, + RawDanmakuFileCreatedEvent, + RecordingCancelledEvent, + RecordingFinishedEvent, + RecordingStartedEvent, + RoomChangeEvent, + SpaceNoEnoughEvent, + VideoFileCompletedEvent, + VideoFileCreatedEvent, + VideoPostprocessingCompletedEvent, ) from ..event.typing import Event +from ..setting import WebHookSettings - -__all__ = 'WebHook', - - -logger = logging.getLogger(__name__) +__all__ = ('WebHook',) @attr.s(auto_attribs=True, slots=True, frozen=True) diff --git a/src/blrec/webhook/webhook_emitter.py b/src/blrec/webhook/webhook_emitter.py index 735c203..00f5129 100644 --- a/src/blrec/webhook/webhook_emitter.py +++ b/src/blrec/webhook/webhook_emitter.py @@ -1,37 +1,25 @@ -import logging import asyncio from typing import Any, Dict, List import aiohttp -from tenacity import ( - AsyncRetrying, - wait_exponential, - stop_after_delay, -) +from loguru import logger +from tenacity import AsyncRetrying, stop_after_delay, wait_exponential -from .models import WebHook -from ..utils.mixins import SwitchableMixin -from ..exception import ExceptionCenter -from ..event import EventCenter, Error, ErrorData -from ..event.typing import Event from .. import __prog__, __version__ +from ..event import Error, ErrorData, EventCenter +from ..event.typing import Event +from ..exception import ExceptionCenter +from ..utils.mixins import SwitchableMixin +from .models import WebHook - -__all__ = 'WebHookEmitter', - - -logger = logging.getLogger(__name__) +__all__ = ('WebHookEmitter',) class WebHookEmitter(SwitchableMixin): - def __init__( - self, webhooks: List[WebHook] = [] - ) -> None: + def __init__(self, webhooks: List[WebHook] = []) -> None: super().__init__() self.webhooks = webhooks - self.headers = { - 'User-Agent': f'{__prog__}/{__version__}' - } + self.headers = {'User-Agent': f'{__prog__}/{__version__}'} def _do_enable(self) -> None: events = EventCenter.get_instance().events @@ -63,25 +51,19 @@ class WebHookEmitter(SwitchableMixin): def _send_request(self, url: str, payload: Dict[str, Any]) -> None: asyncio.create_task(self._send_request_async(url, payload)) - async def _send_request_async( - self, url: str, payload: Dict[str, Any] - ) -> None: + async def _send_request_async(self, url: str, payload: Dict[str, Any]) -> None: try: async for attempt in AsyncRetrying( - stop=stop_after_delay(180), - wait=wait_exponential(max=15), + stop=stop_after_delay(180), wait=wait_exponential(max=15) ): with attempt: await self._post(url, payload) except Exception as e: - logger.warning('Failed to send a request to {}: {}'.format( - url, repr(e) - )) + logger.warning('Failed to send a request to {}: {}'.format(url, repr(e))) async def _post(self, url: str, payload: Dict[str, Any]) -> None: async with aiohttp.ClientSession( - headers=self.headers, - raise_for_status=True, + headers=self.headers, raise_for_status=True ) as session: async with session.post(url, json=payload): pass diff --git a/webapp/src/app/settings/logging-settings/logging-settings.component.ts b/webapp/src/app/settings/logging-settings/logging-settings.component.ts index 13a7146..9894543 100644 --- a/webapp/src/app/settings/logging-settings/logging-settings.component.ts +++ b/webapp/src/app/settings/logging-settings/logging-settings.component.ts @@ -34,7 +34,6 @@ export class LoggingSettingsComponent implements OnInit, OnChanges { readonly syncFailedWarningTip = SYNC_FAILED_WARNING_TIP; readonly logLevelOptions = [ - { label: 'VERBOSE', value: 'NOTSET' }, { label: 'DEBUG', value: 'DEBUG' }, { label: 'INFO', value: 'INFO' }, { label: 'WARNING', value: 'WARNING' }, diff --git a/webapp/src/app/settings/shared/setting.model.ts b/webapp/src/app/settings/shared/setting.model.ts index 1dfb616..dd84d60 100644 --- a/webapp/src/app/settings/shared/setting.model.ts +++ b/webapp/src/app/settings/shared/setting.model.ts @@ -103,12 +103,13 @@ export interface OutputSettings { export type OutputOptions = Nullable>; export type LogLevel = - | 'CRITICAL' - | 'ERROR' - | 'WARNING' - | 'INFO' + | 'TRACE' | 'DEBUG' - | 'NOTSET'; + | 'INFO' + | 'SUCCESS' + | 'WARNING' + | 'ERROR' + | 'CRITICAL'; export interface LoggingSettings { logDir: string;