public PyRevitExtension(string extensionPath) { InstallPath = extensionPath; var extDefFile = GetExtensionDefFilePath(InstallPath); if (CommonUtils.VerifyFile(extDefFile)) { Definition = new PyRevitExtensionDefinition(extDefFile); } else { // if def file is not found try to grab the definitions from registered extensions try { Definition = PyRevitExtensions.FindRegisteredExtension(Name); } catch { // let Definition be null if extension is not registered } } }
// other private helprs ===================================================================================== // find extension with search patten in extension lookup resource (file or url to a remote file) // @handled @logs private static List <PyRevitExtensionDefinition> LookupExtensionInDefinitionFile( string fileOrUri, string searchPattern = null) { var pyrevtExts = new List <PyRevitExtensionDefinition>(); string filePath = null; // determine if path is file or uri logger.Debug("Determining file or remote source \"{0}\"", fileOrUri); Uri uriResult; var validPath = Uri.TryCreate(fileOrUri, UriKind.Absolute, out uriResult); if (validPath) { if (uriResult.IsFile) { filePath = fileOrUri; logger.Debug("Source is a file \"{0}\"", filePath); } else if (uriResult.HostNameType == UriHostNameType.Dns || uriResult.HostNameType == UriHostNameType.IPv4 || uriResult.HostNameType == UriHostNameType.IPv6) { logger.Debug("Source is a remote resource \"{0}\"", fileOrUri); logger.Debug("Downloading remote resource \"{0}\"...", fileOrUri); // download the resource into TEMP try { filePath = CommonUtils.DownloadFile(fileOrUri, Path.Combine(Environment.GetEnvironmentVariable("TEMP"), PyRevitConsts.EnvConfigsExtensionDBFileName) ); } catch (Exception ex) { throw new PyRevitException( string.Format("Error downloading extension metadata file. | {0}", ex.Message) ); } } } else { throw new PyRevitException( string.Format("Source is not a valid file or remote resource \"{0}\"", fileOrUri) ); } // process file now if (filePath != null) { if (Path.GetExtension(filePath).ToLower() == ".json") { logger.Debug("Parsing extension metadata file..."); dynamic extensionsObj; if (filePath != null) { try { extensionsObj = JObject.Parse(File.ReadAllText(filePath)); } catch (Exception ex) { throw new PyRevitException(string.Format("Error parsing extension metadata. | {0}", ex.Message)); } // make extension list foreach (JObject extObj in extensionsObj.extensions) { var extDef = new PyRevitExtensionDefinition(extObj); logger.Debug("Registered extension \"{0}\"", extDef.Name); if (searchPattern != null) { if (CompareExtensionNames(extDef.Name, searchPattern)) { logger.Debug(string.Format("\"{0}\" Matched registered extension \"{1}\"", searchPattern, extDef.Name)); pyrevtExts.Add(extDef); } } else { pyrevtExts.Add(extDef); } } } } else { throw new PyRevitException( string.Format("Definition file is not a valid json file \"{0}\"", filePath) ); } } return(pyrevtExts); }
// installs extension // @handled @logs public static void InstallExtension(PyRevitExtensionDefinition extDef, string destPath = null, string branchName = null) { logger.Debug("Installing extension \"{0}\"", extDef.Name); InstallExtension(extDef.Name, extDef.Type, extDef.Url, destPath, branchName); }