* Upgrade ExoPlayer to 2.18
* Change the position polling from every 2 to every 5 sec
* Make internalMediaItems non-nullable
* Clean up mpv track names
* Reduce explayer ffmpeg extension size by not including all decoders
Removed decoders vorbis, opus, flac, pcm_mulaw, pcm_alaw, mp3, aac because these are already supported by Android.
* Clean up preferredLanguage preferences
* Add support for external subtitles in exoplayer
* Enable ASS/SSA external subtitles
* Enable VTT external subtitles
* Clean up
* Fix srt and vtt
Jellyfin currently converts vtt to srt without changing the codec tag. This makes the player unable to decode the subs because it thinks the file is vtt while in fact it is srt.
* Fix for vtt subs
Jellyfin return a srt stream when it should return a vtt stream
* add empty subtitle track
* toggle selected variable
* does this work
* Revert "toggle selected variable"
This reverts commit 87589f1d34e741205674e66855b53d79a1f70adb.
* this should work
* this should work 2.0
* remove empty track if there are no subtitle tracks
* Add option to display extended episode title (SXX:EXX - Title) in player
* ocd fix
* add null check condition
* Move setting to player category
Yeah this would fit in either Appearance or Player. But I lean more towards Player.
Co-authored-by: Jarne Demeulemeester <jarnedemeulemeester@gmail.com>
* Fix download playback tracking bug
* Remove unused permission
* Add overview text to downloadmetadata
* Add visual indicator of whether item is downloaded
* Use downloaded item when available
* Fix "null" overview text in download metadata
* Fix crash when playing downloaded file with mpv
* Clean up
Co-authored-by: jarnedemeulemeester <jarnedemeulemeester@gmail.com>
* Add offline playback
* Remove unused values
* Replace downloadutilities extension functions with normal functions
This is to not polute the namespace of fragment and context.
* Replace default Android icons with those from lucide
* Fix deleting downloaded movie
Co-authored-by: Jarne Demeulemeester <32322857+jarnedemeulemeester@users.noreply.github.com>
* Refactor playback code
* Fix back state when playing media and rotating device
Problem was playerItems were re-emitted on fragment creation after config change. LiveData by design emit on every subscribe (observe) so to avoid that there are several possibilities.
1) easiest, observe playerItems not in onCreate but in playButton.clickListener. Stupid, since then we need to remember to only observe in this special place.
2) SingleLiveData - kind of hacky since LiveData were designed to behave this way so we don't want to go against their design.
3) Use Kotlin flow instead.
I chose the flow approach since it's Kotlin native and modern way to do things and behaves much more Rx-like. Since now we need to call collect instead of observe and launch in coroutine, I added utility method to make this easier. Also, in the future we might want to improve this further, either by coming up with new way entirely or by at least moving this to parent fragment from which all fragments that want to play media will inherit and thus making it easy to use and maintain.
Co-authored-by: Jarne Demeulemeester <32322857+jarnedemeulemeester@users.noreply.github.com>
* add playback speed control to MPV player
* add playback speed control to exoplayer
* remove unnecessary method
* remove unused import
* use gauge icon from lucide
* use gauge icon from lucide
* fix the gauge icon