public void Handle(UploadingCanceledEventArgs args)
        {
            var message = args.Item.Owner as TLMessage;

            if (message != null)
            {
                var photo = message.Media as TLMessageMediaPhoto;
                if (photo != null)
                {
                    message.Media.UploadingProgress = 0.0;
                    message.Status = MessageStatus.Failed;
                }

                var document = message.Media as TLMessageMediaDocument;
                if (document != null)
                {
                    message.Media.UploadingProgress = 0.0;
                    message.Status = MessageStatus.Failed;
                }

                var video = message.Media as TLMessageMediaVideo;
                if (video != null)
                {
                    message.Media.UploadingProgress = 0.0;
                    message.Status = MessageStatus.Failed;
                }

                UploadTypingManager.CancelTyping();
            }
        }
        public void Handle(UploadProgressChangedEventArgs args)
        {
            var message = args.Item.Owner as TLMessage;

            if (message != null)
            {
                var photo = message.Media as TLMessageMediaPhoto;
                if (photo != null)
                {
                    var delta = args.Progress - photo.UploadingProgress;

                    if (delta > 0.0)
                    {
                        photo.UploadingProgress = args.Progress;
                    }

                    UploadTypingManager.SetTyping(UploadTypingKind.Photo);

                    return;
                }

                var document = message.Media as TLMessageMediaDocument;
                if (document != null)
                {
                    var delta = args.Progress - document.UploadingProgress;

                    if (delta > 0.0)
                    {
                        document.UploadingProgress = args.Progress;
                    }

                    UploadTypingManager.SetTyping(UploadTypingKind.Document);

                    return;
                }

                var video = message.Media as TLMessageMediaVideo;
                if (video != null)
                {
                    var delta = args.Progress - video.UploadingProgress;

                    if (delta > 0.0)
                    {
                        video.UploadingProgress = args.Progress;
                    }

                    UploadTypingManager.SetTyping(UploadTypingKind.Video);

                    return;
                }
            }
        }