updater improvements

This commit is contained in:
Shaun Walker 2021-06-03 11:05:40 -04:00
parent 02de8e0bf7
commit e527f6e3d1
2 changed files with 59 additions and 22 deletions

View File

@ -12,7 +12,7 @@
<TabPanel Name="Download" ResourceKey="Download"> <TabPanel Name="Download" ResourceKey="Download">
@if (_upgradeavailable) @if (_upgradeavailable)
{ {
<ModuleMessage Type="MessageType.Info" Message="Select The Download Button To Get a New Framework Package And Then Select Upgrade"></ModuleMessage> <ModuleMessage Type="MessageType.Info" Message="Select The Download Button To Download The Framework Upgrade Package And Then Select Upgrade"></ModuleMessage>
<button type="button" class="btn btn-primary" @onclick=@(async () => await Download(Constants.PackageId, @_package.Version))>@Localizer["Download"] @_package.Version</button> <button type="button" class="btn btn-primary" @onclick=@(async () => await Download(Constants.PackageId, @_package.Version))>@Localizer["Download"] @_package.Version</button>
<button type="button" class="btn btn-success" @onclick="Upgrade">@Localizer["Upgrade"]</button> <button type="button" class="btn btn-success" @onclick="Upgrade">@Localizer["Upgrade"]</button>
} }
@ -22,7 +22,7 @@
} }
</TabPanel> </TabPanel>
<TabPanel Name="Upload" ResourceKey="Upload"> <TabPanel Name="Upload" ResourceKey="Upload">
<ModuleMessage Type="MessageType.Info" Message="Upload A Framework Package And Then Select Upgrade"></ModuleMessage> <ModuleMessage Type="MessageType.Info" Message="Upload A Framework Upgrade Package And Then Select Upgrade"></ModuleMessage>
<table class="table table-borderless"> <table class="table table-borderless">
<tr> <tr>
<td> <td>
@ -72,9 +72,10 @@
{ {
try try
{ {
AddModuleMessage(Localizer["Please Be Patient While The Upgrade Is In Progress..."], MessageType.Info);
ShowProgressIndicator(); ShowProgressIndicator();
var interop = new Interop(JSRuntime); var interop = new Interop(JSRuntime);
await interop.RedirectBrowser(NavigateUrl(), 10); await interop.RedirectBrowser(NavigateUrl(), 30);
await InstallationService.Upgrade(); await InstallationService.Upgrade();
} }
catch (Exception ex) catch (Exception ex)

View File

@ -16,7 +16,7 @@ namespace Oqtane.Updater
{ {
// requires 2 arguments - the ContentRootPath and the WebRootPath of the site // requires 2 arguments - the ContentRootPath and the WebRootPath of the site
// for testing purposes set Oqtane.Upgrade as startup project and modify values below // for testing purposes you can uncomment and modify the logic below
//Array.Resize(ref args, 2); //Array.Resize(ref args, 2);
//args[0] = @"C:\yourpath\oqtane.framework\Oqtane.Server"; //args[0] = @"C:\yourpath\oqtane.framework\Oqtane.Server";
//args[1] = @"C:\yourpath\oqtane.framework\Oqtane.Server\wwwroot"; //args[1] = @"C:\yourpath\oqtane.framework\Oqtane.Server\wwwroot";
@ -31,7 +31,7 @@ namespace Oqtane.Updater
if (Directory.Exists(deployfolder)) if (Directory.Exists(deployfolder))
{ {
string packagename = ""; string packagename = "";
string[] packages = Directory.GetFiles(deployfolder, "Oqtane.Upgrade.*.zip"); string[] packages = Directory.GetFiles(deployfolder, "Oqtane.Framework.*.Upgrade.zip");
if (packages.Length > 0) if (packages.Length > 0)
{ {
packagename = packages[packages.Length - 1]; // use highest version packagename = packages[packages.Length - 1]; // use highest version
@ -58,28 +58,50 @@ namespace Oqtane.Updater
// ensure files are not locked // ensure files are not locked
if (CanAccessFiles(files)) if (CanAccessFiles(files))
{ {
bool success = true;
try try
{ {
//clear out backup folder // clear out backup folder
if (Directory.Exists(backupfolder)) if (Directory.Exists(backupfolder))
{ {
Directory.Delete(backupfolder, true); Directory.Delete(backupfolder, true);
} }
Directory.CreateDirectory(backupfolder); Directory.CreateDirectory(backupfolder);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
success = false;
}
// backup files // backup files
if (success)
{
foreach (string file in files) foreach (string file in files)
{ {
string filename = Path.Combine(backupfolder, file.Replace(contentrootfolder, "")); string filename = Path.Combine(backupfolder, file.Replace(contentrootfolder + Path.DirectorySeparatorChar, ""));
if (!Directory.Exists(Path.GetDirectoryName(filename))) try
{ {
Directory.CreateDirectory(Path.GetDirectoryName(filename)); if (File.Exists(file))
{
if (!Directory.Exists(Path.GetDirectoryName(filename)))
{
Directory.CreateDirectory(Path.GetDirectoryName(filename));
}
File.Copy(file, filename);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
success = false;
} }
File.Copy(file, filename);
} }
}
// extract files // extract files
bool success = true; if (success)
{
try try
{ {
using (ZipArchive archive = ZipFile.OpenRead(packagename)) using (ZipArchive archive = ZipFile.OpenRead(packagename))
@ -111,19 +133,33 @@ namespace Oqtane.Updater
} }
else else
{ {
// restore on failure try
foreach (string file in files)
{ {
string filename = Path.Combine(backupfolder, file.Replace(contentrootfolder, "")); // restore on failure
File.Copy(filename, file); foreach (string file in files)
{
string filename = Path.Combine(backupfolder, file.Replace(contentrootfolder + Path.DirectorySeparatorChar, ""));
if (File.Exists(filename))
{
File.Copy(filename, file);
}
else
{
File.Delete(file);
}
}
// clean up backup
Directory.Delete(backupfolder, true);
}
catch (Exception ex)
{
Console.WriteLine("Update Not Successful: Error Restoring Files - " + ex.Message);
} }
// clean up backup
Directory.Delete(backupfolder, true);
} }
} }
catch (Exception ex) else
{ {
Console.WriteLine("Upgrade Not Successful: " + ex.Message); Console.WriteLine("Update Not Successful: Could Not Backup All Existing Files");
} }
} }
else else