public bool EditScript(ScriptAbs oldScript, ScriptAbs editedScript)
        {
            Log.Debug("Editing Script {@ScriptName} ({@ScriptType})", editedScript.ScriptName, editedScript.ScriptType);
            bool successful    = false;
            bool rescheduleJob = ScriptAbs.HasScriptTypeChanged(oldScript.ScriptType, editedScript.ScriptType) || ScriptAbs.HasScheduledTimeChanged(oldScript, editedScript);

            if (RemoveScript(editedScript.Id, false)) //ToDo this could be improved
            {
                _scripts.Add(editedScript);
                successful = _settingsService.SaveScripts(_scripts);
                if (successful && editedScript.ScriptStatus == ScriptStatus.Running && rescheduleJob)
                {
                    _runScriptService.StopScript(editedScript);
                    if (editedScript.ScriptType != ScriptType.OneOff)
                    {
                        _runScriptService.RunScript(editedScript);
                    }
                    else
                    {
                        _view.ChangeScriptStatusThreadSafe(editedScript);
                    }
                }
            }
            return(successful);
        }
        public async Task <bool> ChangeScriptStatus(ScriptAbs script)
        {
            ScriptStatus oldStatus = script.ScriptStatus;

            script.ScriptStatus = GetNewScriptStatus(oldStatus);

            Log.Debug("Change {@ScriptName} ({@ScriptType}) Script Status from {@OldStatus} to {@NewStatus}", script.ScriptName, script.ScriptType, oldStatus, script.ScriptStatus);
            if (script.ScriptStatus == ScriptStatus.Running)
            {
                if (script is ScriptListenKey)
                {
                    _listenKeysService.Run();
                }
                else
                {
                    await _runScriptService.RunScript(script);
                }
            }
            else
            {
                if (script is ScriptListenKey && !IsListenKeyServiceNecessary())
                {
                    _listenKeysService.Stop();
                }
                else
                {
                    await _runScriptService.StopScript(script);
                }
            }

            _settingsService.SaveScripts(_scripts);

            return(script.ScriptStatus != oldStatus);
        }
        public async Task RunScript(ScriptAbs script)
        {
            await Run();

            if (script.ScriptType is ScriptType.Scheduled)
            {
                Log.Information("Schedule Job for script {@ScriptName} ({@ScriptType}) at {@ScheduledHour}", script.ScriptName, script.ScriptType, ((ScriptScheduled)script).ScheduledHour.ToString());
            }
            else
            {
                Log.Information("Schedule Job for script {@ScriptName} ({@ScriptType})", script.ScriptName, script.ScriptType);
            }
            JobKey jobKey = GetJobKeyForScript(script);

            if (await Scheduler.CheckExists(jobKey))
            {
                await Scheduler.ResumeJob(jobKey);
            }
            else
            {
                var job     = CreateJob(script);
                var trigger = CreateTrigger(script);
                job.JobDataMap.Put("script", script);

                await Scheduler.ScheduleJob(job, trigger);
            }
        }
 public bool AddScript(ScriptAbs script)
 {
     Log.Debug("Adding Script {@ScriptName} ({@ScriptType})", script.ScriptName, script.ScriptType);
     script.Id = Guid.NewGuid().ToString();
     _scripts.Add(script);
     return(_settingsService.SaveScripts(_scripts));
 }
Ejemplo n.º 5
0
 public ScriptItem(ScriptAbs script, StyleManager styleManager)
 {
     _styleManager = styleManager;
     Script        = script;
     InitializeComponent();
     PaintUI();
 }
Ejemplo n.º 6
0
        private void Save(object sender, EventArgs e)
        {
            if (ValidateBeforeSaving())
            {
                ScriptType   scriptType   = EnumUtils.Parse <ScriptType>(cbxScriptType.SelectedValue);
                ScriptStatus scriptStatus = _script?.ScriptStatus ?? ScriptStatus.Stopped;
                _script              = ScriptAbs.GetInstance(_script, scriptType);
                _script.ScriptName   = tbxScriptName.Text;
                _script.ScriptPath   = tbxScriptPath.Text;
                _script.ScriptStatus = scriptStatus;

                switch (scriptType)
                {
                case ScriptType.OneOff:
                    break;

                case ScriptType.Scheduled:
                    DateTime dt = DateTime.Parse(tbxScriptScheduled.Text);
                    TimeSpan st = new TimeSpan(dt.Hour, dt.Minute, dt.Second);
                    ((ScriptScheduled)_script).ScheduledHour = st;
                    break;

                case ScriptType.ListenKey:
                    ((ScriptListenKey)_script).TriggerKey = (KeyPressed)tbxKeyPressed.Tag;
                    break;

                default:
                    break;
                }

                DialogResult = DialogResult.OK;
                Close();
            }
        }
        public void AddItem(ScriptAbs item)
        {
            ScriptItem scriptItem = GetScriptItemInstance(item);

            _controlList.Add(scriptItem);
            AddItemToPanel(scriptItem);
            SortControls();
        }
 private IJobDetail CreateJob(ScriptAbs script)
 {
     return(JobBuilder
            .Create <RunScriptJob>()
            .WithIdentity(GetJobKeyForScript(script))
            .WithDescription(script.ToString())
            .Build());
 }
Ejemplo n.º 9
0
        public void EditScript(ScriptAbs script)
        {
            var contextMenu = GetContextMenuByScriptId(script.Id);

            contextMenu.Text = script.ScriptName;
            AttachScriptToContextMenu(contextMenu.DropDownItems, script);
            EnableDropDownItemsPerStatus(contextMenu.DropDownItems, script.ScriptStatus);
        }
Ejemplo n.º 10
0
        private void ShowScriptForm(ScriptAbs script, Action <ScriptAbs> postAction)
        {
            ScriptForm scriptForm = new ScriptForm(styleManager, script);

            if (scriptForm.ShowDialog() == DialogResult.OK)
            {
                postAction(scriptForm.GetScript());
            }
        }
Ejemplo n.º 11
0
 private void EditScript(ScriptAbs script)
 {
     ShowScriptForm(script, (ScriptAbs editedScript) => {
         if (Presenter.EditScript(script, editedScript))
         {
             _scriptListAdapter.EditItem(script, editedScript);
             _trayContextMenu.EditScript(editedScript);
         }
     });
 }
        public void EditItem(ScriptAbs oldScript, ScriptAbs editedScript)
        {
            var  item = FindById(editedScript.Id);
            bool hasScriptTypeChanged = ScriptAbs.HasScriptTypeChanged(oldScript.ScriptType, editedScript.ScriptType);

            if (item != null && item.ModifyScript(editedScript, hasScriptTypeChanged))
            {
                SortControls();
            }
        }
        private ScriptItem GetScriptItemInstance(ScriptAbs script)
        {
            ScriptItem item = new ScriptItem(script, _styleManager);

            item.StatusClicked += Script_StatusClicked;
            item.EditClicked   += Script_EditClicked;
            item.RemoveClicked += Script_RemoveClicked;

            return(item);
        }
Ejemplo n.º 14
0
        private void ChangeScriptStatus(ScriptAbs script)
        {
            bool hasStatusChanged = Presenter.ChangeScriptStatus(script).Result;

            if (hasStatusChanged)
            {
                _scriptListAdapter.RefreshScriptStatus(script.Id);
                _trayContextMenu.RefreshScriptStatus(script);
            }
        }
Ejemplo n.º 15
0
        private void AddScriptToContextMenu(ScriptAbs script)
        {
            ToolStripMenuItem aux = new ToolStripMenuItem(script.ScriptName, null
                                                          , new ToolStripMenuItem(SCRIPT_STATUS_STOP_OPTION, null, ContextMenu_StatusClick)
                                                          , new ToolStripMenuItem(SCRIPT_STATUS_RUN_OPTION, null, ContextMenu_StatusClick));

            AttachScriptToContextMenu(aux.DropDownItems, script);
            EnableDropDownItemsPerStatus(aux.DropDownItems, script.ScriptStatus);
            ((ToolStripMenuItem)this.Items[2]).DropDownItems.Add(aux);
            aux.Tag = script.Id;
        }
Ejemplo n.º 16
0
        public bool ModifyScript(ScriptAbs editScript, bool hasScriptTypeChanged)
        {
            bool hasNameBeenModified = ModifyScriptName(editScript.ScriptName);

            if (hasScriptTypeChanged)
            {
                ScriptTypeChanged(editScript);
                PaintScriptStatus();
            }
            Script = editScript;
            return(hasNameBeenModified);
        }
Ejemplo n.º 17
0
        private void RemoveScript(ScriptAbs script)
        {
            DialogResult r = MetroSetMessageBox.Show(this, "Do you want to remove the script?", "Remove", MessageBoxButtons.YesNo, MessageBoxIcon.Information);

            if (r == DialogResult.Yes)
            {
                string scriptId = script.Id;
                if (Presenter.RemoveScript(scriptId))
                {
                    _scriptListAdapter.RemoveItem(scriptId);
                    _trayContextMenu.RemoveScript(scriptId);
                }
            }
        }
 public async Task StopScript(ScriptAbs script)
 {
     if (Scheduler != null)
     {
         Log.Information("Stopping Job for script {@ScriptName} ({@ScriptType})", script.ScriptName, script.ScriptType);
         if (script is ScriptScheduled)
         {
             await Scheduler.UnscheduleJob(GetTriggerKeyForScript(script));
         }
         else
         {
             await Scheduler.PauseJob(GetJobKeyForScript(script));
         }
     }
 }
Ejemplo n.º 19
0
        public ScriptForm(StyleManager styleManager, ScriptAbs script) : base()
        {
            InitializeComponent();
            UpdateMetroStyles(styleManager);
            string formTitle = FORM_TITLE_ADD;

            if (script != null)
            {
                formTitle          = FORM_TITLE_EDIT;
                _script            = script.Clone();
                tbxScriptName.Text = _script.ScriptName;
                tbxScriptPath.Text = _script.ScriptPath;
                tbxScriptName.Text = _script.ScriptName;
                tbxScriptPath.Text = _script.ScriptPath;
            }
            cbxScriptType.DataSource   = Enum.GetValues(typeof(ScriptType));
            cbxScriptType.SelectedItem = _script == null ? 0 : _script.ScriptType;

            this.Text = formTitle;
            LoadSpecificScriptFields();
        }
        private ITrigger CreateTrigger(ScriptAbs script)
        {
            TriggerBuilder triggerBuilder = TriggerBuilder
                                            .Create()
                                            .WithIdentity(GetTriggerKeyForScript(script));

            if (script is ScriptScheduled scriptScheduled)
            {
                triggerBuilder
                .StartAt(GetTriggerStartAt(scriptScheduled.ScheduledHour))
                .WithSimpleSchedule(x => x
                                    .WithIntervalInHours(24)
                                    .RepeatForever()
                                    );
            }
            else
            {
                triggerBuilder.StartNow();
            }

            return(triggerBuilder.Build());
        }
Ejemplo n.º 21
0
 private void ScriptTypeChanged(ScriptAbs newItem)
 {
     Script = newItem;
     PaintScriptType();
 }
Ejemplo n.º 22
0
        public void RefreshScriptStatus(ScriptAbs script)
        {
            var contextMenu = GetContextMenuByScriptId(script.Id);

            EnableDropDownItemsPerStatus(contextMenu.DropDownItems, script.ScriptStatus);
        }
Ejemplo n.º 23
0
 public void AddScript(ScriptAbs script)
 {
     AddScriptToContextMenu(script);
 }
 private TriggerKey GetTriggerKeyForScript(ScriptAbs script)
 {
     return(new TriggerKey($"{script.Id}.trigger", script.ScriptType.ToString()));
 }
 private JobKey GetJobKeyForScript(ScriptAbs script)
 {
     return(new JobKey(script.Id, script.ScriptType.ToString()));
 }
Ejemplo n.º 26
0
 private void AttachScriptToContextMenu(ToolStripItemCollection dropDownItems, ScriptAbs script)
 {
     dropDownItems[0].Tag = script;
     dropDownItems[1].Tag = script;
 }
Ejemplo n.º 27
0
        private void GetScript(IJobExecutionContext context)
        {
            var dataMap = context.MergedJobDataMap;

            _script = (ScriptAbs)dataMap["script"];
        }
Ejemplo n.º 28
0
 private void ContextMenu_StatusClick(ScriptAbs script) => ChangeScriptStatus(script);
Ejemplo n.º 29
0
 public void ChangeScriptStatusThreadSafe(ScriptAbs script)
 {
     this.Invoke((MethodInvoker) delegate() { ChangeScriptStatus(script); });
 }
Ejemplo n.º 30
0
 private void Cancel(object sender, EventArgs e)
 {
     _script = null;
     Close();
 }