File indexing completed on 2024-05-12 05:12:54

0001 /*
0002    SPDX-FileCopyrightText: 2016-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "articlegrantleeobject.h"
0008 #include "feed.h"
0009 #include "grantleeutil.h"
0010 #include "utils.h"
0011 #include <QDateTime>
0012 #include <QLocale>
0013 #include <QUrl>
0014 #include <QUrlQuery>
0015 
0016 using namespace Akregator;
0017 
0018 ArticleGrantleeObject::ArticleGrantleeObject(const Article &article, ArticleFormatter::IconOption iconOption, QObject *parent)
0019     : QObject(parent)
0020     , mArticle(article)
0021     , mArticleFormatOption(iconOption)
0022 {
0023 }
0024 
0025 ArticleGrantleeObject::~ArticleGrantleeObject() = default;
0026 
0027 ArticleGrantleeObject::ArticleStatus ArticleGrantleeObject::articleStatus() const
0028 {
0029     if (mArticle.status() == ArticleStatus::Read) {
0030         return ArticleGrantleeObject::Read;
0031     } else if (mArticle.status() == ArticleStatus::Unread) {
0032         return ArticleGrantleeObject::Unread;
0033     } else {
0034         return ArticleGrantleeObject::New;
0035     }
0036 }
0037 
0038 QString ArticleGrantleeObject::strippedTitle() const
0039 {
0040     return Akregator::Utils::stripTags(mArticle.title());
0041 }
0042 
0043 QString ArticleGrantleeObject::author() const
0044 {
0045     return mArticle.authorAsHtml();
0046 }
0047 
0048 QString ArticleGrantleeObject::content() const
0049 {
0050     return mArticle.content(Article::DescriptionAsFallback);
0051 }
0052 
0053 QString ArticleGrantleeObject::articleLinkUrl() const
0054 {
0055     return mArticle.link().url();
0056 }
0057 
0058 QString ArticleGrantleeObject::articlePubDate() const
0059 {
0060     if (mArticle.pubDate().isValid()) {
0061         return QLocale().toString(mArticle.pubDate(), QLocale::ShortFormat);
0062     }
0063     return {};
0064 }
0065 
0066 QString ArticleGrantleeObject::enclosure() const
0067 {
0068     const QString enc = ArticleFormatter::formatEnclosure(*mArticle.enclosure());
0069     return enc;
0070 }
0071 
0072 QString ArticleGrantleeObject::articleCompleteStoryLink() const
0073 {
0074     QString link;
0075     if (mArticle.link().isValid() || (mArticle.guidIsPermaLink() && QUrl(mArticle.guid()).isValid())) {
0076         // in case link isn't valid, fall back to the guid permaLink.
0077         if (mArticle.link().isValid()) {
0078             link = mArticle.link().url();
0079         } else {
0080             link = mArticle.guid();
0081         }
0082     }
0083     return link;
0084 }
0085 
0086 QString ArticleGrantleeObject::imageFeed() const
0087 {
0088     QString text;
0089     if (mArticleFormatOption == ArticleFormatter::ShowIcon && mArticle.feed() && !mArticle.feed()->logoInfo().imageUrl.isEmpty()) {
0090         const Feed *feed = mArticle.feed();
0091         text += GrantleeUtil::imageFeed(feed);
0092     }
0093     return text;
0094 }
0095 
0096 QString ArticleGrantleeObject::actionToken() const
0097 {
0098     QUrlQuery query;
0099     query.addQueryItem(QStringLiteral("id"), mArticle.guid());
0100     if (mArticle.feed()) {
0101         query.addQueryItem(QStringLiteral("feed"), mArticle.feed()->xmlUrl());
0102     }
0103     return QLatin1Char('?') + query.toString(QUrl::FullyEncoded);
0104 }
0105 
0106 bool ArticleGrantleeObject::important() const
0107 {
0108     return mArticle.keep();
0109 }
0110 
0111 #include "moc_articlegrantleeobject.cpp"