File indexing completed on 2025-09-14 04:51:25
0001 /** 0002 * SPDX-FileCopyrightText: 2020 Tobias Fella <tobias.fella@kde.org> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #pragma once 0008 0009 #include <QObject> 0010 #include <QQmlEngine> 0011 #include <QSqlQuery> 0012 0013 class Database : public QObject 0014 { 0015 Q_OBJECT 0016 QML_ELEMENT 0017 QML_SINGLETON 0018 0019 public: 0020 static Database &instance() 0021 { 0022 static Database _instance; 0023 return _instance; 0024 } 0025 0026 static Database *create(QQmlEngine *, QJSEngine *) 0027 { 0028 return &instance(); 0029 } 0030 bool execute(QSqlQuery &query); 0031 bool execute(const QString &query); 0032 Q_INVOKABLE void addFeed(const QString &url, const QString &groupName = QString(), const bool markEntriesRead = false); 0033 Q_INVOKABLE void importFeeds(const QString &path); 0034 Q_INVOKABLE void exportFeeds(const QString &path); 0035 Q_INVOKABLE void addFeedGroup(const QString &name, const QString &description, const int isDefault = 0); 0036 Q_INVOKABLE void removeFeedGroup(const QString &name); 0037 Q_INVOKABLE void setDefaultGroup(const QString &name); 0038 Q_INVOKABLE void editFeed(const QString &url, const QString &displayName, const QString &groupName); 0039 Q_INVOKABLE void setRead(const QString &entryId, bool read); 0040 0041 Q_SIGNALS: 0042 void feedAdded(const QString &url); 0043 void feedDetailsUpdated(const QString &url, const QString &displayName, const QString &description); 0044 void feedGroupsUpdated(); 0045 void feedGroupRemoved(const QString &groupName); 0046 void entryReadChanged(const QString &entryId, bool read); 0047 0048 private: 0049 bool feedGroupExists(const QString &name); 0050 void clearFeedGroup(const QString &name); 0051 QString defaultGroup(); 0052 0053 Database(); 0054 int version(); 0055 bool migrateTo(const int targetVersion); 0056 bool migrateTo1(); 0057 bool migrateTo2(); 0058 void cleanup(); 0059 bool feedExists(const QString &url); 0060 };