setup boards: fix boards not shown immediately when adding site

crowdin
Floens 7 years ago
parent 0bdf4b7296
commit 7d85e27c42
  1. 4
      Clover/app/src/main/java/org/floens/chan/core/database/DatabaseBoardManager.java
  2. 42
      Clover/app/src/main/java/org/floens/chan/core/presenter/BoardSetupPresenter.java
  3. 9
      Clover/app/src/main/java/org/floens/chan/core/repository/BoardRepository.java
  4. 2
      Clover/app/src/main/java/org/floens/chan/ui/layout/BoardAddLayout.java

@ -89,7 +89,7 @@ public class DatabaseBoardManager {
}; };
} }
public Callable<Void> createAll(final Site site, final List<Board> boards) { public Callable<Boolean> createAll(final Site site, final List<Board> boards) {
return () -> { return () -> {
long start = Time.startTiming(); long start = Time.startTiming();
@ -146,7 +146,7 @@ public class DatabaseBoardManager {
Time.endTiming("createAll boards " + Time.endTiming("createAll boards " +
toCreate.size() + ", " + toUpdate.size(), start); toCreate.size() + ", " + toUpdate.size(), start);
return null; return !toCreate.isEmpty() || !toUpdate.isEmpty();
}; };
} }

@ -20,6 +20,7 @@ package org.floens.chan.core.presenter;
import org.floens.chan.core.manager.BoardManager; import org.floens.chan.core.manager.BoardManager;
import org.floens.chan.core.model.orm.Board; import org.floens.chan.core.model.orm.Board;
import org.floens.chan.core.repository.BoardRepository;
import org.floens.chan.core.site.Site; import org.floens.chan.core.site.Site;
import org.floens.chan.ui.helper.BoardHelper; import org.floens.chan.ui.helper.BoardHelper;
import org.floens.chan.utils.BackgroundUtils; import org.floens.chan.utils.BackgroundUtils;
@ -29,12 +30,14 @@ import java.util.HashMap;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Observable;
import java.util.Observer;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import javax.inject.Inject; import javax.inject.Inject;
public class BoardSetupPresenter { public class BoardSetupPresenter implements Observer {
private BoardManager boardManager; private BoardManager boardManager;
private Callback callback; private Callback callback;
@ -44,12 +47,16 @@ public class BoardSetupPresenter {
private List<Board> savedBoards; private List<Board> savedBoards;
private BoardRepository.SitesBoards allBoardsObservable;
private Executor executor = Executors.newSingleThreadExecutor(); private Executor executor = Executors.newSingleThreadExecutor();
private BackgroundUtils.Cancelable suggestionCall; private BackgroundUtils.Cancelable suggestionCall;
private List<BoardSuggestion> suggestions = new ArrayList<>(); private List<BoardSuggestion> suggestions = new ArrayList<>();
private List<String> selectedSuggestions = new LinkedList<>(); private List<String> selectedSuggestions = new LinkedList<>();
private String suggestionsQuery = null;
@Inject @Inject
public BoardSetupPresenter(BoardManager boardManager) { public BoardSetupPresenter(BoardManager boardManager) {
this.boardManager = boardManager; this.boardManager = boardManager;
@ -61,10 +68,25 @@ public class BoardSetupPresenter {
savedBoards = boardManager.getSiteSavedBoards(site); savedBoards = boardManager.getSiteSavedBoards(site);
callback.setSavedBoards(savedBoards); callback.setSavedBoards(savedBoards);
allBoardsObservable = boardManager.getAllBoardsObservable();
allBoardsObservable.addObserver(this);
} }
public void destroy() { public void destroy() {
boardManager.updateBoardOrders(savedBoards); boardManager.updateBoardOrders(savedBoards);
allBoardsObservable.deleteObserver(this);
}
@Override
public void update(Observable o, Object arg) {
if (o == allBoardsObservable) {
if (addCallback != null) {
// Update the boards shown in the query.
queryBoardsWithQueryAndShowInAddDialog();
}
}
} }
public void addClicked() { public void addClicked() {
@ -74,13 +96,14 @@ public class BoardSetupPresenter {
public void bindAddDialog(AddCallback addCallback) { public void bindAddDialog(AddCallback addCallback) {
this.addCallback = addCallback; this.addCallback = addCallback;
searchEntered(null); queryBoardsWithQueryAndShowInAddDialog();
} }
public void unbindAddDialog() { public void unbindAddDialog() {
this.addCallback = null; this.addCallback = null;
suggestions.clear(); suggestions.clear();
selectedSuggestions.clear(); selectedSuggestions.clear();
suggestionsQuery = null;
} }
public void onSelectAllClicked() { public void onSelectAllClicked() {
@ -88,7 +111,7 @@ public class BoardSetupPresenter {
suggestion.checked = true; suggestion.checked = true;
selectedSuggestions.add(suggestion.getCode()); selectedSuggestions.add(suggestion.getCode());
} }
addCallback.updateSuggestions(); addCallback.suggestionsWereChanged();
} }
public void onSuggestionClicked(BoardSuggestion suggestion) { public void onSuggestionClicked(BoardSuggestion suggestion) {
@ -165,12 +188,17 @@ public class BoardSetupPresenter {
} }
public void searchEntered(String userQuery) { public void searchEntered(String userQuery) {
suggestionsQuery = userQuery;
queryBoardsWithQueryAndShowInAddDialog();
}
private void queryBoardsWithQueryAndShowInAddDialog() {
if (suggestionCall != null) { if (suggestionCall != null) {
suggestionCall.cancel(); suggestionCall.cancel();
} }
final String query = userQuery == null ? null : final String query = suggestionsQuery == null ? null :
userQuery.replace("/", "").replace("\\", ""); suggestionsQuery.replace("/", "").replace("\\", "");
suggestionCall = BackgroundUtils.runWithExecutor(executor, () -> { suggestionCall = BackgroundUtils.runWithExecutor(executor, () -> {
List<BoardSuggestion> suggestions = new ArrayList<>(); List<BoardSuggestion> suggestions = new ArrayList<>();
if (site.boardsType().canList) { if (site.boardsType().canList) {
@ -210,7 +238,7 @@ public class BoardSetupPresenter {
updateSuggestions(result); updateSuggestions(result);
if (addCallback != null) { if (addCallback != null) {
addCallback.updateSuggestions(); addCallback.suggestionsWereChanged();
} }
}); });
} }
@ -240,7 +268,7 @@ public class BoardSetupPresenter {
} }
public interface AddCallback { public interface AddCallback {
void updateSuggestions(); void suggestionsWereChanged();
} }
public static class BoardSuggestion { public static class BoardSuggestion {

@ -23,6 +23,7 @@ import org.floens.chan.core.database.DatabaseBoardManager;
import org.floens.chan.core.database.DatabaseManager; import org.floens.chan.core.database.DatabaseManager;
import org.floens.chan.core.model.orm.Board; import org.floens.chan.core.model.orm.Board;
import org.floens.chan.core.site.Site; import org.floens.chan.core.site.Site;
import org.floens.chan.utils.Logger;
import org.floens.chan.utils.Time; import org.floens.chan.utils.Time;
import java.util.ArrayList; import java.util.ArrayList;
@ -35,6 +36,8 @@ import javax.inject.Singleton;
@Singleton @Singleton
public class BoardRepository implements Observer { public class BoardRepository implements Observer {
private static final String TAG = "BoardRepository";
private final DatabaseManager databaseManager; private final DatabaseManager databaseManager;
private final DatabaseBoardManager databaseBoardManager; private final DatabaseBoardManager databaseBoardManager;
@ -68,7 +71,11 @@ public class BoardRepository implements Observer {
} }
public void updateAvailableBoardsForSite(Site site, List<Board> availableBoards) { public void updateAvailableBoardsForSite(Site site, List<Board> availableBoards) {
databaseManager.runTask(databaseBoardManager.createAll(site, availableBoards)); boolean changed = databaseManager.runTask(databaseBoardManager.createAll(site, availableBoards));
Logger.d(TAG, "updateAvailableBoardsForSite changed = " + changed);
if (changed) {
updateObservablesAsync();
}
} }
public Board getFromCode(Site site, String code) { public Board getFromCode(Site site, String code) {

@ -110,7 +110,7 @@ public class BoardAddLayout extends LinearLayout implements SearchLayout.SearchL
} }
@Override @Override
public void updateSuggestions() { public void suggestionsWereChanged() {
suggestionsAdapter.notifyDataSetChanged(); suggestionsAdapter.notifyDataSetChanged();
} }

Loading…
Cancel
Save