diff --git a/README.md b/README.md index edae162..eb779f7 100644 --- a/README.md +++ b/README.md @@ -81,6 +81,12 @@ ## πŸ“ λ³€κ²½ 이λ ₯ (Changelog) +### v0.6.21 (2026-01-07) +- **Linkkf GDM 연동 μˆ˜μ •**: + - GDM μœ„μž„ μ „ μ‹€μ œ 슀트림 URL(m3u8) μΆ”μΆœ λ‘œμ§μ„ κ°•μ œ ν˜ΈμΆœν•˜μ—¬ "Invalid data" 였λ₯˜ ν•΄κ²°. + - Linkkf μ„€μ •μ˜ λ‹€μš΄λ‘œλ“œ 방식 및 μ“°λ ˆλ“œ 수λ₯Ό GDM에 μ „λ‹¬ν•˜λ„λ‘ κ°œμ„ . + - μΆ”μΆœλœ Referer 헀더 및 μžλ§‰ 정보λ₯Ό GDM에 λˆ„λ½ 없이 전달. + ### v0.6.20 (2026-01-07) - **GDM 연동 고도화 및 버그 μˆ˜μ •**: - **App Context 였λ₯˜ ν•΄κ²°**: λ°±κ·ΈλΌμš΄λ“œ μ“°λ ˆλ“œ(일괄 μΆ”κ°€, Camoufox μ„€μΉ˜, μžλ§‰ ν•©μΉ¨)μ—μ„œ λ°œμƒν•˜λ˜ `RuntimeError: Working outside of application context` μˆ˜μ •. diff --git a/info.yaml b/info.yaml index 59f6987..62d58f2 100644 --- a/info.yaml +++ b/info.yaml @@ -1,5 +1,5 @@ title: "μ• λ‹ˆ λ‹€μš΄λ‘œλ”" -version: "0.6.20" +version: "0.6.21" package_name: "anime_downloader" developer: "projectdx" description: "anime downloader" diff --git a/mod_linkkf.py b/mod_linkkf.py index db826e9..a3743ec 100644 --- a/mod_linkkf.py +++ b/mod_linkkf.py @@ -1578,18 +1578,37 @@ class LogicLinkkf(AnimeModuleBase): # 4. Try GDM if available (like Ohli24/Anilife) if ModuleQueue is not None: entity = LinkkfQueueEntity(P, self, episode_info) + + # URL μΆ”μΆœ μˆ˜ν–‰ (GDM μœ„μž„μ„ μœ„ν•΄ ν•„μˆ˜) + try: + entity.prepare_extra() + if not entity.url or entity.url == entity.playid_url: + logger.error("Failed to extract Linkkf video URL") + return "extract_failed" + except Exception as e: + logger.error(f"Linkkf extraction error: {e}") + return "extract_failed" + logger.debug("entity:::> %s", entity.as_dict()) # Save to DB first if db_entity is None: ModelLinkkfItem.append(entity.as_dict()) + # μ„€μ •μ—μ„œ λ‹€μš΄λ‘œλ“œ 방식 및 μ“°λ ˆλ“œ 수 읽기 + download_method = P.ModelSetting.get("linkkf_download_method") or "ytdlp" + download_threads = P.ModelSetting.get_int("linkkf_download_threads") or 16 + + gdm_source_type = "linkkf" + if download_method in ['ytdlp', 'aria2c']: + gdm_source_type = "general" + # Prepare GDM options gdm_options = { "url": entity.url, "save_path": entity.savepath, "filename": entity.filename, - "source_type": "linkkf", + "source_type": gdm_source_type, "caller_plugin": f"{P.package_name}_{self.name}", "callback_id": episode_info["_id"], "title": entity.filename or episode_info.get('title'), @@ -1600,11 +1619,14 @@ class LogicLinkkf(AnimeModuleBase): "episode": entity.epi_queue, "source": "linkkf" }, + "headers": entity.headers, + "subtitles": entity.vtt, + "connections": download_threads, } task = ModuleQueue.add_download(**gdm_options) if task: - logger.info(f"Delegated Linkkf download to GDM: {entity.filename}") + logger.info(f"Delegated Linkkf download to GDM: {entity.filename} (Method: {download_method})") return "enqueue_gdm_success" # 5. Fallback to FfmpegQueue if GDM not available