public void BackupConfiguration(string archiveName) { _homegenie.UpdateProgramsDatabase(); _homegenie.UpdateAutomationGroupsDatabase(); _homegenie.UpdateGroupsDatabase(); _homegenie.SaveData(); if (File.Exists(archiveName)) { File.Delete(archiveName); } // Add USERSPACE automation program binaries (csharp) foreach (var program in _homegenie.ProgramManager.Programs) { if (program.Address >= ProgramManager.USERSPACE_PROGRAMS_START && program.Address < ProgramManager.PACKAGE_PROGRAMS_START) { //var relFile = Path.Combine("programs/", program.Address + ".dll"); var relFile = Path.Combine(FilePaths.ProgramsFolder, program.Address + ".dll"); if (File.Exists(relFile)) { ArchiveHelper.AddFileToZip(archiveName, relFile); } if (program.Type.ToLower() == "arduino") { var arduinoFolder = Path.Combine(FilePaths.ProgramsFolder, "arduino", program.Address.ToString()); var filePaths = Directory.GetFiles(arduinoFolder); foreach (var f in filePaths) { ArchiveHelper.AddFileToZip(archiveName, Path.Combine(arduinoFolder, Path.GetFileName(f))); } } } } ArchiveHelper.AddFolderToZip(archiveName, FilePaths.DataFolder); }
private bool UpdateAutomationGroups(string file) { var success = true; // // add new automation groups // try { var serializer = new XmlSerializer(typeof(List <Group>)); var reader = new StreamReader(file); var automationGroups = (List <Group>)serializer.Deserialize(reader); reader.Close(); // var configChanged = false; foreach (var group in automationGroups) { if (_homeGenieService.AutomationGroups.Find(g => g.Name == group.Name) == null) { LogMessage("+ Adding Automation Group: " + group.Name); _homeGenieService.AutomationGroups.Add(group); if (!configChanged) { configChanged = true; } } } // if (configChanged) { _homeGenieService.UpdateAutomationGroupsDatabase(); } } catch { success = false; } if (!success) { LogMessage("! ERROR updating Automation Groups"); } return(success); }
private bool DownloadAndInstallProgram(string packageSourceUrl, PackageProgramDefinition program) { var success = false; _homegenie.RaiseEvent( Domains.HomeGenie_System, Domains.HomeGenie_PackageInstaller, SourceModule.Master, "HomeGenie Package Installer", Properties.InstallProgressMessage, "= Downloading: " + program.File ); var tempFolder = Utility.GetTmpFolder(); Utility.FolderCleanUp(tempFolder); var programFile = Path.Combine(tempFolder, program.File); using (var client = new WebClient()) { try { client.DownloadFile(packageSourceUrl + "/" + program.File, programFile); success = true; } catch (Exception e) { _homegenie.RaiseEvent( Domains.HomeGenie_System, Domains.HomeGenie_PackageInstaller, SourceModule.Master, "HomeGenie Package Installer", Properties.InstallProgressMessage, "= ERROR: '" + e.Message + "'" ); } client.Dispose(); } if (!success) { return(false); } _homegenie.RaiseEvent( Domains.HomeGenie_System, Domains.HomeGenie_PackageInstaller, SourceModule.Master, "HomeGenie Package Installer", Properties.InstallProgressMessage, "= Installing: " + program.Name ); var pid = _homegenie.ProgramManager.GeneratePid(); if (program.Uid == null || !int.TryParse(program.Uid, out pid)) { program.Uid = pid.ToString(); } var enabled = true; // by default enable package programs after installing them var oldProgram = _homegenie.ProgramManager.ProgramGet(pid); if (oldProgram != null) { _homegenie.RaiseEvent( Domains.HomeGenie_System, Domains.HomeGenie_PackageInstaller, SourceModule.Master, "HomeGenie Package Installer", Properties.InstallProgressMessage, "= Replacing: '" + oldProgram.Name + "' with pid " + pid ); enabled = oldProgram.IsEnabled; // if the program was already installed, inherit IsEnabled _homegenie.ProgramManager.ProgramRemove(oldProgram); } var programBlock = ProgramImport(pid, programFile, program.Group); if (programBlock != null) { var groupName = programBlock.Group; if (!string.IsNullOrWhiteSpace(groupName)) { // Add automation program group if does not exist var newGroup = new Group { Name = groupName }; if (_homegenie.AutomationGroups.Find(g => g.Name == newGroup.Name) == null) { _homegenie.AutomationGroups.Add(newGroup); _homegenie.UpdateAutomationGroupsDatabase(); } } programBlock.IsEnabled = enabled; _homegenie.RaiseEvent( Domains.HomeGenie_System, Domains.HomeGenie_PackageInstaller, SourceModule.Master, "HomeGenie Package Installer", Properties.InstallProgressMessage, "= Installed: '" + program.Name + "' as pid " + pid ); } else { // TODO: report error and stop the package install procedure success = false; } return(success); }