1 /* This file is part of the KDE project
3 Copyright (C) 2007 Manolo Valdes <nolis71cu@gmail.com>
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; version 2
11 #include "speedlimiter.h"
15 #include <QtCore/QTimer>
16 #include <QtCore/QList>
19 KSpeedLimiter::KSpeedLimiter(unsigned long speed
)
24 KSpeedLimiter::~KSpeedLimiter()
28 void KSpeedLimiter::setSpeedLimit(unsigned long speed
)
33 unsigned long KSpeedLimiter::speedLimit()
38 void KSpeedLimiter::addJob(KJob
*job
)
42 m_JobSpeedLimiters
<< new KJobSpeedLimiter(job
, m_speedLimit
);
43 kDebug(5001) << "Limiting job:" << job
<< " speed to: " << m_speedLimit
<< endl
;
47 KJobSpeedLimiter::KJobSpeedLimiter(KJob
*job
, unsigned long speedLimit
)
49 m_bytes
= job
->processedAmount(KJob::Bytes
);
51 m_speedLimit
= speedLimit
;
55 connect( m_job
, SIGNAL(result(KJob
*)), SLOT(slotResult( KJob
*)));
57 QTimer::singleShot(50, this, SLOT(slotOnTimer()));
60 KJobSpeedLimiter::~KJobSpeedLimiter()
64 void KJobSpeedLimiter::slotOnTimer()
66 qulonglong bytes
= m_job
->processedAmount(KJob::Bytes
);
67 int expected
= 1000.0 * (bytes
- m_bytes
) / m_speedLimit
;
69 int elapsed
= m_time
.restart();
71 QString status
= isSuspended() ? QString("suspended") : QString("running");
72 kDebug(5001) << "Status: " << status
<< " expected time: " << expected
<< " elapsed time: " << elapsed
<< endl
;
74 if (expected
> elapsed
)
76 m_OnTime
= (elapsed
* 4500)/expected
;
77 m_OffTime
= 4500 - m_OnTime
;
79 kDebug(5001) << "sleeping for: " << m_OffTime
<< " msegs." << endl
;
80 QTimer::singleShot(m_OffTime
, this, SLOT(slotOffTimer()));
84 kDebug(5001) << "speed below limit, checking in 500 msegs " << endl
;
86 QTimer::singleShot(500, this, SLOT(slotOnTimer()));
90 void KJobSpeedLimiter::slotOffTimer()
94 kDebug(5001) << "resuming for: " << m_OnTime
<< " msegs." << endl
;
95 QTimer::singleShot(m_OnTime
, this, SLOT(slotOnTimer()));
98 void KJobSpeedLimiter::slotResult(KJob
*job
)
105 bool KJobSpeedLimiter::isSuspended()
107 m_isSuspended
= m_job
->isSuspended();
108 return m_isSuspended
;
111 void KJobSpeedLimiter::suspend()
117 void KJobSpeedLimiter::resume()