Merge pull request #3 from TonyBlur/codex/rename-project-to-mytube-and-update-references-m4byy1

more fixes
This commit is contained in:
TonyBlu 2026-05-01 13:24:32 +08:00 committed by GitHub
commit 5569550398
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 41 additions and 42 deletions

View file

@ -65,6 +65,10 @@ You can also load variables from files:
* Docker CLI supports `--env-file /path/to/.env`.
* The container entrypoint auto-loads `/app/.env` if present, and also loads a custom file when `ENV_FILE` points to it.
You can also load variables from files:
* Docker CLI supports `--env-file /path/to/.env`.
* The container entrypoint auto-loads `/app/.env` if present, and also loads a custom file when `ENV_FILE` points to it.
### ⬇️ Download Behavior
* __MAX_CONCURRENT_DOWNLOADS__: Max simultaneous downloads. Defaults to `3`.

View file

@ -448,50 +448,53 @@ def _migrate_legacy_request(post: dict) -> dict:
public_visit_downloads: dict[str, set[str]] = {}
public_download_owner: dict[str, str] = {}
public_download_owner_by_key: dict[str, str] = {}
public_download_owner_by_id: dict[str, str] = {}
public_download_owner_by_key: dict[str, str] = {}
public_visit_sids: dict[str, set[str]] = {}
public_sid_visit: dict[str, str] = {}
def _register_public_download(visit_id: str, owner_key: str):
if not visit_id or not owner_key:
def _register_public_download(visit_id: str, url: str):
if not visit_id or not url:
return
public_visit_downloads.setdefault(visit_id, set()).add(owner_key)
public_download_owner[owner_key] = visit_id
public_visit_downloads.setdefault(visit_id, set()).add(url)
public_download_owner[url] = visit_id
def _forget_public_download(owner_key: str | None = None, *, dl_id: str | None = None):
def _register_public_download_key(visit_id: str, dl_key: str | None):
if not visit_id or not dl_key:
return
public_download_owner_by_key[dl_key] = visit_id
def _forget_public_download(url: str | None = None, *, dl_id: str | None = None, dl_key: str | None = None):
visit_id = None
keys_to_remove = set()
if dl_id:
visit_id = public_download_owner_by_id.pop(dl_id, None)
keys_to_remove.add(dl_id)
if owner_key:
visit_id = visit_id or public_download_owner_by_key.pop(owner_key, None)
keys_to_remove.add(owner_key)
if owner_key and visit_id is None:
visit_id = public_download_owner.pop(owner_key, None)
if visit_id is None:
for key in list(keys_to_remove):
owner = public_download_owner.pop(key, None)
visit_id = visit_id or owner
if visit_id is None and dl_key:
visit_id = public_download_owner_by_key.pop(dl_key, None)
if visit_id is None and url:
visit_id = public_download_owner.pop(url, None)
if not visit_id:
return
owned = public_visit_downloads.get(visit_id)
if not owned:
urls = public_visit_downloads.get(visit_id)
if not urls:
return
for key in keys_to_remove:
owned.discard(key)
if not owned:
if url:
urls.discard(url)
if not urls:
public_visit_downloads.pop(visit_id, None)
async def _emit_download_event(event: str, payload, *, owner_key: str | None = None, url: str | None = None, dl_id: str | None = None):
async def _emit_download_event(event: str, payload, *, url: str | None = None, dl_id: str | None = None, dl_key: str | None = None):
if not config.PUBLIC_MODE:
await sio.emit(event, payload)
return
visit_id = (public_download_owner_by_id.get(dl_id) if dl_id else None) or (public_download_owner_by_key.get(owner_key) if owner_key else None) or (public_download_owner.get(owner_key) if owner_key else None) or (public_download_owner.get(url) if url else None)
visit_id = (
(public_download_owner_by_id.get(dl_id) if dl_id else None)
or (public_download_owner_by_key.get(dl_key) if dl_key else None)
or (public_download_owner.get(url) if url else None)
)
if not visit_id:
return
for sid in list(public_visit_sids.get(visit_id, set())):
@ -507,35 +510,28 @@ class Notifier(DownloadQueueNotifier):
async def added(self, dl):
log.info(f"Notifier: Download added - {dl.title}")
visit_id = public_download_owner.get(dl.url)
owner_key = getattr(dl, 'key', None)
if visit_id and owner_key:
public_download_owner_by_key[owner_key] = visit_id
public_download_owner[owner_key] = visit_id
public_visit_downloads.setdefault(visit_id, set()).add(owner_key)
if visit_id:
public_download_owner_by_id[dl.id] = visit_id
public_download_owner[dl.id] = visit_id
public_visit_downloads.setdefault(visit_id, set()).add(dl.id)
await _emit_download_event('added', serializer.encode(dl), owner_key=owner_key, url=dl.url, dl_id=dl.id)
_register_public_download_key(visit_id, getattr(dl, 'key', None))
await _emit_download_event('added', serializer.encode(dl), url=dl.url, dl_id=dl.id, dl_key=getattr(dl, 'key', None))
async def updated(self, dl):
log.debug(f"Notifier: Download updated - {dl.title}")
await _emit_download_event('updated', serializer.encode(dl), owner_key=getattr(dl, 'key', None), url=dl.url, dl_id=dl.id)
await _emit_download_event('updated', serializer.encode(dl), url=dl.url, dl_id=dl.id, dl_key=getattr(dl, 'key', None))
async def completed(self, dl):
log.info(f"Notifier: Download completed - {dl.title}")
owner_key = getattr(dl, 'key', None)
await _emit_download_event('completed', serializer.encode(dl), owner_key=owner_key, url=dl.url, dl_id=dl.id)
_forget_public_download(owner_key or dl.url, dl_id=dl.id)
await _emit_download_event('completed', serializer.encode(dl), url=dl.url, dl_id=dl.id, dl_key=getattr(dl, 'key', None))
_forget_public_download(dl.url, dl_id=dl.id, dl_key=getattr(dl, 'key', None))
async def canceled(self, id):
log.info(f"Notifier: Download canceled - {id}")
await _emit_download_event('canceled', serializer.encode(id), owner_key=id, url=id, dl_id=id)
_forget_public_download(id, dl_id=id)
await _emit_download_event('canceled', serializer.encode(id), url=id, dl_id=id, dl_key=id)
_forget_public_download(id, dl_id=id, dl_key=id)
async def cleared(self, id):
log.info(f"Notifier: Download cleared - {id}")
await _emit_download_event('cleared', serializer.encode(id), owner_key=id, url=id, dl_id=id)
await _emit_download_event('cleared', serializer.encode(id), url=id, dl_id=id)
dqueue = DownloadQueue(config, Notifier())
app.on_startup.append(lambda app: dqueue.initialize())
@ -1073,9 +1069,8 @@ async def disconnect(sid):
return
public_visit_sids.pop(visit_id, None)
owned = list(public_visit_downloads.pop(visit_id, set()))
for key in owned:
public_download_owner.pop(key, None)
public_download_owner_by_key.pop(key, None)
for url in owned:
public_download_owner.pop(url, None)
# remove any lingering id ownership for this visit
for dl_id, owner in list(public_download_owner_by_id.items()):
if owner == visit_id: