File indexing completed on 2024-05-05 05:13:00

0001 /*
0002     This file is part of Akregator.
0003 
0004     SPDX-FileCopyrightText: 2008 Frank Osterfeld <osterfeld@kde.org>
0005 
0006     SPDX-License-Identifier: GPL-2.0-or-later WITH Qt-Commercial-exception-1.0
0007 */
0008 
0009 #include "editsubscriptioncommand.h"
0010 
0011 #include "feed.h"
0012 #include "feedlist.h"
0013 #include "feedpropertiesdialog.h"
0014 #include "folder.h"
0015 #include "subscriptionlistview.h"
0016 #include "treenodevisitor.h"
0017 
0018 #include <QPointer>
0019 #include <QTimer>
0020 
0021 using namespace Akregator;
0022 
0023 namespace
0024 {
0025 class EditNodePropertiesVisitor : public TreeNodeVisitor
0026 {
0027 public:
0028     EditNodePropertiesVisitor(SubscriptionListView *subcriptionListView, QWidget *parent);
0029 
0030     bool visitFolder(Folder *node) override
0031     {
0032         m_subscriptionListView->startNodeRenaming(node);
0033         return true;
0034     }
0035 
0036     bool visitFeed(Akregator::Feed *node) override
0037     {
0038         QPointer<FeedPropertiesDialog> dlg = new FeedPropertiesDialog(m_widget);
0039         dlg->setFeed(node);
0040         dlg->exec();
0041         delete dlg;
0042         return true;
0043     }
0044 
0045 private:
0046     SubscriptionListView *m_subscriptionListView = nullptr;
0047     QWidget *m_widget = nullptr;
0048 };
0049 }
0050 
0051 EditNodePropertiesVisitor::EditNodePropertiesVisitor(SubscriptionListView *subscriptionListView, QWidget *parent)
0052     : m_subscriptionListView(subscriptionListView)
0053     , m_widget(parent)
0054 {
0055     Q_ASSERT(m_subscriptionListView);
0056     Q_ASSERT(m_widget);
0057 }
0058 
0059 class Akregator::EditSubscriptionCommandPrivate
0060 {
0061     EditSubscriptionCommand *const q;
0062 
0063 public:
0064     explicit EditSubscriptionCommandPrivate(EditSubscriptionCommand *qq);
0065     ~EditSubscriptionCommandPrivate();
0066 
0067     void startEdit();
0068     void jobFinished();
0069 
0070     QSharedPointer<FeedList> m_list;
0071     uint m_subscriptionId;
0072     SubscriptionListView *m_subscriptionListView = nullptr;
0073 };
0074 
0075 EditSubscriptionCommandPrivate::EditSubscriptionCommandPrivate(EditSubscriptionCommand *qq)
0076     : q(qq)
0077     , m_list()
0078     , m_subscriptionId(0)
0079     , m_subscriptionListView(nullptr)
0080 {
0081 }
0082 
0083 EditSubscriptionCommandPrivate::~EditSubscriptionCommandPrivate() = default;
0084 
0085 EditSubscriptionCommand::EditSubscriptionCommand(QObject *parent)
0086     : Command(parent)
0087     , d(new EditSubscriptionCommandPrivate(this))
0088 {
0089 }
0090 
0091 EditSubscriptionCommand::~EditSubscriptionCommand() = default;
0092 
0093 void EditSubscriptionCommand::setSubscription(const QSharedPointer<FeedList> &feedList, uint subId)
0094 {
0095     d->m_list = feedList;
0096     d->m_subscriptionId = subId;
0097 }
0098 
0099 uint EditSubscriptionCommand::subscriptionId() const
0100 {
0101     return d->m_subscriptionId;
0102 }
0103 
0104 QSharedPointer<FeedList> EditSubscriptionCommand::feedList() const
0105 {
0106     return d->m_list;
0107 }
0108 
0109 SubscriptionListView *EditSubscriptionCommand::subscriptionListView() const
0110 {
0111     return d->m_subscriptionListView;
0112 }
0113 
0114 void EditSubscriptionCommand::setSubscriptionListView(SubscriptionListView *view)
0115 {
0116     d->m_subscriptionListView = view;
0117 }
0118 
0119 void EditSubscriptionCommand::doStart()
0120 {
0121     QTimer::singleShot(0, this, [this]() {
0122         d->startEdit();
0123     });
0124 }
0125 
0126 void EditSubscriptionCommandPrivate::startEdit()
0127 {
0128     TreeNode *const node = m_list->findByID(m_subscriptionId);
0129     if (!node) {
0130         q->done();
0131         return;
0132     }
0133 
0134     EditNodePropertiesVisitor visitor(m_subscriptionListView, q->parentWidget());
0135     visitor.visit(node);
0136     q->done();
0137 }
0138 
0139 void EditSubscriptionCommand::doAbort()
0140 {
0141 }
0142 
0143 #include "moc_editsubscriptioncommand.cpp"