diff --git a/src/progressmanager.cpp b/src/progressmanager.cpp index 718c4846..2f30ea75 100644 --- a/src/progressmanager.cpp +++ b/src/progressmanager.cpp @@ -1,195 +1,171 @@ /* This file is part of Akregator. Copyright (C) 2005 Frank Osterfeld This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include "progressmanager.h" #include "feed.h" #include "treenode.h" #include #include #include using namespace Akregator; -class ProgressManager::ProgressManagerPrivate -{ -public: - ProgressManagerPrivate() : feedList() - { - } - - QSharedPointer feedList; - QHash handlers; -}; - ProgressManager *ProgressManager::m_self = nullptr; ProgressManager *ProgressManager::self() { static ProgressManager sself; if (!m_self) { m_self = &sself; } return m_self; } -ProgressManager::ProgressManager() : d(new ProgressManagerPrivate) +ProgressManager::ProgressManager() { } ProgressManager::~ProgressManager() { - delete d; - d = nullptr; } void ProgressManager::setFeedList(const QSharedPointer &feedList) { - if (feedList == d->feedList) { + if (feedList == m_feedList) { return; } - if (d->feedList) { - qDeleteAll(d->handlers); - d->handlers.clear(); - d->feedList->disconnect(this); + if (m_feedList) { + qDeleteAll(m_handlers); + m_handlers.clear(); + m_feedList->disconnect(this); } - d->feedList = feedList; + m_feedList = feedList; - if (d->feedList) { + if (m_feedList) { const QVector list = feedList->feeds(); for (TreeNode *i : list) { slotNodeAdded(i); } connect(feedList.data(), &FeedList::signalNodeAdded, this, &ProgressManager::slotNodeAdded); connect(feedList.data(), &FeedList::signalNodeRemoved, this, &ProgressManager::slotNodeRemoved); } } void ProgressManager::slotNodeAdded(TreeNode *node) { Feed *const feed = qobject_cast(node); if (!feed) { return; } - if (d->handlers.contains(feed)) { + if (m_handlers.contains(feed)) { return; } - d->handlers[feed] = new ProgressItemHandler(feed); + m_handlers[feed] = new ProgressItemHandler(feed); connect(feed, &TreeNode::signalDestroyed, this, &ProgressManager::slotNodeDestroyed); } void ProgressManager::slotNodeRemoved(TreeNode *node) { Feed *feed = qobject_cast(node); if (feed) { feed->disconnect(this); - delete d->handlers[feed]; - d->handlers.remove(feed); + delete m_handlers[feed]; + m_handlers.remove(feed); } } void ProgressManager::slotNodeDestroyed(TreeNode *node) { Feed *feed = qobject_cast(node); if (feed) { - delete d->handlers[feed]; - d->handlers.remove(feed); + delete m_handlers[feed]; + m_handlers.remove(feed); } } -class ProgressItemHandler::ProgressItemHandlerPrivate +ProgressItemHandler::ProgressItemHandler(Feed *feed) { -public: - - Feed *feed = nullptr; - KPIM::ProgressItem *progressItem = nullptr; -}; - -ProgressItemHandler::ProgressItemHandler(Feed *feed) : d(new ProgressItemHandlerPrivate) -{ - d->feed = feed; - d->progressItem = nullptr; + m_feed = feed; + m_progressItem = nullptr; connect(feed, &Feed::fetchStarted, this, &ProgressItemHandler::slotFetchStarted); connect(feed, &Feed::fetched, this, &ProgressItemHandler::slotFetchCompleted); connect(feed, &Feed::fetchError, this, &ProgressItemHandler::slotFetchError); connect(feed, &Feed::fetchAborted, this, &ProgressItemHandler::slotFetchAborted); } ProgressItemHandler::~ProgressItemHandler() { - if (d->progressItem) { - d->progressItem->setComplete(); - d->progressItem = nullptr; + if (m_progressItem) { + m_progressItem->setComplete(); + m_progressItem = nullptr; } - - delete d; - d = nullptr; } void ProgressItemHandler::slotFetchStarted() { - if (d->progressItem) { - d->progressItem->setComplete(); - d->progressItem = nullptr; + if (m_progressItem) { + m_progressItem->setComplete(); + m_progressItem = nullptr; } - d->progressItem = KPIM::ProgressManager::createProgressItem(KPIM::ProgressManager::getUniqueID(), d->feed->title(), QString(), true); + m_progressItem = KPIM::ProgressManager::createProgressItem(KPIM::ProgressManager::getUniqueID(), m_feed->title(), QString(), true); - connect(d->progressItem, &KPIM::ProgressItem::progressItemCanceled, d->feed, &Feed::slotAbortFetch); + connect(m_progressItem, &KPIM::ProgressItem::progressItemCanceled, m_feed, &Feed::slotAbortFetch); } void ProgressItemHandler::slotFetchCompleted() { - if (d->progressItem) { - d->progressItem->setStatus(i18n("Fetch completed")); - d->progressItem->setComplete(); - d->progressItem = nullptr; + if (m_progressItem) { + m_progressItem->setStatus(i18n("Fetch completed")); + m_progressItem->setComplete(); + m_progressItem = nullptr; } } void ProgressItemHandler::slotFetchError() { - if (d->progressItem) { - d->progressItem->setStatus(i18n("Fetch error")); - d->progressItem->setComplete(); - d->progressItem = nullptr; + if (m_progressItem) { + m_progressItem->setStatus(i18n("Fetch error")); + m_progressItem->setComplete(); + m_progressItem = nullptr; } } void ProgressItemHandler::slotFetchAborted() { - if (d->progressItem) { - d->progressItem->setStatus(i18n("Fetch aborted")); - d->progressItem->setComplete(); - d->progressItem = nullptr; + if (m_progressItem) { + m_progressItem->setStatus(i18n("Fetch aborted")); + m_progressItem->setComplete(); + m_progressItem = nullptr; } } diff --git a/src/progressmanager.h b/src/progressmanager.h index a87ceb51..56935ebb 100644 --- a/src/progressmanager.h +++ b/src/progressmanager.h @@ -1,89 +1,92 @@ /* This file is part of Akregator. Copyright (C) 2005 Frank Osterfeld This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef AKREGATOR_PROGRESSMANAGER_H #define AKREGATOR_PROGRESSMANAGER_H #include "feedlist.h" #include #include +namespace KPIM { +class ProgressItem; +} + namespace Akregator { class Feed; class ProgressItemHandler; class TreeNode; /** This class manages the progress items for all feeds */ class ProgressManager : public QObject { Q_OBJECT public: static ProgressManager *self(); ProgressManager(); ~ProgressManager(); /** sets the feed list to be managed */ void setFeedList(const QSharedPointer &feedList); protected Q_SLOTS: void slotNodeAdded(Akregator::TreeNode *node); void slotNodeRemoved(Akregator::TreeNode *node); void slotNodeDestroyed(Akregator::TreeNode *node); private: static ProgressManager *m_self; - - class ProgressManagerPrivate; - ProgressManagerPrivate *d; + QSharedPointer m_feedList; + QHash m_handlers; }; /** this class handles the creation and deletion of progress items for one feed. This is an internal class intended to be used in ProgressManager only */ class ProgressItemHandler : public QObject { Q_OBJECT public: explicit ProgressItemHandler(Feed *feed); ~ProgressItemHandler(); public Q_SLOTS: void slotFetchStarted(); void slotFetchCompleted(); void slotFetchAborted(); void slotFetchError(); private: - class ProgressItemHandlerPrivate; - ProgressItemHandlerPrivate *d; + Feed *m_feed = nullptr; + KPIM::ProgressItem *m_progressItem = nullptr; }; } // namespace Akregator #endif // AKREGATOR_PROGRESSMANAGER_H