File indexing completed on 2024-04-28 05:11:03

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 
0009 #pragma once
0010 
0011 #include "feedlist.h"
0012 #include <QHash>
0013 #include <QObject>
0014 #include <QSharedPointer>
0015 
0016 namespace KPIM
0017 {
0018 class ProgressItem;
0019 }
0020 
0021 namespace Akregator
0022 {
0023 class Feed;
0024 class ProgressItemHandler;
0025 class TreeNode;
0026 
0027 /** This class manages the progress items for all feeds */
0028 
0029 class ProgressManager : public QObject
0030 {
0031     Q_OBJECT
0032 public:
0033     static ProgressManager *self();
0034 
0035     ProgressManager();
0036     ~ProgressManager() override;
0037 
0038     /** sets the feed list to be managed */
0039     void setFeedList(const QSharedPointer<FeedList> &feedList);
0040 
0041 protected Q_SLOTS:
0042 
0043     void slotNodeAdded(Akregator::TreeNode *node);
0044     void slotNodeRemoved(Akregator::TreeNode *node);
0045     void slotNodeDestroyed(Akregator::TreeNode *node);
0046 
0047 private:
0048     static ProgressManager *m_self;
0049     QSharedPointer<FeedList> m_feedList;
0050     QHash<Feed *, ProgressItemHandler *> m_handlers;
0051 };
0052 
0053 /** this class handles the creation and deletion of progress items for one feed.
0054     This is an internal class intended to be used in ProgressManager only */
0055 
0056 class ProgressItemHandler : public QObject
0057 {
0058     Q_OBJECT
0059 public:
0060     explicit ProgressItemHandler(Feed *feed);
0061     ~ProgressItemHandler() override;
0062 
0063 public Q_SLOTS:
0064 
0065     void slotFetchStarted();
0066     void slotFetchCompleted();
0067     void slotFetchAborted();
0068     void slotFetchError();
0069 
0070 private:
0071     Feed *m_feed = nullptr;
0072     KPIM::ProgressItem *m_progressItem = nullptr;
0073 };
0074 } // namespace Akregator