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));
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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));
            }
        }