private static string GetInstalledExtensionsString() { var extensions = IntegrationMetadata .FindIntegrations() .Select(a => string.Format("{0}={1}", a.Id, a.Version)) .ToArray(); return("?" + string.Join("&", extensions)); }
private static bool TryParse(string path, [CanBeNull] out IntegrationMetadata metadata) { try { metadata = JsonUtility.FromJson <IntegrationMetadata>(File.ReadAllText(path)); metadata.Path = path; //If any of the values are the default this hasn't parsed correctly. if (metadata.Id == null || metadata.Version == -1) { throw new FormatException("Encountered default value after parsing"); } return(true); } catch (Exception e) { Debug.LogWarning(string.Format("Failed to Parse Dissonance integration metadata at '{0}' - {1}", path, e)); metadata = null; return(false); } }
public static IEnumerable <IntegrationMetadata> FindIntegrations() { if (!Directory.Exists(IntegrationsDirectoryPath)) { yield break; } //Assume each directory in Dissonance/Integrations is an integration var directories = Directory.GetDirectories(IntegrationsDirectoryPath); foreach (var directory in directories) { var mdPath = System.IO.Path.Combine(directory, "dissonance-integration-metadata.json"); //If the file doesn't exist, or it fails to parse, return a default value IntegrationMetadata metadata; if (!File.Exists(mdPath) || !TryParse(mdPath, out metadata)) { metadata = new IntegrationMetadata(System.IO.Path.GetFileName(directory), 0, mdPath); } yield return(metadata); } }