private async Task <bool> IsDeletedVn()
        {
            try
            {
                using (Vndb client = new Vndb(true))
                {
                    uint vnid = Convert.ToUInt32(InputVnId);
                    VndbResponse <VisualNovel> response = await client.GetVisualNovelAsync(VndbFilters.Id.Equals(vnid));

                    if (response != null)
                    {
                        return(response.Count < 1);
                    }
                    else
                    {
                        HandleError.HandleErrors(client.GetLastError(), 0);
                        return(true);
                    }
                }
            }
            catch (Exception ex)
            {
                Globals.Logger.Error(ex);
                throw;
            }
        }
        private async Task <uint> IsAboveMaxId()
        {
            try
            {
                using (Vndb client = new Vndb(true))
                {
                    RequestOptions ro = new RequestOptions
                    {
                        Reverse = true,
                        Sort    = "id",
                        Count   = 1
                    };
                    VndbResponse <VisualNovel> response = await client.GetVisualNovelAsync(VndbFilters.Id.GreaterThan(1), VndbFlags.Basic, ro);

                    if (response != null)
                    {
                        return(response.Items[0].Id);
                    }
                    else
                    {
                        HandleError.HandleErrors(client.GetLastError(), 0);
                        return(0);
                    }
                }
            }
            catch (Exception ex)
            {
                Globals.Logger.Error(ex);
                throw;
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Get character data
        /// </summary>
        /// <param name="client"></param>
        /// <param name="vnid"></param>
        /// <param name="ro"></param>
        /// <returns></returns>
        internal async Task <List <Character> > GetCharactersAsync(VndbSharp.Vndb client, uint vnid, RequestOptions ro)
        {
            try
            {
                stopwatch.Restart();

                int              pageCount      = 1;
                bool             shouldContinue = true;
                List <Character> characterList  = new List <Character>();
                while (shouldContinue)
                {
                    ro.Page = pageCount;
                    VndbResponse <Character> characters = await client.GetCharacterAsync(VndbFilters.VisualNovel.Equals(vnid), VndbFlags.FullCharacter, ro);

                    switch (characters)
                    {
                    case null when client.GetLastError().Type == ErrorType.Throttled:
                        await HandleVndbErrors.ThrottledWaitAsync((ThrottledError)client.GetLastError(), 0);

                        break;

                    case null:
                        HandleVndbErrors.HandleErrors(client.GetLastError());
                        _didErrorOccur = true;
                        return(null);

                    default:
                    {
                        shouldContinue = characters.HasMore;     //When false, it will exit the while loop
                        characterList.AddRange(characters.Items);
                        pageCount++;
                        if (stopwatch.Elapsed > maxTime)
                        {
                            return(null);
                        }
                        break;
                    }
                    }
                }
                return(characterList);
            }
            catch (Exception e)
            {
                App.Logger.Warning(e, "Failed to Get Visual novel characters");
                SentryHelper.SendException(e, null, SentryLevel.Warning);
                return(null);
            }
        }
Exemplo n.º 4
0
        public static async Task <VisualNovel> getVn(string vnName)
        {
            Vndb client = new Vndb();

            uint           id   = 0;
            HttpWebRequest http = (HttpWebRequest)WebRequest.Create("https://vndb.org/v/all?sq=" + vnName.Replace(' ', '+'));

            http.AllowAutoRedirect = false;
            string html;

            using (HttpWebResponse response = (HttpWebResponse)http.GetResponse())
                using (Stream stream = response.GetResponseStream())
                    using (StreamReader reader = new StreamReader(stream))
                    {
                        html = reader.ReadToEnd();
                    }
            html = html.Split(new string[] { "<div class=\"mainbox browse vnbrowse\">" }, StringSplitOptions.None)[1];
            html = html.Split(new string[] { "</thead>" }, StringSplitOptions.None)[1];
            List <string> allVnsId  = html.Split(new string[] { "href=\"/v" }, StringSplitOptions.None).ToList();
            string        cleanName = Program.cleanWord(vnName);
            string        name      = allVnsId.Find(x => Program.cleanWord(x).Contains(cleanName));

            try
            {
                if (name == null)
                {
                    id = Convert.ToUInt32(Program.getElementXml("a", "a" + allVnsId[1], '"'));
                }
                else
                {
                    id = Convert.ToUInt32(Program.getElementXml("a", "a" + name, '"'));
                }
            }
            catch (FormatException)
            {
                return(null);
            }
            VndbResponse <VisualNovel> visualNovels = await client.GetVisualNovelAsync(VndbFilters.Id.Equals(id), VndbFlags.FullVisualNovel);

            return(visualNovels.ToArray()[0]);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Get Visual Novel data
        /// </summary>
        /// <param name="client"></param>
        /// <param name="vnid"></param>
        /// <returns></returns>
        internal async Task <VisualNovel> GetVisualNovelAsync(VndbSharp.Vndb client, uint vnid)
        {
            try
            {
                stopwatch.Restart();
                while (true)
                {
                    if (stopwatch.Elapsed > maxTime)
                    {
                        return(null);
                    }
                    VndbResponse <VisualNovel> visualNovels = await client.GetVisualNovelAsync(VndbFilters.Id.Equals(vnid), VndbFlags.FullVisualNovel);


                    switch (visualNovels)
                    {
                    case null when client.GetLastError().Type == ErrorType.Throttled:
                        await HandleVndbErrors.ThrottledWaitAsync((ThrottledError)client.GetLastError(), 0);

                        break;

                    case null:
                        HandleVndbErrors.HandleErrors(client.GetLastError());
                        _didErrorOccur = true;
                        return(null);

                    default:
                        return(visualNovels.First());
                    }
                }
            }
            catch (Exception e)
            {
                App.Logger.Warning(e, "Failed to Get Visual novel");
                SentryHelper.SendException(e, null, SentryLevel.Warning);
                return(null);
            }
        }
Exemplo n.º 6
0
        private async void GetData()
        {
            Globals.StatusBar.ProgressPercentage = 0;
            Globals.StatusBar.IsWorkProcessing   = true;
            Globals.StatusBar.ProgressText       = "Retrieving Data";
            try
            {
                using (Vndb client = new Vndb(true))
                {
                    bool           hasMore = true;
                    RequestOptions ro      = new RequestOptions {
                        Count = 25
                    };
                    int pageCount      = 1;
                    int characterCount = 0;
                    int releasesCount  = 0;


                    List <Character> characterList = new List <Character>();
                    while (hasMore)
                    {
                        ro.Page = pageCount;
                        VndbResponse <Character> characters = await client.GetCharacterAsync(VndbFilters.VisualNovel.Equals(_vnid), VndbFlags.FullCharacter, ro);

                        if (characters != null)
                        {
                            hasMore = characters.HasMore;
                            characterList.AddRange(characters.Items);
                            characterCount = characterCount + characters.Count;
                            pageCount++;
                        }
                        if (characters != null)
                        {
                            continue;
                        }
                        HandleError.HandleErrors(client.GetLastError(), 0);
                        return;
                    }

                    hasMore   = true;
                    pageCount = 1;
                    //do progress here

                    VndbResponse <VisualNovel> visualNovels = await client.GetVisualNovelAsync(VndbFilters.Id.Equals(_vnid), VndbFlags.FullVisualNovel);

                    if (visualNovels == null)
                    {
                        HandleError.HandleErrors(client.GetLastError(), 0);
                        return;
                    }



                    List <Release> releaseList = new List <Release>();
                    while (hasMore)
                    {
                        ro.Page = pageCount;
                        VndbResponse <Release> releases = await client.GetReleaseAsync(VndbFilters.VisualNovel.Equals(_vnid), VndbFlags.FullRelease, ro);

                        if (releases == null)
                        {
                            HandleError.HandleErrors(client.GetLastError(), 0);
                            break;
                        }
                        hasMore = releases.HasMore;
                        releaseList.AddRange(releases.Items);
                        releasesCount = releasesCount + releases.Count;
                        pageCount++;
                    }


                    _progressIncrement = (double)100 / (1 + characterCount);
                    //await save vn data here
                    Globals.StatusBar.ProgressText   = "Processing Data";
                    Globals.StatusBar.IsDbProcessing = true;
                    await AddToDatabase(visualNovels, releaseList, characterList);
                }
            }
            catch (Exception ex)
            {
                Globals.Logger.Error(ex);
                throw;
            }
        }
        private async void GetWishlist()
        {
            if (!string.IsNullOrEmpty(_username) && _password.Length > 0)
            {
                Globals.StatusBar.IsDbProcessing   = true;
                Globals.StatusBar.IsWorkProcessing = true;
                Globals.StatusBar.ProgressText     = "Loading Data...";
                UInt32[] dbIdList = { };
                using (var context = new DatabaseContext())
                {
                    //gets a list of all vnids that are in the VnWishlist where the userId is the logged in user
                    List <uint> idEntry = (from v in context.VnWishList where v.UserId.Equals(_userId) select v.VnId).ToList();
                    List <uint> idList  = idEntry.ToList();

                    //gets a list of titles of all items in VnIdList which contain an id from the above vnlist,
                    //which is any item in the wishlist table
                    List <string> entry = (from first in context.VnIdList
                                           join second in idList on first.VnId equals second
                                           select first.Title).ToList();

                    if (entry.Count > 0)
                    {
                        _userListCollection.InsertRange(entry);
                    }
                    if (idList.Count > 0)
                    {
                        dbIdList = idList.ToArray();
                    }
                }

                List <Tuple <uint, string> > dbItemsToAdd  = new List <Tuple <uint, string> >();
                List <VnWishList>            wishListItems = new List <VnWishList>();
                bool removeItems = false;
                using (Vndb client = new Vndb(Username, Password))
                {
                    bool           hasMore = true;
                    RequestOptions ro      = new RequestOptions();
                    int            page    = 1;
                    List <UInt32>  idList  = new List <uint>();
                    //get the list of all ids on the wishlist
                    int errorCounter = 0;
                    while (hasMore)
                    {
                        ro.Page  = page;
                        ro.Count = 100;
                        try
                        {
                            if (dbIdList.Length > 0)
                            {
                                VndbResponse <Wishlist> wishlist = await client.GetWishlistAsync(VndbFilters.UserId.Equals(_userId)& VndbFilters.VisualNovel.NotEquals(dbIdList), VndbFlags.FullWishlist, ro);

                                if (wishlist != null && wishlist.Count > 0)
                                {
                                    hasMore = wishlist.HasMore;
                                    idList.AddRange(wishlist.Select(wish => wish.VisualNovelId));
                                    //dbWishlistToAdd.AddRange(wishlist);
                                    wishListItems.AddRange(wishlist.Select(item => new VnWishList()
                                    {
                                        UserId   = item.UserId,
                                        VnId     = item.VisualNovelId,
                                        Priority = item.Priority.ToString(),
                                        Added    = item.AddedOn.ToString(CultureInfo.InvariantCulture)
                                    }));
                                    page++;
                                }
                                else if (wishlist != null && wishlist.Count == 0)
                                {
                                    wishlist = await client.GetWishlistAsync(VndbFilters.UserId.Equals(_userId), VndbFlags.FullWishlist, ro);

                                    if (wishlist != null)
                                    {
                                        hasMore = wishlist.HasMore;
                                        idList.AddRange(wishlist.Select(wish => wish.VisualNovelId));
                                        //dbWishlistToAdd.AddRange(wishlist);
                                        wishListItems.AddRange(wishlist.Select(item => new VnWishList()
                                        {
                                            UserId   = item.UserId,
                                            VnId     = item.VisualNovelId,
                                            Priority = item.Priority.ToString(),
                                            Added    = item.AddedOn.ToString(CultureInfo.InvariantCulture)
                                        }));
                                        page++;
                                        removeItems = true;
                                    }
                                }
                                else
                                {
                                    HandleError.HandleErrors(client.GetLastError(), errorCounter);
                                    errorCounter++;
                                }
                            }
                            else
                            {
                                var wishlist = await client.GetWishlistAsync(VndbFilters.UserId.Equals(_userId), VndbFlags.FullWishlist, ro);

                                if (wishlist != null)
                                {
                                    hasMore = wishlist.HasMore;
                                    idList.AddRange(wishlist.Select(wish => wish.VisualNovelId));
                                    //dbWishlistToAdd.AddRange(wishlist);
                                    wishListItems.AddRange(wishlist.Select(item => new VnWishList()
                                    {
                                        UserId   = item.UserId,
                                        VnId     = item.VisualNovelId,
                                        Priority = item.Priority.ToString(),
                                        Added    = item.AddedOn.ToString(CultureInfo.InvariantCulture)
                                    }));
                                    page++;
                                }
                                else
                                {
                                    HandleError.HandleErrors(client.GetLastError(), errorCounter);
                                    errorCounter++;
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            Globals.Logger.Error(ex);
                            throw;
                        }
                    }
                    //get names from ids on wishlist, and add them to ObservableCollection
                    hasMore = true;
                    page    = 1;
                    while (hasMore)
                    {
                        ro.Page  = page;
                        ro.Count = 25;
                        try
                        {
                            var data = await client.GetVisualNovelAsync(VndbFilters.Id.Equals(idList.ToArray()), VndbFlags.Basic, ro);

                            if (data != null)
                            {
                                hasMore = data.HasMore;
                                foreach (var item in data)
                                {
                                    _userListCollection.Add(item.Name);
                                    dbItemsToAdd.Add(new Tuple <uint, string>(item.Id, item.Name));
                                }
                                page++;
                            }
                            else
                            {
                                HandleError.HandleErrors(client.GetLastError(), errorCounter);
                                errorCounter++;
                            }
                        }
                        catch (Exception ex)
                        {
                            Globals.Logger.Error(ex);
                            throw;
                        }
                    }
                    client.Dispose();
                }
                AddToIdListDb(dbItemsToAdd);
                AddWishlistToDb(wishListItems, removeItems);

                Globals.StatusBar.ProgressText     = "Done";
                Globals.StatusBar.IsDbProcessing   = false;
                Globals.StatusBar.IsWorkProcessing = false;
                await Task.Delay(1500);

                Globals.StatusBar.ProgressText = string.Empty;
                IsUserInputEnabled             = true;
            }
        }
Exemplo n.º 8
0
        private async Task AddToDatabase(VndbResponse <VisualNovel> visualNovels, List <Release> releases, List <Character> characters)
        {
            try
            {
                #region VnInfo

                VisualNovel visualNovel = visualNovels.FirstOrDefault();
                if (visualNovel != null)
                {
                    using (var context = new DatabaseContext())
                    {
                        #region VnInfo
                        context.VnInfo.Add(new VnInfo
                        {
                            VnId             = visualNovel.Id,
                            Title            = visualNovel.Name,
                            Original         = visualNovel.OriginalName,
                            Released         = visualNovel.Released?.ToString() ?? null,
                            Languages        = ConvertToCsv(visualNovel.Languages),
                            OriginalLanguage = ConvertToCsv(visualNovel.OriginalLanguages),
                            Platforms        = ConvertToCsv(visualNovel.Platforms),
                            Aliases          = ConvertToCsv(visualNovel.Aliases),
                            Length           = visualNovel.Length?.ToString(),
                            Description      = visualNovel.Description,
                            ImageLink        = visualNovel.Image,
                            ImageNsfw        = visualNovel.IsImageNsfw.ToString(),
                            Popularity       = visualNovel.Popularity,
                            Rating           = visualNovel.Rating
                        });
                        #endregion

                        #region VnInfoAnime
                        foreach (AnimeMetadata anime in visualNovel.Anime)
                        {
                            context.VnInfoAnime.Add(new EF.Entity.VnInfo.VnInfoAnime
                            {
                                VnId      = visualNovel.Id,
                                AniDbId   = anime.AniDbId,
                                AnnId     = anime.AnimeNewsNetworkId,
                                AniNfoId  = anime.AnimeNfoId,
                                TitleEng  = anime.RomajiTitle,
                                TitleJpn  = anime.KanjiTitle,
                                Year      = anime.AiringYear?.ToString() ?? null,
                                AnimeType = anime.Type
                            });
                        }
                        #endregion

                        #region VnInfoLinks
                        context.VnInfoLinks.Add(new VnInfoLinks
                        {
                            VnId      = visualNovel.Id,
                            Wikipedia = visualNovel.VisualNovelLinks.Wikipedia,
                            Encubed   = visualNovel.VisualNovelLinks.Encubed,
                            Renai     = visualNovel.VisualNovelLinks.Renai
                        });
                        #endregion

                        #region VnScreens
                        if (visualNovel.Screenshots.Count > 0)
                        {
                            foreach (ScreenshotMetadata screenshot in visualNovel.Screenshots)
                            {
                                context.VnInfoScreens.Add(new VnInfoScreens
                                {
                                    VnId      = visualNovel.Id,
                                    ImageUrl  = screenshot.Url,
                                    ReleaseId = screenshot.ReleaseId,
                                    Nsfw      = screenshot.IsNsfw.ToString(),
                                    Height    = screenshot.Height,
                                    Width     = screenshot.Width
                                });
                            }
                        }
                        #endregion

                        #region VnInfoRelations
                        if (visualNovel.Relations.Count > 0)
                        {
                            foreach (VisualNovelRelation relation in visualNovel.Relations)
                            {
                                context.VnInfoRelations.Add(new VnInfoRelations
                                {
                                    VnId       = visualNovel.Id,
                                    RelationId = relation.Id,
                                    Relation   = relation.Type.ToString(),
                                    Title      = relation.Title,
                                    Original   = relation.Original,
                                    Official   = relation.Official ? "Yes" : "No"
                                });
                            }
                        }
                        #endregion

                        #region VnInfoStaff
                        if (visualNovel.Staff.Count > 0)
                        {
                            foreach (StaffMetadata staff in visualNovel.Staff)
                            {
                                context.VnInfoStaff.Add(new VnInfoStaff
                                {
                                    VnId     = visualNovel.Id,
                                    StaffId  = staff.StaffId,
                                    AliasId  = staff.AliasId,
                                    Name     = staff.Name,
                                    Original = staff.Kanji,
                                    Role     = staff.Role,
                                    Note     = staff.Note
                                });
                            }
                        }
                        #endregion
                        context.SaveChanges();
                    }

                    #region VnTags
                    if (visualNovel.Tags.Count > 0)
                    {
                        await Task.Run((() => GetDetailsFromTagDump(visualNovel.Tags)));
                    }
                    #endregion

                    if (Globals.StatusBar.ProgressPercentage != null)
                    {
                        Globals.StatusBar.ProgressPercentage = (double)Globals.StatusBar.ProgressPercentage + _progressIncrement;
                    }
                }
                #endregion

                #region VnCharacter

                foreach (Character character in characters)
                {
                    using (var context = new DatabaseContext())
                    {
                        #region VnCharacter
                        context.VnCharacter.Add(new EF.Entity.VnCharacter.VnCharacter
                        {
                            VnId        = _vnid,
                            CharacterId = character.Id,
                            Name        = character.Name,
                            Original    = character.OriginalName,
                            Gender      = character.Gender.ToString(),
                            BloodType   = character.BloodType.ToString(),
                            Birthday    = ConvertBirthday(character.Birthday),
                            Aliases     = ConvertToCsv(character.Aliases),
                            Description = character.Description,
                            ImageLink   = character.Image,
                            Bust        = Convert.ToInt32(character.Bust),
                            Waist       = Convert.ToInt32(character.Waist),
                            Hip         = Convert.ToInt32(character.Hip),
                            Height      = Convert.ToInt32(character.Height),
                            Weight      = Convert.ToInt32(character.Weight)
                        });
                        #endregion

                        #region VnCharacterVns
                        foreach (VndbSharp.Models.Character.VisualNovelMetadata vn in character.VisualNovels)
                        {
                            context.VnCharacterVns.Add(new VnCharacterVns
                            {
                                CharacterId  = character.Id,
                                VnId         = vn.Id,
                                ReleaseId    = vn.ReleaseId,
                                SpoilerLevel = (byte)vn.SpoilerLevel,
                                Role         = vn.Role.ToString()
                            });
                        }
                        #endregion
                        context.SaveChanges();
                    }


                    #region VnCharacterTraits
                    if (character.Traits.Count > 0)
                    {
                        await Task.Run(() => GetDetailsFromTraitDump(character.Traits, character.Id));
                    }
                    #endregion

                    if (Globals.StatusBar.ProgressPercentage != null)
                    {
                        Globals.StatusBar.ProgressPercentage = (double)Globals.StatusBar.ProgressPercentage + _progressIncrement;
                    }
                }

                #endregion

                #region VnRelease

                foreach (Release release in releases)
                {
                    using (var context = new DatabaseContext())
                    {
                        #region VnRelease
                        context.VnRelease.Add(new EF.Entity.VnRelease.VnRelease
                        {
                            VnId        = _vnid,
                            ReleaseId   = release.Id,
                            Title       = release.Name,
                            Original    = release.OriginalName,
                            Released    = release.Released.ToString(),
                            ReleaseType = release.Type.ToString(),
                            Patch       = release.IsPatch.ToString(),
                            Freeware    = release.IsFreeware.ToString(),
                            Doujin      = release.IsDoujin.ToString(),
                            Languages   = ConvertToCsv(release.Languages),
                            Website     = release.Website,
                            Notes       = release.Notes,
                            MinAge      = Convert.ToByte(release.MinimumAge),
                            Gtin        = release.Gtin,
                            Catalog     = release.Catalog,
                            Platforms   = ConvertToCsv(release.Platforms),
                            Resolution  = release.Resolution,
                            Voiced      = release.Voiced.ToString(),
                            Animation   = string.Join(",", release.Animation)
                        });
                        #endregion

                        #region VnReleaseMedia
                        if (release.Media.Count <= 0)
                        {
                            continue;
                        }
                        foreach (Media media in release.Media)
                        {
                            context.VnReleaseMedia.Add(new VnReleaseMedia
                            {
                                ReleaseId = release.Id,
                                Medium    = media.Medium,
                                Quantity  = media.Quantity
                            });
                        }
                        #endregion

                        #region VnReleaseProducers
                        if (release.Producers.Count <= 0)
                        {
                            continue;
                        }
                        foreach (ProducerRelease producer in release.Producers)
                        {
                            context.VnReleaseProducers.Add(new VnReleaseProducers
                            {
                                ReleaseId    = release.Id,
                                ProducerId   = producer.Id,
                                Developer    = producer.IsDeveloper.ToString(),
                                Publisher    = producer.IsPublisher.ToString(),
                                Name         = producer.Name,
                                Original     = producer.OriginalName,
                                ProducerType = producer.ProducerType
                            });
                        }
                        #endregion

                        #region VnReleaseVns
                        if (release.VisualNovels.Count <= 0)
                        {
                            continue;
                        }
                        foreach (VndbSharp.Models.Release.VisualNovelMetadata vn in release.VisualNovels)
                        {
                            context.VnReleaseVn.Add(new VnReleaseVn
                            {
                                ReleaseId = release.Id,
                                VnId      = _vnid,
                                Name      = vn.Name,
                                Original  = vn.OriginalName
                            });
                        }
                        #endregion
                        context.SaveChanges();
                    }
                }


                #endregion End VnRelease

                #region UserData

                using (var context = new DatabaseContext())
                {
                    context.VnUserData.Add(new VnUserData
                    {
                        VnId       = _vnid,
                        ExePath    = FileName,
                        IconPath   = IconName,
                        LastPlayed = String.Empty,
                        PlayTime   = "0,0,0,0"
                    });
                    context.SaveChanges();
                }

                #endregion


                InputVnId = 0;
                FileName  = String.Empty;
                VnName    = String.Empty;
                IconName  = String.Empty;

                if (Globals.StatusBar.ProgressPercentage != null)
                {
                    Globals.StatusBar.ProgressPercentage = 100;
                }
                Globals.StatusBar.ProgressText = "Done";
                await Task.Delay(1500);

                Globals.StatusBar.ProgressPercentage = null;
                Globals.StatusBar.IsDbProcessing     = false;
                Globals.StatusBar.IsWorkProcessing   = false;
                Globals.StatusBar.ProgressText       = string.Empty;
                VnMainViewModel.ClearCollectionsCommand.Execute(null);
                VnMainViewModel.LoadBindVnDataCommand.Execute(null);
            }
            catch (Exception ex)
            {
                Globals.Logger.Error(ex);
                throw;
            }
            finally
            {
                IsUserInputEnabled = true;
            }
        }