Replace legacy branding with Kaizoku
This commit is contained in:
+27
-58
@@ -38,16 +38,13 @@ def configured_cli_command(env_name, executable_name):
|
||||
|
||||
|
||||
KAIZOKU_DOWNLOADER = configured_cli_command("KAIZOKU_DOWNLOADER_BIN", "provider_downloader.py")
|
||||
ANI_CLI = configured_cli_command("ANI_CLI_BIN", "ani-cli")
|
||||
ANIPY_CLI = configured_cli_command("ANIPY_CLI_BIN", "anipy-cli")
|
||||
ANIMDL = configured_cli_command("ANIMDL_BIN", "animdl")
|
||||
APP_NAME = "Kaizoku"
|
||||
VERSION_FILE = PROJECT_ROOT / "VERSION"
|
||||
CHANGELOG_FILE = PROJECT_ROOT / "CHANGELOG.md"
|
||||
ALLANIME_BASE = "allanime.day"
|
||||
ALLANIME_API = f"https://api.{ALLANIME_BASE}"
|
||||
ALLANIME_REFERER = "https://allmanga.to"
|
||||
ALLMANGA_SITE_BASE = "https://allmanga.to"
|
||||
METADATA_API_HOST = "allanime.day"
|
||||
METADATA_API = f"https://api.{METADATA_API_HOST}"
|
||||
METADATA_REFERER = "https://allmanga.to"
|
||||
METADATA_SITE_BASE = "https://allmanga.to"
|
||||
ANIMESCHEDULE_API = "https://animeschedule.net/api/v3"
|
||||
ANIMESCHEDULE_IMAGE_BASE = "https://img.animeschedule.net/production/assets/public/img/"
|
||||
ANIDB_TITLES_URL = "https://anidb.net/api/anime-titles.xml.gz"
|
||||
@@ -125,16 +122,24 @@ def env_flag(name, default=False):
|
||||
return str(raw).strip().lower() in {"1", "true", "yes", "on"}
|
||||
|
||||
|
||||
def env_value(name, default="", aliases=()):
|
||||
for key in (name, *aliases):
|
||||
raw = os.environ.get(key)
|
||||
if raw is not None and str(raw).strip():
|
||||
return str(raw).strip()
|
||||
return default
|
||||
|
||||
|
||||
def debug_enabled():
|
||||
return DEBUG_MODE or env_flag("ANI_CLI_WEB_DEBUG")
|
||||
return DEBUG_MODE or env_flag("KAIZOKU_DEBUG")
|
||||
|
||||
|
||||
def remote_access_allowed():
|
||||
return env_flag("ANI_CLI_WEB_ALLOW_REMOTE")
|
||||
return env_flag("KAIZOKU_ALLOW_REMOTE")
|
||||
|
||||
|
||||
def remote_access_username(config=None):
|
||||
configured = str(os.environ.get("ANI_CLI_WEB_AUTH_USERNAME") or "").strip()
|
||||
configured = env_value("KAIZOKU_AUTH_USERNAME")
|
||||
if configured:
|
||||
return configured
|
||||
if isinstance(config, dict):
|
||||
@@ -143,7 +148,7 @@ def remote_access_username(config=None):
|
||||
|
||||
|
||||
def remote_access_password(config=None):
|
||||
configured = str(os.environ.get("ANI_CLI_WEB_AUTH_PASSWORD") or "").strip()
|
||||
configured = env_value("KAIZOKU_AUTH_PASSWORD")
|
||||
if configured:
|
||||
return configured
|
||||
if isinstance(config, dict):
|
||||
@@ -270,11 +275,11 @@ def clear_remote_access_sessions(config=None):
|
||||
|
||||
|
||||
def background_workers_enabled():
|
||||
return not env_flag("ANI_CLI_WEB_DISABLE_WORKER")
|
||||
return not env_flag("KAIZOKU_DISABLE_WORKER")
|
||||
|
||||
|
||||
def job_stdout_enabled():
|
||||
return env_flag("ANI_CLI_WEB_JOB_STDOUT")
|
||||
return env_flag("KAIZOKU_JOB_STDOUT")
|
||||
|
||||
|
||||
def client_address_is_local(host):
|
||||
@@ -302,8 +307,9 @@ def debug_log(event, **fields):
|
||||
|
||||
|
||||
def default_download_dir():
|
||||
if os.environ.get("ANI_CLI_DOWNLOAD_DIR"):
|
||||
return os.environ["ANI_CLI_DOWNLOAD_DIR"]
|
||||
configured = env_value("KAIZOKU_DOWNLOAD_DIR")
|
||||
if configured:
|
||||
return configured
|
||||
home_downloads = Path.home() / "Downloads" / "Anime"
|
||||
if os.access(home_downloads.parent if home_downloads.parent.exists() else Path.home(), os.W_OK):
|
||||
return str(home_downloads)
|
||||
@@ -312,9 +318,8 @@ def default_download_dir():
|
||||
|
||||
DEFAULT_CONFIG = {
|
||||
"download_dir": default_download_dir(),
|
||||
"mode": os.environ.get("ANI_CLI_MODE", "sub"),
|
||||
"quality": os.environ.get("ANI_CLI_QUALITY", "best"),
|
||||
"anipy_cli_fallback_enabled": False,
|
||||
"mode": env_value("KAIZOKU_MODE", "sub"),
|
||||
"quality": env_value("KAIZOKU_QUALITY", "best"),
|
||||
"download_methods": ["kaizoku"],
|
||||
"provider": "anikoto",
|
||||
"watchlist_auto_refresh_enabled": False,
|
||||
@@ -328,8 +333,8 @@ DEFAULT_CONFIG = {
|
||||
"jellyfin_movie_dir": "",
|
||||
"discord_webhook_url": "",
|
||||
"discord_webhook_events": [],
|
||||
"auth_username": str(os.environ.get("ANI_CLI_WEB_AUTH_USERNAME") or "").strip(),
|
||||
"auth_password": str(os.environ.get("ANI_CLI_WEB_AUTH_PASSWORD") or "").strip(),
|
||||
"auth_username": env_value("KAIZOKU_AUTH_USERNAME"),
|
||||
"auth_password": env_value("KAIZOKU_AUTH_PASSWORD"),
|
||||
}
|
||||
PRIVATE_CONFIG_KEYS = {"auth_username", "auth_password"}
|
||||
|
||||
@@ -339,7 +344,7 @@ def now_iso():
|
||||
|
||||
|
||||
def project_app_root():
|
||||
configured = str(os.environ.get("ANI_CLI_WEB_STATE_ROOT") or "").strip()
|
||||
configured = env_value("KAIZOKU_STATE_ROOT")
|
||||
if configured:
|
||||
return Path(configured).expanduser()
|
||||
return PROJECT_ROOT / ".kaizoku"
|
||||
@@ -473,7 +478,6 @@ def normalize_config(data):
|
||||
if quality.endswith("p") and quality[:-1].isdigit():
|
||||
quality = quality[:-1]
|
||||
download_dir = str(config.get("download_dir") or DEFAULT_CONFIG["download_dir"])
|
||||
anipy_cli_fallback_enabled = config.get("anipy_cli_fallback_enabled")
|
||||
download_methods = config.get("download_methods")
|
||||
auto_refresh_enabled = config.get("watchlist_auto_refresh_enabled")
|
||||
auto_refresh_minutes = config.get("watchlist_auto_refresh_minutes")
|
||||
@@ -491,10 +495,6 @@ def normalize_config(data):
|
||||
auth_username = str(config.get("auth_username") or "").strip()
|
||||
auth_password = str(config.get("auth_password") or "").strip()
|
||||
|
||||
if isinstance(anipy_cli_fallback_enabled, str):
|
||||
anipy_cli_fallback_enabled = anipy_cli_fallback_enabled.strip().lower() in {"1", "true", "yes", "on"}
|
||||
else:
|
||||
anipy_cli_fallback_enabled = bool(anipy_cli_fallback_enabled)
|
||||
if isinstance(download_methods, str):
|
||||
method_values = [part.strip().lower() for part in re.split(r"[\s,]+", download_methods) if part.strip()]
|
||||
elif isinstance(download_methods, list):
|
||||
@@ -541,7 +541,6 @@ def normalize_config(data):
|
||||
config["quality"] = quality if quality in QUALITY_CHOICES else "best"
|
||||
config["download_dir"] = str(Path(download_dir).expanduser())
|
||||
config["download_methods"] = ["kaizoku"]
|
||||
config["anipy_cli_fallback_enabled"] = False
|
||||
provider = str(config.get("provider") or DEFAULT_CONFIG.get("provider") or "anikoto").strip().lower()
|
||||
config["provider"] = provider if provider in PROVIDER_CHOICES else "anikoto"
|
||||
config["watchlist_auto_refresh_enabled"] = auto_refresh_enabled
|
||||
@@ -577,7 +576,7 @@ def sanitize_public_config(config):
|
||||
|
||||
|
||||
def _env_remote_path_roots():
|
||||
raw = str(os.environ.get("ANI_CLI_WEB_REMOTE_PATH_ROOTS") or "").strip()
|
||||
raw = env_value("KAIZOKU_REMOTE_PATH_ROOTS")
|
||||
if not raw:
|
||||
return []
|
||||
roots = []
|
||||
@@ -1122,26 +1121,6 @@ def extract_episode_from_filename(path):
|
||||
return match.group(1) if match else None
|
||||
|
||||
|
||||
def episode_values_from_spec(value):
|
||||
spec = str(value or "").strip()
|
||||
if not spec:
|
||||
return []
|
||||
values = []
|
||||
for part in re.split(r"\s+", spec):
|
||||
if not part:
|
||||
continue
|
||||
if "-" in part:
|
||||
start_text, end_text = [piece.strip() for piece in part.split("-", 1)]
|
||||
if start_text.isdigit() and end_text.isdigit():
|
||||
start = int(start_text, 10)
|
||||
end = int(end_text, 10)
|
||||
if start <= end:
|
||||
values.extend(str(number) for number in range(start, end + 1))
|
||||
continue
|
||||
values.append(part)
|
||||
return values
|
||||
|
||||
|
||||
def unique_destination(path):
|
||||
if not path.exists():
|
||||
return path
|
||||
@@ -1170,15 +1149,11 @@ def finalize_library_files(job):
|
||||
|
||||
moved = []
|
||||
fallback_episode = 1
|
||||
requested_episode_values = episode_values_from_spec(job.get("episodes"))
|
||||
backend = str(job.get("download_backend") or "").strip().lower()
|
||||
for source in files:
|
||||
if media_type == "movie":
|
||||
final_name = f"{library_name}{source.suffix}"
|
||||
else:
|
||||
ep = None
|
||||
if backend in {"anipy-cli", "animdl"} and requested_episode_values:
|
||||
ep = requested_episode_values.pop(0)
|
||||
if ep is None:
|
||||
ep = extract_episode_from_filename(source)
|
||||
if ep is None:
|
||||
@@ -1255,12 +1230,6 @@ def normalize_result_index(value):
|
||||
return index
|
||||
|
||||
|
||||
def anipy_search_spec(job):
|
||||
query = re.sub(r"\s+", " ", str(job.get("query") or "").replace(":", " ")).strip()
|
||||
mode = "dub" if str(job.get("mode") or "").strip().lower() == "dub" else "sub"
|
||||
return f"{query}:{job['episodes']}:{mode}"
|
||||
|
||||
|
||||
def command_for_job(job, backend="kaizoku", download_path=None):
|
||||
show_id = str(job.get("show_id") or job.get("query") or "").strip()
|
||||
provider = str(job.get("provider") or "").strip().lower()
|
||||
|
||||
Reference in New Issue
Block a user