File indexing completed on 2024-05-12 05:13:02

0001 /*
0002     This file is part of Akregator.
0003 
0004     SPDX-FileCopyrightText: 2005 Frank Osterfeld <osterfeld@kde.org>
0005 
0006     SPDX-License-Identifier: GPL-2.0-or-later WITH Qt-Commercial-exception-1.0
0007 */
0008 #pragma once
0009 
0010 #include <QObject>
0011 
0012 #include "akregator_export.h"
0013 
0014 #include <memory>
0015 
0016 namespace Akregator
0017 {
0018 namespace Backend
0019 {
0020 class Storage;
0021 class AKREGATOR_EXPORT FeedStorage : public QObject
0022 {
0023 public:
0024     FeedStorage(const QString &url, Storage *main);
0025     ~FeedStorage();
0026 
0027     [[nodiscard]] int unread() const;
0028     void setUnread(int unread);
0029     [[nodiscard]] int totalCount() const;
0030     [[nodiscard]] QDateTime lastFetch() const;
0031     void setLastFetch(const QDateTime &lastFetch);
0032 
0033     [[nodiscard]] QStringList articles() const;
0034 
0035     void article(const QString &guid, uint &hash, QString &title, int &status, QDateTime &pubDate) const;
0036     bool contains(const QString &guid) const;
0037     void addEntry(const QString &guid);
0038     void deleteArticle(const QString &guid);
0039     [[nodiscard]] bool guidIsHash(const QString &guid) const;
0040     void setGuidIsHash(const QString &guid, bool isHash);
0041     bool guidIsPermaLink(const QString &guid) const;
0042     void setGuidIsPermaLink(const QString &guid, bool isPermaLink);
0043     [[nodiscard]] uint hash(const QString &guid) const;
0044     void setHash(const QString &guid, uint hash);
0045     void setDeleted(const QString &guid);
0046     [[nodiscard]] QString link(const QString &guid) const;
0047     void setLink(const QString &guid, const QString &link);
0048     [[nodiscard]] QDateTime pubDate(const QString &guid) const;
0049     void setPubDate(const QString &guid, const QDateTime &pubdate);
0050     [[nodiscard]] int status(const QString &guid) const;
0051     void setStatus(const QString &guid, int status);
0052     [[nodiscard]] QString title(const QString &guid) const;
0053     void setTitle(const QString &guid, const QString &title);
0054     [[nodiscard]] QString description(const QString &guid) const;
0055     void setDescription(const QString &guid, const QString &description);
0056     [[nodiscard]] QString content(const QString &guid) const;
0057     void setContent(const QString &guid, const QString &content);
0058 
0059     void setEnclosure(const QString &guid, const QString &url, const QString &type, int length);
0060     void removeEnclosure(const QString &guid);
0061     void enclosure(const QString &guid, bool &hasEnclosure, QString &url, QString &type, int &length) const;
0062 
0063     void setAuthorName(const QString &guid, const QString &name);
0064     void setAuthorUri(const QString &guid, const QString &uri);
0065     void setAuthorEMail(const QString &guid, const QString &email);
0066 
0067     [[nodiscard]] QString authorName(const QString &guid) const;
0068     [[nodiscard]] QString authorUri(const QString &guid) const;
0069     [[nodiscard]] QString authorEMail(const QString &guid) const;
0070 
0071     void setCategories(const QString &, const QStringList &categories);
0072     [[nodiscard]] QStringList categories(const QString &guid) const;
0073 
0074     void close();
0075     void commit();
0076     void rollback();
0077 
0078 private:
0079     void markDirty();
0080     /** finds article by guid, returns -1 if not in archive **/
0081     int findArticle(const QString &guid) const;
0082     void setTotalCount(int total);
0083 
0084 private:
0085     class FeedStoragePrivate;
0086     std::unique_ptr<FeedStoragePrivate> const d;
0087 };
0088 } // namespace Backend
0089 } // namespace Akregator