Skip to content

Commit 5286bcd

Browse files
committed
Merge branch 'develop'
2 parents a00b525 + 630db58 commit 5286bcd

File tree

195 files changed

+34498
-14629
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

195 files changed

+34498
-14629
lines changed

.github/ISSUE_TEMPLATE/bug-report.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ body:
4949
multiple: true
5050
options:
5151
- Android
52+
- Android TV
5253
- iOS
5354
- Linux
5455
- Windows
@@ -62,5 +63,11 @@ body:
6263
label: App Version
6364
description: What version of Fladder are you using?
6465
placeholder: e.g. v0.7.0 (267)
66+
- type: input
67+
id: server
68+
attributes:
69+
label: Jellyfin server
70+
description: What is your Jellyfin setup
71+
placeholder: e.g. 10.11.2 on docker,windows,macos
6572
validations:
6673
required: true

.github/workflows/build.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -527,9 +527,9 @@ jobs:
527527
528528
---
529529
530-
📅 **Build Date:** $(date -u "+%Y-%m-%d %H:%M:%S UTC")
531-
🔧 **Build Number:** ${{ github.run_number }}
532-
📝 **Commit:** ${{ github.sha }}
530+
📅 **Build Date:** $(date -u "+%Y-%m-%d %H:%M:%S UTC")
531+
🔧 **Build Number:** ${{ github.run_number }}
532+
📝 **Commit:** ${{ github.sha }}
533533
🌿 **Branch:** develop
534534
EOF
535535
@@ -752,7 +752,7 @@ jobs:
752752
include:
753753
- build_type: release
754754
identifier: DonutWare.Fladder
755-
max_versions: ""
755+
max_versions: "0"
756756
- build_type: nightly
757757
identifier: DonutWare.Fladder.Nightly
758758
max_versions: "1"

.vscode/tasks.json

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,11 +118,18 @@
118118
{
119119
"label": "Generate Pigeon Files",
120120
"type": "shell",
121-
"command": "powershell",
121+
"command": "bash",
122122
"args": [
123-
"-Command",
124-
"Get-ChildItem -Path pigeons/*.dart | ForEach-Object { dart run pigeon --input $_.FullName }"
123+
"-c",
124+
"for f in pigeons/*.dart; do dart run pigeon --input \"$f\"; done"
125125
],
126+
"windows": {
127+
"command": "powershell",
128+
"args": [
129+
"-Command",
130+
"Get-ChildItem -Path pigeons/*.dart | ForEach-Object { dart run pigeon --input $_.FullName }"
131+
]
132+
},
126133
"group": {
127134
"kind": "build",
128135
"isDefault": true

README.md

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,22 @@
3232

3333
## Key Features
3434

35-
* Play media – Stream or sync content locally to your device.
36-
* Manage your library – Refresh content and edit metadata.
37-
* Multiple profiles – Lock profiles and connect to different servers.
38-
* Direct/Transcode playback
39-
* Intro/Credits skipping
35+
* Play media – Stream or sync content locally to your device
36+
* Manage your library – Refresh content and edit metadata
37+
* Multiple profiles – add multiple users or different servers easily switching between
38+
* Direct, Transcode and Offline playback
39+
* Media segments skipping (Intro/Credits etc.)
4040
* Trickplay support (timeline scrubbing)
41-
* Dark/Light mode
42-
* Simple comic book format reading support (.cbz, .crb)
43-
* Sync supported on Mobile/Desktop
41+
* Dark/Light mode and multiple color styles to pick
42+
* Simple comic book format reading support (.cbz, .cbr)
43+
* Sync items for all platforms
44+
* Download items and keep progress in sync
45+
* Keyboard shortcuts
46+
* Adaptive layout for all platforms
47+
* Next-up overview when watching a queue
4448
* Platforms
45-
- Android
46-
- Web
49+
- Android + TV
50+
- Web + Docker
4751
- macOS
4852
- Windows
4953
- iOS
@@ -94,31 +98,27 @@ Web/Desktop [try out the web build!](https://DonutWare.github.io/Fladder)
9498
> [!NOTE]
9599
> The GitHub hosted web build only allows `https` connections. This is a limitation on GitHub's end, for self-hosted versions `http` works fine.
96100
97-
## In progress
98-
99-
* [Android TV](https://github.com/DonutWare/Fladder/issues/510)
100-
101101
## Planned Features
102102

103-
* Music playback*
103+
* Music playback
104104
* Server management
105105
* And more???
106106

107107
## Download
108108

109109
The latest executables for Windows, macOS, Linux, iOS, Android and Web can be found on the [releases page](https://github.com/DonutWare/Fladder/releases).
110110

111-
You can pull the Docker version using the following tag: ```ghcr.io/donutware/fladder:latest```.
111+
You can pull the Docker version using the following tags: ```ghcr.io/donutware/fladder:latest```. or ```ghcr.io/donutware/fladder-rootless:latest```
112112

113113
*Platform-specific installation and usage instructions can be found [here](https://github.com/DonutWare/Fladder/blob/develop/INSTALL.md).*
114114

115115
<a href='https://play.google.com/store/apps/details?id=nl.jknaapen.fladder&pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'><img alt='Get it on Google Play' src='https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png' width=250/></a>
116116

117117
> [!WARNING]
118-
> For windows users, sometimes flutter applications are marked as false positives by windows defender for more info see [this issue](https://github.com/DonutWare/Fladder/issues/197#issuecomment-2568906874).
118+
> (Windows) Some flutter applications are marked as false positives by windows defender for more info see [this issue](https://github.com/DonutWare/Fladder/issues/197#issuecomment-2568906874).
119119
120120
## How to Contribute
121-
Interest in contributing? Here are a couple of ways you can help:
121+
Interested in contributing? Here are a couple of ways you can help:
122122

123123
### 🐛 Reporting Bugs
124124
- Before reporting a bug, **please ensure** that the issue hasn't been reported already.

android/app/src/main/kotlin/nl/jknaapen/fladder/VideoPlayerActivity.kt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import androidx.compose.runtime.Composable
1313
import androidx.compose.ui.platform.LocalContext
1414
import androidx.media3.common.util.UnstableApi
1515
import nl.jknaapen.fladder.composables.controls.CustomVideoControls
16+
import nl.jknaapen.fladder.composables.overlays.screensavers.ScreenSaver
1617
import nl.jknaapen.fladder.objects.VideoPlayerObject
1718
import nl.jknaapen.fladder.player.ExoPlayer
1819
import nl.jknaapen.fladder.utility.ScaledContent
@@ -51,9 +52,11 @@ class VideoPlayerActivity : ComponentActivity() {
5152
fun VideoPlayerScreen(
5253
) {
5354
val leanBackEnabled = leanBackEnabled(LocalContext.current)
54-
ExoPlayer { player ->
55-
ScaledContent(if (leanBackEnabled) 0.6f else 1f) {
56-
CustomVideoControls(player)
55+
ScreenSaver {
56+
ExoPlayer { player ->
57+
ScaledContent(if (leanBackEnabled) 0.6f else 1f) {
58+
CustomVideoControls(player)
59+
}
5760
}
5861
}
5962
}

android/app/src/main/kotlin/nl/jknaapen/fladder/api/PlayerSettingsHelper.g.kt

Lines changed: 46 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Autogenerated from Pigeon (v26.0.1), do not edit directly.
1+
// Autogenerated from Pigeon (v26.1.0), do not edit directly.
22
// See also: https://pub.dev/packages/pigeon
33
@file:Suppress("UNCHECKED_CAST", "ArrayInDataClass")
44

@@ -56,7 +56,7 @@ private object PlayerSettingsHelperPigeonUtils {
5656
}
5757
if (a is Map<*, *> && b is Map<*, *>) {
5858
return a.size == b.size && a.all {
59-
(b as Map<Any?, Any?>).containsKey(it.key) &&
59+
(b as Map<Any?, Any?>).contains(it.key) &&
6060
deepEquals(it.value, b[it.key])
6161
}
6262
}
@@ -65,6 +65,20 @@ private object PlayerSettingsHelperPigeonUtils {
6565

6666
}
6767

68+
enum class Screensaver(val raw: Int) {
69+
DISABLED(0),
70+
DVD(1),
71+
LOGO(2),
72+
TIME(3),
73+
BLACK(4);
74+
75+
companion object {
76+
fun ofRaw(raw: Int): Screensaver? {
77+
return values().firstOrNull { it.raw == raw }
78+
}
79+
}
80+
}
81+
6882
enum class VideoPlayerFit(val raw: Int) {
6983
FILL(0),
7084
CONTAIN(1),
@@ -142,7 +156,8 @@ data class PlayerSettings (
142156
val autoNextType: AutoNextType,
143157
val acceptedOrientations: List<PlayerOrientations>,
144158
val fillScreen: Boolean,
145-
val videoFit: VideoPlayerFit
159+
val videoFit: VideoPlayerFit,
160+
val screensaver: Screensaver
146161
)
147162
{
148163
companion object {
@@ -156,7 +171,8 @@ data class PlayerSettings (
156171
val acceptedOrientations = pigeonVar_list[6] as List<PlayerOrientations>
157172
val fillScreen = pigeonVar_list[7] as Boolean
158173
val videoFit = pigeonVar_list[8] as VideoPlayerFit
159-
return PlayerSettings(enableTunneling, skipTypes, themeColor, skipForward, skipBackward, autoNextType, acceptedOrientations, fillScreen, videoFit)
174+
val screensaver = pigeonVar_list[9] as Screensaver
175+
return PlayerSettings(enableTunneling, skipTypes, themeColor, skipForward, skipBackward, autoNextType, acceptedOrientations, fillScreen, videoFit, screensaver)
160176
}
161177
}
162178
fun toList(): List<Any?> {
@@ -170,6 +186,7 @@ data class PlayerSettings (
170186
acceptedOrientations,
171187
fillScreen,
172188
videoFit,
189+
screensaver,
173190
)
174191
}
175192
override fun equals(other: Any?): Boolean {
@@ -188,30 +205,35 @@ private open class PlayerSettingsHelperPigeonCodec : StandardMessageCodec() {
188205
return when (type) {
189206
129.toByte() -> {
190207
return (readValue(buffer) as Long?)?.let {
191-
VideoPlayerFit.ofRaw(it.toInt())
208+
Screensaver.ofRaw(it.toInt())
192209
}
193210
}
194211
130.toByte() -> {
195212
return (readValue(buffer) as Long?)?.let {
196-
PlayerOrientations.ofRaw(it.toInt())
213+
VideoPlayerFit.ofRaw(it.toInt())
197214
}
198215
}
199216
131.toByte() -> {
200217
return (readValue(buffer) as Long?)?.let {
201-
AutoNextType.ofRaw(it.toInt())
218+
PlayerOrientations.ofRaw(it.toInt())
202219
}
203220
}
204221
132.toByte() -> {
205222
return (readValue(buffer) as Long?)?.let {
206-
SegmentType.ofRaw(it.toInt())
223+
AutoNextType.ofRaw(it.toInt())
207224
}
208225
}
209226
133.toByte() -> {
210227
return (readValue(buffer) as Long?)?.let {
211-
SegmentSkip.ofRaw(it.toInt())
228+
SegmentType.ofRaw(it.toInt())
212229
}
213230
}
214231
134.toByte() -> {
232+
return (readValue(buffer) as Long?)?.let {
233+
SegmentSkip.ofRaw(it.toInt())
234+
}
235+
}
236+
135.toByte() -> {
215237
return (readValue(buffer) as? List<Any?>)?.let {
216238
PlayerSettings.fromList(it)
217239
}
@@ -221,28 +243,32 @@ private open class PlayerSettingsHelperPigeonCodec : StandardMessageCodec() {
221243
}
222244
override fun writeValue(stream: ByteArrayOutputStream, value: Any?) {
223245
when (value) {
224-
is VideoPlayerFit -> {
246+
is Screensaver -> {
225247
stream.write(129)
226-
writeValue(stream, value.raw)
248+
writeValue(stream, value.raw.toLong())
227249
}
228-
is PlayerOrientations -> {
250+
is VideoPlayerFit -> {
229251
stream.write(130)
230-
writeValue(stream, value.raw)
252+
writeValue(stream, value.raw.toLong())
231253
}
232-
is AutoNextType -> {
254+
is PlayerOrientations -> {
233255
stream.write(131)
234-
writeValue(stream, value.raw)
256+
writeValue(stream, value.raw.toLong())
235257
}
236-
is SegmentType -> {
258+
is AutoNextType -> {
237259
stream.write(132)
238-
writeValue(stream, value.raw)
260+
writeValue(stream, value.raw.toLong())
239261
}
240-
is SegmentSkip -> {
262+
is SegmentType -> {
241263
stream.write(133)
242-
writeValue(stream, value.raw)
264+
writeValue(stream, value.raw.toLong())
243265
}
244-
is PlayerSettings -> {
266+
is SegmentSkip -> {
245267
stream.write(134)
268+
writeValue(stream, value.raw.toLong())
269+
}
270+
is PlayerSettings -> {
271+
stream.write(135)
246272
writeValue(stream, value.toList())
247273
}
248274
else -> super.writeValue(stream, value)

android/app/src/main/kotlin/nl/jknaapen/fladder/api/TranslationsPigeon.g.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Autogenerated from Pigeon (v26.0.1), do not edit directly.
1+
// Autogenerated from Pigeon (v26.1.0), do not edit directly.
22
// See also: https://pub.dev/packages/pigeon
33
@file:Suppress("UNCHECKED_CAST", "ArrayInDataClass")
44

android/app/src/main/kotlin/nl/jknaapen/fladder/api/VideoPlayerHelper.g.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Autogenerated from Pigeon (v26.0.1), do not edit directly.
1+
// Autogenerated from Pigeon (v26.1.0), do not edit directly.
22
// See also: https://pub.dev/packages/pigeon
33
@file:Suppress("UNCHECKED_CAST", "ArrayInDataClass")
44

@@ -59,7 +59,7 @@ private object VideoPlayerHelperPigeonUtils {
5959
}
6060
if (a is Map<*, *> && b is Map<*, *>) {
6161
return a.size == b.size && a.all {
62-
(b as Map<Any?, Any?>).containsKey(it.key) &&
62+
(b as Map<Any?, Any?>).contains(it.key) &&
6363
deepEquals(it.value, b[it.key])
6464
}
6565
}
@@ -593,11 +593,11 @@ private open class VideoPlayerHelperPigeonCodec : StandardMessageCodec() {
593593
when (value) {
594594
is PlaybackType -> {
595595
stream.write(129)
596-
writeValue(stream, value.raw)
596+
writeValue(stream, value.raw.toLong())
597597
}
598598
is MediaSegmentType -> {
599599
stream.write(130)
600-
writeValue(stream, value.raw)
600+
writeValue(stream, value.raw.toLong())
601601
}
602602
is SimpleItemModel -> {
603603
stream.write(131)

0 commit comments

Comments
 (0)