protected override async Task AfterLoadAsync(Post[] entities)
        {
            await base.AfterLoadAsync(entities);

            var sectionsIds = entities.SelectMany(p => p.SectionIds).Distinct().ToArray();
            var sections    = await SectionsRepository.GetByIdsAsync(sectionsIds);

            var tagIds = entities.SelectMany(p => p.TagIds).Distinct().ToArray();
            var tags   = await _tagsRepository.GetByIdsAsync(tagIds);

            foreach (var entity in entities)
            {
                entity.Sections = sections.Where(s => entity.SectionIds.Contains(s.Id)).ToList();
                entity.Tags     = tags.Where(t => entity.TagIds.Contains(t.Id)).ToList();
            }
        }
示例#2
0
        protected override async Task AfterLoadAsync(Post <TUserPk>[] entities)
        {
            await base.AfterLoadAsync(entities);

            var sectionsIds = entities.SelectMany(p => p.SectionIds).Distinct().ToArray();
            var sections    = await SectionsRepository.GetByIdsAsync(sectionsIds);

            var tagIds = entities.SelectMany(p => p.TagIds).Distinct().ToArray();
            var tags   = await _tagsRepository.GetByIdsAsync(tagIds);

            var userIds = entities.Select(e => e.AuthorId).Distinct().ToArray();
            var users   = await _userDataProvider.GetDataAsync(userIds);

            foreach (var entity in entities)
            {
                entity.Sections = sections.Where(s => entity.SectionIds.Contains(s.Id)).ToList();
                entity.Tags     = tags.Where(t => entity.TagIds.Contains(t.Id)).ToList();
                entity.Author   = users.FirstOrDefault(d => d.Id.Equals(entity.AuthorId));
            }
        }
示例#3
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);
                    }
                }
            }
        }