buildUpdate method

UpdateResult buildUpdate()

Implementation

UpdateResult buildUpdate() {
  _clean(BuildConfig.updatedPath);
  final downloadedPackage = DownloadedPackage(allowedLocales: allowedLocales);
  final downloadedFilesMap = {
    for (final file in downloadedPackage.localizationFiles) file.locale: file
  };
  packages.forEach((package) {
    final templateFile = package.localizationFiles
        .firstWhere((element) => element.file.path.contains(package.templateFile));
    final templateFileJson = jsonDecode(templateFile.file.readAsStringSync());
    final templateKeys = _addPackagePrefix(templateFileJson, package.prefix).keys;
    package.localizationFiles.forEach((localizationFile) {
      final locale = localizationFile.locale;
      final json = jsonDecode(localizationFile.file.readAsStringSync());
      final withPrefixJson = _addPackagePrefix(json, package.prefix);
      final downloadedFile = downloadedFilesMap[localizationFile.locale]?.file;
      final Map<String, dynamic> downloadedJson =
          jsonDecode(downloadedFile?.readAsStringSync() ?? "");
      for (var key in templateKeys) {
        final value = downloadedJson[key];
        if (value == null) continue;
        if (value is String && value.isEmpty) continue;
        if (value is Map && value.isEmpty) continue;
        withPrefixJson[key] = value;
      }
      final updatedJson = _removePackagePrefix(withPrefixJson, package.prefix);
      _arbFile(path: BuildConfig.updatedPath, package: package, locale: locale)
          .writeAsStringSync(_jsonEncodeAndFormat(updatedJson));
      _arbFile(path: BuildConfig.uploadedPath, package: package, locale: locale)
          .writeAsStringSync(_jsonEncodeAndFormat(withPrefixJson));
    });
  });
  return UpdateResult(
    updatedPackages: packages
        .map((package) => package.copyWith(path: "${BuildConfig.updatedPath}/${package.path}")),
    updatedToUploadPackages: packages
        .map((package) => package.copyWith(path: "${BuildConfig.uploadedPath}/${package.path}")),
  );
}