From 150a3a9fb0f49afb75cbf1d24ba65a2da08a1a8c Mon Sep 17 00:00:00 2001 From: projectdx Date: Sun, 4 Jan 2026 15:36:52 +0900 Subject: [PATCH] feat: Add reusable video modal component with Alist-style UI --- README.md | 15 + info.yaml | 2 +- lib/ffmpeg_queue_v1.py | 39 +- lib/ytdlp_downloader.py | 24 +- mod_linkkf.py | 31 +- static/css/video_modal.css | 246 ++++++++++++ static/img/players/iina.webp | Bin 0 -> 20644 bytes static/img/players/infuse.webp | Bin 0 -> 5056 bytes static/img/players/mpv.webp | Bin 0 -> 22936 bytes static/img/players/mxplayer.webp | Bin 0 -> 11236 bytes static/img/players/nplayer.webp | Bin 0 -> 9614 bytes static/img/players/omniplayer.webp | Bin 0 -> 6954 bytes static/img/players/potplayer.webp | Bin 0 -> 3958 bytes static/img/players/vlc.webp | Bin 0 -> 7454 bytes static/js/video_modal.js | 291 ++++++++++++++ .../components/video_modal.html | 61 +++ templates/anime_downloader_linkkf_list.html | 4 +- templates/anime_downloader_linkkf_queue.html | 3 +- templates/anime_downloader_ohli24_list.html | 358 +++++++++--------- 19 files changed, 859 insertions(+), 215 deletions(-) create mode 100644 static/css/video_modal.css create mode 100644 static/img/players/iina.webp create mode 100644 static/img/players/infuse.webp create mode 100644 static/img/players/mpv.webp create mode 100644 static/img/players/mxplayer.webp create mode 100644 static/img/players/nplayer.webp create mode 100644 static/img/players/omniplayer.webp create mode 100644 static/img/players/potplayer.webp create mode 100644 static/img/players/vlc.webp create mode 100644 static/js/video_modal.js create mode 100644 templates/anime_downloader/components/video_modal.html diff --git a/README.md b/README.md index fa8f76c..65778be 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,21 @@ ## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Changelog) +### v0.5.2 (2026-01-04) +- **์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋น„๋””์˜ค ๋ชจ๋‹ฌ ์ปดํฌ๋„ŒํŠธ ๋„์ž…**: + - `templates/anime_downloader/components/video_modal.html` - ๊ณตํ†ต ๋ชจ๋‹ฌ HTML + - `static/js/video_modal.js` - VideoModal JavaScript ๋ชจ๋“ˆ (API ์ œ๊ณต) + - `static/css/video_modal.css` - ๋น„๋””์˜ค ๋ชจ๋‹ฌ ์ „์šฉ ์Šคํƒ€์ผ์‹œํŠธ +- **Alist ์Šคํƒ€์ผ UI ๊ฐœ์„ **: + - **์—ํ”ผ์†Œ๋“œ ๋“œ๋กญ๋‹ค์šด**: ํŒŒ๋ž€์ƒ‰ ํ•˜์ด๋ผ์ดํŠธ ๋ฐฐ๊ฒฝ์˜ ์—ํ”ผ์†Œ๋“œ ์„ ํƒ๊ธฐ + - **์ž๋™ ๋‹ค์Œ ํ† ๊ธ€ ์Šค์œ„์น˜**: iOS ์Šคํƒ€์ผ ์Šฌ๋ผ์ด๋” ํ† ๊ธ€ + - **์™ธ๋ถ€ ํ”Œ๋ ˆ์ด์–ด ๋ฒ„ํŠผ**: IINA, PotPlayer, VLC, nPlayer, Infuse, OmniPlayer, MX Player, MPV ์ง€์› + - ํ”Œ๋ ˆ์ด์–ด ์•„์ด์ฝ˜ ์ด๋ฏธ์ง€ ์ถ”๊ฐ€ (`static/img/players/`) +- **์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ ํ–ฅ์ƒ**: + - Ohli24 list ํŽ˜์ด์ง€์—์„œ ์ธ๋ผ์ธ ์ฝ”๋“œ ~145์ค„ โ†’ ~9์ค„๋กœ ์ถ•์†Œ + - `VideoModal.init({ package_name, sub })` API๋กœ ๊ฐ„ํŽธ ์ดˆ๊ธฐํ™” + - `VideoModal.openWithPath(path)` / `.openWithUrl(url)` / `.openWithPlaylist(list)` ๋ฉ”์„œ๋“œ ์ œ๊ณต + ### v0.5.1 (2026-01-04) - **Ohli24 ๋ ˆ์ด์•„์›ƒ ํ‘œ์ค€ํ™”**: - ๋ชจ๋“  Ohli24 ํŽ˜์ด์ง€(Setting, Search, Queue, List, Request)์— ์ผ๊ด€๋œ 1400px max-width ๋ฐ ์ค‘์•™ ์ •๋ ฌ ์ ์šฉ diff --git a/info.yaml b/info.yaml index df912ce..7c5215c 100644 --- a/info.yaml +++ b/info.yaml @@ -1,5 +1,5 @@ title: "์• ๋‹ˆ ๋‹ค์šด๋กœ๋”" -version: "0.5.18" +version: "0.5.20" package_name: "anime_downloader" developer: "projectdx" description: "anime downloader" diff --git a/lib/ffmpeg_queue_v1.py b/lib/ffmpeg_queue_v1.py index 1311750..0ca4d35 100644 --- a/lib/ffmpeg_queue_v1.py +++ b/lib/ffmpeg_queue_v1.py @@ -223,11 +223,28 @@ class FfmpegQueue(object): # ๋‹ค์šด๋กœ๋“œ ๋ฐฉ๋ฒ• ํ™•์ธ download_method = P.ModelSetting.get(f"{self.name}_download_method") - # .ytdl ํŒŒ์ผ์ด ์žˆ๊ฑฐ๋‚˜, ytdlp/aria2c ๋ชจ๋“œ์ธ ๊ฒฝ์šฐ 'ํŒŒ์ผ ์žˆ์Œ'์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ์ง€ ์•Š์Œ (์ด์–ด๋ฐ›๊ธฐ ํ—ˆ์šฉ) + # ๋ฏธ์™„์„ฑ ๋‹ค์šด๋กœ๋“œ ๊ฐ์ง€ (Frag ํŒŒ์ผ, .ytdl ํŒŒ์ผ, .part ํŒŒ์ผ) + # ์ด๋Ÿฐ ํŒŒ์ผ์ด ์žˆ์œผ๋ฉด ์ด์–ด๋ฐ›๊ธฐ ํ—ˆ์šฉ is_ytdlp = download_method in ['ytdlp', 'aria2c'] has_ytdl_file = os.path.exists(filepath + ".ytdl") + has_part_file = os.path.exists(filepath + ".part") - if os.path.exists(filepath) and not (is_ytdlp or has_ytdl_file): + # Frag ํŒŒ์ผ ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ (๊ฐ™์€ ํด๋”์— Frag* ํŒŒ์ผ์ด ์žˆ์œผ๋ฉด ๋ฏธ์™„์„ฑ) + has_frag_files = False + try: + import glob + dirname = os.path.dirname(filepath) + if dirname and os.path.exists(dirname): + frag_pattern = os.path.join(dirname, "*Frag*") + has_frag_files = len(glob.glob(frag_pattern)) > 0 + if has_frag_files: + logger.info(f"[Resume] Found Frag files in {dirname}, allowing re-download") + except Exception as e: + logger.debug(f"Frag check error: {e}") + + is_incomplete = has_ytdl_file or has_part_file or has_frag_files + + if os.path.exists(filepath) and not (is_ytdlp or is_incomplete): logger.info(f"File already exists: {filepath}") entity.ffmpeg_status = 8 # COMPLETED_EXIST entity.ffmpeg_status_kor = "ํŒŒ์ผ ์žˆ์Œ" @@ -589,8 +606,22 @@ class FfmpegQueue(object): ret["ret"] = "refresh" elif cmd == "reset": if self.download_queue is not None: - with self.download_queue.mutex: - self.download_queue.queue.clear() + # ํ ๋น„์šฐ๊ธฐ (ํ‘œ์ค€ Queue์™€ gevent Queue ๋ชจ๋‘ ํ˜ธํ™˜) + try: + # ํ‘œ์ค€ Queue์˜ ๊ฒฝ์šฐ + if hasattr(self.download_queue, 'mutex'): + with self.download_queue.mutex: + self.download_queue.queue.clear() + else: + # gevent Queue์˜ ๊ฒฝ์šฐ - ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์„œ ๋น„์šฐ๊ธฐ + while not self.download_queue.empty(): + try: + self.download_queue.get_nowait() + except: + break + except Exception as e: + logger.debug(f"Queue clear error (non-critical): {e}") + for _ in self.entity_list: # ๋‹ค์šด๋กœ๋“œ์ค‘ ์ƒํƒœ์ธ ๊ฒฝ์šฐ์—๋งŒ ์ค‘์ง€ ์‹œ๋„ if _.ffmpeg_status == 5: diff --git a/lib/ytdlp_downloader.py b/lib/ytdlp_downloader.py index 8720e13..1714375 100644 --- a/lib/ytdlp_downloader.py +++ b/lib/ytdlp_downloader.py @@ -172,17 +172,11 @@ class YtdlpDownloader: # ์ฃผ์˜: --external-downloader aria2c๋Š” HLS ํ”„๋ž˜๊ทธ๋จผํŠธ์—์„œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํฌ๋ฏ€๋กœ ์ œ๊ฑฐํ•จ - # 1.5 ํ™˜๊ฒฝ๋ณ„ ๋ธŒ๋ผ์šฐ์ € ์œ„์žฅ ์„ค์ • (Impersonate) - # macOS์—์„œ๋Š” ๊ณ ๊ธ‰ ์œ„์žฅ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋˜, ์ข…์†์„ฑ ๋ฌธ์ œ๊ฐ€ ์žฆ์€ Linux/Docker์—์„œ๋Š” UA ์ˆ˜๋™ ์ง€์ • - is_mac = platform.system() == 'Darwin' - if is_mac: - cmd += ['--impersonate', 'chrome-120'] - logger.debug("Using yt-dlp --impersonate chrome-120 (macOS detected)") - else: - # Docker/Linux: impersonate ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ถ€์žฌ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ UA ์ˆ˜๋™ ์„ค์ • - user_agent = self.headers.get('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36') - cmd += ['--user-agent', user_agent] - logger.debug(f"Using manual User-Agent on {platform.system()}: {user_agent}") + # 1.5 ๋ธŒ๋ผ์šฐ์ € ์œ„์žฅ ์„ค์ • (User-Agent) + # --impersonate ์˜ต์…˜์€ curl-impersonate ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ ์ˆ˜๋™ UA ์‚ฌ์šฉ + user_agent = self.headers.get('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36') + cmd += ['--user-agent', user_agent] + logger.debug(f"Using manual User-Agent: {user_agent}") # 2. ํ”„๋ก์‹œ ์„ค์ • if self.proxy: @@ -342,10 +336,14 @@ class YtdlpDownloader: elapsed = time.time() - self.start_time self.elapsed_time = self.format_time(elapsed) - # [์ตœ์ ํ™”] ์ง„ํ–‰๋ฅ ์ด 1% ์ด์ƒ ์ฐจ์ด๋‚˜๊ฑฐ๋‚˜, 100%์ธ ๊ฒฝ์šฐ์—๋งŒ ์ฝœ๋ฐฑ ํ˜ธ์ถœ (๋กœ๊ทธ ๋ถ€ํ•˜ ๊ฐ์†Œ) + # [์ตœ์ ํ™”] 10% ๋‹จ์œ„๋กœ๋งŒ ๋กœ๊ทธ ์ถœ๋ ฅ (๋กœ๊ทธ ๋ถ€ํ•˜ ๊ฐ์†Œ) if self.callback and (int(new_percent) > int(self.percent) or new_percent >= 100): + old_tens = int(self.percent) // 10 + new_tens = int(new_percent) // 10 self.percent = new_percent - logger.info(f"[yt-dlp progress] {int(self.percent)}% speed={self.current_speed}") + # 10% ๋‹จ์œ„๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๊ฑฐ๋‚˜ 100%์ผ ๋•Œ๋งŒ ๋กœ๊ทธ ์ถœ๋ ฅ + if new_tens > old_tens or new_percent >= 100: + logger.info(f"[yt-dlp] {int(self.percent)}% speed={self.current_speed}") self.callback(percent=int(self.percent), current=int(self.percent), total=100, speed=self.current_speed, elapsed=self.elapsed_time) else: self.percent = new_percent diff --git a/mod_linkkf.py b/mod_linkkf.py index 80b8680..9bd49c8 100644 --- a/mod_linkkf.py +++ b/mod_linkkf.py @@ -1531,13 +1531,36 @@ class LogicLinkkf(AnimeModuleBase): # 2. Check DB for completion status FIRST (before expensive operations) db_entity = ModelLinkkfItem.get_by_linkkf_id(episode_info["_id"]) - if db_entity is not None and db_entity.status == "completed": + # 3. Early file existence check - filepath is already in episode_info from get_series_info + filepath = episode_info.get("filepath") + + # ๋ฏธ์™„์„ฑ ๋‹ค์šด๋กœ๋“œ ๊ฐ์ง€ (Frag ํŒŒ์ผ, .ytdl ํŒŒ์ผ, .part ํŒŒ์ผ์ด ์žˆ์œผ๋ฉด ์žฌ๋‹ค์šด๋กœ๋“œ ํ—ˆ์šฉ) + has_incomplete_files = False + if filepath: + import glob + dirname = os.path.dirname(filepath) + has_ytdl = os.path.exists(filepath + ".ytdl") + has_part = os.path.exists(filepath + ".part") + has_frag = False + if dirname and os.path.exists(dirname): + frag_pattern = os.path.join(dirname, "*Frag*") + has_frag = len(glob.glob(frag_pattern)) > 0 + has_incomplete_files = has_ytdl or has_part or has_frag + + if has_incomplete_files: + logger.info(f"[Resume] Incomplete download detected, allowing re-download: {filepath}") + # DB ์ƒํƒœ๊ฐ€ completed์ด๋ฉด wait๋กœ ๋ณ€๊ฒฝ + if db_entity is not None and db_entity.status == "completed": + db_entity.status = "wait" + db_entity.save() + + # DB ์™„๋ฃŒ ์ฒดํฌ (๋ฏธ์™„์„ฑ ํŒŒ์ผ์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋งŒ) + if db_entity is not None and db_entity.status == "completed" and not has_incomplete_files: logger.info(f"[Skip] Already completed in DB: {episode_info.get('program_title')} {episode_info.get('title')}") return "db_completed" - # 3. Early file existence check - filepath is already in episode_info from get_series_info - filepath = episode_info.get("filepath") - if filepath and os.path.exists(filepath): + # ํŒŒ์ผ ์กด์žฌ ์ฒดํฌ (๋ฏธ์™„์„ฑ ํŒŒ์ผ์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋งŒ) + if filepath and os.path.exists(filepath) and not has_incomplete_files: logger.info(f"[Skip] File already exists: {filepath}") # Update DB status to completed if not already if db_entity is not None and db_entity.status != "completed": diff --git a/static/css/video_modal.css b/static/css/video_modal.css new file mode 100644 index 0000000..b9b41b1 --- /dev/null +++ b/static/css/video_modal.css @@ -0,0 +1,246 @@ +/** + * Video Modal Component Styles + * Reusable video player modal for Anime Downloader + */ + +/* Video Container */ +.video-container { + position: relative; + overflow: hidden; + background: #000; +} + +/* Zoom Button */ +.video-zoom-btn { + position: absolute; + top: 15px; + right: 15px; + z-index: 10; + background: rgba(15, 23, 42, 0.6); + backdrop-filter: blur(8px); + border: 1px solid rgba(255, 255, 255, 0.15); + color: white; + width: 38px; + height: 38px; + border-radius: 10px; + opacity: 0; + transition: opacity 0.3s; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; +} +.video-container:hover .video-zoom-btn { + opacity: 1; +} +.video-zoom-btn.active { + background: #3b82f6; + border-color: transparent; +} + +/* Episode Selector Row (Alist Style) */ +.episode-selector-row { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + padding: 12px 16px; + background: linear-gradient(135deg, rgba(15, 23, 42, 0.95) 0%, rgba(30, 41, 59, 0.95) 100%); + border-bottom: 1px solid rgba(255, 255, 255, 0.1); +} + +/* Episode Dropdown */ +.episode-dropdown-wrapper { + position: relative; + flex: 1; +} +.episode-dropdown { + width: 100%; + padding: 10px 40px 10px 14px; + background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%); + border: none; + border-radius: 8px; + color: white; + font-size: 14px; + font-weight: 600; + cursor: pointer; + appearance: none; + -webkit-appearance: none; + transition: all 0.2s ease; + box-shadow: 0 2px 8px rgba(37, 99, 235, 0.3); +} +.episode-dropdown:hover { + background: linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%); + box-shadow: 0 4px 12px rgba(37, 99, 235, 0.5); +} +.episode-dropdown:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.4); +} +.episode-dropdown option { + background: #1e293b; + color: #f1f5f9; + padding: 10px; +} +.dropdown-arrow { + position: absolute; + right: 12px; + top: 50%; + transform: translateY(-50%); + width: 16px; + height: 16px; + color: white; + pointer-events: none; +} + +/* Auto-Next Toggle Switch */ +.auto-next-toggle { + display: flex; + align-items: center; + gap: 10px; + cursor: pointer; + user-select: none; +} +.auto-next-toggle input { + display: none; +} +.toggle-label { + font-size: 13px; + color: #94a3b8; + font-weight: 500; + transition: color 0.2s; +} +.auto-next-toggle input:checked ~ .toggle-label { + color: #f1f5f9; +} +.toggle-switch { + position: relative; + width: 44px; + height: 24px; + background: #334155; + border-radius: 12px; + transition: all 0.3s ease; +} +.toggle-switch::after { + content: ''; + position: absolute; + width: 20px; + height: 20px; + background: white; + border-radius: 50%; + top: 2px; + left: 2px; + transition: all 0.3s ease; + box-shadow: 0 2px 4px rgba(0,0,0,0.2); +} +.auto-next-toggle input:checked ~ .toggle-switch { + background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%); +} +.auto-next-toggle input:checked ~ .toggle-switch::after { + left: 22px; +} + +/* External Players Section */ +.external-players { + padding: 8px 16px; + background: linear-gradient(135deg, rgba(15, 23, 42, 0.95) 0%, rgba(30, 41, 59, 0.95) 100%); + border-top: 1px solid rgba(255, 255, 255, 0.1); +} +.external-players-grid { + display: flex; + flex-wrap: nowrap; + justify-content: center; + gap: 10px; +} +.ext-player-btn { + display: flex; + align-items: center; + justify-content: center; + padding: 8px; + background: rgba(59, 130, 246, 0.12); + border: 1px solid rgba(59, 130, 246, 0.25); + border-radius: 10px; + text-decoration: none; + transition: all 0.2s ease; + cursor: pointer; +} +.ext-player-btn:hover { + background: rgba(59, 130, 246, 0.3); + border-color: rgba(59, 130, 246, 0.5); + transform: translateY(-2px) scale(1.05); + box-shadow: 0 4px 12px rgba(59, 130, 246, 0.3); +} +.ext-player-btn img { + width: 28px; + height: 28px; + object-fit: contain; +} + +/* Video.js Theme Overrides */ +.video-js.vjs-theme-fantasy .vjs-big-play-button { + background: linear-gradient(135deg, rgba(59, 130, 246, 0.9) 0%, rgba(37, 99, 235, 0.9) 100%) !important; + border: none !important; + width: 90px !important; + height: 90px !important; + line-height: 90px !important; + border-radius: 50% !important; + box-shadow: 0 0 30px rgba(37, 99, 235, 0.6) !important; + transition: all 0.3s ease !important; +} +.video-js.vjs-theme-fantasy .vjs-big-play-button .vjs-icon-placeholder:before { + font-size: 60px !important; + line-height: 90px !important; +} +.video-js .vjs-control-bar { + background: rgba(15, 23, 42, 0.8) !important; + backdrop-filter: blur(10px) !important; +} + +/* Mobile Responsive */ +@media (max-width: 768px) { + #videoModal .modal-dialog { + width: 100% !important; + margin: 0 !important; + } + #videoModal .modal-content { + border-radius: 0 !important; + height: 100vh; + display: flex; + flex-direction: column; + } + #video-player { + max-height: 100vh !important; + height: 100% !important; + } + .video-container { + flex: 1; + display: flex; + align-items: center; + } + .playlist-controls { + padding-bottom: 25px; /* Mobile safe area */ + } + .video-zoom-btn { + opacity: 0.8; + top: 10px; + right: 10px; + } + .episode-selector-row { + flex-direction: column; + align-items: stretch; + gap: 10px; + } + .auto-next-toggle { + justify-content: flex-end; + } + .external-players-grid { + gap: 6px; + } + .ext-player-btn { + padding: 6px; + } + .ext-player-btn img { + width: 24px; + height: 24px; + } +} diff --git a/static/img/players/iina.webp b/static/img/players/iina.webp new file mode 100644 index 0000000000000000000000000000000000000000..d9c0bb584d02102b3390115667310fe44af3946f GIT binary patch literal 20644 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 C#zUR} literal 0 HcmV?d00001 diff --git a/static/img/players/infuse.webp b/static/img/players/infuse.webp new file mode 100644 index 0000000000000000000000000000000000000000..93b53d8b74029a44d71fa2a71d9a90fd438ca6ff GIT binary patch literal 5056 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 W=T1FpDxvW~!uudeRP#V0fB*n0ueyT( literal 0 HcmV?d00001 diff --git a/static/img/players/mpv.webp b/static/img/players/mpv.webp new file mode 100644 index 0000000000000000000000000000000000000000..6d90b25582a4f60bf530bb12a5250be6eacadeae GIT binary patch literal 22936 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 literal 0 HcmV?d00001 diff --git a/static/img/players/potplayer.webp b/static/img/players/potplayer.webp new file mode 100644 index 0000000000000000000000000000000000000000..14eba7bbc7d2c6c81f5577714345a8600f54d413 GIT binary patch literal 3958 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 0 && index < playlist.length) { + currentPlaylistIndex = index; + playVideoAtIndex(index); + } + }); + + // Video zoom button + $('#btn-video-zoom').off('click').on('click', function() { + isVideoZoomed = !isVideoZoomed; + if (isVideoZoomed) { + $('#video-player').css({ + 'object-fit': 'cover', + 'max-height': '100vh' + }); + $(this).addClass('active').find('i').removeClass('fa-expand').addClass('fa-compress'); + } else { + $('#video-player').css({ + 'object-fit': 'contain', + 'max-height': '80vh' + }); + $(this).removeClass('active').find('i').removeClass('fa-compress').addClass('fa-expand'); + } + }); + + // Modal events + $('#videoModal').off('show.bs.modal').on('show.bs.modal', function() { + $('body').addClass('modal-video-open'); + }); + + $('#videoModal').off('hide.bs.modal').on('hide.bs.modal', function() { + if (videoPlayer) { + videoPlayer.pause(); + } + }); + + $('#videoModal').off('hidden.bs.modal').on('hidden.bs.modal', function() { + $('body').removeClass('modal-video-open'); + if (isVideoZoomed) { + isVideoZoomed = false; + $('#video-player').css({ + 'object-fit': 'contain', + 'max-height': '80vh' + }); + $('#btn-video-zoom').removeClass('active').find('i').removeClass('fa-compress').addClass('fa-expand'); + } + }); + } + + /** + * Open modal with a file path (fetches playlist from server) + * @param {string} filePath - Path to the video file + */ + function openWithPath(filePath) { + $.ajax({ + url: '/' + config.package_name + '/ajax/' + config.sub + '/get_playlist?path=' + encodeURIComponent(filePath), + type: 'GET', + dataType: 'json', + success: function(data) { + playlist = data.playlist || []; + currentPlaylistIndex = data.current_index || 0; + currentPlayingPath = filePath; + + var streamUrl = '/' + config.package_name + '/ajax/' + config.sub + '/stream_video?path=' + encodeURIComponent(filePath); + initPlayer(streamUrl); + updatePlaylistUI(); + $('#videoModal').modal('show'); + }, + error: function() { + // Fallback: single file + playlist = [{ name: filePath.split('/').pop(), path: filePath }]; + currentPlaylistIndex = 0; + var streamUrl = '/' + config.package_name + '/ajax/' + config.sub + '/stream_video?path=' + encodeURIComponent(filePath); + initPlayer(streamUrl); + updatePlaylistUI(); + $('#videoModal').modal('show'); + } + }); + } + + /** + * Open modal with a direct stream URL + * @param {string} streamUrl - Direct URL to stream + * @param {string} title - Optional title + */ + function openWithUrl(streamUrl, title) { + playlist = [{ name: title || 'Video', path: streamUrl }]; + currentPlaylistIndex = 0; + initPlayer(streamUrl); + updatePlaylistUI(); + $('#videoModal').modal('show'); + } + + /** + * Open modal with a playlist array + * @param {Array} playlistData - Array of {name, path} objects + * @param {number} startIndex - Index to start playing from + */ + function openWithPlaylist(playlistData, startIndex) { + playlist = playlistData || []; + currentPlaylistIndex = startIndex || 0; + if (playlist.length > 0) { + var filePath = playlist[currentPlaylistIndex].path; + var streamUrl = '/' + config.package_name + '/ajax/' + config.sub + '/stream_video?path=' + encodeURIComponent(filePath); + initPlayer(streamUrl); + updatePlaylistUI(); + $('#videoModal').modal('show'); + } + } + + /** + * Initialize or update Video.js player + * @param {string} streamUrl - URL to play + */ + function initPlayer(streamUrl) { + if (!videoPlayer) { + videoPlayer = videojs('video-player', { + controls: true, + autoplay: false, + preload: 'auto', + fluid: true, + playbackRates: [0.5, 1, 1.5, 2], + controlBar: { + skipButtons: { forward: 10, backward: 10 } + } + }); + + // Auto-next on video end + videoPlayer.on('ended', function() { + var autoNextEnabled = $('#auto-next-checkbox').is(':checked'); + if (autoNextEnabled && currentPlaylistIndex < playlist.length - 1) { + currentPlaylistIndex++; + playVideoAtIndex(currentPlaylistIndex); + } + }); + } + + videoPlayer.src({ type: 'video/mp4', src: streamUrl }); + } + + /** + * Play video at specific playlist index + * @param {number} index - Playlist index + */ + function playVideoAtIndex(index) { + if (index < 0 || index >= playlist.length) return; + currentPlaylistIndex = index; + var item = playlist[index]; + var streamUrl = '/' + config.package_name + '/ajax/' + config.sub + '/stream_video?path=' + encodeURIComponent(item.path); + + if (videoPlayer) { + videoPlayer.src({ type: 'video/mp4', src: streamUrl }); + videoPlayer.play(); + } + + updatePlaylistUI(); + } + + /** + * Update playlist UI (dropdown, external player buttons) + */ + function updatePlaylistUI() { + if (!playlist || playlist.length === 0) return; + + var currentFile = playlist[currentPlaylistIndex]; + + // Update dropdown + var $dropdown = $('#episode-dropdown'); + if ($dropdown.find('option').length !== playlist.length) { + var optionsHtml = ''; + for (var i = 0; i < playlist.length; i++) { + optionsHtml += ''; + } + $dropdown.html(optionsHtml); + } + $dropdown.val(currentPlaylistIndex); + + // Update external player buttons + updateExternalPlayerButtons(); + } + + /** + * Update external player buttons + */ + function updateExternalPlayerButtons() { + var currentFile = playlist[currentPlaylistIndex]; + if (!currentFile || !currentFile.path) return; + + var streamUrl = window.location.origin + '/' + config.package_name + '/ajax/' + config.sub + '/stream_video?path=' + encodeURIComponent(currentFile.path); + var filename = currentFile.name || 'video.mp4'; + var encodedUrl = encodeURIComponent(streamUrl); + var doubleEncodedUrl = encodeURIComponent(encodedUrl); + + var imgBase = '/' + config.package_name + '/static/img/players/'; + + var players = [ + { name: 'IINA', img: imgBase + 'iina.webp', url: 'iina://weblink?url=' + encodedUrl }, + { name: 'PotPlayer', img: imgBase + 'potplayer.webp', url: 'potplayer://' + streamUrl }, + { name: 'VLC', img: imgBase + 'vlc.webp', url: 'vlc://' + streamUrl }, + { name: 'nPlayer', img: imgBase + 'nplayer.webp', url: 'nplayer-' + streamUrl }, + { name: 'Infuse', img: imgBase + 'infuse.webp', url: 'infuse://x-callback-url/play?url=' + streamUrl }, + { name: 'OmniPlayer', img: imgBase + 'omniplayer.webp', url: 'omniplayer://weblink?url=' + streamUrl }, + { name: 'MX Player', img: imgBase + 'mxplayer.webp', url: 'intent:' + streamUrl + '#Intent;package=com.mxtech.videoplayer.ad;S.title=' + encodeURIComponent(filename) + ';end' }, + { name: 'MPV', img: imgBase + 'mpv.webp', url: 'mpv://' + doubleEncodedUrl }, + ]; + + var html = ''; + for (var i = 0; i < players.length; i++) { + var p = players[i]; + html += ''; + html += '' + p.name + ''; + html += ''; + } + + $('#external-player-buttons').html(html); + } + + /** + * Close the modal + */ + function close() { + $('#videoModal').modal('hide'); + } + + /** + * Get current playlist + */ + function getPlaylist() { + return playlist; + } + + /** + * Get current index + */ + function getCurrentIndex() { + return currentPlaylistIndex; + } + + // Public API + return { + init: init, + openWithPath: openWithPath, + openWithUrl: openWithUrl, + openWithPlaylist: openWithPlaylist, + playVideoAtIndex: playVideoAtIndex, + close: close, + getPlaylist: getPlaylist, + getCurrentIndex: getCurrentIndex + }; +})(); diff --git a/templates/anime_downloader/components/video_modal.html b/templates/anime_downloader/components/video_modal.html new file mode 100644 index 0000000..94d773c --- /dev/null +++ b/templates/anime_downloader/components/video_modal.html @@ -0,0 +1,61 @@ + + + + + + + + + + + + diff --git a/templates/anime_downloader_linkkf_list.html b/templates/anime_downloader_linkkf_list.html index 0e39f31..2974465 100644 --- a/templates/anime_downloader_linkkf_list.html +++ b/templates/anime_downloader_linkkf_list.html @@ -3,9 +3,9 @@ + - - + {% endblock %} \ No newline at end of file