private void OnDeleteCommand(object obj)
        {
            if (IsLoading)
            {
                ToastHelper.ShowMessage("加载中,请稍后");
                return;
            }
            var localItem = obj as LocalBookItemViewModel;

            if (localItem == null)
            {
                return;
            }
            IsLoading = true;

            Task.Run(() =>
            {
                var reslut = DbLocalBook.DeleteBook(AppDataPath.GetLocalBookDbPath(),
                                                    localItem.CurrentBook.BookId);

                DispatcherHelper.CheckBeginInvokeOnUI(() =>
                {
                    if (!reslut)
                    {
                        ToastHelper.ShowMessage($"{localItem.CurrentBook.BookName}删除失败,请重试", false);
                        return;
                    }
                    localItem.IsDeleted = true;
                    LocalBooks.Remove(localItem);
                    IsLoading = false;
                });
            });
        }
        public void InserOrUpdateBook(Book book)
        {
            if (book == null)
            {
                return;
            }

            var temp = LocalBooks.FirstOrDefault(p => p.CurrentBook.BookId == book.BookId);

            DbLocalBook.InsertOrUpdatBook(AppDataPath.GetLocalBookDbPath(), book);

            DispatcherHelper.CheckBeginInvokeOnUI(() =>
            {
                if (temp != null)
                {
                    LocalBooks.Remove(temp);
                }
                LocalBooks.Insert(0, new LocalBookItemViewModel(book));
            });

            if (!IsInit)
            {
                GetLocalBookFromDb();
            }
        }
예제 #3
0
 public void PopulateMatch()
 {
     if (Edition != null)
     {
         LocalBooks = LocalBooks.Concat(ExistingTracks).DistinctBy(x => x.Path).ToList();
         foreach (var localTrack in LocalBooks)
         {
             localTrack.Edition = Edition;
             localTrack.Book    = Edition.Book.Value;
             localTrack.Author  = Edition.Book.Value.Author.Value;
         }
     }
 }
        public override void OnRefreshCommand(object obj)
        {
            if (IsLoading)
            {
                return;
            }

            if (LocalBooks.Any(p => p.IsUpdating == true))
            {
                ToastHelper.ShowMessage("正在更新数据,请稍后刷新");
                return;
            }

            GetLocalBookFromDb();
        }
        private void GetLocalBookFromDb()
        {
            DispatcherHelper.CheckBeginInvokeOnUI(() =>
            {
                LocalBooks.Clear();
                GC.Collect();
                IsLoading = true;
            });

            Task.Run(() =>
            {
                try
                {
                    var list = DbLocalBook.GetBooks(AppDataPath.GetLocalBookDbPath());
                    if (list == null || list.Count <= 0)
                    {
                        return;
                    }

                    foreach (var book in list)
                    {
                        var localVm = new LocalBookItemViewModel()
                        {
                            CurrentBook = book
                        };
                        DispatcherHelper.CheckBeginInvokeOnUI(() =>
                        {
                            LocalBooks.Add(localVm);
                        });

                        localVm.CheckUpdate();
                    }
                }
                catch (Exception e)
                {
                    Debug.WriteLine($"{e.Message}\n{e.StackTrace}");
                }
                finally
                {
                    DispatcherHelper.CheckBeginInvokeOnUI(() =>
                    {
                        IsLoading = false;
                        IsInit    = true;
                    });
                }
            });
        }
예제 #6
0
        public void PopulateMatch(bool keepAllEditions)
        {
            if (Edition != null)
            {
                LocalBooks = LocalBooks.Concat(ExistingTracks).DistinctBy(x => x.Path).ToList();

                if (!keepAllEditions)
                {
                    // Manually clone the edition / book to avoid holding references to *every* edition we have
                    // seen during the matching process
                    var edition = new Edition();
                    edition.UseMetadataFrom(Edition);
                    edition.UseDbFieldsFrom(Edition);

                    var fullBook = Edition.Book.Value;

                    var book = new Book();
                    book.UseMetadataFrom(fullBook);
                    book.UseDbFieldsFrom(fullBook);
                    book.Author.Value.UseMetadataFrom(fullBook.Author.Value);
                    book.Author.Value.UseDbFieldsFrom(fullBook.Author.Value);
                    book.Author.Value.Metadata = fullBook.AuthorMetadata.Value;
                    book.AuthorMetadata        = fullBook.AuthorMetadata.Value;
                    book.BookFiles             = fullBook.BookFiles;
                    book.Editions = new List <Edition> {
                        edition
                    };

                    if (fullBook.SeriesLinks.IsLoaded)
                    {
                        book.SeriesLinks = fullBook.SeriesLinks.Value.Select(l => new SeriesBookLink
                        {
                            Book   = book,
                            Series = new Series
                            {
                                ForeignSeriesId  = l.Series.Value.ForeignSeriesId,
                                Title            = l.Series.Value.Title,
                                Description      = l.Series.Value.Description,
                                Numbered         = l.Series.Value.Numbered,
                                WorkCount        = l.Series.Value.WorkCount,
                                PrimaryWorkCount = l.Series.Value.PrimaryWorkCount
                            },
                            IsPrimary      = l.IsPrimary,
                            Position       = l.Position,
                            SeriesPosition = l.SeriesPosition
                        }).ToList();
                    }
                    else
                    {
                        book.SeriesLinks = fullBook.SeriesLinks;
                    }

                    edition.Book = book;

                    Edition = edition;

                    foreach (var localTrack in LocalBooks)
                    {
                        localTrack.Edition   = edition;
                        localTrack.Book      = book;
                        localTrack.Author    = book.Author.Value;
                        localTrack.PartCount = LocalBooks.Count;
                    }
                }
                else
                {
                    foreach (var localTrack in LocalBooks)
                    {
                        localTrack.Edition   = Edition;
                        localTrack.Book      = Edition.Book.Value;
                        localTrack.Author    = Edition.Book.Value.Author.Value;
                        localTrack.PartCount = LocalBooks.Count;
                    }
                }
            }
        }
예제 #7
0
 public override string ToString()
 {
     return("[" + string.Join(", ", LocalBooks.Select(x => Path.GetDirectoryName(x.Path)).Distinct()) + "]");
 }
예제 #8
0
        /// <summary>
        /// Load local database from user
        /// </summary>
        /// <returns></returns>
        public async static void UpdateLocalDb()
        {
            try
            {
                BUser        bUser        = new BUser();
                BooksService booksService = new BooksService();
                LocalBooks   localBooks   = new LocalBooks();
                BBooks       bBooks       = new BBooks();

                //todo - get user by signin email
                User user             = bUser.GetUserLocal();
                bool ContinuosProcess = true;

                while (ContinuosProcess)
                {
                    //User not logged
                    if (user == null)
                    {
                        break;
                    }

                    Synchronizing = true;

                    if (CrossConnectivity.Current.IsConnected)
                    {
                        DateTime LastUptade = user.LastUpdate;

                        List <Books.Book> booksList = await localBooks.GetBooksLocalByLastUpdate(user.Id, user.LastUpdate);

                        //update fb database
                        foreach (Books.Book book in booksList)
                        {
                            //if the book has a local temporary Guid key, register it in the firebase
                            if (Guid.TryParse(book.BookKey, out Guid localBookId))
                            {
                                //define the key has a null for register the book in firebase
                                book.BookKey = null;

                                (bool success, string res) = await booksService.AddBook(book, user);

                                if (success)
                                {
                                    localBooks.UpdateLocalBookKey(localBookId, res, user.Id);
                                }
                                else
                                {
                                    throw (new Exception($"Não foi possivel sincronizar o livro {book.BookKey}, res: {res}"));
                                }
                            }
                            else
                            {
                                localBooks.UpdateBook(book, user.Id);
                            }
                        }

                        foreach (Books.Book book in await booksService.GetBooksByLastUpdate(user))
                        {
                            localBooks.SyncUpdateBook(book, user.Id);

                            if (LastUptade < book.LastUpdate)
                            {
                                LastUptade = book.LastUpdate;
                            }
                        }
                        bUser.UpdateUserLastUpdateLocal(user.Id, LastUptade);
                    }

                    Synchronizing = false;
                    //in a interval of thre minutes check updates
                    await Task.Delay(180000);
                }
            }
            catch (Exception ex) { throw ex; }
        }