private async Task<bool> LoadAndPrepare() {
#if !FORCE_UPDATE || !DEBUG
if (!MainExecutingFile.IsPacked) {
NonfatalError.Notify(ToolsStrings.AppUpdater_CannotUpdateApp, ToolsStrings.AppUpdater_UnpackedVersionMessage);
LatestError = ToolsStrings.AppUpdater_UnpackedVersionMessage;
return false;
}
#endif
if (_isPreparing) return false;
_isPreparing = true;
UpdateIsReady = null;
try {
var data = await CmApiProvider.GetDataAsync($"app/get/{Branch}");
if (data == null) throw new InformativeException(ToolsStrings.AppUpdater_CannotLoad, ToolsStrings.Common_MakeSureInternetWorks);
string preparedVersion = null;
await Task.Run(() => {
if (File.Exists(UpdateLocation)) {
File.Delete(UpdateLocation);
}
using (var stream = new MemoryStream(data, false))
using (var archive = new ZipArchive(stream)) {
preparedVersion = VersionFromData(archive.GetEntry(@"Manifest.json").Open().ReadAsStringAndDispose());
archive.GetEntry(@"Content Manager.exe").ExtractToFile(UpdateLocation);
Logging.Write($"New version {preparedVersion} was extracted to “{UpdateLocation}”");
}
});
UpdateIsReady = preparedVersion;
return true;
} catch (UnauthorizedAccessException) {
NonfatalError.Notify(ToolsStrings.AppUpdater_AccessIsDenied,
ToolsStrings.AppUpdater_AccessIsDenied_Commentary);
LatestError = ToolsStrings.AppUpdater_AccessIsDenied_Short;
} catch (Exception e) {
NonfatalError.Notify(ToolsStrings.AppUpdater_CannotLoad,
ToolsStrings.AppUpdater_CannotLoad_Commentary, e);
LatestError = ToolsStrings.AppUpdater_CannotLoadShort;
} finally {
_isPreparing = false;
}
return false;
}