Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }