示例#1
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;
            }
        }
        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 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;
        }