public async Task <bool> CreateVideoAsync(IProgress <VideoProgress> progress, CancellationToken ct) { return(await Task.Run(async() => { var video = await TwitchDownloader.DownloadVideoInfoAsync(ID, progress, ct); if (video?.ID == null) { return false; } var bits = await TwitchDownloader.DownloadBitsAsync(video.StreamerID, progress, ct); var badges = await TwitchDownloader.DownloadBadgesAsync(video.StreamerID, progress, ct); //var bttv = await BTTV.CreateAsync(video.Streamer, progress, ct); //var ffz = await FFZ.CreateAsync(video.Streamer, progress, ct); var messages = await TwitchDownloader.GetChatAsync(ID, video.Duration, progress, ct); if (ct.IsCancellationRequested) { return false; } //using (var chat_handler = new ChatHandler(this, bttv, ffz, badges, bits)) using (var chat_handler = new ChatHandler(this, badges, bits)) { int current = 0; try { var drawables = messages?.Select(m => { progress?.Report(new VideoProgress(++current, messages.Count, VideoProgress.VideoStatus.Drawing)); return chat_handler.MakeDrawableMessage(m); }).ToList(); var max = (int)(FPS *video.Duration); var path = string.Format("{0}{1}-{2}.mp4", OutputDirectory, video.Streamer, video.ID); var result = await WriteVideoFrames(path, drawables, 0, max, progress, ct); progress?.Report(new VideoProgress(1, 1, VideoProgress.VideoStatus.CleaningUp)); drawables.ForEach(d => d.Lines.ForEach(l => l.Drawables.ForEach(dr => dr.Dispose()))); return result; } catch (Exception e) { using (StreamWriter w = File.AppendText("error.txt")) { w.WriteLine($"{DateTime.Now.ToLongTimeString()} : {e.ToString()}"); } return false; }; } })); }
public static Stack <DrawableMessage> MakeSampleChat(ChatVideo cv) { using (var ch = new ChatHandler(cv, null, FFZ.SampleFFZ, Badges.SampleBadges, null)) { var lines = new Stack <DrawableMessage>(); MakeSampleMessages().ForEach(m => lines.Push(ch.MakeDrawableMessage(m))); return(lines); } }
public static void DrawPreview(ViewModel vm, Bitmap bmp) { using (var chat = new ChatVideo(vm)) { var messages = ChatHandler.MakeSampleChat(chat); chat.DrawFrame(bmp, messages); foreach (var msg in messages) { msg.Lines.ForEach(m => m.Drawables.ForEach(d => d.Dispose())); } } }