Skip to content

v0.2.3

Choose a tag to compare

@github-actions github-actions released this 03 Nov 19:53

What's Changed in v0.2.3

  • 32d85cd fix(core): improve sqlite self-healing, sandbox warmup, and plugin lifecycle resilience
    • DatabaseFactory quarantines and rebuilds a corrupt database instead of failing startup; sandbox workers are refused direct SQLite access.
    • Added SandboxedPluginManager.warmup() and a worker ready-ping; startup grace period raised from 15s to 25s.
    • Crash dialog gains a Repair Database action for database and SQL faults.
    • .pending_delete and .uninstalled artifacts excluded from plugin scans in PluginInit, ActiveProviderRepositoryImpl, and DesktopRepositoryManager.
  • 220bdd7 feat(desktop): sandbox reliability, error recovery dialogs, and details UI refinements
    • Added PluginLoadFailureException with isPermanent classification, plus PluginFailureState and PluginFailureDialog for quarantined plugins.
    • initSecurity no longer pre-initializes DataStore and ProfileManager.
    • App heap capped at 512MB (-Xmx1024m to -Xmx512m); worker tracks in-flight requests and schedules a post-scrape GC job.
    • Update manager verifies checksums.txt SHA-256 before installing; release workflow verifies the downloaded mpv archive against its published SHA-256.
    • Details screen: full web URL action derived from the provider URL, wider play button, recommendations section cleanup.
  • 07caf0f feat(desktop): performance mode — disable blur/haze passes with two-way settings linkage
    • New pref_performance_mode toggle under Settings → Home Feed.
    • Skips haze and blur passes in TopBar, NavigationDock, ContextMenuOverlay, ExploreScreen, ExploreSearchOverlay, DetailsScreen, HomeScreen, and HomeHeroCarousel.
    • EpisodeCardBaker returns early and EpisodeCard renders the raw thumbnail instead of baking a blurred card.
  • ffb238b perf(sandbox): daemonize worker host and harden extension lifecycle
    • Startup grace period raised from 25s to 60s; startup plugin load budget raised from 20s to 45s.
    • Added DNS-over-HTTPS resolver selection with a custom endpoint (DoH URL or plain IP on port 53).
    • Added ExtensionLoader.sandboxUnloadInterceptor so sandbox unloads route through the manager.
  • f591dc5 fix(sandbox): guard plugin lifecycle, refine error classification, and harden file replacement
    • Serialized plugin loads behind pluginLifecycleMutex; loadedPluginPaths pruned to existing files.
    • replaceFileWithRetry retries Files.move with an ATOMIC_MOVE fallback.
    • SandboxedMainApiProxy falls back to structural response types when the worker class is absent from the host classpath.
    • Update reloads now pass forceRetry = true.
  • cb3e596 fix(plugins): harden update, cache cleanup, and unload locking
    • Bytecode cache cleaned from the canonical cache directory; timestamped _<millis>-secure.jar fallbacks removed.
    • Superseded plugin files deleted after a successful install; uninstall matches cache artifacts by exact stem.
    • All tracked plugin classloaders closed on unload.
    • Desktop tests redirected to build/test-data via cloudstream.data.dir so they no longer touch the live profile.
  • b77ab81 fix(plugins): harden update rollback and sandbox validation
    • checkAndApplyPluginUpdates now routes through autoUpdatePlugins, inheriting backup/rollback and update-history recording.
    • PluginFileUtils.resolveRepoDir canonicalizes and rejects blank, dot-only, or escaping repository names.
    • Sandbox worker repository callbacks targeting private, loopback, link-local, or file:// URLs are rejected.
    • AppContainer workers are terminated if Job Object assignment fails.
    • Added regression tests for unsafe repository names, private URLs, and rollback.
  • 8c95861 Make AppContainer sandbox mandatory on Windows
    • Removed PREF_SANDBOX_ENABLED; SandboxedPluginManager.isEnabled() now returns isSupported().
    • pref_sandbox_enabled removed from the protected host key set.
    • Non-Windows platforms keep in-process loading.

Full Changelog: v0.2.2...v0.2.3