* - tweak: change loading handle logic * - tweak: beautify loading thinks * - fix: speed thinks while downloading
99 lines
2.4 KiB
C#
99 lines
2.4 KiB
C#
namespace Nebula.Shared.Models;
|
|
|
|
public interface ILoadingHandler : IDisposable
|
|
{
|
|
public void SetJobsCount(long count);
|
|
public long GetJobsCount();
|
|
|
|
public void SetResolvedJobsCount(long count);
|
|
public long GetResolvedJobsCount();
|
|
public void SetLoadingMessage(string message);
|
|
|
|
public void AppendJob(long count = 1)
|
|
{
|
|
SetJobsCount(GetJobsCount() + count);
|
|
}
|
|
|
|
public void AppendResolvedJob(long count = 1)
|
|
{
|
|
SetResolvedJobsCount(GetResolvedJobsCount() + count);
|
|
}
|
|
|
|
public void Clear()
|
|
{
|
|
SetResolvedJobsCount(0);
|
|
SetJobsCount(0);
|
|
}
|
|
|
|
public QueryJob GetQueryJob()
|
|
{
|
|
return new QueryJob(this);
|
|
}
|
|
}
|
|
|
|
public interface ILoadingFormater
|
|
{
|
|
public string Format(ILoadingHandler loadingHandler);
|
|
}
|
|
|
|
public interface ILoadingHandlerFactory: IDisposable
|
|
{
|
|
public ILoadingHandler CreateLoadingContext(ILoadingFormater? loadingFormater = null);
|
|
}
|
|
|
|
public interface IConnectionSpeedHandler
|
|
{
|
|
public void PasteSpeed(int speed);
|
|
}
|
|
|
|
public sealed class DefaultLoadingFormater : ILoadingFormater
|
|
{
|
|
public static DefaultLoadingFormater Instance = new DefaultLoadingFormater();
|
|
public string Format(ILoadingHandler loadingHandler)
|
|
{
|
|
return loadingHandler.GetResolvedJobsCount() + "/" + loadingHandler.GetJobsCount();
|
|
}
|
|
}
|
|
|
|
public sealed class FileLoadingFormater : ILoadingFormater
|
|
{
|
|
public string Format(ILoadingHandler loadingHandler)
|
|
{
|
|
return FormatBytes(loadingHandler.GetResolvedJobsCount()) + " / " + FormatBytes(loadingHandler.GetJobsCount());
|
|
}
|
|
|
|
public static string FormatBytes(long bytes)
|
|
{
|
|
const long KB = 1024;
|
|
const long MB = KB * 1024;
|
|
const long GB = MB * 1024;
|
|
const long TB = GB * 1024;
|
|
|
|
if (bytes >= TB)
|
|
return $"{bytes / (double)TB:0.##} TB";
|
|
if (bytes >= GB)
|
|
return $"{bytes / (double)GB:0.##} GB";
|
|
if (bytes >= MB)
|
|
return $"{bytes / (double)MB:0.##} MB";
|
|
if (bytes >= KB)
|
|
return $"{bytes / (double)KB:0.##} KB";
|
|
|
|
return $"{bytes} B";
|
|
}
|
|
}
|
|
|
|
public sealed class QueryJob : IDisposable
|
|
{
|
|
private readonly ILoadingHandler _handler;
|
|
|
|
public QueryJob(ILoadingHandler handler)
|
|
{
|
|
_handler = handler;
|
|
handler.AppendJob();
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
_handler.AppendResolvedJob();
|
|
}
|
|
} |