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;
            }
        }
        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;
            }
        }
        public async void SearchName()
        {
            if (ConnectionTest.VndbTcpSocketTest() == false)
            {
                Globals.Logger.Warn("Could not connect to Vndb API over SSL");
                Globals.StatusBar.SetOnlineStatusColor(false);
                Globals.StatusBar.IsShowOnlineStatusEnabled = true;
                await Task.Delay(3500);

                Globals.StatusBar.IsShowOnlineStatusEnabled = false;
                return;
            }
            try
            {
                if (VnName == null || VnName.Length <= 2)
                {
                    return;
                }
                if (IsRunning != false)
                {
                    return;
                }
                IsRunning = true;
                using (Vndb client = new Vndb(true))
                {
                    SuggestedNamesCollection.Clear();
                    _vnNameList = null;
                    _vnNameList = await client.GetVisualNovelAsync(VndbFilters.Search.Fuzzy(VnName));

                    if (_vnNameList == null)
                    {
                        HandleError.HandleErrors(client.GetLastError(), 0);
                    }
                    //namelist gets a  list of english names if text input was english, or japanese names if input was japanese
                    List <string> nameList = IsJapaneseText(VnName) == true?_vnNameList.Select(item => item.OriginalName).ToList() : _vnNameList.Select(item => item.Name).ToList();

                    foreach (string name in nameList)
                    {
                        if (!string.IsNullOrEmpty(name))
                        {
                            SuggestedNamesCollection.Add(name);
                        }
                    }
                    IsDropDownOpen = true;
                    IsRunning      = false;
                }
            }
            catch (Exception ex)
            {
                Globals.Logger.Error(ex);
                throw;
            }
        }
示例#4
0
        private async void SetVoteList()
        {
            try
            {
                bool didErrorOccur = false;
                IsUserInputEnabled = false;
                if (VoteDropDownSelected == "No Change")
                {
                    return;
                }
                if (_vnId == 0)
                {
                    return;
                }
                using (Vndb client = new Vndb(Username, Password))
                {
                    var check = await client.GetDatabaseStatsAsync();

                    if (check == null)
                    {
                        HandleError.HandleErrors(client.GetLastError(), 0);
                        didErrorOccur = true;
                    }
                    if (didErrorOccur == false)
                    {
                        if (VoteDropDownSelected == "Clear Entry")
                        {
                            if (_vnId > 0)
                            {
                                await client.SetVoteListAsync(_vnId, null);
                            }
                        }
                        if (VoteDropDownSelected == "Add/Update Vote")
                        {
                            SetValidationRules();
                            Validator.ResultChanged += OnValidationResultChanged;
                            await ValidateAsync();

                            if (IsValid == true)
                            {
                                await client.SetVoteListAsync(_vnId, Convert.ToByte(VotelistVote.Replace(".", String.Empty)));
                            }
                        }
                    }
                }
                IsUserInputEnabled = true;
            }
            catch (Exception exception)
            {
                Globals.Logger.Error(exception);
                throw;
            }
        }
示例#5
0
        private async void BindImage()
        {
            try
            {
                using (Vndb client = new Vndb())
                {
                    var data = await client.GetVisualNovelAsync(VndbFilters.Title.Equals(SelectedItem), VndbFlags.Details);

                    if (data != null)
                    {
                        var id = data.Items[0].Id;
                        if (!File.Exists($@"{Globals.DirectoryPath}\Data\images\userlist\{id}.jpg"))
                        {
                            Globals.StatusBar.IsDownloading = true;
                            Globals.StatusBar.ProgressText  = "Loading Image";
                            Thread.Sleep(100);
                            WebClient webclient = new WebClient();
                            await webclient.DownloadFileTaskAsync(new Uri(data.Items[0].Image), $@"{Globals.DirectoryPath}\Data\images\userlist\{id}.jpg");

                            webclient.Dispose();
                            VnLinksModel.Image = new BitmapImage(new Uri($@"{Globals.DirectoryPath}\Data\images\userlist\{id}.jpg"));
                            Globals.StatusBar.IsDownloading = false;
                            Globals.StatusBar.ProgressText  = String.Empty;
                        }
                        else if (File.Exists($@"{Globals.DirectoryPath}\Data\images\userlist\{id}.jpg"))
                        {
                            VnLinksModel.Image = new BitmapImage(new Uri($@"{Globals.DirectoryPath}\Data\images\userlist\{id}.jpg"));
                        }
                    }
                    else
                    {
                        HandleError.HandleErrors(client.GetLastError(), 0);
                    }
                    client.Dispose();
                }
            }
            catch (Exception e)
            {
                Globals.Logger.Error(e);
                throw;
            }
        }
示例#6
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]);
        }
        private async Task <uint> GetVnId()
        {
            using (var context = new DatabaseContext())
            {
                uint data = 0;
                data = context.VnInfo.Where(v => v.Title == SelectedItem).Select(x => x.VnId).FirstOrDefault();
                if (data != 0)
                {
                    return(data);
                }
                if (data == 0)
                {
                    data = context.VnIdList.Where(v => v.Title == SelectedItem).Select(x => x.VnId)
                           .FirstOrDefault();
                    return(data);
                }
                if (data == 0)
                {
                    Vndb client   = new Vndb(true);
                    var  response = await client.GetVisualNovelAsync(VndbFilters.Title.Equals(SelectedItem));

                    if (response == null)
                    {
                        HandleError.HandleErrors(client.GetLastError(), 0);
                    }
                    else
                    {
                        VisualNovel firstOrDefault = response?.Items.FirstOrDefault();
                        if (firstOrDefault != null)
                        {
                            data = firstOrDefault.Id;
                        }
                        client.Logout();
                        client.Dispose();
                        return(data);
                    }
                }
                return(0);
            }
        }
        private async Task <bool> IsValidLogin()
        {
            if (string.IsNullOrEmpty(Username) || Password.Length <= 0)
            {
                return(false);
            }
            using (var client = new Vndb(Username, Password))
            {
                var users = await client.GetUserAsync(VndbFilters.Username.Equals(Username));

                if (users == null)
                {
                    HandleError.HandleErrors(client.GetLastError(), 0);
                    return(false);
                }
                else
                {
                    _userId = users.Items[0].Id;
                    return(true);
                }
            }
        }
示例#9
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;
            }
        }
示例#10
0
文件: Vn.cs 项目: TheIndra55/Sanara
        public static async Task <FeatureRequest <Response.Vn, Error.Vn> > SearchVn(string[] args, bool isChanSfw)
        {
            if (args.Length == 0)
            {
                return(new FeatureRequest <Response.Vn, Error.Vn>(null, Error.Vn.Help));
            }
            string vnName      = string.Join("", args);
            string cleanVnName = Utilities.CleanWord(vnName);
            Vndb   client      = new Vndb();
            uint   id          = 0;
            string html;
            // HttpClient doesn't really look likes to handle redirection properly
            HttpWebRequest http = (HttpWebRequest)WebRequest.Create("https://vndb.org/v/all?sq=" + vnName.Replace(' ', '+'));

            http.AllowAutoRedirect = false;
            using (HttpWebResponse response = (HttpWebResponse)http.GetResponse())
                using (Stream stream = response.GetResponseStream())
                    using (StreamReader reader = new StreamReader(stream))
                    {
                        html = reader.ReadToEnd();
                    }
            // Parse HTML and go though every VN, check the original name and translated name to get the VN id
            MatchCollection matches = Regex.Matches(html, "<a href=\"\\/v([0-9]+)\" title=\"([^\"]+)\">([^<]+)<\\/a>");

            foreach (Match match in matches)
            {
                string titleName     = Utilities.CleanWord(match.Groups[3].Value);
                string titleNameBase = match.Groups[2].Value;
                if (id == 0 && (titleName.Contains(cleanVnName) || titleNameBase.Contains(vnName)))
                {
                    id = uint.Parse(match.Groups[1].Value);
                }
                if (titleName == cleanVnName || titleNameBase == cleanVnName)
                {
                    id = uint.Parse(match.Groups[1].Value);
                    break;
                }
            }
            // If no matching name, we take the first one in the search list, if none these NotFound
            if (id == 0)
            {
                if (matches.Count == 0)
                {
                    return(new FeatureRequest <Response.Vn, Error.Vn>(null, Error.Vn.NotFound));
                }
                else
                {
                    id = uint.Parse(matches[0].Groups[1].Value);
                }
            }
            VisualNovel vn = (await client.GetVisualNovelAsync(VndbFilters.Id.Equals(id), VndbFlags.FullVisualNovel)).ToArray()[0];

            return(new FeatureRequest <Response.Vn, Error.Vn>(new Response.Vn()
            {
                originalTitle = vn.OriginalName,
                title = vn.Name,
                imageUrl = (isChanSfw && vn.IsImageNsfw) ? null : vn.Image,
                description = Utilities.RemoveExcess(vn.Description != null ? string.Join("\n", vn.Description.Split('\n').Where(x => !x.Contains("[/url]"))) : null),
                isAvailableEnglish = vn.Languages.Contains("en"),
                isAvailableWindows = vn.Platforms.Contains("win"),
                rating = vn.Rating,
                releaseYear = vn.Released?.Year,
                releaseMonth = vn.Released?.Month,
                releaseDay = vn.Released?.Day,
                length = vn.Length,
                vnUrl = "https://vndb.org/v" + vn.Id
            }, Error.Vn.None));
        }
        private async void GetVisualNovelList()
        {
            if (string.IsNullOrEmpty(_username) || _password.Length <= 0)
            {
                return;
            }
            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 VnVisualNovelList where the userId is the logged in user
                List <uint> idEntry = (from v in context.VnVisualNovelList 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 visualnovelList 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 <VnVisualNovelList>     visualNovelListItems = new List <VnVisualNovelList>();
            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 vnList
                int errorCounter = 0;
                //var vnList = await client.GetVisualNovelListAsync(VndbFilters.UserId.Equals(_userId), VndbFlags.FullVisualNovelList, ro);
                while (hasMore)
                {
                    ro.Page  = page;
                    ro.Count = 100;
                    try
                    {
                        if (dbIdList.Length > 0)
                        {
                            var vnList = await client.GetVisualNovelListAsync(VndbFilters.UserId.Equals(_userId)& VndbFilters.VisualNovel.NotEquals(dbIdList), VndbFlags.FullVisualNovelList, ro);

                            if (vnList != null && vnList.Count > 0)
                            {
                                hasMore = vnList.HasMore;
                                idList.AddRange(vnList.Select(vn => vn.VisualNovelId));
                                visualNovelListItems.AddRange(vnList.Select(item => new VnVisualNovelList()
                                {
                                    UserId = item.UserId,
                                    VnId   = item.VisualNovelId,
                                    Status = item.Status.ToString(),
                                    Notes  = item.Notes,
                                    Added  = item.AddedOn.ToString(CultureInfo.InvariantCulture)
                                }));
                                page++;
                            }
                            else if (vnList != null && vnList.Count == 0)
                            {
                                vnList = await client.GetVisualNovelListAsync(VndbFilters.UserId.Equals(_userId), VndbFlags.FullVisualNovelList, ro);

                                if (vnList != null)
                                {
                                    hasMore = vnList.HasMore;
                                    idList.AddRange(vnList.Select(vn => vn.VisualNovelId));
                                    visualNovelListItems.AddRange(vnList.Select(item => new VnVisualNovelList()
                                    {
                                        UserId = item.UserId,
                                        VnId   = item.VisualNovelId,
                                        Status = item.Status.ToString(),
                                        Notes  = item.Notes,
                                        Added  = item.AddedOn.ToString(CultureInfo.InvariantCulture)
                                    }));
                                    page++;
                                    removeItems = true;
                                }
                            }
                            else
                            {
                                HandleError.HandleErrors(client.GetLastError(), errorCounter);
                                errorCounter++;
                            }
                        }
                        else
                        {
                            var vnList = await client.GetVisualNovelListAsync(VndbFilters.UserId.Equals(_userId), VndbFlags.FullVisualNovelList, ro);

                            if (vnList != null)
                            {
                                hasMore = vnList.HasMore;
                                idList.AddRange(vnList.Select(wish => wish.VisualNovelId));
                                //dbWishlistToAdd.AddRange(votelist);
                                visualNovelListItems.AddRange(vnList.Select(item => new VnVisualNovelList()
                                {
                                    UserId = item.UserId,
                                    VnId   = item.VisualNovelId,
                                    Status = item.Status.ToString(),
                                    Notes  = item.Notes,
                                    Added  = item.AddedOn.ToString(CultureInfo.InvariantCulture)
                                }));
                                page++;
                                removeItems = true;
                            }
                            else
                            {
                                HandleError.HandleErrors(client.GetLastError(), errorCounter);
                                errorCounter++;
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Globals.Logger.Error(ex);
                        throw;
                    }
                }
                //get names from ids on vnlist, 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);
            AddVnListToDb(visualNovelListItems, removeItems);

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

            Globals.StatusBar.ProgressText = string.Empty;
            IsUserInputEnabled             = true;
        }
示例#12
0
        private async void SetVnList()
        {
            try
            {
                bool didErrorOccur = false;
                IsUserInputEnabled = false;
                if (VnListStatus == "No Change")
                {
                    return;
                }
                if (_vnId == 0)
                {
                    return;
                }
                using (Vndb client = new Vndb(Username, Password))
                {
                    var check = await client.GetDatabaseStatsAsync();

                    if (check == null)
                    {
                        HandleError.HandleErrors(client.GetLastError(), 0);
                        didErrorOccur = true;
                    }
                    if (didErrorOccur == false)
                    {
                        switch (VnListStatus)
                        {
                        case "Clear Entry":
                            if (_vnId > 0 && NoteEnabled == true && string.IsNullOrEmpty(VnListNote))
                            {
                                await client.SetVisualNovelListAsync(_vnId, null, null);
                            }
                            if (_vnId > 0)
                            {
                                await client.SetVisualNovelListAsync(_vnId, (Status?)null);
                            }
                            break;

                        case "Playing":
                            await client.SetVisualNovelListAsync(_vnId, Status.Playing);

                            break;

                        case "Finished":
                            await client.SetVisualNovelListAsync(_vnId, Status.Finished);

                            break;

                        case "Stalled":
                            await client.SetVisualNovelListAsync(_vnId, Status.Stalled);

                            break;

                        case "Dropped":
                            await client.SetVisualNovelListAsync(_vnId, Status.Dropped);

                            break;

                        case "Unknown":
                            await client.SetVisualNovelListAsync(_vnId, Status.Unknown);

                            break;
                        }
                        if (NoteEnabled == true && !string.IsNullOrEmpty(VnListNote))
                        {
                            await client.SetVisualNovelListAsync(_vnId, VnListNote);
                        }
                    }
                }
                IsUserInputEnabled = true;
            }
            catch (Exception exception)
            {
                Globals.Logger.Error(exception);
                throw;
            }
        }
示例#13
0
        private async void SetWishlist()
        {
            try
            {
                bool didErrorOccur = false;
                IsUserInputEnabled = false;
                if (WishlistPriority == "No Change")
                {
                    return;
                }
                if (_vnId == 0)
                {
                    return;
                }
                using (Vndb client = new Vndb(Username, Password))
                {
                    var check = await client.GetDatabaseStatsAsync();

                    if (check == null)
                    {
                        HandleError.HandleErrors(client.GetLastError(), 0);
                        didErrorOccur = true;
                    }
                    if (didErrorOccur == false)
                    {
                        if (WishlistPriority == "Clear Entry")
                        {
                            if (_vnId > 0)
                            {
                                await client.SetWishlistAsync(_vnId, null);
                            }
                        }
                        switch (WishlistPriority)
                        {
                        case "Clear Entry":
                            await client.SetWishlistAsync(_vnId, null);

                            break;

                        case "High":
                            await client.SetWishlistAsync(_vnId, Priority.High);

                            break;

                        case "Medium":
                            await client.SetWishlistAsync(_vnId, Priority.Medium);

                            break;

                        case "Low":
                            await client.SetWishlistAsync(_vnId, Priority.Low);

                            break;

                        case "Blacklist":
                            await client.SetWishlistAsync(_vnId, Priority.Blacklist);

                            break;
                        }
                    }
                }
                IsUserInputEnabled = true;
            }
            catch (Exception exception)
            {
                Globals.Logger.Error(exception);
                throw;
            }
        }