48 lines
2.1 KiB
C#
48 lines
2.1 KiB
C#
using System;
|
|
using Dinah.Core.Net.Http;
|
|
|
|
namespace FileLiberator
|
|
{
|
|
public abstract class Streamable
|
|
{
|
|
public event EventHandler<string> StreamingBegin;
|
|
public event EventHandler<DownloadProgress> StreamingProgressChanged;
|
|
public event EventHandler<TimeSpan> StreamingTimeRemaining;
|
|
public event EventHandler<string> StreamingCompleted;
|
|
/// <summary>Fired when a file is successfully saved to disk</summary>
|
|
public event EventHandler<(string id, string path)> FileCreated;
|
|
|
|
protected void OnStreamingBegin(string filePath)
|
|
{
|
|
Serilog.Log.Logger.Debug("Event fired {@DebugInfo}", new { Name = nameof(StreamingBegin), Message = filePath });
|
|
StreamingBegin?.Invoke(this, filePath);
|
|
}
|
|
|
|
protected void OnStreamingProgressChanged(DownloadProgress progress) => OnStreamingProgressChanged(null, progress);
|
|
protected void OnStreamingProgressChanged(object _, DownloadProgress progress)
|
|
{
|
|
StreamingProgressChanged?.Invoke(this, progress);
|
|
}
|
|
|
|
protected void OnStreamingTimeRemaining(TimeSpan timeRemaining) => OnStreamingTimeRemaining(null, timeRemaining);
|
|
protected void OnStreamingTimeRemaining(object _, TimeSpan timeRemaining)
|
|
{
|
|
StreamingTimeRemaining?.Invoke(this, timeRemaining);
|
|
}
|
|
|
|
protected void OnStreamingCompleted(string filePath)
|
|
{
|
|
Serilog.Log.Logger.Debug("Event fired {@DebugInfo}", new { Name = nameof(StreamingCompleted), Message = filePath });
|
|
StreamingCompleted?.Invoke(this, filePath);
|
|
}
|
|
|
|
protected void OnFileCreated(DataLayer.LibraryBook libraryBook, string path) => OnFileCreated(libraryBook.Book.AudibleProductId, path);
|
|
protected void OnFileCreated(string id, string path)
|
|
{
|
|
Serilog.Log.Logger.Information("File created {@DebugInfo}", new { Name = nameof(FileCreated), id, path });
|
|
LibationFileManager.FilePathCache.Insert(id, path);
|
|
FileCreated?.Invoke(this, (id, path));
|
|
}
|
|
}
|
|
}
|