Skip to content

Commit

Permalink
Issue/#1770 use gametype for determining which games to show (#1949)
Browse files Browse the repository at this point in the history
* Check game_type instead of featured mod everywhere
  • Loading branch information
Askaholic committed Nov 6, 2020
1 parent c5df42d commit 98bd6bd
Show file tree
Hide file tree
Showing 14 changed files with 120 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import com.faforever.client.fx.PlatformService;
import com.faforever.client.fx.StringListCell;
import com.faforever.client.game.JoinGameHelper;
import com.faforever.client.game.KnownFeaturedMod;
import com.faforever.client.game.PlayerStatus;
import com.faforever.client.i18n.I18n;
import com.faforever.client.main.event.ShowUserReplaysEvent;
Expand All @@ -22,6 +21,7 @@
import com.faforever.client.player.PlayerService;
import com.faforever.client.preferences.ChatPrefs;
import com.faforever.client.preferences.PreferencesService;
import com.faforever.client.remote.domain.GameType;
import com.faforever.client.replay.ReplayService;
import com.faforever.client.theme.UiService;
import com.faforever.client.ui.alert.Alert;
Expand Down Expand Up @@ -201,15 +201,12 @@ public void setChatUser(ChatChannelUser chatUser) {
removeFoeItem.visibleProperty().bind(newValue.socialStatusProperty().isEqualTo(FOE));
reportItem.visibleProperty().bind(newValue.socialStatusProperty().isNotEqualTo(SELF));

// TODO: Make this ignore TMM games too and not just ladder
// https://github.com/FAForever/downlords-faf-client/issues/1770
joinGameItem.visibleProperty().bind(newValue.socialStatusProperty().isNotEqualTo(SELF)
.and(newValue.statusProperty().isEqualTo(PlayerStatus.LOBBYING)
.or(newValue.statusProperty().isEqualTo(PlayerStatus.HOSTING)))
.and(Bindings.createBooleanBinding(() -> {
return newValue.getGame() != null
&& newValue.getGame().getFeaturedMod() != null
&& !newValue.getGame().getFeaturedMod().equals(KnownFeaturedMod.LADDER_1V1.getTechnicalName());
&& newValue.getGame().getGameType() != GameType.MATCHMAKER;
}, newValue.gameProperty())
));
watchGameItem.visibleProperty().bind(newValue.statusProperty().isEqualTo(PlayerStatus.PLAYING));
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/com/faforever/client/coop/CoopController.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import com.faforever.client.mod.ModService;
import com.faforever.client.notification.NotificationService;
import com.faforever.client.remote.domain.GameStatus;
import com.faforever.client.remote.domain.GameType;
import com.faforever.client.replay.ReplayService;
import com.faforever.client.reporting.ReportingService;
import com.faforever.client.theme.UiService;
Expand Down Expand Up @@ -70,8 +71,7 @@
public class CoopController extends AbstractViewController<Node> {

private static final Predicate<Game> OPEN_COOP_GAMES_PREDICATE = gameInfoBean ->
gameInfoBean.getStatus() == GameStatus.OPEN
&& COOP.getTechnicalName().equals(gameInfoBean.getFeaturedMod());
gameInfoBean.getStatus() == GameStatus.OPEN && gameInfoBean.getGameType() == GameType.COOP;

private final ReplayService replayService;
private final GameService gameService;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -292,6 +292,7 @@ private IceAdapterApi newIceAdapterProxy() {
}

private void updateLobbyModeFromGameInfo(GameLaunchMessage gameLaunchMessage) {
// TODO: Replace with game type. Needs https://github.com/FAForever/server/issues/685
if (gameLaunchMessage.getInitMode() != null) {
lobbyInitMode = gameLaunchMessage.getInitMode();
return;
Expand Down
13 changes: 2 additions & 11 deletions src/main/java/com/faforever/client/game/CustomGamesController.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import com.faforever.client.player.PlayerService;
import com.faforever.client.preferences.PreferencesService;
import com.faforever.client.remote.domain.GameStatus;
import com.faforever.client.remote.domain.GameType;
import com.faforever.client.theme.UiService;
import com.faforever.client.ui.dialog.Dialog;
import com.faforever.client.ui.preferences.event.GameDirectoryChooseEvent;
Expand Down Expand Up @@ -38,8 +39,6 @@
import org.springframework.stereotype.Component;

import java.nio.file.Path;
import java.util.Arrays;
import java.util.Collection;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.function.Predicate;
Expand All @@ -49,16 +48,8 @@
@Slf4j
public class CustomGamesController extends AbstractViewController<Node> {

private static final Collection<String> HIDDEN_FEATURED_MODS = Arrays.asList(
KnownFeaturedMod.COOP.getTechnicalName(),
KnownFeaturedMod.LADDER_1V1.getTechnicalName(),
KnownFeaturedMod.GALACTIC_WAR.getTechnicalName(),
KnownFeaturedMod.MATCHMAKER.getTechnicalName()
);

private static final Predicate<Game> OPEN_CUSTOM_GAMES_PREDICATE = gameInfoBean ->
gameInfoBean.getStatus() == GameStatus.OPEN
&& !HIDDEN_FEATURED_MODS.contains(gameInfoBean.getFeaturedMod());
gameInfoBean.getStatus() == GameStatus.OPEN && gameInfoBean.getGameType() == GameType.CUSTOM;

private final UiService uiService;
private final GameService gameService;
Expand Down
15 changes: 15 additions & 0 deletions src/main/java/com/faforever/client/game/Game.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.faforever.client.game;

import com.faforever.client.remote.domain.GameStatus;
import com.faforever.client.remote.domain.GameType;
import com.faforever.client.remote.domain.VictoryCondition;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.DoubleProperty;
Expand Down Expand Up @@ -38,6 +39,7 @@ public class Game {
private final ObjectProperty<VictoryCondition> victoryCondition;
private final ObjectProperty<Instant> startTime;
private final BooleanProperty enforceRating;
private final ObjectProperty<GameType> gameType;
/**
* Maps a sim mod's UID to its name.
*/
Expand Down Expand Up @@ -69,6 +71,7 @@ public Game() {
status = new SimpleObjectProperty<>();
startTime = new SimpleObjectProperty<>();
enforceRating = new SimpleBooleanProperty(false);
gameType = new SimpleObjectProperty<>();
}

public String getHost() {
Expand Down Expand Up @@ -223,6 +226,18 @@ public ObjectProperty<VictoryCondition> victoryConditionProperty() {
return victoryCondition;
}

public GameType getGameType() {
return gameType.get();
}

public void setGameType(GameType gameType) {
this.gameType.set(gameType);
}

public ObjectProperty<GameType> gameTypeProperty() {
return gameType;
}

/**
* Returns a map of simulation mod UIDs to the mod's name.
*/
Expand Down
1 change: 1 addition & 0 deletions src/main/java/com/faforever/client/game/GameService.java
Original file line number Diff line number Diff line change
Expand Up @@ -793,6 +793,7 @@ private void updateFromGameInfo(GameInfoMessage gameInfoMessage, Game game) {
));
game.setStatus(gameInfoMessage.getState());
game.setPasswordProtected(gameInfoMessage.getPasswordProtected());
game.setGameType(gameInfoMessage.getGameType());

game.setAverageRating(calcAverageRating(gameInfoMessage));

Expand Down
4 changes: 2 additions & 2 deletions src/main/java/com/faforever/client/player/PlayerService.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@
import com.faforever.client.game.GameAddedEvent;
import com.faforever.client.game.GameRemovedEvent;
import com.faforever.client.game.GameUpdatedEvent;
import com.faforever.client.game.KnownFeaturedMod;
import com.faforever.client.player.event.CurrentPlayerInfo;
import com.faforever.client.player.event.FriendJoinedGameEvent;
import com.faforever.client.remote.FafService;
import com.faforever.client.remote.domain.GameStatus;
import com.faforever.client.remote.domain.GameType;
import com.faforever.client.remote.domain.PlayersMessage;
import com.faforever.client.remote.domain.SocialMessage;
import com.faforever.client.user.UserService;
Expand Down Expand Up @@ -210,7 +210,7 @@ private void updateGameDataForPlayer(Game game, Player player) {
playersByGame.get(game.getId()).add(player);
if (player.getSocialStatus() == FRIEND
&& game.getStatus() == GameStatus.OPEN
&& !game.getFeaturedMod().equals(KnownFeaturedMod.LADDER_1V1.getTechnicalName())) {
&& game.getGameType() != GameType.MATCHMAKER) {
eventBus.post(new FriendJoinedGameEvent(player, game));
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
import com.faforever.client.remote.domain.GameAccess;
import com.faforever.client.remote.domain.GameLaunchMessage;
import com.faforever.client.remote.domain.GameStatus;
import com.faforever.client.remote.domain.GameType;
import com.faforever.client.remote.domain.HostGameMessage;
import com.faforever.client.remote.domain.IceServersServerMessage;
import com.faforever.client.remote.domain.IceServersServerMessage.IceServer;
Expand Down Expand Up @@ -66,6 +67,7 @@
import com.faforever.client.remote.gson.FactionTypeAdapter;
import com.faforever.client.remote.gson.GameAccessTypeAdapter;
import com.faforever.client.remote.gson.GameStateTypeAdapter;
import com.faforever.client.remote.gson.GameTypeTypeAdapter;
import com.faforever.client.remote.gson.GpgServerMessageTypeTypeAdapter;
import com.faforever.client.remote.gson.LobbyModeTypeAdapter;
import com.faforever.client.remote.gson.MessageTargetTypeAdapter;
Expand Down Expand Up @@ -133,6 +135,7 @@ public class FafServerAccessorImpl extends AbstractServerAccessor implements Faf
.registerTypeAdapter(VictoryCondition.class, VictoryConditionTypeAdapter.INSTANCE)
.registerTypeAdapter(GameStatus.class, GameStateTypeAdapter.INSTANCE)
.registerTypeAdapter(GameAccess.class, GameAccessTypeAdapter.INSTANCE)
.registerTypeAdapter(GameType.class, GameTypeTypeAdapter.INSTANCE)
.registerTypeAdapter(ClientMessageType.class, ClientMessageTypeTypeAdapter.INSTANCE)
.registerTypeAdapter(FafServerMessageType.class, ServerMessageTypeTypeAdapter.INSTANCE)
.registerTypeAdapter(GpgServerMessageType.class, GpgServerMessageTypeTypeAdapter.INSTANCE)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ public class GameInfoMessage extends FafServerMessage {
private Integer ratingMin;
private Integer ratingMax;
private Boolean enforceRatingRange;
private GameType gameType;
/**
* The server may either send a single game or a list of games in the same message... *cringe*.
*/
Expand Down
45 changes: 45 additions & 0 deletions src/main/java/com/faforever/client/remote/domain/GameType.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.faforever.client.remote.domain;

import lombok.extern.slf4j.Slf4j;

import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

@Slf4j
public enum GameType {

UNKNOWN("unknown"),
CUSTOM("custom"),
MATCHMAKER("matchmaker"),
COOP("coop"),
TUTORIAL("tutorial");

private static final Map<String, GameType> fromString;

static {
fromString = new HashMap<>();
for (GameType gameType : values()) {
fromString.put(gameType.string, gameType);
}
}

private final String string;

GameType(String string) {
this.string = string;
}

public static GameType fromString(String string) {
GameType gameType = fromString.get(string != null ? string.toLowerCase(Locale.US) : null);
if (gameType == null) {
log.warn("Unknown game type: {}", string);
return UNKNOWN;
}
return gameType;
}

public String getString() {
return string;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.faforever.client.remote.gson;

import com.faforever.client.remote.domain.GameType;
import com.google.gson.TypeAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;

import java.io.IOException;

public final class GameTypeTypeAdapter extends TypeAdapter<GameType> {

public static final GameTypeTypeAdapter INSTANCE = new GameTypeTypeAdapter();

private GameTypeTypeAdapter() {
// private
}

@Override
public void write(JsonWriter out, GameType value) throws IOException {
if (value == null) {
out.value(GameType.UNKNOWN.getString());
} else {
out.value(value.getString());
}
}

@Override
public GameType read(JsonReader in) throws IOException {
return GameType.fromString(in.nextString());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import com.faforever.client.preferences.Preferences;
import com.faforever.client.preferences.PreferencesService;
import com.faforever.client.remote.domain.GameStatus;
import com.faforever.client.remote.domain.GameType;
import com.faforever.client.replay.ReplayService;
import com.faforever.client.test.AbstractPlainJavaFxTest;
import com.faforever.client.theme.UiService;
Expand Down Expand Up @@ -196,9 +197,9 @@ public void testJoinGameContextMenuShownForHostingUser() {
}

@Test
public void testJoinGameContextMenuNotShownForLadderUser() {
public void testJoinGameContextMenuNotShownForMatchmakerPlayer() {
Game game = new Game();
game.setFeaturedMod(KnownFeaturedMod.LADDER_1V1.getTechnicalName());
game.setGameType(GameType.MATCHMAKER);
game.setStatus(GameStatus.OPEN);
game.setHost(player.getUsername());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.faforever.client.player.PlayerService;
import com.faforever.client.preferences.Preferences;
import com.faforever.client.preferences.PreferencesService;
import com.faforever.client.remote.domain.GameType;
import com.faforever.client.test.AbstractPlainJavaFxTest;
import com.faforever.client.theme.UiService;
import com.faforever.client.vault.replay.WatchButtonController;
Expand Down Expand Up @@ -111,6 +112,8 @@ public void testUpdateFilters() {
Game gameWithMod = GameBuilder.create().defaultValues().get();
Game gameWithPW = GameBuilder.create().defaultValues().get();
Game gameWithModAndPW = GameBuilder.create().defaultValues().get();
Game ladderGame = GameBuilder.create().defaultValues().get();
Game matchmakerGame = GameBuilder.create().defaultValues().get();

ObservableMap<String, String> simMods = FXCollections.observableHashMap();
simMods.put("123-456-789", "Fake mod name");
Expand All @@ -122,10 +125,15 @@ public void testUpdateFilters() {
gameWithModAndPW.setPassword("password");
gameWithModAndPW.passwordProtectedProperty().set(true);

ladderGame.setFeaturedMod(KnownFeaturedMod.LADDER_1V1.getTechnicalName());
ladderGame.setGameType(GameType.MATCHMAKER);
matchmakerGame.setGameType(GameType.MATCHMAKER);

ObservableList<Game> games = FXCollections.observableArrayList();
games.addAll(game, gameWithMod, gameWithPW, gameWithModAndPW);
games.addAll(game, gameWithMod, gameWithPW, gameWithModAndPW, ladderGame, matchmakerGame);
instance.setFilteredList(games);

instance.showModdedGamesCheckBox.setSelected(false);
instance.showModdedGamesCheckBox.setSelected(true);
instance.showPasswordProtectedGamesCheckBox.setSelected(true);
assertEquals(4, instance.filteredItems.size());
Expand Down
4 changes: 3 additions & 1 deletion src/test/java/com/faforever/client/game/GameBuilder.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.faforever.client.game;

import com.faforever.client.remote.domain.GameStatus;
import com.faforever.client.remote.domain.GameType;
import com.faforever.client.remote.domain.VictoryCondition;
import javafx.collections.FXCollections;

Expand Down Expand Up @@ -31,9 +32,10 @@ public GameBuilder defaultValues() {
game.setTitle("Title");
game.setTeams(FXCollections.emptyObservableMap());
game.setId(1);
game.setMaxRating(800);
game.setMinRating(800);
game.setMaxRating(1300);
game.setStartTime(Instant.now());
game.setGameType(GameType.CUSTOM);
return this;
}

Expand Down

0 comments on commit 98bd6bd

Please sign in to comment.