public static ImplantItemJson Convert(JavascriptImplant implant) { var ret = new ImplantItemJson(); ret.id = implant.ImplantID; ret.vpath = implant.ImplantType.VPath; ret.oscFormat = implant.OscFormat; ret.status = implant.GetStatus(); ret.range = Range.Convert(implant.ActiveArea); ret.mode = implant.AssignedMode; ret.error = implant.ServerInitException != null ? implant.ServerInitException.Message : null; return(ret); }
/// <summary> /// Handler for ajax requests to /settings/implant /// </summary> /// <param name="ctx"></param> public static void Process(LPWebContext ctx) { try { string cmd = ctx.Request["cmd"] ?? "load"; switch (cmd.ToLower()) { case "implantlist": { var files = Util.FileIO.ListFiles( new Util.FilePath() { BaseFolder = Core.Settings.ImplantFolder, Filename = "*.js" }, s => !s.StartsWith("~system/") && !Path.GetFileName(s).StartsWith(".") ); ctx.Response.Write(JsonConvert.SerializeObject(files)); } break; case "devicelist": { // devices currently available for implant mapping var deviceNames = new List <string>(); foreach (var mapping in UserSession.Current.Devices.Mapped) { // TODO: device which are appropriate to be mapped if (mapping.Hardware is MIDI.Hardware.MidiXYHardwareInterface) { deviceNames.Add(mapping.Device.Name); } } ctx.Response.Write(JsonConvert.SerializeObject(deviceNames)); } break; case "save": { // gotta parse out a new range object either way var rangeJson = ImplantItemJson.Range.FromRequest(ctx.Request); var range = rangeJson.ToRangeMap(); // must be a new item if not found var item = UserSession.Current.Implants.GetById(ctx.Request["id"]); if (item == null) { var vpath = ctx.Request["vpath"]; var id = ctx.Request["id"]; string oscFormat = ctx.Request["oscFormat"]; int mode = 0; int.TryParse(ctx.Request["mode"], out mode); var implant = UserSession.Current.Implants.Load(vpath, range, oscFormat); implant.AssignedMode = mode; implant.ImplantID = id; } else { var id = ctx.Request["id"]; /* * var vpath = ctx.Request["vpath"]; * if (vpath != item.ImplantType.VPath) // TODO: point at vpath * { * throw new Exception("Cannot current change the type of implant this way."); * } */ if (ctx.Request["oscFormat"] != null) { item.OscFormat = ctx.Request["oscFormat"]; } item.ActiveArea = range; if (ctx.Request["mode"] != null) { item.AssignedMode = int.Parse(ctx.Request["mode"]); } } ctx.Response.Write("Saving ID #" + ctx.Request["id"]); UserSession.Current.Save(); } break; case "run": UserSession.Current.Implants.Start(ctx.Request["id"]); UserSession.Current.Save(); ctx.Response.Write("Running ID #" + ctx.Request["id"]); break; case "stop": UserSession.Current.Implants.Stop(ctx.Request["id"]); UserSession.Current.Save(); ctx.Response.Write("Stopping ID #" + ctx.Request["id"]); break; case "unload": UserSession.Current.Implants.Unload(ctx.Request["id"]); UserSession.Current.Save(); ctx.Response.Write("Unloading ID #" + ctx.Request["id"]); break; case "reload": { UserSession.Current.Implants.Reload(ctx.Request["id"]); UserSession.Current.Save(); ctx.Response.Write("Reload ID #" + ctx.Request["id"]); } break; case "texteditor": { // just for fun var item = UserSession.Current.Implants.GetById(ctx.Request["id"]); if (item == null) { throw new Exception("Could not find ImplantID " + ctx.Request["id"]); } Util.LPConsole.WriteLine("WebServer", "Starting text editor ({0}) on file {1}", Core.Settings.TextEditor, item.ImplantType.Path.FullPath); var proc = new Process(); proc.StartInfo.FileName = Core.Settings.Terminal; proc.StartInfo.Arguments = Core.Settings.TextEditor + " " + item.ImplantType.Path.FullPath; proc.StartInfo.UseShellExecute = false; proc.Start(); //System.Diagnostics.Process.Start(Core.Settings.TextEditor, item.ImplantType.Path.FullPath); //System.Diagnostics.Process.Start(Core.Settings.TextEditor + " " + item.ImplantType.Path.FullPath); ctx.Response.Write("Launching text editor for ID #" + ctx.Request["id"]); } break; default: { // just return the list for all loaded implants var list = new List <ImplantItemJson>(); foreach (var implant in UserSession.Current.Implants.Items) { list.Add(ImplantItemJson.Convert(implant)); } ctx.Response.Write(JsonConvert.SerializeObject(list)); } break; } } catch (Exception ex) { ctx.Response.Send500(ex.ToString()); } }