add RTL/Arabic+Persian(new) support, gallery controls, backups, and download improvements - #115
Open
WasewaseX wants to merge 28 commits into
Open
add RTL/Arabic+Persian(new) support, gallery controls, backups, and download improvements#115WasewaseX wants to merge 28 commits into
WasewaseX wants to merge 28 commits into
Conversation
…ls, AsuraScans extractor
…e controls, incognito mode, history backup
…, restore backup size guard
…, drop dead legacy-key migration, register cancel_download_item
…, tsc -b, cargo check all pass)
…ntent - Batch processing invoked 'execute_ffmpeg_batch' which never existed in Rust, so every batch run failed silently at runtime. The ffmpeg job runner is now shared and a registered execute_ffmpeg_batch command derives the output path and job id server-side. - The subtitle dialog's 'download_subtitle_content' invoke had no backend implementation; it now runs yt-dlp with the configured cookies/proxy and returns the subtitle file content.
Auto subtitle mode hardcoded --sub-langs all, discarding the user's language selection (vanloctech#116). User-selected languages are now passed through; 'all' remains the fallback when nothing is set.
External ingestion hardcoded mp4/mp3 and ignored the user's global format choice such as MKV (vanloctech#117). resolveExternalFormat keeps the user's format when valid for the media type and falls back to the previous default otherwise.
reqwest Client::new() has no timeouts, so a dead connection could block the getUpdates long-poll loop forever, making the bot appear broken (vanloctech#118). All Telegram API calls now share a client with explicit connect and total timeouts so the polling loop can back off and recover.
Download failures like 'Unsupported URL' / 'no video formats' now map to a dedicated 'unsupported' error class with a colored badge and an action hint: update yt-dlp in Settings > Engines, or use the Gallery tab for manga/image sites. Keys added for en and fa (authoritative locales); others fall back to en.
- scripts/check-tauri-commands.mjs statically verifies that every frontend invoke() literal resolves to a command registered in invoke_handler! and that every #[tauri::command] is registered. This catches the cancel_download_item / execute_ffmpeg_batch class of bugs at CI time instead of at runtime. - Dev builds now probe safe, read-only commands at startup and warn on failure (production bundles are unaffected). - Wired into package.json (check:commands) and ci.yml.
- beta-release.yml builds installers for Windows (NSIS/MSI), macOS Apple Silicon + Intel (DMG) and Linux (deb/AppImage) on every v* tag push and attaches them to an automatically created BETA prerelease with SHA256SUMS, SmartScreen/Gatekeeper guidance and beta warnings. - tauri.beta.conf.json disables updater artifacts so no signing key is required on this fork. - build.yml keeps requiring signing secrets; its tag trigger is disabled in favor of beta-release.yml.
download_ffmpeg/download_deno renamed their target-path bindings to _ffmpeg_path/_deno_path (to silence unused warnings on Windows) but the unix chmod blocks still referenced the unprefixed names, breaking Linux/macOS compilation. Bindings are now cfg-split per OS and the unix blocks consistently use the unprefixed path.
stop_gallery_download can only set the stop flag when no PID is registered yet; download_gallery then unconditionally cleared that flag right after registering the PID, losing any stop request that arrived between spawn() and registration. Clear stale flags before spawn instead (mirrors download_video clearing CANCEL_ITEM_IDS), and after registering the PID re-check the flag: kill the fresh child and re-arm the flag so the run is reported as stopped, not failed.
invoke<string>(`rollback_${engine}`) was invisible to both the
quoted-literal regex and the +-concatenation exemption, so the whole
rollback_* family was uncovered. Extract the static prefix from
template-literal calls and require at least one registered command to
start with it; print the resolved family in the summary.
Keep the (beta) designation and the report-an-issue pointer, but stop branding releases as untested; also attach the checkout with: block to its step in the release job.
A redirect written inside a ${var:+word} alternative is not parsed as
a redirection — bash treats '>> RELEASE_BODY.md' as ordinary words, so
the changelog was echoed to the job log instead of being appended and
the 'What's in this beta' section shipped empty on v0.20.4-beta.2.
Use an explicit if + printf '%s\n' "$CHANGELOG" >> file.
Upstream hardcodes --force-overwrites on every download to avoid HTTP 416 from stale .part files. The flag also overwrites .part files, so stopping a download and starting it again always restarted from zero, and a finished file was fully re-downloaded when re-queued. yt-dlp resumes .part files by default and recovers from HTTP 416 by restarting the affected file itself, so drop the flag and keep yt-dlp's defaults.
YouTube serves auto-generated Farsi subtitles, but the picker list did not include 'fa' (same list as upstream), so there was no way to select it from the UI. The backend already passes any language code through to --sub-langs.
Url::set_query percent-encodes the <redacted> marker into %3Credacted%3E, so compose the masked URL manually to keep the readable marker; credentials are still stripped. The non-allowlisted-flag test used --output, which the blocklist rejects first with a different message; use --write-subs, which falls through to the allowlist check. These tests only run in the PR CI job (release builds do not run cargo test), which is how they slipped past.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Hey man I was working on YouTube downloaders and, after a lot of searching, I came across your project. It was surprisingly close to the kind of project I had in mind, so I got interested in it and wanted to contribute instead of only using it.
I went through the project and noticed some bugs, missing features, and a few things I thought could be improved. I ended up fixing those and adding some features that I felt fit the project.
I’ve tried to keep the existing structure and behavior intact, while fixing the issues I found and adding the improvements.
I hope some of these changes are useful. This is my first contribution to the project, so I’d really appreciate any feedback or suggestions for changes. I also have some more Ideas to share but those are for later