using DigitalData.Core.Legacy.Client; using System; using System.Net.Http; using System.Threading; using System.Threading.Tasks; namespace WindreamHub.Legacy.Client.Models { public static class ModelExtensions { public static async Task> Simplify(this HttpResponseMessage message) { TData data = message.IsSuccessStatusCode ? await message.Json() : default; TError err = !message.IsSuccessStatusCode ? await message.Json() : default; return new SimplifiedResponse(ok: message.IsSuccessStatusCode, status: message.StatusCode, data: data, error: err); } public static async Task FetchAsync(this Task> responseAsync, Action next, Action error = null, CancellationToken cancellationToken = default) { if (cancellationToken.IsCancellationRequested) return; var res = await responseAsync; if (res.Ok) next(res.Data); else error?.Invoke(res.Error); } public static void Fetch(this Task> responseAsync, Action next, Action error = null, CancellationToken cancellationToken = default) { Task.Run(async () => { if (cancellationToken.IsCancellationRequested) return; var res = await responseAsync; if (res.Ok) next(res.Data); else error?.Invoke(res.Error); }); } public static void Fetch(this Task> responseAsync, int millisecondsDelay, Action next, Action error = null, CancellationToken cancellationToken = default) { Task.Run(async () => { while (!cancellationToken.IsCancellationRequested) { var res = await responseAsync; if (res.Ok) next(res.Data); else error?.Invoke(res.Error); await Task.Delay(millisecondsDelay, cancellationToken); } }); } public static Func CreateFetchAsync(this Task> responseAsync, Action next, Action error = null, CancellationToken cancellationToken = default) { return async () => { if (cancellationToken.IsCancellationRequested) return; var res = await responseAsync; if (res.Ok) next(res.Data); else error?.Invoke(res.Error); }; } public static Action CreateFetch(this Task> responseAsync, Action next, Action error = null, CancellationToken cancellationToken = default) { return () => Task.Run(async () => { if (cancellationToken.IsCancellationRequested) return; var res = await responseAsync; if (res.Ok) next(res.Data); else error?.Invoke(res.Error); }); } } }