load static method

Future<AutoScript> load(
  1. String path
)

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);
}