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

kget

  • sources
  • kde-4.12
  • kdenetwork
  • kget
  • core
kuiserverjobs.cpp
Go to the documentation of this file.
1 /* This file is part of the KDE project
2 
3  Copyright (C) 2007 by Javier Goday <jgoday@gmail.com>
4  Copyright (C) 2009 by Dario Massarin <nekkar@libero.it>
5  Copyright (C) 2010 by Matthias Fuchs <mat69@gmx.net>
6 
7  This program is free software; you can redistribute it and/or
8  modify it under the terms of the GNU General Public
9  License as published by the Free Software Foundation; either
10  version 2 of the License, or (at your option) any later version.
11 */
12 
13 #include "kuiserverjobs.h"
14 
15 #include "kgetglobaljob.h"
16 #include "kgetkjobadapter.h"
17 #include "transferhandler.h"
18 #include "settings.h"
19 #include "kget.h"
20 
21 #include <kuiserverjobtracker.h>
22 #include <kdebug.h>
23 
24 KUiServerJobs::KUiServerJobs(QObject *parent)
25  : QObject(parent), m_globalJob(0)
26 {
27 }
28 
29 KUiServerJobs::~KUiServerJobs()
30 {
31  while(m_registeredJobs.size()) {
32  unregisterJob(m_registeredJobs.begin().value(), m_registeredJobs.begin().key());
33  }
34 
35  delete m_globalJob;
36 }
37 
38 void KUiServerJobs::settingsChanged()
39 {
40  QList<TransferHandler *> transfers = KGet::allTransfers();
41 
42  foreach(TransferHandler * transfer, transfers) {
43  if(shouldBeShown(transfer))
44  registerJob(transfer->kJobAdapter(), transfer);
45  else
46  unregisterJob(transfer->kJobAdapter(), transfer);
47  }
48 
49  // GlobalJob is associated to a virtual transfer pointer of value == 0
50  if(shouldBeShown(0))
51  registerJob(globalJob(), 0);
52  else
53  unregisterJob(globalJob(), 0);
54 }
55 
56 void KUiServerJobs::slotTransfersAdded(QList<TransferHandler*> transfers)
57 {
58  kDebug(5001);
59 
60  foreach (TransferHandler *transfer, transfers) {
61  if(shouldBeShown(transfer))
62  registerJob(transfer->kJobAdapter(), transfer);
63 
64  if(shouldBeShown(0)) {
65  globalJob()->update();
66  registerJob(globalJob(), 0);
67  }
68  else
69  unregisterJob(globalJob(), 0);
70  }
71 }
72 
73 void KUiServerJobs::slotTransfersAboutToBeRemoved(const QList<TransferHandler*> &transfers)
74 {
75  kDebug(5001);
76 
77  m_invalidTransfers << transfers;
78  foreach (TransferHandler *transfer, transfers) {
79  unregisterJob(transfer->kJobAdapter(), transfer);
80 
81  if (shouldBeShown(0)) {
82  globalJob()->update();
83  registerJob(globalJob(), 0);
84  } else {
85  unregisterJob(globalJob(), 0);
86  }
87  }
88 }
89 
90 void KUiServerJobs::slotTransfersChanged(QMap<TransferHandler *, Transfer::ChangesFlags> transfers)
91 {
92  kDebug(5001);
93 
94  if(!Settings::enableKUIServerIntegration())
95  return;
96 
97  QMapIterator<TransferHandler *, Transfer::ChangesFlags> i(transfers);
98  while (i.hasNext()) {
99  i.next();
100 // if(!m_invalidTransfers.contains(i.key()))
101  {
102  TransferHandler * transfer = i.key();
103  if (shouldBeShown(transfer)) {
104  registerJob(transfer->kJobAdapter(), transfer);
105  } else {
106  unregisterJob(transfer->kJobAdapter(), transfer);
107  }
108  }
109  }
110 
111  if(shouldBeShown(0)) {
112  globalJob()->update();
113  registerJob(globalJob(), 0);
114  }
115  else
116  unregisterJob(globalJob(), 0);
117 }
118 
119 void KUiServerJobs::registerJob(KGetKJobAdapter *job, TransferHandler *transfer)
120 {
121  if (m_registeredJobs.contains(transfer) || !job) {
122  return;
123  }
124  connect(job, SIGNAL(requestStop(KJob*,TransferHandler*)), this, SLOT(slotRequestStop(KJob*,TransferHandler*)));
125  connect(job, SIGNAL(requestSuspend(KJob*,TransferHandler*)), this, SLOT(slotRequestSuspend(KJob*,TransferHandler*)));
126  connect(job, SIGNAL(requestResume(KJob*,TransferHandler*)), this, SLOT(slotRequestResume(KJob*,TransferHandler*)));
127 
128  KJob *j = job;
129  registerJob(j, transfer);
130 }
131 
132 void KUiServerJobs::registerJob(KJob * job, TransferHandler * transfer)
133 {
134  if(m_registeredJobs.contains(transfer) || !job)
135  return;
136 
137  KIO::getJobTracker()->registerJob(job);
138  m_registeredJobs[transfer] = job;
139 }
140 
141 bool KUiServerJobs::unregisterJob(KJob * job, TransferHandler * transfer)
142 {
143  if (!m_registeredJobs.contains(transfer) || !job)
144  return false;
145 
146  //Transfer should only be suspended, thus still show the job tracker
147  if (m_suspendRequested.contains(transfer)) {
148  m_suspendRequested.removeAll(transfer);
149  return false;
150  }
151 
152  //unregister the job if it was a single adaptor
153  if (job != m_globalJob) {
154  disconnect(job);
155  }
156  KIO::getJobTracker()->unregisterJob(m_registeredJobs[transfer]);
157  m_registeredJobs.remove(transfer);
158 
159  return true;
160 }
161 
162 void KUiServerJobs::slotRequestStop(KJob *job, TransferHandler *transfer)
163 {
164  if (unregisterJob(job, transfer)) {
165  if (transfer) {
166  transfer->stop();
167  } else {
168  foreach (TransferHandler *t, KGet::allTransfers()) {
169  t->stop();
170  }
171  }
172  }
173 }
174 
175 bool KUiServerJobs::shouldBeShown(TransferHandler * transfer)
176 {
177  if(!Settings::enableKUIServerIntegration())
178  return false;
179 
180  if(Settings::exportGlobalJob() && (transfer == 0) && existRunningTransfers())
181  return true;
182 
183  if(!Settings::exportGlobalJob() && (transfer) && (transfer->status() == Job::Running))
184  return true;
185 
186  return false;
187 }
188 
189 bool KUiServerJobs::existRunningTransfers()
190 {
191  foreach(TransferHandler * transfer, KGet::allTransfers()) {
192  //if added to m_invalidTransfers it means that the job is about to be removed
193  if ((transfer->status() == Job::Running) && !m_invalidTransfers.contains(transfer)) {
194  return true;
195  }
196  }
197 
198  return false;
199 }
200 
201 KGetGlobalJob * KUiServerJobs::globalJob()
202 {
203  if (!m_globalJob) {
204  m_globalJob = new KGetGlobalJob();
205  connect(m_globalJob, SIGNAL(requestStop(KJob*,TransferHandler*)), this, SLOT(slotRequestStop(KJob*,TransferHandler*)));
206  }
207  return m_globalJob;
208 }
209 
210 void KUiServerJobs::slotRequestSuspend(KJob *job, TransferHandler *transfer)
211 {
212  Q_UNUSED(job)
213  if (transfer) {
214  m_suspendRequested << transfer;
215  transfer->stop();
216  }
217 }
218 
219 void KUiServerJobs::slotRequestResume(KJob *job, TransferHandler *transfer)
220 {
221  Q_UNUSED(job)
222  if (transfer) {
223  transfer->start();
224  }
225 }
TransferHandler::status
Job::Status status() const
Definition: transferhandler.h:64
TransferHandler
Class TransferHandler:
Definition: transferhandler.h:48
Settings::enableKUIServerIntegration
static bool enableKUIServerIntegration()
Get EnableKUIServerIntegration.
Definition: settings.h:449
KUiServerJobs::slotTransfersChanged
void slotTransfersChanged(QMap< TransferHandler *, Transfer::ChangesFlags > transfers)
Definition: kuiserverjobs.cpp:90
KGetGlobalJob::update
void update()
Definition: kgetglobaljob.cpp:31
kgetkjobadapter.h
QObject
kuiserverjobs.h
KGet::allTransfers
static QList< TransferHandler * > allTransfers()
Gets all transfers.
Definition: kget.cpp:657
KUiServerJobs::slotTransfersAboutToBeRemoved
void slotTransfersAboutToBeRemoved(const QList< TransferHandler * > &transfer)
Definition: kuiserverjobs.cpp:73
Job::Running
Definition: job.h:43
Settings::exportGlobalJob
static bool exportGlobalJob()
Get ExportGlobalJob.
Definition: settings.h:487
KUiServerJobs::slotTransfersAdded
void slotTransfersAdded(QList< TransferHandler * > transfers)
Definition: kuiserverjobs.cpp:56
transferhandler.h
KGetKJobAdapter
Allows kget to register all transfers in kuiserver as kjobs.
Definition: kgetkjobadapter.h:23
settings.h
kget.h
TransferHandler::kJobAdapter
KGetKJobAdapter * kJobAdapter()
Definition: transferhandler.h:267
kgetglobaljob.h
KUiServerJobs::settingsChanged
void settingsChanged()
Definition: kuiserverjobs.cpp:38
KUiServerJobs::KUiServerJobs
KUiServerJobs(QObject *parent=0)
Definition: kuiserverjobs.cpp:24
KUiServerJobs::~KUiServerJobs
~KUiServerJobs()
Definition: kuiserverjobs.cpp:29
KGetGlobalJob
Definition: kgetglobaljob.h:18
KJob
TransferHandler::stop
virtual void stop()
Definition: transferhandler.cpp:64
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:53:17 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kget

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

kdenetwork API Reference

Skip menu "kdenetwork API Reference"
  • kget
  • kopete
  •   kopete
  •   libkopete
  • krdc
  • krfb

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