private void UpdateOpenHAB() { ResetSummary(); string OpenHABUpdateFileWithPath; if (MainForm.UpdateTypeValue == 1) { UpdateDownloadComplete = false; Uri UpdateFileURI; string OpenHABUpdateFile; WebClient OpenHABDownload = new WebClient(); WriteLog("Downloading OpenHAB update" + Environment.NewLine, true); Uri.TryCreate(MainForm.UpdateURL.Text.Trim(), UriKind.Absolute, out UpdateFileURI); OpenHABUpdateFile = Path.GetFileName(UpdateFileURI.LocalPath); OpenHABUpdateFileWithPath = new Uri(MainForm.UpdatePath.Text.Trim() + "\\" + OpenHABUpdateFile.Trim()).LocalPath; if (File.Exists(OpenHABUpdateFileWithPath)) { File.Delete(OpenHABUpdateFileWithPath); } OpenHABDownload.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloadProgressCallback); OpenHABDownload.DownloadFileCompleted += new AsyncCompletedEventHandler(DownloadFileCompletedCallback); try { OpenHABDownload.DownloadFileAsync(new System.Uri(MainForm.UpdateURL.Text.Trim()), OpenHABUpdateFileWithPath.Trim()); while (!UpdateDownloadComplete) { Application.DoEvents(); } } catch (Exception DownloadException) { WriteLog("An error occured while downloading OpenHAB update (" + DownloadException.Message + ")" + Environment.NewLine, true, true); return; } TotalNumberOfItems = 0; CurrentItemNumber = 0; bwrPerformUpdate.ReportProgress(0); } else { OpenHABUpdateFileWithPath = MainForm.UpdateFile.Text.Trim(); } if (!StopOpenHABService()) { return; } ZipArchive ZipFileToExtract = null; try { ZipFileToExtract = ZipFile.Open(OpenHABUpdateFileWithPath.Trim(), ZipArchiveMode.Read); } catch (Exception UpdateException) { WriteLog("Cannot update OpenHAB using update file: " + OpenHABUpdateFileWithPath.Trim() + " (" + UpdateException.Message + ")" + Environment.NewLine, true, true); return; } foreach (ZipArchiveEntry ZipEntryToCount in ZipFileToExtract.Entries) { if (!string.IsNullOrEmpty(ZipEntryToCount.FullName)) { TotalNumberOfItems++; } } if (MainForm.BeforeUpdatingValue == 2) { CreateFullBackup(); } else if (MainForm.BeforeUpdatingValue == 3) { CreateConfigurationBackup(); } WriteLog("Updating OpenHAB using update file: " + OpenHABUpdateFileWithPath.Trim() + Environment.NewLine, true); var FilesToDelete = File.ReadAllLines(AppDomain.CurrentDomain.BaseDirectory + "DeleteList.dat"); foreach (var FileToDelete in FilesToDelete) { bool IsFolder = false; if ((!FileToDelete.ToString().Trim().Contains("*")) && (!FileToDelete.ToString().Trim().Contains("?")) && (Directory.Exists(new Uri(MainForm.OpenHABPath.Text.Trim() + "\\" + FileToDelete.ToString().Trim()).LocalPath))) { if (File.GetAttributes(new Uri(MainForm.OpenHABPath.Text.Trim() + "\\" + FileToDelete.ToString().Trim()).LocalPath).HasFlag(FileAttributes.Directory)) { IsFolder = true; } } if (IsFolder) { try { Directory.Delete(new Uri(MainForm.OpenHABPath.Text.Trim() + "\\" + FileToDelete.ToString().Trim()).LocalPath, true); SummaryFoldersDeleteSucceeded++; WriteLog("Deleting folder: " + new Uri(MainForm.OpenHABPath.Text.Trim() + "\\" + FileToDelete.ToString().Trim()).LocalPath); } catch (Exception DeleteException) { SummaryFoldersDeleteFailed++; WriteLog("Cannot delete folder: " + new Uri(MainForm.OpenHABPath.Text.Trim() + "\\" + FileToDelete.ToString().Trim()).LocalPath + " (" + DeleteException.Message + ")", false, true); } } else { foreach (var SingleFile in Directory.GetFiles(new Uri(MainForm.OpenHABPath.Text.Trim() + "\\").LocalPath, FileToDelete)) { try { File.Delete(SingleFile.ToString().Trim()); SummaryFilesDeleteSucceeded++; WriteLog("Deleting file: " + SingleFile.ToString().Trim()); } catch (Exception DeleteException) { SummaryFilesDeleteFailed++; WriteLog("Cannot delete file: " + SingleFile.ToString().Trim() + " (" + DeleteException.Message + ")", false, true); } } } } foreach (ZipArchiveEntry ZipEntryToExtract in ZipFileToExtract.Entries) { CurrentItemNumber++; if (String.IsNullOrEmpty(ZipEntryToExtract.Name)) { if (!Directory.Exists(new Uri(Path.Combine(MainForm.OpenHABPath.Text.Trim(), ZipEntryToExtract.FullName)).LocalPath.Substring(0, new Uri(Path.Combine(MainForm.OpenHABPath.Text.Trim(), ZipEntryToExtract.FullName)).LocalPath.Length - ZipEntryToExtract.Name.Length))) { try { Directory.CreateDirectory(new Uri(Path.Combine(MainForm.OpenHABPath.Text.Trim(), ZipEntryToExtract.FullName)).LocalPath.Substring(0, new Uri(Path.Combine(MainForm.OpenHABPath.Text.Trim(), ZipEntryToExtract.FullName)).LocalPath.Length - ZipEntryToExtract.Name.Length)); bwrPerformUpdate.ReportProgress(CurrentItemNumber * 100 / TotalNumberOfItems); SummaryFoldersCreateSucceeded++; WriteLog("Creating folder: " + new Uri(Path.Combine(MainForm.OpenHABPath.Text.Trim(), ZipEntryToExtract.FullName)).LocalPath.Substring(0, new Uri(Path.Combine(MainForm.OpenHABPath.Text.Trim(), ZipEntryToExtract.FullName)).LocalPath.Length - ZipEntryToExtract.Name.Length)); } catch (Exception UpdateException) { SummaryFoldersCreateFailed++; WriteLog("Cannot create folder: " + new Uri(Path.Combine(MainForm.OpenHABPath.Text.Trim(), ZipEntryToExtract.FullName)).LocalPath.Substring(0, new Uri(Path.Combine(MainForm.OpenHABPath.Text.Trim(), ZipEntryToExtract.FullName)).LocalPath.Length - ZipEntryToExtract.Name.Length) + " (" + UpdateException.Message + ")", false, true); } } } else { try { ZipEntryToExtract.ExtractToFile(new Uri(Path.Combine(MainForm.OpenHABPath.Text.Trim(), ZipEntryToExtract.FullName)).LocalPath, false); bwrPerformUpdate.ReportProgress(CurrentItemNumber * 100 / TotalNumberOfItems); SummaryFilesExtractSucceeded++; WriteLog("Extracting file: " + ZipEntryToExtract.FullName); } catch (Exception UpdateException) { bwrPerformUpdate.ReportProgress(CurrentItemNumber * 100 / TotalNumberOfItems); SummaryFilesExtractSkipped++; WriteLog("Skipping file extraction: " + ZipEntryToExtract.FullName + " (" + UpdateException.Message.ToString() + ")"); } } } ZipFileToExtract.Dispose(); WriteSummary("Update summary"); WriteLog(Environment.NewLine + "Update complete" + Environment.NewLine, true); }
private void RestoreBackup() { ResetSummary(); if (!StopOpenHABService()) { return; } ZipArchive ZipFileToExtract = null; try { ZipFileToExtract = ZipFile.Open(MainForm.RestoreBackupFile.Text.Trim(), ZipArchiveMode.Read); WriteLog("Restoring backup archive: " + MainForm.RestoreBackupFile.Text.Trim() + Environment.NewLine, true); } catch (Exception RestoreException) { WriteLog("Cannot restore backup archive: " + MainForm.RestoreBackupFile.Text.Trim() + " (" + RestoreException.Message + ")" + Environment.NewLine, true, true); return; } foreach (ZipArchiveEntry ZipEntryToCount in ZipFileToExtract.Entries) { if (!string.IsNullOrEmpty(ZipEntryToCount.FullName)) { TotalNumberOfItems++; } } foreach (ZipArchiveEntry ZipEntryToExtract in ZipFileToExtract.Entries) { CurrentItemNumber++; if (!Directory.Exists(new Uri(Path.Combine(MainForm.OpenHABPath.Text.Trim(), ZipEntryToExtract.FullName)).LocalPath.Substring(0, new Uri(Path.Combine(MainForm.OpenHABPath.Text.Trim(), ZipEntryToExtract.FullName)).LocalPath.Length - ZipEntryToExtract.Name.Length))) { try { Directory.CreateDirectory(new Uri(Path.Combine(MainForm.OpenHABPath.Text.Trim(), ZipEntryToExtract.FullName)).LocalPath.Substring(0, new Uri(Path.Combine(MainForm.OpenHABPath.Text.Trim(), ZipEntryToExtract.FullName)).LocalPath.Length - ZipEntryToExtract.Name.Length)); bwrRestoreBackup.ReportProgress(CurrentItemNumber * 100 / TotalNumberOfItems); SummaryFoldersCreateSucceeded++; WriteLog("Creating folder: " + new Uri(Path.Combine(MainForm.OpenHABPath.Text.Trim(), ZipEntryToExtract.FullName)).LocalPath.Substring(0, new Uri(Path.Combine(MainForm.OpenHABPath.Text.Trim(), ZipEntryToExtract.FullName)).LocalPath.Length - ZipEntryToExtract.Name.Length)); } catch (Exception RestoreException) { bwrRestoreBackup.ReportProgress(CurrentItemNumber * 100 / TotalNumberOfItems); SummaryFoldersCreateFailed++; WriteLog("Cannot create folder: " + new Uri(Path.Combine(MainForm.OpenHABPath.Text.Trim(), ZipEntryToExtract.FullName)).LocalPath.Substring(0, new Uri(Path.Combine(MainForm.OpenHABPath.Text.Trim(), ZipEntryToExtract.FullName)).LocalPath.Length - ZipEntryToExtract.Name.Length) + " (" + RestoreException.Message + ")", false, true); } } try { ZipEntryToExtract.ExtractToFile(new Uri(Path.Combine(MainForm.OpenHABPath.Text.Trim(), ZipEntryToExtract.FullName)).LocalPath, true); bwrRestoreBackup.ReportProgress(CurrentItemNumber * 100 / TotalNumberOfItems); SummaryFilesExtractSucceeded++; WriteLog("Extracting file: " + ZipEntryToExtract.FullName); } catch (Exception RestoreException) { bwrRestoreBackup.ReportProgress(CurrentItemNumber * 100 / TotalNumberOfItems); SummaryFilesExtractFailed++; WriteLog("Cannot extract file: " + ZipEntryToExtract.FullName + " (" + RestoreException.Message + ")", false, true); } } ZipFileToExtract.Dispose(); WriteSummary("Restore summary"); WriteLog(Environment.NewLine + "Restore complete" + Environment.NewLine, true); }