refactor: the native downloaders share one download loop, file record and seen-ledger key; a clean walk marks its credential verified
CI and images / lint (push) Failing after 2s
CI and images / extension-version (push) Successful in 2s
CI and images / extension-test (push) Successful in 23s
CI and images / frontend-build (push) Successful in 26s
CI and images / backend-lint-and-test (push) Successful in 53s
CI and images / integration (push) Successful in 2m50s
CI and images / sign-extension (push) Skipped
CI and images / build-web (push) Skipped
CI and images / smoke-web (push) Skipped
CI and images / promote (push) Skipped
CI and images / refresh-dev (push) Skipped
CI and images / unattended-failure (push) Skipped
CI and images / build-agent (push) Skipped
CI and images / lint (push) Failing after 2s
CI and images / extension-version (push) Successful in 2s
CI and images / extension-test (push) Successful in 23s
CI and images / frontend-build (push) Successful in 26s
CI and images / backend-lint-and-test (push) Successful in 53s
CI and images / integration (push) Successful in 2m50s
CI and images / sign-extension (push) Skipped
CI and images / build-web (push) Skipped
CI and images / smoke-web (push) Skipped
CI and images / promote (push) Skipped
CI and images / refresh-dev (push) Skipped
CI and images / unattended-failure (push) Skipped
CI and images / build-agent (push) Skipped
Patreon, SubscribeStar and Discord each carried their own copy of the same per-post download loop, file record and seen-ledger key, and every copy was another place a fix could be missed. - BaseNativeDownloader runs one post's files: the seen and on-disk skips, the mid-post time-box, pacing, validation and the per-file sidecar. Each platform overrides only where its layout differs: Discord's channel folder, file names and message-id sidecar, and Patreon's Mux video through yt-dlp. - One MediaItem and one ledger_key in native_ingest_common replace the three per-client copies. Keys are unchanged, except that a SubscribeStar file with no gallery id is now keyed by its filename instead of an empty id. - DownloadResult, ErrorType and the run-stats and tier-gated helpers move from gallery_dl.py, which now serves only HentaiFoundry, to download_result.py. The unused delegator methods on GalleryDLService go. - The download lock's platform list is the native-ingester list, not a copy. - A walk that used a credential and finished with no error type stamps that credential's last-verified time, so the credentials page shows when the account last worked. A tier-limited walk does not count: an expired session hides paid posts the same way. - The extension no longer clears a retired pixiv token on startup. - Two comments that still described every download as gallery-dl now name both backends. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -13,8 +13,8 @@ from pathlib import Path
|
||||
|
||||
import requests
|
||||
|
||||
from backend.app.services.gallery_dl import DownloadResult, ErrorType
|
||||
from backend.app.services.native_ingest_common import post_dir_name
|
||||
from backend.app.services.download_result import DownloadResult, ErrorType
|
||||
from backend.app.services.native_ingest_common import ledger_key, post_dir_name
|
||||
from backend.app.services.subscribestar_client import (
|
||||
MediaItem,
|
||||
SubscribeStarAPIError,
|
||||
@@ -26,10 +26,7 @@ from backend.app.services.subscribestar_client import (
|
||||
_split_creator_url,
|
||||
)
|
||||
from backend.app.services.subscribestar_downloader import SubscribeStarDownloader
|
||||
from backend.app.services.subscribestar_ingester import (
|
||||
SubscribeStarIngester,
|
||||
_ledger_key,
|
||||
)
|
||||
from backend.app.services.subscribestar_ingester import SubscribeStarIngester
|
||||
from backend.app.utils.sidecar import find_sidecar
|
||||
|
||||
_PNG_HEAD = b"\x89PNG\r\n\x1a\n"
|
||||
@@ -489,12 +486,12 @@ def test_skip_seen_does_not_download(tmp_path):
|
||||
# -- ingester ----------------------------------------------------------------
|
||||
|
||||
def test_ledger_key_prefers_filehash_then_post_media():
|
||||
assert _ledger_key(_img("a.jpg")) == "111:9001" # no filehash → post:media
|
||||
assert ledger_key(_img("a.jpg")) == "111:9001" # no filehash → post:media
|
||||
hashed = MediaItem(
|
||||
url="u", filename="a.jpg", kind="image", filehash="deadbeef",
|
||||
post_id="111", media_id="9001",
|
||||
)
|
||||
assert _ledger_key(hashed) == "deadbeef"
|
||||
assert ledger_key(hashed) == "deadbeef"
|
||||
|
||||
|
||||
def _ingester(tmp_path):
|
||||
|
||||
Reference in New Issue
Block a user