Gestion des favoris

master
Lucas Evard 2 years ago
parent c2f133206b
commit bb3aabf408

@ -21,7 +21,7 @@ namespace Model
Task<Contact> AddContact(Contact contact);
Task<bool> RemoveContact(Contact contact);
Task<Tuple<long, IEnumerable<Book>>> GetFavoritesBooks(int index, int count);
Task<bool> LendBook(Book book, Contact contact, DateTime? loanDate);
Task<bool> GetBackBook(Book book, DateTime? returnedDate);
Task<bool> BorrowBook(Book book, Contact owner, DateTime? borrowedDate);

@ -62,6 +62,22 @@ namespace Model
return UserLibraryManager.RemoveBook(book);
}
public Task<bool> AddBookInFavoriteList(Book book)
{
return UserLibraryManager.AddToFavorites(book);
}
public Task<bool> DeleteBookInFavoriteList(Book book)
{
return UserLibraryManager.RemoveFromFavorites(book);
}
public async Task<(long count, IEnumerable<Book> books)> GetAllBooksFromFavorite(int index, int count)
{
var result= await UserLibraryManager.GetFavoritesBooks(index, count);
return (result.Item1, result.Item2);
}
public async Task<Book> GetBookByIdFromCollection(string id)
=> await UserLibraryManager.GetBookById(id);

@ -8,7 +8,6 @@ public partial class AppShell : Shell
Routing.RegisterRoute("StatutPage", typeof(StatutPage));
Routing.RegisterRoute("SharePage", typeof(SharePage));
Routing.RegisterRoute("LaterPage", typeof(LaterPage));
Routing.RegisterRoute("LikePage", typeof(LikePage));
Routing.RegisterRoute("Filter", typeof(Filter));
Routing.RegisterRoute("BookDetail", typeof(BookDetail));
InitializeComponent();

@ -36,10 +36,7 @@ namespace PocketBook.Applicative_VM
string isbn = await App.Current.MainPage.DisplayPromptAsync("Ajout d'un livre par ISBN", "Entrez l'ISBN présent sur votre livre pour l'ajouter à votre librarie");
if (isbn != null) {
Manager.AddBookByISBN(isbn);
((Command)PaginationVM.NormalIncreasePage).ChangeCanExecute();
((Command)PaginationVM.NormalDecreasePage).ChangeCanExecute();
((Command)PaginationVM.LaterIncreasePage).ChangeCanExecute();
((Command)PaginationVM.LaterDecreasePage).ChangeCanExecute();
PaginationVM.Refresh();
}
}
); ;

@ -34,14 +34,20 @@ namespace PocketBook.Applicative_VM
});
MoveBook = new Command(async o =>
{
string action = await App.Current.MainPage.DisplayActionSheet("Selectionne où tu veux déplacer ce livre", "Retour", "Mettre à la poubelle", "Déplacer en favoris");
string action;
if (PaginationVM.Page == "Like")
{
action = await App.Current.MainPage.DisplayActionSheet("Selectionne où tu veux déplacer ce livre", "Retour", "Mettre à la poubelle", "Supprimer des favoris");
}
else action = await App.Current.MainPage.DisplayActionSheet("Selectionne où tu veux déplacer ce livre", "Retour", "Mettre à la poubelle", "Déplacer en favoris");
Manager.MoveBook(action);
_ = Toast.Make("Déplacement du livre en => " + action, ToastDuration.Short, 14).Show(new CancellationTokenSource().Token);
((Command)PaginationVM.NormalIncreasePage).ChangeCanExecute();
((Command)PaginationVM.NormalDecreasePage).ChangeCanExecute();
((Command)PaginationVM.LaterIncreasePage).ChangeCanExecute();
((Command)PaginationVM.LaterDecreasePage).ChangeCanExecute();
_ = Toast.Make("Confirmation pour l'action: " + action, ToastDuration.Short, 14).Show(new CancellationTokenSource().Token);
if (action == "Mettre à la poubelle" || action== "Supprimer des favoris")
{
PaginationVM.Refresh();
await App.Current.MainPage.Navigation.PopAsync();
}
});
}
}

@ -8,6 +8,8 @@ namespace PocketBook.Applicative_VM
public class LaterPageVM
{
public ICommand NavigateDetailPage { get; private set; }
public ICommand NavigateAndLoadData { get; private set; }
public NavigatorVM NavigateCommandBooks { get; private set; }
public ButtonsVM ButtonsVM { get; private set; }
public ManagerVM Manager { get; private set; }
@ -20,12 +22,19 @@ namespace PocketBook.Applicative_VM
Manager = manager;
PaginationVM = paginationVM;
NavigateCommandBooks = navigation;
Manager.LoadBooksReadLaterFromManager();
NavigateDetailPage = new Command<BookVM>(book =>
{
Manager.SelectedBook = book;
NavigateCommandBooks.Navigateto.Execute("BookDetail");
});
NavigateAndLoadData = new Command(async o =>
{
Manager.Index = 0;
PaginationVM.Page = "Later";
await Manager.LoadBooksReadLaterFromManager();
PaginationVM.Refresh();
NavigateCommandBooks.Navigateto.Execute("TousPage");
});
}
}
}

@ -0,0 +1,32 @@
using System;
using System.Windows.Input;
using ViewModel;
namespace PocketBook.Applicative_VM
{
public class LikeVM
{
public ManagerVM Manager { get; private set; }
public NavigatorVM NavigatorVM { get; private set; }
public PaginationVM PaginationVM { get; private set; }
public ICommand NavigateAndLoad { get; private set; }
public LikeVM(ManagerVM manager, NavigatorVM navigatorVM,PaginationVM paginationVM)
{
PaginationVM = paginationVM;
Manager = manager;
NavigatorVM = navigatorVM;
NavigateAndLoad = new Command( async o =>
{
Manager.Index = 0;
PaginationVM.Page = "Like";
await Manager.GetFavoriteBooks();
PaginationVM.Refresh();
NavigatorVM.Navigateto.Execute("TousPage");
});
}
}
}

@ -10,60 +10,62 @@ namespace PocketBook.Applicative_VM
public ManagerVM Manager { get; private set; }
public ICommand NormalIncreasePage { get; private set; }
public ICommand NormalDecreasePage { get; private set; }
public ICommand LaterIncreasePage { get; private set; }
public ICommand LaterDecreasePage { get; private set; }
public string Page;
public void Refresh()
{
((Command)NormalIncreasePage).ChangeCanExecute();
((Command)NormalDecreasePage).ChangeCanExecute();
}
public PaginationVM(ManagerVM managerVM)
{
Manager = managerVM;
NormalIncreasePage = new Command(execute: () =>
NormalIncreasePage = new Command(execute:async () =>
{
Manager.Index++;
Manager.LoadBooksFromManager();
((Command)NormalIncreasePage).ChangeCanExecute();
((Command)NormalDecreasePage).ChangeCanExecute();
switch (Page)
{
case "TousPage":
await Manager.LoadBooksFromManager();
break;
case "Later":
await Manager.LoadBooksReadLaterFromManager();
break;
case "Like":
await Manager.GetFavoriteBooks();
break;
}
Refresh();
},
canExecute: () => {
return Manager.NbBook / Manager.NBLIVREPARPAGE > Manager.Index;
});
NormalDecreasePage = new Command(execute:() =>
NormalDecreasePage = new Command(execute:async() =>
{
if (Manager.Index > 0)
{
Manager.Index--;
Manager.LoadBooksFromManager();
((Command)NormalIncreasePage).ChangeCanExecute();
((Command)NormalDecreasePage).ChangeCanExecute();
switch (Page)
{
case "TousPage":
await Manager.LoadBooksFromManager();
break;
case "Later":
await Manager.LoadBooksReadLaterFromManager();
break;
case "Like":
await Manager.GetFavoriteBooks();
break;
}
Refresh();
}
},
canExecute: () => {
return Manager.Index > 0;
});
LaterIncreasePage = new Command(execute: () =>
{
Manager.IndexLater++;
Manager.LoadBooksFromManager();
((Command)LaterIncreasePage).ChangeCanExecute();
((Command)LaterDecreasePage).ChangeCanExecute();
},
canExecute: () =>
{
return Manager.NbBookLater / Manager.NBLIVREPARPAGE > Manager.IndexLater;
});
LaterDecreasePage = new Command(execute: () =>
{
Manager.IndexLater--;
Manager.LoadBooksFromManager();
((Command)LaterIncreasePage).ChangeCanExecute();
((Command)LaterDecreasePage).ChangeCanExecute();
},
canExecute: () => {
return Manager.IndexLater > 0;
});
}
}
}

@ -28,9 +28,12 @@ namespace PocketBook.Applicative_VM
Manager.SelectedBook = book;
NavigateCommandBooks.Navigateto.Execute("BookDetail");
});
NavigateAndLoadData = new Command(o =>
NavigateAndLoadData = new Command(async o =>
{
Manager.LoadBooksFromManager();
Manager.Index = 0;
PaginationVM.Page = "TousPage";
await Manager.LoadBooksFromManager();
PaginationVM.Refresh();
NavigateCommandBooks.Navigateto.Execute("TousPage");
});
}

@ -54,13 +54,14 @@ public static class MauiProgram
.AddSingleton<DetailPageVM>()
.AddSingleton<PaginationVM>()
.AddSingleton<LaterPageVM>()
.AddSingleton<LikePage>()
.AddSingleton<LaterPage>()
.AddSingleton<FilterVM>()
.AddSingleton<SharePage>()
.AddSingleton<ManagerVM>()
.AddSingleton<StatutPage>()
.AddSingleton<Filter>()
.AddSingleton<LikeVM>()
;
#if DEBUG
builder.Logging.AddDebug();

@ -1,40 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="PocketBook.LikePage"
xmlns:local="clr-namespace:PocketBook"
Title="Favoris"
Shell.ForegroundColor="{StaticResource Primary}">
<ContentPage.Resources>
</ContentPage.Resources>
<ContentPage.ToolbarItems>
<ToolbarItem Text="Ajouter" Priority="1"
Order="Primary" IconImageSource="plus.png"/>
<ToolbarItem Text="Order" Priority="2"
Order="Primary" IconImageSource="arrows.png"/>
</ContentPage.ToolbarItems>
<ScrollView Grid.Row="1">
<VerticalStackLayout>
<local:ContentViewBook BookImage="buveurencre.jpg" BookName="La horde du contrevent" AutorName="Alain Damasio" BookStatus="À lire plus tard"/>
<Line Style="{StaticResource LineStyle3}"/>
<local:ContentViewBook BookImage="buveurencre.jpg" BookName="La zone du dehors" AutorName="Alain Damasio" BookStatus="À lire plus tard"/>
<Line Style="{StaticResource LineStyle3}"/>
<local:ContentViewBook BookImage="buveurencre.jpg" BookName="L'équateur d'Einstein" AutorName="Cixin Liu" BookStatus="À lire plus tard"/>
<Line Style="{StaticResource LineStyle3}"/>
<local:ContentViewBook BookImage="buveurencre.jpg" BookName="La forêt sombre" AutorName="Cixin Liu" BookStatus="À lire plus tard"/>
<Line Style="{StaticResource LineStyle3}"/>
<local:ContentViewBook BookImage="buveurencre.jpg" BookName="Le problème à trois corps" AutorName="Cixin Liu" BookStatus="À lire plus tard"/>
<Line Style="{StaticResource LineStyle3}"/>
<local:ContentViewBook BookImage="buveurencre.jpg" BookName="L'équateur d'Einstein" AutorName="Cixin Liu" BookStatus="À lire plus tard"/>
<Line Style="{StaticResource LineStyle3}"/>
<local:ContentViewBook BookImage="buveurencre.jpg" BookName="La forêt sombre" AutorName="Cixin Liu" BookStatus="À lire plus tard"/>
<Line Style="{StaticResource LineStyle3}"/>
<local:ContentViewBook BookImage="buveurencre.jpg" BookName="Le problème à trois corps" AutorName="Cixin Liu" BookStatus="À lire plus tard"/>
</VerticalStackLayout>
</ScrollView>
</ContentPage>

@ -1,16 +0,0 @@
using CommunityToolkit.Maui.Views;
using PocketBook.Applicative_VM;
namespace PocketBook;
public partial class LikePage : ContentPage
{
public NavigatorVM NavigateCommandBooks { get; private set; }
public LikePage(NavigatorVM navigator)
{
NavigateCommandBooks = navigator;
InitializeComponent();
}
}

@ -43,14 +43,14 @@
<Line Style="{StaticResource LineStyle2}"/>
<local:ContentViewFilter Command="{Binding NavigateCommandBooks.Navigateto}" CommandParameter="LaterPage" FilterImageName="arrow_forward.png"
<local:ContentViewFilter Command="{Binding LaterPageVM.NavigateAndLoadData}" FilterImageName="arrow_forward.png"
FilterName="A lire plus tard"/>
<Line Style="{StaticResource LineStyle2}"/>
<local:ContentViewFilter Command="{Binding NavigateCommandBooks.Navigateto}" CommandParameter="StatutPage" FilterImageName="eyeglasses.png"
FilterName="Statut de lecture"/>
<Line Style="{StaticResource LineStyle2}"/>
<local:ContentViewFilter Command="{Binding NavigateCommandBooks.Navigateto}" CommandParameter="LikePage" FilterImageName="heart_fill.png"
<local:ContentViewFilter Command="{Binding LikeVM.NavigateAndLoad}" FilterImageName="heart_fill.png"
FilterName="Favoris"/>
</StackLayout>
<Line BackgroundColor="{StaticResource LineColor1}"/>

@ -8,8 +8,13 @@ public partial class MainPage : ContentPage
public NavigatorVM NavigateCommandBooks { get; private set; }
public NavigatorAndFilterVM NavigatorAndFilterVM { get; private set; }
public TousPageVM TousPageVM { get; private set; }
public MainPage(NavigatorVM navigation, NavigatorAndFilterVM navigatorAndFilterVM, TousPageVM tousPageVM)
public LikeVM LikeVM { get; private set; }
public LaterPageVM LaterPageVM { get; private set; }
public MainPage(NavigatorVM navigation, NavigatorAndFilterVM navigatorAndFilterVM, TousPageVM tousPageVM,LikeVM likeVM,LaterPageVM laterPageVM)
{
LikeVM = likeVM;
LaterPageVM = laterPageVM;
TousPageVM = tousPageVM;
NavigatorAndFilterVM = navigatorAndFilterVM;
NavigateCommandBooks = navigation;

@ -77,9 +77,6 @@
<MauiXaml Update="Pages\LaterPage.xaml">
<Generator>MSBuild:Compile</Generator>
</MauiXaml>
<MauiXaml Update="Pages\LikePage.xaml">
<Generator>MSBuild:Compile</Generator>
</MauiXaml>
<MauiXaml Update="NewContent1.xaml">
<Generator>MSBuild:Compile</Generator>
</MauiXaml>

@ -4,6 +4,7 @@ using Model;
using System.Linq;
using LibraryDTO;
using System.Xml.Linq;
using System.Reflection;
namespace StubLib
{
@ -416,6 +417,12 @@ namespace StubLib
{
return Task.FromResult(Tuple.Create(Contacts.LongCount(), Contacts.Skip(index*count).Take(count)));
}
public Task<Tuple<long, IEnumerable<Book>>> GetFavoritesBooks(int index, int count)
{
return Task.FromResult(Tuple.Create(Favorites.LongCount(), Favorites.Skip(index * count).Take(count)));
}
}
}

@ -29,7 +29,7 @@ public class ManagerVM : BaseViewModel<Manager>
:this(new Manager(libraryManager,userLibraryManager))
{}
public async void LoadBooksFromManager()
public async Task LoadBooksFromManager()
{
var result = await Model.GetBooksFromCollection(index, NBLIVREPARPAGE, "");
NbBook = (int)result.count;
@ -42,17 +42,17 @@ public class ManagerVM : BaseViewModel<Manager>
Refresh();
}
public async void LoadBooksReadLaterFromManager()
public async Task LoadBooksReadLaterFromManager()
{
var result = await Model.GetBooksFromCollection(indexLater, NBLIVREPARPAGE, "");
var result = await Model.GetBooksFromCollection(index, NBLIVREPARPAGE, "");
books.Clear();
nbBookLater = 0;
nbBook = 0;
foreach (Book book in result.books)
{
if (book.Status == Status.ToBeRead)
{
books.Add(new BookVM(book));
nbBookLater++;
nbBook++;
}
}
Refresh();
@ -192,17 +192,16 @@ public class ManagerVM : BaseViewModel<Manager>
public ManagerVM(Manager model) : base(model)
{
LoadBooks = new RelayCommand<string>(o => LoadBooksFromManager());
Books = new ReadOnlyObservableCollection<BookVM>(books);
Filters= new ReadOnlyObservableCollection<Tuple<string, int>>(filters);
}
public void AddBookByISBN(string isbn)
public async void AddBookByISBN(string isbn)
{
var result= Model.GetBookByISBN(isbn).Result;
if (result != null) {
Model.AddBookToCollection(result.Id);
LoadBooksFromManager();
await Model.AddBookToCollection(result.Id);
await LoadBooksFromManager();
Refresh();
}
}
@ -216,6 +215,34 @@ public class ManagerVM : BaseViewModel<Manager>
Refresh();
}
public async void AddFavoriteBook()
{
var result = await Model.GetBookById(SelectedBook.Id);
await Model.AddBookInFavoriteList(result);
}
public async void RemoveFavoriteBook()
{
var result = await Model.GetBookById(SelectedBook.Id);
NbBook--;
await Model.DeleteBookInFavoriteList(result);
books.Remove(SelectedBook);
Refresh();
}
public async Task GetFavoriteBooks()
{
var result = await Model.GetAllBooksFromFavorite(index, NBLIVREPARPAGE);
NbBook = (int)result.count;
books.Clear();
foreach (Book book in result.books)
{
books.Add(new BookVM(book));
}
Refresh();
}
public void MoveBook(string action)
{
switch (action)
@ -224,6 +251,10 @@ public class ManagerVM : BaseViewModel<Manager>
RemoveSelectedBookToCollection();
break;
case "Déplacer en favoris":
AddFavoriteBook();
break;
case "Supprimer des favoris":
RemoveFavoriteBook();
break;
}
}
@ -256,24 +287,5 @@ public class ManagerVM : BaseViewModel<Manager>
private int nbBook;
public int NbBookLater
{
get => nbBookLater;
set => SetProperty(ref nbBookLater, value);
}
private int nbBookLater;
public int IndexLater
{
get => indexLater;
set
{
SetProperty(ref indexLater, value);
}
}
private int indexLater;
}

Loading…
Cancel
Save