private void CombineAndWriteManifest(List <ManifestDefaultBinding> defaultBindings) { string[] actionFiles = Directory.GetFiles("DynamicOpenVR/Actions"); var actionManifests = new List <ActionManifest>(); foreach (string actionFile in actionFiles) { try { using (var reader = new StreamReader(actionFile)) { actionManifests.Add(JsonConvert.DeserializeObject <ActionManifest>(reader.ReadToEnd())); } } catch (Exception ex) { Debug.LogError($"An error of type {ex.GetType().FullName} occured when trying to parse {actionFile}: {ex.Message}"); } } using (var writer = new StreamWriter(kActionManifestPath)) { var manifest = new ActionManifest() { Actions = actionManifests.SelectMany(m => m.Actions).ToList(), ActionSets = actionManifests.SelectMany(m => m.ActionSets).ToList(), DefaultBindings = defaultBindings, Localization = CombineLocalizations(actionManifests) }; writer.WriteLine(JsonConvert.SerializeObject(manifest, Formatting.Indented)); } }
public Action(string contextId, ActionManifest actionManifest, Plugin plugin) { this.ContextId = contextId; this.actionManifest = actionManifest; this.plugin = plugin; this.settingsPath = Path.Combine(plugin.SettingsDirectory, contextId + ".json"); var data = LoadActionData(); Settings = data.Settings; State = data.State; Icon = data.Icon; plugin.Listen <StreamDeckOutboundActionEvent>(e => { if (e.Context == contextId) { return(eventManager.TriggerEvent(e)); } return(Task.CompletedTask); }); if (string.IsNullOrWhiteSpace(Icon)) { var path = Path.Combine(plugin.RootFolder, actionManifest.Icon + ".png"); Icon = $"data:image/png;base64," + Convert.ToBase64String(File.ReadAllBytes(path)); } eventManager.Register <SetImageEvent>(c => { this.Icon = c.Payload.Image; UpdateActionData(d => d.Icon = this.Icon); return(Task.CompletedTask); }); eventManager.Register <SetSettingsEvent>(SyncSettings); // proxy send to property inspector event eventManager.Register <SendToPropertyInspectorEvent>(c => propertyEditorConnection?.Send(c) ?? Task.CompletedTask); }
private void CombineAndWriteManifest() { string actionsFolder = Path.Combine(Directory.GetCurrentDirectory(), "DynamicOpenVR", "Actions"); if (!Directory.Exists(actionsFolder)) { Logger.Warn("Actions folder does not exist!"); return; } Logger.Trace($"Reading actions from '{actionsFolder}'"); string[] actionFiles = Directory.GetFiles(actionsFolder); var actionManifests = new List <ActionManifest>(); ushort version = 0; foreach (string actionFile in actionFiles) { try { Logger.Trace($"Reading '{actionFile}'"); using (var reader = new StreamReader(actionFile)) { string data = reader.ReadToEnd(); actionManifests.Add(JsonConvert.DeserializeObject <ActionManifest>(data)); version += BitConverter.ToUInt16(SHA256.Create().ComputeHash(Encoding.UTF8.GetBytes(data)), 0); } } catch (Exception ex) { Logger.Error($"An error of type {ex.GetType().FullName} occured when trying to parse '{actionFile}': {ex.Message}"); } } List <ManifestDefaultBinding> defaultBindings = CombineAndWriteBindings(version); var manifest = new ActionManifest() { version = version, actions = actionManifests.SelectMany(m => m.actions).ToList(), actionSets = actionManifests.SelectMany(m => m.actionSets).ToList(), defaultBindings = defaultBindings, localization = CombineLocalizations(actionManifests) }; foreach (string actionSetName in manifest.actionSets.Select(a => a.Name)) { Logger.Trace($"Found defined action set '{actionSetName}'"); } foreach (string actionName in manifest.actions.Select(a => a.Name)) { Logger.Trace($"Found defined action '{actionName}'"); } foreach (string controllerType in manifest.defaultBindings.Select(a => a.ControllerType)) { Logger.Trace($"Found default binding for controller '{controllerType}'"); } Logger.Trace($"Writing action manifest to '{_actionManifestPath}'"); using (var writer = new StreamWriter(_actionManifestPath)) { writer.WriteLine(JsonConvert.SerializeObject(manifest, Formatting.Indented)); } }