Example #1
0
        public async Task Upload_Empty_Photo(KnownChains apiName)
        {
            var request  = new UploadMediaModel(Users[apiName], new MemoryStream(), ".jpg");
            var response = await Api[apiName].UploadMedia(request, CancellationToken.None);

            Assert.IsTrue(response.Error.Message.StartsWith("The submitted file is empty."));
        }
Example #2
0
        public async Task <OperationResult <MediaModel> > UploadMedia(UploadMediaModel model, CancellationToken ct)
        {
            if (!EnableRead)
            {
                return(null);
            }

            var results = Validate(model);

            if (results.Any())
            {
                return(new OperationResult <MediaModel>(new ValidationError(results)));
            }

            var trxResp = await _ditchClient.GetVerifyTransaction(model, ct);

            if (!trxResp.IsSuccess)
            {
                return(new OperationResult <MediaModel>(trxResp.Error));
            }

            model.VerifyTransaction = JsonConverter.Serialize(trxResp.Result);

            var endpoint = $"{BaseUrl}/{GatewayVersion.V1P1}/media/upload";

            return(await Gateway.UploadMedia(endpoint, model, ct));
        }
Example #3
0
        public async Task <OperationResult <MediaModel> > UploadMedia(string url, UploadMediaModel model,
                                                                      CancellationToken token)
        {
            var fTitle = Guid.NewGuid().ToString();

            var file = new StreamContent(model.File);

            file.Headers.ContentType = MediaTypeHeaderValue.Parse(model.ContentType);
            var multiContent = new MultipartFormDataContent
            {
                { new StringContent(model.VerifyTransaction), "trx" },
                { file, "file", fTitle },
                { new StringContent(model.GenerateThumbnail.ToString()), "generate_thumbnail" }
            };

            var response = await _client.PostAsync(url, multiContent, token);

            var result = await CreateResult <MediaModel>(response, token);

            if (result.IsSuccess && result.Result == null)
            {
                result.Error = new AppError(LocalizationKeys.ServeUnexpectedError);
            }

            return(result);
        }
Example #4
0
        private async Task <OperationResult <MediaModel> > UploadPhoto(string path)
        {
            System.IO.Stream stream          = null;
            FileInputStream  fileInputStream = null;

            try
            {
                var photo = new Java.IO.File(path);
                fileInputStream = new FileInputStream(photo);
                stream          = new StreamConverter(fileInputStream, null);

                var request      = new UploadMediaModel(AppSettings.User.UserInfo, stream, System.IO.Path.GetExtension(path));
                var serverResult = await Presenter.TryUploadMedia(request);

                return(serverResult);
            }
            catch (Exception ex)
            {
                AppSettings.Reporter.SendCrash(ex);
                return(new OperationResult <MediaModel>(new AppError(LocalizationKeys.PhotoProcessingError)));
            }
            finally
            {
                fileInputStream?.Close(); // ??? change order?
                stream?.Flush();
                fileInputStream?.Dispose();
                stream?.Dispose();
            }
        }
Example #5
0
        public async Task <OperationResult <MediaModel> > UploadMedia(UploadMediaModel model, CancellationToken ct)
        {
            if (!EnableRead)
            {
                return(null);
            }

            var results = Validate(model);

            if (results.Any())
            {
                return(new OperationResult <MediaModel>(new ValidationError(results)));
            }

            var trxResp = await _ditchClient.GetVerifyTransaction(model, ct);

            if (!trxResp.IsSuccess)
            {
                return(new OperationResult <MediaModel>(trxResp.Error));
            }

            model.VerifyTransaction = trxResp.Result;

            return(await Gateway.UploadMedia(GatewayVersion.V1P1, "media/upload", model, ct));
        }
Example #6
0
        private async Task <OperationResult <MediaModel> > UploadPhoto()
        {
            Stream stream = null;

            try
            {
                var compression    = 1f;
                var maxCompression = 0.1f;
                int maxFileSize    = _photoSize * 1024;

                var byteArray = ImageAsset.AsJPEG(compression);

                while (byteArray.Count() > maxFileSize && compression > maxCompression)
                {
                    compression -= 0.1f;
                    byteArray    = ImageAsset.AsJPEG(compression);
                }

                stream = byteArray.AsStream();
                var request = new UploadMediaModel(BasePresenter.User.UserInfo, stream, ImageExtension);
                return(await _presenter.TryUploadMedia(request));
            }
            catch (Exception ex)
            {
                AppSettings.Reporter.SendCrash(ex);
                return(new OperationResult <MediaModel>(new AppError(LocalizationKeys.PhotoProcessingError)));
            }
            finally
            {
                stream?.Flush();
                stream?.Dispose();
            }
        }
Example #7
0
        public async Task <OperationResult <MediaModel> > GetLastPost(HttpManager client, DebugAsset debugAsset, CancellationToken token)
        {
            //https://www.instagram.com/developer/authentication/ < how to get access_token (OAuth skiped. hardcoded key used instead... time time..)v
            var fullUrl = GetRecentMediaUrl + debugAsset.InsagramAccessToken;

            if (!string.IsNullOrEmpty(debugAsset.LastLoadedMediaId))
            {
                fullUrl += "&MIN_ID=" + debugAsset.LastLoadedMediaId;
            }
            var responce = await client.GetRequest <InstagramResult>(fullUrl, token);

            if (responce.IsError)
            {
                throw new NotImplementedException(responce.Error.Msg);
            }

            var media = responce.Result.data.FirstOrDefault();

            if (debugAsset.LastLoadedMediaId != null && debugAsset.LastLoadedMediaId.Equals(media.id))
            {
                return(null);
            }

            debugAsset.LastLoadedMediaId = media.id;

            //save image to IPFS
            var model = new UploadMediaModel
            {
                VerifyTransaction = debugAsset.AuthorizationTransactionJson,
                Url = media.images.standard_resolution.url
            };

            return(await client.UploadMedia("https://steepshot.org/api/v1_1/media/upload", model, token));
        }
Example #8
0
        private async Task <OperationResult <UUIDModel> > UploadMedia(GalleryMediaModel model)
        {
            model.UploadState = UploadState.UploadStart;
            System.IO.Stream stream          = null;
            FileInputStream  fileInputStream = null;

            try
            {
                var photo = new Java.IO.File(model.TempPath);
                fileInputStream = new FileInputStream(photo);
                stream          = new StreamConverter(fileInputStream, null);

                var request      = new UploadMediaModel(AppSettings.User.UserInfo, stream, System.IO.Path.GetExtension(model.TempPath));
                var serverResult = await Presenter.TryUploadMedia(request);

                model.UploadState = UploadState.UploadEnd;
                return(serverResult);
            }
            catch (Exception ex)
            {
                model.UploadState = UploadState.UploadError;
                await AppSettings.Logger.Error(ex);

                return(new OperationResult <UUIDModel>(new InternalException(LocalizationKeys.PhotoUploadError, ex)));
            }
            finally
            {
                fileInputStream?.Close(); // ??? change order?
                stream?.Flush();
                fileInputStream?.Dispose();
                stream?.Dispose();
            }
        }
Example #9
0
        public async Task <OperationResult <MediaModel> > UploadMedia(string url, UploadMediaModel model, CancellationToken token)
        {
            var fTitle = Guid.NewGuid().ToString();

            MemoryStream stream;

            using (WebClient client = new WebClient())
            {
                var bytes = client.DownloadData(new Uri(model.Url));
                stream = new MemoryStream(bytes);
            }

            var file = new StreamContent(stream);

            file.Headers.ContentType = MediaTypeHeaderValue.Parse(model.ContentType);
            var multiContent = new MultipartFormDataContent
            {
                { new StringContent(model.VerifyTransaction), "trx" },
                { file, "file", fTitle },
                { new StringContent(model.GenerateThumbnail.ToString()), "generate_thumbnail" }
            };

            var response = await _client.PostAsync(url, multiContent, token);

            var result = await CreateResult <MediaModel>(response, token);

            if (result.IsError && result.Result == null)
            {
                result.Error = new ErrorBase("Can`t upload image!");
            }

            return(result);
        }
Example #10
0
        public override async Task <OperationResult <string> > GetVerifyTransaction(UploadMediaModel model, CancellationToken ct)
        {
            if (!TryReconnectChain(ct))
            {
                return(new OperationResult <string>(new ApplicationError(Localization.Errors.EnableConnectToBlockchain)));
            }

            var keys = ToKeyArr(model.PostingKey);

            if (keys == null)
            {
                return(new OperationResult <string>(new ApplicationError(Localization.Errors.WrongPrivatePostingKey)));
            }

            return(await Task.Run(() =>
            {
                var op = new FollowOperation(model.Login, "steepshot", DitchFollowType.Blog, model.Login);
                var properties = new DynamicGlobalPropertyObject
                {
                    HeadBlockId = Hex.ToString(_operationManager.ChainId),
                    Time = DateTime.Now,
                    HeadBlockNumber = 0
                };
                var tr = _operationManager.CreateTransaction(properties, keys, ct, op);
                return new OperationResult <string>()
                {
                    Result = JsonConverter.Serialize(tr)
                };
            }, ct));
        }
        public async Task <OperationResult <UUIDModel> > UploadMedia(string url, UploadMediaModel model, CancellationToken token)
        {
            var fTitle = Guid.NewGuid().ToString();

            var file = new StreamContent(model.File);

            file.Headers.ContentType = MediaTypeHeaderValue.Parse(model.ContentType);
            var multiContent = new MultipartFormDataContent
            {
                { file, "file", fTitle },
                { new StringContent(model.Thumbnails.ToString()), "thumbnails" },
                { new StringContent(model.AWS.ToString()), "aws" },
                { new StringContent(model.IPFS.ToString()), "ipfs" }
            };

            var response = await PostAsync(url, multiContent, token);

            var result = await CreateResult <UUIDModel>(response, token);

            if (result.IsSuccess && result.Result == null)
            {
                result.Exception = new ValidationException(LocalizationKeys.ServeUnexpectedError);
            }

            return(result);
        }
Example #12
0
        public async Task UploadMediaTest(KnownChains apiName)
        {
            var user = Users[apiName];

            // 1) Create new post
            var path             = GetTestImagePath();
            var stream           = new FileStream(GetTestImagePath(), FileMode.Open);
            var uploadImageModel = new UploadMediaModel(user, stream, Path.GetExtension(path));
            var servResp         = await Api[apiName].UploadMedia(uploadImageModel, CancellationToken.None);

            AssertResult(servResp);
        }
        private async Task <OperationResult <MediaModel> > UploadPhoto(UIImage photo, NSDictionary metadata)
        {
            Stream stream = null;

            try
            {
                var compression    = 1f;
                var maxCompression = 0.1f;
                int maxFileSize    = _photoSize * 1024;

                var byteArray = photo.AsJPEG(compression);

                while (byteArray.Count() > maxFileSize && compression > maxCompression)
                {
                    compression -= 0.1f;
                    byteArray    = photo.AsJPEG(compression);
                }

                if (metadata != null)
                {
                    //exif setup
                    var editedExifData       = RemakeMetadata(metadata, photo);
                    var newImageDataWithExif = new NSMutableData();
                    var imageDestination     = CGImageDestination.Create(newImageDataWithExif, "public.jpeg", 0);
                    imageDestination.AddImage(new UIImage(byteArray).CGImage, editedExifData);
                    imageDestination.Close();
                    stream = newImageDataWithExif.AsStream();
                }
                else
                {
                    stream = byteArray.AsStream();
                }

                var request = new UploadMediaModel(AppSettings.User.UserInfo, stream, ImageExtension);
                return(await _presenter.TryUploadMedia(request));
            }
            catch (Exception ex)
            {
                AppSettings.Reporter.SendCrash(ex);
                return(new OperationResult <MediaModel>(new AppError(LocalizationKeys.PhotoProcessingError)));
            }
            finally
            {
                stream?.Flush();
                stream?.Dispose();
            }
        }
        public async Task <OperationResult <UUIDModel> > UploadMedia(UploadMediaModel model, CancellationToken ct)
        {
            if (!EnableRead)
            {
                return(null);
            }

            var results = Validate(model);

            if (results != null)
            {
                return(new OperationResult <UUIDModel>(results));
            }

            var endpoint = $"https://media.steepshot.org/api/v1/upload";

            return(await HttpClient.UploadMedia(endpoint, model, ct));
        }
        private async Task <OperationResult <MediaModel> > UploadPhoto()
        {
            Stream stream = null;

            try
            {
                stream = ImageAsset.AsJpegStream();
                var request = new UploadMediaModel(BasePresenter.User.UserInfo, stream, ImageExtension);
                return(await _presenter.TryUploadMedia(request));
            }
            catch (Exception ex)
            {
                AppSettings.Reporter.SendCrash(ex);
                return(new OperationResult <MediaModel>(new ApplicationError(Localization.Errors.PhotoProcessingError)));
            }
            finally
            {
                stream?.Flush();
                stream?.Dispose();
            }
        }
        private async Task <OperationResult <MediaModel> > UploadPhoto(Stream photoStream)
        {
            try
            {
                photoStream.Position = 0;
                var request      = new UploadMediaModel(BasePresenter.User.UserInfo, photoStream, Path.GetExtension(".jpg"));
                var serverResult = await Presenter.TryUploadMedia(request);

                return(serverResult);
            }
            catch (Exception ex)
            {
                AppSettings.Reporter.SendCrash(ex);
                return(new OperationResult <MediaModel>(new AppError(LocalizationKeys.PhotoProcessingError)));
            }
            finally
            {
                photoStream?.Close();
                photoStream?.Dispose();
            }
        }
        private void UploadTest(StringBuilder sb, int num)
        {
            sb.Append($"{num}) UploadTest : ");
            StepFinished?.Invoke(sb.ToString());

            var cat = "/9j/4AAQSkZJRgABAQEAwADAAAD/4QBqRXhpZgAATU0AKgAAAAgAAwESAAMAAAABAAEAAAExAAIAAAAQAAAAModpAAQAAAABAAAAQgAAAABTaG90d2VsbCAwLjIyLjAAAAKgAgAJAAAAAQAAAMKgAwAJAAAAAQAAAMIAAAAAAAD/4Qn0aHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pg0KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNC40LjAtRXhpdjIiPg0KCTxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+DQoJCTxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIiB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIgZXhpZjpQaXhlbFhEaW1lbnNpb249IjE5NCIgZXhpZjpQaXhlbFlEaW1lbnNpb249IjE5NCIgdGlmZjpJbWFnZVdpZHRoPSIxOTQiIHRpZmY6SW1hZ2VIZWlnaHQ9IjE5NCIvPg0KCTwvcmRmOlJERj4NCjwveDp4bXBtZXRhPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/eHBhY2tldCBlbmQ9J3cnPz7/2wBDAAIBAQIBAQICAgICAgICAwUD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";

            byte[]       byteArray = Encoding.ASCII.GetBytes(cat);
            MemoryStream stream    = new MemoryStream(byteArray);

            var request = new UploadMediaModel(_user, stream, ".jpg")
            {
                GenerateThumbnail = false,
            };
            var mediaResponse = _api.UploadMedia(request, CancellationToken.None).Result;

            if (!mediaResponse.IsSuccess)
            {
                sb.AppendLine($"fail. Reason:{Environment.NewLine} {mediaResponse.Error.Message}");
                return;
            }

            var model = new PreparePostModel(_user, AppSettings.AppInfo.GetModel())
            {
                Tags  = new[] { "spam" },
                Title = "Upload test",
                Media = new[] { mediaResponse.Result },
            };

            var response = _api.CreateOrEditPost(model, CancellationToken.None).Result;

            if (!response.IsSuccess)
            {
                sb.AppendLine($"fail. Reason:{Environment.NewLine} {response.Error.Message}");
                return;
            }
            sb.AppendLine("pass.");
        }
 public abstract Task <OperationResult <string> > GetVerifyTransaction(UploadMediaModel model, CancellationToken ct);
Example #19
0
        private async Task <OperationResult <MediaModel> > UploadPhoto(UIImage photo, NSDictionary metadata)
        {
            Stream stream = null;

            try
            {
                var compression    = 1f;
                var maxCompression = 0.1f;
                int maxFileSize    = _photoSize * 1024;

                var byteArray = photo.AsJPEG(compression);

                while (byteArray.Count() > maxFileSize && compression > maxCompression)
                {
                    compression -= 0.1f;
                    byteArray    = photo.AsJPEG(compression);
                }

                if (metadata != null)
                {
                    //exif setup
                    var editedExifData       = RemakeMetadata(metadata, photo);
                    var newImageDataWithExif = new NSMutableData();
                    var imageDestination     = CGImageDestination.Create(newImageDataWithExif, "public.jpeg", 0);
                    imageDestination.AddImage(new UIImage(byteArray).CGImage, editedExifData);
                    imageDestination.Close();
                    stream = newImageDataWithExif.AsStream();
                }
                else
                {
                    stream = byteArray.AsStream();
                }

                var request      = new UploadMediaModel(AppSettings.User.UserInfo, stream, ImageExtension);
                var serverResult = await _presenter.TryUploadMedia(request);

                if (!serverResult.IsSuccess)
                {
                    return(new OperationResult <MediaModel>(serverResult.Exception));
                }

                var uuidModel = serverResult.Result;
                var done      = false;
                do
                {
                    var state = await _presenter.TryGetMediaStatus(uuidModel);

                    if (state.IsSuccess)
                    {
                        switch (state.Result.Code)
                        {
                        case UploadMediaCode.Done:
                            done = true;
                            break;

                        case UploadMediaCode.FailedToProcess:
                        case UploadMediaCode.FailedToUpload:
                        case UploadMediaCode.FailedToSave:
                            return(new OperationResult <MediaModel>(new Exception(state.Result.Message)));

                        default:
                            await Task.Delay(3000);

                            break;
                        }
                    }
                } while (!done);

                return(await _presenter.TryGetMediaResult(uuidModel));
            }
            catch (Exception ex)
            {
                return(new OperationResult <MediaModel>(new InternalException(LocalizationKeys.PhotoProcessingError, ex)));
            }
            finally
            {
                stream?.Flush();
                stream?.Dispose();
            }
        }
Example #20
0
 private async Task <OperationResult <MediaModel> > UploadMedia(UploadMediaModel model, CancellationToken ct)
 {
     return(await Api.UploadMedia(model, ct));
 }
Example #21
0
        private async Task <OperationResult <MediaModel> > UploadPhoto(string url, CancellationToken token)
        {
            MemoryStream stream = null;
            WebClient    client = null;

            try
            {
                client = new WebClient();
                var bytes = client.DownloadData(new Uri(url));

                stream = new MemoryStream(bytes);
                var request      = new UploadMediaModel(User.UserInfo, stream, Path.GetExtension(MimeTypeHelper.Jpg));
                var serverResult = await Client.UploadMedia(request, token);

                if (!serverResult.IsSuccess)
                {
                    return(new OperationResult <MediaModel>(serverResult.Exception));
                }

                var uuidModel = serverResult.Result;
                var done      = false;
                do
                {
                    if (token.IsCancellationRequested)
                    {
                        return(new OperationResult <MediaModel>(new OperationCanceledException()));
                    }

                    var state = await Client.GetMediaStatus(uuidModel, token);

                    if (state.IsSuccess)
                    {
                        switch (state.Result.Code)
                        {
                        case UploadMediaCode.Done:
                            done = true;
                            break;

                        case UploadMediaCode.FailedToProcess:
                        case UploadMediaCode.FailedToUpload:
                        case UploadMediaCode.FailedToSave:
                            return(new OperationResult <MediaModel>(new Exception(state.Result.Message)));

                        default:
                            await Task.Delay(5000);

                            break;
                        }
                    }
                } while (!done);

                return(await Client.GetMediaResult(uuidModel, token));
            }
            catch (Exception ex)
            {
                return(new OperationResult <MediaModel>(new InternalException(LocalizationKeys.PhotoUploadError, ex)));
            }
            finally
            {
                stream?.Flush();
                client?.Dispose();
                stream?.Dispose();
            }
        }
Example #22
0
 public async Task <OperationResult <MediaModel> > TryUploadMedia(UploadMediaModel model)
 {
     return(await TryRunTask <UploadMediaModel, MediaModel>(UploadMedia, OnDisposeCts.Token, model));
 }