This settingsframework uses mlite5 on SailfishOS and other platforms
with the mlite library present, because I believe DConf is neat. For
platforms that do not have DConf and mlite present, it falls back to a
quickly put together implementation that uses QSettings as a backend.
Implementing an settings item is simply done by subclassing the
Jellyfin::QObjectSettingsWrapper.
Besides MPRIS support, this also adds support for hasPrevious() and
hasNext() in several parts to determine whether the
player/playlist/shuffler has a previous or next item.
* Properly keep track of the current offset and total recourd count in
models.
* Catch exceptions and store them in errorString properties wherever
applicable in loaders.
THe idea behind the switching was to provide gapless playback, but it
made the code too complicated and to intertwined with QtMultiMedia.
I might attempt to implement it later, but I probably will put the code
in a separate class to make it easier to swap the QtMultiMedia
implementation with a multimedia implementation for a player with better
support for gappless playback.
Loading logic should be extracted from the model, to make
loading the data from other sources, such as a local database for
synchronised items, possible.
- Removed "jellyfin" prefix from files, as they are already in a
directory named Jellyfin
- Split the former "jellyfinitem.{h,cpp}" into multiple files in the DTO
directory, one for each class. The jellyfinitem files started to
become enormous.
- Use forward declarations in headers instead of including files
wherever possible.
- Updated copyright headers
- PlaybackManager now takes ownership of set items
- PlaybackManager can play items just by their itemId, avoids useless
item creation on the QML side of things.
- Allow calling Jellyfin::registerTypes with a different URI
- Minor code cleanup
* [backend]: Websocket now automatically tries to reconnect if connection was lost, up to 3 times.
* [backend]: Move more playback and resume logic to the backend, to avoid having it in multiple places within the QML. Regression: pausing playback sometimes halts the video player for an unknown reason.
* [playback]: Sailfin will try to play without the server transcoding, if possible.
* [ui]: added a debug page in the settings
* [ui] Added: Blurry previews of images before they are loaded
Also fixes a bug where ApiModel would remove items that already started
with a lowecase letter or didn't start with a letter at all.
- Application could not be launched by the invoker because of some
missing compiler flags (-rdynamic -pie)
- Private libraries were not found due to incorrect rpath being set
- Moved the qml list of files for sailfish from qtquick to sailfish
(Stupid mistake I made because my editor doesn't really differentiate
between different files with the same name in different folders)
* [UI] Improved: error handling should be slightly better
* [UI] Improved: settings now show the user name and picture instead of the user id if network is available.
The websocket now notifies the ApiClient, on which several models and
items are listening, when the userData for an user has changed. The UI
on the qml side may automatically updates without any extra effort.
This also resolves a bug where videos didn't resume after +/- 3:40 due
to an integer overflow.
I finally got deserializing lists working. Exposing them to QML was not
a trivial task either. Note that I didn't do it the clean way. Nested
lists are not supported. But it works!
Because I got so frustarted at one point trying to implement things the
right way, I restructured the project to seperate the Sailfish code from
the Qt code and created a new, empty desktop project. The Qt code has
been transformed into a happy little library, to which the Sailfish OS
application links.
Note that QMake doesn't seem to strip the library for some reason.