namespace ErsatzTV.Core.Interfaces.Streaming; /// /// Fetches a remote (http/https) image for the graphics engine, under a bounded timeout and a /// bounded response size. /// public interface IRemoteImageFetcher { /// /// Fetches fully into memory. /// /// /// A seekable, fully-buffered stream positioned at zero. The caller owns and must dispose it. /// /// /// Throws rather than returning a failure value: every call site already wraps element /// initialization in a catch that disables the element, so a throw degrades to "no watermark" /// rather than a killed stream. An implementation's own deadline should surface as /// and caller cancellation as /// — though note the current call sites catch both /// alike, so today the distinction only sharpens the log message. /// Task Fetch(Uri uri, CancellationToken cancellationToken); }