public async void AttachVideoFromFile(StorageFile file) { bool notify = AttachmentUploads.Count == 0; var videoAttachment = new VideoAttachmentUpload(); var fileStream = await file.OpenReadAsync(); var stream = fileStream.CloneStream(); fileStream.Dispose(); videoAttachment.Stream = stream.AsStreamForRead(); videoAttachment.FileName = file.Name; AttachmentUploads.Add(videoAttachment); UploadVideoAttachment(videoAttachment); if (notify) { RaisePropertyChanged("AttachmentUploads"); } }
private async void UploadVideoAttachment(VideoAttachmentUpload attachment) { attachment.IsUploading = true; _uploadsEvent.Reset(); try { var uploadInfos = await ServiceLocator.Vkontakte.Video.Save(isPrivate : true); attachment.Stream.Seek(0, SeekOrigin.Begin); if (attachment.CancellationToken.IsCancellationRequested) { return; } var uploadResponse = await ServiceLocator.Vkontakte.Video.Upload(uploadInfos.UploadUrl, attachment.FileName, attachment.Stream); if (attachment.CancellationToken.IsCancellationRequested) { return; } if (uploadResponse != null) { var videos = await ServiceLocator.Vkontakte.Video.Get(new List <string>() { ViewModelLocator.Main.CurrentUser?.Id + "_" + uploadResponse.VideoId }); if (attachment.CancellationToken.IsCancellationRequested) { return; } if (videos != null && !videos.Items.IsNullOrEmpty()) { attachment.VkVideo = videos.Items.First(); } attachment.IsUploaded = true; } } catch (VkAccessDeniedException) { Messenger.Default.Send(new LoginStateChangedMessage() { IsLoggedIn = false }); Navigator.Main.Navigate(typeof(LoginView), clearHistory: true); } catch (Exception ex) { Logger.Error(ex, "Unable to upload video attachment"); } finally { attachment.IsUploading = false; UpdatePendingAttachments(); } }