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(); } }
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; }); } }); }
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; } } } }
public override string ToString() { return("[" + string.Join(", ", LocalBooks.Select(x => Path.GetDirectoryName(x.Path)).Distinct()) + "]"); }
/// <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; } }