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)); }
public ScriptItem(ScriptAbs script, StyleManager styleManager) { _styleManager = styleManager; Script = script; InitializeComponent(); PaintUI(); }
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()); }
public void EditScript(ScriptAbs script) { var contextMenu = GetContextMenuByScriptId(script.Id); contextMenu.Text = script.ScriptName; AttachScriptToContextMenu(contextMenu.DropDownItems, script); EnableDropDownItemsPerStatus(contextMenu.DropDownItems, script.ScriptStatus); }
private void ShowScriptForm(ScriptAbs script, Action <ScriptAbs> postAction) { ScriptForm scriptForm = new ScriptForm(styleManager, script); if (scriptForm.ShowDialog() == DialogResult.OK) { postAction(scriptForm.GetScript()); } }
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); }
private void ChangeScriptStatus(ScriptAbs script) { bool hasStatusChanged = Presenter.ChangeScriptStatus(script).Result; if (hasStatusChanged) { _scriptListAdapter.RefreshScriptStatus(script.Id); _trayContextMenu.RefreshScriptStatus(script); } }
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; }
public bool ModifyScript(ScriptAbs editScript, bool hasScriptTypeChanged) { bool hasNameBeenModified = ModifyScriptName(editScript.ScriptName); if (hasScriptTypeChanged) { ScriptTypeChanged(editScript); PaintScriptStatus(); } Script = editScript; return(hasNameBeenModified); }
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)); } } }
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()); }
private void ScriptTypeChanged(ScriptAbs newItem) { Script = newItem; PaintScriptType(); }
public void RefreshScriptStatus(ScriptAbs script) { var contextMenu = GetContextMenuByScriptId(script.Id); EnableDropDownItemsPerStatus(contextMenu.DropDownItems, script.ScriptStatus); }
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())); }
private void AttachScriptToContextMenu(ToolStripItemCollection dropDownItems, ScriptAbs script) { dropDownItems[0].Tag = script; dropDownItems[1].Tag = script; }
private void GetScript(IJobExecutionContext context) { var dataMap = context.MergedJobDataMap; _script = (ScriptAbs)dataMap["script"]; }
private void ContextMenu_StatusClick(ScriptAbs script) => ChangeScriptStatus(script);
public void ChangeScriptStatusThreadSafe(ScriptAbs script) { this.Invoke((MethodInvoker) delegate() { ChangeScriptStatus(script); }); }
private void Cancel(object sender, EventArgs e) { _script = null; Close(); }