Exemplo n.º 1
0
        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;
                    };
                }
            }));
        }
Exemplo n.º 2
0
 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);
     }
 }
Exemplo n.º 3
0
 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()));
         }
     }
 }