Files
plezy/pubspec.yaml
T
toluLikesToCode 8740a19f36 feat(player): start Plex transcodes at the resume position (#1817)
A Plex transcode session always starts producing at zero: the decision
request never sent offset=, so any non-zero open - resuming a
transcoded title, or switching from Direct Play to a transcoded
quality mid-playback - opened a session whose produced window begins
at the start of the file and seeked it. mpv immediately requests a
segment the transcoder has not produced, PMS answers 404 for it and
every subsequent segment, and playback buffers forever.

Send offset=<seconds> (6dp) with the decision and start request - the
view offset on initial open, the resolved resume position on every
in-place reload - so the session begins producing at the position the
player consumes first. The playlist timeline is unchanged: an offset
session's media playlist still covers the full title from segment
zero, so the player keeps opening with start: at the resume position
and in-stream seeks work as before.

Before a native player opens an offset playlist, waitForTranscodeReady
walks the master playlist, the media playlist, and the segment
containing the offset, because PMS can publish a manifest before that
segment is fetchable and mpv treats the 404 as an HLS error. The probe
is best-effort: it never fails an open, hands off immediately on HTTP
500 (on the response and exception paths alike) so the server-limit
dialog stays prompt, stops on cancellation, skips itself when the
playlist durations never reach the offset, and stays out of the
endpoint-failover cascade. In-place reloads resolve the replacement
source only after the old stop report has gone out, so Plex cannot use
that stop to terminate the replacement transcode.

close #1840
2026-08-09 06:28:59 +02:00

165 lines
5.1 KiB
YAML

name: plezy
description: "A beautiful Plex and Jellyfin client for Flutter"
publish_to: "none"
version: 2.12.1+127
environment:
sdk: ">=3.12.0 <4.0.0"
flutter: ">=3.44.0"
dependencies:
flutter:
sdk: flutter
clock: ^1.1.2
intl: ^0.20.2
json_annotation: ^4.12.0
shared_preferences: ^2.5.4
cached_network_image_ce: ^4.9.0
http: ^1.2.0
url_launcher: ^6.3.0
uuid: ^4.4.0
window_manager: ^0.5.1
logger: ^2.7.0
package_info_plus: ^9.0.0
device_info_plus: ^12.3.0
provider: ^6.1.2
flex_color_picker: ^3.8.0
qr_flutter: ^4.1.0
slang: ^4.14.0
slang_flutter: ^4.14.0
duration: ^4.0.3
connectivity_plus:
git:
url: https://github.com/fluttercommunity/plus_plugins
ref: bf04cdf66598dc3fca274b8b1db2b92b0bf6b73e
path: packages/connectivity_plus/connectivity_plus
os_media_controls:
git:
url: https://github.com/edde746/media_controls
ref: 75556a968a4a1ebc42fbb8c31942c2418d4326e1
rate_limiter: ^1.0.0
wakelock_plus:
path: packages/wakelock_plus
path_provider: ^2.1.0
path: ^1.9.0
universal_gamepad: ^1.5.7
drift: ^2.31.0
crypto: ^3.0.7
cryptography: ^2.9.0
file_picker: ^11.0.2
saf_util:
# Vendored upstream 3.1.0 with a pending Result lifecycle fix (CHANGELOG) —
# upstream still double-replies MethodChannel results and crashes the Activity.
path: packages/saf_util
saf_stream: ^3.1.0
material_symbols_icons: ^4.2951.0
web_socket_channel: ^3.0.1
dart_discord_presence: ^1.2.0
flutter_svg: ^2.2.3
# Fork note: 41c16be creates the desktop temp parent before opening the
# partial file, independently fixing upstream #649's missing-directory case.
# Upstream's later target-directory fallback is unnecessary while this fork
# retains its same-filesystem move and resume-data cleanup implementation.
# No per-host trust bypass is carried: Plezy has no app-wide certificate
# exception policy, and weakening only background downloads would make API
# and playback behavior inconsistent. Revisit only with an explicit,
# host-scoped trust setting shared by every media-server HTTP client.
background_downloader:
git:
url: https://github.com/edde746/background_downloader
ref: 021e2075260e324b7440a5c81b57bf0242d35020
sentry_flutter: ^9.25.0
auto_updater:
git:
url: https://github.com/edde746/auto_updater
path: packages/auto_updater
ref: 9e150f7
cupertino_http: ^3.0.2
cronet_http: ^1.6.0
win_http: ^0.2.2
collection: ^1.18.0
freezed_annotation: ^3.1.0
xml: ^7.0.1
string_similarity: ^2.2.0
unorm_dart: ^0.3.2
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^6.0.0
# Root analysis traverses packages/saf_util and consumes its lint profile.
mgenware_dart_lints: ^8.0.0
fake_async: ^1.3.3
stream_channel: ^2.1.4
build_runner: ^2.13.0
json_serializable: ^6.7.1
slang_build_runner: ^4.14.0
sentry_dart_plugin: ^3.3.0
# Used by the explicit check-unused-* CI steps; its analyzer plugin is disabled.
dart_code_linter: ^4.1.8
drift_dev: ^2.28.3
shared_preferences_platform_interface: ^2.4.0
path_provider_platform_interface: ^2.1.0
# Drive the real desktop preference backends against a temp file in tests, so
# the #1732 corrupt-store repair loop and the vendored atomic write are both
# covered against genuine file I/O. All four expose `fs`/`pathProvider`.
# The two shared_preferences packages resolve to the vendored copies below.
shared_preferences_linux: ^2.4.1
shared_preferences_windows: ^2.4.1
path_provider_linux: ^2.2.1
path_provider_windows: ^2.3.0
plugin_platform_interface: ^2.1.0
freezed: ^3.2.5
analyzer: 10.2.0
dependency_overrides:
auto_updater_platform_interface:
git:
url: https://github.com/edde746/auto_updater
ref: 9e150f7
path: packages/auto_updater_platform_interface
auto_updater_macos:
git:
url: https://github.com/edde746/auto_updater
ref: 9e150f7
path: packages/auto_updater_macos
auto_updater_windows:
git:
url: https://github.com/edde746/auto_updater
ref: 9e150f7
path: packages/auto_updater_windows
# Vendored 2.4.1 with an atomic store replacement (CHANGELOG, provenance.json)
# — upstream truncates the live preference document on every write, which is
# the corruption behind #1732.
shared_preferences_windows:
path: packages/shared_preferences_windows
shared_preferences_linux:
path: packages/shared_preferences_linux
sentry:
org: plezy
project: plezy
url: https://bugs.plezy.app
upload_sources: true
commits: false
flutter:
uses-material-design: true
assets:
- assets/plezy.png
- assets/plezy_adaptive_foreground.svg
- assets/plex_chevron.svg
- assets/jellyfin_icon.svg
- assets/emby_icon.svg
- assets/trakt_circlemark.svg
- assets/mal_mark.svg
- assets/anilist_mark.svg
- assets/simkl_mark.svg
- assets/seerr_mark.svg
- assets/mdblist_mark.svg
- assets/go-noto-current-regular.ttf
- assets/shaders/nvscaler/
- assets/shaders/artcnn/
- assets/shaders/anime4k/
- assets/player_icons/
- assets/rating_icons/