OneDrive Backup
OneDrive Backup
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace onedrive_backup.Graph
|
||||
{
|
||||
public class TransferSpeedHelper
|
||||
{
|
||||
private Stopwatch _stopWatch = new Stopwatch();
|
||||
private double _prevProgress = 0;
|
||||
private double _prevTimeStamp = 0;
|
||||
private double _speedCap;
|
||||
|
||||
public TransferSpeedHelper(double? speedCapKBSec)
|
||||
{
|
||||
_speedCap = speedCapKBSec != null ? speedCapKBSec.Value * 1024 : double.MaxValue;
|
||||
}
|
||||
public void Start()
|
||||
{
|
||||
Reset();
|
||||
_stopWatch.Start();
|
||||
}
|
||||
|
||||
public void Reset()
|
||||
{
|
||||
_stopWatch.Reset();
|
||||
_prevTimeStamp = 0;
|
||||
_prevProgress = 0;
|
||||
}
|
||||
|
||||
public (double delay, double ratePerSecond) MarkAndCalcThrottle(double progress)
|
||||
{
|
||||
double bytesTransfered = progress - _prevProgress;
|
||||
var ellapsedMS = _stopWatch.ElapsedMilliseconds;
|
||||
double timefromPrev = ellapsedMS - _prevTimeStamp;
|
||||
double ratePerSecond = 1000 * bytesTransfered / timefromPrev;
|
||||
|
||||
_prevTimeStamp = ellapsedMS;
|
||||
_prevProgress = progress;
|
||||
|
||||
if (ratePerSecond > _speedCap)
|
||||
{
|
||||
var targetTimeForSpeedMS = (bytesTransfered / _speedCap) * 1000;
|
||||
var remainingTimeToWait = targetTimeForSpeedMS - _prevTimeStamp;
|
||||
return (remainingTimeToWait, ratePerSecond);
|
||||
}
|
||||
|
||||
return (0, ratePerSecond);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user