File indexing completed on 2024-05-12 16:23:38

0001 /**
0002  * SPDX-FileCopyrightText: 2020 Tobias Fella <fella@posteo.de>
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 <QSqlQuery>
0010 
0011 class Database : public QObject
0012 {
0013     Q_OBJECT
0014 
0015 public:
0016     static Database &instance()
0017     {
0018         static Database _instance;
0019         return _instance;
0020     }
0021     bool execute(QSqlQuery &query);
0022     bool execute(const QString &query);
0023     Q_INVOKABLE void addFeed(const QString &url, const QString &groupName = QString(), const bool markEntriesRead = false);
0024     Q_INVOKABLE void importFeeds(const QString &path);
0025     Q_INVOKABLE void exportFeeds(const QString &path);
0026     Q_INVOKABLE void addFeedGroup(const QString &name, const QString &description, const int isDefault = 0);
0027     Q_INVOKABLE void removeFeedGroup(const QString &name);
0028     Q_INVOKABLE void setDefaultGroup(const QString &name);
0029     Q_INVOKABLE void editFeed(const QString &url, const QString &displayName, const QString &groupName);
0030     Q_INVOKABLE void setRead(const QString &entryId, bool read);
0031 
0032 Q_SIGNALS:
0033     void feedAdded(const QString &url);
0034     void feedDetailsUpdated(const QString &url, const QString &displayName, const QString &description);
0035     void feedGroupsUpdated();
0036     void feedGroupRemoved(const QString &groupName);
0037     void entryReadChanged(const QString &entryId, bool read);
0038 
0039 private:
0040     bool feedGroupExists(const QString &name);
0041     void clearFeedGroup(const QString &name);
0042     QString defaultGroup();
0043 
0044     Database();
0045     int version();
0046     bool migrateTo(const int targetVersion);
0047     bool migrateTo1();
0048     bool migrateTo2();
0049     void cleanup();
0050     bool feedExists(const QString &url);
0051 };