-
-
Notifications
You must be signed in to change notification settings - Fork 355
/
Copy pathPyRevitCLIExtensionCmds.cs
217 lines (190 loc) · 8.75 KB
/
PyRevitCLIExtensionCmds.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
using System.Diagnostics;
using pyRevitLabs.Common;
using pyRevitLabs.CommonCLI;
using pyRevitLabs.Common.Extensions;
using pyRevitLabs.TargetApps.Revit;
using pyRevitLabs.PyRevit;
using pyRevitLabs.Language.Properties;
using pyRevitLabs.NLog;
using pyRevitLabs.Json;
using pyRevitLabs.Json.Serialization;
using Console = Colorful.Console;
namespace pyRevitCLI {
internal static class PyRevitCLIExtensionCmds {
static Logger logger = LogManager.GetCurrentClassLogger();
internal static void
PrintExtensions(IEnumerable<PyRevitExtension> extList = null, string headerPrefix = "Installed") {
if (extList is null)
extList = PyRevitExtensions.GetInstalledExtensions();
PyRevitCLIAppCmds.PrintHeader(string.Format("{0} Extensions", headerPrefix));
foreach (PyRevitExtension ext in extList.OrderBy(x => x.Name))
Console.WriteLine(ext);
}
internal static void
PrintExtensionDefinitions(string searchPattern, string headerPrefix = "Registered") {
PyRevitCLIAppCmds.PrintHeader(string.Format("{0} Extensions", headerPrefix));
foreach (PyRevitExtensionDefinition ext in PyRevitExtensions.LookupRegisteredExtensions(searchPattern))
Console.WriteLine(ext);
}
internal static void
PrintExtensionSearchPaths() {
PyRevitCLIAppCmds.PrintHeader("Default Extension Search Path");
Console.WriteLine(PyRevitConsts.DefaultExtensionsPath);
PyRevitCLIAppCmds.PrintHeader("Extension Search Paths");
foreach (var searchPath in PyRevitExtensions.GetRegisteredExtensionSearchPaths())
Console.WriteLine(searchPath);
}
internal static void
PrintExtensionLookupSources() {
PyRevitCLIAppCmds.PrintHeader("Extension Sources - Default");
Console.WriteLine(PyRevitExtensions.GetDefaultExtensionLookupSource());
PyRevitCLIAppCmds.PrintHeader("Extension Sources - Additional");
foreach (var extLookupSrc in PyRevitExtensions.GetRegisteredExtensionLookupSources())
Console.WriteLine(extLookupSrc);
}
internal static void
Extend(string extName, string destPath, string branchName) {
var ext = PyRevitExtensions.FindRegisteredExtension(extName);
if (ext != null) {
logger.Debug("Matching extension found \"{0}\"", ext.Name);
PyRevitExtensions.InstallExtension(ext, destPath, branchName);
}
else {
if (Errors.LatestError == ErrorCodes.MoreThanOneItemMatched)
throw new PyRevitException(
string.Format("More than one extension matches the name \"{0}\"",
extName));
else
throw new PyRevitException(
string.Format("Not valid extension name or repo url \"{0}\"",
extName));
}
}
internal static void
Extend(bool ui, bool lib, string extName, string destPath, string repoUrl, string branchName, GitInstallerCredentials credentials) {
PyRevitExtensionTypes extType = PyRevitExtensionTypes.Unknown;
if (ui)
extType = PyRevitExtensionTypes.UIExtension;
else if (lib)
extType = PyRevitExtensionTypes.LibraryExtension;
PyRevitExtensions.InstallExtension(extName, extType, repoUrl, destPath, branchName, credentials);
}
internal static void
ProcessExtensionInfoCommands(string extName, bool info, bool help) {
if (extName != null) {
var extDef = PyRevitExtensions.FindRegisteredExtension(extName);
if (Errors.LatestError == ErrorCodes.MoreThanOneItemMatched)
logger.Warn("More than one extension matches the search pattern \"{0}\"", extName);
else {
if (info && extDef != null)
Console.WriteLine(extDef.ToString());
else if (help && extDef != null)
Process.Start(extDef.Website);
}
}
}
internal static void
ProcessExtensionOpenCommand(string cloneName, string extName) {
if (extName != null) {
PyRevitClone clone = null;
if (cloneName != null)
clone = PyRevitClones.GetRegisteredClone(cloneName);
PyRevitExtension ext;
if (clone != null)
ext = PyRevitExtensions.GetShippedExtension(clone, extName);
else
ext = PyRevitExtensions.GetInstalledExtension(extName);
if (ext != null)
CommonUtils.OpenInExplorer(ext.InstallPath);
}
}
internal static void
DeleteExtension(string extName) {
PyRevitExtensions.UninstallExtension(extName);
}
internal static void
GetSetExtensionOrigin(string extName, string originUrl, bool reset) {
if (extName != null) {
var extension = PyRevitExtensions.GetInstalledExtension(extName);
if (extension != null) {
if (reset) {
var ext = PyRevitExtensions.FindRegisteredExtension(extension.Name);
if (ext != null)
extension.SetOrigin(ext.Url);
else
throw new PyRevitException(
string.Format("Can not find the original url in the extension " +
"database for extension \"{0}\"",
extension.Name));
}
else if (originUrl != null) {
extension.SetOrigin(originUrl);
}
else {
Console.WriteLine(string.Format("Extension \"{0}\" origin is at \"{1}\"",
extension.Name, extension.Origin));
}
}
}
}
internal static void
ForgetAllExtensionPaths(bool all, string searchPath) {
if (all)
foreach (string regSearchPath in PyRevitExtensions.GetRegisteredExtensionSearchPaths())
PyRevitExtensions.UnregisterExtensionSearchPath(regSearchPath);
else
PyRevitExtensions.UnregisterExtensionSearchPath(searchPath);
}
internal static void
AddExtensionPath(string searchPath) {
if (searchPath != null)
PyRevitExtensions.RegisterExtensionSearchPath(searchPath);
}
internal static void
ToggleExtension(string revitVersion, bool enable, string cloneName, string extName) {
if (extName != null) {
PyRevitClone clone = null;
if (cloneName != null)
clone = PyRevitClones.GetRegisteredClone(cloneName);
if (enable) {
if (clone != null)
PyRevitExtensions.EnableShippedExtension(revitVersion, clone, extName);
else
PyRevitExtensions.EnableInstalledExtension(revitVersion, extName);
}
else {
if (clone != null)
PyRevitExtensions.DisableShippedExtension(revitVersion, clone, extName);
else
PyRevitExtensions.DisableInstalledExtension(revitVersion, extName);
}
}
}
internal static void
ForgetExtensionLookupSources(bool all, string lookupPath) {
if (all)
PyRevitExtensions.UnregisterAllExtensionLookupSources();
else if (lookupPath != null)
PyRevitExtensions.UnregisterExtensionLookupSource(lookupPath);
}
internal static void
AddExtensionLookupSource(string lookupPath) {
if (lookupPath != null)
PyRevitExtensions.RegisterExtensionLookupSource(lookupPath);
}
internal static void
UpdateExtension(bool all, string extName, GitInstallerCredentials credentials) {
if (all)
PyRevitExtensions.UpdateAllInstalledExtensions(credentials);
else if (extName != null)
PyRevitExtensions.UpdateExtension(extName, credentials);
}
}
}