-
-
Notifications
You must be signed in to change notification settings - Fork 264
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ExoPlayer: Implement media segment support #1507
base: master
Are you sure you want to change the base?
Conversation
69dfad7
to
fa329d9
Compare
fa329d9
to
9dcf4bc
Compare
This comment was marked as off-topic.
This comment was marked as off-topic.
Most of the proposed changes in the files listed below have been shamelessly copied from the Android TV implementation in jellyfin/jellyfin-androidtv#4052. Authorship of these changes belongs to nielsvanvelzen. app/src/main/java/org/jellyfin/mobile/player/PlayerViewModel.kt app/src/main/java/org/jellyfin/mobile/player/mediasegments/MediaSegmentAction.kt app/src/main/java/org/jellyfin/mobile/player/mediasegments/MediaSegmentRepository.kt app/src/main/java/org/jellyfin/mobile/utils/extensions/MediaSegment.kt
9dcf4bc
to
ff1917f
Compare
rebased on master |
This comment was marked as off-topic.
This comment was marked as off-topic.
|
||
@JavascriptInterface | ||
fun setSegmentTypeAction(typeString: String, actionString: String) { | ||
val type: MediaSegmentType = when(typeString) { |
Check warning
Code scanning / detekt
Reports spaces around keywords Warning
else -> return | ||
} | ||
|
||
val action: MediaSegmentAction = when(actionString) { |
Check warning
Code scanning / detekt
Reports spaces around keywords Warning
for (mediaSegment in mediaSegments) { | ||
val action = mediaSegmentRepository.getMediaSegmentAction(mediaSegment) | ||
|
||
when(action) { |
Check warning
Code scanning / detekt
Reports spaces around keywords Warning
val player = playerOrNull ?: return | ||
|
||
player.createMessage { _, _ -> | ||
// We can't seek directly on the ExoPlayer instance as not all media is seekable |
Check warning
Code scanning / detekt
Reports mis-indented code Warning
// We can't seek directly on the ExoPlayer instance as not all media is seekable | ||
// the seek function in the PlaybackController checks this and optionally starts a transcode |
Check warning
Code scanning / detekt
Reports mis-indented code Warning
// TODO: The above is probably true for jellyfin-android as well. | ||
// But I believe there is no such logic here. |
Check warning
Code scanning / detekt
Reports mis-indented code Warning
// But I believe there is no such logic here. | ||
viewModelScope.launch(Dispatchers.Main) { |
Check warning
Code scanning / detekt
Reports mis-indented code Warning
viewModelScope.launch(Dispatchers.Main) { | ||
player.seekTo(mediaSegment.end.inWholeMilliseconds) |
Check warning
Code scanning / detekt
Reports mis-indented code Warning
player.seekTo(mediaSegment.end.inWholeMilliseconds) | ||
} |
Check warning
Code scanning / detekt
Reports mis-indented code Warning
player.seekTo(mediaSegment.end.inWholeMilliseconds) | ||
} | ||
} |
Check warning
Code scanning / detekt
Reports mis-indented code Warning
Initial support for media segments.
Most of this is shamelessly copied from the Android TV implementation in jellyfin/jellyfin-androidtv#4052. @nielsvanvelzen, I tried to reflect that in the commit message. Let me know if that's a problem.
Changes
The playback related implementation is pretty much copied 1:1 from ATV. This implements the Skip and Nothing actions. The Unknown segment type is not supported. AskToSkip is not implemented yet but I plan to do so in a following PR.
I reused the settings from the web client by implementing a JS plugin and subscribing to settings changes. I usually try to avoid JavaScript in my daily life and have never worked with the nativeshell plugin system before. I'd appreciate if you'd take a closer look at these changes.
On another note: I'm not quite sure when to use koin's
inject()
vsget()
. I tried to look at how the objects were injected in other places and followed that.Issues
Depends on #1506
Fixes #1500