Remove crappy blazor class and add throttle to SSE
This commit is contained in:
parent
15cf9a6606
commit
53b6f8b27f
|
@ -16,6 +16,7 @@ using Tesses.WebServer.Swagme;
|
|||
|
||||
namespace Tesses.Extensions
|
||||
{
|
||||
|
||||
public static class Extensions
|
||||
{
|
||||
public static string Substring(this string value,string str)
|
||||
|
@ -31,8 +32,37 @@ namespace Tesses.Extensions
|
|||
|
||||
namespace Tesses.YouTubeDownloader.Server
|
||||
{
|
||||
|
||||
using Tesses.YouTubeDownloader;
|
||||
|
||||
internal class EventSender
|
||||
{
|
||||
DateTime lastScan = DateTime.Now;
|
||||
TimeSpan ts;
|
||||
public EventSender(TimeSpan interval)
|
||||
{
|
||||
this.ts = interval;
|
||||
}
|
||||
public bool CanScan
|
||||
{
|
||||
get{
|
||||
return DateTime.Now - lastScan >= ts;
|
||||
}
|
||||
}
|
||||
|
||||
public void SendEvent(Action action)
|
||||
{
|
||||
if(CanScan)
|
||||
{
|
||||
lastScan = DateTime.Now;
|
||||
action();
|
||||
}
|
||||
}
|
||||
public void Sent()
|
||||
{
|
||||
lastScan = DateTime.Now;
|
||||
}
|
||||
}
|
||||
|
||||
internal static class B64
|
||||
{
|
||||
|
@ -988,6 +1018,13 @@ internal static class B64
|
|||
}
|
||||
public async Task Event(ServerContext ctx)
|
||||
{
|
||||
double interval=0;
|
||||
string intervalStr;
|
||||
if(ctx.QueryParams.TryGetFirst("interval",out intervalStr))
|
||||
{
|
||||
if(!double.TryParse(intervalStr,out interval)) interval=0;
|
||||
}
|
||||
|
||||
IStorage storage=Downloader as IStorage;
|
||||
if(storage != null){
|
||||
|
||||
|
@ -1010,7 +1047,10 @@ internal static class B64
|
|||
p.Video=e.VideoInfo;
|
||||
evts.SendEvent(p);
|
||||
};
|
||||
|
||||
EventSender s = new EventSender(TimeSpan.FromSeconds(interval));
|
||||
storage.VideoProgress += (sender,e)=>{
|
||||
bool wasFirst= first;
|
||||
ProgressItem p=new ProgressItem();
|
||||
p.StartEvent=false;
|
||||
p.StopEvent=false;
|
||||
|
@ -1022,7 +1062,13 @@ internal static class B64
|
|||
p.Video=e.VideoInfo;
|
||||
|
||||
first=false;
|
||||
evts.SendEvent(p);
|
||||
if(wasFirst || s.CanScan)
|
||||
{
|
||||
s.Sent();
|
||||
evts.SendEvent(p);
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
storage.VideoFinished +=(sender,e)=>{
|
||||
ProgressItem p=new ProgressItem();
|
||||
|
|
|
@ -16,11 +16,11 @@
|
|||
<PackageId>Tesses.YouTubeDownloader.Server</PackageId>
|
||||
<Author>Mike Nolan</Author>
|
||||
<Company>Tesses</Company>
|
||||
<Version>2.0.1</Version>
|
||||
<AssemblyVersion>2.0.1</AssemblyVersion>
|
||||
<FileVersion>2.0.1</FileVersion>
|
||||
<Version>2.0.1.1</Version>
|
||||
<AssemblyVersion>2.0.1.1</AssemblyVersion>
|
||||
<FileVersion>2.0.1.1</FileVersion>
|
||||
<Description>Adds WebServer to TYTD</Description>
|
||||
<PackageLicenseExpression>LGPL-3.0-only</PackageLicenseExpression>
|
||||
<PackageLicenseExpression>GPL-3.0-only</PackageLicenseExpression>
|
||||
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
|
||||
<PackageTags>YoutubeExplode, YouTube, YouTubeDownloader</PackageTags>
|
||||
<RepositoryUrl>https://gitlab.tesses.cf/tesses50/tytd</RepositoryUrl>
|
||||
|
|
|
@ -1,13 +0,0 @@
|
|||
using System;
|
||||
|
||||
namespace Tesses.YouTubeDownloader
|
||||
{
|
||||
public interface IBlazorContext
|
||||
{
|
||||
public void StartEvents(Action<string> evt);
|
||||
|
||||
public void StopEvents();
|
||||
|
||||
|
||||
}
|
||||
}
|
|
@ -211,6 +211,7 @@ internal class SegmentedHttpStream : Stream
|
|||
return v.Major >= 2;
|
||||
}
|
||||
string url;
|
||||
public string Url {get{return url;}}
|
||||
public TYTDClient(string url)
|
||||
{
|
||||
client=new HttpClient();
|
||||
|
@ -413,7 +414,7 @@ internal class SegmentedHttpStream : Stream
|
|||
}
|
||||
return false;
|
||||
}
|
||||
private async Task<IReadOnlyList<(SavedVideo Video, Resolution Resolution)>> GetQueueListAsync()
|
||||
public async Task<IReadOnlyList<(SavedVideo Video, Resolution Resolution)>> GetQueueListAsync()
|
||||
{
|
||||
|
||||
try{
|
||||
|
@ -426,7 +427,7 @@ internal class SegmentedHttpStream : Stream
|
|||
|
||||
return new List<(SavedVideo video,Resolution resolution)>();
|
||||
}
|
||||
private async Task<SavedVideoProgress> GetProgressAsync()
|
||||
public async Task<SavedVideoProgress> GetProgressAsync()
|
||||
{
|
||||
|
||||
try{
|
||||
|
@ -552,8 +553,7 @@ internal class SegmentedHttpStream : Stream
|
|||
_error.Invoke(this,new TYTDErrorEventArgs("jNQXAC9IVRw",ex));
|
||||
}
|
||||
}
|
||||
public IBlazorContext BlazorContext {get;set;} = null;
|
||||
public void ResetEvents()
|
||||
public void ResetEvents()
|
||||
{
|
||||
if(src != null) {
|
||||
src.Cancel();
|
||||
|
@ -668,7 +668,7 @@ internal class SegmentedHttpStream : Stream
|
|||
}
|
||||
if(item.BellEvent)
|
||||
{
|
||||
|
||||
bell=true;
|
||||
}
|
||||
progress.Length = item.Length;
|
||||
progress.ProgressRaw=item.Percent;
|
||||
|
@ -713,17 +713,9 @@ internal class SegmentedHttpStream : Stream
|
|||
}
|
||||
private void _startEventStream()
|
||||
{
|
||||
if(BlazorContext != null)
|
||||
{
|
||||
BlazorContext.StartEvents((evt)=>{
|
||||
sse_Event(this,new SSEEvent(evt));
|
||||
});
|
||||
src=new CancellationTokenSource();
|
||||
hadBeenListeningToEvents=true;
|
||||
src.Token.Register(BlazorContext.StopEvents);
|
||||
}else{
|
||||
|
||||
Task.Run(_startEventStreamAsync).Wait(0);
|
||||
}
|
||||
|
||||
}
|
||||
public ExtraData GetExtraDataOnce()
|
||||
{
|
||||
|
|
|
@ -7,9 +7,9 @@
|
|||
<PackageId>Tesses.YouTubeDownloader</PackageId>
|
||||
<Author>Mike Nolan</Author>
|
||||
<Company>Tesses</Company>
|
||||
<Version>2.0.2.2</Version>
|
||||
<AssemblyVersion>2.0.2.2</AssemblyVersion>
|
||||
<FileVersion>2.0.2.2</FileVersion>
|
||||
<Version>2.0.2.3</Version>
|
||||
<AssemblyVersion>2.0.2.3</AssemblyVersion>
|
||||
<FileVersion>2.0.2.3</FileVersion>
|
||||
<Description>A YouTube Downloader</Description>
|
||||
<PackageLicenseExpression>GPL-3.0-only</PackageLicenseExpression>
|
||||
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
|
||||
|
|
Loading…
Reference in New Issue