From 4ed6a8a42d6a5f9a2558e49edc2e8286cef01f8c Mon Sep 17 00:00:00 2001 From: Chris Josten Date: Sun, 21 Feb 2021 00:26:18 +0100 Subject: [PATCH] Slight improvements to the OpenAPI generator --- core/CMakeLists.txt | 6 + core/GeneratedSources.cmake | 563 ++++++++++++++++++++++++++++++++++++ core/README.md | 9 + core/openapigenerator.d | 90 +++++- 4 files changed, 662 insertions(+), 6 deletions(-) create mode 100644 core/GeneratedSources.cmake create mode 100644 core/README.md diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt index e133832..7ac62dc 100644 --- a/core/CMakeLists.txt +++ b/core/CMakeLists.txt @@ -2,6 +2,8 @@ project(jellyfin-qt VERSION 0.1.0) find_package(Qt5 5.6 COMPONENTS Multimedia Network Qml WebSockets REQUIRED) include(GNUInstallDirs) +include(GeneratedSources.cmake) + set(jellyfin-qt_SOURCES src/DTO/dto.cpp src/DTO/item.cpp @@ -20,6 +22,8 @@ set(jellyfin-qt_SOURCES src/serverdiscoverymodel.cpp src/websocket.cpp) +list(APPEND jellyfin-qt_SOURCES openapi_HEADERS) + set(jellyfin-qt_HEADERS include/JellyfinQt/DTO/dto.h include/JellyfinQt/DTO/item.h @@ -37,6 +41,8 @@ set(jellyfin-qt_HEADERS include/JellyfinQt/playbackmanager.h include/JellyfinQt/serverdiscoverymodel.h include/JellyfinQt/websocket.h) + +list(APPEND jellyfin-qt_SOURCES openapi_SOURCES) add_definitions(-DSAILFIN_VERSION=\"${SAILFIN_VERSION}\") if (PLATFORM_SAILFISHOS) diff --git a/core/GeneratedSources.cmake b/core/GeneratedSources.cmake new file mode 100644 index 0000000..4528ae6 --- /dev/null +++ b/core/GeneratedSources.cmake @@ -0,0 +1,563 @@ +cmake_minimum_required(VERSION 3.0) +#[[ +/* + * Sailfin: a Jellyfin client written using Qt + * Copyright (C) 2021 Chris Josten and the Sailfin Contributors. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ +/* + * WARNING: THIS IS AN AUTOMATICALLY GENERATED FILE! PLEASE DO NOT EDIT THIS, AS YOUR EDITS WILL GET + * OVERWRITTEN AT SOME POINT! + * + * If there is a bug in this file, please fix the code generator used to generate this file found in + * core/openapigenerator.d. + * + * This file is generated based on Jellyfin's OpenAPI description, "openapi.json". Please update that + * file with a newer file if needed instead of manually updating the files. + */ + +]] +set(openapi_HEADERS + generated/include/JellyfinQt/DTO/loglevel.h + generated/include/JellyfinQt/DTO/activitylogentry.h + generated/include/JellyfinQt/DTO/activitylogentryqueryresult.h + generated/include/JellyfinQt/DTO/authenticationinfo.h + generated/include/JellyfinQt/DTO/authenticationinfoqueryresult.h + generated/include/JellyfinQt/DTO/itemfields.h + generated/include/JellyfinQt/DTO/itemfilter.h + generated/include/JellyfinQt/DTO/imagetype.h + generated/include/JellyfinQt/DTO/video3dformat.h + generated/include/JellyfinQt/DTO/externalurl.h + generated/include/JellyfinQt/DTO/mediaprotocol.h + generated/include/JellyfinQt/DTO/mediasourcetype.h + generated/include/JellyfinQt/DTO/videotype.h + generated/include/JellyfinQt/DTO/isotype.h + generated/include/JellyfinQt/DTO/mediastreamtype.h + generated/include/JellyfinQt/DTO/subtitledeliverymethod.h + generated/include/JellyfinQt/DTO/mediastream.h + generated/include/JellyfinQt/DTO/mediaattachment.h + generated/include/JellyfinQt/DTO/transportstreamtimestamp.h + generated/include/JellyfinQt/DTO/mediasourceinfo.h + generated/include/JellyfinQt/DTO/playaccess.h + generated/include/JellyfinQt/DTO/mediaurl.h + generated/include/JellyfinQt/DTO/baseitemperson.h + generated/include/JellyfinQt/DTO/nameguidpair.h + generated/include/JellyfinQt/DTO/useritemdatadto.h + generated/include/JellyfinQt/DTO/dayofweek.h + generated/include/JellyfinQt/DTO/chapterinfo.h + generated/include/JellyfinQt/DTO/locationtype.h + generated/include/JellyfinQt/DTO/metadatafield.h + generated/include/JellyfinQt/DTO/imageorientation.h + generated/include/JellyfinQt/DTO/channeltype.h + generated/include/JellyfinQt/DTO/programaudio.h + generated/include/JellyfinQt/DTO/baseitemdto.h + generated/include/JellyfinQt/DTO/baseitemdtoqueryresult.h + generated/include/JellyfinQt/DTO/encodingcontext.h + generated/include/JellyfinQt/DTO/brandingoptions.h + generated/include/JellyfinQt/DTO/channelmediatype.h + generated/include/JellyfinQt/DTO/channelmediacontenttype.h + generated/include/JellyfinQt/DTO/channelitemsortfield.h + generated/include/JellyfinQt/DTO/channelfeatures.h + generated/include/JellyfinQt/DTO/collectioncreationresult.h + generated/include/JellyfinQt/DTO/version.h + generated/include/JellyfinQt/DTO/imagesavingconvention.h + generated/include/JellyfinQt/DTO/metadataoptions.h + generated/include/JellyfinQt/DTO/namevaluepair.h + generated/include/JellyfinQt/DTO/repositoryinfo.h + generated/include/JellyfinQt/DTO/pathsubstitution.h + generated/include/JellyfinQt/DTO/serverconfiguration.h + generated/include/JellyfinQt/DTO/mediaencoderpathdto.h + generated/include/JellyfinQt/DTO/problemdetails.h + generated/include/JellyfinQt/DTO/configurationpagetype.h + generated/include/JellyfinQt/DTO/configurationpageinfo.h + generated/include/JellyfinQt/DTO/generalcommandtype.h + generated/include/JellyfinQt/DTO/headermatchtype.h + generated/include/JellyfinQt/DTO/httpheaderinfo.h + generated/include/JellyfinQt/DTO/deviceidentification.h + generated/include/JellyfinQt/DTO/xmlattribute.h + generated/include/JellyfinQt/DTO/dlnaprofiletype.h + generated/include/JellyfinQt/DTO/directplayprofile.h + generated/include/JellyfinQt/DTO/transcodeseekinfo.h + generated/include/JellyfinQt/DTO/transcodingprofile.h + generated/include/JellyfinQt/DTO/profileconditiontype.h + generated/include/JellyfinQt/DTO/profileconditionvalue.h + generated/include/JellyfinQt/DTO/profilecondition.h + generated/include/JellyfinQt/DTO/containerprofile.h + generated/include/JellyfinQt/DTO/codectype.h + generated/include/JellyfinQt/DTO/codecprofile.h + generated/include/JellyfinQt/DTO/responseprofile.h + generated/include/JellyfinQt/DTO/subtitleprofile.h + generated/include/JellyfinQt/DTO/deviceprofile.h + generated/include/JellyfinQt/DTO/clientcapabilities.h + generated/include/JellyfinQt/DTO/deviceinfo.h + generated/include/JellyfinQt/DTO/deviceinfoqueryresult.h + generated/include/JellyfinQt/DTO/deviceoptions.h + generated/include/JellyfinQt/DTO/scrolldirection.h + generated/include/JellyfinQt/DTO/sortorder.h + generated/include/JellyfinQt/DTO/displaypreferencesdto.h + generated/include/JellyfinQt/DTO/deviceprofiletype.h + generated/include/JellyfinQt/DTO/deviceprofileinfo.h + generated/include/JellyfinQt/DTO/controlresponse.h + generated/include/JellyfinQt/DTO/defaultdirectorybrowserinfodto.h + generated/include/JellyfinQt/DTO/filesystementrytype.h + generated/include/JellyfinQt/DTO/filesystementryinfo.h + generated/include/JellyfinQt/DTO/validatepathdto.h + generated/include/JellyfinQt/DTO/queryfilterslegacy.h + generated/include/JellyfinQt/DTO/queryfilters.h + generated/include/JellyfinQt/DTO/imageformat.h + generated/include/JellyfinQt/DTO/imageinfo.h + generated/include/JellyfinQt/DTO/imagebynameinfo.h + generated/include/JellyfinQt/DTO/externalidmediatype.h + generated/include/JellyfinQt/DTO/externalidinfo.h + generated/include/JellyfinQt/DTO/remotesearchresult.h + generated/include/JellyfinQt/DTO/bookinfo.h + generated/include/JellyfinQt/DTO/bookinforemotesearchquery.h + generated/include/JellyfinQt/DTO/boxsetinfo.h + generated/include/JellyfinQt/DTO/boxsetinforemotesearchquery.h + generated/include/JellyfinQt/DTO/movieinfo.h + generated/include/JellyfinQt/DTO/movieinforemotesearchquery.h + generated/include/JellyfinQt/DTO/songinfo.h + generated/include/JellyfinQt/DTO/albuminfo.h + generated/include/JellyfinQt/DTO/albuminforemotesearchquery.h + generated/include/JellyfinQt/DTO/artistinfo.h + generated/include/JellyfinQt/DTO/artistinforemotesearchquery.h + generated/include/JellyfinQt/DTO/musicvideoinfo.h + generated/include/JellyfinQt/DTO/musicvideoinforemotesearchquery.h + generated/include/JellyfinQt/DTO/personlookupinfo.h + generated/include/JellyfinQt/DTO/personlookupinforemotesearchquery.h + generated/include/JellyfinQt/DTO/seriesinfo.h + generated/include/JellyfinQt/DTO/seriesinforemotesearchquery.h + generated/include/JellyfinQt/DTO/trailerinfo.h + generated/include/JellyfinQt/DTO/trailerinforemotesearchquery.h + generated/include/JellyfinQt/DTO/metadatarefreshmode.h + generated/include/JellyfinQt/DTO/seriesstatus.h + generated/include/JellyfinQt/DTO/parentalrating.h + generated/include/JellyfinQt/DTO/countryinfo.h + generated/include/JellyfinQt/DTO/culturedto.h + generated/include/JellyfinQt/DTO/metadataeditorinfo.h + generated/include/JellyfinQt/DTO/thememediaresult.h + generated/include/JellyfinQt/DTO/allthememediaresult.h + generated/include/JellyfinQt/DTO/itemcounts.h + generated/include/JellyfinQt/DTO/libraryoptioninfodto.h + generated/include/JellyfinQt/DTO/imageoption.h + generated/include/JellyfinQt/DTO/librarytypeoptionsdto.h + generated/include/JellyfinQt/DTO/libraryoptionsresultdto.h + generated/include/JellyfinQt/DTO/mediaupdateinfodto.h + generated/include/JellyfinQt/DTO/mediapathinfo.h + generated/include/JellyfinQt/DTO/typeoptions.h + generated/include/JellyfinQt/DTO/libraryoptions.h + generated/include/JellyfinQt/DTO/virtualfolderinfo.h + generated/include/JellyfinQt/DTO/addvirtualfolderdto.h + generated/include/JellyfinQt/DTO/updatelibraryoptionsdto.h + generated/include/JellyfinQt/DTO/mediapathdto.h + generated/include/JellyfinQt/DTO/tunerchannelmapping.h + generated/include/JellyfinQt/DTO/nameidpair.h + generated/include/JellyfinQt/DTO/channelmappingoptionsdto.h + generated/include/JellyfinQt/DTO/setchannelmappingdto.h + generated/include/JellyfinQt/DTO/guideinfo.h + generated/include/JellyfinQt/DTO/livetvservicestatus.h + generated/include/JellyfinQt/DTO/livetvserviceinfo.h + generated/include/JellyfinQt/DTO/livetvinfo.h + generated/include/JellyfinQt/DTO/listingsproviderinfo.h + generated/include/JellyfinQt/DTO/getprogramsdto.h + generated/include/JellyfinQt/DTO/recordingstatus.h + generated/include/JellyfinQt/DTO/keepuntil.h + generated/include/JellyfinQt/DTO/daypattern.h + generated/include/JellyfinQt/DTO/seriestimerinfodto.h + generated/include/JellyfinQt/DTO/seriestimerinfodtoqueryresult.h + generated/include/JellyfinQt/DTO/timerinfodto.h + generated/include/JellyfinQt/DTO/timerinfodtoqueryresult.h + generated/include/JellyfinQt/DTO/tunerhostinfo.h + generated/include/JellyfinQt/DTO/localizationoption.h + generated/include/JellyfinQt/DTO/playbackerrorcode.h + generated/include/JellyfinQt/DTO/playbackinforesponse.h + generated/include/JellyfinQt/DTO/playbackinfodto.h + generated/include/JellyfinQt/DTO/openlivestreamdto.h + generated/include/JellyfinQt/DTO/livestreamresponse.h + generated/include/JellyfinQt/DTO/recommendationtype.h + generated/include/JellyfinQt/DTO/recommendationdto.h + generated/include/JellyfinQt/DTO/notificationlevel.h + generated/include/JellyfinQt/DTO/notificationdto.h + generated/include/JellyfinQt/DTO/notificationresultdto.h + generated/include/JellyfinQt/DTO/notificationssummarydto.h + generated/include/JellyfinQt/DTO/notificationtypeinfo.h + generated/include/JellyfinQt/DTO/versioninfo.h + generated/include/JellyfinQt/DTO/packageinfo.h + generated/include/JellyfinQt/DTO/createplaylistdto.h + generated/include/JellyfinQt/DTO/playlistcreationresult.h + generated/include/JellyfinQt/DTO/playmethod.h + generated/include/JellyfinQt/DTO/repeatmode.h + generated/include/JellyfinQt/DTO/queueitem.h + generated/include/JellyfinQt/DTO/playbackstartinfo.h + generated/include/JellyfinQt/DTO/playbackprogressinfo.h + generated/include/JellyfinQt/DTO/playbackstopinfo.h + generated/include/JellyfinQt/DTO/pluginstatus.h + generated/include/JellyfinQt/DTO/plugininfo.h + generated/include/JellyfinQt/DTO/basepluginconfiguration.h + generated/include/JellyfinQt/DTO/pluginsecurityinfo.h + generated/include/JellyfinQt/DTO/quickconnectstate.h + generated/include/JellyfinQt/DTO/quickconnectresult.h + generated/include/JellyfinQt/DTO/ratingtype.h + generated/include/JellyfinQt/DTO/remoteimageinfo.h + generated/include/JellyfinQt/DTO/remoteimageresult.h + generated/include/JellyfinQt/DTO/imageproviderinfo.h + generated/include/JellyfinQt/DTO/taskstate.h + generated/include/JellyfinQt/DTO/taskcompletionstatus.h + generated/include/JellyfinQt/DTO/taskresult.h + generated/include/JellyfinQt/DTO/tasktriggerinfo.h + generated/include/JellyfinQt/DTO/taskinfo.h + generated/include/JellyfinQt/DTO/searchhint.h + generated/include/JellyfinQt/DTO/searchhintresult.h + generated/include/JellyfinQt/DTO/playerstateinfo.h + generated/include/JellyfinQt/DTO/sessionuserinfo.h + generated/include/JellyfinQt/DTO/baseitem.h + generated/include/JellyfinQt/DTO/transcodereason.h + generated/include/JellyfinQt/DTO/transcodinginfo.h + generated/include/JellyfinQt/DTO/sessioninfo.h + generated/include/JellyfinQt/DTO/generalcommand.h + generated/include/JellyfinQt/DTO/playcommand.h + generated/include/JellyfinQt/DTO/playstatecommand.h + generated/include/JellyfinQt/DTO/clientcapabilitiesdto.h + generated/include/JellyfinQt/DTO/startupconfigurationdto.h + generated/include/JellyfinQt/DTO/startupuserdto.h + generated/include/JellyfinQt/DTO/startupremoteaccessdto.h + generated/include/JellyfinQt/DTO/fontfile.h + generated/include/JellyfinQt/DTO/remotesubtitleinfo.h + generated/include/JellyfinQt/DTO/uploadsubtitledto.h + generated/include/JellyfinQt/DTO/bufferrequestdto.h + generated/include/JellyfinQt/DTO/joingrouprequestdto.h + generated/include/JellyfinQt/DTO/groupstatetype.h + generated/include/JellyfinQt/DTO/groupinfodto.h + generated/include/JellyfinQt/DTO/moveplaylistitemrequestdto.h + generated/include/JellyfinQt/DTO/newgrouprequestdto.h + generated/include/JellyfinQt/DTO/nextitemrequestdto.h + generated/include/JellyfinQt/DTO/pingrequestdto.h + generated/include/JellyfinQt/DTO/previousitemrequestdto.h + generated/include/JellyfinQt/DTO/groupqueuemode.h + generated/include/JellyfinQt/DTO/queuerequestdto.h + generated/include/JellyfinQt/DTO/readyrequestdto.h + generated/include/JellyfinQt/DTO/removefromplaylistrequestdto.h + generated/include/JellyfinQt/DTO/seekrequestdto.h + generated/include/JellyfinQt/DTO/ignorewaitrequestdto.h + generated/include/JellyfinQt/DTO/playrequestdto.h + generated/include/JellyfinQt/DTO/setplaylistitemrequestdto.h + generated/include/JellyfinQt/DTO/grouprepeatmode.h + generated/include/JellyfinQt/DTO/setrepeatmoderequestdto.h + generated/include/JellyfinQt/DTO/groupshufflemode.h + generated/include/JellyfinQt/DTO/setshufflemoderequestdto.h + generated/include/JellyfinQt/DTO/endpointinfo.h + generated/include/JellyfinQt/DTO/installationinfo.h + generated/include/JellyfinQt/DTO/ffmpeglocation.h + generated/include/JellyfinQt/DTO/architecture.h + generated/include/JellyfinQt/DTO/systeminfo.h + generated/include/JellyfinQt/DTO/publicsysteminfo.h + generated/include/JellyfinQt/DTO/logfile.h + generated/include/JellyfinQt/DTO/wakeonlaninfo.h + generated/include/JellyfinQt/DTO/utctimeresponse.h + generated/include/JellyfinQt/DTO/subtitleplaybackmode.h + generated/include/JellyfinQt/DTO/userconfiguration.h + generated/include/JellyfinQt/DTO/dynamicdayofweek.h + generated/include/JellyfinQt/DTO/accessschedule.h + generated/include/JellyfinQt/DTO/unrateditem.h + generated/include/JellyfinQt/DTO/syncplayuseraccesstype.h + generated/include/JellyfinQt/DTO/userpolicy.h + generated/include/JellyfinQt/DTO/userdto.h + generated/include/JellyfinQt/DTO/authenticationresult.h + generated/include/JellyfinQt/DTO/updateusereasypassword.h + generated/include/JellyfinQt/DTO/updateuserpassword.h + generated/include/JellyfinQt/DTO/authenticateuserbyname.h + generated/include/JellyfinQt/DTO/quickconnectdto.h + generated/include/JellyfinQt/DTO/forgotpassworddto.h + generated/include/JellyfinQt/DTO/forgotpasswordaction.h + generated/include/JellyfinQt/DTO/forgotpasswordresult.h + generated/include/JellyfinQt/DTO/pinredeemresult.h + generated/include/JellyfinQt/DTO/createuserbyname.h + generated/include/JellyfinQt/DTO/specialviewoptiondto.h + generated/include/JellyfinQt/DTO/libraryupdateinfo.h + generated/include/JellyfinQt/DTO/iplugin.h + generated/include/JellyfinQt/DTO/playrequest.h + generated/include/JellyfinQt/DTO/playstaterequest.h + generated/include/JellyfinQt/DTO/timereventinfo.h + generated/include/JellyfinQt/DTO/sendcommandtype.h + generated/include/JellyfinQt/DTO/sendcommand.h + generated/include/JellyfinQt/DTO/groupupdatetype.h + generated/include/JellyfinQt/DTO/objectgroupupdate.h + +set(openapi_SOURCES + generated/src/DTO/loglevel.cpp + generated/src/DTO/activitylogentry.cpp + generated/src/DTO/activitylogentryqueryresult.cpp + generated/src/DTO/authenticationinfo.cpp + generated/src/DTO/authenticationinfoqueryresult.cpp + generated/src/DTO/itemfields.cpp + generated/src/DTO/itemfilter.cpp + generated/src/DTO/imagetype.cpp + generated/src/DTO/video3dformat.cpp + generated/src/DTO/externalurl.cpp + generated/src/DTO/mediaprotocol.cpp + generated/src/DTO/mediasourcetype.cpp + generated/src/DTO/videotype.cpp + generated/src/DTO/isotype.cpp + generated/src/DTO/mediastreamtype.cpp + generated/src/DTO/subtitledeliverymethod.cpp + generated/src/DTO/mediastream.cpp + generated/src/DTO/mediaattachment.cpp + generated/src/DTO/transportstreamtimestamp.cpp + generated/src/DTO/mediasourceinfo.cpp + generated/src/DTO/playaccess.cpp + generated/src/DTO/mediaurl.cpp + generated/src/DTO/baseitemperson.cpp + generated/src/DTO/nameguidpair.cpp + generated/src/DTO/useritemdatadto.cpp + generated/src/DTO/dayofweek.cpp + generated/src/DTO/chapterinfo.cpp + generated/src/DTO/locationtype.cpp + generated/src/DTO/metadatafield.cpp + generated/src/DTO/imageorientation.cpp + generated/src/DTO/channeltype.cpp + generated/src/DTO/programaudio.cpp + generated/src/DTO/baseitemdto.cpp + generated/src/DTO/baseitemdtoqueryresult.cpp + generated/src/DTO/encodingcontext.cpp + generated/src/DTO/brandingoptions.cpp + generated/src/DTO/channelmediatype.cpp + generated/src/DTO/channelmediacontenttype.cpp + generated/src/DTO/channelitemsortfield.cpp + generated/src/DTO/channelfeatures.cpp + generated/src/DTO/collectioncreationresult.cpp + generated/src/DTO/version.cpp + generated/src/DTO/imagesavingconvention.cpp + generated/src/DTO/metadataoptions.cpp + generated/src/DTO/namevaluepair.cpp + generated/src/DTO/repositoryinfo.cpp + generated/src/DTO/pathsubstitution.cpp + generated/src/DTO/serverconfiguration.cpp + generated/src/DTO/mediaencoderpathdto.cpp + generated/src/DTO/problemdetails.cpp + generated/src/DTO/configurationpagetype.cpp + generated/src/DTO/configurationpageinfo.cpp + generated/src/DTO/generalcommandtype.cpp + generated/src/DTO/headermatchtype.cpp + generated/src/DTO/httpheaderinfo.cpp + generated/src/DTO/deviceidentification.cpp + generated/src/DTO/xmlattribute.cpp + generated/src/DTO/dlnaprofiletype.cpp + generated/src/DTO/directplayprofile.cpp + generated/src/DTO/transcodeseekinfo.cpp + generated/src/DTO/transcodingprofile.cpp + generated/src/DTO/profileconditiontype.cpp + generated/src/DTO/profileconditionvalue.cpp + generated/src/DTO/profilecondition.cpp + generated/src/DTO/containerprofile.cpp + generated/src/DTO/codectype.cpp + generated/src/DTO/codecprofile.cpp + generated/src/DTO/responseprofile.cpp + generated/src/DTO/subtitleprofile.cpp + generated/src/DTO/deviceprofile.cpp + generated/src/DTO/clientcapabilities.cpp + generated/src/DTO/deviceinfo.cpp + generated/src/DTO/deviceinfoqueryresult.cpp + generated/src/DTO/deviceoptions.cpp + generated/src/DTO/scrolldirection.cpp + generated/src/DTO/sortorder.cpp + generated/src/DTO/displaypreferencesdto.cpp + generated/src/DTO/deviceprofiletype.cpp + generated/src/DTO/deviceprofileinfo.cpp + generated/src/DTO/controlresponse.cpp + generated/src/DTO/defaultdirectorybrowserinfodto.cpp + generated/src/DTO/filesystementrytype.cpp + generated/src/DTO/filesystementryinfo.cpp + generated/src/DTO/validatepathdto.cpp + generated/src/DTO/queryfilterslegacy.cpp + generated/src/DTO/queryfilters.cpp + generated/src/DTO/imageformat.cpp + generated/src/DTO/imageinfo.cpp + generated/src/DTO/imagebynameinfo.cpp + generated/src/DTO/externalidmediatype.cpp + generated/src/DTO/externalidinfo.cpp + generated/src/DTO/remotesearchresult.cpp + generated/src/DTO/bookinfo.cpp + generated/src/DTO/bookinforemotesearchquery.cpp + generated/src/DTO/boxsetinfo.cpp + generated/src/DTO/boxsetinforemotesearchquery.cpp + generated/src/DTO/movieinfo.cpp + generated/src/DTO/movieinforemotesearchquery.cpp + generated/src/DTO/songinfo.cpp + generated/src/DTO/albuminfo.cpp + generated/src/DTO/albuminforemotesearchquery.cpp + generated/src/DTO/artistinfo.cpp + generated/src/DTO/artistinforemotesearchquery.cpp + generated/src/DTO/musicvideoinfo.cpp + generated/src/DTO/musicvideoinforemotesearchquery.cpp + generated/src/DTO/personlookupinfo.cpp + generated/src/DTO/personlookupinforemotesearchquery.cpp + generated/src/DTO/seriesinfo.cpp + generated/src/DTO/seriesinforemotesearchquery.cpp + generated/src/DTO/trailerinfo.cpp + generated/src/DTO/trailerinforemotesearchquery.cpp + generated/src/DTO/metadatarefreshmode.cpp + generated/src/DTO/seriesstatus.cpp + generated/src/DTO/parentalrating.cpp + generated/src/DTO/countryinfo.cpp + generated/src/DTO/culturedto.cpp + generated/src/DTO/metadataeditorinfo.cpp + generated/src/DTO/thememediaresult.cpp + generated/src/DTO/allthememediaresult.cpp + generated/src/DTO/itemcounts.cpp + generated/src/DTO/libraryoptioninfodto.cpp + generated/src/DTO/imageoption.cpp + generated/src/DTO/librarytypeoptionsdto.cpp + generated/src/DTO/libraryoptionsresultdto.cpp + generated/src/DTO/mediaupdateinfodto.cpp + generated/src/DTO/mediapathinfo.cpp + generated/src/DTO/typeoptions.cpp + generated/src/DTO/libraryoptions.cpp + generated/src/DTO/virtualfolderinfo.cpp + generated/src/DTO/addvirtualfolderdto.cpp + generated/src/DTO/updatelibraryoptionsdto.cpp + generated/src/DTO/mediapathdto.cpp + generated/src/DTO/tunerchannelmapping.cpp + generated/src/DTO/nameidpair.cpp + generated/src/DTO/channelmappingoptionsdto.cpp + generated/src/DTO/setchannelmappingdto.cpp + generated/src/DTO/guideinfo.cpp + generated/src/DTO/livetvservicestatus.cpp + generated/src/DTO/livetvserviceinfo.cpp + generated/src/DTO/livetvinfo.cpp + generated/src/DTO/listingsproviderinfo.cpp + generated/src/DTO/getprogramsdto.cpp + generated/src/DTO/recordingstatus.cpp + generated/src/DTO/keepuntil.cpp + generated/src/DTO/daypattern.cpp + generated/src/DTO/seriestimerinfodto.cpp + generated/src/DTO/seriestimerinfodtoqueryresult.cpp + generated/src/DTO/timerinfodto.cpp + generated/src/DTO/timerinfodtoqueryresult.cpp + generated/src/DTO/tunerhostinfo.cpp + generated/src/DTO/localizationoption.cpp + generated/src/DTO/playbackerrorcode.cpp + generated/src/DTO/playbackinforesponse.cpp + generated/src/DTO/playbackinfodto.cpp + generated/src/DTO/openlivestreamdto.cpp + generated/src/DTO/livestreamresponse.cpp + generated/src/DTO/recommendationtype.cpp + generated/src/DTO/recommendationdto.cpp + generated/src/DTO/notificationlevel.cpp + generated/src/DTO/notificationdto.cpp + generated/src/DTO/notificationresultdto.cpp + generated/src/DTO/notificationssummarydto.cpp + generated/src/DTO/notificationtypeinfo.cpp + generated/src/DTO/versioninfo.cpp + generated/src/DTO/packageinfo.cpp + generated/src/DTO/createplaylistdto.cpp + generated/src/DTO/playlistcreationresult.cpp + generated/src/DTO/playmethod.cpp + generated/src/DTO/repeatmode.cpp + generated/src/DTO/queueitem.cpp + generated/src/DTO/playbackstartinfo.cpp + generated/src/DTO/playbackprogressinfo.cpp + generated/src/DTO/playbackstopinfo.cpp + generated/src/DTO/pluginstatus.cpp + generated/src/DTO/plugininfo.cpp + generated/src/DTO/basepluginconfiguration.cpp + generated/src/DTO/pluginsecurityinfo.cpp + generated/src/DTO/quickconnectstate.cpp + generated/src/DTO/quickconnectresult.cpp + generated/src/DTO/ratingtype.cpp + generated/src/DTO/remoteimageinfo.cpp + generated/src/DTO/remoteimageresult.cpp + generated/src/DTO/imageproviderinfo.cpp + generated/src/DTO/taskstate.cpp + generated/src/DTO/taskcompletionstatus.cpp + generated/src/DTO/taskresult.cpp + generated/src/DTO/tasktriggerinfo.cpp + generated/src/DTO/taskinfo.cpp + generated/src/DTO/searchhint.cpp + generated/src/DTO/searchhintresult.cpp + generated/src/DTO/playerstateinfo.cpp + generated/src/DTO/sessionuserinfo.cpp + generated/src/DTO/baseitem.cpp + generated/src/DTO/transcodereason.cpp + generated/src/DTO/transcodinginfo.cpp + generated/src/DTO/sessioninfo.cpp + generated/src/DTO/generalcommand.cpp + generated/src/DTO/playcommand.cpp + generated/src/DTO/playstatecommand.cpp + generated/src/DTO/clientcapabilitiesdto.cpp + generated/src/DTO/startupconfigurationdto.cpp + generated/src/DTO/startupuserdto.cpp + generated/src/DTO/startupremoteaccessdto.cpp + generated/src/DTO/fontfile.cpp + generated/src/DTO/remotesubtitleinfo.cpp + generated/src/DTO/uploadsubtitledto.cpp + generated/src/DTO/bufferrequestdto.cpp + generated/src/DTO/joingrouprequestdto.cpp + generated/src/DTO/groupstatetype.cpp + generated/src/DTO/groupinfodto.cpp + generated/src/DTO/moveplaylistitemrequestdto.cpp + generated/src/DTO/newgrouprequestdto.cpp + generated/src/DTO/nextitemrequestdto.cpp + generated/src/DTO/pingrequestdto.cpp + generated/src/DTO/previousitemrequestdto.cpp + generated/src/DTO/groupqueuemode.cpp + generated/src/DTO/queuerequestdto.cpp + generated/src/DTO/readyrequestdto.cpp + generated/src/DTO/removefromplaylistrequestdto.cpp + generated/src/DTO/seekrequestdto.cpp + generated/src/DTO/ignorewaitrequestdto.cpp + generated/src/DTO/playrequestdto.cpp + generated/src/DTO/setplaylistitemrequestdto.cpp + generated/src/DTO/grouprepeatmode.cpp + generated/src/DTO/setrepeatmoderequestdto.cpp + generated/src/DTO/groupshufflemode.cpp + generated/src/DTO/setshufflemoderequestdto.cpp + generated/src/DTO/endpointinfo.cpp + generated/src/DTO/installationinfo.cpp + generated/src/DTO/ffmpeglocation.cpp + generated/src/DTO/architecture.cpp + generated/src/DTO/systeminfo.cpp + generated/src/DTO/publicsysteminfo.cpp + generated/src/DTO/logfile.cpp + generated/src/DTO/wakeonlaninfo.cpp + generated/src/DTO/utctimeresponse.cpp + generated/src/DTO/subtitleplaybackmode.cpp + generated/src/DTO/userconfiguration.cpp + generated/src/DTO/dynamicdayofweek.cpp + generated/src/DTO/accessschedule.cpp + generated/src/DTO/unrateditem.cpp + generated/src/DTO/syncplayuseraccesstype.cpp + generated/src/DTO/userpolicy.cpp + generated/src/DTO/userdto.cpp + generated/src/DTO/authenticationresult.cpp + generated/src/DTO/updateusereasypassword.cpp + generated/src/DTO/updateuserpassword.cpp + generated/src/DTO/authenticateuserbyname.cpp + generated/src/DTO/quickconnectdto.cpp + generated/src/DTO/forgotpassworddto.cpp + generated/src/DTO/forgotpasswordaction.cpp + generated/src/DTO/forgotpasswordresult.cpp + generated/src/DTO/pinredeemresult.cpp + generated/src/DTO/createuserbyname.cpp + generated/src/DTO/specialviewoptiondto.cpp + generated/src/DTO/libraryupdateinfo.cpp + generated/src/DTO/iplugin.cpp + generated/src/DTO/playrequest.cpp + generated/src/DTO/playstaterequest.cpp + generated/src/DTO/timereventinfo.cpp + generated/src/DTO/sendcommandtype.cpp + generated/src/DTO/sendcommand.cpp + generated/src/DTO/groupupdatetype.cpp + generated/src/DTO/objectgroupupdate.cpp diff --git a/core/README.md b/core/README.md new file mode 100644 index 0000000..fe5da49 --- /dev/null +++ b/core/README.md @@ -0,0 +1,9 @@ +# Jellyfin-Qt +This folder contains the core library containing most of the non-interface UI logic and platform-independent parts. + +## Code generation. +Parts of the code (notably the data models) are generated from the OpenApi description provided by the +Jellyfin server. The code generator uses [the D programming language](https://dlang.org/) +and expects to be run through [DMD](https://github.com/dlang/dub). Make sure both a D compiler and DMD are installed. +Afterwards, on Unix-like systems, marking the "script" as executable and running it should be enough. On Windows, +one probably needs to run `dub.exe openapigenerator.d`, but I haven't verified it myself. diff --git a/core/openapigenerator.d b/core/openapigenerator.d index bac256f..3a71ff3 100755 --- a/core/openapigenerator.d +++ b/core/openapigenerator.d @@ -3,6 +3,28 @@ name "openapigenerator.d" dependency "dyaml" version="~>0.8.0" +/ + +// The following copyright string also applies to this file. +string COPYRIGHT = q"EOL +/* + * Sailfin: a Jellyfin client written using Qt + * Copyright (C) 2021 Chris Josten and the Sailfin Contributors. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ +EOL"; import std.algorithm; import std.array; import std.file : mkdirRecurse; @@ -15,11 +37,32 @@ import std.uni; import dyaml; -// CODE GENERATION SETTINGS -CasePolicy OPENAPI_CASING = CasePolicy.PASCAL; +static this() { + COPYRIGHT ~= q"EOS +/* + * WARNING: THIS IS AN AUTOMATICALLY GENERATED FILE! PLEASE DO NOT EDIT THIS, AS YOUR EDITS WILL GET + * OVERWRITTEN AT SOME POINT! + * + * If there is a bug in this file, please fix the code generator used to generate this file found in + * core/openapigenerator.d. + * + * This file is generated based on Jellyfin's OpenAPI description, "openapi.json". Please update that + * file with a newer file if needed instead of manually updating the files. + */ +EOS"; +} + +// CODE GENERATION SETTINGS + +// File name of the CMake file this generated should generate. +string CMAKE_INCLUDE_FILE = "GeneratedSources.cmake"; +string CMAKE_VAR_PREFIX = "openapi"; -string[] CPP_NAMESPACE = ["Jellyfin", "DTO"]; string INCLUDE_PREFIX = "JellyfinQt/DTO"; +string SRC_PREFIX = "DTO"; + +CasePolicy OPENAPI_CASING = CasePolicy.PASCAL; +string[] CPP_NAMESPACE = ["Jellyfin", "DTO"]; CasePolicy CPP_FILENAME_CASING = CasePolicy.LOWER; CasePolicy CPP_CLASS_CASING = CasePolicy.PASCAL; CasePolicy CPP_CLASS_MEMBER_CASING = CasePolicy.CAMEL; @@ -28,8 +71,10 @@ string CPP_CLASS_MEMBER_PREFIX = "m_"; CasePolicy CPP_CLASS_METHOD_CASING = CasePolicy.CAMEL; bool GENERATE_PROPERTIES = true; -// Implementation string outputDirectory = "generated"; +// END CODE GENERATION SETTINGS. + +// Implementation enum CasePolicy { KEEP, // Do not modify @@ -63,18 +108,49 @@ void realMain(string[] args) { if (args.length >= 3) outputDirectory = args[2]; mkdirRecurse(buildPath(outputDirectory, "include", INCLUDE_PREFIX)); - mkdirRecurse(buildPath(outputDirectory, "src")); + mkdirRecurse(buildPath(outputDirectory, "src", SRC_PREFIX)); Node root = Loader.fromFile(schemeFile).load(); + Appender!(string[]) headerFiles, implementationFiles; foreach(ref string key, ref const Node scheme; root["components"]["schemas"]) { generateFileForSchema(key, scheme, root["components"]["schemas"]); + + string fileBase = key.applyCasePolicy(OPENAPI_CASING, CPP_FILENAME_CASING); + headerFiles ~= [buildPath(outputDirectory, "include", INCLUDE_PREFIX, fileBase ~ ".h")]; + implementationFiles ~= [buildPath(outputDirectory, "src", SRC_PREFIX, fileBase ~ ".cpp")]; } + writeCMakeFile(headerFiles[], implementationFiles[]); +} + +void writeCMakeFile(string[] headerFiles, string[] implementationFiles) { + File output = File(buildPath(outputDirectory, "..", CMAKE_INCLUDE_FILE), "w+"); + output.writeln("cmake_minimum_required(VERSION 3.0)"); + // Peek laziness: wrapping a C++ comment inside a CMake block comment because I couldn't be + // donkey'd to do otherwise. + output.writeln("#[["); + output.writeln(COPYRIGHT); + output.writeln("]]"); + + output.writef("set(%s_HEADERS", CMAKE_VAR_PREFIX); + foreach (headerFile; headerFiles) { + output.writeln(); + output.writef("\t%s", headerFile); + } + output.writeln(); + output.writeln(); + + output.writef("set(%s_SOURCES", CMAKE_VAR_PREFIX); + foreach (implementationFile; implementationFiles) { + output.writeln(); + output.writef("\t%s", implementationFile); + } + output.writeln(); } void generateFileForSchema(ref string name, ref const Node scheme, Node allSchemas) { string fileBase = name.applyCasePolicy(OPENAPI_CASING, CPP_FILENAME_CASING); File headerFile = File(buildPath(outputDirectory, "include", INCLUDE_PREFIX, fileBase ~ ".h"), "w+"); - File implementationFile = File(buildPath(outputDirectory, "src", fileBase ~ ".cpp"), "w+"); + File implementationFile = File(buildPath(outputDirectory, "src", SRC_PREFIX, fileBase ~ ".cpp"), "w+"); if ("enum" in scheme) { string[1] imports = ["QObject"]; @@ -329,6 +405,7 @@ void writeEnumImplementation(File output, string name) { // Common void writeHeaderPreamble(File output, string className, string[] imports = []) { + output.writeln(COPYRIGHT); string guard = guardName(CPP_NAMESPACE, className); output.writefln("#ifndef %s", guard); output.writefln("#define %s", guard); @@ -356,6 +433,7 @@ void writeHeaderPostamble(File output, string className) { } void writeImplementationPreamble(File output, string className, string[] imports = []) { + output.writeln(COPYRIGHT); output.writefln("#include <%s>", buildPath(INCLUDE_PREFIX, className.applyCasePolicy(OPENAPI_CASING, CasePolicy.LOWER) ~ ".h")); output.writeln();