diff --git a/OBSBlur/OBS/Blur.cs b/OBSBlur/OBS/Blur.cs index 70a5037..e1af13d 100644 --- a/OBSBlur/OBS/Blur.cs +++ b/OBSBlur/OBS/Blur.cs @@ -96,10 +96,11 @@ public class Blur private void AddBlur(WindowInfo windowInfo) { + int sceneItemId = _websocket.GetSceneItemId(_currentObsScene, "Blur", 0); Dictionary duplicateSceneItemRequest = new() { {"sceneName", _currentObsScene}, - {"sceneItemId", GetSceneItemUuid("Blur")} + {"sceneItemId", sceneItemId} }; try { @@ -133,60 +134,16 @@ public class Blur BoundsType = SceneItemBoundsType.OBS_BOUNDS_STRETCH, Alignnment = 5 }; - - Dictionary setSceneItemTransformRequest = new() - { - {"sceneName", _currentObsScene}, - {"sceneItemId", _windowHandleSceneItems[windowInfo.WindowHandle]}, - {"sceneItemTransform", info} - }; - try - { - _websocket.SendRequest("SetSceneItemTransform", JObject.FromObject(setSceneItemTransformRequest)); - } - catch (ErrorResponseException e) - { - _logger?.LogError(e, "Request 'SetSceneItemTransform'"); - throw; - } - - - Dictionary setSceneItemEnabledRequest = new() - { - {"sceneName", _currentObsScene}, - {"sceneItemId", _windowHandleSceneItems[windowInfo.WindowHandle]}, - {"sceneItemEnabled", true} - }; - try - { - _websocket.SendRequest("SetSceneItemEnabled", JObject.FromObject(setSceneItemEnabledRequest)); - } - catch (ErrorResponseException e) - { - _logger?.LogError(e, "Request 'SetSceneItemEnabled'"); - throw; - } + _websocket.SetSceneItemTransform(_currentObsScene, (int)_windowHandleSceneItems[windowInfo.WindowHandle], info); + _websocket.SetSceneItemEnabled(_currentObsScene, (int)_windowHandleSceneItems[windowInfo.WindowHandle], true); } private void DeleteBlur(IntPtr windowHandle) { if (!_windowHandleSceneItems.TryGetValue(windowHandle, out uint sceneItemId)) return; - Dictionary removeSceneItemRequest = new() - { - {"sceneName", _currentObsScene}, - {"sceneItemId", sceneItemId} - }; - try - { - _websocket.SendRequest("RemoveSceneItem", JObject.FromObject(removeSceneItemRequest)); - _windowHandleSceneItems.Remove(windowHandle); - } - catch (ErrorResponseException e) - { - _logger?.LogError(e, "Request 'RemoveSceneItem'"); - throw; - } + _websocket.RemoveSceneItem(_currentObsScene, (int)sceneItemId); + _windowHandleSceneItems.Remove(windowHandle); } private void DeleteBlur(WindowInfo windowInfo) @@ -194,53 +151,16 @@ public class Blur DeleteBlur(windowInfo.WindowHandle); } - private uint GetSceneItemUuid(string sourceName) + private void SetScaleFactors(SceneItemTransformInfo? sceneItemTransformInfo = null) { - Dictionary request = new() - { - {"sceneName", _currentObsScene}, - {"sourceName", sourceName} - }; - try - { - JObject response = _websocket.SendRequest("GetSceneItemId", JObject.FromObject(request)); - if (!response.ContainsKey("sceneItemId")) - throw new KeyNotFoundException("sceneItemId not in response."); - return response["sceneItemId"]!.Value(); - } - catch (Exception e) - { - _logger?.LogError(e, $"Request 'GetSceneItemId' in GetSceneItemUuid {sourceName}"); - throw; - } - } - - private void SetScaleFactors() - { - Dictionary request = new() - { - {"sceneName", _currentObsScene}, - {"sceneItemId", GetSceneItemUuid(_displayCaptureName)} - }; - try - { - JObject response = _websocket.SendRequest("GetSceneItemTransform", JObject.FromObject(request)); - if(!response.TryGetValue("sceneItemTransform", out JToken? sceneItemTransform)) - throw new KeyNotFoundException("Response missing key sceneItemTransform"); - - SceneItemTransformInfo sceneItemTransformInfo = sceneItemTransform.ToObject()!; - Rectangle desktopRectangle = WindowManager.GetDesktopRectangle(); - this._scaleWidth = sceneItemTransformInfo.Width / desktopRectangle.Width; - this._scaleHeight = sceneItemTransformInfo.Height / desktopRectangle.Height; - this._xOffset = sceneItemTransformInfo.X; - this._yOffset = sceneItemTransformInfo.Y; - } - catch (Exception e) - { - _logger?.LogError(e, "Request 'GetVideoSettings'"); - throw; - } + int displayCapture = _websocket.GetSceneItemId(_currentObsScene, _displayCaptureName, 0); + sceneItemTransformInfo ??= _websocket.GetSceneItemTransform(_currentObsScene, displayCapture); + Rectangle desktopRectangle = WindowManager.GetDesktopRectangle(); + this._scaleWidth = sceneItemTransformInfo.Width / desktopRectangle.Width; + this._scaleHeight = sceneItemTransformInfo.Height / desktopRectangle.Height; + this._xOffset = sceneItemTransformInfo.X; + this._yOffset = sceneItemTransformInfo.Y; } private void WindowManagerOnWindowZOrderChanged(IntPtr[] neworder)