Beispiel #1
0
        public void UpdateValues()
        {
            var ratingConfiguration = _configuration.FetchConfiguration.RatingConfiguration;

            SafeCheck         = ratingConfiguration.Safe;
            QuestionableCheck = ratingConfiguration.Questionable;
            ExplicitCheck     = ratingConfiguration.Explicit;

            CachePath   = _configuration.CachePath;
            CurrentSite = _configuration.ActiveSite;
        }
Beispiel #2
0
        public Dictionary <string, string> GetPropertyMapping(BooruSiteType booruSiteType)
        {
            switch (booruSiteType)
            {
            case BooruSiteType.Danbooru: return(DanbooruPropertyMappings);

            case BooruSiteType.Gelbooru: return(GelbooruPropertyMappings);

            case BooruSiteType.SafeBooru: return(SafebooruPropertyMappings);
            }
            throw new NotImplementedException($"Unknown booru site type: {booruSiteType}");
        }
Beispiel #3
0
        public Task <string> FetchPostsAsync(
            BooruSiteType type,
            int limit                           = 0,
            int pageNumber                      = 1,
            ICollection <string> tags           = null,
            CancellationToken cancellationToken = default)
        {
            if (limit == 0)
            {
                limit = _initLimit;
            }

            var url = _helper.GetPostsUrl(
                type, limit, pageNumber, tags);

            return(_httpClient.GetStringAsync(url, cancellationToken));
        }
Beispiel #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="addImageCallback">Invoke when adding <see cref="BooruImage"/></param>
        public async Task GetPosts(
            BooruSiteType siteType,
            Action <BooruImage> addImageCallback,
            IList <string> tags,
            int queryPageNumber,
            int postLimit,
            CancellationToken cancellationToken = default
            )
        {
            BooruPreviewImages = new List <BooruImage>();

            Posts = new List <IBooruPost>();

            QueryPage      = queryPageNumber;
            SiteType       = siteType;
            QueryPostLimit = postLimit;

            var ratingTags = _postManager.GetRatingTagString(_configuration.ActiveSite,
                                                             _configuration.FetchConfiguration.RatingConfiguration);

            Tags = new List <string> {
                ratingTags
            };
            Tags.AddRange(tags);

            var postsString =
                await _postFetcherService.FetchPostsAsync(
                    SiteType,
                    QueryPostLimit,
                    tags : Tags,
                    pageNumber : QueryPage,
                    cancellationToken : cancellationToken).ConfigureAwait(false);

            var posts = _postManager.DeserializePosts(
                _configuration.ActiveSite, postsString);

            foreach (var post in posts)
            {
                cancellationToken.ThrowIfCancellationRequested();

                Posts.Add(post);
                await AddBooruImage(post, addImageCallback, cancellationToken);
            }
        }
Beispiel #5
0
        public List <IBooruPost> DeserializePosts(BooruSiteType type, string posts)
        {
            switch (type)
            {
            case BooruSiteType.Danbooru:
                return(new List <IBooruPost>(
                           JsonConvert.DeserializeObject <List <DanbooruPost> >(posts)));

            case BooruSiteType.SafeBooru:
                return(new List <IBooruPost>(
                           JsonConvert.DeserializeObject <List <SafebooruPost> >(posts)));

            case BooruSiteType.Gelbooru:
                return(new List <IBooruPost>(
                           JsonConvert.DeserializeObject <List <GelbooruPost> >(posts)));
            }

            throw new Exception("Unknown booru type for deserialize");
        }
Beispiel #6
0
        public string GetRatingTagString(BooruSiteType type, RatingConfiguration ratingConfiguration)
        {
            //ToDo maybe configure rating tag value in configuration file
            switch (ratingConfiguration.GetEnabledRatingTagCount())
            {
            case 1:
            {
                if (ratingConfiguration.Safe)
                {
                    return("rating%3Asafe");
                }
                if (ratingConfiguration.Explicit)
                {
                    if (type == BooruSiteType.SafeBooru)
                    {
                        return(String.Empty);
                    }
                    if (type == BooruSiteType.Gelbooru)
                    {
                        return("rating%3Aexplicit");
                    }
                    return("rating%3Ae");
                }
                return("rating%3Aquestionable");
            }

            case 2:
            {
                if (!ratingConfiguration.Safe)
                {
                    return("-rating%3Asafe");
                }
                if (!ratingConfiguration.Explicit)
                {
                    return("-rating%3Ae");
                }
                return("-rating%3Aquestionable");
            }

            default: return(String.Empty);
            }
        }
Beispiel #7
0
        public string GetPostsUrl(BooruSiteType type, int limit, int pageNumber, ICollection <string> tags)
        {
            switch (type)
            {
            case BooruSiteType.Danbooru:
                var danbooru = _fetchConfiguration.DanbooruUrlConfiguration;
                return(danbooru.BaseUrl + AssemblePostsUrl(danbooru.PostsUrl, limit, pageNumber, tags));

            case BooruSiteType.SafeBooru:
                var safebooru = _fetchConfiguration.SafebooruUrlConfiguration;
                return(safebooru.BaseUrl + AssemblePostsUrl(safebooru.PostsUrl, limit, pageNumber, tags));

            case BooruSiteType.Gelbooru:
                var gelbooru = _fetchConfiguration.GelbooruUrlConfiguration;
                return(gelbooru.BaseUrl + AssemblePostsUrl(gelbooru.PostsUrl, limit, pageNumber, tags));

            default:
                throw new AssemblePostUrlException();
            }
        }
Beispiel #8
0
        public List <IBooruPost> DeserializePosts(BooruSiteType type, string posts)
        {
            switch (type)
            {
            case BooruSiteType.Danbooru:
                _booruContractResolver.SetBooruSite(BooruSiteType.Danbooru);
                return(new List <IBooruPost>(
                           _jsonSerializer.DeserializeBooruPosts <List <DanbooruPost>, DanbooruPost>(posts, _booruContractResolver)));

            case BooruSiteType.SafeBooru:
                _booruContractResolver.SetBooruSite(BooruSiteType.SafeBooru);
                return(new List <IBooruPost>(
                           _jsonSerializer.DeserializeBooruPosts <List <SafebooruPost>, SafebooruPost>(posts, _booruContractResolver)));

            case BooruSiteType.Gelbooru:
                _booruContractResolver.SetBooruSite(BooruSiteType.Gelbooru);
                return(new List <IBooruPost>(
                           _jsonSerializer.DeserializeBooruPosts <List <GelbooruPost>, GelbooruPost>(posts, _booruContractResolver)));
            }

            throw new Exception("Unknown booru type for deserialize");
        }
Beispiel #9
0
        public async Task <List <BooruImage> > GetImagesAsync(
            BooruSiteType booruSiteType,
            ImageSizeType imageType,
            ICollection <IBooruPost> collection,
            CancellationToken cancellationToken = default)
        {
            var images = new List <BooruImage>();

            foreach (var booruImage in collection)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    cancellationToken.ThrowIfCancellationRequested();
                }

                //Todo research why hash may be empty
                if (string.IsNullOrEmpty(booruImage.Hash))
                {
                    continue;
                }

                var imageFile = await _imageFetcherService.FetchImageAsync(
                    booruImage, imageType, cancellationToken : cancellationToken);

                if (imageFile == null)
                {
                    continue;
                }
                var booruImageWrapper = new BooruImage();
                booruImageWrapper.Hash  = booruImage.Hash;
                booruImageWrapper.Image = imageFile;
                images.Add(booruImageWrapper);
            }

            return(images);
        }
 public void SetBooruSite(BooruSiteType booruSiteType)
 {
     _siteType = booruSiteType;
 }