|
1 | 1 | package org.jackhuang.hmcl.mod.modinfo; |
2 | 2 |
|
| 3 | +import com.google.gson.JsonArray; |
| 4 | +import com.google.gson.JsonDeserializationContext; |
| 5 | +import com.google.gson.JsonDeserializer; |
| 6 | +import com.google.gson.JsonElement; |
3 | 7 | import com.google.gson.JsonParseException; |
| 8 | +import com.google.gson.JsonPrimitive; |
| 9 | +import com.google.gson.annotations.JsonAdapter; |
4 | 10 | import com.moandjiezana.toml.Toml; |
5 | 11 | import org.jackhuang.hmcl.mod.LocalModFile; |
6 | 12 | import org.jackhuang.hmcl.mod.ModLoaderType; |
|
13 | 19 |
|
14 | 20 | import java.io.IOException; |
15 | 21 | import java.io.InputStream; |
16 | | -import java.nio.file.*; |
| 22 | +import java.lang.reflect.Type; |
| 23 | +import java.nio.file.FileSystem; |
| 24 | +import java.nio.file.Files; |
| 25 | +import java.nio.file.Path; |
| 26 | +import java.nio.file.StandardCopyOption; |
17 | 27 | import java.util.ArrayList; |
18 | 28 | import java.util.HashMap; |
19 | 29 | import java.util.List; |
| 30 | +import java.util.StringJoiner; |
20 | 31 | import java.util.jar.Attributes; |
21 | 32 | import java.util.jar.Manifest; |
22 | 33 |
|
@@ -68,6 +79,7 @@ public static class Mod { |
68 | 79 | private final String displayName; |
69 | 80 | private final String side; |
70 | 81 | private final String displayURL; |
| 82 | + @JsonAdapter(AuthorDeserializer.class) |
71 | 83 | private final String authors; |
72 | 84 | private final String description; |
73 | 85 |
|
@@ -112,6 +124,29 @@ public String getAuthors() { |
112 | 124 | public String getDescription() { |
113 | 125 | return description; |
114 | 126 | } |
| 127 | + |
| 128 | + static final class AuthorDeserializer implements JsonDeserializer<String> { |
| 129 | + @Override |
| 130 | + public String deserialize(JsonElement authors, Type type, JsonDeserializationContext context) throws JsonParseException { |
| 131 | + if (authors == null || authors.isJsonNull()) { |
| 132 | + return null; |
| 133 | + } else if (authors instanceof JsonPrimitive primitive) { |
| 134 | + return primitive.getAsString(); |
| 135 | + } else if (authors instanceof JsonArray array) { |
| 136 | + var joiner = new StringJoiner(", "); |
| 137 | + for (int i = 0; i < array.size(); i++) { |
| 138 | + if (!(array.get(i) instanceof JsonPrimitive element)) { |
| 139 | + return authors.toString(); |
| 140 | + } |
| 141 | + |
| 142 | + joiner.add(element.getAsString()); |
| 143 | + } |
| 144 | + return joiner.toString(); |
| 145 | + } |
| 146 | + |
| 147 | + return authors.toString(); |
| 148 | + } |
| 149 | + } |
115 | 150 | } |
116 | 151 |
|
117 | 152 | public static LocalModFile fromForgeFile(ModManager modManager, Path modFile, FileSystem fs) throws IOException { |
|
0 commit comments