v0.2.15: Fix queue item deletion bug
This commit is contained in:
@@ -3,6 +3,9 @@
|
|||||||
FlaskFarm용 범용 다운로드 매니저 플러그인입니다.
|
FlaskFarm용 범용 다운로드 매니저 플러그인입니다.
|
||||||
여러 다운로더 플러그인(YouTube, Anime 등)의 다운로드 요청을 통합 관리하고 큐(Queue)를 제공합니다.
|
여러 다운로더 플러그인(YouTube, Anime 등)의 다운로드 요청을 통합 관리하고 큐(Queue)를 제공합니다.
|
||||||
|
|
||||||
|
## v0.2.15 변경사항 (2026-01-08)
|
||||||
|
- **삭제 로직 버그 수정**: 메모리에 실시간으로 로드된 다운로드 항목을 삭제할 때, 메모리에서 먼저 제거되어 DB 데이터가 남던 순서 오류를 수정했습니다.
|
||||||
|
|
||||||
## v0.2.14 변경사항 (2026-01-07)
|
## v0.2.14 변경사항 (2026-01-07)
|
||||||
- **FFmpeg HLS 안정화**: Ohli24 분산 호스트 환경 대응을 위해 `-http_persistent 0` 및 재연결 옵션(`-reconnect`) 추가.
|
- **FFmpeg HLS 안정화**: Ohli24 분산 호스트 환경 대응을 위해 `-http_persistent 0` 및 재연결 옵션(`-reconnect`) 추가.
|
||||||
- **aria2c 멀티쓰레드 활성화**: `yt-dlp`에서 `aria2c`를 외부 다운로더로 정상 호출하도록 수정하여 고속 분할 다운로드 지원.
|
- **aria2c 멀티쓰레드 활성화**: `yt-dlp`에서 `aria2c`를 외부 다운로더로 정상 호출하도록 수정하여 고속 분할 다운로드 지원.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
title: "GDM"
|
title: "GDM"
|
||||||
package_name: gommi_downloader_manager
|
package_name: gommi_downloader_manager
|
||||||
version: '0.2.15'
|
version: '0.2.16'
|
||||||
description: FlaskFarm 범용 다운로더 큐 - YouTube, 애니24, 링크애니, Anilife 지원
|
description: FlaskFarm 범용 다운로더 큐 - YouTube, 애니24, 링크애니, Anilife 지원
|
||||||
developer: projectdx
|
developer: projectdx
|
||||||
home: https://gitea.yommi.duckdns.org/projectdx/gommi_downloader_manager
|
home: https://gitea.yommi.duckdns.org/projectdx/gommi_downloader_manager
|
||||||
|
|||||||
28
mod_queue.py
28
mod_queue.py
@@ -145,31 +145,27 @@ class ModuleQueue(PluginModuleBase):
|
|||||||
elif command == 'delete':
|
elif command == 'delete':
|
||||||
# 특정 항목 완전 삭제 (메모리 + DB)
|
# 특정 항목 완전 삭제 (메모리 + DB)
|
||||||
download_id = req.form.get('id', '')
|
download_id = req.form.get('id', '')
|
||||||
|
db_id_to_delete = None
|
||||||
|
|
||||||
# 메모리에서 삭제
|
# 1. DB ID 추출 및 메모리 정리
|
||||||
if download_id in self._downloads:
|
if download_id in self._downloads:
|
||||||
self._downloads[download_id].cancel()
|
task = self._downloads[download_id]
|
||||||
|
if hasattr(task, 'db_id'):
|
||||||
|
db_id_to_delete = task.db_id
|
||||||
|
task.cancel()
|
||||||
del self._downloads[download_id]
|
del self._downloads[download_id]
|
||||||
|
|
||||||
# DB에서 삭제 (db_XXX 형태인 경우)
|
# 2. DB에서 삭제 처리
|
||||||
if download_id.startswith('db_'):
|
if download_id.startswith('db_'):
|
||||||
db_id = int(download_id.replace('db_', ''))
|
db_id_to_delete = int(download_id.replace('db_', ''))
|
||||||
|
|
||||||
|
if db_id_to_delete:
|
||||||
try:
|
try:
|
||||||
from .model import ModelDownloadItem
|
from .model import ModelDownloadItem
|
||||||
with F.app.app_context():
|
with F.app.app_context():
|
||||||
F.db.session.query(ModelDownloadItem).filter_by(id=db_id).delete()
|
F.db.session.query(ModelDownloadItem).filter_by(id=db_id_to_delete).delete()
|
||||||
F.db.session.commit()
|
|
||||||
except Exception as e:
|
|
||||||
self.P.logger.error(f'DB Delete Error: {e}')
|
|
||||||
else:
|
|
||||||
# 메모리 기반 ID에서 db_id 추출 시도
|
|
||||||
try:
|
|
||||||
task = self._downloads.get(download_id)
|
|
||||||
if task and hasattr(task, 'db_id') and task.db_id:
|
|
||||||
from .model import ModelDownloadItem
|
|
||||||
with F.app.app_context():
|
|
||||||
F.db.session.query(ModelDownloadItem).filter_by(id=task.db_id).delete()
|
|
||||||
F.db.session.commit()
|
F.db.session.commit()
|
||||||
|
self.P.logger.info(f"Deleted DB item: {db_id_to_delete}")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.P.logger.error(f'DB Delete Error: {e}')
|
self.P.logger.error(f'DB Delete Error: {e}')
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user