Make model import more robust
This commit is contained in:
parent
a111d12969
commit
0772b8e057
|
@ -1,6 +1,7 @@
|
||||||
package ctbrec.ui.tabs.recorded;
|
package ctbrec.ui.tabs.recorded;
|
||||||
|
|
||||||
import com.squareup.moshi.*;
|
import com.squareup.moshi.*;
|
||||||
|
import com.squareup.moshi.JsonReader.Token;
|
||||||
import ctbrec.Config;
|
import ctbrec.Config;
|
||||||
import ctbrec.Model;
|
import ctbrec.Model;
|
||||||
import ctbrec.ModelGroup;
|
import ctbrec.ModelGroup;
|
||||||
|
@ -21,6 +22,8 @@ import java.nio.file.Files;
|
||||||
import java.time.LocalTime;
|
import java.time.LocalTime;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
import static com.squareup.moshi.JsonReader.Token.*;
|
||||||
|
|
||||||
public class ModelImportExport {
|
public class ModelImportExport {
|
||||||
|
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(ModelImportExport.class);
|
private static final Logger LOG = LoggerFactory.getLogger(ModelImportExport.class);
|
||||||
|
@ -165,14 +168,12 @@ public class ModelImportExport {
|
||||||
reader.beginArray();
|
reader.beginArray();
|
||||||
while (reader.hasNext()) {
|
while (reader.hasNext()) {
|
||||||
try {
|
try {
|
||||||
JsonReader.Token token = reader.peek();
|
Token token = reader.peek();
|
||||||
if (token == JsonReader.Token.BEGIN_OBJECT) {
|
if (token == BEGIN_OBJECT) {
|
||||||
Model model = modelAdapter.fromJson(reader);
|
Model model = modelAdapter.fromJson(reader);
|
||||||
result.add(model);
|
result.add(model);
|
||||||
} else if (token == JsonReader.Token.NAME) {
|
|
||||||
reader.skipName();
|
|
||||||
} else {
|
} else {
|
||||||
reader.skipValue();
|
skipToNextModel(reader);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LOG.error("Couldn't parse model json", e);
|
LOG.error("Couldn't parse model json", e);
|
||||||
|
@ -181,4 +182,30 @@ public class ModelImportExport {
|
||||||
reader.endArray();
|
reader.endArray();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void skipToNextModel(JsonReader reader) throws IOException {
|
||||||
|
while (true) {
|
||||||
|
Token token = reader.peek();
|
||||||
|
if (token == BEGIN_OBJECT) {
|
||||||
|
reader.beginObject();
|
||||||
|
} else if (token == END_OBJECT) {
|
||||||
|
reader.endObject();
|
||||||
|
if (reader.getPath().matches("\\$\\.models\\[\\d+]")) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else if (token == NAME) {
|
||||||
|
reader.skipName();
|
||||||
|
Token next = reader.peek();
|
||||||
|
if (List.of(NULL, NUMBER, STRING, BOOLEAN).contains(next)) {
|
||||||
|
reader.skipValue();
|
||||||
|
}
|
||||||
|
} else if (token == BEGIN_ARRAY) {
|
||||||
|
reader.beginArray();
|
||||||
|
} else if (token == END_ARRAY) {
|
||||||
|
reader.endArray();
|
||||||
|
} else if (List.of(NULL, NUMBER, STRING, BOOLEAN).contains(token)) {
|
||||||
|
reader.skipValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue