• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdepim API Reference
  • KDE Home
  • Contact Us
 

akregator

  • sources
  • kde-4.12
  • kdepim
  • akregator
  • src
progressmanager.cpp
Go to the documentation of this file.
1 /*
2  This file is part of Akregator.
3 
4  Copyright (C) 2005 Frank Osterfeld <osterfeld@kde.org>
5 
6  This program is free software; you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation; either version 2 of the License, or
9  (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with this program; if not, write to the Free Software
18  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 
20  As a special exception, permission is given to link this program
21  with any edition of Qt, and distribute the resulting executable,
22  without including the source code for Qt in the source distribution.
23 */
24 
25 #include "progressmanager.h"
26 #include "feed.h"
27 #include "treenode.h"
28 
29 #include <QHash>
30 #include <QList>
31 
32 #include <klocale.h>
33 
34 #include <libkdepim/progresswidget/progressmanager.h>
35 
36 using namespace boost;
37 
38 namespace Akregator {
39 
40 class ProgressManager::ProgressManagerPrivate
41 {
42  public:
43  ProgressManagerPrivate() : feedList() {}
44  shared_ptr<FeedList> feedList;
45  QHash<Feed*, ProgressItemHandler*> handlers;
46 
47 };
48 
49 ProgressManager* ProgressManager::m_self = 0;
50 
51 ProgressManager* ProgressManager::self()
52 {
53  static ProgressManager sself;
54  if (!m_self)
55  m_self = &sself;
56  return m_self;
57 }
58 
59 ProgressManager::ProgressManager() : d(new ProgressManagerPrivate)
60 {
61 }
62 
63 ProgressManager::~ProgressManager()
64 {
65  delete d;
66  d = 0;
67 }
68 
69 void ProgressManager::setFeedList(const shared_ptr<FeedList>& feedList)
70 {
71  if ( feedList == d->feedList )
72  return;
73 
74  if ( d->feedList )
75  {
76  qDeleteAll( d->handlers );
77  d->handlers.clear();
78  d->feedList->disconnect( this );
79  }
80 
81  d->feedList = feedList;
82 
83  if ( d->feedList )
84  {
85  QVector<Feed*> list = feedList->feeds();
86 
87  foreach( TreeNode* i, list )
88  slotNodeAdded( i );
89  connect(feedList.get(), SIGNAL(signalNodeAdded(Akregator::TreeNode*)), this, SLOT(slotNodeAdded(Akregator::TreeNode*)));
90  connect(feedList.get(), SIGNAL(signalNodeRemoved(Akregator::TreeNode*)), this, SLOT(slotNodeRemoved(Akregator::TreeNode*)));
91  }
92 }
93 
94 void ProgressManager::slotNodeAdded(TreeNode* node)
95 {
96  Feed* const feed = qobject_cast<Feed*>(node);
97  if (!feed)
98  return;
99 
100  if ( d->handlers.contains( feed ) )
101  return;
102 
103  d->handlers[feed] = new ProgressItemHandler(feed);
104  connect(feed, SIGNAL(signalDestroyed(Akregator::TreeNode*)), this, SLOT(slotNodeDestroyed(Akregator::TreeNode*)));
105 }
106 
107 void ProgressManager::slotNodeRemoved(TreeNode* node)
108 {
109  Feed* feed = qobject_cast<Feed*>(node);
110  if (feed)
111  {
112  feed->disconnect( this );
113  delete d->handlers[feed];
114  d->handlers.remove(feed);
115  }
116 }
117 
118 void ProgressManager::slotNodeDestroyed(TreeNode* node)
119 {
120  Feed* feed = qobject_cast<Feed*>(node);
121  if (feed)
122  {
123  delete d->handlers[feed];
124  d->handlers.remove(feed);
125  }
126 }
127 
128 class ProgressItemHandler::ProgressItemHandlerPrivate
129 {
130  public:
131 
132  Feed* feed;
133  KPIM::ProgressItem* progressItem;
134 };
135 
136 ProgressItemHandler::ProgressItemHandler(Feed* feed) : d(new ProgressItemHandlerPrivate)
137 {
138  d->feed = feed;
139  d->progressItem = 0;
140 
141  connect(feed, SIGNAL(fetchStarted(Akregator::Feed*)), this, SLOT(slotFetchStarted()));
142  connect(feed, SIGNAL(fetched(Akregator::Feed*)), this, SLOT(slotFetchCompleted()));
143  connect(feed, SIGNAL(fetchError(Akregator::Feed*)), this, SLOT(slotFetchError()));
144  connect(feed, SIGNAL(fetchAborted(Akregator::Feed*)), this, SLOT(slotFetchAborted()));
145 }
146 
147 ProgressItemHandler::~ProgressItemHandler()
148 {
149  if (d->progressItem)
150  {
151  d->progressItem->setComplete();
152  d->progressItem = 0;
153  }
154 
155  delete d;
156  d = 0;
157 }
158 
159 void ProgressItemHandler::slotFetchStarted()
160 {
161  if (d->progressItem)
162  {
163  d->progressItem->setComplete();
164  d->progressItem = 0;
165  }
166 
167  d->progressItem = KPIM::ProgressManager::createProgressItem(KPIM::ProgressManager::getUniqueID(), d->feed->title(), QString(), true);
168 
169  connect(d->progressItem, SIGNAL(progressItemCanceled(KPIM::ProgressItem*)), d->feed, SLOT(slotAbortFetch()));
170 }
171 
172 
173 void ProgressItemHandler::slotFetchCompleted()
174 {
175  if (d->progressItem)
176  {
177  d->progressItem->setStatus(i18n("Fetch completed"));
178  d->progressItem->setComplete();
179  d->progressItem = 0;
180  }
181 }
182 
183 void ProgressItemHandler::slotFetchError()
184 {
185  if (d->progressItem)
186  {
187  d->progressItem->setStatus(i18n("Fetch error"));
188  d->progressItem->setComplete();
189  d->progressItem = 0;
190  }
191 }
192 
193 void ProgressItemHandler::slotFetchAborted()
194 {
195  if (d->progressItem)
196  {
197  d->progressItem->setStatus(i18n("Fetch aborted"));
198  d->progressItem->setComplete();
199  d->progressItem = 0;
200  }
201 }
202 
203 } // namespace Akregator
204 
205 #include "progressmanager.moc"
treenode.h
Akregator::ProgressItemHandler::~ProgressItemHandler
~ProgressItemHandler()
Definition: progressmanager.cpp:147
Akregator::ProgressManager::~ProgressManager
~ProgressManager()
Definition: progressmanager.cpp:63
Akregator::ProgressItemHandler::slotFetchCompleted
void slotFetchCompleted()
Definition: progressmanager.cpp:173
QHash
Definition: feedlist.h:40
feed.h
Akregator::ProgressManager::setFeedList
void setFeedList(const boost::shared_ptr< FeedList > &feedList)
sets the feed list to be managed
Definition: progressmanager.cpp:69
Akregator::ProgressItemHandler::slotFetchStarted
void slotFetchStarted()
Definition: progressmanager.cpp:159
progressmanager.h
Akregator::ProgressItemHandler::slotFetchError
void slotFetchError()
Definition: progressmanager.cpp:183
Akregator::ProgressItemHandler::ProgressItemHandler
ProgressItemHandler(Feed *feed)
Definition: progressmanager.cpp:136
Akregator::ProgressItemHandler::slotFetchAborted
void slotFetchAborted()
Definition: progressmanager.cpp:193
Akregator::Feed
represents a feed
Definition: feed.h:52
Akregator::ProgressItemHandler
this class handles the creation and deletion of progress items for one feed.
Definition: progressmanager.h:71
Akregator::ProgressManager::slotNodeDestroyed
void slotNodeDestroyed(Akregator::TreeNode *node)
Definition: progressmanager.cpp:118
Akregator::TreeNode
Abstract base class for all kind of elements in the feed tree, like feeds and feed groups (and search...
Definition: treenode.h:59
Akregator::ProgressManager::slotNodeAdded
void slotNodeAdded(Akregator::TreeNode *node)
Definition: progressmanager.cpp:94
Akregator::ProgressManager::slotNodeRemoved
void slotNodeRemoved(Akregator::TreeNode *node)
Definition: progressmanager.cpp:107
Akregator::ProgressManager
This class manages the progress items for all feeds.
Definition: progressmanager.h:41
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:58:14 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

akregator

Skip menu "akregator"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members

kdepim API Reference

Skip menu "kdepim API Reference"
  • akonadi_next
  • akregator
  • blogilo
  • calendarsupport
  • console
  •   kabcclient
  •   konsolekalendar
  • kaddressbook
  • kalarm
  •   lib
  • kdgantt2
  • kjots
  • kleopatra
  • kmail
  • knode
  • knotes
  • kontact
  • korgac
  • korganizer
  • ktimetracker
  • libkdepim
  • libkleo
  • libkpgp
  • mailcommon
  • messagelist
  • messageviewer

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal