Example #1
0
        protected override async Task DownloadAsync(
            IList <ImageEntry> entries,
            Action <double>?onProgress          = null,
            CancellationToken cancellationToken = default)
        {
            string filename = $"{Illust.Id}.gif";
            var    details  = await Illust.GetAnimatedDetailAsync(cancellationToken).ConfigureAwait(false);

            var(relative, absolute) = WithDirectory(filename);
            using var fs            = File.Create(absolute, 8192, FileOptions.Asynchronous);

            using var mms = new MemoryStream();

            using (var response = await details.GetZipAsync(cancellationToken).ConfigureAwait(false))
                await ReadAsync(response, mms, onProgress, cancellationToken).ConfigureAwait(false);

            mms.Seek(0, SeekOrigin.Begin);

            using (var zipArchive = new ZipArchive(mms))
                await GifHelper.ComposeGifAsync(zipArchive,
                                                details.Frames.Select(x => (x.File, x.Delay)),
                                                fs,
                                                cancellationToken)
                .ConfigureAwait(false);

            await fs.FlushAsync(cancellationToken).ConfigureAwait(false);

            entries.Add(new(ImageType.Animated, relative)
            {
                PostOrderId = 0
            });