buildUpdate method
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}")),
);
}