load static method
Implementation
static Future<AutoScript> load(String path) async {
// return AutoScript(
// checkpoints: [],
// record: [],
// metaData: ScriptMetaData(),
// dependencies: []);
final file = File(path);
if (!file.existsSync()) {
throw Exception('File not found');
}
Archive archive = TarDecoder().decodeBuffer(InputFileStream(path));
List<int> record = [];
ScriptMetaData scriptMetaData = ScriptMetaData();
SnapshotMatchPositions snapshotMatchPositions = SnapshotMatchPositions();
final List<Checkpoint> checkpoints = [];
final Map<String, Checkpoint> fastFind = <String, Checkpoint>{};
final List<String> dependencies = [];
final iterator = archive.iterator;
while (iterator.moveNext()) {
final data = iterator.current.content as List<int>;
if (iterator.current.name == TarKey.allDependency) {
Dependencies d = Dependencies.fromBuffer(data);
dependencies.addAll(d.dependencies);
} else if (iterator.current.name == TarKey.recordStream) {
record = data;
} else if (iterator.current.name == TarKey.scriptMetaData) {
scriptMetaData = ScriptMetaData.fromBuffer(data);
} else if (iterator.current.name == TarKey.snapshotMatchPositions) {
snapshotMatchPositions = SnapshotMatchPositions.fromBuffer(data);
} else if (iterator.current.name.startsWith(TarKey.screenshotPrefix)) {
final checkpoint = Checkpoint(
name: iterator.current.name, snapshot: Uint8List.fromList(data));
checkpoints.add(checkpoint);
fastFind[checkpoint.name] = checkpoint;
}
}
snapshotMatchPositions.all.forEach((element) {
fastFind[element.name]
?.matchPositions
.addAll(element.all.map((e) => RatioRect.matchPosition(e)));
});
return AutoScript(
checkpoints: checkpoints,
metaData: scriptMetaData,
dependencies: dependencies,
record: record);
}