Skip to content

Commit

Permalink
1st part of implementation to make visible indicator for watched/seen…
Browse files Browse the repository at this point in the history
… replays
  • Loading branch information
sulikdan committed Jan 10, 2025
1 parent 01f2f89 commit fee15ce
Show file tree
Hide file tree
Showing 8 changed files with 98 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,11 @@ public class Preferences {
@Getter
private final FiltersPrefs filters = new FiltersPrefs();

/* Temporary solution to see POC, probably will be moved somewhere else and renamed*/
@JsonMerge
@Getter
ReplayHistoryPrefs replayHistory = new ReplayHistoryPrefs();

private final StringProperty themeName = new SimpleStringProperty(DEFAULT_THEME_NAME);
private final BooleanProperty preReleaseCheckEnabled = new SimpleBooleanProperty(false);
private final BooleanProperty mapAndModAutoUpdate = new SimpleBooleanProperty(true);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.faforever.client.preferences;

import javafx.beans.property.MapProperty;
import javafx.beans.property.SimpleMapProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableMap;

import java.time.OffsetDateTime;

public class ReplayHistoryPrefs {

private final MapProperty<Integer, OffsetDateTime> watchedReplayMap = new SimpleMapProperty<>(
FXCollections.observableHashMap());

public ObservableMap<Integer, OffsetDateTime> getWatchedReplayMap() {return watchedReplayMap.getValue();}

public void setWatchedReplayMap(ObservableMap<Integer, OffsetDateTime> watchedReplayMap) {
this.watchedReplayMap.setValue(watchedReplayMap);
}

public MapProperty<Integer, OffsetDateTime> watchedReplayMapProperty() {return watchedReplayMap;}

}
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.function.Consumer;

Expand All @@ -55,6 +56,7 @@ public class ReplayCardController extends VaultEntityCardController<Replay> {

private final UiService uiService;
private final ReplayService replayService;
private final ReplayWatchingService replayWatchingService;
private final TimeService timeService;
private final MapService mapService;
private final RatingService ratingService;
Expand All @@ -81,6 +83,7 @@ public class ReplayCardController extends VaultEntityCardController<Replay> {
public Button deleteButton;
public TextField replayIdField;
public StarsController starsController;
public Label replayWatchedLabel;

private Consumer<Replay> onOpenDetailListener;
private Runnable onDeleteListener;
Expand All @@ -89,7 +92,7 @@ public class ReplayCardController extends VaultEntityCardController<Replay> {

@Override
protected void onInitialize() {
JavaFxUtil.bindManagedToVisible(deleteButton, tickDurationLabel, realTimeDurationLabel);
JavaFxUtil.bindManagedToVisible(deleteButton, tickDurationLabel, realTimeDurationLabel, replayWatchedLabel);

ObservableValue<MapVersion> mapVersionObservable = entity.map(Replay::mapVersion);
onMapLabel.textProperty()
Expand Down Expand Up @@ -136,13 +139,26 @@ protected void onInitialize() {
.map(reviewsSummary -> reviewsSummary.score() / reviewsSummary.numReviews())
.when(showing));


replayWatchedLabel.visibleProperty().bind(replayWatchedLabel.textProperty().isNotEmpty());
replayWatchedLabel.textProperty().bind( entity.map(Replay::id).when(showing).map(
replayWatchingService::getReplayWatchedDateTime).map(timeService::asDate).map(date -> {
if( date != null ) {
replayTileRoot.setStyle("-fx-border-color: -card-watched-color;");
replayTileRoot.setStyle("-fx-border-width: 7;");
}
return date;

}).when(showing));


teams.bind(entity.map(Replay::teamPlayerStats).when(showing));
teams.orElse(java.util.Map.of()).addListener(teamsListener);
}

private void populatePlayers(java.util.Map<String, List<GamePlayerStats>> newValue) {
teamsContainer.getChildren().clear();
CompletableFuture.supplyAsync(() -> createTeams(newValue)).thenAcceptAsync(teamCards ->
CompletableFuture.supplyAsync(() -> createTeams(newValue)).thenAcceptAsync(teamCards ->
teamsContainer.getChildren().setAll(teamCards), fxApplicationThreadExecutor);
}

Expand Down Expand Up @@ -170,7 +186,7 @@ private List<VBox> createTeams(java.util.Map<String, List<GamePlayerStats>> team
return teamCard;
}).toList();
}
VBox helperLabel = new VBox();
VBox helperLabel = new VBox();
helperLabel.getChildren().add(new Label("Click for teams"));
ArrayList<VBox> helpers = new ArrayList<VBox>();
helpers.add(helperLabel);
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/com/faforever/client/replay/ReplayService.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import com.faforever.client.notification.NotificationService;
import com.faforever.client.notification.PersistentNotification;
import com.faforever.client.preferences.DataPrefs;
import com.faforever.client.preferences.Preferences;
import com.faforever.client.task.TaskService;
import com.faforever.client.user.LoginService;
import com.faforever.client.util.FileSizeReader;
Expand Down Expand Up @@ -102,6 +103,7 @@ public class ReplayService {
private final ReplayMapper replayMapper;
private final DataPrefs dataPrefs;
private final ObjectFactory<ReplayDownloadTask> replayDownloadTaskFactory;
private final ReplayWatchingService replayWatchingService;

@VisibleForTesting
static Integer parseSupComVersion(ReplayDataParser parser) {
Expand Down Expand Up @@ -259,6 +261,7 @@ public void runReplay(Replay item) {
if (item.replayFile() != null) {
try {
runReplayFile(item.replayFile());
this.replayWatchingService.updateReplayWatchHistory(item.id());
} catch (Exception e) {
log.error("Could not read replay file `{}`", item.replayFile(), e);
notificationService.addImmediateErrorNotification(e, "replay.couldNotParse");
Expand Down Expand Up @@ -333,6 +336,7 @@ private void runOnlineReplay(int replayId) {
downloadReplay(replayId).thenAccept((path) -> {
try {
runReplayFile(path);
this.replayWatchingService.updateReplayWatchHistory(replayId);
} catch (IOException | CompressorException e) {
throw new RuntimeException(e);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.faforever.client.replay;

import com.faforever.client.preferences.Preferences;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;

import java.time.OffsetDateTime;

@Lazy
@Service
@Slf4j
@RequiredArgsConstructor
public class ReplayWatchingService {

private final Preferences preferences;

boolean wasReplayWatched(Integer replayId) {
return preferences.getReplayHistory().getWatchedReplayMap().containsKey(replayId);
}

OffsetDateTime getReplayWatchedDateTime(Integer replayId) {
if (wasReplayWatched(replayId)) {
return preferences.getReplayHistory().getWatchedReplayMap().get(replayId);
} else {
return null;
}
}

void updateReplayWatchHistory(Integer replayId) {
preferences.getReplayHistory().getWatchedReplayMap().put(replayId, OffsetDateTime.now());
}


}
1 change: 1 addition & 0 deletions src/main/resources/theme/colors.css
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@

-divider-color: #424242;
-card-color: #424242CC;
-card-watched-color: #A8A8A882;
-dimmer-color: #21212199;
-fx-text-color: #fff;
-darkened-color: dimgrey;
Expand Down
4 changes: 4 additions & 0 deletions src/main/resources/theme/icons.css
Original file line number Diff line number Diff line change
Expand Up @@ -363,6 +363,10 @@
-fx-shape: "m144.8143 121.6803c-71.8005 0-130 58.1994-130 130 0 71.8005 58.1995 130 130 130 71.8006 0 130-58.1995 130-130 0-71.8006-58.1994-130-130-130zm225.1602 0c-8.9746 0-16.25 7.2754-16.25 16.25v16.25h32.5v16.5566c-54.5385 4.1483-97.5 49.7165-97.5 105.3184 0 58.3349 47.2901 105.625 105.625 105.625 58.3349 0 105.625-47.2901 105.625-105.625 0-55.6013-42.9615-101.1695-97.5-105.3184v-16.5566h32.5v-16.25c0-8.9746-7.2749-16.25-16.25-16.25zm-225.1524 16.25c17.875 0 34.7842 4.1277 49.8399 11.4727-1.0563.8856-2.0797 1.8196-3.0547 2.8027-9.2056 9.2056-14.2754 21.4503-14.2754 34.4746 0 13.0244 5.0698 25.2609 14.2754 34.4746 9.2544 9.2544 21.6364 14.2832 34.4414 14.2832.8043 0 1.6077-.016 2.4121-.0566 3.51 13.1544 9.8395 47.394-2.1367 94.5352-.1137.4469-.1784.8855-.2109 1.3242-20.6456 21.0925-49.4313 34.1895-81.2813 34.1895h-.0176c-15.9819 0-31.1998-3.3064-44.9961-9.2539l59.1992-66.6016c1.3244-1.4869 2.0547-3.4039 2.0547-5.3945v-24.375c0-4.485-3.64-8.125-8.125-8.125-28.6893 0-58.9533-29.8266-59.2539-30.1191-1.5275-1.5275-3.593-2.3809-5.7461-2.3809h-32.5c-4.485 0-8.125 3.64-8.125 8.125v48.75c0 3.0794 1.7398 5.8906 4.4941 7.2637l28.0059 14.0078v47.7012c-29.4693-20.5562-48.75-54.6971-48.75-93.3477 0-17.4444 3.9331-33.9706 10.9531-48.75h29.6719c2.1531 0 4.2267-.8534 5.7461-2.3809l32.5-32.5c1.5275-1.5275 2.3789-3.591 2.3789-5.7441v-19.6543c10.3025-3.0631 21.2063-4.7207 32.5-4.7207zm246.9492 56.9199-5.5039 79.7324c-.4723 6.6752 3.1633 9.5976 8.082 9.5976 4.9187 0 8.5568-2.9225 8.084-9.5976l-5.5039-79.7324c20.7355.6429 40.1363 9.0157 54.873 23.752 15.3461 15.3461 23.7969 35.7508 23.7969 57.4531 0 21.7024-8.4508 42.1071-23.7969 57.4531-15.3466 15.3461-35.7502 23.7969-57.4531 23.7969-21.7029 0-42.1051-8.4508-57.4512-23.7969-15.3461-15.3461-23.7988-35.7507-23.7988-57.4531 0-21.7023 8.4527-42.1071 23.7988-57.4531 14.7367-14.7362 34.1376-23.1096 54.873-23.752z";
}

.watched-icon {
-fx-shape: "M16 6c-6.979 0-13.028 4.064-16 10 2.972 5.936 9.021 10 16 10s13.027-4.064 16-10c-2.972-5.936-9.021-10-16-10zM23.889 11.303c1.88 1.199 3.473 2.805 4.67 4.697-1.197 1.891-2.79 3.498-4.67 4.697-2.362 1.507-5.090 2.303-7.889 2.303s-5.527-0.796-7.889-2.303c-1.88-1.199-3.473-2.805-4.67-4.697 1.197-1.891 2.79-3.498 4.67-4.697 0.122-0.078 0.246-0.154 0.371-0.228-0.311 0.854-0.482 1.776-0.482 2.737 0 4.418 3.582 8 8 8s8-3.582 8-8c0-0.962-0.17-1.883-0.482-2.737 0.124 0.074 0.248 0.15 0.371 0.228v0zM16 13c0 1.657-1.343 3-3 3s-3-1.343-3-3 1.343-3 3-3 3 1.343 3 3z"
}

.game-duration-icon {
-fx-shape: "m383.0234 122.6191c-8.7244 0-15.7969 7.0725-15.7969 15.7969v15.7969h31.5938v16.0977c-53.0183 4.0327-94.7832 48.3288-94.7832 102.3809 0 56.7089 45.9728 102.6816 102.6816 102.6816 56.7089 0 102.6816-45.9728 102.6816-102.6816 0-54.0515-41.7649-98.3477-94.7832-102.3809v-16.0977h31.5938v-15.7969c0-8.7244-7.072-15.7969-15.7969-15.7969zm-380.4043 1.3945v178.5469h285.6758v-178.5469zm17.8535 17.8535h249.9668v142.8379h-249.9668zm383.7383 51.8828-5.3496 77.5098c-.4591 6.4891 3.0759 9.3301 7.8574 9.3301 4.7816 0 8.317-2.841 7.8574-9.3301l-5.3496-77.5098c20.1575.625 39.0178 8.7644 53.3438 23.0898 14.9183 14.9183 23.1348 34.7541 23.1348 55.8516 0 21.0974-8.2164 40.9332-23.1348 55.8516-14.9188 14.9183-34.7536 23.1348-55.8516 23.1348-21.0979 0-40.9332-8.2164-55.8516-23.1348-14.9183-14.9183-23.1328-34.7541-23.1328-55.8516 0-21.0974 8.2145-40.9332 23.1328-55.8516 14.3259-14.3254 33.1862-22.4654 53.3438-23.0898zm-303.3906 126.6641-8.9277 35.7109-17.8555 17.8535h142.8379l-17.8535-17.8535-8.9277-35.7109z";
}
6 changes: 6 additions & 0 deletions src/main/resources/theme/vault/replay/replay_card.fxml
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,12 @@
</graphic>
</Label>

<Label fx:id="replayWatchedLabel" text="&lt;ReplayWatched&gt;" GridPane.columnIndex="2" GridPane.rowIndex="8">
<graphic>
<Region styleClass="icon, watched-icon" />
</graphic>
</Label>


<HBox spacing="10.0" alignment="BOTTOM_RIGHT" GridPane.halignment="RIGHT" GridPane.valignment="BOTTOM"
GridPane.columnIndex="2" GridPane.rowIndex="8"
Expand Down

0 comments on commit fee15ce

Please sign in to comment.