File indexing completed on 2024-05-12 16:21:29

0001 /**
0002  * SPDX-FileCopyrightText: 2020 Tobias Fella <tobias.fella@kde.org>
0003  * SPDX-FileCopyrightText: 2021-2023 Bart De Vries <bart@mogwai.be>
0004  *
0005  * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0006  */
0007 
0008 #pragma once
0009 
0010 #include <QDateTime>
0011 #include <QDebug>
0012 #include <QObject>
0013 #include <QString>
0014 #include <QStringList>
0015 
0016 #include "author.h"
0017 #include "enclosure.h"
0018 #include "feed.h"
0019 
0020 class Entry : public QObject
0021 {
0022     Q_OBJECT
0023 
0024     Q_PROPERTY(Feed *feed READ feed CONSTANT)
0025     Q_PROPERTY(QString id READ id CONSTANT)
0026     Q_PROPERTY(QString title READ title NOTIFY titleChanged)
0027     Q_PROPERTY(QString content READ content NOTIFY contentChanged)
0028     Q_PROPERTY(QVector<Author *> authors READ authors NOTIFY authorsChanged)
0029     Q_PROPERTY(QDateTime created READ created NOTIFY createdChanged)
0030     Q_PROPERTY(QDateTime updated READ updated NOTIFY updatedChanged)
0031     Q_PROPERTY(QString link READ link NOTIFY linkChanged)
0032     Q_PROPERTY(QString baseUrl READ baseUrl NOTIFY baseUrlChanged)
0033     Q_PROPERTY(bool read READ read WRITE setRead NOTIFY readChanged)
0034     Q_PROPERTY(bool new READ getNew WRITE setNew NOTIFY newChanged)
0035     Q_PROPERTY(bool favorite READ favorite WRITE setFavorite NOTIFY favoriteChanged)
0036     Q_PROPERTY(Enclosure *enclosure READ enclosure CONSTANT)
0037     Q_PROPERTY(bool hasEnclosure READ hasEnclosure NOTIFY hasEnclosureChanged)
0038     Q_PROPERTY(QString image READ image NOTIFY imageChanged)
0039     Q_PROPERTY(QString cachedImage READ cachedImage NOTIFY cachedImageChanged)
0040     Q_PROPERTY(bool queueStatus READ queueStatus WRITE setQueueStatus NOTIFY queueStatusChanged)
0041 
0042 public:
0043     Entry(Feed *feed, const QString &id);
0044     ~Entry();
0045 
0046     QString id() const;
0047     QString title() const;
0048     QString content() const;
0049     QVector<Author *> authors() const;
0050     QDateTime created() const;
0051     QDateTime updated() const;
0052     QString link() const;
0053     bool read() const;
0054     bool getNew() const;
0055     bool favorite() const;
0056     Enclosure *enclosure() const;
0057     bool hasEnclosure() const;
0058     QString image() const;
0059     QString cachedImage() const;
0060     bool queueStatus() const;
0061     Feed *feed() const;
0062 
0063     QString baseUrl() const;
0064 
0065     void setRead(bool read);
0066     void setNew(bool state);
0067     void setFavorite(bool favorite);
0068     void setQueueStatus(bool status);
0069 
0070     Q_INVOKABLE QString adjustedContent(int width, int fontSize);
0071 
0072     void setNewInternal(bool state);
0073     void setReadInternal(bool read);
0074     void setFavoriteInternal(bool favorite);
0075     void setQueueStatusInternal(bool state);
0076 
0077 Q_SIGNALS:
0078     void titleChanged(const QString &title);
0079     void contentChanged(const QString &content);
0080     void authorsChanged(const QVector<Author *> &authors);
0081     void createdChanged(const QDateTime &created);
0082     void updatedChanged(const QDateTime &updated);
0083     void linkChanged(const QString &link);
0084     void baseUrlChanged(const QString &baseUrl);
0085     void readChanged(bool read);
0086     void newChanged(bool state);
0087     void favoriteChanged(bool favorite);
0088     void hasEnclosureChanged(bool hasEnclosure);
0089     void imageChanged(const QString &url);
0090     void cachedImageChanged(const QString &imagePath);
0091     void queueStatusChanged(bool queueStatus);
0092 
0093 private:
0094     void updateFromDb(bool emitSignals = true);
0095     void updateAuthors(bool emitSignals = true);
0096     void setTitle(const QString &title, bool emitSignal = true);
0097     void setContent(const QString &content, bool emitSignal = true);
0098     void setCreated(const QDateTime &created, bool emitSignal = true);
0099     void setUpdated(const QDateTime &updated, bool emitSignal = true);
0100     void setLink(const QString &link, bool emitSignal = true);
0101     void setHasEnclosure(bool hasEnclosure, bool emitSignal = true);
0102     void setImage(const QString &url, bool emitSignal = true);
0103 
0104     Feed *m_feed;
0105     QString m_id;
0106     QString m_title;
0107     QString m_content;
0108     QVector<Author *> m_authors;
0109     QDateTime m_created;
0110     QDateTime m_updated;
0111     QString m_link;
0112     bool m_read;
0113     bool m_new;
0114     bool m_favorite;
0115     Enclosure *m_enclosure = nullptr;
0116     QString m_image;
0117     bool m_hasenclosure = false;
0118 };