Example #1
0
        private async Task <ContentBlock> ParseImgAsync(HtmlNode node, List <GalleryExport> pics, string uploadPath)
        {
            var imgUrl     = node.Attributes["src"].Value;
            var thumbMatch = _thumbUrlRegex.Match(imgUrl);

            if (thumbMatch.Success)
            {
                int.TryParse(thumbMatch.Groups[1].Value, out var picId);
                var indexId = 0;
                if (thumbMatch.Groups.Count > 1)
                {
                    int.TryParse(thumbMatch.Groups[2].Value, out indexId);
                }

                if (picId > 0)
                {
                    var pic = pics.FirstOrDefault(p => p.Id == picId);
                    if (pic != null && pic.Files.Count > indexId)
                    {
                        var file = pic.Files[indexId];
                        imgUrl = file.Url;
                    }
                }
            }

            var item = await _filesUploader.UploadFromUrlAsync(imgUrl, uploadPath);

            if (item != null)
            {
                return(new PictureBlock {
                    Id = Guid.NewGuid(), Data = new PictureBlockData {
                        Picture = item
                    }
                });
            }

            return(null);
        }
        private async Task ImportGalleryAsync(Export data, Site site, List <Post <string> > posts)
        {
            foreach (var cat in data.GalleryCats)
            {
                var textParts = new List <string>();
                var current   = cat;
                while (current != null)
                {
                    textParts.Add(current.Title);
                    if (current.CatId > 0)
                    {
                        current = data.GalleryCats.FirstOrDefault(c => c.Id == current.CatId);
                    }
                    else
                    {
                        current = null;
                    }
                }

                textParts.Reverse();
                var tags = new List <Tag>();
                foreach (var text in textParts)
                {
                    var tag = GetTag(text);
                    tags.Add(tag);
                }

                var pics = data.GalleryPics.Where(p => p.CatId == cat.Id);
                foreach (var picsGroup in pics.GroupBy(p => p.Date.Date))
                {
                    var url  = $"gallery_{picsGroup.First().Id.ToString()}";
                    var post = new Post <string>
                    {
                        Id            = Guid.NewGuid(),
                        Url           = url,
                        Title         = cat.Title,
                        DateAdded     = picsGroup.First().Date,
                        DateUpdated   = picsGroup.First().Date,
                        DatePublished = picsGroup.First().Date,
                        IsPublished   = true,
                        AuthorId      = picsGroup.First().AuthorId.ToString(),
                        Blocks        = new List <ContentBlock>()
                    };

                    foreach (var galleryPicExport in picsGroup)
                    {
                        var pictures = new List <StorageItem>();
                        foreach (var picFile in galleryPicExport.Files)
                        {
                            var pic = await _filesUploader.UploadFromUrlAsync(picFile.Url,
                                                                              $"posts/{post.DateAdded.Year.ToString()}/{post.DateAdded.Month.ToString()}",
                                                                              picFile.FileName);

                            if (pic != null)
                            {
                                pictures.Add(pic);
                            }
                        }

                        if (pictures.Count == 1)
                        {
                            var block = new PictureBlock
                            {
                                Id = Guid.NewGuid(), Position = 1, Data = new PictureBlockData()
                            };
                            var picFile = pictures[0];
                            var pic     = await _filesUploader.UploadFromUrlAsync(picFile.PublicUri.ToString(),
                                                                                  $"posts/{post.DateAdded.Year.ToString()}/{post.DateAdded.Month.ToString()}",
                                                                                  picFile.FileName);

                            if (pic != null)
                            {
                                block.Data.Picture = pic;
                                post.Blocks.Add(block);
                            }
                        }
                        else
                        {
                            var block = new GalleryBlock
                            {
                                Id = Guid.NewGuid(), Position = 1, Data = new GalleryBlockData()
                            };

                            block.Data.Pictures = pictures.ToArray();
                            post.Blocks.Add(block);
                        }

                        if (!string.IsNullOrEmpty(galleryPicExport.Desc))
                        {
                            post.Blocks.Add(new TextBlock
                            {
                                Id       = Guid.NewGuid(),
                                Position = 0,
                                Data     = new TextBlockData {
                                    Text = galleryPicExport.Desc
                                }
                            });
                        }
                    }

                    post.TagIds = tags.Select(t => t.Id).ToArray();

                    if (cat.GameId > 0)
                    {
                        var game = data.Games.FirstOrDefault(g => g.Id == cat.GameId);
                        if (game != null)
                        {
                            post.SectionIds = new[] { _gamesMap[game.Id].Id };
                            post.SiteIds    = _gamesMap[game.Id].SiteIds;
                        }
                    }

                    if (cat.DeveloperId > 0)
                    {
                        var developer = data.Developers.FirstOrDefault(g => g.Id == cat.DeveloperId);
                        if (developer != null)
                        {
                            post.SectionIds = new[] { _developersMap[developer.Id].Id };
                            post.SiteIds    = _developersMap[developer.Id].SiteIds;
                        }
                    }

                    if (cat.TopicId > 0)
                    {
                        var topic = data.Topics.FirstOrDefault(g => g.Id == cat.TopicId);
                        if (topic != null)
                        {
                            post.SectionIds = new[] { _topicsMap[topic.Id].Id };
                            post.SiteIds    = _topicsMap[topic.Id].SiteIds;
                        }
                    }

                    posts.Add(post);
                    RegisterRedirect(cat.FullUrl, _linkGenerator.GeneratePublicUrl(post, site).ToString());
                }
            }
        }