• 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
transfergroupscheduler.cpp
Go to the documentation of this file.
1 /* This file is part of the KDE project
2 
3  Copyright (C) 2008 Lukas Appelhans <l.appelhans@gmx.de>
4 
5  This program is free software; you can redistribute it and/or
6  modify it under the terms of the GNU General Public
7  License as published by the Free Software Foundation; either
8  version 2 of the License, or (at your option) any later version.
9 */
10 #include "transfergroupscheduler.h"
11 
12 #include "kget.h"
13 #include "transfergrouphandler.h"
14 #include "settings.h"
15 
16 TransferGroupScheduler::TransferGroupScheduler(QObject *parent)
17  : Scheduler(parent),
18  m_downloadLimit(0),
19  m_uploadLimit(0)
20 {
21 }
22 
23 TransferGroupScheduler::~TransferGroupScheduler()
24 {
25 }
26 
27 void TransferGroupScheduler::calculateSpeedLimits()
28 {
29  calculateDownloadLimit();
30  calculateUploadLimit();
31 }
32 
33 void TransferGroupScheduler::calculateDownloadLimit()
34 {
35  int n = KGet::allTransferGroups().count();
36  int pool = 0;//We create a pool where we have some KiB/s to go to other groups...
37  QList<TransferGroupHandler*> transfergroupsNeedSpeed;
38  foreach (TransferGroupHandler *handler, KGet::allTransferGroups())
39  {
40  if (!Settings::speedLimit())
41  handler->setDownloadLimit(handler->downloadLimit(Transfer::VisibleSpeedLimit), Transfer::InvisibleSpeedLimit);
42  else if (handler->transfers().count() < 1)
43  {
44  pool = pool + downloadLimit() / n;
45  }
46  else if (downloadLimit() == 0 && handler->downloadLimit(Transfer::VisibleSpeedLimit) != 0)
47  continue;
48  else if (downloadLimit() == 0 && handler->downloadLimit(Transfer::VisibleSpeedLimit) == 0)
49  handler->setDownloadLimit(0, Transfer::InvisibleSpeedLimit);
50  else if (handler->downloadLimit(Transfer::VisibleSpeedLimit) < downloadLimit() / n
51  && handler->downloadLimit(Transfer::VisibleSpeedLimit) != 0)
52  /*If the handler's visible download limit is under the new one,
53  we move the KiB/s which are different to the pool*/
54  pool = pool + (downloadLimit() / n - handler->downloadLimit(Transfer::VisibleSpeedLimit));
55  else if (handler->downloadSpeed() + 10 < downloadLimit() / n)
56  {
57  /*When the downloadSpeed of the handler is under the new downloadLimit + 10 then we
58  set the downloadLimit to the downloadSpeed + 10*/
59  pool = pool + downloadLimit() / n - handler->downloadSpeed() + 10;
60  handler->setDownloadLimit(handler->downloadSpeed() + 10, Transfer::InvisibleSpeedLimit);
61  }
62  else
63  {
64  handler->setDownloadLimit(downloadLimit() / n, Transfer::InvisibleSpeedLimit);
65  transfergroupsNeedSpeed.append(handler);
66  }
67  }
68  foreach (TransferGroupHandler *handler, transfergroupsNeedSpeed)
69  {
70  handler->setDownloadLimit(downloadLimit() / n + pool / transfergroupsNeedSpeed.count(), Transfer::InvisibleSpeedLimit);
71  }
72 }
73 
74 void TransferGroupScheduler::calculateUploadLimit()
75 {
76  int n = KGet::allTransferGroups().count();
77  kDebug(5001) << n;
78  int pool = 0;//We create a pool where we have some KiB/s to go to other groups...
79  QList<TransferGroupHandler*> transfergroupsNeedSpeed;
80  foreach (TransferGroupHandler *handler, KGet::allTransferGroups())
81  {
82  if (!Settings::speedLimit())
83  handler->setUploadLimit(handler->uploadLimit(Transfer::VisibleSpeedLimit), Transfer::InvisibleSpeedLimit);
84  else if (handler->transfers().count() < 1)
85  pool = pool + uploadLimit() / n;
86  else if (uploadLimit() == 0 && handler->uploadLimit(Transfer::VisibleSpeedLimit) != 0)
87  continue;
88  else if (uploadLimit() == 0 && handler->uploadLimit(Transfer::VisibleSpeedLimit) == 0)
89  handler->setUploadLimit(0, Transfer::InvisibleSpeedLimit);
90  else if (handler->uploadLimit(Transfer::VisibleSpeedLimit) < uploadLimit() / n && handler->uploadLimit(Transfer::VisibleSpeedLimit) != 0)
91  /*If the handler's visible download limit is under the new one,
92  we move the KiB/s which are different to the pool*/
93  pool = pool + (uploadLimit() / n - handler->uploadLimit(Transfer::VisibleSpeedLimit));
94  else if (handler->uploadSpeed() + 10 < uploadLimit() / n)
95  {
96  /*When the downloadSpeed of the handler is under the new downloadLimit + 10 then we
97  set the downloadLimit to the downloadSpeed + 10*/
98  pool = pool + uploadLimit() / n - handler->uploadSpeed() + 10;
99  handler->setUploadLimit(handler->uploadSpeed() + 10, Transfer::InvisibleSpeedLimit);
100  }
101  else
102  {
103  handler->setUploadLimit(uploadLimit() / n, Transfer::InvisibleSpeedLimit);
104  transfergroupsNeedSpeed.append(handler);
105  }
106  }
107  foreach (TransferGroupHandler *handler, transfergroupsNeedSpeed)
108  {
109  handler->setUploadLimit(uploadLimit() / n + pool / transfergroupsNeedSpeed.count(), Transfer::InvisibleSpeedLimit);
110  }
111 }
112 
113 void TransferGroupScheduler::setDownloadLimit(int limit)
114 {
115  m_downloadLimit = limit;
116  calculateDownloadLimit();
117 }
118 
119 void TransferGroupScheduler::setUploadLimit(int limit)
120 {
121  m_uploadLimit = limit;
122  calculateUploadLimit();
123 }
124 
125 #include "transfergroupscheduler.moc"
TransferGroupScheduler::setUploadLimit
void setUploadLimit(int limit)
Sets a upload limit to the scheduler.
Definition: transfergroupscheduler.cpp:119
Scheduler
Scheduler class: what handle all the jobs in kget.
Definition: scheduler.h:32
TransferGroupHandler::uploadSpeed
int uploadSpeed() const
Definition: transfergrouphandler.h:118
TransferGroupHandler
Definition: transfergrouphandler.h:30
Transfer::VisibleSpeedLimit
Definition: transfer.h:90
TransferGroupHandler::setUploadLimit
void setUploadLimit(int ulLimit, Transfer::SpeedLimit limit)
Set a Upload-Limit for the group.
Definition: transfergrouphandler.h:177
TransferGroupHandler::downloadLimit
int downloadLimit(Transfer::SpeedLimit limit)
Definition: transfergrouphandler.h:170
Settings::speedLimit
static bool speedLimit()
Get SpeedLimit.
Definition: settings.h:620
TransferGroupHandler::uploadLimit
int uploadLimit(Transfer::SpeedLimit limit)
Definition: transfergrouphandler.h:182
QObject
TransferGroupScheduler::setDownloadLimit
void setDownloadLimit(int limit)
Sets a download limit to the scheduler.
Definition: transfergroupscheduler.cpp:113
TransferGroupScheduler::calculateUploadLimit
void calculateUploadLimit()
Calculates the DownloadLimits.
Definition: transfergroupscheduler.cpp:74
KGet::allTransferGroups
static QList< TransferGroupHandler * > allTransferGroups()
Gets all transfer-groups.
Definition: kget.cpp:668
transfergroupscheduler.h
TransferGroupScheduler::calculateDownloadLimit
void calculateDownloadLimit()
Calculates the DownloadLimits.
Definition: transfergroupscheduler.cpp:33
transfergrouphandler.h
TransferGroupHandler::setDownloadLimit
void setDownloadLimit(int dlLimit, Transfer::SpeedLimit limit)
Set a Download-Limit for the group.
Definition: transfergrouphandler.h:165
Transfer::InvisibleSpeedLimit
Definition: transfer.h:91
TransferGroupScheduler::downloadLimit
int downloadLimit() const
Definition: transfergroupscheduler.h:54
TransferGroupHandler::downloadSpeed
int downloadSpeed() const
Definition: transfergrouphandler.h:112
TransferGroupScheduler::~TransferGroupScheduler
~TransferGroupScheduler()
Definition: transfergroupscheduler.cpp:23
TransferGroupScheduler::TransferGroupScheduler
TransferGroupScheduler(QObject *parent=0)
Definition: transfergroupscheduler.cpp:16
TransferGroupScheduler::uploadLimit
int uploadLimit() const
Definition: transfergroupscheduler.h:65
settings.h
TransferGroupHandler::transfers
const QList< TransferHandler * > transfers()
Definition: transfergrouphandler.cpp:134
kget.h
TransferGroupScheduler::calculateSpeedLimits
void calculateSpeedLimits()
Calculates the whole SpeedLimits.
Definition: transfergroupscheduler.cpp:27
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