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 };