Skip to content

Commit

Permalink
#3118 add persistent properties to replay search page
Browse files Browse the repository at this point in the history
  • Loading branch information
obydog002 committed May 11, 2024
1 parent ac45f8d commit 7fc8fc4
Show file tree
Hide file tree
Showing 17 changed files with 465 additions and 41 deletions.
23 changes: 15 additions & 8 deletions src/main/java/com/faforever/client/map/MapVaultController.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,17 @@
import com.faforever.client.vault.VaultEntityCardController;
import com.faforever.client.vault.VaultEntityController;
import com.faforever.client.vault.search.SearchController.SearchConfig;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.scene.Node;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import javafx.collections.ObservableList;
import java.time.LocalDate;

import java.nio.file.Path;
import java.util.LinkedHashMap;
Expand Down Expand Up @@ -76,9 +82,9 @@ protected void initSearchController() {
searchController.setVaultRoot(vaultRoot);
searchController.setSavedQueries(vaultPrefs.getSavedMapQueries());

searchController.addTextFilter("displayName", i18n.get("map.name"), false);
searchController.addTextFilter("author.login", i18n.get("map.author"), false);
searchController.addDateRangeFilter("latestVersion.updateTime", i18n.get("map.uploadedDateTime"), 0);
searchController.addTextFilter("displayName", i18n.get("map.name"), false, new SimpleStringProperty());
searchController.addTextFilter("author.login", i18n.get("map.author"), false, new SimpleStringProperty());
searchController.addDateRangeFilter("latestVersion.updateTime", i18n.get("map.uploadedDateTime"), 0, new SimpleObjectProperty<LocalDate>(), new SimpleObjectProperty<LocalDate>());

LinkedHashMap<String, String> mapSizeMap = new LinkedHashMap<>();
mapSizeMap.put("1km", "64");
Expand All @@ -89,11 +95,12 @@ protected void initSearchController() {
mapSizeMap.put("40km", "2048");
mapSizeMap.put("80km", "4096");

searchController.addCategoryFilter("latestVersion.width", i18n.get("map.width"), mapSizeMap);
searchController.addCategoryFilter("latestVersion.height", i18n.get("map.height"), mapSizeMap);
searchController.addRangeFilter("latestVersion.maxPlayers", i18n.get("map.maxPlayers"), 0, 16, 16, 0, 0, Double::intValue);
searchController.addRangeFilter("reviewsSummary.averageScore", i18n.get("reviews.averageScore"), 0, 5, 10, 4, 1);
searchController.addToggleFilter("latestVersion.ranked", i18n.get("map.onlyRanked"), "true");
// TODO add persistence
searchController.addCategoryFilter("latestVersion.width", i18n.get("map.width"), mapSizeMap, new SimpleObjectProperty<ObservableList<String>>());
searchController.addCategoryFilter("latestVersion.height", i18n.get("map.height"), mapSizeMap, new SimpleObjectProperty<ObservableList<String>>());
searchController.addRangeFilter("latestVersion.maxPlayers", i18n.get("map.maxPlayers"), 0, 16, 16, 0, 0, Double::intValue, new SimpleDoubleProperty(), new SimpleDoubleProperty());
searchController.addRangeFilter("reviewsSummary.averageScore", i18n.get("reviews.averageScore"), 0, 5, 10, 4, 1, new SimpleDoubleProperty(), new SimpleDoubleProperty());
searchController.addToggleFilter("latestVersion.ranked", i18n.get("map.onlyRanked"), "true", new SimpleBooleanProperty());
}

@Override
Expand Down
17 changes: 11 additions & 6 deletions src/main/java/com/faforever/client/mod/ModVaultController.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,17 @@
import com.faforever.client.vault.VaultEntityCardController;
import com.faforever.client.vault.VaultEntityController;
import com.faforever.client.vault.search.SearchController.SearchConfig;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.scene.Node;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import java.time.LocalDate;
import java.nio.file.Path;
import java.util.List;
import java.util.Random;
Expand Down Expand Up @@ -147,15 +152,15 @@ protected void initSearchController() {
searchController.setVaultRoot(vaultRoot);
searchController.setSavedQueries(vaultPrefs.getSavedModQueries());

searchController.addTextFilter("displayName", i18n.get("mod.displayName"), false);
searchController.addTextFilter("author", i18n.get("mod.author"), false);
searchController.addDateRangeFilter("latestVersion.updateTime", i18n.get("mod.uploadedDateTime"), 0);

searchController.addRangeFilter("reviewsSummary.averageScore", i18n.get("reviews.averageScore"), 0, 5, 10, 4, 1);
searchController.addTextFilter("displayName", i18n.get("mod.displayName"), false, new SimpleStringProperty());
searchController.addTextFilter("author", i18n.get("mod.author"), false, new SimpleStringProperty());
searchController.addDateRangeFilter("latestVersion.updateTime", i18n.get("mod.uploadedDateTime"), 0, new SimpleObjectProperty<LocalDate>(), new SimpleObjectProperty<LocalDate>());
// TODO add persistence
searchController.addRangeFilter("reviewsSummary.averageScore", i18n.get("reviews.averageScore"), 0, 5, 10, 4, 1, new SimpleDoubleProperty(), new SimpleDoubleProperty());

searchController.addBinaryFilter("latestVersion.type", i18n.get("mod.type"),
ModType.UI.toString(), ModType.SIM.toString(), i18n.get("modType.ui"), i18n.get("modType.sim"));
searchController.addToggleFilter("latestVersion.ranked", i18n.get("mod.onlyRanked"), "true");
searchController.addToggleFilter("latestVersion.ranked", i18n.get("mod.onlyRanked"), "true", new SimpleBooleanProperty());
}

@Override
Expand Down
221 changes: 220 additions & 1 deletion src/main/java/com/faforever/client/preferences/VaultPrefs.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,23 @@

import com.faforever.client.vault.search.SearchController.SortConfig;
import com.faforever.client.vault.search.SearchController.SortOrder;
import java.time.LocalDate;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.ListProperty;
import javafx.beans.property.MapProperty;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.StringProperty;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleListProperty;
import javafx.beans.property.SimpleMapProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.collections.ObservableMap;


public class VaultPrefs {
private final ObjectProperty<SortConfig> onlineReplaySortConfig = new SimpleObjectProperty<>(
new SortConfig("startTime", SortOrder.DESC));
Expand All @@ -23,6 +32,24 @@ public class VaultPrefs {
FXCollections.observableHashMap());
private final MapProperty<String, String> savedModQueries = new SimpleMapProperty<>(
FXCollections.observableHashMap());
private final StringProperty playerNameField = new SimpleStringProperty();
private final StringProperty mapNameField = new SimpleStringProperty();
private final StringProperty mapAuthorField = new SimpleStringProperty();
private final StringProperty titleField = new SimpleStringProperty();
private final StringProperty replayIDField = new SimpleStringProperty();
private final ObjectProperty<ObservableList<String>> featuredModFilter = new SimpleObjectProperty<ObservableList<String>>(
FXCollections.emptyObservableList());
private final ObjectProperty<ObservableList<String>> leaderboardFilter = new SimpleObjectProperty<ObservableList<String>>(
FXCollections.emptyObservableList());
private final DoubleProperty ratingMin = new SimpleDoubleProperty();
private final DoubleProperty ratingMax = new SimpleDoubleProperty();
private final DoubleProperty averageReviewScoresMin = new SimpleDoubleProperty();
private final DoubleProperty averageReviewScoresMax = new SimpleDoubleProperty();
private final ObjectProperty<LocalDate> gameBeforeDate = new SimpleObjectProperty<LocalDate>();
private final ObjectProperty<LocalDate> gameAfterDate = new SimpleObjectProperty<LocalDate>();
private final DoubleProperty gameDurationMin = new SimpleDoubleProperty();
private final DoubleProperty gameDurationMax = new SimpleDoubleProperty();
private final BooleanProperty onlyRanked = new SimpleBooleanProperty();

public SortConfig getOnlineReplaySortConfig() {
return onlineReplaySortConfig.get();
Expand Down Expand Up @@ -95,4 +122,196 @@ public void setSavedModQueries(ObservableMap<String, String> savedModQueries) {
public MapProperty<String, String> savedModQueriesProperty() {
return savedModQueries;
}

public String getPlayerNameField() {
return playerNameField.get();
}

public void setPlayerNameField(String playerName) {
this.playerNameField.set(playerName);
}

public StringProperty playerNameFieldProperty() {
return playerNameField;
}

public String getMapNameField() {
return mapNameField.get();
}

public void setMapNameField(String mapName) {
this.mapNameField.set(mapName);
}

public StringProperty mapNameFieldProperty() {
return mapNameField;
}

public String getMapAuthorField() {
return mapAuthorField.get();
}

public void setMapAuthorField(String mapAuthor) {
this.mapAuthorField.set(mapAuthor);
}

public StringProperty mapAuthorFieldProperty() {
return mapAuthorField;
}

public String getTitleField() {
return titleField.get();
}

public void setTitleField(String titleField) {
this.titleField.set(titleField);
}

public StringProperty titleFieldProperty() {
return titleField;
}

public String getReplayIDField() {
return replayIDField.get();
}

public void setReplayIDField(String replayIDField) {
this.replayIDField.set(replayIDField);
}

public StringProperty replayIDFieldProperty() {
return replayIDField;
}

public ObservableList<String> getFeaturedModFilter() {
return featuredModFilter.get();
}

public void setFeaturedModFilter(ObservableList<String> featuredModFilter) {
this.featuredModFilter.set(featuredModFilter);
}

public ObjectProperty<ObservableList<String>> featuredModFilterProperty() {
return featuredModFilter;
}

public ObservableList<String> getLeaderboardFilter() {
return leaderboardFilter.get();
}

public void setLeaderboardFilter(ObservableList<String> leaderboardFilter) {
this.leaderboardFilter.set(leaderboardFilter);
}

public ObjectProperty<ObservableList<String>> leaderboardFilterProperty() {
return leaderboardFilter;
}

public Double getRatingMin() {
return ratingMin.get();
}

public void setRatingMin(Double ratingMin) {
this.ratingMin.set(ratingMin);
}

public DoubleProperty ratingMinProperty() {
return ratingMin;
}

public Double getRatingMax() {
return ratingMax.get();
}

public void setRatingMax(Double ratingMax) {
this.ratingMax.set(ratingMax);
}

public DoubleProperty ratingMaxProperty() {
return ratingMax;
}

public Double getAverageReviewScoresMin() {
return averageReviewScoresMin.get();
}

public void setAverageReviewScoresMin(Double averageReviewScoresMin) {
this.averageReviewScoresMin.set(averageReviewScoresMin);
}

public DoubleProperty averageReviewScoresMinProperty() {
return averageReviewScoresMin;
}

public Double getAverageReviewScoresMax() {
return averageReviewScoresMax.get();
}

public void setAverageReviewScoresMax(Double averageReviewScoresMax) {
this.averageReviewScoresMax.set(averageReviewScoresMax);
}

public DoubleProperty averageReviewScoresMaxProperty() {
return averageReviewScoresMax;
}

public LocalDate getGameBeforeDate() {
return gameBeforeDate.get();
}

public void setGameBeforeDate(LocalDate gameBeforeDate) {
this.gameBeforeDate.set(gameBeforeDate);
}

public ObjectProperty<LocalDate> gameBeforeDateProperty() {
return gameBeforeDate;
}

public LocalDate getGameAfterDate() {
return gameAfterDate.get();
}

public void setGameAfterDate(LocalDate gameAfterDate) {
this.gameAfterDate.set(gameAfterDate);
}

public ObjectProperty<LocalDate> gameAfterDateProperty() {
return gameAfterDate;
}

public Double getGameDurationMin() {
return gameDurationMin.get();
}

public void setGameDurationMin(Double gameDurationMin) {
this.gameDurationMin.set(gameDurationMin);
}

public DoubleProperty gameDurationMinProperty() {
return gameDurationMin;
}

public Double getGameDurationMax() {
return gameDurationMax.get();
}

public void setGameDurationMax(Double gameDurationMax) {
this.gameDurationMax.set(gameDurationMax);
}

public DoubleProperty gameDurationMaxProperty() {
return gameDurationMax;
}

public Boolean getOnlyRanked() {
return onlyRanked.get();
}

public void setOnlyRanked(Boolean onlyRanked) {
this.onlyRanked.set(onlyRanked);
}

public BooleanProperty onlyRankedProperty() {
return onlyRanked;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
import com.github.rutledgepaulv.qbuilders.conditions.Condition;
import com.github.rutledgepaulv.qbuilders.properties.concrete.StringProperty;
import javafx.beans.InvalidationListener;
import javafx.beans.property.ObjectProperty;
import javafx.beans.binding.Bindings;
import javafx.collections.ObservableList;
import javafx.scene.Node;
import javafx.scene.control.MenuButton;
import lombok.Getter;
Expand Down Expand Up @@ -39,15 +41,24 @@ public class CategoryFilterController extends FilterNodeController {
public MenuButton menu;
private String propertyName;
private Map<String, String> itemMap;
private ObjectProperty<ObservableList<String>> persistenceProperty;

public void setItems(List<String> items) {
itemMap = null;
checkListView.getItems().setAll(items);
if (persistenceProperty != null) {
persistenceProperty.get().stream().forEach((item) -> checkListView.getCheckModel().check(item));
persistenceProperty.bind(Bindings.createObjectBinding(() -> checkListView.getCheckModel().getCheckedItems()));
}
}

public void setItems(Map<String, String> items) {
itemMap = items;
checkListView.getItems().setAll(items.keySet());
if (persistenceProperty != null) {
persistenceProperty.get().stream().forEach((item) -> checkListView.getCheckModel().check(item));
persistenceProperty.bind(Bindings.createObjectBinding(() -> checkListView.getCheckModel().getCheckedItems()));
}
}


Expand Down Expand Up @@ -91,4 +102,7 @@ public Node getRoot() {
return menu;
}

public void setPersistenceProperty(ObjectProperty<ObservableList<String>> property) {
this.persistenceProperty = property;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import com.github.rutledgepaulv.qbuilders.properties.concrete.InstantProperty;
import javafx.beans.InvalidationListener;
import javafx.beans.binding.Bindings;
import javafx.beans.property.ObjectProperty;
import javafx.scene.Node;
import javafx.scene.control.DatePicker;
import javafx.scene.control.MenuButton;
Expand Down Expand Up @@ -106,6 +107,11 @@ public void setInitialYearsBefore(int initialYearsBefore) {
afterDate.setValue(LocalDate.now().minusYears(initialYearsBefore));
}

public void setPersistentBindings(ObjectProperty<LocalDate> beforeDate, ObjectProperty<LocalDate> afterDate) {
this.beforeDate.valueProperty().bindBidirectional(beforeDate);
this.afterDate.valueProperty().bindBidirectional(afterDate);
}

@Override
public Node getRoot() {
return menu;
Expand Down

0 comments on commit 7fc8fc4

Please sign in to comment.