Skip to content

ProtoFS v0.4.2

Choose a tag to compare

@github-actions github-actions released this 24 Sep 18:06
· 17 commits to main since this release

πŸ“ Documentation & Community

πŸš€ Added

  • Multi-ABI Android APK Release Artifacts:
    • Configured Android build and release workflows to build and publish dedicated arm64-v8a, armv7 (armeabi-v7a), and universal APKs (ProtoFS_v0.4.2_arm64-v8a.apk, ProtoFS_v0.4.2_armv7.apk, ProtoFS_v0.4.2_universal.apk).
  • Automated Changelog Extraction in Release CI:

πŸ”§ Changed

  • User-Friendly Account Connection Label:
    • Changed the account button status display in the sidebar from "Testing..." to "Connecting..." while MTProto connection checks are in progress.
  • Versioned Release CI Asset Packaging:
    • Configured release workflow to inject the dynamic version string into binary and APK artifact filenames (e.g., protofs-cli-v0.4.1-windows-x86_64.exe, protofs-portable-v0.4.1-windows-x86_64.exe, ProtoFS_v0.4.1_android.apk).
    • Published Windows CLI, Portable GUI, and NSIS/MSI installers (.exe / .msi) directly as standalone assets without zip archive wrapping.
  • SSOT Version Bump Synchronization:
    • Enhanced scripts/bump-version.js to automatically verify and synchronize frontend/src/utils/version.ts alongside root package.json, Cargo.toml, frontend/package.json, and tauri.conf.json.

πŸ› Fixed

  • Android NDK Context Initialization for MTProto & DNS Resolution:
    • Resolved Telegram login code request failure on Android where requests were dropped immediately due to ndk-context panicking (android context was not initialized).
    • Added JNI bridge Java_com_protofs_app_MainActivity_initNdkContext in crates/protofs-tauri/src/lib.rs and invoked initNdkContext(applicationContext) in MainActivity.kt on Android startup to initialize JavaVM and Context pointers for hickory-resolver / ndk-context.
  • Android APK Build & CI Packaging:
    • Fixed root Tauri CLI script bindings for Gradle tasks and streamlined Android APK CI release workflow.
  • Linux and Cross-Platform Build:
    • Fixed Linux and cross-platform compilation errors and linter warnings.
  • Real-Time Transfer Queue Tracking & Live Preview Synchronization:
    • Fixed upload popup getting permanently stuck in "uploading" by synchronizing transferId across frontend useUploadManager.ts and Tauri backend transfers.rs.
    • Resolved event matching in useTransferListener.ts so completed and in-flight transfer progress events accurately match the active item by ID and name.
    • Added full queued items visibility (status: 'queued') so all batch files appear immediately in the transfer queue drawer with accurate overall queue progress and remaining item counts.
  • Batch Upload Completion Flush & Pinned Manifest In-Place Editing:
    • Resolved intermediate manifest uploads during large batch uploads (e.g. 1k+ files) by updating in-memory VfsTree and SQLite cache in real-time and deferring the remote manifest upload to a single final flush upon queue completion (useUploadManager.ts).
    • Fixed candidate message resolution in manifest.rs by searching for #protofs_manifest_v1 across channel history when recent message history consists of uploaded files.
    • Ensured do_update_pinned_manifest edits the existing pinned manifest message in-place with messages.EditMessage and automatically deletes any duplicate manifest messages, preventing channel clutter.
  • MTProto Transport Framing Translation & Padding Stripping in LocalProxyBridge:
    • Resolved the persistent "Connecting..." status where MTProto proxies connected successfully at the TCP/TLS level with active ping latency, but Telegram authentication and session requests never completed.
    • Implemented bidirectional transport framing translation between Grammers' TCP Full transport format ([full_len (4)] [seq_no (4)] [payload] [crc32 (4)]) and upstream MTProxy Intermediate / Padded Intermediate format ([inter_len (4)] [payload]).
    • Added dynamic MTProto padding stripper in LocalProxyBridge to strip upstream random padding (0–15 bytes) from Padded Intermediate responses before returning Full transport frames, preventing AES-IGE decryption failures in Grammers.
    • Aligned AES-256-CTR keystream offsets across the initial 64-byte Obfuscated2 header and ensured correct transport protocol tag selection (0xdddddddd vs 0xeeeeeeee) based on the proxy secret format.
  • End-to-End MTProto & Telegram Client Proxy Routing:
    • Implemented in-process local proxy bridge (LocalProxyBridge) and configured grammers-mtsender proxy parameters to route all active MTProto sessions, authentication handshakes, QR logins, channel queries, and background sync traffic through active MTProto (Fake-TLS / DD), HTTP CONNECT, and SOCKS5 proxies.
  • Automatic Startup Proxy Latency Measurement:
    • Automatically measured and displayed active proxy round-trip latency (ms) in the header badge and auth modal upon opening the application without requiring a manual "Test Connection" button click.
  • Active Proxy Propagation for Session Reconnections:
    • Fixed account connection check and session restoration failing under proxy environments. MTProto session reconnections (check_telegram_connection_command, startup, and account switches) now consistently route through the active proxy configuration with a fail-fast 5–10s timeout instead of attempting direct connection.
  • Proxy Diagnostic Draft Deserialization:
    • Resolved missing field 'type' error when running proxy connection diagnostics by adding DraftProxyConfig to crates/protofs-tauri/src/commands/proxy.rs and mapping frontend proxy drafts into core ProxyConfig instances safely.
  • Disaster Recovery False Positive on Connection Loss:
    • Prevented Disaster Recovery mode and channel deleted warnings from triggering when offline, disconnected, or experiencing network/proxy restrictions. Channel inaccessibility checks now only execute when authenticated and actively connected to Telegram.
  • Dynamic Application Version in Sidebar:
    • Fixed hardcoded v0.3 badge in the sidebar header to dynamically read the application version (v0.4.1) via getAppVersion().