Warning, file /utilities/telly-skout/src/database.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 // SPDX-FileCopyrightText: 2022 Plata Hill <plata.hill@kdemail.net> 0002 // SPDX-License-Identifier: LGPL-2.1-or-later 0003 0004 #pragma once 0005 0006 #include <QObject> 0007 0008 #include "channeldata.h" 0009 #include "groupdata.h" 0010 #include "programdata.h" 0011 #include "types.h" 0012 0013 #include <QList> 0014 #include <QMap> 0015 #include <QMultiMap> 0016 #include <QSqlQuery> 0017 #include <QString> 0018 #include <QVector> 0019 0020 #include <memory> 0021 0022 class QSqlQuery; 0023 0024 class Database : public QObject 0025 { 0026 Q_OBJECT 0027 0028 public: 0029 static Database &instance() 0030 { 0031 static Database _instance; 0032 return _instance; 0033 } 0034 0035 bool execute(QSqlQuery &query) const; 0036 bool execute(const QString &query) const; 0037 0038 void addGroup(const GroupData &data); 0039 void addGroups(const QVector<GroupData> &groups); 0040 size_t groupCount() const; 0041 bool groupExists(const GroupId &id) const; 0042 QVector<GroupData> groups() const; 0043 QVector<GroupData> groups(const ChannelId &channelId) const; 0044 0045 void addChannel(const ChannelData &data, const GroupId &group); 0046 void addChannels(const QList<ChannelData> &channels, const GroupId &group); 0047 size_t channelCount() const; 0048 bool channelExists(const ChannelId &id) const; 0049 QVector<ChannelData> channels(bool onlyFavorites) const; 0050 ChannelData channel(const ChannelId &channelId) const; 0051 0052 void addFavorite(const ChannelId &channelId); 0053 void removeFavorite(const ChannelId &channelId); 0054 void sortFavorites(const QVector<ChannelId> &newOrder); // newOrder must contain same channel IDs as existing favorites 0055 void clearFavorites(); 0056 size_t favoriteCount() const; 0057 QVector<ChannelId> favorites() const; 0058 bool isFavorite(const ChannelId &channelId) const; 0059 0060 void addProgram(const ProgramData &data); 0061 void updateProgramDescription(const ProgramId &id, const QString &description); 0062 void addPrograms(const QVector<ProgramData> &programs); 0063 bool programExists(const ChannelId &channelId, const QDateTime &lastTime) const; 0064 size_t programCount(const ChannelId &channelId) const; 0065 QMap<ChannelId, QVector<ProgramData>> programs() const; 0066 QVector<ProgramData> programs(const ChannelId &channelId) const; 0067 0068 Q_SIGNALS: 0069 void groupAdded(const GroupId &id); 0070 void channelAdded(const ChannelId &id); 0071 void channelDetailsUpdated(const ChannelId &id, bool favorite); 0072 void favoritesUpdated(); 0073 0074 private: 0075 Database(); 0076 ~Database() = default; 0077 0078 int version() const; 0079 int fetcher() const; 0080 bool createTables(); 0081 bool dropTables(); 0082 void cleanup(); 0083 QMultiMap<ProgramId, QString> programCategories() const; 0084 0085 std::unique_ptr<QSqlQuery> m_addGroupQuery; 0086 std::unique_ptr<QSqlQuery> m_groupCountQuery; 0087 std::unique_ptr<QSqlQuery> m_groupExistsQuery; 0088 std::unique_ptr<QSqlQuery> m_groupsQuery; 0089 std::unique_ptr<QSqlQuery> m_groupsPerChannelQuery; 0090 0091 std::unique_ptr<QSqlQuery> m_addGroupChannelQuery; 0092 0093 std::unique_ptr<QSqlQuery> m_addChannelQuery; 0094 std::unique_ptr<QSqlQuery> m_channelCountQuery; 0095 std::unique_ptr<QSqlQuery> m_channelExistsQuery; 0096 std::unique_ptr<QSqlQuery> m_channelsQuery; 0097 std::unique_ptr<QSqlQuery> m_channelQuery; 0098 0099 std::unique_ptr<QSqlQuery> m_addFavoriteQuery; 0100 std::unique_ptr<QSqlQuery> m_clearFavoritesQuery; 0101 std::unique_ptr<QSqlQuery> m_favoriteCountQuery; 0102 std::unique_ptr<QSqlQuery> m_favoritesQuery; 0103 std::unique_ptr<QSqlQuery> m_isFavoriteQuery; 0104 0105 std::unique_ptr<QSqlQuery> m_addProgramCategoryQuery; 0106 std::unique_ptr<QSqlQuery> m_programCategoriesQuery; 0107 0108 std::unique_ptr<QSqlQuery> m_addProgramQuery; 0109 std::unique_ptr<QSqlQuery> m_updateProgramDescriptionQuery; 0110 std::unique_ptr<QSqlQuery> m_programExistsQuery; 0111 std::unique_ptr<QSqlQuery> m_programCountQuery; 0112 std::unique_ptr<QSqlQuery> m_programsQuery; 0113 std::unique_ptr<QSqlQuery> m_programsPerChannelQuery; 0114 };