Skip to content

Commit d44f97d

Browse files
authored
Fix that player info was not displayed on side window when opening a private channel (#3426)
* use player info instead of chat user to display player info * remove `getter`lombok and use correct names * fix PrivateChatTabControllerTest class * fix load rating info and achievements * fix PrivatePlayerInfoControllerTest class * remove mentions of a chat user from `PrivatePlayerInfoControllerTest` class
1 parent 9e64010 commit d44f97d

File tree

4 files changed

+75
-110
lines changed

4 files changed

+75
-110
lines changed

src/main/java/com/faforever/client/chat/PrivateChatTabController.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.faforever.client.avatar.AvatarService;
44
import com.faforever.client.domain.server.PlayerInfo;
55
import com.faforever.client.fx.JavaFxUtil;
6+
import com.faforever.client.player.PlayerService;
67
import com.faforever.client.player.PrivatePlayerInfoController;
78
import javafx.beans.value.ObservableValue;
89
import javafx.scene.Node;
@@ -20,6 +21,7 @@
2021
public class PrivateChatTabController extends AbstractChatTabController {
2122

2223
private final AvatarService avatarService;
24+
private final PlayerService playerService;
2325

2426
public Tab privateChatTabRoot;
2527
public ImageView avatarImageView;
@@ -29,9 +31,10 @@ public class PrivateChatTabController extends AbstractChatTabController {
2931
public ScrollPane gameDetailScrollPane;
3032

3133
@Autowired
32-
public PrivateChatTabController(ChatService chatService, AvatarService avatarService) {
34+
public PrivateChatTabController(ChatService chatService, AvatarService avatarService, PlayerService playerService) {
3335
super(chatService);
3436
this.avatarService = avatarService;
37+
this.playerService = playerService;
3538
}
3639

3740
@Override
@@ -46,14 +49,12 @@ protected void onInitialize() {
4649

4750
privateChatTabRoot.textProperty().bind(channelName.when(attached));
4851

49-
ObservableValue<ChatChannelUser> chatUser = chatChannel.flatMap(
50-
channel -> channelName.map(chanName -> channel.getUser(chanName).orElse(null)));
51-
privatePlayerInfoController.chatUserProperty().bind(chatUser.when(showing));
52+
ObservableValue<PlayerInfo> player = channelName.map(
53+
playerName -> playerService.getPlayerByNameIfOnline(playerName).orElse(null));
54+
privatePlayerInfoController.playerProperty().bind(player.when(showing));
5255

53-
avatarImageView.imageProperty().bind(chatUser
54-
.flatMap(ChatChannelUser::playerProperty)
55-
.flatMap(PlayerInfo::avatarProperty)
56-
.map(avatarService::loadAvatar).when(showing));
56+
avatarImageView.imageProperty()
57+
.bind(player.flatMap(PlayerInfo::avatarProperty).map(avatarService::loadAvatar).when(showing));
5758
}
5859

5960
@Override

src/main/java/com/faforever/client/player/PrivatePlayerInfoController.java

Lines changed: 15 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.faforever.client.player;
22

33
import com.faforever.client.achievements.AchievementService;
4-
import com.faforever.client.chat.ChatChannelUser;
54
import com.faforever.client.domain.api.Leaderboard;
65
import com.faforever.client.domain.server.GameInfo;
76
import com.faforever.client.domain.server.PlayerInfo;
@@ -18,7 +17,6 @@
1817
import com.faforever.commons.lobby.GameStatus;
1918
import javafx.beans.property.ObjectProperty;
2019
import javafx.beans.property.SimpleObjectProperty;
21-
import javafx.beans.value.ChangeListener;
2220
import javafx.beans.value.ObservableValue;
2321
import javafx.scene.Node;
2422
import javafx.scene.control.Label;
@@ -34,7 +32,6 @@
3432
import reactor.core.publisher.Mono;
3533
import reactor.function.TupleUtils;
3634

37-
import java.util.Objects;
3835
import java.util.stream.Collectors;
3936

4037
@Component
@@ -63,14 +60,7 @@ public class PrivatePlayerInfoController extends NodeController<Node> {
6360
public Label unlockedAchievementsLabel;
6461
public Separator separator;
6562

66-
private final ObjectProperty<ChatChannelUser> chatUser = new SimpleObjectProperty<>();
67-
68-
private final ChangeListener<PlayerInfo> playerChangeListener = (observable, oldValue, newValue) -> {
69-
if (newValue != null && !Objects.equals(oldValue, newValue)) {
70-
loadReceiverRatingInformation(newValue);
71-
populateUnlockedAchievementsLabel(newValue);
72-
}
73-
};
63+
private final ObjectProperty<PlayerInfo> player = new SimpleObjectProperty<>();
7464

7565
@Override
7666
public Node getRoot() {
@@ -85,8 +75,7 @@ protected void onInitialize() {
8575
gameDetailController.setPlaytimeVisible(true);
8676
gameDetailWrapper.setVisible(false);
8777

88-
ObservableValue<Boolean> playerExistsProperty = chatUser.flatMap(user -> user.playerProperty().isNotNull())
89-
.when(showing);
78+
ObservableValue<Boolean> playerExistsProperty = player.isNotNull().when(showing);
9079
userImageView.visibleProperty().bind(playerExistsProperty);
9180
country.visibleProperty().bind(playerExistsProperty);
9281
ratingsLabels.visibleProperty().bind(playerExistsProperty);
@@ -96,36 +85,30 @@ protected void onInitialize() {
9685
unlockedAchievements.visibleProperty().bind(playerExistsProperty);
9786
unlockedAchievementsLabel.visibleProperty().bind(playerExistsProperty);
9887

99-
ObservableValue<PlayerInfo> playerObservable = chatUser.flatMap(ChatChannelUser::playerProperty);
100-
10188
gamesPlayed.textProperty()
102-
.bind(playerObservable.flatMap(PlayerInfo::numberOfGamesProperty).map(i18n::number).when(showing));
89+
.bind(player.flatMap(PlayerInfo::numberOfGamesProperty).map(i18n::number).when(showing));
10390

104-
username.textProperty().bind(chatUser.map(ChatChannelUser::getUsername).when(showing));
91+
username.textProperty().bind(player.map(PlayerInfo::getUsername).when(showing));
10592
country.textProperty()
106-
.bind(
107-
playerObservable.flatMap(PlayerInfo::countryProperty).map(i18n::getCountryNameLocalized).when(showing));
93+
.bind(player.flatMap(PlayerInfo::countryProperty).map(i18n::getCountryNameLocalized).when(showing));
10894
userImageView.imageProperty()
109-
.bind(playerObservable.map(PlayerInfo::getId).map(IdenticonUtil::createIdenticon).when(showing));
110-
ObservableValue<GameInfo> gameObservable = playerObservable.flatMap(PlayerInfo::gameProperty);
95+
.bind(player.map(PlayerInfo::getId).map(IdenticonUtil::createIdenticon).when(showing));
96+
ObservableValue<GameInfo> gameObservable = player.flatMap(PlayerInfo::gameProperty);
11197
gameDetailController.gameProperty().bind(gameObservable.when(showing));
11298
gameDetailWrapper.visibleProperty().bind(gameObservable.flatMap(GameInfo::statusProperty)
11399
.map(status -> status == GameStatus.OPEN || status == GameStatus.PLAYING)
114100
.orElse(false)
115101
.when(showing));
116-
chatUser.flatMap(ChatChannelUser::playerProperty).addListener(playerChangeListener);
117-
}
118-
119-
public void setChatUser(ChatChannelUser chatUser) {
120-
this.chatUser.set(chatUser);
121-
}
122-
123-
public ChatChannelUser getChatUser() {
124-
return chatUser.get();
102+
player.when(showing).subscribe((playerInfo) -> {
103+
if (playerInfo != null) {
104+
loadReceiverRatingInformation(playerInfo);
105+
populateUnlockedAchievementsLabel(playerInfo);
106+
}
107+
});
125108
}
126109

127-
public ObjectProperty<ChatChannelUser> chatUserProperty() {
128-
return chatUser;
110+
public ObjectProperty<PlayerInfo> playerProperty() {
111+
return player;
129112
}
130113

131114
private void populateUnlockedAchievementsLabel(PlayerInfo player) {

src/test/java/com/faforever/client/chat/PrivateChatTabControllerTest.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.faforever.client.navigation.NavigationHandler;
1414
import com.faforever.client.notification.NotificationService;
1515
import com.faforever.client.player.CountryFlagService;
16+
import com.faforever.client.player.PlayerService;
1617
import com.faforever.client.player.PrivatePlayerInfoController;
1718
import com.faforever.client.preferences.ChatPrefs;
1819
import com.faforever.client.replay.WatchButtonController;
@@ -33,6 +34,7 @@
3334
import org.mockito.Spy;
3435

3536
import java.io.InputStream;
37+
import java.util.Optional;
3638

3739
import static org.junit.jupiter.api.Assertions.assertEquals;
3840
import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -76,6 +78,8 @@ public class PrivateChatTabControllerTest extends PlatformTest {
7678
@Mock
7779
private AvatarService avatarService;
7880
@Mock
81+
private PlayerService playerService;
82+
@Mock
7983
private ChatService chatService;
8084
@Spy
8185
private ChatPrefs chatPrefs;
@@ -88,22 +92,22 @@ public class PrivateChatTabControllerTest extends PlatformTest {
8892
@InjectMocks
8993
private PrivateChatTabController instance;
9094

91-
private String playerName;
9295
private PlayerInfo player;
9396

9497
@BeforeEach
9598
public void setUp() throws Exception {
9699
player = PlayerInfoBuilder.create().defaultValues().get();
97-
playerName = player.getUsername();
100+
String playerName = player.getUsername();
98101

102+
lenient().when(playerService.getPlayerByNameIfOnline(playerName)).thenReturn(Optional.of(player));
99103
lenient().when(chatMessageViewController.chatChannelProperty()).thenReturn(new SimpleObjectProperty<>());
100104
lenient().when(chatService.getCurrentUsername()).thenReturn(playerName);
101105
lenient().when(themeService.getThemeFileUrl(any())).then(invocation -> getThemeFileUrl(invocation.getArgument(0)));
102-
lenient().when(privatePlayerInfoController.chatUserProperty()).thenReturn(new SimpleObjectProperty<>());
106+
lenient().when(privatePlayerInfoController.playerProperty()).thenReturn(new SimpleObjectProperty<>());
103107
lenient().when(avatarService.loadAvatar(player.getAvatar())).thenReturn(new Image(InputStream.nullInputStream()));
104108

105109
ChatChannel chatChannel = new ChatChannel(playerName);
106-
ChatChannelUser chatChannelUser = new ChatChannelUser(playerName, new ChatChannel(playerName));
110+
ChatChannelUser chatChannelUser = new ChatChannelUser(playerName, chatChannel);
107111
chatChannelUser.setPlayer(player);
108112
chatChannel.addUser(chatChannelUser);
109113

0 commit comments

Comments
 (0)