private static async Task LoadPackage(string langId, string filename) {
try {
Dictionary<string, Assembly> assemblies;
byte[] update;
using (var fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read))
using (var zip = new ZipArchive(fs)) {
var manifest = LocalePackageManifest.FromArchive(zip);
if (manifest == null) throw new Exception("Manifest is missing");
LoadedVersion = manifest.Version;
update = await LoadPackageTimeout(langId, manifest.Version);
if (update != null) {
using (var memory = new MemoryStream(update))
using (var updateZip = new ZipArchive(memory)) {
assemblies = LoadAssemblies(updateZip);
manifest = LocalePackageManifest.FromArchive(updateZip);
if (manifest == null) throw new Exception("Manifest is missing");
LoadedVersion = manifest.Version;
}
} else {
assemblies = LoadAssemblies(zip);
}
}
if (update != null) {
try {
JustUpdated = true;
File.WriteAllBytes(filename, update);
Logging.Write("Locale updated");
} catch (Exception e) {
Logging.Warning("Cannot update locale: " + e);
}
}
SetPackage(assemblies);
} catch (Exception e) {
Logging.Warning("Cannot load locale package: " + e);
}
}
}