Skip to content

Commit 5c17783

Browse files
authored
Fix: Restore subtitle when RemoteVersionListCell is reused (#6329)
1 parent a921be4 commit 5c17783

1 file changed

Lines changed: 56 additions & 55 deletions

File tree

HMCL/src/main/java/org/jackhuang/hmcl/ui/download/VersionsPage.java

Lines changed: 56 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@ private void onOpenWiki() {
213213
@Override
214214
public void updateItem(RemoteVersion remoteVersion, boolean empty) {
215215
RemoteVersion oldRemoteVersion = getItem();
216+
216217
super.updateItem(remoteVersion, empty);
217218

218219
if (empty) {
@@ -221,74 +222,74 @@ public void updateItem(RemoteVersion remoteVersion, boolean empty) {
221222
}
222223
setGraphic(pane);
223224

225+
if (oldRemoteVersion == remoteVersion) return;
226+
224227
twoLineListItem.setTitle(I18n.getDisplayVersion(remoteVersion));
225228
if (remoteVersion.getReleaseDate() != null) {
226229
twoLineListItem.setSubtitle(I18n.formatDateTime(remoteVersion.getReleaseDate()));
227230
} else {
228231
twoLineListItem.setSubtitle(null);
229232
}
230233

231-
if (oldRemoteVersion != remoteVersion) {
232-
twoLineListItem.getTags().clear();
234+
twoLineListItem.getTags().clear();
233235

234-
if (remoteVersion instanceof GameRemoteVersion) {
235-
RemoteVersion.Type versionType = remoteVersion.getVersionType();
236-
GameVersionNumber gameVersion = GameVersionNumber.asGameVersion(remoteVersion.getGameVersion());
236+
if (remoteVersion instanceof GameRemoteVersion) {
237+
RemoteVersion.Type versionType = remoteVersion.getVersionType();
238+
GameVersionNumber gameVersion = GameVersionNumber.asGameVersion(remoteVersion.getGameVersion());
237239

238-
switch (versionType) {
239-
case RELEASE -> {
240-
twoLineListItem.addTag(i18n("version.game.release"));
241-
imageView.setImage(VersionIconType.GRASS.getIcon());
242-
}
243-
case SNAPSHOT, PENDING, UNOBFUSCATED -> {
244-
if (versionType == RemoteVersion.Type.SNAPSHOT
245-
&& GameVersionNumber.asGameVersion(remoteVersion.getGameVersion()).isAprilFools()) {
246-
twoLineListItem.addTag(i18n("version.game.april_fools"));
247-
imageView.setImage(VersionIconType.APRIL_FOOLS.getIcon());
248-
} else {
249-
twoLineListItem.addTag(i18n("version.game.snapshot"));
250-
imageView.setImage(VersionIconType.COMMAND.getIcon());
251-
}
252-
}
253-
default -> {
254-
twoLineListItem.addTag(i18n("version.game.old"));
255-
imageView.setImage(VersionIconType.CRAFT_TABLE.getIcon());
240+
switch (versionType) {
241+
case RELEASE -> {
242+
twoLineListItem.addTag(i18n("version.game.release"));
243+
imageView.setImage(VersionIconType.GRASS.getIcon());
244+
}
245+
case SNAPSHOT, PENDING, UNOBFUSCATED -> {
246+
if (versionType == RemoteVersion.Type.SNAPSHOT
247+
&& GameVersionNumber.asGameVersion(remoteVersion.getGameVersion()).isAprilFools()) {
248+
twoLineListItem.addTag(i18n("version.game.april_fools"));
249+
imageView.setImage(VersionIconType.APRIL_FOOLS.getIcon());
250+
} else {
251+
twoLineListItem.addTag(i18n("version.game.snapshot"));
252+
imageView.setImage(VersionIconType.COMMAND.getIcon());
256253
}
257254
}
258-
259-
switch (NativePatcher.checkSupportedStatus(gameVersion, Platform.SYSTEM_PLATFORM, OperatingSystem.SYSTEM_VERSION)) {
260-
case UNTESTED -> twoLineListItem.addTagWarning(i18n("version.game.support_status.untested"));
261-
case UNSUPPORTED -> twoLineListItem.addTagWarning(i18n("version.game.support_status.unsupported"));
255+
default -> {
256+
twoLineListItem.addTag(i18n("version.game.old"));
257+
imageView.setImage(VersionIconType.CRAFT_TABLE.getIcon());
262258
}
263-
} else {
264-
VersionIconType iconType;
265-
if (remoteVersion instanceof LiteLoaderRemoteVersion)
266-
iconType = VersionIconType.CHICKEN;
267-
else if (remoteVersion instanceof OptiFineRemoteVersion)
268-
iconType = VersionIconType.OPTIFINE;
269-
else if (remoteVersion instanceof ForgeRemoteVersion)
270-
iconType = VersionIconType.FORGE;
271-
else if (remoteVersion instanceof CleanroomRemoteVersion)
272-
iconType = VersionIconType.CLEANROOM;
273-
else if (remoteVersion instanceof NeoForgeRemoteVersion)
274-
iconType = VersionIconType.NEO_FORGE;
275-
else if (remoteVersion instanceof LegacyFabricRemoteVersion || remoteVersion instanceof LegacyFabricAPIRemoteVersion)
276-
iconType = VersionIconType.LEGACY_FABRIC;
277-
else if (remoteVersion instanceof FabricRemoteVersion || remoteVersion instanceof FabricAPIRemoteVersion)
278-
iconType = VersionIconType.FABRIC;
279-
else if (remoteVersion instanceof QuiltRemoteVersion || remoteVersion instanceof QuiltAPIRemoteVersion)
280-
iconType = VersionIconType.QUILT;
281-
else
282-
iconType = VersionIconType.COMMAND;
283-
284-
imageView.setImage(iconType.getIcon());
285-
String displayGameVersion = I18n.getDisplayVersion(GameVersionNumber.asGameVersion(remoteVersion.getGameVersion()));
286-
287-
if (twoLineListItem.getSubtitle() == null)
288-
twoLineListItem.setSubtitle(displayGameVersion);
289-
else
290-
twoLineListItem.addTag(displayGameVersion);
291259
}
260+
261+
switch (NativePatcher.checkSupportedStatus(gameVersion, Platform.SYSTEM_PLATFORM, OperatingSystem.SYSTEM_VERSION)) {
262+
case UNTESTED -> twoLineListItem.addTagWarning(i18n("version.game.support_status.untested"));
263+
case UNSUPPORTED -> twoLineListItem.addTagWarning(i18n("version.game.support_status.unsupported"));
264+
}
265+
} else {
266+
VersionIconType iconType;
267+
if (remoteVersion instanceof LiteLoaderRemoteVersion)
268+
iconType = VersionIconType.CHICKEN;
269+
else if (remoteVersion instanceof OptiFineRemoteVersion)
270+
iconType = VersionIconType.OPTIFINE;
271+
else if (remoteVersion instanceof ForgeRemoteVersion)
272+
iconType = VersionIconType.FORGE;
273+
else if (remoteVersion instanceof CleanroomRemoteVersion)
274+
iconType = VersionIconType.CLEANROOM;
275+
else if (remoteVersion instanceof NeoForgeRemoteVersion)
276+
iconType = VersionIconType.NEO_FORGE;
277+
else if (remoteVersion instanceof LegacyFabricRemoteVersion || remoteVersion instanceof LegacyFabricAPIRemoteVersion)
278+
iconType = VersionIconType.LEGACY_FABRIC;
279+
else if (remoteVersion instanceof FabricRemoteVersion || remoteVersion instanceof FabricAPIRemoteVersion)
280+
iconType = VersionIconType.FABRIC;
281+
else if (remoteVersion instanceof QuiltRemoteVersion || remoteVersion instanceof QuiltAPIRemoteVersion)
282+
iconType = VersionIconType.QUILT;
283+
else
284+
iconType = VersionIconType.COMMAND;
285+
286+
imageView.setImage(iconType.getIcon());
287+
String displayGameVersion = I18n.getDisplayVersion(GameVersionNumber.asGameVersion(remoteVersion.getGameVersion()));
288+
289+
if (twoLineListItem.getSubtitle() == null)
290+
twoLineListItem.setSubtitle(displayGameVersion);
291+
else
292+
twoLineListItem.addTag(displayGameVersion);
292293
}
293294
}
294295
}

0 commit comments

Comments
 (0)