Beispiel #1
0
        public async Task UpdateTagsAsync(List <string> previousTags, List <string> nowTags, int siteId, int contentId)
        {
            if (ListUtils.Equals(previousTags, nowTags))
            {
                return;
            }

            var tagsToRemove = new List <string>();
            var tagsToAdd    = new List <string>();

            if (previousTags != null)
            {
                foreach (var tag in previousTags)
                {
                    if (!nowTags.Contains(tag))
                    {
                        tagsToRemove.Add(tag);
                    }
                }
            }

            if (nowTags != null)
            {
                foreach (var tag in nowTags)
                {
                    if (previousTags == null || !previousTags.Contains(tag))
                    {
                        tagsToAdd.Add(tag);
                    }
                }
            }

            var tags = await GetTagsAsync(siteId);

            foreach (var tagName in tagsToRemove)
            {
                var tag = ListUtils.FirstOrDefault(tags, x => x.TagName == tagName);
                if (tag == null)
                {
                    continue;
                }

                ListUtils.Remove(tag.ContentIds, contentId);
                tag.UseNum = ListUtils.Count(tag.ContentIds);

                if (tag.UseNum == 0)
                {
                    await DeleteAsync(siteId, tagName);
                }
                else
                {
                    await UpdateAsync(tag);
                }
            }

            foreach (var tagName in tagsToAdd)
            {
                var tag = ListUtils.FirstOrDefault(tags, x => x.TagName == tagName);
                if (tag != null)
                {
                    if (!ListUtils.Contains(tag.ContentIds, contentId))
                    {
                        tag.ContentIds = ListUtils.Add(tag.ContentIds, contentId);
                        tag.UseNum     = tag.ContentIds.Count;
                        await UpdateAsync(tag);
                    }
                }
                else
                {
                    tag = new ContentTag
                    {
                        SiteId     = siteId,
                        TagName    = tagName,
                        ContentIds = new List <int>(contentId),
                        UseNum     = 1
                    };
                    await InsertAsync(tag);
                }
            }
        }