Beispiel #1
0
 protected virtual async Task ParseEntityAsync(TEntity entity)
 {
     Id               = entity.Id;
     DateAdded        = entity.DateAdded;
     DateUpdated      = entity.DateUpdated;
     PropertiesGroups = (await _propertiesProvider.GetAsync(entity))
                        .Select(p => PropertiesGroup.Create(p, PropertiesProvider.GetSchema(p.Key))).ToList();
 }
Beispiel #2
0
        public override async Task <PageMetaModel> GetMetaAsync()
        {
            var path = LinkGenerator.GeneratePublicUrl(Entity);
            var meta = new PageMetaModel
            {
                Title = $"{Entity.Title} / {Site.Title}", CurrentUrl = new Uri($"{Site.Url}{path}")
            };

            var seoPropertiesSet = await PropertiesProvider.GetAsync <SeoContentPropertiesSet>(Entity);

            if (seoPropertiesSet != null && !string.IsNullOrEmpty(seoPropertiesSet.Description))
            {
                meta.Description = seoPropertiesSet.Description;
            }
            else
            {
                if (Entity is IContentEntity contentEntity)
                {
                    if (contentEntity.Blocks.OrderBy(b => b.Position).FirstOrDefault(b => b is TextBlock) is TextBlock
                        textBlock)
                    {
                        meta.Description = HtmlHelper.GetDescriptionFromHtml(textBlock.Data.Text);
                    }
                }
            }

            if (seoPropertiesSet != null && !string.IsNullOrEmpty(seoPropertiesSet.Keywords))
            {
                meta.Keywords = seoPropertiesSet.Keywords;
            }
            else
            {
                if (Entity is ITaggedContentEntity taggedContentEntity)
                {
                    meta.Keywords = string.Join(", ", taggedContentEntity.Tags.Select(t => t.Title));
                }
            }

            if (Entity is IContentEntity contEntity)
            {
                foreach (var block in contEntity.Blocks.OrderBy(b => b.Position))
                {
                    if (block is PictureBlock pictureBlock)
                    {
                        meta.ImageUrl = pictureBlock.Data.Picture.PublicUri;
                        break;
                    }

                    if (block is GalleryBlock galleryBlock && galleryBlock.Data.Pictures.Length > 0)
                    {
                        meta.ImageUrl = galleryBlock.Data.Pictures[0].PublicUri;
                        break;
                    }
                }
            }

            return(meta);
        }
Beispiel #3
0
        public async Task SyncNewAsync()
        {
            var sites = await _sitesRepository.GetAllAsync();

            var lastCommentId = await _dbContext.Set <IPBComment>().OrderByDescending(c => c.PostId)
                                .Select(c => c.PostId).FirstOrDefaultAsync();

            var forumIds = new List <int>();

            foreach (var site in sites.items)
            {
                var settings = await _propertiesProvider.GetAsync <IPBSitePropertiesSet>(site);

                if (settings != null && settings.IsEnabled && settings.ForumId > 0 && !forumIds.Contains(settings.ForumId))
                {
                    forumIds.Add(settings.ForumId);
                }
            }

            if (forumIds.Count == 0)
            {
                return;
            }

            var client = _ipbApiClientFactory.GetReadOnlyClient();

            var posts = new List <Post>();

            try
            {
                var page = 1;

                while (true)
                {
                    var response = await client.GetForumsPostsAsync(forumIds.ToArray(), null, true, page, 1000);

                    posts.AddRange(response.Results);
                    var lastPostId = response.Results.OrderBy(p => p.Id).Select(p => p.Id).First();
                    if (page < response.TotalPages && lastPostId > lastCommentId)
                    {
                        page++;
                    }
                    else
                    {
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Error while downloading topics: {errorText}", ex.ToString());
            }

            var topicIds = posts.Select(p => p.ItemId).ToList();
            var records  = await _dbContext.Set <IPBPublishRecord>().Where(r => topicIds.Contains(r.TopicId))
                           .ToArrayAsync();

            await ProcessPostsAsync(posts.ToArray(), records);

            await _dbContext.SaveChangesAsync();
        }
Beispiel #4
0
        public async Task PublishOrDeleteAsync(Post <string> post,
                                               PropertyChange[] changes)
        {
            var sites = await _sitesRepository.GetByIdsAsync(post.SiteIds);

            foreach (var site in sites)
            {
                if (site.Id == GetMainSiteId(post))
                {
                    var ipbSettings = await _propertiesProvider.GetAsync <IPBSitePropertiesSet>(site);

                    if (ipbSettings != null && ipbSettings.IsEnabled && ipbSettings.ForumId > 0)
                    {
                        await _ipbContentPublisher.PublishAsync(post,
                                                                new IPBPublishConfig(ipbSettings.ForumId, post.AuthorId), true, site,
                                                                true);
                    }
                }

                var twitterSettings = await _propertiesProvider.GetAsync <TwitterSitePropertiesSet>(site);

                if (twitterSettings != null && twitterSettings.IsEnabled)
                {
                    var hasChanges = changes != null && changes.Any(c =>
                                                                    c.Name == nameof(post.Title) || c.Name == nameof(post.Url));

                    var sections = await _sectionsRepository.GetByIdsAsync(post.SectionIds);

                    var tags = new List <string>();
                    foreach (var section in sections)
                    {
                        if (section is Developer developer && !string.IsNullOrEmpty(developer.Data.Hashtag))
                        {
                            tags.Add($"#{developer.Data.Hashtag.Replace("#", "")}");
                        }

                        if (section is Game game && !string.IsNullOrEmpty(game.Data.Hashtag))
                        {
                            tags.Add($"#{game.Data.Hashtag.Replace("#", "")}");
                        }

                        if (section is Topic topic && !string.IsNullOrEmpty(topic.Data.Hashtag))
                        {
                            tags.Add($"#{topic.Data.Hashtag.Replace("#", "")}");
                        }
                    }


                    var twitterConfig = new TwitterPublishConfig(
                        new TwitterConfig(twitterSettings.ConsumerKey, twitterSettings.ConsumerSecret,
                                          twitterSettings.AccessToken, twitterSettings.AccessTokenSecret), tags);

                    if (hasChanges || !post.IsPublished)
                    {
                        await _twitterContentPublisher.DeleteAsync(post, twitterConfig, site);
                    }

                    if (post.IsPublished)
                    {
                        await _twitterContentPublisher.PublishAsync(post, twitterConfig, hasChanges, site);
                    }
                }

                var facebookSettings = await _propertiesProvider.GetAsync <FacebookSitePropertiesSet>(site);

                if (facebookSettings != null && facebookSettings.IsEnabled)
                {
                    var hasChanges = changes != null && changes.Any(c => c.Name == nameof(post.Url));

                    var facebookConfig = new FacebookConfig(new Uri(facebookSettings.ApiUrl), facebookSettings.PageId,
                                                            facebookSettings.AccessToken);

                    if (hasChanges || !post.IsPublished)
                    {
                        await _facebookContentPublisher.DeleteAsync(post, facebookConfig, site);
                    }

                    if (post.IsPublished)
                    {
                        await _facebookContentPublisher.PublishAsync(post, facebookConfig, hasChanges, site);
                    }
                }
            }
        }
 public Task <TPropertySet> GetSitePropertiesAsync <TPropertySet>() where TPropertySet : PropertiesSet, new()
 {
     return(PropertiesProvider.GetAsync <TPropertySet>(Site));
 }