1
0
Fork 0
mirror of https://github.com/HenkKalkwater/harbour-sailfin.git synced 2024-11-15 22:15:18 +00:00

Compare commits

..

59 commits

Author SHA1 Message Date
Chris Josten 53f3e6aa1c remove unused submodule 2024-06-03 22:41:18 +02:00
Chris Josten 57b67292fd sailfish: add LiveTvChannels page
This ocmmit adds a LiveTvChannels page for displaying the programs that
are now playing.

The section Live TV Channels on the main page now shows the TV channel
list in order of the channel number.

Additionally, it fixes an issue in ApiModel, where it would not reload
when a new loader was assigned. This is now fixed and some code on pages
that worked around this fix has been removed.
2024-06-03 22:16:13 +02:00
Chris Josten edcd3a93af sailfin: Improve layout on landscape and tablet screens
I've dropped the whole `<constant> * Theme.pixelRatio`-approach[^1]
for determining when the UI should split into two columns, because
the values seemed quite arbitrary and I was entering random numbers.
I'm now doing it on multiples of `Theme.itemSizeHuge`, which is easier
to reason about.

This also fixes occasions where items in a grid would leave a bit of
space to the right in the CollectionPage.

Backdrop images in VideoPage and MusicAlbumPage now have a maximum
height of half of the screen, to avoid filling the entire screen in
landscape mode. Perhaps it doesn't always look good, but it makes the
layout more usable.

Images on the SeasonPage and MusicAlbumPage (in landscape) are now
aligned to the right, to avoid blocking the Page back indicator.
2024-06-03 21:50:14 +02:00
Chris Josten 5328e63e2c Update outdated PlaybackState enums in QML
With the refractor in f91e9f8, an abstraction over QtMultiMedia was
implemented. New enums for the PlaybackState were created, to not make
the application depend on QtMultiMedia. However, not all code was
updated to make proper use of these new enums.

This in turn caused the screen turned off while playing a video and the
HUD not showing when the video started buffering. This commit fixes
that.

Closes #51
2024-05-08 20:33:01 +02:00
Chris Josten 19efba457c docs: replace absolute paths by relative
This way, Doxygen also works in GitHub actions
2024-04-27 23:46:45 +02:00
Chris Josten fbe8f5631c actions: skip set up python step
Pip is hopefully installed by default on ubuntu
2024-04-27 23:23:18 +02:00
Chris Josten 22046a654a actions: Hopefully fix it this time 2024-04-27 23:21:27 +02:00
Chris Josten 7bf7b4039a actions: Fix actions hopefully again 2024-04-27 23:20:42 +02:00
Chris Josten 982e5c2825 actions: Hopefully fix actions 2024-04-27 23:19:57 +02:00
Chris Josten 0329f31db0
Merge pull request #49 from heartfin/48-doxygen
docs: Add Doxygen and project-related documentation
2024-04-27 23:16:45 +02:00
Chris Josten 720a1ed5ff docs: Add Doxygen and project-related documentation 2024-04-27 23:16:06 +02:00
Chris Josten c5541b0b16 bump version 0.5.0, update changelog 2024-01-02 23:40:30 +01:00
Chris Josten 5e62fe7624 sailfish: display backdrop instead of poster on film page
This simply looks better, since the backdrop has a more suitable aspect
ratio.
2024-01-02 22:42:35 +01:00
Chris Josten a35d8026be sailfish: allow configuring the startup page
A setting has been added to allow users to select which page should be
opened first. This allows for using Sailfin as a music player
exclusively, as proposed in #34

Special care has been taken to avoid the user being locked out from the
app, for when the library selected as home has been deleted on the
server side. It is real tricky to guide the user to delete dconf keys.

Therefore, a pulley menu with access to settings has been added to all
collection pages and to the unknown page. Additionally, when the setting
is changed, it throws away the entire pagestack and replaces it with the
new home page + the settings page, so the user can always navigate back.
The navigation history of the user will get lost, but otherwise the
implementation gets to complex for a feature that is expected to be used
not that often.

This uses more timers than I hoped for, because otherwise things are
undefined for some reason which I do not know and using timers solves
it. :(
2024-01-02 22:28:34 +01:00
Chris Josten 3c02985990 core/MPRIS: change track id to String
For some reason, the track id was a QDbusObjectPath, but somehow that
caused issues, so I'm breaking the spec and simply changing it to a
string. Now SailfishOS does display the MPRIS controls on the
lockscreen.
2024-01-02 20:09:23 +01:00
Chris Josten a66434afa8 QuickConnect: init
This adds a page in the settings page that allows the user to enter a
quick connect code to allow another device to log in.
2024-01-02 19:56:07 +01:00
Chris Josten 13786f01c9 sailfish: add contributors list and update info page
- Add list of contributors
- Add link to GitHub repository
- Update copyright year
2024-01-02 16:44:07 +01:00
Chris Josten 5cd0b10b73 Make film posters 9:16 again
This was broken due to the collectionType property of BaseItemDTO
not being exposed to QML.

Also update the changelog
2024-01-02 16:01:45 +01:00
Chris Josten bb45637d0b core/WebSocket: Delay websocket initialisation
Workaround for #16.
2024-01-02 15:36:19 +01:00
Chris Josten 3fb373a8ef
Merge pull request #37 from heartfin/36-control-remote-jellyfin-sessions
Control remote jellyfin sessions
2024-01-02 15:24:00 +01:00
Chris Josten f0328e2c80 Update changelog 2024-01-02 15:23:39 +01:00
Chris Josten 9266f65c2f Guess device icons
Device icons for the local device is now determined by looking at what
the value of the deviceType property of the ApiClient is. This property
was newly introduced, so that applications using JellyfinQt can set
their own device type.

For other devices, a guess is made based on the client name. This guess
has been derived from what Jellyfin Web does.
2024-01-02 15:14:23 +01:00
Chris Josten 1b27847c94 core/RemoteJellyfinPlaybackManager: send media source id
If the mediaSourceId is not sent, Jellyfin Web will simply not take the
audioStreamIndex and subtitleStreamIndex in account when playing the
media.

A bug also surfaced where the application would crash when playing a
video, playing audio afterwards and then clicking on an item in the now
playing queue. This has also been fixed.
2024-01-02 13:02:59 +01:00
Chris Josten 6ed623d0f8 core/RemoteJellyfinPlaybackManager: keep queue in sync
The playback queue is now kept in sync with the playback queue of the
remote jellyfin instance the manager is controlling.

Some additional guards were added in place in the shuffle and playlist
algorithm, since the situation can occur where the now playing index
falls outside of the playing playlist. This happens because when the
an playlist update is received, we need to do another HTTP request
before we know which items are in the queue, while the now playing index
has been updated.

This is a not-optimal way to fix that, but it works well enough for now
and a better solution can be implemented later. (Hello, person in the
future reading the git blame output!)
2024-01-02 00:19:13 +01:00
Chris Josten d7910faed5
Merge pull request #40 from handydevcom/Fix_localization_and_add_Russian_localization
Fix translation settings in CMake; add Russian translation.
2024-01-01 15:21:35 +01:00
Mikhail Barashkov 8b81fae67f Complete Russian translations 2023-12-23 17:13:53 +03:00
Mikhail Barashkov 8b94a2dd30 Fix translation settings in CMake; add Russian translation. 2023-12-23 17:06:36 +03:00
Chris Josten 61a7eaf52e core: emit signals when playbackmanager changed 2023-01-11 23:55:53 +01:00
Chris Josten 7c6d8486de ui: improve empty state, add remote playback indicator 2023-01-11 23:11:02 +01:00
Chris Josten 3783de9ce7 core: send start index when playing on remote session 2023-01-05 15:53:52 +01:00
Chris Josten 7a7ddc7717 core: remote playback send commands and update state 2023-01-04 21:32:27 +01:00
Chris Josten 77cb5d5957 openapigen: support for 204 No Content endpoints 2023-01-02 20:24:40 +01:00
Chris Josten b257fe60aa Discover remote sessions
Adds a way of discovering remote sessions and in Jellyfin the UI.
2023-01-02 20:05:41 +01:00
Chris Josten b1bd15f2c1
Merge pull request #35 from heartfin/32-abstract-media-playback-implementation-from-viewmodel-playbackmanager
Abstract media playback implementation from ViewModel::PlaybackManager
2022-11-05 18:31:49 +01:00
Chris Josten c72c10bad4
core: Split PlaybackManager up into smaller parts
The PlaybackManager was a giant class that handled UI bindings, fetching
stream URLS, playback logic.

It now has been split up into:

- ViewModel::PlaybackManager, which handles UI interfacing and allowing
  to swap out the Model::Playback implementation on the fly.
- Model::PlaybackManager, which is an interface for what a
  PlaybackManager must do, handling queues/playlists, and controlling a
  player.
- Model::LocalPlaybackManager, which is an Model::PlaybackManager
  implementation for playing back Jellyfin media within the application.
- Model::PlaybackReporter, which reports the current playback state to
  the Jellyfin server, for keeping track of played items.
- Model::Player, which handles playing back media from an URL and
  the usual play/pause et cetera.

In a future commit, this would allow for introducing a
Model::RemoteJellyfinPlaybackManager, to control other Jellyfin
instances.
2022-11-05 18:20:23 +01:00
Chris Josten f91e9f88e7
Merge pull request #31 from heartfin/30-deduplicate-qobject-wrapping-code
Move QObject-wrapping code into templates
2022-08-24 17:14:58 +02:00
Chris Josten b8933ddca4 Move QObject-wrapping code into templates
Previously, this pattern was copy-pasted in a few places. This is
undesirable, so the code has been moved into templates.

Fixes #30
2022-08-24 17:00:14 +02:00
Chris Josten 0fafb19c7d Add navigation to artists from tracks
I'm not to happy about the C++ sides. If anyone from the future finds
this commit with "git blame" while debugging this code: I apologise
2022-07-30 01:24:31 +02:00
Chris Josten 3f9661ccb5 Update changelog 2022-07-29 14:30:38 +02:00
Chris Josten fb81913eab
Merge pull request #28 from heartfin/25-music-player-more-specialised-folder-pages
Add more specialised pages
2022-07-29 14:28:00 +02:00
Chris Josten dc9c3ea1b8 Add music library page 2022-07-29 14:26:25 +02:00
Chris Josten 0c0b91dc4b Add artist overview page 2022-07-29 11:45:23 +02:00
Chris Josten 2398cc2997
Merge pull request #23 from heartfin/22-music-player-album-art-with-a-non-11-aspect-ratio-breaks-the-narrow-header
Code deduplication and bug fix in the album cover
2022-07-23 20:04:17 +02:00
Chris Josten 985a65154a
Code deduplication and bug fix
Deduplicated code in the NarrowAlbumCover and WideAlbumCover.

Additionally, this fixes a bug where the NarrowAlbumCover would behave
wrongly with album covers with an aspect ratio not equal to 1.0.

Resolves #22
2022-07-23 20:01:23 +02:00
Chris Josten 4a178ee227
Add better playlist view
I reused the AlbumDetailPage for playlists, as both are very similar. If
they end up being too different, I might want to look into splitting
them up, but for now it will do.
2022-07-23 01:52:26 +02:00
Chris Josten c1e402f411
Fix linebreak in README 2022-07-23 01:31:39 +02:00
Chris Josten 818443dbae
Add Matrix badge 2022-07-23 01:26:40 +02:00
Chris Josten eecebc4ec6
Bump version 0.4.2 2022-07-23 00:50:51 +02:00
Chris Josten ade8866303
Merge pull request #20 from heartfin/19-collections-with-more-than-100-items-loop-back
setRequestStartIndex: actually set start index
2022-07-23 00:42:15 +02:00
Chris Josten dd34e1a087
setRequestStartIndex: actually set start index
It previously modified the limit for some template instances. That
obviously does not work.

Additionally, setRequestStartIndex and setRequestLimit have been
implemented for GetNextUpParams.

Fixes #19
2022-07-23 00:38:15 +02:00
Chris Josten 7ae204bf87
Create FUNDING.yml 2022-07-22 22:38:20 +02:00
Chris Josten 62d9b9a73c
Fix user list not displaying 2022-07-20 23:13:57 +02:00
Chris Josten f34f3484f3
Fix authentication 2022-07-20 23:13:42 +02:00
Chris Josten 69ddb18046
Bump version v0.4.1 2022-04-27 11:07:23 +02:00
Chris Josten 748e5bdf13
Sailfish: do not crash when opening an audio folders
The QML side attempted to simply pass all items of type 'Audio' to the
PlaybackManager.playItem(). This does not work for folders and it will
crash. This does not fix the presentation of audio folders/playlists,
but it does fix the crash.
2022-04-27 11:07:06 +02:00
Chris Josten cab5f20469
Sailfish: Fix freeze when connecting via HTTPS 2022-04-26 20:02:29 +02:00
Chris Josten deada4f635 core: Use the public constructor of ClientCapabilitiesDTO
In the ApiClient, the constructor without arguments was used to create a
ClientCapabilitiesDTO. Since this constructor has been made private,
ApiClient now uses the other public constructor to allow the code to
compile once again.
2021-10-25 16:11:10 +02:00
Chris Josten 852e3e928f core: correctly serialize JSON objects
On startup, the DeviceProfile would not be serialized properly to a false
assumption that QJsonValue.toString() returns the JSON representation of
the given value. This now has been fixed by creating a QJsonDocument
converting it to a string.
2021-10-25 16:10:36 +02:00
Chris Josten 90db983c30 Replace not-fully-initializing DTO constructors
There were some constructors in the DTOs which allowed construction of
DTO which weren't fully initialized. These constructors have been made
private, as they are still used in the 'fromJson' methods. Additionally,
a constructor with all required parameters to fully initialize the
class has been added.

Additionally, the Loader class has been modified, since it no longer can
assume it is able to default construct the parameter type. The parameter
is now stored as an optional.

Closes #15
2021-09-25 17:07:12 +02:00
520 changed files with 20797 additions and 1512 deletions

13
.github/FUNDING.yml vendored Normal file
View file

@ -0,0 +1,13 @@
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: heartfin # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']

40
.github/workflows/doxygen.yaml vendored Normal file
View file

@ -0,0 +1,40 @@
name: doxygen
run-name: Generate and deploy Doxygen documentation
on:
push:
branches:
- "master"
workflow_dispatch: {}
permissions:
contents: read
pages: write
id-token: write
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: true
- name: Configure pages
uses: actions/configure-pages@v3
- name: Install the doxyqml filter
run: pip install doxyqml
- name: Doxygen
uses: mattnotmitt/doxygen-action@edge
- name: Upload GitHub pages artifact
uses: "actions/upload-pages-artifact@v2"
with:
path: "doxygen/html/"
deploy:
runs-on: ubuntu-latest
needs: build
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: "actions/deploy-pages@v2"

2
.gitignore vendored
View file

@ -5,7 +5,9 @@ rpm/*.spec
build/ build/
build-*/ build-*/
.dub/ .dub/
doxygen/
# IDE files # IDE files
*.user *.user
CMakeLists.txt.user.* CMakeLists.txt.user.*
compile_commands.json

6
.gitmodules vendored
View file

@ -0,0 +1,6 @@
[submodule "core/doc/doxygen-awesome-css"]
path = core/doc/doxygen-awesome-css
url = https://github.com/jothepro/doxygen-awesome-css.git
[submodule "3rdparty/doxygen-awesome-css"]
path = 3rdparty/doxygen-awesome-css
url = https://github.com/jothepro/doxygen-awesome-css.git

1
3rdparty/doxygen-awesome-css vendored Submodule

@ -0,0 +1 @@
Subproject commit 5b27b3a747ca1e559fa54149762cca0bad6036fb

View file

@ -4,7 +4,6 @@ set (CMAKE_CXX_STANDARD 17)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/") set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")
set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOMOC ON)
cmake_policy(SET CMP0048 NEW) cmake_policy(SET CMP0048 NEW)
set(CMAKE_CXX_STANDARD 17)
# Options # Options
option(PLATFORM_SAILFISHOS "Build SailfishOS version of application" OFF) option(PLATFORM_SAILFISHOS "Build SailfishOS version of application" OFF)

2896
Doxyfile Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,8 +1,51 @@
# Sailfin # Sailfin
[!["Chat via Matrix"](https://img.shields.io/matrix/sailfin:netsoj.nl?label=Chat%20via%20Matrix&logo=matrix&server_fqdn=meetriks.netsoj.nl&style=for-the-badge)](https://matrix.to/#/#sailfin:netsoj.nl)
Sailfin is a [Sailfish OS](https://sailfishos.org) client for [Jellyfin](https://jellyfin.org), a media server, written in C++ and qml. Sailfin is a [Sailfish OS](https://sailfishos.org) client for [Jellyfin](https://jellyfin.org), a media server, written in C++ and qml.
## Download
This application can be found on [OpenRepos.net](https://openrepos.net/content/ahappyhuman/sailfin)
## Screenshots (running on Sailfish OS) ## Screenshots (running on Sailfish OS)
<img alt="Screenshot showing the library root" src="graphics/screenshot-sailfish-1.png" width="33%" /> <img alt="Screenshot showing TV show page" src="graphics/screenshot-sailfish-2.png" width="33%" /> <img alt="Screenshot showing the video player" src="graphics/screenshot-sailfish-3.png" width="33%" /> <img alt="Screenshot showing the library root" src="graphics/screenshot-sailfish-1.png" width="33%" /> <img alt="Screenshot showing TV show page" src="graphics/screenshot-sailfish-2.png" width="33%" />
## Contributing
Please [see this page for how the Jellyfin Qt library works](https://heartfin.github.io/harbour-sailfin/guides.html).
and [see this page for contribution guidelines](https://heartfin.github.io/harbour-sailfin/contributing.html).
## Code layout
```
├── 3rdparty 3rd-party libraries
├── cmake Additional CMake modules
├── core The core Qt library named Jellyfin-Qt
│   ├── codegen Template files for code generation based on the OpenAPI spec
│   ├── dbus DBus interface description files
│   ├── doc Extra documentation files for the generated documentation
│   ├── include Publically includable files
│   ├── qrc Resources for the library
│   └── src C++ source code
├── graphics Source graphics files, meant to be edited
│   └── qtquick-theme Custom graphics for the QtQuick theme
├── qtquick QtQuick application for testing, based on the core library
│   ├── assets Custom assets
│   ├── qml QML UI files
│   ├── SailfinStyle QtQuick theme files
│   └── src C++ code
├── rpm Files for packaging the application
└── sailfish The Sailfish OS app based on the core library
├── icons Launcher icons
├── qml QML UI files
│   ├── components Reusable QML components
│   ├── cover Cover pages
│   ├── licenses Licence texts for libraries
│   └── pages Application pages
├── src C++ source code
└── translations UI translation files
```
## License ## License
This application is licensed under the LGPLv2.1 license, although you may opt to choose a newer version of the LGPL if you want so. This application is licensed under the LGPLv2.1 license, although you may opt to choose a newer version of the LGPL if you want so.

View file

@ -13,9 +13,14 @@ include(GNUInstallDirs)
include(GeneratedSources.cmake) include(GeneratedSources.cmake)
set(JellyfinQt_SOURCES set(JellyfinQt_SOURCES
src/model/controllablesession.cpp
src/model/deviceprofile.cpp src/model/deviceprofile.cpp
src/model/item.cpp src/model/item.cpp
src/model/player.cpp
src/model/playbackmanager.cpp
src/model/playbackreporter.cpp
src/model/playlist.cpp src/model/playlist.cpp
src/model/remotejellyfinplayback.cpp
src/model/shuffle.cpp src/model/shuffle.cpp
src/model/user.cpp src/model/user.cpp
@ -29,6 +34,7 @@ set(JellyfinQt_SOURCES
src/viewmodel/modelstatus.cpp src/viewmodel/modelstatus.cpp
src/viewmodel/playbackmanager.cpp src/viewmodel/playbackmanager.cpp
src/viewmodel/playlist.cpp src/viewmodel/playlist.cpp
src/viewmodel/remotedevice.cpp
src/viewmodel/settings.cpp src/viewmodel/settings.cpp
src/viewmodel/userdata.cpp src/viewmodel/userdata.cpp
src/viewmodel/usermodel.cpp src/viewmodel/usermodel.cpp
@ -46,9 +52,14 @@ set(JellyfinQt_SOURCES
list(APPEND JellyfinQt_SOURCES ${openapi_SOURCES}) list(APPEND JellyfinQt_SOURCES ${openapi_SOURCES})
set(JellyfinQt_HEADERS set(JellyfinQt_HEADERS
include/JellyfinQt/model/controllablesession.h
include/JellyfinQt/model/deviceprofile.h include/JellyfinQt/model/deviceprofile.h
include/JellyfinQt/model/item.h include/JellyfinQt/model/item.h
include/JellyfinQt/model/player.h
include/JellyfinQt/model/playbackmanager.h
include/JellyfinQt/model/playbackreporter.h
include/JellyfinQt/model/playlist.h include/JellyfinQt/model/playlist.h
include/JellyfinQt/model/remotejellyfinplayback.h
include/JellyfinQt/model/shuffle.h include/JellyfinQt/model/shuffle.h
include/JellyfinQt/model/user.h include/JellyfinQt/model/user.h
include/JellyfinQt/support/jsonconv.h include/JellyfinQt/support/jsonconv.h
@ -64,10 +75,12 @@ set(JellyfinQt_HEADERS
include/JellyfinQt/viewmodel/playbackmanager.h include/JellyfinQt/viewmodel/playbackmanager.h
include/JellyfinQt/viewmodel/platformmediacontrol.h include/JellyfinQt/viewmodel/platformmediacontrol.h
include/JellyfinQt/viewmodel/playlist.h include/JellyfinQt/viewmodel/playlist.h
include/JellyfinQt/viewmodel/remotedevice.h
include/JellyfinQt/viewmodel/settings.h include/JellyfinQt/viewmodel/settings.h
include/JellyfinQt/viewmodel/userdata.h include/JellyfinQt/viewmodel/userdata.h
include/JellyfinQt/viewmodel/usermodel.h include/JellyfinQt/viewmodel/usermodel.h
include/JellyfinQt/viewmodel/user.h include/JellyfinQt/viewmodel/user.h
include/JellyfinQt/viewmodel/utils.h
include/JellyfinQt/apiclient.h include/JellyfinQt/apiclient.h
include/JellyfinQt/apimodel.h include/JellyfinQt/apimodel.h
include/JellyfinQt/credentialmanager.h include/JellyfinQt/credentialmanager.h

View file

@ -7,8 +7,21 @@ class {{className}};
class {{className}} { class {{className}} {
public: public:
{{#if hasRequiredProperties}}
{{className}}(
{{#each properties as |p|}}
{{#if p.isNotNullable}}
{{p.typeNameWithQualifiers}} {{p.name}}{{#if p.isLastNonNullable}}{{else}},{{/if}}
{{/if}}
{{/each}}
);
{{else}}
{{className}}(); {{className}}();
{{/if}}
{{className}}(const {{className}} &other); {{className}}(const {{className}} &other);
@ -60,8 +73,18 @@ protected:
{{/if}} {{/if}}
{{/each}} {{/each}}
{{#if hasRequiredProperties}}
private:
// Private constructor which generates an invalid object, for use withing {{className}}::fromJson();
{{className}}();
{{/if}}
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -1,5 +1,32 @@
{{className}}::{{className}}() {} {{className}}::{{className}}() {}
{{#if hasRequiredProperties}}
{{className}}::{{className}} (
{{#each properties as |property|}}
{{#if property.isNotNullable}}
{{property.typeNameWithQualifiers}} {{property.name}}{{#if property.isLastNonNullable}} {{else}}, {{/if}}
{{/if}}
{{/each}}
) :
{{#each properties as |property|}}
{{#if property.isNotNullable}}
{{property.memberName}}({{property.name}})
{{#if property.isLastNonNullable}}
{ }
{{else}}
,
{{/if}}
{{/if}}
{{/each}}
{{/if}}
{{className}}::{{className}}(const {{className}} &other) : {{className}}::{{className}}(const {{className}} &other) :

77
core/doc/contributing.md Normal file
View file

@ -0,0 +1,77 @@
\page contributing Contributing
\brief All resources for (potential) contributors
This page should contain all resources for people who'd like to contribute to the project.
If that happens to be you, thank you for considering to contribute to this project!
This page will describe how the process goes, what code style this project uses and more useful information.
# Development process
Development happens at [GitHub](https://github.com/heartfin/harbour-sailfin).
Currently, both the library Jellyfin-Qt and the [Sailfish OS](https://sailfishos.org) app named Sailfin are developed in the same repository.
## Create or find an issue to work on
If you want to contribute code, please check if an issue exists.
Otherwise, create an issue describing what feature you'd like to develop before creating a merge request.
## Start working on your code
Clone the git repo and create a new branch.
If you have commit access to the repository, please create a branch in the form of `<issue-number>-<issue-title>`.
For example, `36-control-remote-jellyfin-sessions`.
Now you can start writing your code and create commits.
Please create focussed commits, that is, do not commit anything not related to the issue you are working on.
Also state what you're changing in the commit message and add an entry in the file `rpm/harbour-sailfin.changes`.
If this is your first time contributing to the project, don't be shy and feel free to add your name to the contributors list in `sailfish/qml/pages/AboutPage.qml`!
## Submit a merge request
Now that you have finalised your commit, you can create a merge request on the repository.
Make sure that you have followed the contribution guidelines on this page.
Someone will review it and if all is good, they will merge it in.
Congratulations on your contribution!
# Code style guidelines
The code should follow the [Sailfish OS Code Conventions](https://docs.sailfishos.org/Develop/Apps/Coding_Conventions/) with the following exceptions:
## Exceptions for C++
- Put curly braces on the same line as the declaration, example:
```cpp
int foo() {
// implementation
}
```
instead of
```cpp
int foo()
{
// implementation
}
```
Rationale: I hate pressing enter and am used to the former. Moreover, it is already all over the place. Bad rationale, I know.
- Close namespace brackets with a comment in the form `// NS Jellyfin`, example:
```cpp
namespace Jellyfin {
namespace Nested {
// Content
} // NS Nested
} // NS Jellyfin
```
Rationale: Easy to know what namespace the bracket closes, since namespaces tend to span over large portions of a file.
- Use include guards in the form of `NAMESPACE_CLASSNAME_H`. Example:
```cpp
#ifndef JELLYFIN_MODEL_USER_H
#define JELLYFIN_MODEL_USER_H
namespace Jellyfin {
namespace Model {
class User {
// Methods etc
};
} // NS Model
} // NS Jellyfin
```

15
core/doc/custom.css Normal file
View file

@ -0,0 +1,15 @@
html {
--primary-color: #be48d6;
--primary-dark-color: #7a2e89;
--primary-light-color #e256ff;
}
@media (prefers-color-scheme: dark) {
html:not(.light-mode) {
--primary-color: #be48d6;
--primary-dark-color: #7a2e89;
--primary-light-color #e256ff;
}
}

View file

@ -0,0 +1,5 @@
\page guide-apimodel-loader ApiModel and Loaders
\brief This will give an overview of how the ApiModel and Loaders interact.
\todo
This guide should still be written

View file

@ -0,0 +1,73 @@
\page guide-getting-started Getting Started
\brief Installation procedure and first application using this library
This is a tutorial on how to use Jellyfin Qt library.
## Project setup
The library works as [a QML plugin](https://doc.qt.io/archives/qt-5.6/qqmlextensionplugin.html).
Compile the library, install it in the QML plugin path and add a qmldir file like this:
```
module nl.netsoj.chris.Jellyfin
plugin JellyfinQt
```
You should then be able to import it in your QML files.
```qml
import nl.netsoj.chris.Jellyfin
```
\note
In the documentation, the URI nl.netsoj.chris.Jellyfin will be used.
If you deviate from this, make sure to put the plugin in the correct location,
as well as using the correct import statements in QML.
## Hello Jellyfin!
The first step for interacting with the library is setting up an \ref Jellyfin::ApiClient.
This object handles authentication.
\warning
The way authentication works using ApiClient will change before the next major release to support multiple accounts! See \issue{4}
Lets create an instance of ApiClient that is reachable from everywhere, by putting it in the ApplicationWindow:
```qml
import nl.netsoj.chris.Jellyfin as JF
import QtQuick 2.0 as QQ
QQ.ApplicationWindow {
readonly property JF.ApiClient apiClient: _apiClient
JF.ApiClient {
id: _apiClient
appName: "The name of your client"
}
}
```
\note
As an alternative, you could create a QML file only containing the ApiClient and [declaring it as a Singleton](https://doc.qt.io/archives/qt-5.6/qtqml-modules-qmldir.html#contents-of-a-module-definition-qmldir-file)
## Authentication
If the user already has logged in and the credentials are stored, this is quite easy:
the \ref Jellyfin::ApiClient::authenticated "authenticated" property will change to true and the corresponding signal will fire.
You don't have to do anything else!
When the user never has logged in, the signal \ref Jellyfin::ApiClient::setupRequired "setupRequired()" will be fired.
When this happens, you should let the user enter a server URL and set it as the \ref Jellyfin::ApiClient::baseUrl "baseUrl" property.
You can get a list model of servers in the local network using the \ref Jellyfin::ServerDiscoveryModel.
After the \ref Jellyfin::ApiClient::baseUrl "baseUrl" property has been set, the slot \ref Jellyfin::ApiClient::authenticate "authenticate" should be called with an username and password.
When authentication was successful, the property \ref Jellyfin::ApiClient::authenticated "authenticated" will be changed to true.
Otherwise, the signal \ref Jellyfin::ApiClient::authenticationError "authenticationError" will be fired.
\note
To show a list of available users, one can use the \ref Jellyfin::ViewModel::UserModel "UserModel" and \ref Jellyfin::ViewModel::PublicUsersLoader "PublicUsersLoader".
However, this requires knowledge of the Loader and Model system, which will be explained in the next chapter \ref guide-apimodel-loader

10
core/doc/guides.md Normal file
View file

@ -0,0 +1,10 @@
\page guides Usage guides
\brief All guides intended for developers working with this library.
All guides assume familiarity with QML. If you aren't, [the free online QML book](https://www.qt.io/product/qt6/qml-book) is a great place to start.
Note that this book is written for Qt 6 QML, while this project is using Qt 5 QML.
The differences between those versions are not large, so it still is a valuable resource.
* \subpage guide-getting-started
* \subpage guide-apimodel-loader

11
core/doc/mainpage.md Normal file
View file

@ -0,0 +1,11 @@
\mainpage
\note
This page is aimed at developers. If you are interested in using a Jellyfin application, please visit the [main website](https://heartfin.github.io/).
This is the documentation page for the Jellyfin Qt library, a library for the [Qt framework](https://qt.io/) for interacting with the [Jellyfin media server](https://jellyfin.org).
This project is not affiliated with the Jellyfin project.
If you are planning on using this projects, see \ref guides for usage instructions and the reference documentation in the sidebar.
If you'd like to contribute code, see \ref contributing for the process and style guidelines.

View file

@ -0,0 +1,4 @@
/**
* \namespace Jellyfin::DTO
* \brief Contains auto-generated Data Transfer Objects for the Jellyfin HTTP API
*/

View file

@ -0,0 +1,4 @@
/**
* \namespace Jellyfin::ViewModel
* \brief Contains all types exposed to QML
*/

View file

@ -41,6 +41,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#include "dto/generalcommandtype.h" #include "dto/generalcommandtype.h"
#include "credentialmanager.h" #include "credentialmanager.h"
#include "model/controllablesession.h"
#include "model/deviceprofile.h" #include "model/deviceprofile.h"
#include "eventbus.h" #include "eventbus.h"
@ -96,6 +97,8 @@ public:
explicit ApiClient(QObject *parent = nullptr); explicit ApiClient(QObject *parent = nullptr);
virtual ~ApiClient(); virtual ~ApiClient();
Q_PROPERTY(QString baseUrl READ baseUrl WRITE setBaseUrl NOTIFY baseUrlChanged) Q_PROPERTY(QString baseUrl READ baseUrl WRITE setBaseUrl NOTIFY baseUrlChanged)
Q_PROPERTY(QString appName READ appName WRITE setAppName NOTIFY appNameChanged)
Q_PROPERTY(Jellyfin::Model::DeviceTypeClass::Value deviceType READ deviceType WRITE setDeviceType NOTIFY deviceTypeChanged)
Q_PROPERTY(bool authenticated READ authenticated WRITE setAuthenticated NOTIFY authenticatedChanged) Q_PROPERTY(bool authenticated READ authenticated WRITE setAuthenticated NOTIFY authenticatedChanged)
Q_PROPERTY(QString userId READ userId NOTIFY userIdChanged) Q_PROPERTY(QString userId READ userId NOTIFY userIdChanged)
Q_PROPERTY(QJsonObject deviceProfile READ deviceProfileJson NOTIFY deviceProfileChanged) Q_PROPERTY(QJsonObject deviceProfile READ deviceProfileJson NOTIFY deviceProfileChanged)
@ -114,6 +117,9 @@ public:
bool authenticated() const; bool authenticated() const;
void setBaseUrl(const QString &url); void setBaseUrl(const QString &url);
void setAppName(const QString &appName);
void setDeviceType(Model::DeviceType deviceType);
QNetworkReply *get(const QString &path, const QUrlQuery &params = QUrlQuery()); QNetworkReply *get(const QString &path, const QUrlQuery &params = QUrlQuery());
QNetworkReply *post(const QString &path, const QJsonDocument &data, const QUrlQuery &params = QUrlQuery()); QNetworkReply *post(const QString &path, const QJsonDocument &data, const QUrlQuery &params = QUrlQuery());
QNetworkReply *post(const QString &path, const QByteArray &data = QByteArray(), const QUrlQuery &params = QUrlQuery()); QNetworkReply *post(const QString &path, const QByteArray &data = QByteArray(), const QUrlQuery &params = QUrlQuery());
@ -127,8 +133,10 @@ public:
Q_ENUM(ApiError) Q_ENUM(ApiError)
const QString &baseUrl() const; const QString &baseUrl() const;
const QString &appName() const;
const QString &userId() const; const QString &userId() const;
const QString &deviceId() const; const QString &deviceId() const;
Model::DeviceType deviceType() const;
/** /**
* @brief QML applications can set this type to indicate which commands they support. * @brief QML applications can set this type to indicate which commands they support.
* *
@ -185,6 +193,7 @@ signals:
void authenticatedChanged(bool authenticated); void authenticatedChanged(bool authenticated);
void baseUrlChanged(const QString &baseUrl); void baseUrlChanged(const QString &baseUrl);
void appNameChanged(const QString &newAppName);
void settingsChanged(); void settingsChanged();
/** /**
@ -196,9 +205,18 @@ signals:
void userIdChanged(QString userId); void userIdChanged(QString userId);
void deviceProfileChanged(); void deviceProfileChanged();
void deviceTypeChanged();
void supportedCommandsChanged(); void supportedCommandsChanged();
void onlineChanged(); void onlineChanged();
/**
* @brief Emitted after submitQuickConnectCode succeeded
*/
void quickConnectAccepted();
/**
* @brief Emitted after submitQuickConnectCode failed
*/
void quickConnectRejected();
/** /**
* @brief onUserDataChanged Emitted when the user data of an item is changed on the server. * @brief onUserDataChanged Emitted when the user data of an item is changed on the server.
@ -223,6 +241,7 @@ public slots:
*/ */
void setupConnection(); void setupConnection();
void authenticate(QString username, QString password, bool storeCredentials = false); void authenticate(QString username, QString password, bool storeCredentials = false);
void submitQuickConnectCode(const QString &code);
/** /**
* @brief Logs the user out and clears the session. * @brief Logs the user out and clears the session.

View file

@ -239,17 +239,33 @@ bool setRequestStartIndex(P &parameters, int startIndex) {
#ifndef JELLYFIN_APIMODEL_CPP #ifndef JELLYFIN_APIMODEL_CPP
extern template bool setRequestStartIndex(Loader::GetUserViewsParams &params, int startIndex); extern template bool setRequestStartIndex(Loader::GetUserViewsParams &params, int startIndex);
extern template void setRequestLimit(Loader::GetUserViewsParams &params, int limit); extern template void setRequestLimit(Loader::GetUserViewsParams &params, int limit);
extern template QList<DTO::BaseItemDto> extractRecords(const DTO::BaseItemDtoQueryResult &result); extern template QList<DTO::BaseItemDto> extractRecords(const DTO::BaseItemDtoQueryResult &result);
extern template int extractTotalRecordCount(const DTO::BaseItemDtoQueryResult &result); extern template int extractTotalRecordCount(const DTO::BaseItemDtoQueryResult &result);
extern template QList<DTO::BaseItemDto> extractRecords(const QList<DTO::BaseItemDto> &result); extern template QList<DTO::BaseItemDto> extractRecords(const QList<DTO::BaseItemDto> &result);
extern template int extractTotalRecordCount(const QList<DTO::BaseItemDto> &result); extern template int extractTotalRecordCount(const QList<DTO::BaseItemDto> &result);
extern template void setRequestLimit(Loader::GetLatestMediaParams &params, int limit); extern template void setRequestLimit(Loader::GetLatestMediaParams &params, int limit);
extern template bool setRequestStartIndex(Loader::GetLatestMediaParams &params, int offset); extern template bool setRequestStartIndex(Loader::GetLatestMediaParams &params, int offset);
extern template void setRequestLimit(Loader::GetItemsByUserIdParams &params, int limit); extern template void setRequestLimit(Loader::GetItemsByUserIdParams &params, int limit);
extern template bool setRequestStartIndex(Loader::GetItemsByUserIdParams &params, int offset); extern template bool setRequestStartIndex(Loader::GetItemsByUserIdParams &params, int offset);
extern template void setRequestLimit(Loader::GetResumeItemsParams &params, int limit); extern template void setRequestLimit(Loader::GetResumeItemsParams &params, int limit);
extern template bool setRequestStartIndex(Loader::GetResumeItemsParams &params, int offset); extern template bool setRequestStartIndex(Loader::GetResumeItemsParams &params, int offset);
extern template void setRequestLimit(Loader::GetPublicUsersParams &params, int limit);
extern template bool setRequestStartIndex(Loader::GetPublicUsersParams &params, int offset);
extern template void setRequestLimit(Loader::GetNextUpParams &params, int limit);
extern template bool setRequestStartIndex(Loader::GetNextUpParams &params, int offset);
extern template void setRequestLimit(Loader::GetAlbumArtistsParams &params, int limit);
extern template bool setRequestStartIndex(Loader::GetAlbumArtistsParams &params, int offset);
extern template void setRequestLimit(Loader::GetLiveTvChannelsParams &params, int limit);
extern template bool setRequestStartIndex(Loader::GetLiveTvChannelsParams &params, int offset);
extern template QList<DTO::UserDto> extractRecords(const QList<DTO::UserDto> &result); extern template QList<DTO::UserDto> extractRecords(const QList<DTO::UserDto> &result);
extern template int extractTotalRecordCount(const QList<DTO::UserDto> &result); extern template int extractTotalRecordCount(const QList<DTO::UserDto> &result);
#endif #endif
@ -483,6 +499,10 @@ public:
this->endResetModel(); this->endResetModel();
} }
const QList<QSharedPointer<T>> &toList() {
return m_array;
}
// From AbstractListModel, gets implemented in ApiModel<T> // From AbstractListModel, gets implemented in ApiModel<T>
//virtual QHash<int, QByteArray> roleNames() const override = 0; //virtual QHash<int, QByteArray> roleNames() const override = 0;
/*virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override = 0;*/ /*virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override = 0;*/
@ -509,6 +529,7 @@ public:
BaseApiModel::setLoader(newLoader); BaseApiModel::setLoader(newLoader);
BaseApiModel::disconnectOldLoader(m_loader); BaseApiModel::disconnectOldLoader(m_loader);
m_loader = castedLoader; m_loader = castedLoader;
reload();
} else { } else {
qWarning() << "Somehow set a BaseModelLoader on ApiModel instead of a ModelLoader<T>"; qWarning() << "Somehow set a BaseModelLoader on ApiModel instead of a ModelLoader<T>";
} }

View file

@ -48,7 +48,14 @@ namespace DTO {
class AccessSchedule { class AccessSchedule {
public: public:
AccessSchedule(); AccessSchedule(
qint32 jellyfinId,
QString userId,
DynamicDayOfWeek dayOfWeek,
double startHour,
double endHour
);
AccessSchedule(const AccessSchedule &other); AccessSchedule(const AccessSchedule &other);
/** /**
@ -109,8 +116,13 @@ protected:
DynamicDayOfWeek m_dayOfWeek; DynamicDayOfWeek m_dayOfWeek;
double m_startHour; double m_startHour;
double m_endHour; double m_endHour;
private:
// Private constructor which generates an invalid object, for use withing AccessSchedule::fromJson();
AccessSchedule();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -49,7 +49,13 @@ namespace DTO {
class ActivityLogEntry { class ActivityLogEntry {
public: public:
ActivityLogEntry(); ActivityLogEntry(
qint64 jellyfinId,
QDateTime date,
QString userId,
LogLevel severity
);
ActivityLogEntry(const ActivityLogEntry &other); ActivityLogEntry(const ActivityLogEntry &other);
/** /**
@ -172,8 +178,13 @@ protected:
QString m_userId; QString m_userId;
QString m_userPrimaryImageTag; QString m_userPrimaryImageTag;
LogLevel m_severity; LogLevel m_severity;
private:
// Private constructor which generates an invalid object, for use withing ActivityLogEntry::fromJson();
ActivityLogEntry();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -49,7 +49,11 @@ namespace DTO {
class ActivityLogEntryQueryResult { class ActivityLogEntryQueryResult {
public: public:
ActivityLogEntryQueryResult(); ActivityLogEntryQueryResult(
qint32 totalRecordCount,
qint32 startIndex
);
ActivityLogEntryQueryResult(const ActivityLogEntryQueryResult &other); ActivityLogEntryQueryResult(const ActivityLogEntryQueryResult &other);
/** /**
@ -96,8 +100,13 @@ protected:
QList<ActivityLogEntry> m_items; QList<ActivityLogEntry> m_items;
qint32 m_totalRecordCount; qint32 m_totalRecordCount;
qint32 m_startIndex; qint32 m_startIndex;
private:
// Private constructor which generates an invalid object, for use withing ActivityLogEntryQueryResult::fromJson();
ActivityLogEntryQueryResult();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -48,7 +48,10 @@ namespace DTO {
class AddVirtualFolderDto { class AddVirtualFolderDto {
public: public:
AddVirtualFolderDto(); AddVirtualFolderDto(
QSharedPointer<LibraryOptions> libraryOptions
);
AddVirtualFolderDto(const AddVirtualFolderDto &other); AddVirtualFolderDto(const AddVirtualFolderDto &other);
/** /**
@ -69,8 +72,13 @@ public:
protected: protected:
QSharedPointer<LibraryOptions> m_libraryOptions = QSharedPointer<LibraryOptions>(); QSharedPointer<LibraryOptions> m_libraryOptions = QSharedPointer<LibraryOptions>();
private:
// Private constructor which generates an invalid object, for use withing AddVirtualFolderDto::fromJson();
AddVirtualFolderDto();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -51,7 +51,10 @@ namespace DTO {
class AlbumInfo { class AlbumInfo {
public: public:
AlbumInfo(); AlbumInfo(
bool isAutomated
);
AlbumInfo(const AlbumInfo &other); AlbumInfo(const AlbumInfo &other);
/** /**
@ -200,8 +203,13 @@ protected:
QStringList m_albumArtists; QStringList m_albumArtists;
QJsonObject m_artistProviderIds; QJsonObject m_artistProviderIds;
QList<SongInfo> m_songInfos; QList<SongInfo> m_songInfos;
private:
// Private constructor which generates an invalid object, for use withing AlbumInfo::fromJson();
AlbumInfo();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -49,7 +49,12 @@ namespace DTO {
class AlbumInfoRemoteSearchQuery { class AlbumInfoRemoteSearchQuery {
public: public:
AlbumInfoRemoteSearchQuery(); AlbumInfoRemoteSearchQuery(
QSharedPointer<AlbumInfo> searchInfo,
QString itemId,
bool includeDisabledProviders
);
AlbumInfoRemoteSearchQuery(const AlbumInfoRemoteSearchQuery &other); AlbumInfoRemoteSearchQuery(const AlbumInfoRemoteSearchQuery &other);
/** /**
@ -98,8 +103,13 @@ protected:
QString m_itemId; QString m_itemId;
QString m_searchProviderName; QString m_searchProviderName;
bool m_includeDisabledProviders; bool m_includeDisabledProviders;
private:
// Private constructor which generates an invalid object, for use withing AlbumInfoRemoteSearchQuery::fromJson();
AlbumInfoRemoteSearchQuery();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -48,7 +48,12 @@ namespace DTO {
class AllThemeMediaResult { class AllThemeMediaResult {
public: public:
AllThemeMediaResult(); AllThemeMediaResult(
QSharedPointer<ThemeMediaResult> themeVideosResult,
QSharedPointer<ThemeMediaResult> themeSongsResult,
QSharedPointer<ThemeMediaResult> soundtrackSongsResult
);
AllThemeMediaResult(const AllThemeMediaResult &other); AllThemeMediaResult(const AllThemeMediaResult &other);
/** /**
@ -81,8 +86,13 @@ protected:
QSharedPointer<ThemeMediaResult> m_themeVideosResult = QSharedPointer<ThemeMediaResult>(); QSharedPointer<ThemeMediaResult> m_themeVideosResult = QSharedPointer<ThemeMediaResult>();
QSharedPointer<ThemeMediaResult> m_themeSongsResult = QSharedPointer<ThemeMediaResult>(); QSharedPointer<ThemeMediaResult> m_themeSongsResult = QSharedPointer<ThemeMediaResult>();
QSharedPointer<ThemeMediaResult> m_soundtrackSongsResult = QSharedPointer<ThemeMediaResult>(); QSharedPointer<ThemeMediaResult> m_soundtrackSongsResult = QSharedPointer<ThemeMediaResult>();
private:
// Private constructor which generates an invalid object, for use withing AllThemeMediaResult::fromJson();
AllThemeMediaResult();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -51,7 +51,10 @@ namespace DTO {
class ArtistInfo { class ArtistInfo {
public: public:
ArtistInfo(); ArtistInfo(
bool isAutomated
);
ArtistInfo(const ArtistInfo &other); ArtistInfo(const ArtistInfo &other);
/** /**
@ -176,8 +179,13 @@ protected:
QDateTime m_premiereDate; QDateTime m_premiereDate;
bool m_isAutomated; bool m_isAutomated;
QList<SongInfo> m_songInfos; QList<SongInfo> m_songInfos;
private:
// Private constructor which generates an invalid object, for use withing ArtistInfo::fromJson();
ArtistInfo();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -49,7 +49,12 @@ namespace DTO {
class ArtistInfoRemoteSearchQuery { class ArtistInfoRemoteSearchQuery {
public: public:
ArtistInfoRemoteSearchQuery(); ArtistInfoRemoteSearchQuery(
QSharedPointer<ArtistInfo> searchInfo,
QString itemId,
bool includeDisabledProviders
);
ArtistInfoRemoteSearchQuery(const ArtistInfoRemoteSearchQuery &other); ArtistInfoRemoteSearchQuery(const ArtistInfoRemoteSearchQuery &other);
/** /**
@ -98,8 +103,13 @@ protected:
QString m_itemId; QString m_itemId;
QString m_searchProviderName; QString m_searchProviderName;
bool m_includeDisabledProviders; bool m_includeDisabledProviders;
private:
// Private constructor which generates an invalid object, for use withing ArtistInfoRemoteSearchQuery::fromJson();
ArtistInfoRemoteSearchQuery();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -46,8 +46,7 @@ namespace DTO {
class AuthenticateUserByName { class AuthenticateUserByName {
public: public: AuthenticateUserByName();
AuthenticateUserByName();
AuthenticateUserByName(const AuthenticateUserByName &other); AuthenticateUserByName(const AuthenticateUserByName &other);
/** /**
@ -98,8 +97,11 @@ protected:
QString m_username; QString m_username;
QString m_pw; QString m_pw;
QString m_password; QString m_password;
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -48,7 +48,14 @@ namespace DTO {
class AuthenticationInfo { class AuthenticationInfo {
public: public:
AuthenticationInfo(); AuthenticationInfo(
qint64 jellyfinId,
QString userId,
bool isActive,
QDateTime dateCreated,
QDateTime dateLastActivity
);
AuthenticationInfo(const AuthenticationInfo &other); AuthenticationInfo(const AuthenticationInfo &other);
/** /**
@ -189,8 +196,13 @@ protected:
QDateTime m_dateRevoked; QDateTime m_dateRevoked;
QDateTime m_dateLastActivity; QDateTime m_dateLastActivity;
QString m_userName; QString m_userName;
private:
// Private constructor which generates an invalid object, for use withing AuthenticationInfo::fromJson();
AuthenticationInfo();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -49,7 +49,11 @@ namespace DTO {
class AuthenticationInfoQueryResult { class AuthenticationInfoQueryResult {
public: public:
AuthenticationInfoQueryResult(); AuthenticationInfoQueryResult(
qint32 totalRecordCount,
qint32 startIndex
);
AuthenticationInfoQueryResult(const AuthenticationInfoQueryResult &other); AuthenticationInfoQueryResult(const AuthenticationInfoQueryResult &other);
/** /**
@ -96,8 +100,13 @@ protected:
QList<AuthenticationInfo> m_items; QList<AuthenticationInfo> m_items;
qint32 m_totalRecordCount; qint32 m_totalRecordCount;
qint32 m_startIndex; qint32 m_startIndex;
private:
// Private constructor which generates an invalid object, for use withing AuthenticationInfoQueryResult::fromJson();
AuthenticationInfoQueryResult();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -50,7 +50,11 @@ namespace DTO {
class AuthenticationResult { class AuthenticationResult {
public: public:
AuthenticationResult(); AuthenticationResult(
QSharedPointer<UserDto> user,
QSharedPointer<SessionInfo> sessionInfo
);
AuthenticationResult(const AuthenticationResult &other); AuthenticationResult(const AuthenticationResult &other);
/** /**
@ -93,8 +97,13 @@ protected:
QSharedPointer<SessionInfo> m_sessionInfo = QSharedPointer<SessionInfo>(); QSharedPointer<SessionInfo> m_sessionInfo = QSharedPointer<SessionInfo>();
QString m_accessToken; QString m_accessToken;
QString m_serverId; QString m_serverId;
private:
// Private constructor which generates an invalid object, for use withing AuthenticationResult::fromJson();
AuthenticationResult();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -51,7 +51,15 @@ namespace DTO {
class BaseItem { class BaseItem {
public: public:
BaseItem(); BaseItem(
QDateTime dateLastSaved,
bool isHD,
bool isShortcut,
qint32 width,
qint32 height,
bool supportsExternalTransfer
);
BaseItem(const BaseItem &other); BaseItem(const BaseItem &other);
/** /**
@ -146,8 +154,13 @@ protected:
qint32 m_height; qint32 m_height;
QStringList m_extraIds; QStringList m_extraIds;
bool m_supportsExternalTransfer; bool m_supportsExternalTransfer;
private:
// Private constructor which generates an invalid object, for use withing BaseItem::fromJson();
BaseItem();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -69,7 +69,20 @@ namespace DTO {
class BaseItemDto { class BaseItemDto {
public: public:
BaseItemDto(); BaseItemDto(
QString jellyfinId,
Video3DFormat video3DFormat,
PlayAccess playAccess,
QSharedPointer<UserItemDataDto> userData,
VideoType videoType,
LocationType locationType,
IsoType isoType,
ImageOrientation imageOrientation,
ChannelType channelType,
ProgramAudio audio,
QSharedPointer<BaseItemDto> currentProgram
);
BaseItemDto(const BaseItemDto &other); BaseItemDto(const BaseItemDto &other);
/** /**
@ -1700,8 +1713,13 @@ protected:
std::optional<bool> m_isPremiere = std::nullopt; std::optional<bool> m_isPremiere = std::nullopt;
QString m_timerId; QString m_timerId;
QSharedPointer<BaseItemDto> m_currentProgram = QSharedPointer<BaseItemDto>(); QSharedPointer<BaseItemDto> m_currentProgram = QSharedPointer<BaseItemDto>();
private:
// Private constructor which generates an invalid object, for use withing BaseItemDto::fromJson();
BaseItemDto();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -49,7 +49,11 @@ namespace DTO {
class BaseItemDtoQueryResult { class BaseItemDtoQueryResult {
public: public:
BaseItemDtoQueryResult(); BaseItemDtoQueryResult(
qint32 totalRecordCount,
qint32 startIndex
);
BaseItemDtoQueryResult(const BaseItemDtoQueryResult &other); BaseItemDtoQueryResult(const BaseItemDtoQueryResult &other);
/** /**
@ -96,8 +100,13 @@ protected:
QList<BaseItemDto> m_items; QList<BaseItemDto> m_items;
qint32 m_totalRecordCount; qint32 m_totalRecordCount;
qint32 m_startIndex; qint32 m_startIndex;
private:
// Private constructor which generates an invalid object, for use withing BaseItemDtoQueryResult::fromJson();
BaseItemDtoQueryResult();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -46,8 +46,7 @@ namespace DTO {
class BaseItemPerson { class BaseItemPerson {
public: public: BaseItemPerson();
BaseItemPerson();
BaseItemPerson(const BaseItemPerson &other); BaseItemPerson(const BaseItemPerson &other);
/** /**
@ -134,8 +133,11 @@ protected:
QString m_type; QString m_type;
QString m_primaryImageTag; QString m_primaryImageTag;
QJsonObject m_imageBlurHashes; QJsonObject m_imageBlurHashes;
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -48,7 +48,10 @@ namespace DTO {
class BookInfo { class BookInfo {
public: public:
BookInfo(); BookInfo(
bool isAutomated
);
BookInfo(const BookInfo &other); BookInfo(const BookInfo &other);
/** /**
@ -173,8 +176,13 @@ protected:
QDateTime m_premiereDate; QDateTime m_premiereDate;
bool m_isAutomated; bool m_isAutomated;
QString m_seriesName; QString m_seriesName;
private:
// Private constructor which generates an invalid object, for use withing BookInfo::fromJson();
BookInfo();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -49,7 +49,12 @@ namespace DTO {
class BookInfoRemoteSearchQuery { class BookInfoRemoteSearchQuery {
public: public:
BookInfoRemoteSearchQuery(); BookInfoRemoteSearchQuery(
QSharedPointer<BookInfo> searchInfo,
QString itemId,
bool includeDisabledProviders
);
BookInfoRemoteSearchQuery(const BookInfoRemoteSearchQuery &other); BookInfoRemoteSearchQuery(const BookInfoRemoteSearchQuery &other);
/** /**
@ -98,8 +103,13 @@ protected:
QString m_itemId; QString m_itemId;
QString m_searchProviderName; QString m_searchProviderName;
bool m_includeDisabledProviders; bool m_includeDisabledProviders;
private:
// Private constructor which generates an invalid object, for use withing BookInfoRemoteSearchQuery::fromJson();
BookInfoRemoteSearchQuery();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -48,7 +48,10 @@ namespace DTO {
class BoxSetInfo { class BoxSetInfo {
public: public:
BoxSetInfo(); BoxSetInfo(
bool isAutomated
);
BoxSetInfo(const BoxSetInfo &other); BoxSetInfo(const BoxSetInfo &other);
/** /**
@ -165,8 +168,13 @@ protected:
std::optional<qint32> m_parentIndexNumber = std::nullopt; std::optional<qint32> m_parentIndexNumber = std::nullopt;
QDateTime m_premiereDate; QDateTime m_premiereDate;
bool m_isAutomated; bool m_isAutomated;
private:
// Private constructor which generates an invalid object, for use withing BoxSetInfo::fromJson();
BoxSetInfo();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -49,7 +49,12 @@ namespace DTO {
class BoxSetInfoRemoteSearchQuery { class BoxSetInfoRemoteSearchQuery {
public: public:
BoxSetInfoRemoteSearchQuery(); BoxSetInfoRemoteSearchQuery(
QSharedPointer<BoxSetInfo> searchInfo,
QString itemId,
bool includeDisabledProviders
);
BoxSetInfoRemoteSearchQuery(const BoxSetInfoRemoteSearchQuery &other); BoxSetInfoRemoteSearchQuery(const BoxSetInfoRemoteSearchQuery &other);
/** /**
@ -98,8 +103,13 @@ protected:
QString m_itemId; QString m_itemId;
QString m_searchProviderName; QString m_searchProviderName;
bool m_includeDisabledProviders; bool m_includeDisabledProviders;
private:
// Private constructor which generates an invalid object, for use withing BoxSetInfoRemoteSearchQuery::fromJson();
BoxSetInfoRemoteSearchQuery();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -46,8 +46,7 @@ namespace DTO {
class BrandingOptions { class BrandingOptions {
public: public: BrandingOptions();
BrandingOptions();
BrandingOptions(const BrandingOptions &other); BrandingOptions(const BrandingOptions &other);
/** /**
@ -86,8 +85,11 @@ public:
protected: protected:
QString m_loginDisclaimer; QString m_loginDisclaimer;
QString m_customCss; QString m_customCss;
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -48,7 +48,13 @@ namespace DTO {
class BufferRequestDto { class BufferRequestDto {
public: public:
BufferRequestDto(); BufferRequestDto(
QDateTime when,
qint64 positionTicks,
bool isPlaying,
QString playlistItemId
);
BufferRequestDto(const BufferRequestDto &other); BufferRequestDto(const BufferRequestDto &other);
/** /**
@ -103,8 +109,13 @@ protected:
qint64 m_positionTicks; qint64 m_positionTicks;
bool m_isPlaying; bool m_isPlaying;
QString m_playlistItemId; QString m_playlistItemId;
private:
// Private constructor which generates an invalid object, for use withing BufferRequestDto::fromJson();
BufferRequestDto();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -52,7 +52,14 @@ namespace DTO {
class ChannelFeatures { class ChannelFeatures {
public: public:
ChannelFeatures(); ChannelFeatures(
bool canSearch,
bool supportsSortOrderToggle,
bool supportsLatestMedia,
bool canFilter,
bool supportsContentDownloading
);
ChannelFeatures(const ChannelFeatures &other); ChannelFeatures(const ChannelFeatures &other);
/** /**
@ -201,8 +208,13 @@ protected:
bool m_supportsLatestMedia; bool m_supportsLatestMedia;
bool m_canFilter; bool m_canFilter;
bool m_supportsContentDownloading; bool m_supportsContentDownloading;
private:
// Private constructor which generates an invalid object, for use withing ChannelFeatures::fromJson();
ChannelFeatures();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -51,8 +51,7 @@ namespace DTO {
class ChannelMappingOptionsDto { class ChannelMappingOptionsDto {
public: public: ChannelMappingOptionsDto();
ChannelMappingOptionsDto();
ChannelMappingOptionsDto(const ChannelMappingOptionsDto &other); ChannelMappingOptionsDto(const ChannelMappingOptionsDto &other);
/** /**
@ -115,8 +114,11 @@ protected:
QList<NameIdPair> m_providerChannels; QList<NameIdPair> m_providerChannels;
QList<NameValuePair> m_mappings; QList<NameValuePair> m_mappings;
QString m_providerName; QString m_providerName;
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -48,7 +48,11 @@ namespace DTO {
class ChapterInfo { class ChapterInfo {
public: public:
ChapterInfo(); ChapterInfo(
qint64 startPositionTicks,
QDateTime imageDateModified
);
ChapterInfo(const ChapterInfo &other); ChapterInfo(const ChapterInfo &other);
/** /**
@ -111,8 +115,13 @@ protected:
QString m_imagePath; QString m_imagePath;
QDateTime m_imageDateModified; QDateTime m_imageDateModified;
QString m_imageTag; QString m_imageTag;
private:
// Private constructor which generates an invalid object, for use withing ChapterInfo::fromJson();
ChapterInfo();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -52,7 +52,14 @@ namespace DTO {
class ClientCapabilities { class ClientCapabilities {
public: public:
ClientCapabilities(); ClientCapabilities(
bool supportsMediaControl,
bool supportsContentUploading,
bool supportsPersistentIdentifier,
bool supportsSync,
QSharedPointer<DeviceProfile> deviceProfile
);
ClientCapabilities(const ClientCapabilities &other); ClientCapabilities(const ClientCapabilities &other);
/** /**
@ -137,8 +144,13 @@ protected:
QSharedPointer<DeviceProfile> m_deviceProfile = QSharedPointer<DeviceProfile>(); QSharedPointer<DeviceProfile> m_deviceProfile = QSharedPointer<DeviceProfile>();
QString m_appStoreUrl; QString m_appStoreUrl;
QString m_iconUrl; QString m_iconUrl;
private:
// Private constructor which generates an invalid object, for use withing ClientCapabilities::fromJson();
ClientCapabilities();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -52,7 +52,14 @@ namespace DTO {
class ClientCapabilitiesDto { class ClientCapabilitiesDto {
public: public:
ClientCapabilitiesDto(); ClientCapabilitiesDto(
bool supportsMediaControl,
bool supportsContentUploading,
bool supportsPersistentIdentifier,
bool supportsSync,
QSharedPointer<DeviceProfile> deviceProfile
);
ClientCapabilitiesDto(const ClientCapabilitiesDto &other); ClientCapabilitiesDto(const ClientCapabilitiesDto &other);
/** /**
@ -173,8 +180,13 @@ protected:
QSharedPointer<DeviceProfile> m_deviceProfile = QSharedPointer<DeviceProfile>(); QSharedPointer<DeviceProfile> m_deviceProfile = QSharedPointer<DeviceProfile>();
QString m_appStoreUrl; QString m_appStoreUrl;
QString m_iconUrl; QString m_iconUrl;
private:
// Private constructor which generates an invalid object, for use withing ClientCapabilitiesDto::fromJson();
ClientCapabilitiesDto();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -51,7 +51,10 @@ namespace DTO {
class CodecProfile { class CodecProfile {
public: public:
CodecProfile(); CodecProfile(
CodecType type
);
CodecProfile(const CodecProfile &other); CodecProfile(const CodecProfile &other);
/** /**
@ -104,8 +107,13 @@ protected:
QList<ProfileCondition> m_applyConditions; QList<ProfileCondition> m_applyConditions;
QString m_codec; QString m_codec;
QString m_container; QString m_container;
private:
// Private constructor which generates an invalid object, for use withing CodecProfile::fromJson();
CodecProfile();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -47,7 +47,10 @@ namespace DTO {
class CollectionCreationResult { class CollectionCreationResult {
public: public:
CollectionCreationResult(); CollectionCreationResult(
QString jellyfinId
);
CollectionCreationResult(const CollectionCreationResult &other); CollectionCreationResult(const CollectionCreationResult &other);
/** /**
@ -68,8 +71,13 @@ public:
protected: protected:
QString m_jellyfinId; QString m_jellyfinId;
private:
// Private constructor which generates an invalid object, for use withing CollectionCreationResult::fromJson();
CollectionCreationResult();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -48,7 +48,11 @@ namespace DTO {
class ConfigurationPageInfo { class ConfigurationPageInfo {
public: public:
ConfigurationPageInfo(); ConfigurationPageInfo(
bool enableInMainMenu,
ConfigurationPageType configurationPageType
);
ConfigurationPageInfo(const ConfigurationPageInfo &other); ConfigurationPageInfo(const ConfigurationPageInfo &other);
/** /**
@ -139,8 +143,13 @@ protected:
QString m_displayName; QString m_displayName;
ConfigurationPageType m_configurationPageType; ConfigurationPageType m_configurationPageType;
QString m_pluginId; QString m_pluginId;
private:
// Private constructor which generates an invalid object, for use withing ConfigurationPageInfo::fromJson();
ConfigurationPageInfo();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -51,7 +51,10 @@ namespace DTO {
class ContainerProfile { class ContainerProfile {
public: public:
ContainerProfile(); ContainerProfile(
DlnaProfileType type
);
ContainerProfile(const ContainerProfile &other); ContainerProfile(const ContainerProfile &other);
/** /**
@ -88,8 +91,13 @@ protected:
DlnaProfileType m_type; DlnaProfileType m_type;
QList<ProfileCondition> m_conditions; QList<ProfileCondition> m_conditions;
QString m_container; QString m_container;
private:
// Private constructor which generates an invalid object, for use withing ContainerProfile::fromJson();
ContainerProfile();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -47,7 +47,10 @@ namespace DTO {
class ControlResponse { class ControlResponse {
public: public:
ControlResponse(); ControlResponse(
bool isSuccessful
);
ControlResponse(const ControlResponse &other); ControlResponse(const ControlResponse &other);
/** /**
@ -84,8 +87,13 @@ protected:
QJsonObject m_headers; QJsonObject m_headers;
QString m_xml; QString m_xml;
bool m_isSuccessful; bool m_isSuccessful;
private:
// Private constructor which generates an invalid object, for use withing ControlResponse::fromJson();
ControlResponse();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -46,8 +46,7 @@ namespace DTO {
class CountryInfo { class CountryInfo {
public: public: CountryInfo();
CountryInfo();
CountryInfo(const CountryInfo &other); CountryInfo(const CountryInfo &other);
/** /**
@ -110,8 +109,11 @@ protected:
QString m_displayName; QString m_displayName;
QString m_twoLetterISORegionName; QString m_twoLetterISORegionName;
QString m_threeLetterISORegionName; QString m_threeLetterISORegionName;
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -48,8 +48,7 @@ namespace DTO {
class CreatePlaylistDto { class CreatePlaylistDto {
public: public: CreatePlaylistDto();
CreatePlaylistDto();
CreatePlaylistDto(const CreatePlaylistDto &other); CreatePlaylistDto(const CreatePlaylistDto &other);
/** /**
@ -112,8 +111,11 @@ protected:
QStringList m_ids; QStringList m_ids;
QString m_userId; QString m_userId;
QString m_mediaType; QString m_mediaType;
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -46,8 +46,7 @@ namespace DTO {
class CreateUserByName { class CreateUserByName {
public: public: CreateUserByName();
CreateUserByName();
CreateUserByName(const CreateUserByName &other); CreateUserByName(const CreateUserByName &other);
/** /**
@ -86,8 +85,11 @@ public:
protected: protected:
QString m_name; QString m_name;
QString m_password; QString m_password;
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -48,8 +48,7 @@ namespace DTO {
class CultureDto { class CultureDto {
public: public: CultureDto();
CultureDto();
CultureDto(const CultureDto &other); CultureDto(const CultureDto &other);
/** /**
@ -120,8 +119,11 @@ protected:
QString m_twoLetterISOLanguageName; QString m_twoLetterISOLanguageName;
QString m_threeLetterISOLanguageName; QString m_threeLetterISOLanguageName;
QStringList m_threeLetterISOLanguageNames; QStringList m_threeLetterISOLanguageNames;
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -46,8 +46,7 @@ namespace DTO {
class DefaultDirectoryBrowserInfoDto { class DefaultDirectoryBrowserInfoDto {
public: public: DefaultDirectoryBrowserInfoDto();
DefaultDirectoryBrowserInfoDto();
DefaultDirectoryBrowserInfoDto(const DefaultDirectoryBrowserInfoDto &other); DefaultDirectoryBrowserInfoDto(const DefaultDirectoryBrowserInfoDto &other);
/** /**
@ -74,8 +73,11 @@ public:
protected: protected:
QString m_path; QString m_path;
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -49,8 +49,7 @@ namespace DTO {
class DeviceIdentification { class DeviceIdentification {
public: public: DeviceIdentification();
DeviceIdentification();
DeviceIdentification(const DeviceIdentification &other); DeviceIdentification(const DeviceIdentification &other);
/** /**
@ -173,8 +172,11 @@ protected:
QString m_manufacturer; QString m_manufacturer;
QString m_manufacturerUrl; QString m_manufacturerUrl;
QList<HttpHeaderInfo> m_headers; QList<HttpHeaderInfo> m_headers;
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -50,7 +50,12 @@ namespace DTO {
class DeviceInfo { class DeviceInfo {
public: public:
DeviceInfo(); DeviceInfo(
QString lastUserId,
QDateTime dateLastActivity,
QSharedPointer<ClientCapabilities> capabilities
);
DeviceInfo(const DeviceInfo &other); DeviceInfo(const DeviceInfo &other);
/** /**
@ -155,8 +160,13 @@ protected:
QDateTime m_dateLastActivity; QDateTime m_dateLastActivity;
QSharedPointer<ClientCapabilities> m_capabilities = QSharedPointer<ClientCapabilities>(); QSharedPointer<ClientCapabilities> m_capabilities = QSharedPointer<ClientCapabilities>();
QString m_iconUrl; QString m_iconUrl;
private:
// Private constructor which generates an invalid object, for use withing DeviceInfo::fromJson();
DeviceInfo();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -49,7 +49,11 @@ namespace DTO {
class DeviceInfoQueryResult { class DeviceInfoQueryResult {
public: public:
DeviceInfoQueryResult(); DeviceInfoQueryResult(
qint32 totalRecordCount,
qint32 startIndex
);
DeviceInfoQueryResult(const DeviceInfoQueryResult &other); DeviceInfoQueryResult(const DeviceInfoQueryResult &other);
/** /**
@ -96,8 +100,13 @@ protected:
QList<DeviceInfo> m_items; QList<DeviceInfo> m_items;
qint32 m_totalRecordCount; qint32 m_totalRecordCount;
qint32 m_startIndex; qint32 m_startIndex;
private:
// Private constructor which generates an invalid object, for use withing DeviceInfoQueryResult::fromJson();
DeviceInfoQueryResult();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -46,8 +46,7 @@ namespace DTO {
class DeviceOptions { class DeviceOptions {
public: public: DeviceOptions();
DeviceOptions();
DeviceOptions(const DeviceOptions &other); DeviceOptions(const DeviceOptions &other);
/** /**
@ -70,8 +69,11 @@ public:
protected: protected:
QString m_customName; QString m_customName;
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -58,7 +58,20 @@ namespace DTO {
class DeviceProfile { class DeviceProfile {
public: public:
DeviceProfile(); DeviceProfile(
QSharedPointer<DeviceIdentification> identification,
bool enableAlbumArtInDidl,
bool enableSingleAlbumArtLimit,
bool enableSingleSubtitleLimit,
qint32 maxAlbumArtWidth,
qint32 maxAlbumArtHeight,
qint32 timelineOffsetSeconds,
bool requiresPlainVideoItems,
bool requiresPlainFolders,
bool enableMSMediaReceiverRegistrar,
bool ignoreTranscodeByteRangeRequests
);
DeviceProfile(const DeviceProfile &other); DeviceProfile(const DeviceProfile &other);
/** /**
@ -515,8 +528,13 @@ protected:
QList<CodecProfile> m_codecProfiles; QList<CodecProfile> m_codecProfiles;
QList<ResponseProfile> m_responseProfiles; QList<ResponseProfile> m_responseProfiles;
QList<SubtitleProfile> m_subtitleProfiles; QList<SubtitleProfile> m_subtitleProfiles;
private:
// Private constructor which generates an invalid object, for use withing DeviceProfile::fromJson();
DeviceProfile();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -48,7 +48,10 @@ namespace DTO {
class DeviceProfileInfo { class DeviceProfileInfo {
public: public:
DeviceProfileInfo(); DeviceProfileInfo(
DeviceProfileType type
);
DeviceProfileInfo(const DeviceProfileInfo &other); DeviceProfileInfo(const DeviceProfileInfo &other);
/** /**
@ -93,8 +96,13 @@ protected:
QString m_jellyfinId; QString m_jellyfinId;
QString m_name; QString m_name;
DeviceProfileType m_type; DeviceProfileType m_type;
private:
// Private constructor which generates an invalid object, for use withing DeviceProfileInfo::fromJson();
DeviceProfileInfo();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -48,7 +48,10 @@ namespace DTO {
class DirectPlayProfile { class DirectPlayProfile {
public: public:
DirectPlayProfile(); DirectPlayProfile(
DlnaProfileType type
);
DirectPlayProfile(const DirectPlayProfile &other); DirectPlayProfile(const DirectPlayProfile &other);
/** /**
@ -93,8 +96,13 @@ protected:
QString m_audioCodec; QString m_audioCodec;
QString m_videoCodec; QString m_videoCodec;
DlnaProfileType m_type; DlnaProfileType m_type;
private:
// Private constructor which generates an invalid object, for use withing DirectPlayProfile::fromJson();
DirectPlayProfile();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -49,7 +49,17 @@ namespace DTO {
class DisplayPreferencesDto { class DisplayPreferencesDto {
public: public:
DisplayPreferencesDto(); DisplayPreferencesDto(
bool rememberIndexing,
qint32 primaryImageHeight,
qint32 primaryImageWidth,
ScrollDirection scrollDirection,
bool showBackdrop,
bool rememberSorting,
SortOrder sortOrder,
bool showSidebar
);
DisplayPreferencesDto(const DisplayPreferencesDto &other); DisplayPreferencesDto(const DisplayPreferencesDto &other);
/** /**
@ -208,8 +218,13 @@ protected:
SortOrder m_sortOrder; SortOrder m_sortOrder;
bool m_showSidebar; bool m_showSidebar;
QString m_client; QString m_client;
private:
// Private constructor which generates an invalid object, for use withing DisplayPreferencesDto::fromJson();
DisplayPreferencesDto();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -46,7 +46,11 @@ namespace DTO {
class EndPointInfo { class EndPointInfo {
public: public:
EndPointInfo(); EndPointInfo(
bool isLocal,
bool isInNetwork
);
EndPointInfo(const EndPointInfo &other); EndPointInfo(const EndPointInfo &other);
/** /**
@ -73,8 +77,13 @@ public:
protected: protected:
bool m_isLocal; bool m_isLocal;
bool m_isInNetwork; bool m_isInNetwork;
private:
// Private constructor which generates an invalid object, for use withing EndPointInfo::fromJson();
EndPointInfo();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -48,7 +48,10 @@ namespace DTO {
class ExternalIdInfo { class ExternalIdInfo {
public: public:
ExternalIdInfo(); ExternalIdInfo(
ExternalIdMediaType type
);
ExternalIdInfo(const ExternalIdInfo &other); ExternalIdInfo(const ExternalIdInfo &other);
/** /**
@ -105,8 +108,13 @@ protected:
QString m_key; QString m_key;
ExternalIdMediaType m_type; ExternalIdMediaType m_type;
QString m_urlFormatString; QString m_urlFormatString;
private:
// Private constructor which generates an invalid object, for use withing ExternalIdInfo::fromJson();
ExternalIdInfo();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -46,8 +46,7 @@ namespace DTO {
class ExternalUrl { class ExternalUrl {
public: public: ExternalUrl();
ExternalUrl();
ExternalUrl(const ExternalUrl &other); ExternalUrl(const ExternalUrl &other);
/** /**
@ -86,8 +85,11 @@ public:
protected: protected:
QString m_name; QString m_name;
QString m_url; QString m_url;
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -48,7 +48,10 @@ namespace DTO {
class FileSystemEntryInfo { class FileSystemEntryInfo {
public: public:
FileSystemEntryInfo(); FileSystemEntryInfo(
FileSystemEntryType type
);
FileSystemEntryInfo(const FileSystemEntryInfo &other); FileSystemEntryInfo(const FileSystemEntryInfo &other);
/** /**
@ -93,8 +96,13 @@ protected:
QString m_name; QString m_name;
QString m_path; QString m_path;
FileSystemEntryType m_type; FileSystemEntryType m_type;
private:
// Private constructor which generates an invalid object, for use withing FileSystemEntryInfo::fromJson();
FileSystemEntryInfo();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -48,7 +48,12 @@ namespace DTO {
class FontFile { class FontFile {
public: public:
FontFile(); FontFile(
qint64 size,
QDateTime dateCreated,
QDateTime dateModified
);
FontFile(const FontFile &other); FontFile(const FontFile &other);
/** /**
@ -105,8 +110,13 @@ protected:
qint64 m_size; qint64 m_size;
QDateTime m_dateCreated; QDateTime m_dateCreated;
QDateTime m_dateModified; QDateTime m_dateModified;
private:
// Private constructor which generates an invalid object, for use withing FontFile::fromJson();
FontFile();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -47,7 +47,10 @@ namespace DTO {
class ForgotPasswordDto { class ForgotPasswordDto {
public: public:
ForgotPasswordDto(); ForgotPasswordDto(
QString enteredUsername
);
ForgotPasswordDto(const ForgotPasswordDto &other); ForgotPasswordDto(const ForgotPasswordDto &other);
/** /**
@ -72,8 +75,13 @@ public:
protected: protected:
QString m_enteredUsername; QString m_enteredUsername;
private:
// Private constructor which generates an invalid object, for use withing ForgotPasswordDto::fromJson();
ForgotPasswordDto();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -49,7 +49,10 @@ namespace DTO {
class ForgotPasswordResult { class ForgotPasswordResult {
public: public:
ForgotPasswordResult(); ForgotPasswordResult(
ForgotPasswordAction action
);
ForgotPasswordResult(const ForgotPasswordResult &other); ForgotPasswordResult(const ForgotPasswordResult &other);
/** /**
@ -94,8 +97,13 @@ protected:
ForgotPasswordAction m_action; ForgotPasswordAction m_action;
QString m_pinFile; QString m_pinFile;
QDateTime m_pinExpirationDate; QDateTime m_pinExpirationDate;
private:
// Private constructor which generates an invalid object, for use withing ForgotPasswordResult::fromJson();
ForgotPasswordResult();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -48,7 +48,11 @@ namespace DTO {
class GeneralCommand { class GeneralCommand {
public: public:
GeneralCommand(); GeneralCommand(
GeneralCommandType name,
QString controllingUserId
);
GeneralCommand(const GeneralCommand &other); GeneralCommand(const GeneralCommand &other);
/** /**
@ -83,8 +87,13 @@ protected:
GeneralCommandType m_name; GeneralCommandType m_name;
QString m_controllingUserId; QString m_controllingUserId;
QJsonObject m_arguments; QJsonObject m_arguments;
private:
// Private constructor which generates an invalid object, for use withing GeneralCommand::fromJson();
GeneralCommand();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -52,7 +52,12 @@ namespace DTO {
class GetProgramsDto { class GetProgramsDto {
public: public:
GetProgramsDto(); GetProgramsDto(
QString userId,
bool enableTotalRecordCount,
QString librarySeriesId
);
GetProgramsDto(const GetProgramsDto &other); GetProgramsDto(const GetProgramsDto &other);
/** /**
@ -427,8 +432,13 @@ protected:
QString m_seriesTimerId; QString m_seriesTimerId;
QString m_librarySeriesId; QString m_librarySeriesId;
QList<ItemFields> m_fields; QList<ItemFields> m_fields;
private:
// Private constructor which generates an invalid object, for use withing GetProgramsDto::fromJson();
GetProgramsDto();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -51,7 +51,12 @@ namespace DTO {
class GroupInfoDto { class GroupInfoDto {
public: public:
GroupInfoDto(); GroupInfoDto(
QString groupId,
GroupStateType state,
QDateTime lastUpdatedAt
);
GroupInfoDto(const GroupInfoDto &other); GroupInfoDto(const GroupInfoDto &other);
/** /**
@ -116,8 +121,13 @@ protected:
GroupStateType m_state; GroupStateType m_state;
QStringList m_participants; QStringList m_participants;
QDateTime m_lastUpdatedAt; QDateTime m_lastUpdatedAt;
private:
// Private constructor which generates an invalid object, for use withing GroupInfoDto::fromJson();
GroupInfoDto();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -47,7 +47,11 @@ namespace DTO {
class GuideInfo { class GuideInfo {
public: public:
GuideInfo(); GuideInfo(
QDateTime startDate,
QDateTime endDate
);
GuideInfo(const GuideInfo &other); GuideInfo(const GuideInfo &other);
/** /**
@ -82,8 +86,13 @@ public:
protected: protected:
QDateTime m_startDate; QDateTime m_startDate;
QDateTime m_endDate; QDateTime m_endDate;
private:
// Private constructor which generates an invalid object, for use withing GuideInfo::fromJson();
GuideInfo();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -48,7 +48,10 @@ namespace DTO {
class HttpHeaderInfo { class HttpHeaderInfo {
public: public:
HttpHeaderInfo(); HttpHeaderInfo(
HeaderMatchType match
);
HttpHeaderInfo(const HttpHeaderInfo &other); HttpHeaderInfo(const HttpHeaderInfo &other);
/** /**
@ -85,8 +88,13 @@ protected:
QString m_name; QString m_name;
QString m_value; QString m_value;
HeaderMatchType m_match; HeaderMatchType m_match;
private:
// Private constructor which generates an invalid object, for use withing HttpHeaderInfo::fromJson();
HttpHeaderInfo();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -46,7 +46,10 @@ namespace DTO {
class IgnoreWaitRequestDto { class IgnoreWaitRequestDto {
public: public:
IgnoreWaitRequestDto(); IgnoreWaitRequestDto(
bool ignoreWait
);
IgnoreWaitRequestDto(const IgnoreWaitRequestDto &other); IgnoreWaitRequestDto(const IgnoreWaitRequestDto &other);
/** /**
@ -71,8 +74,13 @@ public:
protected: protected:
bool m_ignoreWait; bool m_ignoreWait;
private:
// Private constructor which generates an invalid object, for use withing IgnoreWaitRequestDto::fromJson();
IgnoreWaitRequestDto();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -47,7 +47,10 @@ namespace DTO {
class ImageByNameInfo { class ImageByNameInfo {
public: public:
ImageByNameInfo(); ImageByNameInfo(
qint64 fileLength
);
ImageByNameInfo(const ImageByNameInfo &other); ImageByNameInfo(const ImageByNameInfo &other);
/** /**
@ -120,8 +123,13 @@ protected:
QString m_context; QString m_context;
qint64 m_fileLength; qint64 m_fileLength;
QString m_format; QString m_format;
private:
// Private constructor which generates an invalid object, for use withing ImageByNameInfo::fromJson();
ImageByNameInfo();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -48,7 +48,11 @@ namespace DTO {
class ImageInfo { class ImageInfo {
public: public:
ImageInfo(); ImageInfo(
ImageType imageType,
qint64 size
);
ImageInfo(const ImageInfo &other); ImageInfo(const ImageInfo &other);
/** /**
@ -151,8 +155,13 @@ protected:
std::optional<qint32> m_height = std::nullopt; std::optional<qint32> m_height = std::nullopt;
std::optional<qint32> m_width = std::nullopt; std::optional<qint32> m_width = std::nullopt;
qint64 m_size; qint64 m_size;
private:
// Private constructor which generates an invalid object, for use withing ImageInfo::fromJson();
ImageInfo();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -47,7 +47,12 @@ namespace DTO {
class ImageOption { class ImageOption {
public: public:
ImageOption(); ImageOption(
ImageType type,
qint32 limit,
qint32 minWidth
);
ImageOption(const ImageOption &other); ImageOption(const ImageOption &other);
/** /**
@ -88,8 +93,13 @@ protected:
ImageType m_type; ImageType m_type;
qint32 m_limit; qint32 m_limit;
qint32 m_minWidth; qint32 m_minWidth;
private:
// Private constructor which generates an invalid object, for use withing ImageOption::fromJson();
ImageOption();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -49,8 +49,7 @@ namespace DTO {
class ImageProviderInfo { class ImageProviderInfo {
public: public: ImageProviderInfo();
ImageProviderInfo();
ImageProviderInfo(const ImageProviderInfo &other); ImageProviderInfo(const ImageProviderInfo &other);
/** /**
@ -89,8 +88,11 @@ public:
protected: protected:
QString m_name; QString m_name;
QList<ImageType> m_supportedImages; QList<ImageType> m_supportedImages;
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -49,7 +49,11 @@ namespace DTO {
class InstallationInfo { class InstallationInfo {
public: public:
InstallationInfo(); InstallationInfo(
QString guid,
QSharedPointer<Version> version
);
InstallationInfo(const InstallationInfo &other); InstallationInfo(const InstallationInfo &other);
/** /**
@ -128,8 +132,13 @@ protected:
QString m_changelog; QString m_changelog;
QString m_sourceUrl; QString m_sourceUrl;
QString m_checksum; QString m_checksum;
private:
// Private constructor which generates an invalid object, for use withing InstallationInfo::fromJson();
InstallationInfo();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -49,7 +49,12 @@ namespace DTO {
class IPlugin { class IPlugin {
public: public:
IPlugin(); IPlugin(
QString jellyfinId,
QSharedPointer<Version> version,
bool canUninstall
);
IPlugin(const IPlugin &other); IPlugin(const IPlugin &other);
/** /**
@ -138,8 +143,13 @@ protected:
QString m_assemblyFilePath; QString m_assemblyFilePath;
bool m_canUninstall; bool m_canUninstall;
QString m_dataFolderPath; QString m_dataFolderPath;
private:
// Private constructor which generates an invalid object, for use withing IPlugin::fromJson();
IPlugin();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -46,7 +46,21 @@ namespace DTO {
class ItemCounts { class ItemCounts {
public: public:
ItemCounts(); ItemCounts(
qint32 movieCount,
qint32 seriesCount,
qint32 episodeCount,
qint32 artistCount,
qint32 programCount,
qint32 trailerCount,
qint32 songCount,
qint32 albumCount,
qint32 musicVideoCount,
qint32 boxSetCount,
qint32 bookCount,
qint32 itemCount
);
ItemCounts(const ItemCounts &other); ItemCounts(const ItemCounts &other);
/** /**
@ -181,8 +195,13 @@ protected:
qint32 m_boxSetCount; qint32 m_boxSetCount;
qint32 m_bookCount; qint32 m_bookCount;
qint32 m_itemCount; qint32 m_itemCount;
private:
// Private constructor which generates an invalid object, for use withing ItemCounts::fromJson();
ItemCounts();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -47,7 +47,10 @@ namespace DTO {
class JoinGroupRequestDto { class JoinGroupRequestDto {
public: public:
JoinGroupRequestDto(); JoinGroupRequestDto(
QString groupId
);
JoinGroupRequestDto(const JoinGroupRequestDto &other); JoinGroupRequestDto(const JoinGroupRequestDto &other);
/** /**
@ -72,8 +75,13 @@ public:
protected: protected:
QString m_groupId; QString m_groupId;
private:
// Private constructor which generates an invalid object, for use withing JoinGroupRequestDto::fromJson();
JoinGroupRequestDto();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -47,7 +47,10 @@ namespace DTO {
class LibraryOptionInfoDto { class LibraryOptionInfoDto {
public: public:
LibraryOptionInfoDto(); LibraryOptionInfoDto(
bool defaultEnabled
);
LibraryOptionInfoDto(const LibraryOptionInfoDto &other); LibraryOptionInfoDto(const LibraryOptionInfoDto &other);
/** /**
@ -84,8 +87,13 @@ public:
protected: protected:
QString m_name; QString m_name;
bool m_defaultEnabled; bool m_defaultEnabled;
private:
// Private constructor which generates an invalid object, for use withing LibraryOptionInfoDto::fromJson();
LibraryOptionInfoDto();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -51,7 +51,23 @@ namespace DTO {
class LibraryOptions { class LibraryOptions {
public: public:
LibraryOptions(); LibraryOptions(
bool enablePhotos,
bool enableRealtimeMonitor,
bool enableChapterImageExtraction,
bool extractChapterImagesDuringLibraryScan,
bool saveLocalMetadata,
bool enableInternetProviders,
bool enableAutomaticSeriesGrouping,
bool enableEmbeddedTitles,
bool enableEmbeddedEpisodeInfos,
qint32 automaticRefreshIntervalDays,
bool skipSubtitlesIfEmbeddedSubtitlesPresent,
bool skipSubtitlesIfAudioTrackMatches,
bool requirePerfectSubtitleMatch,
bool saveSubtitlesWithMedia
);
LibraryOptions(const LibraryOptions &other); LibraryOptions(const LibraryOptions &other);
/** /**
@ -246,8 +262,13 @@ protected:
bool m_requirePerfectSubtitleMatch; bool m_requirePerfectSubtitleMatch;
bool m_saveSubtitlesWithMedia; bool m_saveSubtitlesWithMedia;
QList<TypeOptions> m_typeOptions; QList<TypeOptions> m_typeOptions;
private:
// Private constructor which generates an invalid object, for use withing LibraryOptions::fromJson();
LibraryOptions();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -49,8 +49,7 @@ namespace DTO {
class LibraryOptionsResultDto { class LibraryOptionsResultDto {
public: public: LibraryOptionsResultDto();
LibraryOptionsResultDto();
LibraryOptionsResultDto(const LibraryOptionsResultDto &other); LibraryOptionsResultDto(const LibraryOptionsResultDto &other);
/** /**
@ -113,8 +112,11 @@ protected:
QList<LibraryOptionInfoDto> m_metadataReaders; QList<LibraryOptionInfoDto> m_metadataReaders;
QList<LibraryOptionInfoDto> m_subtitleFetchers; QList<LibraryOptionInfoDto> m_subtitleFetchers;
QList<LibraryTypeOptionsDto> m_typeOptions; QList<LibraryTypeOptionsDto> m_typeOptions;
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -51,8 +51,7 @@ namespace DTO {
class LibraryTypeOptionsDto { class LibraryTypeOptionsDto {
public: public: LibraryTypeOptionsDto();
LibraryTypeOptionsDto();
LibraryTypeOptionsDto(const LibraryTypeOptionsDto &other); LibraryTypeOptionsDto(const LibraryTypeOptionsDto &other);
/** /**
@ -127,8 +126,11 @@ protected:
QList<LibraryOptionInfoDto> m_imageFetchers; QList<LibraryOptionInfoDto> m_imageFetchers;
QList<ImageType> m_supportedImageTypes; QList<ImageType> m_supportedImageTypes;
QList<ImageOption> m_defaultImageOptions; QList<ImageOption> m_defaultImageOptions;
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -49,7 +49,10 @@ namespace DTO {
class LibraryUpdateInfo { class LibraryUpdateInfo {
public: public:
LibraryUpdateInfo(); LibraryUpdateInfo(
bool isEmpty
);
LibraryUpdateInfo(const LibraryUpdateInfo &other); LibraryUpdateInfo(const LibraryUpdateInfo &other);
/** /**
@ -138,8 +141,13 @@ protected:
QStringList m_itemsUpdated; QStringList m_itemsUpdated;
QStringList m_collectionFolders; QStringList m_collectionFolders;
bool m_isEmpty; bool m_isEmpty;
private:
// Private constructor which generates an invalid object, for use withing LibraryUpdateInfo::fromJson();
LibraryUpdateInfo();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -50,7 +50,10 @@ namespace DTO {
class ListingsProviderInfo { class ListingsProviderInfo {
public: public:
ListingsProviderInfo(); ListingsProviderInfo(
bool enableAllTuners
);
ListingsProviderInfo(const ListingsProviderInfo &other); ListingsProviderInfo(const ListingsProviderInfo &other);
/** /**
@ -207,8 +210,13 @@ protected:
QString m_moviePrefix; QString m_moviePrefix;
QString m_preferredLanguage; QString m_preferredLanguage;
QString m_userAgent; QString m_userAgent;
private:
// Private constructor which generates an invalid object, for use withing ListingsProviderInfo::fromJson();
ListingsProviderInfo();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -48,7 +48,10 @@ namespace DTO {
class LiveStreamResponse { class LiveStreamResponse {
public: public:
LiveStreamResponse(); LiveStreamResponse(
QSharedPointer<MediaSourceInfo> mediaSource
);
LiveStreamResponse(const LiveStreamResponse &other); LiveStreamResponse(const LiveStreamResponse &other);
/** /**
@ -69,8 +72,13 @@ public:
protected: protected:
QSharedPointer<MediaSourceInfo> m_mediaSource = QSharedPointer<MediaSourceInfo>(); QSharedPointer<MediaSourceInfo> m_mediaSource = QSharedPointer<MediaSourceInfo>();
private:
// Private constructor which generates an invalid object, for use withing LiveStreamResponse::fromJson();
LiveStreamResponse();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -49,7 +49,10 @@ namespace DTO {
class LiveTvInfo { class LiveTvInfo {
public: public:
LiveTvInfo(); LiveTvInfo(
bool isEnabled
);
LiveTvInfo(const LiveTvInfo &other); LiveTvInfo(const LiveTvInfo &other);
/** /**
@ -98,8 +101,13 @@ protected:
QList<LiveTvServiceInfo> m_services; QList<LiveTvServiceInfo> m_services;
bool m_isEnabled; bool m_isEnabled;
QStringList m_enabledUsers; QStringList m_enabledUsers;
private:
// Private constructor which generates an invalid object, for use withing LiveTvInfo::fromJson();
LiveTvInfo();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -50,7 +50,12 @@ namespace DTO {
class LiveTvServiceInfo { class LiveTvServiceInfo {
public: public:
LiveTvServiceInfo(); LiveTvServiceInfo(
LiveTvServiceStatus status,
bool hasUpdateAvailable,
bool isVisible
);
LiveTvServiceInfo(const LiveTvServiceInfo &other); LiveTvServiceInfo(const LiveTvServiceInfo &other);
/** /**
@ -147,8 +152,13 @@ protected:
bool m_hasUpdateAvailable; bool m_hasUpdateAvailable;
bool m_isVisible; bool m_isVisible;
QStringList m_tuners; QStringList m_tuners;
private:
// Private constructor which generates an invalid object, for use withing LiveTvServiceInfo::fromJson();
LiveTvServiceInfo();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -46,8 +46,7 @@ namespace DTO {
class LocalizationOption { class LocalizationOption {
public: public: LocalizationOption();
LocalizationOption();
LocalizationOption(const LocalizationOption &other); LocalizationOption(const LocalizationOption &other);
/** /**
@ -78,8 +77,11 @@ public:
protected: protected:
QString m_name; QString m_name;
QString m_value; QString m_value;
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -48,7 +48,12 @@ namespace DTO {
class LogFile { class LogFile {
public: public:
LogFile(); LogFile(
QDateTime dateCreated,
QDateTime dateModified,
qint64 size
);
LogFile(const LogFile &other); LogFile(const LogFile &other);
/** /**
@ -105,8 +110,13 @@ protected:
QDateTime m_dateModified; QDateTime m_dateModified;
qint64 m_size; qint64 m_size;
QString m_name; QString m_name;
private:
// Private constructor which generates an invalid object, for use withing LogFile::fromJson();
LogFile();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

View file

@ -47,7 +47,10 @@ namespace DTO {
class MediaAttachment { class MediaAttachment {
public: public:
MediaAttachment(); MediaAttachment(
qint32 index
);
MediaAttachment(const MediaAttachment &other); MediaAttachment(const MediaAttachment &other);
/** /**
@ -144,8 +147,13 @@ protected:
QString m_fileName; QString m_fileName;
QString m_mimeType; QString m_mimeType;
QString m_deliveryUrl; QString m_deliveryUrl;
private:
// Private constructor which generates an invalid object, for use withing MediaAttachment::fromJson();
MediaAttachment();
}; };
} // NS DTO } // NS DTO
namespace Support { namespace Support {

Some files were not shown because too many files have changed in this diff Show more