/// <summary> /// Asks Dynamo what the path & name of the currently open file is. /// </summary> /// <param name="parameters">Not used, can specify null.</param> /// <returns>HTML result summary.</returns> public dynamic CurrentFile(dynamic parameters) { string filePath = ""; string fileName = ""; ServerViewExtension.RunInContext(() => { filePath = ServerViewExtension.viewLoadedParams.CurrentWorkspaceModel.FileName; if (string.IsNullOrWhiteSpace(filePath)) { filePath = "File has not been saved yet"; fileName = "Home - Default Name"; } else { int ind = filePath.LastIndexOf("\\"); fileName = filePath.Remove(0, (ind + 1)); } } ); var html = @"<h3>File Path of Current File</h3>" + filePath + "</br>" + @"<h3>File Name of Current File</h3>" + fileName; return(Response.AsText(html, "text/html")); }
/// <summary> /// Clears (deletes) everything on the Dynamo canvas, including Nodes, Annotations, etc. /// </summary> /// <param name="parameters"></param> /// <returns>HTML result summary.</returns> public dynamic Clear(dynamic parameters) { string html = ""; int nodeCountBefore = 0, nodeCountAfter = 0; ServerViewExtension.RunInContext(() => { nodeCountBefore = ServerViewExtension.viewLoadedParams.CurrentWorkspaceModel.Nodes.Count(); var vm = ServerViewExtension.dynamoViewModel; vm.Model.ClearCurrentWorkspace(); nodeCountAfter = ServerViewExtension.viewLoadedParams.CurrentWorkspaceModel.Nodes.Count(); } ); if (nodeCountAfter < nodeCountBefore) { html = $"Cleared {nodeCountBefore - nodeCountAfter} nodes from canvas."; } else { html = "Did not clear any nodes from canvas."; } return(Response.AsText(html, "text/html")); }
/// <summary> /// Instruct Dynamo to open the specified file, must have the .dyn extension. /// If any file is currently open, it closes it before opening the new one. /// </summary> /// <param name="parameters">Requires a property called "filepath", which specified the filepath to load from.</param> /// <returns>HTML result summary.</returns> public dynamic OpenFile(dynamic parameters) { if (string.IsNullOrWhiteSpace(parameters.filepath)) { return("Empty filepath supplied"); } string result = ""; string file = parameters.filepath; if (!file.ToUpper().EndsWith(DYNAMO_FILE_EXTENSION)) { return("File does not have the correct extension (.DYN)"); } if (!File.Exists(file)) { return(404); } ServerViewExtension.RunInContext(() => { var vm = ServerViewExtension.dynamoViewModel; vm.CloseHomeWorkspaceCommand.Execute(null); vm.OpenCommand.Execute(file); result = ServerViewExtension.viewLoadedParams.CurrentWorkspaceModel.FileName; }); return(Response.AsText("Opened file : " + result, "text/html")); }
/// <summary> /// Forces Dynamo to run the currently open graph. /// </summary> /// <param name="parameters">Not used, can specify null.</param> /// <returns>HTML result summary.</returns> public dynamic RunGraph(dynamic parameters) { ServerViewExtension.RunInContext(() => { var vm = ServerViewExtension.dynamoViewModel; vm.CurrentSpaceViewModel.RunSettingsViewModel.Model.RunType = RunType.Manual; vm.Model.ForceRun(); }); return("ran"); }
/// <summary> /// Uploads a graph (.dyn) file to Dynamo and instruct Dynamo to open it. /// </summary> /// <param name="parameters">Not used, can specify null.</param> /// <returns>HTML result summary.</returns> public dynamic UploadFile(dynamic parameters) { string file = ""; ServerViewExtension.RunInContext(() => { file = ServerViewExtension.viewLoadedParams.CurrentWorkspaceModel.FileName; } ); var html = @"<h3>Currently open file</h3></br>" + file; return(Response.AsText(html, "text/html")); }
/// <summary> /// Closes the currently open Dynamo file, if any. /// </summary> /// <param name="parameters">Not used, can specify null.</param> /// <returns>HTML result summary.</returns> public dynamic CloseFile(dynamic parameters) { string file = ""; ServerViewExtension.RunInContext(() => { file = ServerViewExtension.viewLoadedParams.CurrentWorkspaceModel.FileName; ServerViewExtension.DynamoLogger.Log("Closed " + file); ServerViewExtension.dynamoViewModel.CloseHomeWorkspaceCommand.Execute(null); } ); return("Closed file : " + file); }
/// <summary> /// Add a node to the Dynamo canvas. /// </summary> /// <param name="parameters">The node name, example : List.Map</param> /// <returns>HTML result summary.</returns> public dynamic AddNode(dynamic parameters) { string node = parameters.nodename; if (string.IsNullOrWhiteSpace(node)) { return("Supplied node was empty"); } string result = ""; var command = new Dynamo.Models.DynamoModel.CreateNodeCommand(Guid.NewGuid().ToString(), node, 100, 100, true, false); var nodes = ""; ServerViewExtension.RunInContext(() => { try { int countBefore = ServerViewExtension.dynamoViewModel.Model.CurrentWorkspace.Nodes.Count(); ServerViewExtension.dynamoViewModel.Model.ExecuteCommand(command); int countAfter = ServerViewExtension.dynamoViewModel.Model.CurrentWorkspace.Nodes.Count(); var n = ServerViewExtension.dynamoViewModel.Model.CurrentWorkspace.Nodes.Select(x => "<li>" + x.Name).ToArray(); nodes = string.Join("</li> ", n); var nodeCountDiff = countAfter - countBefore; if (nodeCountDiff < 1) { result = $"Could not add your {node} node to canvas."; } else if (nodeCountDiff == 1) { result = $"Added {node} node to the canvas."; } else { throw new Exception($"Added {nodeCountDiff} nodes to the canvas, expected was 1."); } } catch (System.Exception e) { result = "Something went wrong, error : " + e.Message; } }); return(Response.AsText(result, "text/html")); }
/// <summary> /// Get the list of currently installed packages in Dynamo. /// </summary> /// <param name="parameters">Not used, can specify null.</param> /// <returns>HTML result summary.</returns> public dynamic GetPackages(dynamic parameters) { string html = ""; var packageNames = new List <string>(); var uniqueLibs = new HashSet <string>(); ServerViewExtension.RunInContext(() => { var nsm = ServerViewExtension.dynamoViewModel.Model.SearchModel; List <Dynamo.Search.SearchElements.NodeSearchElement> nodes = nsm.SearchEntries.ToList(); var libs = nodes .Where(x => x.Categories.Count > 0) .Select(x => x.Categories.FirstOrDefault()) .ToList(); libs.Sort(); uniqueLibs = new HashSet <string>(libs); packageNames = ServerViewExtension.dynamoViewModel.Model.ExtensionManager.Extensions .Select(x => x.Name) .ToList(); }); html = "<h2>Currently installed pacakges : </h2>" + "<ul>"; foreach (var item in uniqueLibs) { html += "<li>" + item + "</li>"; } html += "</ul></br>"; html += "<h2>Currently installed extensions : </h2>" + "<ul>"; foreach (var item in packageNames) { html += "<li>" + item + "</li>"; } html += "</ul></br>"; html += "<em>Note : only Extensions are listed above, does not include ViewExtensions."; return(Response.AsText(html, "text/html")); }
/// <summary> /// Remove the specified package from Dynamo, using the Package Manager. /// </summary> /// <param name="parameters">The name of the package to remove.</param> /// <returns>HTML result summary.</returns> public dynamic RemovePackage(dynamic parameters) { string html = ""; int packageCountBefore = 0, packageCountAfter = 0; ServerViewExtension.RunInContext(() => { // TODO : implement package removal } ); if (packageCountAfter < packageCountBefore) { html = $"Removed {packageCountBefore - packageCountAfter} packages from Dynamo."; } else { html = "Did not remove any packages from Dynamo."; } return(Response.AsText(html, "text/html")); }
/// <summary> /// Saves the currently open Dynamo file. /// </summary> /// <param name="parameters">Not used, can specify null.</param> /// <returns>HTML result summary.</returns> public dynamic SaveFile(dynamic parameters) { string file = ""; string result = ""; ServerViewExtension.RunInContext(() => { file = ServerViewExtension.viewLoadedParams.CurrentWorkspaceModel.FileName; if (string.IsNullOrWhiteSpace(file)) { result = "No file is open, did not save anything."; } else { ServerViewExtension.DynamoLogger.Log("Saving " + file); ServerViewExtension.dynamoViewModel.SaveCommand.Execute(null); result = "Successfully Saved file : " + file; } } ); return(result); }
/// <summary> /// Installs the specified package in Dynamo, using the Package Manager. /// </summary> /// <param name="parameters">The name of the package to install.</param> /// <returns>HTML result summary.</returns> public dynamic InstallPackage(dynamic parameters) { string packageName = parameters.packagename; if (string.IsNullOrWhiteSpace(packageName)) { return("Supplied package name was invalid or empty."); } string result = ""; int packageCountBefore = 0, packageCountAfter = 0; ServerViewExtension.RunInContext(() => { try { // TODO : implement package install result = "To be implemented."; } catch (System.Exception e) { result = "Something went wrong, error : " + e.Message; } }); if (packageCountAfter > packageCountBefore) { result = $"Installed {packageCountBefore - packageCountAfter} packages from Dynamo."; } else { result = "Did not install any package to Dynamo."; } return(Response.AsText(result, "text/html")); }