diff --git a/CMakeLists.txt b/CMakeLists.txt index fb4f37f1..4153209a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,11 +18,8 @@ set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) -set(KF_MIN_VERSION "5.105.0") -set(QT_MIN_VERSION "5.15.2") -if (ANDROID) - set(QT_MIN_VERSION 5.15.10) # due to 5.15.10 changing NDK versioning -endif() +set(KF_MIN_VERSION "5.240.0") +set(QT_MIN_VERSION "6.4.0") find_package(ECM ${KF_MIN_VERSION} REQUIRED NO_MODULE) @@ -49,47 +46,28 @@ ecm_setup_version(${PROJECT_VERSION} ) ecm_set_disabled_deprecation_versions( - QT 5.15.2 - KF 5.102.0 + QT 6.0.0 + KF 5.240.0 ) -if (QT_MAJOR_VERSION EQUAL "6") - set(KF_MAJOR_VERSION "6") -else() - set(KF_MAJOR_VERSION "5") -endif() - -find_package(Qt${QT_MAJOR_VERSION} ${QT_MIN_VERSION} REQUIRED NO_MODULE COMPONENTS Core Quick Test Gui QuickControls2 Sql Svg Xml) -find_package(KF${KF_MAJOR_VERSION} ${KF_MIN_VERSION} REQUIRED COMPONENTS I18n CoreAddons Kirigami2 Syndication Config ThreadWeaver) - -if (QT_MAJOR_VERSION EQUAL "6") -find_package(Qt${QT_MAJOR_VERSION} ${QT_MIN_VERSION} REQUIRED NO_MODULE COMPONENTS Network) -else() -find_package(KF${KF_MAJOR_VERSION} ${KF_MIN_VERSION} OPTIONAL_COMPONENTS NetworkManagerQt) -endif() - -if (NOT KF_MAJOR_VERSION EQUAL "6") # TODO temporary workaround until kirigami-addons is switched to KF6 -find_package(KF5KirigamiAddons 0.7 REQUIRED) -endif() +find_package(Qt6 ${QT_MIN_VERSION} REQUIRED NO_MODULE COMPONENTS Core Quick Test Gui QuickControls2 Sql Svg Xml Network) +find_package(KF6 ${KF_MIN_VERSION} REQUIRED COMPONENTS I18n CoreAddons Kirigami2 Syndication Config ThreadWeaver) find_package(Taglib REQUIRED) -find_package(Qt${QT_MAJOR_VERSION}Keychain) -set_package_properties(Qt${QT_MAJOR_VERSION}Keychain PROPERTIES +find_package(Qt6Keychain) +set_package_properties(Qt6Keychain PROPERTIES TYPE REQUIRED PURPOSE "Secure storage of account secrets" ) if (ANDROID) - find_package(Qt${QT_MAJOR_VERSION} ${QT_MIN_VERSION} REQUIRED COMPONENTS Svg) - if (QT_MAJOR_VERSION EQUAL "5") - find_package(Qt5 REQUIRED COMPONENTS AndroidExtras) - endif() + find_package(Qt6 ${QT_MIN_VERSION} REQUIRED COMPONENTS Svg) find_package(OpenSSL REQUIRED) find_package(SQLite3) find_package(ZLIB) find_package(Gradle) else() - find_package(Qt${QT_MAJOR_VERSION} ${QT_MIN_VERSION} REQUIRED COMPONENTS Widgets DBus) + find_package(Qt6 ${QT_MIN_VERSION} REQUIRED COMPONENTS Widgets DBus) endif() add_definitions(-DQT_NO_CAST_FROM_ASCII diff --git a/LICENSES/LGPL-2.0-or-later.txt b/LICENSES/LGPL-2.0-or-later.txt deleted file mode 100644 index 5c96471a..00000000 --- a/LICENSES/LGPL-2.0-or-later.txt +++ /dev/null @@ -1,446 +0,0 @@ -GNU LIBRARY GENERAL PUBLIC LICENSE - -Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc. - -51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - -Everyone is permitted to copy and distribute verbatim copies of this license -document, but changing it is not allowed. - -[This is the first released version of the library GPL. It is numbered 2 because -it goes with version 2 of the ordinary GPL.] - -Preamble - -The licenses for most software are designed to take away your freedom to share -and change it. By contrast, the GNU General Public Licenses are intended to -guarantee your freedom to share and change free software--to make sure the -software is free for all its users. - -This license, the Library General Public License, applies to some specially -designated Free Software Foundation software, and to any other libraries whose -authors decide to use it. You can use it for your libraries, too. - -When we speak of free software, we are referring to freedom, not price. Our -General Public Licenses are designed to make sure that you have the freedom -to distribute copies of free software (and charge for this service if you -wish), that you receive source code or can get it if you want it, that you -can change the software or use pieces of it in new free programs; and that -you know you can do these things. - -To protect your rights, we need to make restrictions that forbid anyone to -deny you these rights or to ask you to surrender the rights. These restrictions -translate to certain responsibilities for you if you distribute copies of -the library, or if you modify it. - -For example, if you distribute copies of the library, whether gratis or for -a fee, you must give the recipients all the rights that we gave you. You must -make sure that they, too, receive or can get the source code. If you link -a program with the library, you must provide complete object files to the -recipients so that they can relink them with the library, after making changes -to the library and recompiling it. And you must show them these terms so they -know their rights. - -Our method of protecting your rights has two steps: (1) copyright the library, -and (2) offer you this license which gives you legal permission to copy, distribute -and/or modify the library. - -Also, for each distributor's protection, we want to make certain that everyone -understands that there is no warranty for this free library. If the library -is modified by someone else and passed on, we want its recipients to know -that what they have is not the original version, so that any problems introduced -by others will not reflect on the original authors' reputations. - -Finally, any free program is threatened constantly by software patents. We -wish to avoid the danger that companies distributing free software will individually -obtain patent licenses, thus in effect transforming the program into proprietary -software. To prevent this, we have made it clear that any patent must be licensed -for everyone's free use or not licensed at all. - -Most GNU software, including some libraries, is covered by the ordinary GNU -General Public License, which was designed for utility programs. This license, -the GNU Library General Public License, applies to certain designated libraries. -This license is quite different from the ordinary one; be sure to read it -in full, and don't assume that anything in it is the same as in the ordinary -license. - -The reason we have a separate public license for some libraries is that they -blur the distinction we usually make between modifying or adding to a program -and simply using it. Linking a program with a library, without changing the -library, is in some sense simply using the library, and is analogous to running -a utility program or application program. However, in a textual and legal -sense, the linked executable is a combined work, a derivative of the original -library, and the ordinary General Public License treats it as such. - -Because of this blurred distinction, using the ordinary General Public License -for libraries did not effectively promote software sharing, because most developers -did not use the libraries. We concluded that weaker conditions might promote -sharing better. - -However, unrestricted linking of non-free programs would deprive the users -of those programs of all benefit from the free status of the libraries themselves. -This Library General Public License is intended to permit developers of non-free -programs to use free libraries, while preserving your freedom as a user of -such programs to change the free libraries that are incorporated in them. -(We have not seen how to achieve this as regards changes in header files, -but we have achieved it as regards changes in the actual functions of the -Library.) The hope is that this will lead to faster development of free libraries. - -The precise terms and conditions for copying, distribution and modification -follow. Pay close attention to the difference between a "work based on the -library" and a "work that uses the library". The former contains code derived -from the library, while the latter only works together with the library. - -Note that it is possible for a library to be covered by the ordinary General -Public License rather than by this special one. - -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - -0. This License Agreement applies to any software library which contains a -notice placed by the copyright holder or other authorized party saying it -may be distributed under the terms of this Library General Public License -(also called "this License"). Each licensee is addressed as "you". - -A "library" means a collection of software functions and/or data prepared -so as to be conveniently linked with application programs (which use some -of those functions and data) to form executables. - -The "Library", below, refers to any such software library or work which has -been distributed under these terms. A "work based on the Library" means either -the Library or any derivative work under copyright law: that is to say, a -work containing the Library or a portion of it, either verbatim or with modifications -and/or translated straightforwardly into another language. (Hereinafter, translation -is included without limitation in the term "modification".) - -"Source code" for a work means the preferred form of the work for making modifications -to it. For a library, complete source code means all the source code for all -modules it contains, plus any associated interface definition files, plus -the scripts used to control compilation and installation of the library. - -Activities other than copying, distribution and modification are not covered -by this License; they are outside its scope. The act of running a program -using the Library is not restricted, and output from such a program is covered -only if its contents constitute a work based on the Library (independent of -the use of the Library in a tool for writing it). Whether that is true depends -on what the Library does and what the program that uses the Library does. - -1. You may copy and distribute verbatim copies of the Library's complete source -code as you receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice and disclaimer -of warranty; keep intact all the notices that refer to this License and to -the absence of any warranty; and distribute a copy of this License along with -the Library. - -You may charge a fee for the physical act of transferring a copy, and you -may at your option offer warranty protection in exchange for a fee. - -2. You may modify your copy or copies of the Library or any portion of it, -thus forming a work based on the Library, and copy and distribute such modifications -or work under the terms of Section 1 above, provided that you also meet all -of these conditions: - - a) The modified work must itself be a software library. - -b) You must cause the files modified to carry prominent notices stating that -you changed the files and the date of any change. - -c) You must cause the whole of the work to be licensed at no charge to all -third parties under the terms of this License. - -d) If a facility in the modified Library refers to a function or a table of -data to be supplied by an application program that uses the facility, other -than as an argument passed when the facility is invoked, then you must make -a good faith effort to ensure that, in the event an application does not supply -such function or table, the facility still operates, and performs whatever -part of its purpose remains meaningful. - -(For example, a function in a library to compute square roots has a purpose -that is entirely well-defined independent of the application. Therefore, Subsection -2d requires that any application-supplied function or table used by this function -must be optional: if the application does not supply it, the square root function -must still compute square roots.) - -These requirements apply to the modified work as a whole. If identifiable -sections of that work are not derived from the Library, and can be reasonably -considered independent and separate works in themselves, then this License, -and its terms, do not apply to those sections when you distribute them as -separate works. But when you distribute the same sections as part of a whole -which is a work based on the Library, the distribution of the whole must be -on the terms of this License, whose permissions for other licensees extend -to the entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest your -rights to work written entirely by you; rather, the intent is to exercise -the right to control the distribution of derivative or collective works based -on the Library. - -In addition, mere aggregation of another work not based on the Library with -the Library (or with a work based on the Library) on a volume of a storage -or distribution medium does not bring the other work under the scope of this -License. - -3. You may opt to apply the terms of the ordinary GNU General Public License -instead of this License to a given copy of the Library. To do this, you must -alter all the notices that refer to this License, so that they refer to the -ordinary GNU General Public License, version 2, instead of to this License. -(If a newer version than version 2 of the ordinary GNU General Public License -has appeared, then you can specify that version instead if you wish.) Do not -make any other change in these notices. - -Once this change is made in a given copy, it is irreversible for that copy, -so the ordinary GNU General Public License applies to all subsequent copies -and derivative works made from that copy. - -This option is useful when you wish to copy part of the code of the Library -into a program that is not a library. - -4. You may copy and distribute the Library (or a portion or derivative of -it, under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you accompany it with the complete corresponding -machine-readable source code, which must be distributed under the terms of -Sections 1 and 2 above on a medium customarily used for software interchange. - -If distribution of object code is made by offering access to copy from a designated -place, then offering equivalent access to copy the source code from the same -place satisfies the requirement to distribute the source code, even though -third parties are not compelled to copy the source along with the object code. - -5. A program that contains no derivative of any portion of the Library, but -is designed to work with the Library by being compiled or linked with it, -is called a "work that uses the Library". Such a work, in isolation, is not -a derivative work of the Library, and therefore falls outside the scope of -this License. - -However, linking a "work that uses the Library" with the Library creates an -executable that is a derivative of the Library (because it contains portions -of the Library), rather than a "work that uses the library". The executable -is therefore covered by this License. Section 6 states terms for distribution -of such executables. - -When a "work that uses the Library" uses material from a header file that -is part of the Library, the object code for the work may be a derivative work -of the Library even though the source code is not. Whether this is true is -especially significant if the work can be linked without the Library, or if -the work is itself a library. The threshold for this to be true is not precisely -defined by law. - -If such an object file uses only numerical parameters, data structure layouts -and accessors, and small macros and small inline functions (ten lines or less -in length), then the use of the object file is unrestricted, regardless of -whether it is legally a derivative work. (Executables containing this object -code plus portions of the Library will still fall under Section 6.) - -Otherwise, if the work is a derivative of the Library, you may distribute -the object code for the work under the terms of Section 6. Any executables -containing that work also fall under Section 6, whether or not they are linked -directly with the Library itself. - -6. As an exception to the Sections above, you may also compile or link a "work -that uses the Library" with the Library to produce a work containing portions -of the Library, and distribute that work under terms of your choice, provided -that the terms permit modification of the work for the customer's own use -and reverse engineering for debugging such modifications. - -You must give prominent notice with each copy of the work that the Library -is used in it and that the Library and its use are covered by this License. -You must supply a copy of this License. If the work during execution displays -copyright notices, you must include the copyright notice for the Library among -them, as well as a reference directing the user to the copy of this License. -Also, you must do one of these things: - -a) Accompany the work with the complete corresponding machine-readable source -code for the Library including whatever changes were used in the work (which -must be distributed under Sections 1 and 2 above); and, if the work is an -executable linked with the Library, with the complete machine-readable "work -that uses the Library", as object code and/or source code, so that the user -can modify the Library and then relink to produce a modified executable containing -the modified Library. (It is understood that the user who changes the contents -of definitions files in the Library will not necessarily be able to recompile -the application to use the modified definitions.) - -b) Accompany the work with a written offer, valid for at least three years, -to give the same user the materials specified in Subsection 6a, above, for -a charge no more than the cost of performing this distribution. - -c) If distribution of the work is made by offering access to copy from a designated -place, offer equivalent access to copy the above specified materials from -the same place. - -d) Verify that the user has already received a copy of these materials or -that you have already sent this user a copy. - -For an executable, the required form of the "work that uses the Library" must -include any data and utility programs needed for reproducing the executable -from it. However, as a special exception, the source code distributed need -not include anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the operating -system on which the executable runs, unless that component itself accompanies -the executable. - -It may happen that this requirement contradicts the license restrictions of -other proprietary libraries that do not normally accompany the operating system. -Such a contradiction means you cannot use both them and the Library together -in an executable that you distribute. - -7. You may place library facilities that are a work based on the Library side-by-side -in a single library together with other library facilities not covered by -this License, and distribute such a combined library, provided that the separate -distribution of the work based on the Library and of the other library facilities -is otherwise permitted, and provided that you do these two things: - -a) Accompany the combined library with a copy of the same work based on the -Library, uncombined with any other library facilities. This must be distributed -under the terms of the Sections above. - -b) Give prominent notice with the combined library of the fact that part of -it is a work based on the Library, and explaining where to find the accompanying -uncombined form of the same work. - -8. You may not copy, modify, sublicense, link with, or distribute the Library -except as expressly provided under this License. Any attempt otherwise to -copy, modify, sublicense, link with, or distribute the Library is void, and -will automatically terminate your rights under this License. However, parties -who have received copies, or rights, from you under this License will not -have their licenses terminated so long as such parties remain in full compliance. - -9. You are not required to accept this License, since you have not signed -it. However, nothing else grants you permission to modify or distribute the -Library or its derivative works. These actions are prohibited by law if you -do not accept this License. Therefore, by modifying or distributing the Library -(or any work based on the Library), you indicate your acceptance of this License -to do so, and all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - -10. Each time you redistribute the Library (or any work based on the Library), -the recipient automatically receives a license from the original licensor -to copy, distribute, link with or modify the Library subject to these terms -and conditions. You may not impose any further restrictions on the recipients' -exercise of the rights granted herein. You are not responsible for enforcing -compliance by third parties to this License. - -11. If, as a consequence of a court judgment or allegation of patent infringement -or for any other reason (not limited to patent issues), conditions are imposed -on you (whether by court order, agreement or otherwise) that contradict the -conditions of this License, they do not excuse you from the conditions of -this License. If you cannot distribute so as to satisfy simultaneously your -obligations under this License and any other pertinent obligations, then as -a consequence you may not distribute the Library at all. For example, if a -patent license would not permit royalty-free redistribution of the Library -by all those who receive copies directly or indirectly through you, then the -only way you could satisfy both it and this License would be to refrain entirely -from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents -or other property right claims or to contest validity of any such claims; -this section has the sole purpose of protecting the integrity of the free -software distribution system which is implemented by public license practices. -Many people have made generous contributions to the wide range of software -distributed through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing to -distribute software through any other system and a licensee cannot impose -that choice. - -This section is intended to make thoroughly clear what is believed to be a -consequence of the rest of this License. - -12. If the distribution and/or use of the Library is restricted in certain -countries either by patents or by copyrighted interfaces, the original copyright -holder who places the Library under this License may add an explicit geographical -distribution limitation excluding those countries, so that distribution is -permitted only in or among countries not thus excluded. In such case, this -License incorporates the limitation as if written in the body of this License. - -13. The Free Software Foundation may publish revised and/or new versions of -the Library General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to address -new problems or concerns. - -Each version is given a distinguishing version number. If the Library specifies -a version number of this License which applies to it and "any later version", -you have the option of following the terms and conditions either of that version -or of any later version published by the Free Software Foundation. If the -Library does not specify a license version number, you may choose any version -ever published by the Free Software Foundation. - -14. If you wish to incorporate parts of the Library into other free programs -whose distribution conditions are incompatible with these, write to the author -to ask for permission. For software which is copyrighted by the Free Software -Foundation, write to the Free Software Foundation; we sometimes make exceptions -for this. Our decision will be guided by the two goals of preserving the free -status of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - -15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR -THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE -STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY -"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE -OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE -THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE -OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA -OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES -OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH -HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -END OF TERMS AND CONDITIONS - -How to Apply These Terms to Your New Libraries - -If you develop a new library, and you want it to be of the greatest possible -use to the public, we recommend making it free software that everyone can -redistribute and change. You can do so by permitting redistribution under -these terms (or, alternatively, under the terms of the ordinary General Public -License). - -To apply these terms, attach the following notices to the library. It is safest -to attach them to the start of each source file to most effectively convey -the exclusion of warranty; and each file should have at least the "copyright" -line and a pointer to where the full notice is found. - -one line to give the library's name and an idea of what it does. - -Copyright (C) year name of author - -This library is free software; you can redistribute it and/or modify it under -the terms of the GNU Library General Public License as published by the Free -Software Foundation; either version 2 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 Library General Public License for more -details. - -You should have received a copy of the GNU Library General Public License -along with this library; if not, write to the Free Software Foundation, Inc., -51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your school, -if any, to sign a "copyright disclaimer" for the library, if necessary. Here -is a sample; alter the names: - -Yoyodyne, Inc., hereby disclaims all copyright interest in - -the library `Frob' (a library for tweaking knobs) written - -by James Random Hacker. - -signature of Ty Coon, 1 April 1990 - -Ty Coon, President of Vice - -That's all there is to it! diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 068e6688..314e736d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -3,9 +3,6 @@ # SPDX-License-Identifier: BSD-2-Clause add_subdirectory(kmediasession) -if (NOT QT_MAJOR_VERSION EQUAL "6") -add_subdirectory(solidextras) -endif() set(kasts_srcs main.cpp @@ -171,13 +168,7 @@ add_executable(kasts ${kasts_srcs}) kconfig_add_kcfg_files(kasts settingsmanager.kcfgc GENERATE_MOC) target_include_directories(kasts PRIVATE ${CMAKE_BINARY_DIR}) -target_link_libraries(kasts PRIVATE Qt::Core Qt::Qml Qt::Quick Qt::QuickControls2 Qt::Sql Qt::Svg Qt::Xml KF${KF_MAJOR_VERSION}::Kirigami2 KF${KF_MAJOR_VERSION}::Syndication KF${KF_MAJOR_VERSION}::CoreAddons KF${KF_MAJOR_VERSION}::ConfigGui KF${KF_MAJOR_VERSION}::I18n Taglib::Taglib ${QTKEYCHAIN_LIBRARIES} KF${KF_MAJOR_VERSION}::ThreadWeaver KMediaSession) - -if (QT_MAJOR_VERSION EQUAL "6") -target_link_libraries(kasts PRIVATE Qt6::Network) -else () -target_link_libraries(kasts PRIVATE KastsSolidExtras) -endif() +target_link_libraries(kasts PRIVATE Qt::Core Qt::Qml Qt::Quick Qt::QuickControls2 Qt::Sql Qt::Svg Qt::Xml Qt::Network KF6::Kirigami2 KF6::Syndication KF6::CoreAddons KF6::ConfigGui KF6::I18n Taglib::Taglib ${QTKEYCHAIN_LIBRARIES} KF6::ThreadWeaver KMediaSession) if(KASTS_FLATPAK) target_compile_definitions(kasts PUBLIC KASTS_FLATPAK) diff --git a/src/kmediasession/CMakeLists.txt b/src/kmediasession/CMakeLists.txt index 563416cd..c7807d8d 100644 --- a/src/kmediasession/CMakeLists.txt +++ b/src/kmediasession/CMakeLists.txt @@ -5,11 +5,11 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake" $ option(BUILD_EXAMPLE_PLAYER "Build and install example audio backend player" OFF) -find_package(Qt${QT_MAJOR_VERSION} ${QT_MIN_VERSION} REQUIRED NO_MODULE COMPONENTS Core Qml Multimedia) -find_package(KF${KF_MAJOR_VERSION} ${KF_MIN_VERSION} REQUIRED COMPONENTS CoreAddons I18n) +find_package(Qt6 ${QT_MIN_VERSION} REQUIRED NO_MODULE COMPONENTS Core Qml Multimedia) +find_package(KF6 ${KF_MIN_VERSION} REQUIRED COMPONENTS CoreAddons I18n) if (NOT ANDROID) - find_package(Qt${QT_MAJOR_VERSION} ${QT_MIN_VERSION} REQUIRED COMPONENTS DBus Widgets) + find_package(Qt6 ${QT_MIN_VERSION} REQUIRED COMPONENTS DBus Widgets) endif() find_package(LIBVLC) @@ -134,8 +134,8 @@ target_include_directories(KMediaSession PUBLIC ${CMAKE_BINARY_DIR}) target_link_libraries(KMediaSession PUBLIC Qt::Core) target_link_libraries(KMediaSession PRIVATE Qt::Multimedia - KF${KF_MAJOR_VERSION}::CoreAddons - KF${KF_MAJOR_VERSION}::I18n + KF6::CoreAddons + KF6::I18n ) if (LIBVLC_FOUND) diff --git a/src/kmediasession/example-app/CMakeLists.txt b/src/kmediasession/example-app/CMakeLists.txt index 87651ac9..247ba4d9 100644 --- a/src/kmediasession/example-app/CMakeLists.txt +++ b/src/kmediasession/example-app/CMakeLists.txt @@ -1,11 +1,11 @@ # SPDX-License-Identifier: BSD-2-Clause # SPDX-FileCopyrightText: 2022-2023 Bart De Vries -find_package(Qt${QT_MAJOR_VERSION} ${QT_MIN_VERSION} REQUIRED NO_MODULE COMPONENTS Core Qml Gui Multimedia) -find_package(KF${KF_MAJOR_VERSION} ${KF_MIN_VERSION} REQUIRED COMPONENTS CoreAddons I18n) +find_package(Qt6 ${QT_MIN_VERSION} REQUIRED NO_MODULE COMPONENTS Core Qml Gui Multimedia) +find_package(KF6 ${KF_MIN_VERSION} REQUIRED COMPONENTS CoreAddons I18n) if (NOT ANDROID) - find_package(Qt${QT_MAJOR_VERSION} ${QT_MIN_VERSION} REQUIRED COMPONENTS DBus Widgets) + find_package(Qt6 ${QT_MIN_VERSION} REQUIRED COMPONENTS DBus Widgets) endif() ########################################################### @@ -16,8 +16,8 @@ target_link_libraries(kmediasession-example PRIVATE Qt::Core Qt::Qml Qt::Gui - KF${KF_MAJOR_VERSION}::CoreAddons - KF${KF_MAJOR_VERSION}::I18n + KF6::CoreAddons + KF6::I18n KMediaSession ) diff --git a/src/kmediasession/mediabackends/qtmediabackend.cpp b/src/kmediasession/mediabackends/qtmediabackend.cpp index 2dc1d071..54225f51 100644 --- a/src/kmediasession/mediabackends/qtmediabackend.cpp +++ b/src/kmediasession/mediabackends/qtmediabackend.cpp @@ -10,16 +10,12 @@ #include #include -#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0) #include -#endif #include #include #include #include -#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0) #include -#endif #include #include #include @@ -32,22 +28,14 @@ private: KMediaSession *m_KMediaSession = nullptr; QMediaPlayer m_player; -#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0) QAudioOutput m_output; -#else -#define m_output m_player -#define QAudioOutput QMediaPlayer -#endif std::unique_ptr imageCacheDir = nullptr; KMediaSession::Error translateErrorEnum(QMediaPlayer::Error errorEnum); KMediaSession::MediaStatus translateMediaStatusEnum(QMediaPlayer::MediaStatus mediaEnum); -#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0) KMediaSession::PlaybackState translatePlaybackStateEnum(QMediaPlayer::PlaybackState playbackStateEnum); -#else - KMediaSession::PlaybackState translatePlaybackStateEnum(QMediaPlayer::State playbackStateEnum); -#endif + void parseMetaData(); }; @@ -59,25 +47,16 @@ QtMediaBackend::QtMediaBackend(QObject *parent) d->m_KMediaSession = static_cast(parent); -#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0) d->m_player.setAudioOutput(&d->m_output); -#endif // connect to QMediaPlayer signals and dispatch to AbstractMediaBackend // signals and add debug output connect(&d->m_output, &QAudioOutput::mutedChanged, this, &QtMediaBackend::playerMutedSignalChanges); connect(&d->m_output, &QAudioOutput::volumeChanged, this, &QtMediaBackend::playerVolumeSignalChanges); -#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0) connect(&d->m_player, &QMediaPlayer::sourceChanged, this, &QtMediaBackend::playerSourceSignalChanges); connect(&d->m_player, &QMediaPlayer::playbackStateChanged, this, &QtMediaBackend::playerStateSignalChanges); connect(&d->m_player, QOverload::of(&QMediaPlayer::errorOccurred), this, &QtMediaBackend::playerErrorSignalChanges); connect(&d->m_player, &QMediaPlayer::metaDataChanged, this, &QtMediaBackend::playerMetaDataSignalChanges); -#else - connect(&d->m_player, &QMediaPlayer::mediaChanged, this, &QtMediaBackend::playerSourceSignalChanges); - connect(&d->m_player, &QMediaPlayer::stateChanged, this, &QtMediaBackend::playerStateSignalChanges); - connect(&d->m_player, QOverload::of(&QMediaPlayer::error), this, &QtMediaBackend::playerErrorSignalChanges); - connect(&d->m_player, QOverload<>::of(&QMediaObject::metaDataChanged), this, &QtMediaBackend::playerMetaDataSignalChanges); -#endif connect(&d->m_player, &QMediaPlayer::mediaStatusChanged, this, &QtMediaBackend::mediaStatusSignalChanges); connect(&d->m_player, &QMediaPlayer::playbackRateChanged, this, &QtMediaBackend::playerPlaybackRateSignalChanges); connect(&d->m_player, &QMediaPlayer::durationChanged, this, &QtMediaBackend::playerDurationSignalChanges); @@ -106,11 +85,7 @@ bool QtMediaBackend::muted() const qreal QtMediaBackend::volume() const { qCDebug(QtMediaBackendLog) << "QtMediaBackend::volume()"; -#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0) qreal realVolume = static_cast(d->m_output.volume()); -#else - qreal realVolume = static_cast(d->m_output.volume() / 100.0); -#endif qreal userVolume = static_cast(QAudio::convertVolume(realVolume, QAudio::LinearVolumeScale, QAudio::LogarithmicVolumeScale)); return userVolume * 100.0; @@ -119,11 +94,7 @@ qreal QtMediaBackend::volume() const QUrl QtMediaBackend::source() const { qCDebug(QtMediaBackendLog) << "QtMediaBackend::source()"; -#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0) return d->m_player.source(); -#else - return d->m_player.media().request().url(); -#endif } KMediaSession::MediaStatus QtMediaBackend::mediaStatus() const @@ -135,11 +106,7 @@ KMediaSession::MediaStatus QtMediaBackend::mediaStatus() const KMediaSession::PlaybackState QtMediaBackend::playbackState() const { qCDebug(QtMediaBackendLog) << "QtMediaBackend::playbackState()"; -#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0) return d->translatePlaybackStateEnum(d->m_player.playbackState()); -#else - return d->translatePlaybackStateEnum(d->m_player.state()); -#endif } qreal QtMediaBackend::playbackRate() const @@ -183,21 +150,13 @@ void QtMediaBackend::setVolume(qreal volume) qCDebug(QtMediaBackendLog) << "QtMediaBackend::setVolume(" << volume << ")"; qreal realVolume = static_cast(QAudio::convertVolume(volume / 100.0, QAudio::LogarithmicVolumeScale, QAudio::LinearVolumeScale)); -#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0) d->m_output.setVolume(realVolume); -#else - d->m_output.setVolume(qRound(realVolume * 100.0)); -#endif } void QtMediaBackend::setSource(const QUrl &source) { qCDebug(QtMediaBackendLog) << "QtMediaBackend::setSource(" << source << ")"; -#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0) d->m_player.setSource(source); -#else - d->m_player.setMedia(source); -#endif } void QtMediaBackend::setPosition(qint64 position) @@ -238,15 +197,9 @@ void QtMediaBackend::playerMutedSignalChanges(bool muted) }); } -#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0) void QtMediaBackend::playerVolumeSignalChanges(float volume) { qreal realVolume = static_cast(volume); -#else -void QtMediaBackend::playerVolumeSignalChanges(qint64 volume) -{ - qreal realVolume = static_cast(volume) / 100.0; -#endif qreal userVolume = static_cast(QAudio::convertVolume(realVolume, QAudio::LinearVolumeScale, QAudio::LogarithmicVolumeScale)) * 100.0; QTimer::singleShot(0, this, [this, userVolume]() { qCDebug(QtMediaBackendLog) << "QtMediaBackend::volumeChanged(" << userVolume << ")"; @@ -254,16 +207,10 @@ void QtMediaBackend::playerVolumeSignalChanges(qint64 volume) }); } -#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0) void QtMediaBackend::playerSourceSignalChanges(const QUrl &media) { QUrl source = media; -#else -void QtMediaBackend::playerSourceSignalChanges(const QMediaContent &media) -{ - QUrl source = media.request().url(); -#endif QTimer::singleShot(0, this, [this, source]() { qCDebug(QtMediaBackendLog) << "QtMediaBackend::sourceChanged(" << source << ")"; Q_EMIT sourceChanged(source); @@ -278,11 +225,7 @@ void QtMediaBackend::mediaStatusSignalChanges(const QMediaPlayer::MediaStatus &q }); } -#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0) void QtMediaBackend::playerStateSignalChanges(const QMediaPlayer::PlaybackState &qtPlaybackState) -#else -void QtMediaBackend::playerStateSignalChanges(const QMediaPlayer::State &qtPlaybackState) -#endif { const KMediaSession::PlaybackState playbackState = d->translatePlaybackStateEnum(qtPlaybackState); QTimer::singleShot(0, this, [this, playbackState]() { @@ -346,10 +289,6 @@ KMediaSession::Error QtMediaBackendPrivate::translateErrorEnum(QMediaPlayer::Err return KMediaSession::Error::NetworkError; case QMediaPlayer::Error::AccessDeniedError: return KMediaSession::Error::AccessDeniedError; -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - case QMediaPlayer::Error::ServiceMissingError: - return KMediaSession::Error::ServiceMissingError; -#endif default: return KMediaSession::Error::NoError; } @@ -375,18 +314,11 @@ KMediaSession::MediaStatus QtMediaBackendPrivate::translateMediaStatusEnum(QMedi return KMediaSession::MediaStatus::EndOfMedia; case QMediaPlayer::MediaStatus::InvalidMedia: return KMediaSession::MediaStatus::InvalidMedia; -#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0) default: return KMediaSession::MediaStatus::NoMedia; -#else - case QMediaPlayer::MediaStatus::UnknownMediaStatus: - default: - return KMediaSession::MediaStatus::UnknownMediaStatus; -#endif } } -#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0) KMediaSession::PlaybackState QtMediaBackendPrivate::translatePlaybackStateEnum(QMediaPlayer::PlaybackState playbackStateEnum) { qCDebug(QtMediaBackendLog) << "QtMediaBackendPrivate::translateMediaStatusEnum(" << playbackStateEnum << ")"; @@ -402,66 +334,29 @@ KMediaSession::PlaybackState QtMediaBackendPrivate::translatePlaybackStateEnum(Q return KMediaSession::PlaybackState::StoppedState; } } -#else -KMediaSession::PlaybackState QtMediaBackendPrivate::translatePlaybackStateEnum(QMediaPlayer::State playbackStateEnum) -{ - qCDebug(QtMediaBackendLog) << "QtMediaBackendPrivate::translateMediaStatusEnum(" << playbackStateEnum << ")"; - - switch (playbackStateEnum) { - case QMediaPlayer::State::StoppedState: - return KMediaSession::PlaybackState::StoppedState; - case QMediaPlayer::State::PlayingState: - return KMediaSession::PlaybackState::PlayingState; - case QMediaPlayer::State::PausedState: - return KMediaSession::PlaybackState::PausedState; - default: - return KMediaSession::PlaybackState::StoppedState; - } -} -#endif void QtMediaBackendPrivate::parseMetaData() { qCDebug(QtMediaBackendLog) << "QtMediaBackendPrivate::parseMetaData()"; if (m_KMediaSession->metaData()->title().isEmpty()) { -#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0) m_KMediaSession->metaData()->setTitle(m_player.metaData().stringValue(QMediaMetaData::Title)); -#else - m_KMediaSession->metaData()->setTitle(m_player.metaData(QStringLiteral("Title")).toString()); -#endif } if (m_KMediaSession->metaData()->artist().isEmpty()) { -#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0) m_KMediaSession->metaData()->setArtist(m_player.metaData().stringValue(QMediaMetaData::ContributingArtist)); -#else - m_KMediaSession->metaData()->setArtist(m_player.metaData(QStringLiteral("ContributingArtist")).toString()); -#endif } if (m_KMediaSession->metaData()->album().isEmpty()) { -#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0) m_KMediaSession->metaData()->setAlbum(m_player.metaData().stringValue(QMediaMetaData::AlbumTitle)); -#else - m_KMediaSession->metaData()->setAlbum(m_player.metaData(QStringLiteral("AlbumTitle")).toString()); -#endif } if (m_KMediaSession->metaData()->artworkUrl().isEmpty()) { -#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0) if (m_player.metaData().value(QMediaMetaData::CoverArtImage).isValid()) { -#else - if (m_player.metaData(QStringLiteral("CoverArtImage")).isValid()) { -#endif imageCacheDir = std::make_unique(); if (imageCacheDir->isValid()) { QString filePath = imageCacheDir->path() + QStringLiteral("/coverimage"); -#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0) bool success = m_player.metaData().value(QMediaMetaData::CoverArtImage).value().save(filePath, "PNG"); -#else - bool success = m_player.metaData(QStringLiteral("CoverArtImage")).value().save(filePath, "PNG"); -#endif if (success) { QString localFilePath = QStringLiteral("file://") + filePath; diff --git a/src/kmediasession/mediabackends/qtmediabackend.h b/src/kmediasession/mediabackends/qtmediabackend.h index 2822ed1d..2f679acf 100644 --- a/src/kmediasession/mediabackends/qtmediabackend.h +++ b/src/kmediasession/mediabackends/qtmediabackend.h @@ -56,15 +56,9 @@ private: void playerMutedSignalChanges(bool muted); void mediaStatusSignalChanges(const QMediaPlayer::MediaStatus &qtMediaStatus); -#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0) void playerVolumeSignalChanges(float volume); void playerSourceSignalChanges(const QUrl &media); void playerStateSignalChanges(const QMediaPlayer::PlaybackState &qtPlaybackState); -#else - void playerVolumeSignalChanges(qint64 volume); - void playerSourceSignalChanges(const QMediaContent &media); - void playerStateSignalChanges(const QMediaPlayer::State &qtPlaybackState); -#endif void playerPlaybackRateSignalChanges(const qreal &playbackRate); void playerErrorSignalChanges(const QMediaPlayer::Error &error); void playerDurationSignalChanges(qint64 newDuration); diff --git a/src/main.cpp b/src/main.cpp index 2538b6b2..78eb5063 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -70,11 +70,6 @@ int main(int argc, char *argv[]) qputenv("QT_ENABLE_GLYPH_CACHE_WORKAROUND", "1"); } -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - QGuiApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); - QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling); -#endif - #ifdef Q_OS_ANDROID QGuiApplication app(argc, argv); qInstallMessageHandler(myMessageHandler); diff --git a/src/networkconnectionmanager.cpp b/src/networkconnectionmanager.cpp index 7756d2f3..89a8572d 100644 --- a/src/networkconnectionmanager.cpp +++ b/src/networkconnectionmanager.cpp @@ -7,19 +7,13 @@ #include "networkconnectionmanager.h" #include "networkconnectionmanagerlogging.h" -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) #include -#endif #include "settingsmanager.h" NetworkConnectionManager::NetworkConnectionManager(QObject *parent) : QObject(parent) -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - , m_networkStatus(SolidExtras::NetworkStatus()) -#endif { -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) m_backendAvailable = QNetworkInformation::loadDefaultBackend(); if (m_backendAvailable) { @@ -36,20 +30,6 @@ NetworkConnectionManager::NetworkConnectionManager(QObject *parent) Q_EMIT streamingAllowedChanged(); }); } -#else - connect(&m_networkStatus, &SolidExtras::NetworkStatus::connectivityChanged, this, [this]() { - Q_EMIT feedUpdatesAllowedChanged(); - Q_EMIT episodeDownloadsAllowedChanged(); - Q_EMIT imageDownloadsAllowedChanged(); - Q_EMIT streamingAllowedChanged(); - }); - connect(&m_networkStatus, &SolidExtras::NetworkStatus::meteredChanged, this, [this]() { - Q_EMIT feedUpdatesAllowedChanged(); - Q_EMIT episodeDownloadsAllowedChanged(); - Q_EMIT imageDownloadsAllowedChanged(); - Q_EMIT streamingAllowedChanged(); - }); -#endif connect(SettingsManager::self(), &SettingsManager::allowMeteredFeedUpdatesChanged, this, &NetworkConnectionManager::feedUpdatesAllowedChanged); connect(SettingsManager::self(), &SettingsManager::allowMeteredEpisodeDownloadsChanged, this, &NetworkConnectionManager::episodeDownloadsAllowedChanged); @@ -59,16 +39,11 @@ NetworkConnectionManager::NetworkConnectionManager(QObject *parent) bool NetworkConnectionManager::feedUpdatesAllowed() const { -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) bool allowed = true; if (m_backendAvailable) { allowed = (QNetworkInformation::instance()->reachability() != QNetworkInformation::Reachability::Disconnected && (!QNetworkInformation::instance()->isMetered() || SettingsManager::self()->allowMeteredFeedUpdates())); } -#else - bool allowed = (m_networkStatus.connectivity() != SolidExtras::NetworkStatus::No - && (m_networkStatus.metered() != SolidExtras::NetworkStatus::Yes || SettingsManager::self()->allowMeteredFeedUpdates())); -#endif qCDebug(kastsNetworkConnectionManager) << "FeedUpdatesAllowed()" << allowed; @@ -77,16 +52,11 @@ bool NetworkConnectionManager::feedUpdatesAllowed() const bool NetworkConnectionManager::episodeDownloadsAllowed() const { -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) bool allowed = true; if (m_backendAvailable) { allowed = (QNetworkInformation::instance()->reachability() != QNetworkInformation::Reachability::Disconnected && (!QNetworkInformation::instance()->isMetered() || SettingsManager::self()->allowMeteredEpisodeDownloads())); } -#else - bool allowed = (m_networkStatus.connectivity() != SolidExtras::NetworkStatus::No - && (m_networkStatus.metered() != SolidExtras::NetworkStatus::Yes || SettingsManager::self()->allowMeteredEpisodeDownloads())); -#endif qCDebug(kastsNetworkConnectionManager) << "EpisodeDownloadsAllowed()" << allowed; @@ -95,16 +65,11 @@ bool NetworkConnectionManager::episodeDownloadsAllowed() const bool NetworkConnectionManager::imageDownloadsAllowed() const { -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) bool allowed = true; if (m_backendAvailable) { allowed = (QNetworkInformation::instance()->reachability() != QNetworkInformation::Reachability::Disconnected && (!QNetworkInformation::instance()->isMetered() || SettingsManager::self()->allowMeteredImageDownloads())); } -#else - bool allowed = (m_networkStatus.connectivity() != SolidExtras::NetworkStatus::No - && (m_networkStatus.metered() != SolidExtras::NetworkStatus::Yes || SettingsManager::self()->allowMeteredImageDownloads())); -#endif qCDebug(kastsNetworkConnectionManager) << "ImageDownloadsAllowed()" << allowed; @@ -113,16 +78,11 @@ bool NetworkConnectionManager::imageDownloadsAllowed() const bool NetworkConnectionManager::streamingAllowed() const { -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) bool allowed = true; if (m_backendAvailable) { allowed = (QNetworkInformation::instance()->reachability() != QNetworkInformation::Reachability::Disconnected && (!QNetworkInformation::instance()->isMetered() || SettingsManager::self()->allowMeteredStreaming())); } -#else - bool allowed = (m_networkStatus.connectivity() != SolidExtras::NetworkStatus::No - && (m_networkStatus.metered() != SolidExtras::NetworkStatus::Yes || SettingsManager::self()->allowMeteredStreaming())); -#endif qCDebug(kastsNetworkConnectionManager) << "StreamingAllowed()" << allowed; diff --git a/src/networkconnectionmanager.h b/src/networkconnectionmanager.h index 353c5a63..13bf889d 100644 --- a/src/networkconnectionmanager.h +++ b/src/networkconnectionmanager.h @@ -8,10 +8,6 @@ #include -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) -#include -#endif - class NetworkConnectionManager : public QObject { Q_OBJECT @@ -42,9 +38,5 @@ Q_SIGNALS: private: NetworkConnectionManager(QObject *parent = nullptr); -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - SolidExtras::NetworkStatus m_networkStatus; -#else bool m_backendAvailable = false; -#endif }; diff --git a/src/solidextras/CMakeLists.txt b/src/solidextras/CMakeLists.txt deleted file mode 100644 index 6d169bc6..00000000 --- a/src/solidextras/CMakeLists.txt +++ /dev/null @@ -1,44 +0,0 @@ -# SPDX-FileCopyrightText: 2020 Volker Krause -# SPDX-License-Identifier: BSD-3-Clause - -add_subdirectory(qml) - -set(solidextras_srcs - networkstatus.cpp -) - -if (ANDROID) - add_subdirectory(android) - list(APPEND solidextras_srcs - networkstatus_android.cpp - ) -else() - list(APPEND solidextras_srcs - networkstatus_dbus.cpp - ) - qt_add_dbus_interface(solidextras_srcs org.freedesktop.portal.NetworkMonitor.xml portalnetworkmonitor) -endif() - -add_library(KastsSolidExtras ${solidextras_srcs}) -generate_export_header(KastsSolidExtras BASE_NAME KastsSolidExtras) - -if (TARGET KF${KF_MAJOR_VERSION}::NetworkManagerQt) - set(HAVE_NM ON) -endif() -configure_file(config-solid-extras.h.in ${CMAKE_CURRENT_BINARY_DIR}/config-solid-extras.h) - -target_include_directories(KastsSolidExtras PUBLIC "$") -target_link_libraries(KastsSolidExtras PUBLIC Qt::Core) - -if (ANDROID) - if (QT_MAJOR_VERSION EQUAL "5") - target_link_libraries(KastsSolidExtras PRIVATE Qt::AndroidExtras) - endif() -else () - target_link_libraries(KastsSolidExtras PRIVATE Qt::DBus) - if (TARGET KF${KF_MAJOR_VERSION}::NetworkManagerQt) - target_link_libraries(KastsSolidExtras PRIVATE KF${KF_MAJOR_VERSION}::NetworkManagerQt) - endif() -endif() - -install(TARGETS KastsSolidExtras ${KDE_INSTALL_TARGETS_DEFAULT_ARGS}) diff --git a/src/solidextras/android/AndroidManifest.xml b/src/solidextras/android/AndroidManifest.xml deleted file mode 100644 index 5b72102a..00000000 --- a/src/solidextras/android/AndroidManifest.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - diff --git a/src/solidextras/android/CMakeLists.txt b/src/solidextras/android/CMakeLists.txt deleted file mode 100644 index 2ba28611..00000000 --- a/src/solidextras/android/CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ -# SPDX-FileCopyrightText: 2020 Volker Krause -# SPDX-License-Identifier: BSD-3-Clause - -gradle_add_aar(solidextras_aar BUILDFILE ${CMAKE_CURRENT_SOURCE_DIR}/build.gradle NAME KastsSolidExtras) -gradle_install_aar(solidextras_aar DESTINATION jar) - -configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/KastsSolidExtras-android-dependencies.xml - ${CMAKE_BINARY_DIR}/lib/KastsSolidExtras_${CMAKE_ANDROID_ARCH_ABI}-android-dependencies.xml -) -install(FILES KastsSolidExtras-android-dependencies.xml DESTINATION ${KDE_INSTALL_LIBDIR} RENAME KastsSolidExtras_${CMAKE_ANDROID_ARCH_ABI}-android-dependencies.xml) diff --git a/src/solidextras/android/KastsSolidExtras-android-dependencies.xml b/src/solidextras/android/KastsSolidExtras-android-dependencies.xml deleted file mode 100644 index a520dd3b..00000000 --- a/src/solidextras/android/KastsSolidExtras-android-dependencies.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - diff --git a/src/solidextras/android/build.gradle b/src/solidextras/android/build.gradle deleted file mode 100644 index bda9bad7..00000000 --- a/src/solidextras/android/build.gradle +++ /dev/null @@ -1,49 +0,0 @@ -/* - SPDX-FileCopyrightText: 2020 Volker Krause - SPDX-FileCopyrightText: 2023 Bart De Vries - SPDX-License-Identifier: BSD-3-Clause -*/ - -buildscript { - repositories { - google() - jcenter() - } - - dependencies { - classpath 'com.android.tools.build:gradle:@Gradle_ANDROID_GRADLE_PLUGIN_VERSION@' - } -} - -repositories { - google() - jcenter() -} - -apply plugin: 'com.android.library' - -android { - buildToolsVersion '@ANDROID_SDK_BUILD_TOOLS_REVISION@' - compileSdkVersion @ANDROID_SDK_COMPILE_API@ - - sourceSets { - main { - manifest.srcFile '@CMAKE_CURRENT_SOURCE_DIR@/AndroidManifest.xml' - java.srcDirs = ['@CMAKE_CURRENT_SOURCE_DIR@/org'] - } - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - lintOptions { - abortOnError false - } - - defaultConfig { - minSdkVersion @ANDROID_API_LEVEL@ - targetSdkVersion @ANDROID_SDK_COMPILE_API@ - } -} diff --git a/src/solidextras/android/org/kde/solidextras/NetworkStatus.java b/src/solidextras/android/org/kde/solidextras/NetworkStatus.java deleted file mode 100644 index 8f1f1869..00000000 --- a/src/solidextras/android/org/kde/solidextras/NetworkStatus.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - SPDX-FileCopyrightText: 2020 Volker Krause - - SPDX-License-Identifier: LGPL-2.0-or-later -*/ - -package org.kde.solidextras; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.net.ConnectivityManager; -import android.net.NetworkInfo; - -public class NetworkStatus extends BroadcastReceiver -{ - public NetworkStatus(Context context) - { - IntentFilter intentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); - context.registerReceiver(this, intentFilter); - } - - private static native void networkStatusChanged(); - - @Override - public void onReceive(Context context, Intent intent) - { - networkStatusChanged(); - } - - public boolean connectivity(Context context) - { - ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); - NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); - return activeNetwork != null && activeNetwork.isConnected(); - } - - public boolean metered(Context context) - { - ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); - return cm.isActiveNetworkMetered(); - } -} diff --git a/src/solidextras/config-solid-extras.h.in b/src/solidextras/config-solid-extras.h.in deleted file mode 100644 index a7e8a128..00000000 --- a/src/solidextras/config-solid-extras.h.in +++ /dev/null @@ -1,9 +0,0 @@ -/* - SPDX-FileCopyrightText: 2020 Volker Krause - - SPDX-License-Identifier: LGPL-2.0-or-later -*/ - -#pragma once - -#cmakedefine HAVE_NM diff --git a/src/solidextras/networkstatus.cpp b/src/solidextras/networkstatus.cpp deleted file mode 100644 index 875afd62..00000000 --- a/src/solidextras/networkstatus.cpp +++ /dev/null @@ -1,11 +0,0 @@ -/* - SPDX-FileCopyrightText: 2020 Volker Krause - - SPDX-License-Identifier: LGPL-2.0-or-later -*/ - -#include "networkstatus.h" - -using namespace SolidExtras; - -NetworkStatus::~NetworkStatus() = default; diff --git a/src/solidextras/networkstatus.h b/src/solidextras/networkstatus.h deleted file mode 100644 index 09e26999..00000000 --- a/src/solidextras/networkstatus.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - SPDX-FileCopyrightText: 2020 Volker Krause - - SPDX-License-Identifier: LGPL-2.0-or-later -*/ - -#pragma once - -#include "kastssolidextras_export.h" - -#include - -namespace SolidExtras { - -/** Basic information about the network status (connectivity, metering). */ -class KASTSSOLIDEXTRAS_EXPORT NetworkStatus : public QObject -{ - Q_OBJECT - Q_PROPERTY(State connectivity READ connectivity NOTIFY connectivityChanged) - Q_PROPERTY(State metered READ metered NOTIFY meteredChanged) -public: - enum State { - Unknown, - Yes, - No - }; - Q_ENUM(State) - - explicit NetworkStatus(QObject *parent = nullptr); - ~NetworkStatus(); - - State connectivity() const; - State metered() const; - -Q_SIGNALS: - void connectivityChanged(); - void meteredChanged(); -}; - -} diff --git a/src/solidextras/networkstatus_android.cpp b/src/solidextras/networkstatus_android.cpp deleted file mode 100644 index e166fb30..00000000 --- a/src/solidextras/networkstatus_android.cpp +++ /dev/null @@ -1,82 +0,0 @@ -/* - SPDX-FileCopyrightText: 2020 Volker Krause - - SPDX-License-Identifier: LGPL-2.0-or-later -*/ - -#include "networkstatus.h" - -#include -#include -#include - -using namespace SolidExtras; - -class NetworkStatusBackend : public QObject -{ - Q_OBJECT -public: - static NetworkStatusBackend* instance(); - bool connectivity() const; - bool metered() const; - -Q_SIGNALS: - void networkStatusChanged(); - -private: - explicit NetworkStatusBackend(QObject *parent = nullptr); - - QAndroidJniObject m_obj; -}; - -static void networkStatusChangedCallback() -{ - Q_EMIT NetworkStatusBackend::instance()->networkStatusChanged(); -} - -NetworkStatusBackend::NetworkStatusBackend(QObject *parent) - : QObject(parent) -{ - QAndroidJniEnvironment env; - jclass cls = env->FindClass("org/kde/solidextras/NetworkStatus"); - static JNINativeMethod methods = {"networkStatusChanged", "()V", reinterpret_cast(networkStatusChangedCallback)}; - env->RegisterNatives(cls, &methods, sizeof(methods) / sizeof(JNINativeMethod)); - - m_obj = QAndroidJniObject("org/kde/solidextras/NetworkStatus", "(Landroid/content/Context;)V", QtAndroid::androidContext().object()); -} - -NetworkStatusBackend* NetworkStatusBackend::instance() -{ - static NetworkStatusBackend s_instance; - return &s_instance; -} - -bool NetworkStatusBackend::connectivity() const -{ - return m_obj.callMethod("connectivity", "(Landroid/content/Context;)Z", QtAndroid::androidContext().object()); -} - -bool NetworkStatusBackend::metered() const -{ - return m_obj.callMethod("metered", "(Landroid/content/Context;)Z", QtAndroid::androidContext().object()); -} - - -NetworkStatus::NetworkStatus(QObject *parent) - : QObject(parent) -{ - connect(NetworkStatusBackend::instance(), &NetworkStatusBackend::networkStatusChanged, this, &NetworkStatus::connectivityChanged); - connect(NetworkStatusBackend::instance(), &NetworkStatusBackend::networkStatusChanged, this, &NetworkStatus::meteredChanged); -} - -NetworkStatus::State NetworkStatus::connectivity() const -{ - return NetworkStatusBackend::instance()->connectivity() ? NetworkStatus::Yes : NetworkStatus::No; -} - -NetworkStatus::State NetworkStatus::metered() const -{ - return NetworkStatusBackend::instance()->metered() ? NetworkStatus::Yes : NetworkStatus::No; -} - -#include "networkstatus_android.moc" diff --git a/src/solidextras/networkstatus_dbus.cpp b/src/solidextras/networkstatus_dbus.cpp deleted file mode 100644 index e49ffce9..00000000 --- a/src/solidextras/networkstatus_dbus.cpp +++ /dev/null @@ -1,143 +0,0 @@ -/* - SPDX-FileCopyrightText: 2020 Volker Krause - - SPDX-License-Identifier: LGPL-2.0-or-later -*/ - -#include "config-solid-extras.h" -#include "networkstatus.h" -#include "portalnetworkmonitor.h" - -#ifdef HAVE_NM -#include -#endif - -#include - -namespace SolidExtras { -class PortalNetworkMonitor : public QObject -{ - Q_OBJECT -public: - static bool hasPortal(); - static NetworkStatus::State connectivity() { return instance()->m_connected; } - static NetworkStatus::State metered() { return instance()->m_metered; } - static PortalNetworkMonitor* instance(); - -Q_SIGNALS: - void connectivityChanged(); - void meteredChanged(); - -private: - PortalNetworkMonitor(QObject *parent = nullptr); - void asyncUpdate(); - org::freedesktop::portal::NetworkMonitor m_iface; - NetworkStatus::State m_connected = NetworkStatus::Unknown; - NetworkStatus::State m_metered = NetworkStatus::Unknown; -}; -} - -using namespace SolidExtras; - -PortalNetworkMonitor::PortalNetworkMonitor(QObject *parent) - : QObject(parent) - , m_iface(QLatin1String("org.freedesktop.portal.Desktop"), QLatin1String("/org/freedesktop/portal/desktop"), QDBusConnection::sessionBus()) -{ - connect(&m_iface, &org::freedesktop::portal::NetworkMonitor::changed, this, &PortalNetworkMonitor::asyncUpdate); - if (m_iface.isValid()) { - asyncUpdate(); - } -} - -PortalNetworkMonitor* PortalNetworkMonitor::instance() -{ - static PortalNetworkMonitor *s_instance = new PortalNetworkMonitor(QCoreApplication::instance()); - return s_instance; -} - -bool SolidExtras::PortalNetworkMonitor::hasPortal() -{ - return instance()->m_iface.isValid(); -} - -void PortalNetworkMonitor::asyncUpdate() -{ - auto connectivityPendingReply = m_iface.GetConnectivity(); - auto connectivityWatcher = new QDBusPendingCallWatcher(connectivityPendingReply, this); - connect(connectivityWatcher, &QDBusPendingCallWatcher::finished, this, [this](auto *watcher) { - const QDBusPendingReply reply(*watcher); - if (reply.isValid() && ((reply.value() == 4) != (m_connected == NetworkStatus::Yes) || m_connected == NetworkStatus::Unknown)) { - m_connected = (reply.value() == 4) ? NetworkStatus::Yes : NetworkStatus::No; - Q_EMIT connectivityChanged(); - } - }); - - auto meteredPendingReply = m_iface.GetMetered(); - auto meteredWatcher = new QDBusPendingCallWatcher(meteredPendingReply, this); - connect(meteredWatcher, &QDBusPendingCallWatcher::finished, this, [this](auto *watcher) { - const QDBusPendingReply reply(*watcher); - if (reply.isValid() && (reply.value() != (m_metered == NetworkStatus::Yes) || m_metered == NetworkStatus::Unknown)) { - m_metered = reply.value() ? NetworkStatus::Yes : NetworkStatus::No; - Q_EMIT meteredChanged(); - } - }); -} - - -NetworkStatus::NetworkStatus(QObject *parent) - : QObject(parent) -{ - connect(PortalNetworkMonitor::instance(), &PortalNetworkMonitor::connectivityChanged, this, &NetworkStatus::connectivityChanged); - connect(PortalNetworkMonitor::instance(), &PortalNetworkMonitor::meteredChanged, this, &NetworkStatus::meteredChanged); - -#ifdef HAVE_NM - if (!PortalNetworkMonitor::hasPortal()) { - connect(NetworkManager::notifier(), &NetworkManager::Notifier::connectivityChanged, this, &NetworkStatus::connectivityChanged); - connect(NetworkManager::notifier(), &NetworkManager::Notifier::meteredChanged, this, &NetworkStatus::meteredChanged); - } -#endif -} - -NetworkStatus::State NetworkStatus::connectivity() const -{ - if (PortalNetworkMonitor::hasPortal()) { - return PortalNetworkMonitor::connectivity(); - } -#ifdef HAVE_NM - switch (NetworkManager::connectivity()) { - case NetworkManager::UnknownConnectivity: - return Unknown; - case NetworkManager::NoConnectivity: - case NetworkManager::Portal: - case NetworkManager::Limited: - return No; - case NetworkManager::Full: - return Yes; - } - Q_UNREACHABLE(); -#endif - return NetworkStatus::Unknown; -} - -NetworkStatus::State NetworkStatus::metered() const -{ - if (PortalNetworkMonitor::hasPortal()) { - return PortalNetworkMonitor::metered(); - } -#ifdef HAVE_NM - switch (NetworkManager::metered()) { - case NetworkManager::Device::UnknownStatus: - return Unknown; - case NetworkManager::Device::GuessYes: - case NetworkManager::Device::Yes: - return Yes; - case NetworkManager::Device::GuessNo: - case NetworkManager::Device::No: - return No; - } - Q_UNREACHABLE(); -#endif - return NetworkStatus::Unknown; -} - -#include "networkstatus_dbus.moc" diff --git a/src/solidextras/org.freedesktop.portal.NetworkMonitor.xml b/src/solidextras/org.freedesktop.portal.NetworkMonitor.xml deleted file mode 100644 index 0eeb6fba..00000000 --- a/src/solidextras/org.freedesktop.portal.NetworkMonitor.xml +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/solidextras/qml/CMakeLists.txt b/src/solidextras/qml/CMakeLists.txt deleted file mode 100644 index 7d49a6fe..00000000 --- a/src/solidextras/qml/CMakeLists.txt +++ /dev/null @@ -1,19 +0,0 @@ -# SPDX-FileCopyrightText: 2020 Volker Krause -# SPDX-License-Identifier: BSD-3-Clause - -add_library(kasts-solidextrasqmlplugin solidextrasqmlplugin.cpp) -target_link_libraries(kasts-solidextrasqmlplugin - Qt::Qml - KastsSolidExtras -) - -# make examples work without installation -if (NOT CMAKE_VERSION VERSION_LESS 3.14) - set_property(TARGET kasts-solidextrasqmlplugin PROPERTY LIBRARY_OUTPUT_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/org/kde/kasts/solidextras) - file(CREATE_LINK ${CMAKE_CURRENT_SOURCE_DIR}/qmldir ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/org/kde/kasts/solidextras/qmldir COPY_ON_ERROR SYMBOLIC) -else() - message(WARNING "CMake is too old, cannot setup QML plugins to work without installation") -endif() - -install(TARGETS kasts-solidextrasqmlplugin DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/kasts/solidextras) -install(FILES qmldir DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/kasts/solidextras) diff --git a/src/solidextras/qml/qmldir b/src/solidextras/qml/qmldir deleted file mode 100644 index fb6514d1..00000000 --- a/src/solidextras/qml/qmldir +++ /dev/null @@ -1,3 +0,0 @@ -module org.kde.kasts.solidextras -plugin kasts-solidextrasqmlplugin -classname SolidExtrasQmlPlugin diff --git a/src/solidextras/qml/qmldir.license b/src/solidextras/qml/qmldir.license deleted file mode 100644 index f0301a02..00000000 --- a/src/solidextras/qml/qmldir.license +++ /dev/null @@ -1,2 +0,0 @@ -SPDX-License-Identifier: CC0-1.0 -SPDX-FileCopyrightText: 2020 Volker Krause diff --git a/src/solidextras/qml/solidextrasqmlplugin.cpp b/src/solidextras/qml/solidextrasqmlplugin.cpp deleted file mode 100644 index 9e378589..00000000 --- a/src/solidextras/qml/solidextrasqmlplugin.cpp +++ /dev/null @@ -1,29 +0,0 @@ -/* - SPDX-FileCopyrightText: 2020 Volker Krause - - SPDX-License-Identifier: LGPL-2.0-or-later -*/ - -#include -#include -#include - -#include - -class SolidExtrasQmlPlugin : public QQmlExtensionPlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface") - void registerTypes(const char* uri) override; -}; - -using namespace SolidExtras; - -void SolidExtrasQmlPlugin::registerTypes(const char*) -{ - qmlRegisterSingletonType("org.kde.kasts.solidextras", 1, 0, "NetworkStatus", [](QQmlEngine *, QJSEngine *) -> QObject * { - return new NetworkStatus; - }); -} - -#include "solidextrasqmlplugin.moc" diff --git a/src/sync/sync.cpp b/src/sync/sync.cpp index c630eaf3..8954ead5 100644 --- a/src/sync/sync.cpp +++ b/src/sync/sync.cpp @@ -20,11 +20,7 @@ #include #include -#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0) #include -#else -#include -#endif #include "audiomanager.h" #include "database.h"