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