Compare commits

3 Commits
Author SHA1 Message Date
nvrl a475ad3575 docs: 2.0 screenshots of the library, the whole library and a title page 2026-10-31 14:38:47 +01:00
nvrl da13f0547e chore(release): bump version to 2.0.1 2026-10-31 14:14:45 +01:00
nvrl 4ca57d9449 fix(android): a chooser in the player no longer closes on its own
The episode, track, speed, chapter and sleep choosers and the More menu
live inside the player's controls, and the controls hide four seconds
after they come up while the video plays. Hiding them took the open
chooser with them, so a sheet being picked from closed at what looked
like random. The controls now hold still while a chooser is open.
2026-10-31 14:12:28 +01:00
8 changed files with 23 additions and 12 deletions

No files matched your search

Generated
+7 -7
View File
@@ -5279,7 +5279,7 @@ dependencies = [
[[package]]
name = "pstr-android"
version = "2.0.0"
version = "2.0.1"
dependencies = [
"android_logger",
"futures",
@@ -5299,7 +5299,7 @@ dependencies = [
[[package]]
name = "pstr-app"
version = "2.0.0"
version = "2.0.1"
dependencies = [
"anyhow",
"chrono",
@@ -5333,7 +5333,7 @@ dependencies = [
[[package]]
name = "pstr-cli"
version = "2.0.0"
version = "2.0.1"
dependencies = [
"anyhow",
"clap",
@@ -5352,7 +5352,7 @@ dependencies = [
[[package]]
name = "pstr-core"
version = "2.0.0"
version = "2.0.1"
dependencies = [
"directories",
"futures",
@@ -5372,7 +5372,7 @@ dependencies = [
[[package]]
name = "pstr-meta"
version = "2.0.0"
version = "2.0.1"
dependencies = [
"pstr-core",
"reqwest",
@@ -5385,7 +5385,7 @@ dependencies = [
[[package]]
name = "pstr-player"
version = "2.0.0"
version = "2.0.1"
dependencies = [
"async-trait",
"libloading",
@@ -5400,7 +5400,7 @@ dependencies = [
[[package]]
name = "pstr-stream"
version = "2.0.0"
version = "2.0.1"
dependencies = [
"async-trait",
"futures",
+1 -1
View File
@@ -11,7 +11,7 @@ members = [
]
[workspace.package]
version = "2.0.0"
version = "2.0.1"
edition = "2024"
license = "MIT"
repository = "https://github.com/narrrl/proton-stream"
@@ -477,8 +477,12 @@ fun PlayerScreen(
// four seconds after it is reached cannot be found again.
val exploring = rememberTouchExploration()
LaunchedEffect(exploring) { if (exploring) showControls = true }
LaunchedEffect(showControls, state.paused, exploring) {
if (showControls && !state.paused && !exploring) {
// A chooser open over the controls. They hold still under it: the
// choosers live inside the controls, so hiding them closed whatever was
// being picked from, four seconds after the controls came up.
var picking by remember { mutableStateOf(false) }
LaunchedEffect(showControls, state.paused, exploring, picking) {
if (showControls && !state.paused && !exploring && !picking) {
delay(CONTROLS_SECONDS * 1_000)
showControls = false
}
@@ -698,6 +702,7 @@ fun PlayerScreen(
landscapeLocked = landscapeLocked,
media = key,
sleep = sleep,
onPicking = { picking = it },
onLock = {
locked = true
showControls = false
@@ -949,6 +954,7 @@ private fun PlayerControls(
landscapeLocked: Boolean,
media: String,
sleep: SleepTimer?,
onPicking: (Boolean) -> Unit,
onLock: () -> Unit,
) {
val scope = rememberCoroutineScope()
@@ -957,6 +963,10 @@ private fun PlayerControls(
var showEpisodes by remember { mutableStateOf(false) }
var showChapters by remember { mutableStateOf(false) }
var showSpeeds by remember { mutableStateOf(false) }
var more by remember { mutableStateOf(false) }
val picking = more || showSleep || choosing != null || showEpisodes || showChapters || showSpeeds
LaunchedEffect(picking) { onPicking(picking) }
DisposableEffect(Unit) { onDispose { onPicking(false) } }
// What the store says, so the dialog opens on the rate that is playing.
var speed by remember { mutableStateOf(1.0) }
LaunchedEffect(Unit) {
@@ -1037,7 +1047,6 @@ private fun PlayerControls(
Row(verticalAlignment = Alignment.CenterVertically) {
if (!roomForAll) {
CompactIcon(Icons.Default.Subtitles, "Subtitles") { choosing = "sub" }
var more by remember { mutableStateOf(false) }
Box {
CompactIcon(Icons.Default.MoreVert, "More") { more = true }
DropdownMenu(expanded = more, onDismissRequest = { more = false }) {
+2
View File
@@ -89,6 +89,8 @@ containers.
## A title's page
<img src="../images/desktop-title.png" alt="A title's page" width="820">
Click a title to open its page. **Esc** goes back. On a phone, the picture at the top slides
away more slowly than the page, and once it has gone a bar with the title's name stays at the
top.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 MiB

After

Width:  |  Height:  |  Size: 3.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 MiB

After

Width:  |  Height:  |  Size: 4.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

+1 -1
View File
@@ -14,7 +14,7 @@
# builds from the registry alone.
pkgname=proton-stream
pkgver=2.0.0
pkgver=2.0.1
pkgrel=1
pkgdesc="Netflix-style desktop client for Proton Drive public links: browse and stream a share"
arch=('x86_64')