コード例 #1
0
        public async Task <OperationResult <VoidResponse> > CreateOrEditPost(PreparePostModel model, CancellationToken ct)
        {
            var operationResult = await PreparePost(model, ct);

            if (!operationResult.IsSuccess)
            {
                return(new OperationResult <VoidResponse>(operationResult.Error));
            }

            var preparedData = operationResult.Result;

            var category     = model.Tags.Length > 0 ? model.Tags[0] : "steepshot";
            var meta         = JsonConverter.Serialize(preparedData.JsonMetadata);
            var commentModel = new CommentModel(model.Login, model.PostingKey, string.Empty, category, model.Login, model.Permlink, model.Title, preparedData.Body, meta);

            if (!model.IsEditMode)
            {
                commentModel.Beneficiaries = preparedData.Beneficiaries;
            }

            var result = await _ditchClient.CreateOrEdit(commentModel, ct);

            if (model.IsEditMode)
            {
                Trace($"post/{model.PostPermlink}/edit", model.Login, result.Error, model.PostPermlink, ct);//.Wait(5000);
            }
            else
            {
                Trace("post", model.Login, result.Error, model.PostPermlink, ct);//.Wait(5000);
            }
            return(result);
        }
コード例 #2
0
        public void HandlePostCreateResume(Intent intent)
        {
            var isEnable = intent.GetBooleanExtra(PostCreateResumeExtra, false);

            intent.RemoveExtra(PostCreateResumeExtra);

            if (!isEnable || !AppSettings.Temp.ContainsKey(PostCreateFragment.PostCreateGalleryTemp))
            {
                return;
            }

            var json  = AppSettings.Temp[PostCreateFragment.PostCreateGalleryTemp];
            var media = JsonConvert.DeserializeObject <List <GalleryMediaModel> >(json);

            PreparePostModel model = null;

            if (AppSettings.Temp.ContainsKey(PostCreateFragment.PreparePostTemp))
            {
                json  = AppSettings.Temp[PostCreateFragment.PreparePostTemp];
                model = JsonConvert.DeserializeObject <PreparePostModel>(json);
            }

            AppSettings.Temp.Remove(PostCreateFragment.PostCreateGalleryTemp);
            AppSettings.SaveTemp();

            OpenNewContentFragment(new PostCreateFragment(media, model));
        }
コード例 #3
0
        public async Task PreparePostTest(KnownChains apiName)
        {
            var user  = Users[apiName];
            var model = new PreparePostModel(user, AppSettings.AppInfo.GetModel())
            {
                Title       = "Test",
                Description = DateTime.Now.ToString(CultureInfo.InvariantCulture),
                Media       = new[]
                {
                    new MediaModel
                    {
                        Url      = "http://steepshot.org/api/v1/image/034e7cc2-90df-4186-b475-9b7d4166e0a4.jpeg",
                        IpfsHash = "QmUHaQDMc46pR21fNFt1Gxo5YeeFxD4uENywbevXe5XXWM",
                        Size     = new FrameSize
                        {
                            Height = 194,
                            Width  = 194
                        }
                    }
                },
                Tags = new[] { "test" }
            };

            var createPostResponse = await Api[apiName].PreparePost(model, CancellationToken.None);

            AssertResult(createPostResponse);
        }
コード例 #4
0
        public async Task <OperationResult <VoidResponse> > CreateOrEditPost(PreparePostModel model, CancellationToken ct)
        {
            var operationResult = await PreparePost(model, ct);

            if (!operationResult.IsSuccess)
            {
                return(new OperationResult <VoidResponse>(operationResult.Error));
            }

            var preparedData = operationResult.Result;
            var meta         = JsonConverter.Serialize(preparedData.JsonMetadata);
            var commentModel = new CommentModel(model, preparedData.Body, meta);

            if (!model.IsEditMode)
            {
                commentModel.Beneficiaries = preparedData.Beneficiaries;
            }

            var result = await _ditchClient.CreateOrEdit(commentModel, ct);

            if (model.IsEditMode)
            {
                await Trace($"post/{model.PostPermlink}/edit", model.Login, result.Error, model.PostPermlink, ct);
            }
            else
            {
                await Trace("post", model.Login, result.Error, model.PostPermlink, ct);
            }
            return(result);
        }
コード例 #5
0
        public override void OnViewCreated(View view, Bundle savedInstanceState)
        {
            if (IsInitialized)
            {
                return;
            }

            base.OnViewCreated(view, savedInstanceState);

            TagEdit.Hint = AppSettings.LocalizationManager.GetText(LocalizationKeys.Hashtag);
            TagEdit.SetFilters(new IInputFilter[] { new TextInputFilter(TextInputFilter.TagFilter), new InputFilterLengthFilter(40) });
            TagLabel.Text    = AppSettings.LocalizationManager.GetText(LocalizationKeys.Hashtag);
            Title.Hint       = AppSettings.LocalizationManager.GetText(LocalizationKeys.EnterPostTitle);
            Description.Hint = AppSettings.LocalizationManager.GetText(LocalizationKeys.EnterPostDescription);
            PostButton.Text  = AppSettings.LocalizationManager.GetText(LocalizationKeys.PublishButtonText);
            PageTitle.Text   = AppSettings.LocalizationManager.GetText(LocalizationKeys.PostSettings);

            PageTitle.Typeface   = Style.Semibold;
            Title.Typeface       = Style.Regular;
            Description.Typeface = Style.Regular;
            PostButton.Typeface  = Style.Semibold;
            TagLabel.Typeface    = Style.Regular;

            PostButton.Click  += OnPost;
            PostButton.Enabled = true;

            TopPanel.BringToFront();

            LocalTagsList.SetLayoutManager(new LinearLayoutManager(Activity, LinearLayoutManager.Horizontal, false));
            LocalTagsAdapter.Click += LocalTagsAdapterClick;
            LocalTagsList.SetAdapter(LocalTagsAdapter);
            LocalTagsList.AddItemDecoration(new ListItemDecoration((int)TypedValue.ApplyDimension(ComplexUnitType.Dip, 15, Resources.DisplayMetrics)));

            var client = App.MainChain == KnownChains.Steem ? App.SteemClient : App.GolosClient;

            _tagPickerFacade = new TagPickerFacade(_localTagsAdapter.LocalTags);
            _tagPickerFacade.SetClient(client);
            _tagPickerFacade.SourceChanged += TagPickerFacadeOnSourceChanged;

            _postSearchTagsAdapter = new PostSearchTagsAdapter(_tagPickerFacade);

            TagsList.SetLayoutManager(new LinearLayoutManager(Activity));
            _postSearchTagsAdapter.Click += OnTagsAdapterClick;
            TagsList.SetAdapter(_postSearchTagsAdapter);

            TagLabel.Click            += TagLabelOnClick;
            TagEdit.TextChanged       += OnTagOnTextChanged;
            TagEdit.KeyboardDownEvent += HideTagsList;
            TagEdit.OkKeyEvent        += HideTagsList;
            ClearEdit.Click           += (sender, args) => TagEdit.Text = string.Empty;

            BackButton.Click += OnBack;
            RootLayout.Click += OnRootLayoutClick;

            Timer = new Timer(OnTimer);
            Model = new PreparePostModel(AppSettings.User.UserInfo, AppSettings.AppInfo.GetModel());
        }
コード例 #6
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            SetupTags();
            SetupFields();

            model = new PreparePostModel(AppSettings.User.UserInfo, post, AppSettings.AppInfo.GetModel());
        }
コード例 #7
0
        public async Task <OperationResult <PreparePostResponse> > PreparePost(PreparePostModel model, CancellationToken ct)
        {
            var results = Validate(model);

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

            return(await Gateway.Post <PreparePostResponse, PreparePostModel>(GatewayVersion.V1P1, "post/prepare", model, ct));
        }
コード例 #8
0
 private void SetEditPost()
 {
     _model      = new PreparePostModel(BasePresenter.User.UserInfo, _editPost.Permlink);
     _title.Text = _editPost.Title;
     _title.SetSelection(_editPost.Title.Length);
     _description.Text = _editPost.Description;
     _description.SetSelection(_editPost.Description.Length);
     foreach (var editPostTag in _editPost.Tags)
     {
         AddTag(editPostTag);
     }
 }
コード例 #9
0
 private void SetEditPost()
 {
     _model      = new PreparePostModel(AppSettings.User.UserInfo, _editPost, AppSettings.AppInfo.GetModel());
     _title.Text = _editPost.Title;
     _title.SetSelection(_editPost.Title.Length);
     _description.Text = _editPost.Description;
     _description.SetSelection(_editPost.Description.Length);
     foreach (var editPostTag in _editPost.Tags)
     {
         AddTag(editPostTag);
     }
 }
コード例 #10
0
        public void PreparePostModel_Empty_Title()
        {
            var user    = Users.First().Value;
            var request = new PreparePostModel(user)
            {
                Media = new MediaModel[1]
            };

            var result = Validate(request);

            Assert.IsTrue(result.Count == 1);
            Assert.IsTrue(result[0].ErrorMessage.Equals(nameof(LocalizationKeys.EmptyTitleField)));
        }
コード例 #11
0
        public async Task <OperationResult <PreparePostResponse> > PreparePost(PreparePostModel model, CancellationToken ct)
        {
            var results = Validate(model);

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

            var endpoint = $"{BaseUrl}/{GatewayVersion.V1P1}/post/prepare";

            return(await HttpClient.Put <PreparePostResponse, PreparePostModel>(endpoint, model, ct));
        }
コード例 #12
0
        public void PreparePostModel_Empty_Media()
        {
            var user    = Users.First().Value;
            var request = new PreparePostModel(user, AppSettings.AppInfo.GetModel())
            {
                Title = "title"
            };

            var result = Validate(request);

            Assert.IsTrue(result.Count == 1);
            Assert.IsTrue(result[0].ErrorMessage.Equals(nameof(LocalizationKeys.EmptyFileField)));
        }
コード例 #13
0
        public async Task <OperationResult <PreparePostResponce> > PreparePost(PreparePostModel model, CancellationToken ct)
        {
            var results = Validate(model);

            if (results.Any())
            {
                return(new OperationResult <PreparePostResponce>(new ValidationError(string.Join(Environment.NewLine, results.Select(i => i.ErrorMessage)))));
            }

            model.PostPermlink = OperationHelper.TitleToPermlink(model.Title);

            return(await Gateway.Post <PreparePostResponce, PreparePostModel>(GatewayVersion.V1P1, "post/prepare", model, ct));
        }
コード例 #14
0
        public void PreparePostModel_Empty_Media()
        {
            var user    = Users.First().Value;
            var request = new PreparePostModel(user)
            {
                Title = "title"
            };

            var result = Validate(request);

            Assert.IsTrue(result.Count == 1);
            Assert.IsTrue(result[0].ErrorMessage == Localization.Errors.EmptyFileField);
        }
コード例 #15
0
        public void PreparePostModel_MaxTags()
        {
            var user    = Users.First().Value;
            var request = new PreparePostModel(user)
            {
                Title = "title",
                Media = new MediaModel[1],
                Tags  = new string[PreparePostModel.TagLimit + 1]
            };

            var result = Validate(request);

            Assert.IsTrue(result.Count == 1);
            Assert.IsTrue(result[0].ErrorMessage == Localization.Errors.TagLimitError);
        }
コード例 #16
0
        protected async Task <OperationResult <VoidResponse> > CreatePost(PreparePostModel model, CancellationToken token)
        {
            for (var i = 0; i < model.Media.Length; i++)
            {
                var media        = model.Media[i];
                var uploadResult = await UploadPhoto(media.Url, token);

                if (!uploadResult.IsSuccess)
                {
                    return(new OperationResult <VoidResponse>(uploadResult.Exception));
                }

                model.Media[i] = uploadResult.Result;
            }

            return(await Client.CreateOrEditPost(model, token));
        }
コード例 #17
0
#pragma warning restore 0649

        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.lyt_post_description);
            Cheeseknife.Inject(this);

            _pageTitle.Typeface   = Style.Semibold;
            _title.Typeface       = Style.Regular;
            _description.Typeface = Style.Regular;
            _postButton.Typeface  = Style.Semibold;
            _postButton.Click    += OnPost;
            _photoFrame.Clickable = true;
            _photoFrame.Click    += PhotoFrameOnClick;
            _postButton.Text      = Localization.Texts.PublishButtonText;
            _postButton.Enabled   = true;

            _localTagsList.SetLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.Horizontal, false));
            _localTagsAdapter        = new SelectedTagsAdapter();
            _localTagsAdapter.Click += LocalTagsAdapterClick;
            _localTagsList.SetAdapter(_localTagsAdapter);
            _localTagsList.AddItemDecoration(new ListItemDecoration((int)TypedValue.ApplyDimension(ComplexUnitType.Dip, 15, Resources.DisplayMetrics)));

            _tagsList.SetLayoutManager(new LinearLayoutManager(this));
            Presenter.SourceChanged += PresenterSourceChanged;
            _tagsAdapter             = new TagsAdapter(Presenter);
            _tagsAdapter.Click      += OnTagsAdapterClick;
            _tagsList.SetAdapter(_tagsAdapter);

            _tag.TextChanged       += OnTagOnTextChanged;
            _tag.KeyboardDownEvent += HideTagsList;
            _tag.OkKeyEvent        += HideTagsList;
            _tag.FocusChange       += OnTagOnFocusChange;

            _topMarginTagsLayout.Click += OnTagsLayoutClick;
            _backButton.Click          += OnBack;
            _rootLayout.Click          += OnRootLayoutClick;

            _timer = new Timer(OnTimer);

            InitPhoto();
            SetPostingTimer();
            SearchTextChanged();

            _model = new PreparePostModel(BasePresenter.User.UserInfo);
        }
コード例 #18
0
        public void PreparePostModel_MaxTags()
        {
            var user = Users.First().Value;
            var tags = new string[PreparePostModel.TagLimit + 1];

            for (int i = 0; i < tags.Length; i++)
            {
                tags[i] = "tag_" + i;
            }

            var request = new PreparePostModel(user, AppSettings.AppInfo.GetModel())
            {
                Title = "title",
                Media = new MediaModel[1],
                Tags  = tags
            };

            var result = Validate(request);

            Assert.IsTrue(result.Count == 1);
            Assert.IsTrue(result[0].ErrorMessage.Equals(nameof(LocalizationKeys.TagLimitError)));
        }
コード例 #19
0
        public async Task <OperationResult <VoidResponse> > CreateOrEditPost(PreparePostModel model, CancellationToken ct)
        {
            var operationResult = await PreparePost(model, ct);

            if (!operationResult.IsSuccess)
            {
                return(new OperationResult <VoidResponse>(operationResult.Exception));
            }

            var preparedData = operationResult.Result;
            var meta         = JsonConvert.SerializeObject(preparedData.JsonMetadata);
            var commentModel = new CommentModel(model, preparedData.Body, meta);

            if (!model.IsEditMode)
            {
                commentModel.Beneficiaries = preparedData.Beneficiaries;
            }

            var result = await _ditchClient.CreateOrEdit(commentModel, ct);

            if (model.IsEditMode)
            {
                await Trace($"post/{model.PostPermlink}/edit", model.Login, result.Exception, model.PostPermlink, ct);
            }
            else
            {
                await Trace("post", model.Login, result.Exception, model.PostPermlink, ct);
            }

            var infoModel = new NamedInfoModel($"@{model.Author}/{model.Permlink}")
            {
                Login        = model.Login,
                ShowLowRated = true,
                ShowNsfw     = true
            };
            var postInfo = await GetPostInfo(infoModel, ct);

            return(result);
        }
コード例 #20
0
        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.");
        }
コード例 #21
0
        private async void PostPhoto(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(titleTextField.Text))
            {
                ShowAlert(LocalizationKeys.EmptyTitleField);
                return;
            }

            await CheckOnSpam();

            if (_isSpammer)
            {
                return;
            }

            ToggleAvailability(false);

            await Task.Run(() =>
            {
                try
                {
                    string title        = null;
                    string description  = null;
                    IList <string> tags = null;

                    InvokeOnMainThread(() =>
                    {
                        title       = titleTextField.Text;
                        description = descriptionTextField.Text;
                        tags        = _collectionviewSource.LocalTags;
                    });

                    var mre = new ManualResetEvent(false);

                    var shouldReturn     = false;
                    var photoUploadRetry = false;
                    OperationResult <MediaModel> photoUploadResponse;
                    do
                    {
                        photoUploadRetry    = false;
                        photoUploadResponse = UploadPhoto().Result;

                        if (!photoUploadResponse.IsSuccess)
                        {
                            InvokeOnMainThread(() =>
                            {
                                ShowDialog(photoUploadResponse.Error, LocalizationKeys.Cancel, LocalizationKeys.Retry, (arg) =>
                                {
                                    shouldReturn = true;
                                    mre.Set();
                                }, (arg) =>
                                {
                                    photoUploadRetry = true;
                                    mre.Set();
                                });
                            });

                            mre.Reset();
                            mre.WaitOne();
                        }
                    } while (photoUploadRetry);

                    if (shouldReturn)
                    {
                        return;
                    }

                    var model = new PreparePostModel(BasePresenter.User.UserInfo)
                    {
                        Title       = title,
                        Description = description,

                        Tags  = tags.ToArray(),
                        Media = new[] { photoUploadResponse.Result }
                    };

                    var pushToBlockchainRetry = false;
                    do
                    {
                        pushToBlockchainRetry = false;
                        var response          = _presenter.TryCreateOrEditPost(model).Result;
                        if (!(response != null && response.IsSuccess))
                        {
                            InvokeOnMainThread(() =>
                            {
                                ShowDialog(response.Error, LocalizationKeys.Cancel, LocalizationKeys.Retry, (arg) =>
                                {
                                    mre.Set();
                                }, (arg) =>
                                {
                                    pushToBlockchainRetry = true;
                                    mre.Set();
                                });
                            });

                            mre.Reset();
                            mre.WaitOne();
                        }
                        else
                        {
                            InvokeOnMainThread(() =>
                            {
                                ShouldProfileUpdate = true;
                                NavigationController.ViewControllers = new UIViewController[] { NavigationController.ViewControllers[0], this };
                                NavigationController.PopViewController(false);
                            });
                        }
                    } while (pushToBlockchainRetry);
                }
                finally
                {
                    InvokeOnMainThread(() =>
                    {
                        ToggleAvailability(true);
                    });
                }
            });
        }
コード例 #22
0
        private async void OnPostAsync()
        {
            if (!editMode)
            {
                await CheckOnSpam();

                if (_isSpammer)
                {
                    return;
                }
            }

            EnablePostAndEdit(false);

            if (_isFromCamera)
            {
                var croppedPhoto = _cropView.CropImage(new SavedPhoto(null, ImageAssets[0].Item2, _cropView.ContentOffset)
                {
                    OriginalImageSize = _cropView.originalImageSize, Scale = _cropView.ZoomScale
                });
                ImageAssets.RemoveAt(0);
                ImageAssets.Add(new Tuple <NSDictionary, UIImage>(null, croppedPhoto));
            }

            await Task.Run(() =>
            {
                try
                {
                    string title        = null;
                    string description  = null;
                    IList <string> tags = null;

                    InvokeOnMainThread(() =>
                    {
                        title       = titleTextField.Text;
                        description = descriptionTextField.Text;
                        tags        = collectionviewSource.LocalTags;
                    });

                    var mre = new ManualResetEvent(false);

                    if (!editMode)
                    {
                        var shouldReturn     = false;
                        var photoUploadRetry = false;
                        OperationResult <MediaModel>[] photoUploadResponse = new OperationResult <MediaModel> [ImageAssets.Count];
                        do
                        {
                            photoUploadRetry = false;
                            for (int i = 0; i < ImageAssets.Count; i++)
                            {
                                photoUploadResponse[i] = UploadPhoto(ImageAssets[i].Item2, ImageAssets[i].Item1).Result;
                            }

                            if (photoUploadResponse.Any(r => r.IsSuccess == false))
                            {
                                InvokeOnMainThread(() =>
                                {
                                    //Remake this
                                    ShowDialog(photoUploadResponse[0].Error, LocalizationKeys.Cancel, LocalizationKeys.Retry, (arg) =>
                                    {
                                        shouldReturn = true;
                                        mre.Set();
                                    }, (arg) =>
                                    {
                                        photoUploadRetry = true;
                                        mre.Set();
                                    });
                                });

                                mre.Reset();
                                mre.WaitOne();
                            }
                        } while (photoUploadRetry);

                        if (shouldReturn)
                        {
                            return;
                        }

                        model = new PreparePostModel(AppSettings.User.UserInfo, AppSettings.AppInfo.GetModel())
                        {
                            Title       = title,
                            Description = description,
                            Device      = "iOS",

                            Tags  = tags.ToArray(),
                            Media = photoUploadResponse.Select(r => r.Result).ToArray(),
                        };
                    }
                    else
                    {
                        model.Title       = title;
                        model.Description = description;
                        model.Device      = "iOS";
                        model.Tags        = tags.ToArray();
                        model.Media       = post.Media;
                    }

                    var pushToBlockchainRetry = false;
                    do
                    {
                        pushToBlockchainRetry = false;
                        var response          = _presenter.TryCreateOrEditPost(model).Result;
                        if (!(response != null && response.IsSuccess))
                        {
                            InvokeOnMainThread(() =>
                            {
                                ShowDialog(response.Error, LocalizationKeys.Cancel, LocalizationKeys.Retry, (arg) =>
                                {
                                    mre.Set();
                                }, (arg) =>
                                {
                                    pushToBlockchainRetry = true;
                                    mre.Set();
                                });
                            });

                            mre.Reset();
                            mre.WaitOne();
                        }
                        else
                        {
                            InvokeOnMainThread(() =>
                            {
                                ShouldProfileUpdate = true;
                                NavigationController.ViewControllers = new UIViewController[] { NavigationController.ViewControllers[0], this };
                                NavigationController.PopViewController(false);
                            });
                        }
                    } while (pushToBlockchainRetry);
                }
                finally
                {
                    InvokeOnMainThread(() =>
                    {
                        EnablePostAndEdit(true);
                    });
                }
            });
        }
コード例 #23
0
        protected virtual async void OnPostAsync(bool skipPreparationSteps)
        {
            if (!skipPreparationSteps)
            {
                await CheckOnSpam(true);

                if (_isSpammer)
                {
                    return;
                }
            }

            EnablePostAndEdit(false);

            if (_isFromCamera && !skipPreparationSteps)
            {
                var croppedPhoto = _cropView.CropImage(new SavedPhoto(null, ImageAssets[0].Item2, _cropView.ContentOffset)
                {
                    OriginalImageSize = _cropView.originalImageSize, Scale = _cropView.ZoomScale
                });
                ImageAssets.RemoveAt(0);
                ImageAssets.Add(new Tuple <NSDictionary, UIImage>(null, croppedPhoto));
            }

            await Task.Run(() =>
            {
                try
                {
                    var shouldReturn    = false;
                    string title        = null;
                    string description  = null;
                    IList <string> tags = null;

                    InvokeOnMainThread(() =>
                    {
                        title       = titleTextField.Text;
                        description = descriptionTextField.Text;
                        tags        = collectionviewSource.LocalTags;
                    });

                    mre = new ManualResetEvent(false);

                    if (!skipPreparationSteps)
                    {
                        var photoUploadRetry = false;
                        OperationResult <MediaModel>[] photoUploadResponse = new OperationResult <MediaModel> [ImageAssets.Count];
                        do
                        {
                            photoUploadRetry = false;
                            for (int i = 0; i < ImageAssets.Count; i++)
                            {
                                photoUploadResponse[i] = UploadPhoto(ImageAssets[i].Item2, ImageAssets[i].Item1).Result;
                            }

                            if (photoUploadResponse.Any(r => r.IsSuccess == false))
                            {
                                InvokeOnMainThread(() =>
                                {
                                    //Remake this
                                    ShowDialog(photoUploadResponse[0].Exception, LocalizationKeys.Cancel,
                                               LocalizationKeys.Retry, (arg) =>
                                    {
                                        shouldReturn = true;
                                        mre.Set();
                                    }, (arg) =>
                                    {
                                        photoUploadRetry = true;
                                        mre.Set();
                                    });
                                });

                                mre.Reset();
                                mre.WaitOne();
                            }
                        } while (photoUploadRetry);

                        if (shouldReturn)
                        {
                            return;
                        }

                        model = new PreparePostModel(AppSettings.User.UserInfo, AppSettings.AppInfo.GetModel())
                        {
                            Title       = title,
                            Description = description,
                            Device      = "iOS",

                            Tags  = tags.ToArray(),
                            Media = photoUploadResponse.Select(r => r.Result).ToArray(),
                        };
                    }

                    CreateOrEditPost(skipPreparationSteps);
                }
                catch (Exception ex)
                {
                    AppSettings.Logger.Warning(ex);
                }
                finally
                {
                    InvokeOnMainThread(() => { EnablePostAndEdit(true); });
                }
            });
        }
コード例 #24
0
 public async Task <OperationResult <VoidResponse> > TryCreateOrEditPost(PreparePostModel model)
 {
     return(await TryRunTask <PreparePostModel, VoidResponse>(CreateOrEditPost, OnDisposeCts.Token, model));
 }
コード例 #25
0
#pragma warning restore 0649

        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.lyt_post_description);
            Cheeseknife.Bind(this);

            _tag.Hint         = AppSettings.LocalizationManager.GetText(LocalizationKeys.AddHashtag);
            _title.Hint       = AppSettings.LocalizationManager.GetText(LocalizationKeys.EnterPostTitle);
            _description.Hint = AppSettings.LocalizationManager.GetText(LocalizationKeys.EnterPostDescription);
            _postButton.Text  = AppSettings.LocalizationManager.GetText(LocalizationKeys.PublishButtonText);
            _pageTitle.Text   = AppSettings.LocalizationManager.GetText(LocalizationKeys.PostSettings);

            _pageTitle.Typeface   = Style.Semibold;
            _title.Typeface       = Style.Regular;
            _description.Typeface = Style.Regular;
            _postButton.Typeface  = Style.Semibold;
            _postButton.Click    += OnPost;
            _photoFrame.Clickable = true;
            _rotate.Click        += RotateOnClick;

            _postButton.Enabled = true;

            _localTagsList.SetLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.Horizontal, false));
            _localTagsAdapter        = new SelectedTagsAdapter();
            _localTagsAdapter.Click += LocalTagsAdapterClick;
            _localTagsList.SetAdapter(_localTagsAdapter);
            _localTagsList.AddItemDecoration(new ListItemDecoration((int)TypedValue.ApplyDimension(ComplexUnitType.Dip, 15, Resources.DisplayMetrics)));

            var editPost = Intent.GetStringExtra(EditPost);

            if (!string.IsNullOrEmpty(editPost))
            {
                _editpost = JsonConvert.DeserializeObject <Post>(editPost);
                _model    = new PreparePostModel(BasePresenter.User.UserInfo, _editpost.Permlink);
                SetEditPost(_editpost);
                _rotate.Visibility = ViewStates.Gone;
            }
            else
            {
                _model = new PreparePostModel(BasePresenter.User.UserInfo);
                InitPhoto();
                SetPostingTimer();
            }

            _tagsList.SetLayoutManager(new LinearLayoutManager(this));
            Presenter.SourceChanged += PresenterSourceChanged;
            _tagsAdapter             = new TagsAdapter(Presenter);
            _tagsAdapter.Click      += OnTagsAdapterClick;
            _tagsList.SetAdapter(_tagsAdapter);

            _tag.TextChanged       += OnTagOnTextChanged;
            _tag.KeyboardDownEvent += HideTagsList;
            _tag.OkKeyEvent        += HideTagsList;
            _tag.FocusChange       += OnTagOnFocusChange;

            _topMarginTagsLayout.Click += OnTagsLayoutClick;
            _backButton.Click          += OnBack;
            _rootLayout.Click          += OnRootLayoutClick;

            _timer = new Timer(OnTimer);

            SearchTextChanged();
        }
コード例 #26
0
        public async Task <OperationResult <PreparePostResponse> > CheckPostForPlagiarism(PreparePostModel model, CancellationToken ct)
        {
            var result = await PreparePost(model, ct);

            if (!result.IsSuccess)
            {
                return(new OperationResult <PreparePostResponse>(result.Exception));
            }

            return(result);
        }
コード例 #27
0
 private async Task <OperationResult <VoidResponse> > CreateOrEditPost(PreparePostModel model, CancellationToken ct)
 {
     return(await Api.CreateOrEditPost(model, ct));
 }
コード例 #28
0
        public override async void TryCreateNewPost(CancellationToken token)
        {
            var acc  = GetOptionsOrDefault <ModuleOptionsModel>(AppId);
            var args = new Dictionary <string, object>
            {
                { "access_token", acc.AccessToken },
            };

            var rezult = await Client.HttpClient.Get <ModuleRecentMediaResult>("https://api.instagram.com/v1/users/self/media/recent/", args, token);

            if (!rezult.IsSuccess)
            {
                return;
            }

            if (acc.MinId == null)
            {
                var data = rezult.Result.Data.FirstOrDefault(i => i.Type.Equals("image", StringComparison.OrdinalIgnoreCase) || (i.CarouselMedia != null && i.CarouselMedia.Any(m => m.Type.Equals("image", StringComparison.OrdinalIgnoreCase))));
                if (data != null)
                {
                    acc.MinId = data.Id;
                }
                return;
            }

            ModuleData prevData = null;

            foreach (var data in rezult.Result.Data.Where(i => i.Type.Equals("image", StringComparison.OrdinalIgnoreCase) || (i.CarouselMedia != null && i.CarouselMedia.Any(m => m.Type.Equals("image", StringComparison.OrdinalIgnoreCase)))))
            {
                if (data.Id != acc.MinId)
                {
                    prevData = data;
                }
                else
                {
                    break;
                }
            }

            if (prevData == null)
            {
                return;
            }

            var model = new PreparePostModel(User.UserInfo, AppSettings.AppInfo.GetModel())
            {
                Title = prevData.Caption.Text
            };

            var tagsM = _tagRegex.Matches(model.Title);

            if (tagsM.Count > 0)
            {
                model.Tags = tagsM.Cast <Match>().Select(i => i.Value).ToArray();
            }

            if (prevData.Type.Equals("image", StringComparison.OrdinalIgnoreCase))
            {
                model.Media = new[]
                {
                    new MediaModel
                    {
                        Url = prevData.Images.StandardResolution.Url
                    }
                };
            }
            else
            {
                model.Media = prevData.CarouselMedia
                              .Where(i => i.Type.Equals("image", StringComparison.OrdinalIgnoreCase))
                              .Select(i => new MediaModel {
                    Url = i.Images.StandardResolution.Url
                })
                              .ToArray();
            }

            var result = await CreatePost(model, token);

            if (result.IsSuccess)
            {
                acc.MinId = prevData.Id;
                SaveOptions(AppId, acc);
            }
        }
コード例 #29
0
 public PostCreateFragment(List <GalleryMediaModel> media, PreparePostModel model) : this(media)
 {
     _tepmPost = model;
 }
コード例 #30
0
        public override void OnViewCreated(View view, Bundle savedInstanceState)
        {
            if (IsInitialized)
            {
                return;
            }

            base.OnViewCreated(view, savedInstanceState);

            _tag.Hint         = AppSettings.LocalizationManager.GetText(LocalizationKeys.AddHashtag);
            _title.Hint       = AppSettings.LocalizationManager.GetText(LocalizationKeys.EnterPostTitle);
            _description.Hint = AppSettings.LocalizationManager.GetText(LocalizationKeys.EnterPostDescription);
            _postButton.Text  = AppSettings.LocalizationManager.GetText(LocalizationKeys.PublishButtonText);
            _pageTitle.Text   = AppSettings.LocalizationManager.GetText(LocalizationKeys.PostSettings);

            _pageTitle.Typeface   = Style.Semibold;
            _title.Typeface       = Style.Regular;
            _description.Typeface = Style.Regular;
            _postButton.Typeface  = Style.Semibold;

            _postButton.Click  += OnPost;
            _postButton.Enabled = true;

            _topPanel.BringToFront();

            _localTagsList.SetLayoutManager(new LinearLayoutManager(Activity, LinearLayoutManager.Horizontal, false));
            LocalTagsAdapter.Click += LocalTagsAdapterClick;
            _localTagsList.SetAdapter(LocalTagsAdapter);
            _localTagsList.AddItemDecoration(new ListItemDecoration((int)TypedValue.ApplyDimension(ComplexUnitType.Dip, 15, Resources.DisplayMetrics)));

            _tagsList.SetLayoutManager(new LinearLayoutManager(Activity));
            Presenter.SourceChanged += PresenterSourceChanged;
            TagsAdapter.Click       += OnTagsAdapterClick;
            _tagsList.SetAdapter(TagsAdapter);

            _tag.TextChanged       += OnTagOnTextChanged;
            _tag.KeyboardDownEvent += HideTagsList;
            _tag.OkKeyEvent        += HideTagsList;
            _tag.FocusChange       += OnTagOnFocusChange;

            _topMarginTagsLayout.Click += OnTagsLayoutClick;
            _backButton.Click          += OnBack;
            _rootLayout.Click          += OnRootLayoutClick;

            _timer = new Timer(OnTimer);
            _model = new PreparePostModel(BasePresenter.User.UserInfo);
            SetPostingTimer();

            if (_editPost != null)
            {
                SetEditPost();
            }

            if (_media?.Count > 1 || _editPost?.Media.Length > 1)
            {
                _photos.Visibility           = ViewStates.Visible;
                _previewContainer.Visibility = ViewStates.Gone;
                _photos.SetLayoutManager(new LinearLayoutManager(Activity, LinearLayoutManager.Horizontal, false));
                _photos.SetAdapter(GalleryAdapter);
                _photos.AddItemDecoration(new ListItemDecoration((int)TypedValue.ApplyDimension(ComplexUnitType.Dip, 10, Resources.DisplayMetrics)));
            }
            else
            {
                _photos.Visibility           = ViewStates.Gone;
                _previewContainer.Visibility = ViewStates.Visible;
                var margin       = (int)BitmapUtils.DpToPixel(15, Resources);
                var layoutParams = new RelativeLayout.LayoutParams(Resources.DisplayMetrics.WidthPixels - margin * 2, Resources.DisplayMetrics.WidthPixels - margin * 2);
                layoutParams.SetMargins(margin, 0, margin, margin);
                _previewContainer.LayoutParameters = layoutParams;
                _preview.CornerRadius = BitmapUtils.DpToPixel(5, Resources);
                if (_media != null)
                {
                    _preview.SetImageUri(Uri.Parse(_media[0].Path), _media[0].Parameters);
                }
                else if (_editPost != null)
                {
                    _ratioBtn.Visibility = _rotateBtn.Visibility = ViewStates.Gone;
                    var url = _editPost.Media[0].Thumbnails.Mini;
                    Picasso.With(Activity).Load(url)
                    .Resize(_previewContainer.LayoutParameters.Width, _previewContainer.LayoutParameters.Height)
                    .Into(_preview);
                }
                _preview.Touch   += PreviewOnTouch;
                _ratioBtn.Click  += RatioBtnOnClick;
                _rotateBtn.Click += RotateBtnOnClick;
            }

            SearchTextChanged();
        }