Skip to content

Commit a5d383b

Browse files
committed
Allow setting avatar descriptions
There is a known issue that the new description does not show up until you manually refresh. I don't know why. Fixes #232
1 parent 9479f75 commit a5d383b

9 files changed

Lines changed: 67 additions & 21 deletions

File tree

.idea/compiler.xml

Lines changed: 12 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/modules.xml

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/main/java/com/faforever/moderatorclient/api/domain/AvatarService.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,8 @@ public List<Avatar> findAvatarsByAssignedUser(@NotNull String pattern) {
8080
return result;
8181
}
8282

83-
public void uploadAvatar(String name, File avatarImageFile) {
84-
HttpEntity<LinkedMultiValueMap<String, Object>> requestEntity = createAvatarMultipartRequest(name, avatarImageFile);
83+
public void uploadAvatar(String name, String description, File avatarImageFile) {
84+
HttpEntity<LinkedMultiValueMap<String, Object>> requestEntity = createAvatarMultipartRequest(name, description, avatarImageFile);
8585
final String route = "/avatars/upload";
8686
log.debug("Sending API request: {}", route);
8787
fafApi.getRestTemplate().exchange(
@@ -92,8 +92,8 @@ public void uploadAvatar(String name, File avatarImageFile) {
9292
);
9393
}
9494

95-
public void reuploadAvatar(String avatarId, String name, File avatarImageFile) {
96-
HttpEntity<LinkedMultiValueMap<String, Object>> requestEntity = createAvatarMultipartRequest(name, avatarImageFile);
95+
public void reuploadAvatar(String avatarId, String name, String description, File avatarImageFile) {
96+
HttpEntity<LinkedMultiValueMap<String, Object>> requestEntity = createAvatarMultipartRequest(name, description, avatarImageFile);
9797
final String route = "/avatars/{0}/upload";
9898
log.debug("Sending API request: {}", route);
9999
fafApi.getRestTemplate().exchange(
@@ -118,16 +118,19 @@ public List<Avatar> getAllAvatarsWithPlayerAssignments() {
118118
.addInclude("assignments.player"));
119119
}
120120

121-
public void updateAvatarMetadata(String avatarId, String name) {
121+
public void updateAvatarMetadata(String avatarId, String name, String description) {
122122
fafApi.patch(ElideNavigator.of(Avatar.class).id(avatarId),
123-
(Avatar) new Avatar().setTooltip(name).setId(avatarId));
123+
new Avatar()
124+
.setId(avatarId)
125+
.setTooltip(name)
126+
.setDescription(description));
124127
}
125128

126129
@NotNull
127-
private HttpEntity<LinkedMultiValueMap<String, Object>> createAvatarMultipartRequest(String name, File avatarImageFile) {
130+
private HttpEntity<LinkedMultiValueMap<String, Object>> createAvatarMultipartRequest(String name, String description, File avatarImageFile) {
128131
LinkedMultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
129132
map.add("file", new FileSystemResource(avatarImageFile));
130-
map.add("metadata", new AvatarMetadata().setName(name));
133+
map.add("metadata", new AvatarMetadata().setName(name).setDescription(description));
131134
HttpHeaders headers = new HttpHeaders();
132135
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
133136
return new HttpEntity<>(map, headers);

src/main/java/com/faforever/moderatorclient/api/dto/update/AvatarMetadata.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@
55
@Data
66
public class AvatarMetadata {
77
private String name;
8+
private String description;
89
}

src/main/java/com/faforever/moderatorclient/ui/AvatarInfoController.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ public class AvatarInfoController implements Controller<Pane> {
3535
public Runnable onSaveRunnable;
3636
public GridPane root;
3737
public TextField tooltipTextField;
38+
public TextField descriptionTextField;
3839
public ImageView imageView;
3940
public Hyperlink hyperlink;
4041
private AvatarFX avatarFX;
@@ -48,7 +49,8 @@ public Pane getRoot() {
4849
public void setAvatar(AvatarFX avatarFX) {
4950
this.avatarFX = avatarFX;
5051
tooltipTextField.setText(avatarFX.getTooltip());
51-
if (avatarFX.getUrl() != null && avatarFX.getUrl().length() > 0) {
52+
descriptionTextField.setText(avatarFX.getDescription());
53+
if (avatarFX.getUrl() != null && !avatarFX.getUrl().isEmpty()) {
5254
imageView.setImage(new Image(avatarFX.getUrl()));
5355
hyperlink.setText(avatarFX.getUrl());
5456
} else {
@@ -68,7 +70,7 @@ public boolean validate() {
6870
validationErrors.add("No image file selected");
6971
}
7072

71-
if (validationErrors.size() > 0) {
73+
if (!validationErrors.isEmpty()) {
7274
ViewHelper.errorDialog("Validation failed",
7375
String.join("\n", validationErrors)
7476
);
@@ -108,17 +110,18 @@ public void onSave() {
108110

109111
if (avatarFX.getId() != null) {
110112
if (avatarImageFile == null) {
111-
avatarService.updateAvatarMetadata(avatarFX.getId(), tooltipTextField.getText());
113+
avatarService.updateAvatarMetadata(avatarFX.getId(), tooltipTextField.getText(), descriptionTextField.getText());
112114
} else {
113115
final boolean avatarUpdateConfirmed = ViewHelper.confirmDialog("Update Avatar", "Do you really want to override the avatar?");
114116
if (!avatarUpdateConfirmed) {
115117
return;
116118
}
117-
avatarService.reuploadAvatar(avatarFX.getId(), tooltipTextField.getText(), avatarImageFile);
119+
avatarService.reuploadAvatar(avatarFX.getId(), tooltipTextField.getText(), descriptionTextField.getText(), avatarImageFile);
118120
}
119121
avatarFX.setTooltip(tooltipTextField.getText());
122+
avatarFX.setDescription(descriptionTextField.getText());
120123
} else {
121-
avatarService.uploadAvatar(tooltipTextField.getText(), avatarImageFile);
124+
avatarService.uploadAvatar(tooltipTextField.getText(), descriptionTextField.getText(), avatarImageFile);
122125
}
123126

124127
close();

src/main/java/com/faforever/moderatorclient/ui/ViewHelper.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,12 @@ public static void buildAvatarTableView(TableView<AvatarFX> tableView, Observabl
192192
tableView.getColumns().add(tooltipColumn);
193193
extractors.put(tooltipColumn, AvatarFX::getTooltip);
194194

195+
TableColumn<AvatarFX, String> descriptionColumn = new TableColumn<>("Description");
196+
descriptionColumn.setCellValueFactory(o -> o.getValue().descriptionProperty());
197+
descriptionColumn.setMinWidth(250);
198+
tableView.getColumns().add(descriptionColumn);
199+
extractors.put(descriptionColumn, AvatarFX::getDescription);
200+
195201
TableColumn<AvatarFX, OffsetDateTime> changeTimeColumn = new TableColumn<>("Created");
196202
changeTimeColumn.setCellValueFactory(o -> o.getValue().createTimeProperty());
197203
changeTimeColumn.setMinWidth(180);
@@ -809,6 +815,13 @@ public static void buildUserAvatarsTableView(TableView<AvatarAssignmentFX> table
809815
tableView.getColumns().add(tooltipColumn);
810816
extractors.put(tooltipColumn, avatarAssignmentFX -> avatarAssignmentFX.getAvatar().getTooltip());
811817

818+
819+
TableColumn<AvatarAssignmentFX, String> descriptionColumn = new TableColumn<>("Description");
820+
descriptionColumn.setCellValueFactory(o -> o.getValue().avatarProperty().get().descriptionProperty());
821+
descriptionColumn.setMinWidth(100);
822+
tableView.getColumns().add(descriptionColumn);
823+
extractors.put(descriptionColumn, avatarAssignmentFX -> avatarAssignmentFX.getAvatar().getDescription());
824+
812825
TableColumn<AvatarAssignmentFX, Boolean> selectedColumn = new TableColumn<>("Selected");
813826
selectedColumn.setCellValueFactory(o -> o.getValue().selectedProperty());
814827
selectedColumn.setCellFactory(CheckBoxTableCell.forTableColumn(selectedColumn));

src/main/java/com/faforever/moderatorclient/ui/domain/AvatarFX.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@
1010
public class AvatarFX extends AbstractEntityFX {
1111
private final StringProperty url;
1212
private final StringProperty tooltip;
13+
private final StringProperty description;
1314
private final ObservableList<AvatarAssignmentFX> assignments;
1415

1516
public AvatarFX() {
1617
url = new SimpleStringProperty();
1718
tooltip = new SimpleStringProperty();
19+
description = new SimpleStringProperty();
1820
assignments = FXCollections.observableArrayList();
1921
}
2022

@@ -42,6 +44,18 @@ public StringProperty tooltipProperty() {
4244
return tooltip;
4345
}
4446

47+
public String getDescription() {
48+
return description.get();
49+
}
50+
51+
public StringProperty descriptionProperty() {
52+
return description;
53+
}
54+
55+
public void setDescription(String description) {
56+
this.description.set(description);
57+
}
58+
4559
public List<AvatarAssignmentFX> getAssignments() {
4660
return assignments;
4761
}

src/main/resources/ui/avatarInfo.fxml

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,10 @@
2121
<children>
2222
<Label text="Name / Tooltip:"/>
2323
<TextField fx:id="tooltipTextField" promptText="Name / Tooltip" GridPane.columnIndex="1"/>
24-
<Label text="Image:" GridPane.rowIndex="1"/>
25-
<HBox alignment="CENTER_LEFT" GridPane.columnIndex="1" GridPane.hgrow="ALWAYS" GridPane.rowIndex="1">
24+
<Label text="Usage description:" GridPane.rowIndex="1"/>
25+
<TextField fx:id="descriptionTextField" promptText="Usage description" GridPane.columnIndex="1" GridPane.rowIndex="1"/>
26+
<Label text="Image:" GridPane.rowIndex="2"/>
27+
<HBox alignment="CENTER_LEFT" GridPane.columnIndex="1" GridPane.hgrow="ALWAYS" GridPane.rowIndex="2">
2628
<children>
2729
<Pane HBox.hgrow="ALWAYS">
2830
<HBox.margin>
@@ -36,7 +38,7 @@
3638
<Button alignment="CENTER_RIGHT" mnemonicParsing="false" onAction="#onChooseFile" text="choose file"/>
3739
</children>
3840
</HBox>
39-
<HBox alignment="BOTTOM_RIGHT" GridPane.columnIndex="1" GridPane.columnSpan="2147483647" GridPane.rowIndex="3"
41+
<HBox alignment="BOTTOM_RIGHT" GridPane.columnIndex="2" GridPane.columnSpan="2147483647" GridPane.rowIndex="3"
4042
GridPane.vgrow="ALWAYS">
4143
<children>
4244
<Button defaultButton="true" mnemonicParsing="false" onAction="#onSave" text="Save changes"/>
@@ -50,8 +52,8 @@
5052
<Insets top="20.0"/>
5153
</GridPane.margin>
5254
</HBox>
53-
<Label text="URL:" GridPane.rowIndex="2"/>
54-
<Hyperlink fx:id="hyperlink" text="Hyperlink" GridPane.columnIndex="1" GridPane.rowIndex="2"/>
55+
<Label text="URL:" GridPane.rowIndex="3"/>
56+
<Hyperlink fx:id="hyperlink" text="Hyperlink" GridPane.columnIndex="1" GridPane.rowIndex="3"/>
5557
</children>
5658
<padding>
5759
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0"/>

src/main/resources/ui/main_window/avatars.fxml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<children>
2020
<HBox>
2121
<children>
22-
<VBox>
22+
<VBox minWidth="220.0">
2323
<children>
2424
<RadioButton fx:id="showAllAvatarsRadioButton" mnemonicParsing="false" selected="true"
2525
text="show all">

0 commit comments

Comments
 (0)