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(); }
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); }
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(); }
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)); }