diff --git a/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseBoardManager.java b/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseBoardManager.java index 596607c4..e4756135 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseBoardManager.java +++ b/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseBoardManager.java @@ -48,6 +48,16 @@ public class DatabaseBoardManager { }; } + public Callable updateIncludingUserFields(final List boards) { + return () -> { + for (Board board : boards) { + helper.boardsDao.update(board); + } + + return null; + }; + } + public Callable updateOrders(final List boards) { return () -> { SelectArg id = new SelectArg(); diff --git a/Clover/app/src/main/java/org/floens/chan/core/manager/BoardManager.java b/Clover/app/src/main/java/org/floens/chan/core/manager/BoardManager.java index 49681fed..f8cd7ffc 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/manager/BoardManager.java +++ b/Clover/app/src/main/java/org/floens/chan/core/manager/BoardManager.java @@ -97,26 +97,26 @@ public class BoardManager { return savedBoardsObservable; } - public void saveBoard(Board board) { - setSaved(board, true); - } - - public void unsaveBoard(Board board) { - setSaved(board, false); - } - public void updateBoardOrders(List boards) { databaseManager.runTask(databaseManager.getDatabaseBoardManager() .updateOrders(boards)); updateSavedBoardsAndNotify(); } - private void setSaved(Board board, boolean saved) { + public void setSaved(Board board, boolean saved) { board.saved = saved; databaseManager.runTask(databaseManager.getDatabaseBoardManager().updateIncludingUserFields(board)); updateSavedBoardsAndNotify(); } + public void setAllSaved(List boards, boolean saved) { + for (Board board : boards) { + board.saved = saved; + } + databaseManager.runTask(databaseManager.getDatabaseBoardManager().updateIncludingUserFields(boards)); + updateSavedBoardsAndNotify(); + } + private void updateSavedBoardsAndNotify() { sitesWithSavedBoards.clear(); for (Site site : Sites.allSites()) { diff --git a/Clover/app/src/main/java/org/floens/chan/core/presenter/BoardSetupPresenter.java b/Clover/app/src/main/java/org/floens/chan/core/presenter/BoardSetupPresenter.java index 2f4e8d7b..b6c1e74c 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/presenter/BoardSetupPresenter.java +++ b/Clover/app/src/main/java/org/floens/chan/core/presenter/BoardSetupPresenter.java @@ -107,6 +107,8 @@ public class BoardSetupPresenter { public void onAddDialogPositiveClicked() { int count = 0; + List boardsToSave = new ArrayList<>(); + if (site.boardsType().canList) { List siteBoards = boardManager.getSiteBoards(site); Map siteBoardsByCode = new HashMap<>(); @@ -116,7 +118,7 @@ public class BoardSetupPresenter { for (String selectedSuggestion : selectedSuggestions) { Board board = siteBoardsByCode.get(selectedSuggestion); if (board != null) { - boardManager.saveBoard(board); + boardsToSave.add(board); savedBoards.add(board); count++; } @@ -124,12 +126,14 @@ public class BoardSetupPresenter { } else { for (String suggestion : selectedSuggestions) { Board board = site.createBoard(suggestion, suggestion); - boardManager.saveBoard(board); + boardsToSave.add(board); savedBoards.add(board); count++; } } + boardManager.setAllSaved(boardsToSave, true); + setOrder(); callback.setSavedBoards(savedBoards); callback.boardsWereAdded(count); @@ -145,7 +149,7 @@ public class BoardSetupPresenter { public void remove(int position) { Board board = savedBoards.remove(position); - boardManager.unsaveBoard(board); + boardManager.setSaved(board, false); setOrder(); callback.setSavedBoards(savedBoards); @@ -154,7 +158,7 @@ public class BoardSetupPresenter { } public void undoRemoveBoard(Board board) { - boardManager.saveBoard(board); + boardManager.setSaved(board, true); savedBoards.add(board.order, board); setOrder(); callback.setSavedBoards(savedBoards);