Beispiel #1
0
        public async Task Posts_Delete()
        {
            var post = new Post()
            {
                Title   = new Title("Title 1"),
                Content = new Content("Content PostCreate")
            };
            var createdPost = await _clientAuth.Posts.Create(post);

            Assert.IsNotNull(createdPost);

            var resonse = await _clientAuth.Posts.Delete(createdPost.Id);

            Assert.IsTrue(resonse);

            await Assert.ThrowsExceptionAsync <WPException>(async() =>
            {
                var postById = await _clientAuth.Posts.GetByID(createdPost.Id);
            });

            // Post should be available in trash
            var queryBuilder = new PostsQueryBuilder()
            {
                Statuses = new Status[] { Status.Trash },
                PerPage  = 100
            };
            var posts = await _clientAuth.Posts.Query(queryBuilder, true);

            var deletedPost = posts.Where(x => x.Id == createdPost.Id).FirstOrDefault();

            Assert.IsNotNull(deletedPost);
        }
Beispiel #2
0
        public void Multi_Parameter_Query_Works_Test()
        {
            // Initialize
            var builder = new PostsQueryBuilder()
            {
                Page  = 2,
                Embed = true
            };

            Console.WriteLine(builder.BuildQueryURL());
            Assert.AreEqual(builder.BuildQueryURL(), "?page=2&_embed=true");
        }
Beispiel #3
0
        public void Multi_Parameter_Query_Works_Test()
        {
            // Initialize
            var builder = new PostsQueryBuilder()
            {
                Page  = 2,
                Embed = true
            };

            Console.WriteLine(builder.BuildQueryURL());
            Assert.AreEqual("?page=2&orderby=date&order=desc&_embed=true&context=view", builder.BuildQueryURL());
        }
Beispiel #4
0
        async Task ExecuteLoadMoreItemsCommand()
        {
            if (IsBusy)
            {
                return;
            }

            IsBusy = true;

            try
            {
                //  Items.Clear();
                Title = $"Загрузка страницы №{countPage}..";
                LoadMoreButtonVisibility = false;
                OnPropertyChanged("");
                var queryBuilder = new PostsQueryBuilder {
                    PerPage = 10, Page = countPage++
                };

                var next10post = await wclient.Posts.Query(queryBuilder);

                Task T = GetImageUrlCollection(next10post);

                if (next10post?.Count() != 0)
                {
                    OnPropertyChanged("");
                    _Items.AddRange(next10post.ToList());
                    OnPropertyChanged("");
                    Items = new ObservableCollection <Post>(_Items);
                    OnPropertyChanged("");
                }


                LoadMoreButtonVisibility = true;

                //  TestString = _Items[0].Title.Rendered;
                // return;
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
                Crashes.TrackError(ex);
            }
            finally
            {
                Title = "ШОСТКА.INFO";
                OnPropertyChanged("");
                IsBusy = false;
            }
        }
Beispiel #5
0
        public async Task <IEnumerable <Post> > ListAsync(int Page = 1, int PerPage = 20, string Filter = "", int[] Categories = null, DataSource DataSource = DataSource.Cloud)
        {
            IEnumerable <Post> posts = null;

            Filter = Filter.ToLower();

            if (DataSource == DataSource.Cloud)
            {
                PostsQueryBuilder QueryBuilder = new PostsQueryBuilder {
                    Page = Page, PerPage = PerPage, Search = Filter.ToLower(), Categories = Categories
                };

                posts = await Query(QueryBuilder);

                if (posts != null)
                {
                    foreach (var post in posts)
                    {
                        var LocalPost = LocalPosts.FirstOrDefault(p => p.Id == post.Id);
                        if (LocalPost is Post)
                        {
                            LocalPosts.Remove(LocalPost);
                            LocalPosts.Add(post);
                        }
                        else
                        {
                            LocalPosts.Add(post);
                        }
                    }

                    File.WriteAllText(_cachedPath, JsonConvert.SerializeObject(LocalPosts));
                }
            }
            else
            {
                posts = LocalPosts.OrderByDescending(pos => pos.Date).AsEnumerable();
                if (Categories != null)
                {
                    posts = posts.Where(u => u.Categories.Contains(Categories.FirstOrDefault()));
                }
                if (!string.IsNullOrEmpty(Filter))
                {
                    posts = posts.Where(pos => pos.Title.Rendered.ToLower().Contains(Filter) || pos.Content.Rendered.ToLower().Contains(Filter));
                }
                posts = posts.Skip((Page - 1) * PerPage).Take(PerPage);
            }

            return(posts);
        }
Beispiel #6
0
        public static List <WordPressPCL.Models.Post> GetTagPosts(int[] tagIDs)
        {
            List <WordPressPCL.Models.Post> posts = null;

            Task.Run(() =>
            {
                Constants wpsite  = new Constants();
                var client        = new WordPressClient(wpsite.resturl);
                var queryBuilder  = new PostsQueryBuilder();
                queryBuilder.Tags = tagIDs;
                var post_task     = client.Posts.Query(queryBuilder);
                post_task.Wait();
                posts = post_task.Result.ToList();
            }).Wait();
            return(posts);
        }
Beispiel #7
0
        public async Task Posts_Query()
        {
            var queryBuilder = new PostsQueryBuilder()
            {
                Page     = 1,
                PerPage  = 15,
                OrderBy  = PostsOrderBy.Title,
                Order    = Order.ASC,
                Statuses = new Status[] { Status.Publish },
                Embed    = true
            };
            var queryresult = await _clientAuth.Posts.Query(queryBuilder);

            Assert.AreEqual(queryBuilder.BuildQueryURL(), "?page=1&per_page=15&orderby=title&status=publish&order=asc&_embed=true");
            Assert.IsNotNull(queryresult);
            Assert.AreNotSame(queryresult.Count(), 0);
        }
Beispiel #8
0
        public static List <WordPressPCL.Models.Post> GetCategoryPosts(int[] categoryIDs, int numOfPosts)
        {
            List <WordPressPCL.Models.Post> posts = null;

            Task.Run(() =>
            {
                Constants wpsite        = new Constants();
                var client              = new WordPressClient(wpsite.resturl);
                var queryBuilder        = new PostsQueryBuilder();
                queryBuilder.Page       = 1;
                queryBuilder.PerPage    = numOfPosts;
                queryBuilder.Categories = categoryIDs;
                var post_task           = client.Posts.Query(queryBuilder);
                post_task.Wait();
                posts = post_task.Result.ToList();
            }).Wait();
            return(posts);
        }
Beispiel #9
0
        public static List <WordPressPCL.Models.Post> GetFeaturedPosts()
        {
            List <WordPressPCL.Models.Post> posts = null;

            Task.Run(() =>
            {
                Constants wpsite     = new Constants();
                var client           = new WordPressClient(wpsite.resturl);
                var queryBuilder     = new PostsQueryBuilder();
                queryBuilder.PerPage = wpsite.featdisplnum;
                queryBuilder.Page    = 1;
                var featDisplAffix   = new System.Text.StringBuilder();
                featDisplAffix.Append(wpsite.featdispl[0]);
                featDisplAffix.Append(wpsite.featdispl[1]);
                if ((featDisplAffix.ToString()) == "t-")
                {
                    var featDispl = new System.Text.StringBuilder();
                    featDispl.Append(wpsite.featdispl);
                    string tags = featDispl.Remove(0, 2).ToString();
                    List <string> tagListString = tags.Split(',').ToList();
                    List <int> tagList          = tagListString.Select(int.Parse).ToList();
                    queryBuilder.Tags           = tagList.ToArray();
                }
                else
                {
                    if ((featDisplAffix.ToString()) == "c-")
                    {
                        var featDispl = new System.Text.StringBuilder();
                        featDispl.Append(wpsite.featdispl);
                        string cats = featDispl.Remove(0, 2).ToString();
                        List <string> catListString = cats.Split(',').ToList();
                        List <int> catList          = catListString.Select(int.Parse).ToList();
                        queryBuilder.Categories     = catList.ToArray();
                    }
                }
                var post_task = client.Posts.Query(queryBuilder);
                post_task.Wait();
                posts = post_task.Result.ToList();
            }).Wait();
            return(posts);
        }
Beispiel #10
0
 /// <summary>
 /// Create a parametrized query and get a result
 /// </summary>
 /// <param name="queryBuilder">Posts query builder with specific parameters</param>
 /// <param name="useAuth">Send request with authenication header</param>
 /// <returns>List of filtered posts</returns>
 public async Task <IEnumerable <Post> > Query(PostsQueryBuilder queryBuilder, bool useAuth = false)
 {
     return(await _httpHelper.GetRequest <IEnumerable <Post> >($"{_defaultPath}{_methodPath}{queryBuilder.BuildQueryURL()}", false, useAuth).ConfigureAwait(false));
 }
Beispiel #11
0
        private void Populate()
        {
            Task.Run(() =>
            {
                var client    = new WordPressClient(wpsite.resturl);
                var user_task = client.Users.GetByID(UserID);
                user_task.Wait();
                var result     = user_task.Result;
                ProfilePicture = new Uri(result.AvatarUrls.Size96.ToString());
                Description    = result.Description;
                Email          = result.Email;
                FirstName      = result.FirstName;
                LastName       = result.LastName;
                Locale         = result.Locale;
                DisplayName    = result.Name;
                Nickname       = result.NickName;
                // Nickname = result.UserName;
                Registered = result.RegisteredDate;
                AuthorUri  = new Uri(result.Link);

                var queryBuilder     = new PostsQueryBuilder();
                queryBuilder.Authors = new int[] { UserID };
                var posts_task       = client.Posts.Query(queryBuilder);
                posts = posts_task.Result.ToList();
                posts_task.Wait();
            }).Wait();

            var metaFS = new FormattedString();

            if (cacheMedia)
            {
                AuthorProfilePic.Source = new UriImageSource {
                    CachingEnabled = true, Uri = ProfilePicture
                };
            }
            else
            {
                AuthorProfilePic.Source = ProfilePicture;
            }

            if (!((string.IsNullOrEmpty(FirstName)) && (string.IsNullOrEmpty(FirstName))))
            {
                AuthorName.Text = FirstName + LastName;
            }
            else
            {
                AuthorName.Text = DisplayName;
            }

            // metaFS.Spans.Add(TitleName);
            metaFS.Spans.Add(new Span {
                Text = Description
            });

            AuthorMeta.FormattedText = metaFS;

            AuthorPostsTitle.Text = "Posts written by " + DisplayName + ":";


            foreach (var item in posts)
            {
                var tapGestureRecognizer = new TapGestureRecognizer();
                tapGestureRecognizer.Tapped += async(s, e) =>
                {
                    await Navigation.PushAsync(new Post(item.Id));
                };
                tapGestureRecognizer.NumberOfTapsRequired = 1; // single-tap

                Frame featuredFrame = new Frame();
                featuredFrame.BorderColor  = Color.Gray;
                featuredFrame.CornerRadius = 5;
                featuredFrame.Padding      = 20;
                featuredFrame.Margin       = new Thickness(0, 10, 0, 0);
                featuredFrame.GestureRecognizers.Add(tapGestureRecognizer);

                Label postTitle = new Label();
                // postTitle.FontSize = (double)NamedSize.Subtitle;
                postTitle.FontSize       = 22;
                postTitle.FontAttributes = FontAttributes.Bold;
                var html      = item.Title.Rendered;
                var htmlTitle = new HtmlDocument();
                htmlTitle.LoadHtml(html);
                postTitle.Text = WebUtility.HtmlDecode(htmlTitle.DocumentNode.InnerText);

                BoxView titleSeparator = new BoxView();
                titleSeparator.Color             = Color.Gray;
                titleSeparator.HeightRequest     = 1;
                titleSeparator.HorizontalOptions = LayoutOptions.Fill;

                Image postFeaturedImage = new Image();
                postFeaturedImage.Aspect = Aspect.AspectFill;
                if (cacheMedia)
                {
                    postFeaturedImage.Source = new UriImageSource {
                        CachingEnabled = true, Uri = Constants.GetMediaUri(item.FeaturedMedia.Value)
                    };
                }
                else
                {
                    postFeaturedImage.Source = ImageSource.FromUri(Constants.GetMediaUri(item.FeaturedMedia.Value));
                }

                BoxView imageSeparator = new BoxView();
                imageSeparator.Color             = Color.Gray;
                imageSeparator.HeightRequest     = 2;
                imageSeparator.HorizontalOptions = LayoutOptions.Fill;

                Label publishDate = new Label();
                // exerpt.FontSize = (double)NamedSize.Body;
                publishDate.FontSize = 12;
                DateTime publishedDateTime = item.DateGmt;
                TimeSpan difference        = DateTime.Now.Subtract(publishedDateTime);
                if ((difference.TotalHours) > 24)
                {
                    if ((Math.Round(difference.TotalDays, 0) == 1))
                    {
                        publishDate.Text = Math.Round(difference.TotalDays, 0) + " day ago | " + publishedDateTime.ToString();
                    }
                    else
                    {
                        publishDate.Text = Math.Round(difference.TotalDays, 0) + " days ago | " + publishedDateTime.ToString();
                    }
                }
                else
                {
                    if ((Math.Round(difference.TotalHours, 0) == 1))
                    {
                        publishDate.Text = Math.Round(difference.TotalHours, 0) + " hour ago | " + publishedDateTime.ToString();
                    }
                    else
                    {
                        publishDate.Text = Math.Round(difference.TotalHours, 0) + " hours ago | " + publishedDateTime.ToString();
                    }
                }

                StackLayout postDetails = new StackLayout();
                postDetails.Children.Add(postTitle);
                postDetails.Children.Add(titleSeparator);
                postDetails.Children.Add(postFeaturedImage);
                postDetails.Children.Add(imageSeparator);
                postDetails.Children.Add(publishDate);
                postDetails.Children.Add(imageSeparator);

                featuredFrame.Content = postDetails;
                PostContainer.Children.Add(featuredFrame);
            }
        }
Beispiel #12
0
 public async Task <IEnumerable <Post> > Query(PostsQueryBuilder QueryBuilder)
 {
     return(await HttpHelper.GetRequests <IEnumerable <Post> >(_methodPath + "/" + QueryBuilder.BuildQueryURL()));
 }