Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }