diff --git a/.github/upgrades/dotnet-upgrade-plan.md b/.github/upgrades/dotnet-upgrade-plan.md index 0ad5fb5..24be8a9 100644 --- a/.github/upgrades/dotnet-upgrade-plan.md +++ b/.github/upgrades/dotnet-upgrade-plan.md @@ -1,70 +1,70 @@ -# .NET 8.0 Upgrade Plan - -## Execution Steps - -Execute steps below sequentially one by one in the order they are listed. - -1. Validate that an .NET 8.0 SDK required for this upgrade is installed on the machine and if not, help to get it installed. -2. Ensure that the SDK version specified in global.json files is compatible with the .NET 8.0 upgrade. -3. Upgrade ClipTrimDotNet\ClipTrimDotNet.csproj -4. Run unit tests to validate upgrade in the projects listed below: - - ClientTest\ClientTest.csproj - -## Settings - -This section contains settings and data used by execution steps. - -### Excluded projects - -| Project name | Description | -|:-----------------------------------------------|:---------------------------:| - -### Aggregate NuGet packages modifications across all projects - -NuGet packages used across all selected projects or their dependencies that need version update in projects that reference them. - -| Package Name | Current Version | New Version | Description | -|:------------------------------------|:---------------:|:-----------:|:----------------------------------------------| -| Microsoft.Bcl.AsyncInterfaces | 10.0.2 | 8.0.0 | Recommended for .NET 8.0 | -| Microsoft.Extensions.DependencyInjection | 10.0.2 | 8.0.1 | Recommended for .NET 8.0 | -| Microsoft.Extensions.DependencyInjection.Abstractions | 10.0.2 | 8.0.2 | Recommended for .NET 8.0 | -| Microsoft.Extensions.Logging | 10.0.2 | 8.0.1 | Recommended for .NET 8.0 | -| Microsoft.Extensions.Logging.Abstractions | 10.0.2 | 8.0.3 | Recommended for .NET 8.0 | -| Microsoft.Extensions.Options | 10.0.2 | 8.0.2 | Recommended for .NET 8.0 | -| Microsoft.Extensions.Primitives | 10.0.2 | 8.0.0 | Recommended for .NET 8.0 | -| System.Diagnostics.DiagnosticSource | 10.0.2 | 8.0.1 | Recommended for .NET 8.0 | -| System.Drawing.Common | 9.0.10 | 8.0.24 | Recommended for .NET 8.0 | -| System.IO.Pipelines | 10.0.2 | 8.0.0 | Recommended for .NET 8.0 | -| System.Security.AccessControl | 4.7.0 | 6.0.1 | Recommended for .NET 8.0 | -| System.Text.Encodings.Web | 10.0.2 | 8.0.0 | Recommended for .NET 8.0 | -| System.Text.Json | 10.0.2 | 8.0.6 | Recommended for .NET 8.0 | -| Microsoft.Win32.Registry | 4.7.0 | | Functionality included with framework | -| System.Buffers | 4.6.1 | | Functionality included with framework | -| System.IO | 4.3.0 | | Functionality included with framework | -| System.Memory | 4.6.3 | | Functionality included with framework | -| System.Net.Http | 4.3.4 | | Functionality included with framework | -| System.Numerics.Vectors | 4.6.1 | | Functionality included with framework | -| System.Runtime | 4.3.0 | | Functionality included with framework | -| System.Security.Cryptography.Algorithms | 4.3.0 | | Functionality included with framework | -| System.Security.Cryptography.Encoding | 4.3.0 | | Functionality included with framework | -| System.Security.Cryptography.Primitives | 4.3.0 | | Functionality included with framework | -| System.Security.Cryptography.X509Certificates | 4.3.0 | | Functionality included with framework | -| System.Security.Principal.Windows | 4.7.0 | | Functionality included with framework | -| System.Threading.Tasks.Extensions | 4.6.3 | | Functionality included with framework | -| System.ValueTuple | 4.6.1 | | Functionality included with framework | - -### Project upgrade details - -#### ClipTrimDotNet\ClipTrimDotNet.csproj modifications - -Project properties changes: - - Target framework should be changed from `.NETFramework,Version=v4.8` to `net8.0` - - Project file should be converted to SDK-style - -NuGet packages changes: - - Update all packages listed in the NuGet packages table above as recommended - - Remove packages whose functionality is now included with the framework - -Other changes: - - Ensure compatibility with .NET 8.0 APIs and features - - Update code as needed for breaking changes +# .NET 8.0 Upgrade Plan + +## Execution Steps + +Execute steps below sequentially one by one in the order they are listed. + +1. Validate that an .NET 8.0 SDK required for this upgrade is installed on the machine and if not, help to get it installed. +2. Ensure that the SDK version specified in global.json files is compatible with the .NET 8.0 upgrade. +3. Upgrade ClipTrimDotNet\ClipTrimDotNet.csproj +4. Run unit tests to validate upgrade in the projects listed below: + - ClientTest\ClientTest.csproj + +## Settings + +This section contains settings and data used by execution steps. + +### Excluded projects + +| Project name | Description | +|:-----------------------------------------------|:---------------------------:| + +### Aggregate NuGet packages modifications across all projects + +NuGet packages used across all selected projects or their dependencies that need version update in projects that reference them. + +| Package Name | Current Version | New Version | Description | +|:------------------------------------|:---------------:|:-----------:|:----------------------------------------------| +| Microsoft.Bcl.AsyncInterfaces | 10.0.2 | 8.0.0 | Recommended for .NET 8.0 | +| Microsoft.Extensions.DependencyInjection | 10.0.2 | 8.0.1 | Recommended for .NET 8.0 | +| Microsoft.Extensions.DependencyInjection.Abstractions | 10.0.2 | 8.0.2 | Recommended for .NET 8.0 | +| Microsoft.Extensions.Logging | 10.0.2 | 8.0.1 | Recommended for .NET 8.0 | +| Microsoft.Extensions.Logging.Abstractions | 10.0.2 | 8.0.3 | Recommended for .NET 8.0 | +| Microsoft.Extensions.Options | 10.0.2 | 8.0.2 | Recommended for .NET 8.0 | +| Microsoft.Extensions.Primitives | 10.0.2 | 8.0.0 | Recommended for .NET 8.0 | +| System.Diagnostics.DiagnosticSource | 10.0.2 | 8.0.1 | Recommended for .NET 8.0 | +| System.Drawing.Common | 9.0.10 | 8.0.24 | Recommended for .NET 8.0 | +| System.IO.Pipelines | 10.0.2 | 8.0.0 | Recommended for .NET 8.0 | +| System.Security.AccessControl | 4.7.0 | 6.0.1 | Recommended for .NET 8.0 | +| System.Text.Encodings.Web | 10.0.2 | 8.0.0 | Recommended for .NET 8.0 | +| System.Text.Json | 10.0.2 | 8.0.6 | Recommended for .NET 8.0 | +| Microsoft.Win32.Registry | 4.7.0 | | Functionality included with framework | +| System.Buffers | 4.6.1 | | Functionality included with framework | +| System.IO | 4.3.0 | | Functionality included with framework | +| System.Memory | 4.6.3 | | Functionality included with framework | +| System.Net.Http | 4.3.4 | | Functionality included with framework | +| System.Numerics.Vectors | 4.6.1 | | Functionality included with framework | +| System.Runtime | 4.3.0 | | Functionality included with framework | +| System.Security.Cryptography.Algorithms | 4.3.0 | | Functionality included with framework | +| System.Security.Cryptography.Encoding | 4.3.0 | | Functionality included with framework | +| System.Security.Cryptography.Primitives | 4.3.0 | | Functionality included with framework | +| System.Security.Cryptography.X509Certificates | 4.3.0 | | Functionality included with framework | +| System.Security.Principal.Windows | 4.7.0 | | Functionality included with framework | +| System.Threading.Tasks.Extensions | 4.6.3 | | Functionality included with framework | +| System.ValueTuple | 4.6.1 | | Functionality included with framework | + +### Project upgrade details + +#### ClipTrimDotNet\ClipTrimDotNet.csproj modifications + +Project properties changes: + - Target framework should be changed from `.NETFramework,Version=v4.8` to `net8.0` + - Project file should be converted to SDK-style + +NuGet packages changes: + - Update all packages listed in the NuGet packages table above as recommended + - Remove packages whose functionality is now included with the framework + +Other changes: + - Ensure compatibility with .NET 8.0 APIs and features + - Update code as needed for breaking changes diff --git a/.vscode/settings.json b/.vscode/settings.json index 5cc61c2..d289b15 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,3 @@ -{ - "idf.pythonInstallPath": "C:\\Users\\mickl\\.espressif\\tools\\idf-python\\3.11.2\\python.exe" +{ + "idf.pythonInstallPath": "C:\\Users\\mickl\\.espressif\\tools\\idf-python\\3.11.2\\python.exe" } \ No newline at end of file diff --git a/audio-service/metadata.json b/audio-service/metadata.json index 386665c..ab0150f 100644 --- a/audio-service/metadata.json +++ b/audio-service/metadata.json @@ -1,34 +1,34 @@ -[ - { - "name": "Uncategorized", - "id": 0, - "clips": [] - }, - { - "name": "Test", - "id": 1, - "clips": [] - }, - { - "name": "New", - "id": 2, - "clips": [ - { - "endTime": 30, - "filename": "C:\\Users\\mickl\\Desktop\\cliptrim-ui\\ClipTrimApp\\audio-service\\recordings\\audio_capture_20260220_193822.wav", - "name": "Pee pee\npoo poo", - "playbackType": "playOverlap", - "startTime": 27.76674010920584, - "volume": 0.25 - }, - { - "endTime": 27.516843118383072, - "filename": "C:\\Users\\mickl\\Desktop\\cliptrim-ui\\ClipTrimApp\\audio-service\\recordings\\audio_capture_20260220_200442.wav", - "name": "Clip 20260220_200442", - "playbackType": "playOverlap", - "startTime": 25.120307988450435, - "volume": 0.64 - } - ] - } +[ + { + "name": "Uncategorized", + "id": 0, + "clips": [] + }, + { + "name": "Test", + "id": 1, + "clips": [] + }, + { + "name": "New", + "id": 2, + "clips": [ + { + "endTime": 30, + "filename": "C:\\Users\\mickl\\Desktop\\cliptrim-ui\\ClipTrimApp\\audio-service\\recordings\\audio_capture_20260220_193822.wav", + "name": "Pee pee\npoo poo", + "playbackType": "playOverlap", + "startTime": 27.76674010920584, + "volume": 0.25 + }, + { + "endTime": 27.516843118383072, + "filename": "C:\\Users\\mickl\\Desktop\\cliptrim-ui\\ClipTrimApp\\audio-service\\recordings\\audio_capture_20260220_200442.wav", + "name": "Clip 20260220_200442", + "playbackType": "playOverlap", + "startTime": 25.120307988450435, + "volume": 0.64 + } + ] + } ] \ No newline at end of file diff --git a/audio-service/requirements.txt b/audio-service/requirements.txt index 918fe6b..1387b40 100644 --- a/audio-service/requirements.txt +++ b/audio-service/requirements.txt @@ -1,7 +1,7 @@ -sounddevice==0.5.1 -numpy==1.22.3 -python-osc==1.9.3 -scipy==1.10.1 -comtypes==1.4.8 -pycaw==20240210 +sounddevice==0.5.1 +numpy==1.22.3 +python-osc==1.9.3 +scipy==1.10.1 +comtypes==1.4.8 +pycaw==20240210 Flask==3.1.2 \ No newline at end of file diff --git a/audio-service/settings.json b/audio-service/settings.json index 3c28a3d..7e2c9e9 100644 --- a/audio-service/settings.json +++ b/audio-service/settings.json @@ -1,17 +1,17 @@ -{ - "input_device": { - "channels": 2, - "default_samplerate": 48000, - "index": 55, - "name": "VM Mic mix (VB-Audio Voicemeeter VAIO)" - }, - "save_path": "C:\\Users\\mickl\\Desktop\\cliptrim-ui\\ClipTrimApp\\audio-service\\recordings", - "recording_length": 30, - "output_device": { - "channels": 2, - "default_samplerate": 48000, - "index": 44, - "name": "VM to Headset (VB-Audio Voicemeeter VAIO)" - }, - "http_port": 5010 +{ + "input_device": { + "channels": 2, + "default_samplerate": 48000, + "index": 55, + "name": "VM Mic mix (VB-Audio Voicemeeter VAIO)" + }, + "save_path": "C:\\Users\\mickl\\Desktop\\cliptrim-ui\\ClipTrimApp\\audio-service\\recordings", + "recording_length": 30, + "output_device": { + "channels": 2, + "default_samplerate": 48000, + "index": 44, + "name": "VM to Headset (VB-Audio Voicemeeter VAIO)" + }, + "http_port": 5010 } \ No newline at end of file diff --git a/audio-service/src/audio_io.py b/audio-service/src/audio_io.py index 292b541..2f8865b 100644 --- a/audio-service/src/audio_io.py +++ b/audio-service/src/audio_io.py @@ -1,168 +1,168 @@ -import sounddevice as sd -import numpy as np -import os -from datetime import datetime -import scipy.io.wavfile as wavfile -from metadata_manager import MetaDataManager -from audio_clip import AudioClip - - -# AudioClip class for clip playback - - -class AudioIO: - _instance = None - - def __new__(cls, *args, **kwargs): - if cls._instance is None: - # print("Creating new AudioRecorder instance") - cls._instance = super().__new__(cls) - cls._instance.init() - return cls._instance - def init(self): - self.duration = 30 - self.channels = 2 - self.input_sample_rate = 44100 - self.output_sample_rate = 44100 - self.buffer = np.zeros((int(self.duration * self.input_sample_rate), self.channels), dtype=np.float32) - self.recordings_dir = "recordings" - - sd.default.latency = 'low' - - self.socket = None - - self.in_stream = sd.InputStream( - callback=self.record_callback - ) - - self.out_stream = sd.OutputStream( - callback=self.playback_callback, - latency=3 - ) - - self.clip_map = {} - - - def refresh_streams(self): - was_active = self.in_stream.active - if was_active: - self.in_stream.stop() - self.out_stream.stop() - - self.buffer = np.zeros((int(self.duration * self.input_sample_rate), self.channels), dtype=np.float32) - # print(f"AudioRecorder initialized with duration={self.duration}s, sample_rate={self.sample_rate}Hz, channels={self.channels}") - self.in_stream = sd.InputStream( - callback=self.record_callback - ) - - self.out_stream = sd.OutputStream( - callback=self.playback_callback - ) - - if was_active: - self.in_stream.start() - self.out_stream.start() - - - - def record_callback(self, indata, frames, time, status): - if status: - # print(f"Recording status: {status}") - pass - - # Circular buffer implementation - self.buffer = np.roll(self.buffer, -frames, axis=0) - self.buffer[-frames:] = indata - - def playback_callback(self, outdata, frames, time, status): - if status: - # print(f"Playback status: {status}") - pass - - outdata.fill(0) - - # Iterate over a copy of the items to avoid modifying the dictionary during iteration - for clip_id, clip_list in list(self.clip_map.items()): - for clip in clip_list[:]: # Iterate over a copy of the list - if not clip.is_finished(): - samples = clip.get_samples(frames) - outdata[:] += samples.reshape(-1, 1) # Mix into output - if clip.is_finished(): - self.clip_map[clip_id].remove(clip) - if len(self.clip_map[clip_id]) == 0: - del self.clip_map[clip_id] - break # Exit inner loop since the key is deleted - - - def save_last_n_seconds(self): - # Create output directory if it doesn't exist - os.makedirs(self.recordings_dir, exist_ok=True) - - # Generate filename with timestamp - timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") - filename = os.path.join(self.recordings_dir, f"audio_capture_{timestamp}.wav") - - # Normalize audio to prevent clipping - audio_data = self.buffer / np.max(np.abs(self.buffer)) * .5 - - # Convert float32 to int16 for WAV file - audio_data_int16 = (audio_data * 32767).astype(np.int16) - - # Write buffer to file - wavfile.write(filename, int(self.input_sample_rate), audio_data_int16) - - meta = MetaDataManager() - - clip_metadata = { - "filename": filename, - "name": f"Clip {timestamp}", - "playbackType":"playStop", - "volume": 1.0, - } - - meta.add_clip_to_collection("Uncategorized", clip_metadata ) - - - return clip_metadata - - def set_buffer_duration(self, duration): - self.duration = duration - self.buffer = np.zeros((int(duration * self.input_sample_rate), self.channels), dtype=np.float32) - - def set_recording_directory(self, directory): - self.recordings_dir = directory - - def start_recording(self): - if(self.in_stream.active): - # print("Already recording") - return - # print('number of channels', self.channels) - - self.in_stream.start() - self.out_stream.start() - self.output_sample_rate = self.out_stream.samplerate - self.input_sample_rate = self.in_stream.samplerate - - def stop_recording(self): - if(not self.in_stream.active): - # print("Already stopped") - return - - self.in_stream.stop() - self.out_stream.stop() - - def is_recording(self): - return self.in_stream.active - - def play_clip(self, clip_metadata): - print(f"Playing clip: {clip_metadata}") - clip_id = clip_metadata.get("filename") - if clip_metadata.get("playbackType") == "playStop": - if clip_id in self.clip_map: - del self.clip_map[clip_id] - return - else: - self.clip_map[clip_id] = [] - if clip_id not in self.clip_map: - self.clip_map[clip_id] = [] +import sounddevice as sd +import numpy as np +import os +from datetime import datetime +import scipy.io.wavfile as wavfile +from metadata_manager import MetaDataManager +from audio_clip import AudioClip + + +# AudioClip class for clip playback + + +class AudioIO: + _instance = None + + def __new__(cls, *args, **kwargs): + if cls._instance is None: + # print("Creating new AudioRecorder instance") + cls._instance = super().__new__(cls) + cls._instance.init() + return cls._instance + def init(self): + self.duration = 30 + self.channels = 2 + self.input_sample_rate = 44100 + self.output_sample_rate = 44100 + self.buffer = np.zeros((int(self.duration * self.input_sample_rate), self.channels), dtype=np.float32) + self.recordings_dir = "recordings" + + sd.default.latency = 'low' + + self.socket = None + + self.in_stream = sd.InputStream( + callback=self.record_callback + ) + + self.out_stream = sd.OutputStream( + callback=self.playback_callback, + latency=3 + ) + + self.clip_map = {} + + + def refresh_streams(self): + was_active = self.in_stream.active + if was_active: + self.in_stream.stop() + self.out_stream.stop() + + self.buffer = np.zeros((int(self.duration * self.input_sample_rate), self.channels), dtype=np.float32) + # print(f"AudioRecorder initialized with duration={self.duration}s, sample_rate={self.sample_rate}Hz, channels={self.channels}") + self.in_stream = sd.InputStream( + callback=self.record_callback + ) + + self.out_stream = sd.OutputStream( + callback=self.playback_callback + ) + + if was_active: + self.in_stream.start() + self.out_stream.start() + + + + def record_callback(self, indata, frames, time, status): + if status: + # print(f"Recording status: {status}") + pass + + # Circular buffer implementation + self.buffer = np.roll(self.buffer, -frames, axis=0) + self.buffer[-frames:] = indata + + def playback_callback(self, outdata, frames, time, status): + if status: + # print(f"Playback status: {status}") + pass + + outdata.fill(0) + + # Iterate over a copy of the items to avoid modifying the dictionary during iteration + for clip_id, clip_list in list(self.clip_map.items()): + for clip in clip_list[:]: # Iterate over a copy of the list + if not clip.is_finished(): + samples = clip.get_samples(frames) + outdata[:] += samples.reshape(-1, 1) # Mix into output + if clip.is_finished(): + self.clip_map[clip_id].remove(clip) + if len(self.clip_map[clip_id]) == 0: + del self.clip_map[clip_id] + break # Exit inner loop since the key is deleted + + + def save_last_n_seconds(self): + # Create output directory if it doesn't exist + os.makedirs(self.recordings_dir, exist_ok=True) + + # Generate filename with timestamp + timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") + filename = os.path.join(self.recordings_dir, f"audio_capture_{timestamp}.wav") + + # Normalize audio to prevent clipping + audio_data = self.buffer / np.max(np.abs(self.buffer)) * .5 + + # Convert float32 to int16 for WAV file + audio_data_int16 = (audio_data * 32767).astype(np.int16) + + # Write buffer to file + wavfile.write(filename, int(self.input_sample_rate), audio_data_int16) + + meta = MetaDataManager() + + clip_metadata = { + "filename": filename, + "name": f"Clip {timestamp}", + "playbackType":"playStop", + "volume": 1.0, + } + + meta.add_clip_to_collection("Uncategorized", clip_metadata ) + + + return clip_metadata + + def set_buffer_duration(self, duration): + self.duration = duration + self.buffer = np.zeros((int(duration * self.input_sample_rate), self.channels), dtype=np.float32) + + def set_recording_directory(self, directory): + self.recordings_dir = directory + + def start_recording(self): + if(self.in_stream.active): + # print("Already recording") + return + # print('number of channels', self.channels) + + self.in_stream.start() + self.out_stream.start() + self.output_sample_rate = self.out_stream.samplerate + self.input_sample_rate = self.in_stream.samplerate + + def stop_recording(self): + if(not self.in_stream.active): + # print("Already stopped") + return + + self.in_stream.stop() + self.out_stream.stop() + + def is_recording(self): + return self.in_stream.active + + def play_clip(self, clip_metadata): + print(f"Playing clip: {clip_metadata}") + clip_id = clip_metadata.get("filename") + if clip_metadata.get("playbackType") == "playStop": + if clip_id in self.clip_map: + del self.clip_map[clip_id] + return + else: + self.clip_map[clip_id] = [] + if clip_id not in self.clip_map: + self.clip_map[clip_id] = [] self.clip_map[clip_id].append(AudioClip(clip_metadata, target_sample_rate=self.output_sample_rate)) \ No newline at end of file diff --git a/audio-service/src/main.py b/audio-service/src/main.py index 571e2c4..b9ec183 100644 --- a/audio-service/src/main.py +++ b/audio-service/src/main.py @@ -1,85 +1,85 @@ -import argparse -import os -import sys -from audio_io import AudioIO -from windows_audio import WindowsAudioManager -import sounddevice as sd -from metadata_manager import MetaDataManager -from settings import SettingsManager - -from flask import Flask -from flask_cors import CORS - -from routes.recording import recording_bp -from routes.device import device_bp -from routes.metadata import metadata_bp -from routes.settings import settings_bp -from flask_socketio import SocketIO, emit -import threading - -app = Flask(__name__) -CORS(app) -socketio = SocketIO(app, cors_allowed_origins="*") - -@socketio.on('connect') -def handle_connect(): - print("Client connected") - emit('full_data', MetaDataManager().collections) - -@socketio.on('record_clip') -def record_clip(data): - io = AudioIO() - io.save_last_n_seconds(); - -def main(): - # Create argument parser - parser = argparse.ArgumentParser(description='Audio Recording Service') - - # OSC port argument - parser.add_argument('--osc-port', - type=int, - help='OSC server port number', - default=5010) - - # Parse arguments - args = parser.parse_args() - audio_manager = WindowsAudioManager() - settings = SettingsManager() - meta = MetaDataManager() - - - - # Ensure save path exists - os.makedirs(settings.get_settings('save_path'), exist_ok=True) - - - io = AudioIO() - io.start_recording() - - # settings.socket = socketio - io.socket = socketio - meta.socket = socketio - - # Register blueprints - app.register_blueprint(recording_bp) - app.register_blueprint(device_bp) - app.register_blueprint(metadata_bp) - app.register_blueprint(settings_bp) - # app.run(host='127.0.0.1', port=settings.get_settings('http_port'), debug=False, use_reloader=True) - socketio.run(app, host='127.0.0.1', port=settings.get_settings('http_port'), debug=False, use_reloader=True) - - - - # Run the OSC server - # try: - # print(f"Starting OSC Recording Server on port {args.osc_port}") - # # osc_server.run_server() - # except KeyboardInterrupt: - # print("\nServer stopped by user.") - # except Exception as e: - # print(f"Error starting server: {e}") - # sys.exit(1) - - -if __name__ == "__main__": +import argparse +import os +import sys +from audio_io import AudioIO +from windows_audio import WindowsAudioManager +import sounddevice as sd +from metadata_manager import MetaDataManager +from settings import SettingsManager + +from flask import Flask +from flask_cors import CORS + +from routes.recording import recording_bp +from routes.device import device_bp +from routes.metadata import metadata_bp +from routes.settings import settings_bp +from flask_socketio import SocketIO, emit +import threading + +app = Flask(__name__) +CORS(app) +socketio = SocketIO(app, cors_allowed_origins="*") + +@socketio.on('connect') +def handle_connect(): + print("Client connected") + emit('full_data', MetaDataManager().collections) + +@socketio.on('record_clip') +def record_clip(data): + io = AudioIO() + io.save_last_n_seconds(); + +def main(): + # Create argument parser + parser = argparse.ArgumentParser(description='Audio Recording Service') + + # OSC port argument + parser.add_argument('--osc-port', + type=int, + help='OSC server port number', + default=5010) + + # Parse arguments + args = parser.parse_args() + audio_manager = WindowsAudioManager() + settings = SettingsManager() + meta = MetaDataManager() + + + + # Ensure save path exists + os.makedirs(settings.get_settings('save_path'), exist_ok=True) + + + io = AudioIO() + io.start_recording() + + # settings.socket = socketio + io.socket = socketio + meta.socket = socketio + + # Register blueprints + app.register_blueprint(recording_bp) + app.register_blueprint(device_bp) + app.register_blueprint(metadata_bp) + app.register_blueprint(settings_bp) + # app.run(host='127.0.0.1', port=settings.get_settings('http_port'), debug=False, use_reloader=True) + socketio.run(app, host='127.0.0.1', port=settings.get_settings('http_port'), debug=False, use_reloader=True) + + + + # Run the OSC server + # try: + # print(f"Starting OSC Recording Server on port {args.osc_port}") + # # osc_server.run_server() + # except KeyboardInterrupt: + # print("\nServer stopped by user.") + # except Exception as e: + # print(f"Error starting server: {e}") + # sys.exit(1) + + +if __name__ == "__main__": main() \ No newline at end of file diff --git a/audio-service/src/metadata.json b/audio-service/src/metadata.json index cb2d255..802da50 100644 --- a/audio-service/src/metadata.json +++ b/audio-service/src/metadata.json @@ -1,20 +1,20 @@ -{ - "Uncategorized": [ - { - "endTime": 12.489270386266055, - "filename": "C:\\Users\\mickl\\Desktop\\cliptrim-ui\\ClipTrimApp\\audio-service\\src\\recordings\\audio_capture_20260214_133540.wav", - "name": "Clip 20260214_133540", - "playbackType": "playStop", - "startTime": 10.622317596566523, - "volume": 1 - }, - { - "endTime": 6.824034334763957, - "filename": "C:\\Users\\mickl\\Desktop\\cliptrim-ui\\ClipTrimApp\\audio-service\\src\\recordings\\audio_capture_20260214_133137.wav", - "name": "Clip 20260214_133137", - "playbackType": "playStop", - "startTime": 3.7982832618025753, - "volume": 1 - } - ] +{ + "Uncategorized": [ + { + "endTime": 12.489270386266055, + "filename": "C:\\Users\\mickl\\Desktop\\cliptrim-ui\\ClipTrimApp\\audio-service\\src\\recordings\\audio_capture_20260214_133540.wav", + "name": "Clip 20260214_133540", + "playbackType": "playStop", + "startTime": 10.622317596566523, + "volume": 1 + }, + { + "endTime": 6.824034334763957, + "filename": "C:\\Users\\mickl\\Desktop\\cliptrim-ui\\ClipTrimApp\\audio-service\\src\\recordings\\audio_capture_20260214_133137.wav", + "name": "Clip 20260214_133137", + "playbackType": "playStop", + "startTime": 3.7982832618025753, + "volume": 1 + } + ] } \ No newline at end of file diff --git a/audio-service/src/metadata_manager.py b/audio-service/src/metadata_manager.py index 92d9d0b..0652b89 100644 --- a/audio-service/src/metadata_manager.py +++ b/audio-service/src/metadata_manager.py @@ -1,103 +1,103 @@ -import os -import json - -class MetaDataManager: - _instance = None - - def __new__(cls, *args, **kwargs): - if cls._instance is None: - cls._instance = super().__new__(cls) - cls._instance.init() - return cls._instance - def init(self): - self.socket = None - # read metadata file from executing directory - self.metadata_file = os.path.join(os.getcwd(), "metadata.json") - if os.path.exists(self.metadata_file): - with open(self.metadata_file, "r") as f: - self.collections = json.load(f) - else: - self.collections = {} - if(collections := next((c for c in self.collections if c.get("name") == "Uncategorized"), None)) is None: - self.collections.append({"name": "Uncategorized", "id": 0, "clips": []}) - self.save_metadata() - - def create_collection(self, name): - if any(c.get("name") == name for c in self.collections): - raise ValueError(f"Collection '{name}' already exists.") - new_id = max((c.get("id", 0) for c in self.collections), default=0) + 1 - self.collections.append({"name": name, "id": new_id, "clips": []}) - self.save_metadata() - - def delete_collection(self, name): - collection = next((c for c in self.collections if c.get("name") == name), None) - if collection is None: - raise ValueError(f"Collection '{name}' does not exist.") - self.collections.remove(collection) - self.save_metadata() - - def add_clip_to_collection(self, collection_name, clip_metadata): - collection = next((c for c in self.collections if c.get("name") == collection_name), None) - if collection is None: - raise ValueError(f"Collection '{collection_name}' does not exist.") - collection["clips"].append(clip_metadata) - self.save_metadata() - - def remove_clip_from_collection(self, collection_name, clip_metadata): - collection = next((c for c in self.collections if c.get("name") == collection_name), None) - if collection is None: - raise ValueError(f"Collection '{collection_name}' does not exist.") - # Remove all clips with the same file name as clip_metadata["file_name"] - in_list = any(clip.get("filename") == clip_metadata.get("filename") for clip in collection["clips"]) - if not in_list: - raise ValueError(f"Clip with filename '{clip_metadata.get('filename')}' not found in collection '{collection_name}'.") - - collection["clips"] = [ - clip for clip in collection["clips"] - if clip.get("filename") != clip_metadata.get("filename") - ] - self.save_metadata() - - def move_clip_to_collection(self, source_collection, target_collection, clip_metadata): - self.remove_clip_from_collection(source_collection, clip_metadata) - self.add_clip_to_collection(target_collection, clip_metadata) - - def edit_clip_in_collection(self, collection_name, new_clip_metadata): - collection = next((c for c in self.collections if c.get("name") == collection_name), None) - if collection is None: - raise ValueError(f"Collection '{collection_name}' does not exist.") - # Find the index of the clip with the same file name as old_clip_metadata["file_name"] - index = next((i for i, clip in enumerate(collection["clips"]) if clip.get("filename") == new_clip_metadata.get("filename")), None) - if index is None: - raise ValueError(f"Clip with filename '{new_clip_metadata.get('filename')}' not found in collection '{collection_name}'.") - - collection["clips"][index] = new_clip_metadata - self.save_metadata() - - def get_collections(self): - return list(map(lambda c: {"name": c.get("name"), "id": c.get("id")}, self.collections)) - - def get_clips_in_collection(self, collection_name): - collection = next((c for c in self.collections if c.get("name") == collection_name), None) - if collection is None: - raise ValueError(f"Collection '{collection_name}' does not exist.") - return collection["clips"] - - def reorder_clips_in_collection(self, collection_name, new_order): - collection = next((c for c in self.collections if c.get("name") == collection_name), None) - if collection is None: - raise ValueError(f"Collection '{collection_name}' does not exist.") - existing_filenames = {clip.get("filename") for clip in collection["clips"]} - new_filenames = {clip.get("filename") for clip in new_order} - - if not new_filenames.issubset(existing_filenames): - raise ValueError("New order contains clips that do not exist in the collection.") - - collection["clips"] = new_order - if not self.socket is None: - self.socket.emit('collection_updated', collection) - self.save_metadata() - - def save_metadata(self): - with open(self.metadata_file, "w") as f: - json.dump(self.collections, f, indent=4) +import os +import json + +class MetaDataManager: + _instance = None + + def __new__(cls, *args, **kwargs): + if cls._instance is None: + cls._instance = super().__new__(cls) + cls._instance.init() + return cls._instance + def init(self): + self.socket = None + # read metadata file from executing directory + self.metadata_file = os.path.join(os.getcwd(), "metadata.json") + if os.path.exists(self.metadata_file): + with open(self.metadata_file, "r") as f: + self.collections = json.load(f) + else: + self.collections = {} + if(collections := next((c for c in self.collections if c.get("name") == "Uncategorized"), None)) is None: + self.collections.append({"name": "Uncategorized", "id": 0, "clips": []}) + self.save_metadata() + + def create_collection(self, name): + if any(c.get("name") == name for c in self.collections): + raise ValueError(f"Collection '{name}' already exists.") + new_id = max((c.get("id", 0) for c in self.collections), default=0) + 1 + self.collections.append({"name": name, "id": new_id, "clips": []}) + self.save_metadata() + + def delete_collection(self, name): + collection = next((c for c in self.collections if c.get("name") == name), None) + if collection is None: + raise ValueError(f"Collection '{name}' does not exist.") + self.collections.remove(collection) + self.save_metadata() + + def add_clip_to_collection(self, collection_name, clip_metadata): + collection = next((c for c in self.collections if c.get("name") == collection_name), None) + if collection is None: + raise ValueError(f"Collection '{collection_name}' does not exist.") + collection["clips"].append(clip_metadata) + self.save_metadata() + + def remove_clip_from_collection(self, collection_name, clip_metadata): + collection = next((c for c in self.collections if c.get("name") == collection_name), None) + if collection is None: + raise ValueError(f"Collection '{collection_name}' does not exist.") + # Remove all clips with the same file name as clip_metadata["file_name"] + in_list = any(clip.get("filename") == clip_metadata.get("filename") for clip in collection["clips"]) + if not in_list: + raise ValueError(f"Clip with filename '{clip_metadata.get('filename')}' not found in collection '{collection_name}'.") + + collection["clips"] = [ + clip for clip in collection["clips"] + if clip.get("filename") != clip_metadata.get("filename") + ] + self.save_metadata() + + def move_clip_to_collection(self, source_collection, target_collection, clip_metadata): + self.remove_clip_from_collection(source_collection, clip_metadata) + self.add_clip_to_collection(target_collection, clip_metadata) + + def edit_clip_in_collection(self, collection_name, new_clip_metadata): + collection = next((c for c in self.collections if c.get("name") == collection_name), None) + if collection is None: + raise ValueError(f"Collection '{collection_name}' does not exist.") + # Find the index of the clip with the same file name as old_clip_metadata["file_name"] + index = next((i for i, clip in enumerate(collection["clips"]) if clip.get("filename") == new_clip_metadata.get("filename")), None) + if index is None: + raise ValueError(f"Clip with filename '{new_clip_metadata.get('filename')}' not found in collection '{collection_name}'.") + + collection["clips"][index] = new_clip_metadata + self.save_metadata() + + def get_collections(self): + return list(map(lambda c: {"name": c.get("name"), "id": c.get("id")}, self.collections)) + + def get_clips_in_collection(self, collection_name): + collection = next((c for c in self.collections if c.get("name") == collection_name), None) + if collection is None: + raise ValueError(f"Collection '{collection_name}' does not exist.") + return collection["clips"] + + def reorder_clips_in_collection(self, collection_name, new_order): + collection = next((c for c in self.collections if c.get("name") == collection_name), None) + if collection is None: + raise ValueError(f"Collection '{collection_name}' does not exist.") + existing_filenames = {clip.get("filename") for clip in collection["clips"]} + new_filenames = {clip.get("filename") for clip in new_order} + + if not new_filenames.issubset(existing_filenames): + raise ValueError("New order contains clips that do not exist in the collection.") + + collection["clips"] = new_order + if not self.socket is None: + self.socket.emit('collection_updated', collection) + self.save_metadata() + + def save_metadata(self): + with open(self.metadata_file, "w") as f: + json.dump(self.collections, f, indent=4) diff --git a/audio-service/src/recordings/desktop.ini b/audio-service/src/recordings/desktop.ini index d957fd1..bb9f3d6 100644 --- a/audio-service/src/recordings/desktop.ini +++ b/audio-service/src/recordings/desktop.ini @@ -1,4 +1,4 @@ -[ViewState] -Mode= -Vid= -FolderType=Generic +[ViewState] +Mode= +Vid= +FolderType=Generic diff --git a/audio-service/src/routes/recording.py b/audio-service/src/routes/recording.py index 97cd300..0501788 100644 --- a/audio-service/src/routes/recording.py +++ b/audio-service/src/routes/recording.py @@ -1,57 +1,57 @@ - -from flask import Blueprint, request, jsonify -from audio_io import AudioIO -import os - -recording_bp = Blueprint('recording', __name__) - -@recording_bp.route('/record/start', methods=['POST']) -def start_recording(): - recorder = AudioIO() - print('HTTP: Starting audio recording') - recorder.start_recording() - return jsonify({'status': 'recording started'}) - -@recording_bp.route('/record/stop', methods=['POST']) -def stop_recording(): - recorder = AudioIO() - # print('HTTP: Stopping audio recording') - recorder.stop_recording() - return jsonify({'status': 'recording stopped'}) - -@recording_bp.route('/record/save', methods=['POST']) -def save_recording(): - recorder = AudioIO() - # print('HTTP: Saving audio recording') - saved_file = recorder.save_last_n_seconds() - return jsonify({'status': 'recording saved', 'file': saved_file}) - - -@recording_bp.route('/record/status', methods=['GET']) -def recording_status(): - recorder = AudioIO() - # print('HTTP: Checking recording status') - status = 'recording' if recorder.is_recording() else 'stopped' - return jsonify({'status': status}) - -@recording_bp.route('/record/delete', methods=['POST']) -def recording_delete(): - filename = request.json.get('filename') - try: - os.remove(filename) - return jsonify({'status': 'success'}) - except Exception as e: - return jsonify({'status': 'error', 'message': str(e)}), 400 - -@recording_bp.route('/playback/start', methods=['POST']) -def playback_start(): - print(f"Playing clip") - # print('HTTP: Starting audio playback') - clip = request.json - try: - io = AudioIO() - io.play_clip(clip) - # os.remove(filename) - return jsonify({'status': 'success'}) - except Exception as e: + +from flask import Blueprint, request, jsonify +from audio_io import AudioIO +import os + +recording_bp = Blueprint('recording', __name__) + +@recording_bp.route('/record/start', methods=['POST']) +def start_recording(): + recorder = AudioIO() + print('HTTP: Starting audio recording') + recorder.start_recording() + return jsonify({'status': 'recording started'}) + +@recording_bp.route('/record/stop', methods=['POST']) +def stop_recording(): + recorder = AudioIO() + # print('HTTP: Stopping audio recording') + recorder.stop_recording() + return jsonify({'status': 'recording stopped'}) + +@recording_bp.route('/record/save', methods=['POST']) +def save_recording(): + recorder = AudioIO() + # print('HTTP: Saving audio recording') + saved_file = recorder.save_last_n_seconds() + return jsonify({'status': 'recording saved', 'file': saved_file}) + + +@recording_bp.route('/record/status', methods=['GET']) +def recording_status(): + recorder = AudioIO() + # print('HTTP: Checking recording status') + status = 'recording' if recorder.is_recording() else 'stopped' + return jsonify({'status': status}) + +@recording_bp.route('/record/delete', methods=['POST']) +def recording_delete(): + filename = request.json.get('filename') + try: + os.remove(filename) + return jsonify({'status': 'success'}) + except Exception as e: + return jsonify({'status': 'error', 'message': str(e)}), 400 + +@recording_bp.route('/playback/start', methods=['POST']) +def playback_start(): + print(f"Playing clip") + # print('HTTP: Starting audio playback') + clip = request.json + try: + io = AudioIO() + io.play_clip(clip) + # os.remove(filename) + return jsonify({'status': 'success'}) + except Exception as e: return jsonify({'status': 'error', 'message': str(e)}), 400 \ No newline at end of file diff --git a/audio-service/src/routes/settings.py b/audio-service/src/routes/settings.py index d44d2e9..c21fa08 100644 --- a/audio-service/src/routes/settings.py +++ b/audio-service/src/routes/settings.py @@ -1,32 +1,32 @@ -from flask import Blueprint, request, jsonify -from settings import SettingsManager - -settings_bp = Blueprint('settings', __name__) - - -@settings_bp.route('/settings', methods=['GET']) -def get_all_settings(): - return jsonify({'status': 'success', 'settings': SettingsManager().get_all_settings()}) - -@settings_bp.route('/settings/', methods=['GET']) -def get_setting(name): - value = SettingsManager().get_settings(name) - if value is not None: - return jsonify({'status': 'success', 'name': name, 'value': value}) - else: - return jsonify({'status': 'error', 'message': f'Setting "{name}" not found'}), 404 - -@settings_bp.route('/settings/update', methods=['POST']) -def set_all_settings(): - settings = request.json.get('settings') - print (f"Received settings update: {settings}") - if settings is None: - return jsonify({'status': 'error', 'message': 'Settings are required'}), 400 - try: - for name, value in settings.items(): - print(f"Updating setting '{name}' to '{value}'") - SettingsManager().set_settings(name, value) - return jsonify({'status': 'success', 'settings': settings}) - except ValueError as e: - return jsonify({'status': 'error', 'message': str(e)}), 400 +from flask import Blueprint, request, jsonify +from settings import SettingsManager + +settings_bp = Blueprint('settings', __name__) + + +@settings_bp.route('/settings', methods=['GET']) +def get_all_settings(): + return jsonify({'status': 'success', 'settings': SettingsManager().get_all_settings()}) + +@settings_bp.route('/settings/', methods=['GET']) +def get_setting(name): + value = SettingsManager().get_settings(name) + if value is not None: + return jsonify({'status': 'success', 'name': name, 'value': value}) + else: + return jsonify({'status': 'error', 'message': f'Setting "{name}" not found'}), 404 + +@settings_bp.route('/settings/update', methods=['POST']) +def set_all_settings(): + settings = request.json.get('settings') + print (f"Received settings update: {settings}") + if settings is None: + return jsonify({'status': 'error', 'message': 'Settings are required'}), 400 + try: + for name, value in settings.items(): + print(f"Updating setting '{name}' to '{value}'") + SettingsManager().set_settings(name, value) + return jsonify({'status': 'success', 'settings': settings}) + except ValueError as e: + return jsonify({'status': 'error', 'message': str(e)}), 400 \ No newline at end of file diff --git a/audio-service/src/settings.json b/audio-service/src/settings.json index a767ad6..6f5468c 100644 --- a/audio-service/src/settings.json +++ b/audio-service/src/settings.json @@ -1,10 +1,10 @@ -{ - "input_device": { - "index": 0, - "name": "Microsoft Sound Mapper - Input", - "max_input_channels": 2, - "default_samplerate": 44100.0 - }, - "save_path": "C:\\Users\\mickl\\Desktop\\cliptrim-ui\\ClipTrimApp\\audio-service\\src\\recordings", - "recording_length": 15 +{ + "input_device": { + "index": 0, + "name": "Microsoft Sound Mapper - Input", + "max_input_channels": 2, + "default_samplerate": 44100.0 + }, + "save_path": "C:\\Users\\mickl\\Desktop\\cliptrim-ui\\ClipTrimApp\\audio-service\\src\\recordings", + "recording_length": 15 } \ No newline at end of file diff --git a/audio-service/src/windows_audio.py b/audio-service/src/windows_audio.py index 1724d1b..55dd493 100644 --- a/audio-service/src/windows_audio.py +++ b/audio-service/src/windows_audio.py @@ -1,112 +1,112 @@ -import sounddevice as sd -import numpy as np -import comtypes -import comtypes.client -from comtypes import CLSCTX_ALL -from pycaw.pycaw import AudioUtilities, IAudioEndpointVolume -import json - -class WindowsAudioManager: - _instance = None - - def __new__(cls, *args, **kwargs): - if cls._instance is None: - cls._instance = super().__new__(cls) - cls._instance.init() - return cls._instance - def init(self): - """ - Initialize Windows audio device and volume management. - """ - host_apis = sd.query_hostapis() - wasapi_device_indexes = None - for api in host_apis: - if api['name'].lower() == 'Windows WASAPI'.lower(): - wasapi_device_indexes = api['devices'] - break - # print(f"Host APIs: {host_apis}") - # print(f"WASAPI Device Indexes: {wasapi_device_indexes}") - wasapi_device_indexes = set(wasapi_device_indexes) if wasapi_device_indexes is not None else set() - self.devices = [dev for dev in sd.query_devices() if dev['index'] in wasapi_device_indexes] - # self.devices = sd.query_devices() - # print(f"devices: {self.devices}") - - self.default_input = sd.default.device[0] - self.default_output = sd.default.device[1] - - def list_audio_devices(self, kind='input'): - """ - List available audio devices. - - :param kind: 'input' or 'output' - :return: List of audio devices - """ - if kind == 'input': - return [ - { - 'index': dev['index'], - 'name': dev['name'], - 'channels': dev['max_input_channels'], - 'default_samplerate': dev['default_samplerate'] - } - for dev in self.devices if dev['max_input_channels'] > 0 - ] - elif kind == 'output': - return [ - { - 'index': dev['index'], - 'name': dev['name'], - 'channels': dev['max_output_channels'], - 'default_samplerate': dev['default_samplerate'] - } - for dev in self.devices if dev['max_output_channels'] > 0 - ] - def get_default_device(self, kind='input'): - """ - Get the default audio device. - - :param kind: 'input' or 'output' - :return: Default audio device information - """ - if kind == 'input': - dev = self.devices[self.default_input] - return [ - { - 'index': dev['index'], - 'name': dev['name'], - 'max_input_channels': dev['max_input_channels'], - 'default_samplerate': dev['default_samplerate'] - } - ] - - def set_default_input_device(self, device_index): - if(device_index is None): - return 0 - """ - Set the default input audio device. - - :param device_index: Index of the audio device - :return: Sample rate of the selected device - """ - sd.default.device[0] = device_index - self.default_input = device_index - - # Get the sample rate of the selected device - device_info = sd.query_devices(device_index) - return device_info['default_samplerate'] - - def set_default_output_device(self, device_index): - if(device_index is None): - return self.get_current_output_device_sample_rate() - """ - Set the default output audio device. - - :param device_index: Index of the audio device - :return: Sample rate of the selected device - """ - sd.default.device[1] = device_index - self.default_output = device_index - - # Get the sample rate of the selected device - device_info = sd.query_devices(device_index) +import sounddevice as sd +import numpy as np +import comtypes +import comtypes.client +from comtypes import CLSCTX_ALL +from pycaw.pycaw import AudioUtilities, IAudioEndpointVolume +import json + +class WindowsAudioManager: + _instance = None + + def __new__(cls, *args, **kwargs): + if cls._instance is None: + cls._instance = super().__new__(cls) + cls._instance.init() + return cls._instance + def init(self): + """ + Initialize Windows audio device and volume management. + """ + host_apis = sd.query_hostapis() + wasapi_device_indexes = None + for api in host_apis: + if api['name'].lower() == 'Windows WASAPI'.lower(): + wasapi_device_indexes = api['devices'] + break + # print(f"Host APIs: {host_apis}") + # print(f"WASAPI Device Indexes: {wasapi_device_indexes}") + wasapi_device_indexes = set(wasapi_device_indexes) if wasapi_device_indexes is not None else set() + self.devices = [dev for dev in sd.query_devices() if dev['index'] in wasapi_device_indexes] + # self.devices = sd.query_devices() + # print(f"devices: {self.devices}") + + self.default_input = sd.default.device[0] + self.default_output = sd.default.device[1] + + def list_audio_devices(self, kind='input'): + """ + List available audio devices. + + :param kind: 'input' or 'output' + :return: List of audio devices + """ + if kind == 'input': + return [ + { + 'index': dev['index'], + 'name': dev['name'], + 'channels': dev['max_input_channels'], + 'default_samplerate': dev['default_samplerate'] + } + for dev in self.devices if dev['max_input_channels'] > 0 + ] + elif kind == 'output': + return [ + { + 'index': dev['index'], + 'name': dev['name'], + 'channels': dev['max_output_channels'], + 'default_samplerate': dev['default_samplerate'] + } + for dev in self.devices if dev['max_output_channels'] > 0 + ] + def get_default_device(self, kind='input'): + """ + Get the default audio device. + + :param kind: 'input' or 'output' + :return: Default audio device information + """ + if kind == 'input': + dev = self.devices[self.default_input] + return [ + { + 'index': dev['index'], + 'name': dev['name'], + 'max_input_channels': dev['max_input_channels'], + 'default_samplerate': dev['default_samplerate'] + } + ] + + def set_default_input_device(self, device_index): + if(device_index is None): + return 0 + """ + Set the default input audio device. + + :param device_index: Index of the audio device + :return: Sample rate of the selected device + """ + sd.default.device[0] = device_index + self.default_input = device_index + + # Get the sample rate of the selected device + device_info = sd.query_devices(device_index) + return device_info['default_samplerate'] + + def set_default_output_device(self, device_index): + if(device_index is None): + return self.get_current_output_device_sample_rate() + """ + Set the default output audio device. + + :param device_index: Index of the audio device + :return: Sample rate of the selected device + """ + sd.default.device[1] = device_index + self.default_output = device_index + + # Get the sample rate of the selected device + device_info = sd.query_devices(device_index) return device_info['default_samplerate'] \ No newline at end of file diff --git a/stream_deck_plugin/ClientTest/Client.cs b/stream_deck_plugin/ClientTest/Client.cs deleted file mode 100644 index 8d95bc3..0000000 --- a/stream_deck_plugin/ClientTest/Client.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Newtonsoft.Json; -using SocketIOClient; - -namespace ClientTest -{ - public class Client - { - private SocketIO client; - public Client() - { - client = new SocketIO(new Uri("http://localhost:5010/")); - client.Options.AutoUpgrade = false; - client.Options.ConnectionTimeout = TimeSpan.FromSeconds(10); - client.Options.Reconnection = false; - client.On("test_event", ctx => - { - Console.WriteLine($"Received test event: {ctx.RawText}"); - return Task.CompletedTask; - }); - - client.On("collection_updated", ctx => - { - Console.WriteLine($"Received test event: {ctx.RawText}"); - return Task.CompletedTask; - }); - client.OnAny((string eventName, IEventContext ctx) => - { - Console.WriteLine($"got event: {eventName} \n {ctx.RawText}"); - return Task.CompletedTask; - }); - - client.ConnectAsync().Wait(); - - - - client.EmitAsync("test_event", [""]); - } - } -} diff --git a/stream_deck_plugin/ClientTest/ClientTest.csproj b/stream_deck_plugin/ClientTest/ClientTest.csproj deleted file mode 100644 index 868ab41..0000000 --- a/stream_deck_plugin/ClientTest/ClientTest.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - - Exe - net8.0 - enable - enable - - - - - - - diff --git a/stream_deck_plugin/ClientTest/Program.cs b/stream_deck_plugin/ClientTest/Program.cs deleted file mode 100644 index e0895c2..0000000 --- a/stream_deck_plugin/ClientTest/Program.cs +++ /dev/null @@ -1,10 +0,0 @@ -// See https://aka.ms/new-console-template for more information -using ClientTest; - -Console.WriteLine("Hello, World!"); -Client client = new Client(); - -while (true) -{ - await Task.Delay(1000); -} diff --git a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/ClientTest.deps.json b/stream_deck_plugin/ClientTest/bin/Debug/net8.0/ClientTest.deps.json deleted file mode 100644 index 2b0b932..0000000 --- a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/ClientTest.deps.json +++ /dev/null @@ -1,296 +0,0 @@ -{ - "runtimeTarget": { - "name": ".NETCoreApp,Version=v8.0", - "signature": "" - }, - "compilationOptions": {}, - "targets": { - ".NETCoreApp,Version=v8.0": { - "ClientTest/1.0.0": { - "dependencies": { - "SocketIOClient": "4.0.0.2" - }, - "runtime": { - "ClientTest.dll": {} - } - }, - "Microsoft.Extensions.DependencyInjection/10.0.2": { - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2" - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.DependencyInjection.dll": { - "assemblyVersion": "10.0.0.0", - "fileVersion": "10.0.225.61305" - } - } - }, - "Microsoft.Extensions.DependencyInjection.Abstractions/10.0.2": { - "runtime": { - "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { - "assemblyVersion": "10.0.0.0", - "fileVersion": "10.0.225.61305" - } - } - }, - "Microsoft.Extensions.Logging/10.0.2": { - "dependencies": { - "Microsoft.Extensions.DependencyInjection": "10.0.2", - "Microsoft.Extensions.Logging.Abstractions": "10.0.2", - "Microsoft.Extensions.Options": "10.0.2" - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.Logging.dll": { - "assemblyVersion": "10.0.0.0", - "fileVersion": "10.0.225.61305" - } - } - }, - "Microsoft.Extensions.Logging.Abstractions/10.0.2": { - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2", - "System.Diagnostics.DiagnosticSource": "10.0.2" - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": { - "assemblyVersion": "10.0.0.0", - "fileVersion": "10.0.225.61305" - } - } - }, - "Microsoft.Extensions.Options/10.0.2": { - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2", - "Microsoft.Extensions.Primitives": "10.0.2" - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.Options.dll": { - "assemblyVersion": "10.0.0.0", - "fileVersion": "10.0.225.61305" - } - } - }, - "Microsoft.Extensions.Primitives/10.0.2": { - "runtime": { - "lib/net8.0/Microsoft.Extensions.Primitives.dll": { - "assemblyVersion": "10.0.0.0", - "fileVersion": "10.0.225.61305" - } - } - }, - "Newtonsoft.Json/13.0.4": { - "runtime": { - "lib/net6.0/Newtonsoft.Json.dll": { - "assemblyVersion": "13.0.0.0", - "fileVersion": "13.0.4.30916" - } - } - }, - "SocketIOClient/4.0.0.2": { - "dependencies": { - "Microsoft.Extensions.DependencyInjection": "10.0.2", - "Microsoft.Extensions.Logging": "10.0.2", - "SocketIOClient.Common": "4.0.0", - "SocketIOClient.Serializer": "4.0.0.1", - "SocketIOClient.Serializer.NewtonsoftJson": "4.0.0.1", - "System.Text.Json": "10.0.2" - }, - "runtime": { - "lib/net8.0/SocketIOClient.dll": { - "assemblyVersion": "4.0.0.2", - "fileVersion": "4.0.0.2" - } - } - }, - "SocketIOClient.Common/4.0.0": { - "runtime": { - "lib/net8.0/SocketIOClient.Common.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "4.0.0.0" - } - } - }, - "SocketIOClient.Serializer/4.0.0.1": { - "dependencies": { - "SocketIOClient.Common": "4.0.0" - }, - "runtime": { - "lib/net8.0/SocketIOClient.Serializer.dll": { - "assemblyVersion": "4.0.0.1", - "fileVersion": "4.0.0.1" - } - } - }, - "SocketIOClient.Serializer.NewtonsoftJson/4.0.0.1": { - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2", - "Newtonsoft.Json": "13.0.4", - "SocketIOClient.Common": "4.0.0", - "SocketIOClient.Serializer": "4.0.0.1" - }, - "runtime": { - "lib/net8.0/SocketIOClient.Serializer.NewtonsoftJson.dll": { - "assemblyVersion": "4.0.0.1", - "fileVersion": "4.0.0.1" - } - } - }, - "System.Diagnostics.DiagnosticSource/10.0.2": { - "runtime": { - "lib/net8.0/System.Diagnostics.DiagnosticSource.dll": { - "assemblyVersion": "10.0.0.0", - "fileVersion": "10.0.225.61305" - } - } - }, - "System.IO.Pipelines/10.0.2": { - "runtime": { - "lib/net8.0/System.IO.Pipelines.dll": { - "assemblyVersion": "10.0.0.0", - "fileVersion": "10.0.225.61305" - } - } - }, - "System.Text.Encodings.Web/10.0.2": { - "runtime": { - "lib/net8.0/System.Text.Encodings.Web.dll": { - "assemblyVersion": "10.0.0.0", - "fileVersion": "10.0.225.61305" - } - }, - "runtimeTargets": { - "runtimes/browser/lib/net8.0/System.Text.Encodings.Web.dll": { - "rid": "browser", - "assetType": "runtime", - "assemblyVersion": "10.0.0.0", - "fileVersion": "10.0.225.61305" - } - } - }, - "System.Text.Json/10.0.2": { - "dependencies": { - "System.IO.Pipelines": "10.0.2", - "System.Text.Encodings.Web": "10.0.2" - }, - "runtime": { - "lib/net8.0/System.Text.Json.dll": { - "assemblyVersion": "10.0.0.0", - "fileVersion": "10.0.225.61305" - } - } - } - } - }, - "libraries": { - "ClientTest/1.0.0": { - "type": "project", - "serviceable": false, - "sha512": "" - }, - "Microsoft.Extensions.DependencyInjection/10.0.2": { - "type": "package", - "serviceable": true, - "sha512": "sha512-J/Zmp6fY93JbaiZ11ckWvcyxMPjD6XVwIHQXBjryTBgn7O6O20HYg9uVLFcZlNfgH78MnreE/7EH+hjfzn7VyA==", - "path": "microsoft.extensions.dependencyinjection/10.0.2", - "hashPath": "microsoft.extensions.dependencyinjection.10.0.2.nupkg.sha512" - }, - "Microsoft.Extensions.DependencyInjection.Abstractions/10.0.2": { - "type": "package", - "serviceable": true, - "sha512": "sha512-zOIurr59+kUf9vNcsUkCvKWZv+fPosUZXURZesYkJCvl0EzTc9F7maAO4Cd2WEV7ZJJ0AZrFQvuH6Npph9wdBw==", - "path": "microsoft.extensions.dependencyinjection.abstractions/10.0.2", - "hashPath": "microsoft.extensions.dependencyinjection.abstractions.10.0.2.nupkg.sha512" - }, - "Microsoft.Extensions.Logging/10.0.2": { - "type": "package", - "serviceable": true, - "sha512": "sha512-a0EWuBs6D3d7XMGroDXm+WsAi5CVVfjOJvyxurzWnuhBN9CO+1qHKcrKV1JK7H/T4ZtHIoVCOX/YyWM8K87qtw==", - "path": "microsoft.extensions.logging/10.0.2", - "hashPath": "microsoft.extensions.logging.10.0.2.nupkg.sha512" - }, - "Microsoft.Extensions.Logging.Abstractions/10.0.2": { - "type": "package", - "serviceable": true, - "sha512": "sha512-RZkez/JjpnO+MZ6efKkSynN6ZztLpw3WbxNzjLCPBd97wWj1S9ZYPWi0nmT4kWBRa6atHsdM1ydGkUr8GudyDQ==", - "path": "microsoft.extensions.logging.abstractions/10.0.2", - "hashPath": "microsoft.extensions.logging.abstractions.10.0.2.nupkg.sha512" - }, - "Microsoft.Extensions.Options/10.0.2": { - "type": "package", - "serviceable": true, - "sha512": "sha512-1De2LJjmxdqopI5AYC5dIhoZQ79AR5ayywxNF1rXrXFtKQfbQOV9+n/IsZBa7qWlr0MqoGpW8+OY2v/57udZOA==", - "path": "microsoft.extensions.options/10.0.2", - "hashPath": "microsoft.extensions.options.10.0.2.nupkg.sha512" - }, - "Microsoft.Extensions.Primitives/10.0.2": { - "type": "package", - "serviceable": true, - "sha512": "sha512-QmSiO+oLBEooGgB3i0GRXyeYRDHjllqt3k365jwfZlYWhvSHA3UL2NEVV5m8aZa041eIlblo6KMI5txvTMpTwA==", - "path": "microsoft.extensions.primitives/10.0.2", - "hashPath": "microsoft.extensions.primitives.10.0.2.nupkg.sha512" - }, - "Newtonsoft.Json/13.0.4": { - "type": "package", - "serviceable": true, - "sha512": "sha512-pdgNNMai3zv51W5aq268sujXUyx7SNdE2bj1wZcWjAQrKMFZV260lbqYop1d2GM67JI1huLRwxo9ZqnfF/lC6A==", - "path": "newtonsoft.json/13.0.4", - "hashPath": "newtonsoft.json.13.0.4.nupkg.sha512" - }, - "SocketIOClient/4.0.0.2": { - "type": "package", - "serviceable": true, - "sha512": "sha512-RYtHafPCBCoY8F9KI583t4Dw3+c45XHmPf6xLIHtQeSimDLn3rMUSnITcCCRzbI7ITkKgw1eBhICdeVEs4hjHQ==", - "path": "socketioclient/4.0.0.2", - "hashPath": "socketioclient.4.0.0.2.nupkg.sha512" - }, - "SocketIOClient.Common/4.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-7wlg0hMX5/k+fZejclVR7aKSj+Q37KCmVrKPIjZV+9z/odb11hZ4L+a0T3cV1w1jicTBWFEKvjWfWh6YKtz9Qg==", - "path": "socketioclient.common/4.0.0", - "hashPath": "socketioclient.common.4.0.0.nupkg.sha512" - }, - "SocketIOClient.Serializer/4.0.0.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-+p1xnwSkX8UQQLgqr2Em6dIATl5pR7awHj1nbaRd/9aA2iAHGgy7HsseN8eblv3NHlPtTP9Y3IFDl5JKfWSYjg==", - "path": "socketioclient.serializer/4.0.0.1", - "hashPath": "socketioclient.serializer.4.0.0.1.nupkg.sha512" - }, - "SocketIOClient.Serializer.NewtonsoftJson/4.0.0.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-D7nzYdIcNIPjGp7LW+KmJHk5I6uz3ioGb6fwxdpspuruwTTl1bTwczRuvEFcFjTHtb0Avhbcaw65jo6eAUmsYw==", - "path": "socketioclient.serializer.newtonsoftjson/4.0.0.1", - "hashPath": "socketioclient.serializer.newtonsoftjson.4.0.0.1.nupkg.sha512" - }, - "System.Diagnostics.DiagnosticSource/10.0.2": { - "type": "package", - "serviceable": true, - "sha512": "sha512-lYWBy8fKkJHaRcOuw30d67PrtVjR5754sz5Wl76s8P+vJ9FSThh9b7LIcTSODx1LY7NB3Srvg+JMnzd67qNZOw==", - "path": "system.diagnostics.diagnosticsource/10.0.2", - "hashPath": "system.diagnostics.diagnosticsource.10.0.2.nupkg.sha512" - }, - "System.IO.Pipelines/10.0.2": { - "type": "package", - "serviceable": true, - "sha512": "sha512-EqMsn9r18ABvTDxrDce4OWDhBE3y+rR23ilG7Y3BudDKrDKrLG/hkD/JmeFZbctAPxSkCjyJ/Ddwbn/g7ufRJA==", - "path": "system.io.pipelines/10.0.2", - "hashPath": "system.io.pipelines.10.0.2.nupkg.sha512" - }, - "System.Text.Encodings.Web/10.0.2": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Ro4cLT4qpRy64crfLAy3ekihtXckeXrD5eI6qb6NDSEVyHcHsmH7KgN4dbnIuiBmXIoaCslx4SynLYxag1SLSQ==", - "path": "system.text.encodings.web/10.0.2", - "hashPath": "system.text.encodings.web.10.0.2.nupkg.sha512" - }, - "System.Text.Json/10.0.2": { - "type": "package", - "serviceable": true, - "sha512": "sha512-zy8ey7I16G9neZ6uzxrnYwS7pidElzN8XarsBjGu7lE2m7afTKMEe18KbY3ZSmh/z/bR40oxjd6hlUcmOEaMHw==", - "path": "system.text.json/10.0.2", - "hashPath": "system.text.json.10.0.2.nupkg.sha512" - } - } -} \ No newline at end of file diff --git a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/ClientTest.dll b/stream_deck_plugin/ClientTest/bin/Debug/net8.0/ClientTest.dll deleted file mode 100644 index 8074558..0000000 Binary files a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/ClientTest.dll and /dev/null differ diff --git a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/ClientTest.exe b/stream_deck_plugin/ClientTest/bin/Debug/net8.0/ClientTest.exe deleted file mode 100644 index 4aea178..0000000 Binary files a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/ClientTest.exe and /dev/null differ diff --git a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/ClientTest.pdb b/stream_deck_plugin/ClientTest/bin/Debug/net8.0/ClientTest.pdb deleted file mode 100644 index 2a61a22..0000000 Binary files a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/ClientTest.pdb and /dev/null differ diff --git a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/ClientTest.runtimeconfig.json b/stream_deck_plugin/ClientTest/bin/Debug/net8.0/ClientTest.runtimeconfig.json deleted file mode 100644 index becfaea..0000000 --- a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/ClientTest.runtimeconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "runtimeOptions": { - "tfm": "net8.0", - "framework": { - "name": "Microsoft.NETCore.App", - "version": "8.0.0" - }, - "configProperties": { - "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false - } - } -} \ No newline at end of file diff --git a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll b/stream_deck_plugin/ClientTest/bin/Debug/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll deleted file mode 100644 index 7c48cd8..0000000 Binary files a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll and /dev/null differ diff --git a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/Microsoft.Extensions.DependencyInjection.dll b/stream_deck_plugin/ClientTest/bin/Debug/net8.0/Microsoft.Extensions.DependencyInjection.dll deleted file mode 100644 index 5524cb1..0000000 Binary files a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/Microsoft.Extensions.DependencyInjection.dll and /dev/null differ diff --git a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/Microsoft.Extensions.Logging.Abstractions.dll b/stream_deck_plugin/ClientTest/bin/Debug/net8.0/Microsoft.Extensions.Logging.Abstractions.dll deleted file mode 100644 index 12bf8a2..0000000 Binary files a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/Microsoft.Extensions.Logging.Abstractions.dll and /dev/null differ diff --git a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/Microsoft.Extensions.Logging.dll b/stream_deck_plugin/ClientTest/bin/Debug/net8.0/Microsoft.Extensions.Logging.dll deleted file mode 100644 index 81a7c3c..0000000 Binary files a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/Microsoft.Extensions.Logging.dll and /dev/null differ diff --git a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/Microsoft.Extensions.Options.dll b/stream_deck_plugin/ClientTest/bin/Debug/net8.0/Microsoft.Extensions.Options.dll deleted file mode 100644 index fd101a7..0000000 Binary files a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/Microsoft.Extensions.Options.dll and /dev/null differ diff --git a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/Microsoft.Extensions.Primitives.dll b/stream_deck_plugin/ClientTest/bin/Debug/net8.0/Microsoft.Extensions.Primitives.dll deleted file mode 100644 index b3ded80..0000000 Binary files a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/Microsoft.Extensions.Primitives.dll and /dev/null differ diff --git a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/Newtonsoft.Json.dll b/stream_deck_plugin/ClientTest/bin/Debug/net8.0/Newtonsoft.Json.dll deleted file mode 100644 index 5813d8c..0000000 Binary files a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/Newtonsoft.Json.dll and /dev/null differ diff --git a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/SocketIOClient.Common.dll b/stream_deck_plugin/ClientTest/bin/Debug/net8.0/SocketIOClient.Common.dll deleted file mode 100644 index d958c7d..0000000 Binary files a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/SocketIOClient.Common.dll and /dev/null differ diff --git a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/SocketIOClient.Serializer.NewtonsoftJson.dll b/stream_deck_plugin/ClientTest/bin/Debug/net8.0/SocketIOClient.Serializer.NewtonsoftJson.dll deleted file mode 100644 index e894824..0000000 Binary files a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/SocketIOClient.Serializer.NewtonsoftJson.dll and /dev/null differ diff --git a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/SocketIOClient.Serializer.dll b/stream_deck_plugin/ClientTest/bin/Debug/net8.0/SocketIOClient.Serializer.dll deleted file mode 100644 index 04185db..0000000 Binary files a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/SocketIOClient.Serializer.dll and /dev/null differ diff --git a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/SocketIOClient.dll b/stream_deck_plugin/ClientTest/bin/Debug/net8.0/SocketIOClient.dll deleted file mode 100644 index 1c981de..0000000 Binary files a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/SocketIOClient.dll and /dev/null differ diff --git a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/System.Diagnostics.DiagnosticSource.dll b/stream_deck_plugin/ClientTest/bin/Debug/net8.0/System.Diagnostics.DiagnosticSource.dll deleted file mode 100644 index ef5af86..0000000 Binary files a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/System.Diagnostics.DiagnosticSource.dll and /dev/null differ diff --git a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/System.IO.Pipelines.dll b/stream_deck_plugin/ClientTest/bin/Debug/net8.0/System.IO.Pipelines.dll deleted file mode 100644 index ba5d482..0000000 Binary files a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/System.IO.Pipelines.dll and /dev/null differ diff --git a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/System.Text.Encodings.Web.dll b/stream_deck_plugin/ClientTest/bin/Debug/net8.0/System.Text.Encodings.Web.dll deleted file mode 100644 index af14793..0000000 Binary files a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/System.Text.Encodings.Web.dll and /dev/null differ diff --git a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/System.Text.Json.dll b/stream_deck_plugin/ClientTest/bin/Debug/net8.0/System.Text.Json.dll deleted file mode 100644 index 64e4277..0000000 Binary files a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/System.Text.Json.dll and /dev/null differ diff --git a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/runtimes/browser/lib/net8.0/System.Text.Encodings.Web.dll b/stream_deck_plugin/ClientTest/bin/Debug/net8.0/runtimes/browser/lib/net8.0/System.Text.Encodings.Web.dll deleted file mode 100644 index 216bd5f..0000000 Binary files a/stream_deck_plugin/ClientTest/bin/Debug/net8.0/runtimes/browser/lib/net8.0/System.Text.Encodings.Web.dll and /dev/null differ diff --git a/stream_deck_plugin/ClientTest/obj/ClientTest.csproj.nuget.dgspec.json b/stream_deck_plugin/ClientTest/obj/ClientTest.csproj.nuget.dgspec.json deleted file mode 100644 index 5596637..0000000 --- a/stream_deck_plugin/ClientTest/obj/ClientTest.csproj.nuget.dgspec.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "format": 1, - "restore": { - "C:\\Users\\mickl\\Desktop\\cliptrim-ui\\ClipTrimApp\\stream_deck_plugin\\ClientTest\\ClientTest.csproj": {} - }, - "projects": { - "C:\\Users\\mickl\\Desktop\\cliptrim-ui\\ClipTrimApp\\stream_deck_plugin\\ClientTest\\ClientTest.csproj": { - "version": "1.0.0", - "restore": { - "projectUniqueName": "C:\\Users\\mickl\\Desktop\\cliptrim-ui\\ClipTrimApp\\stream_deck_plugin\\ClientTest\\ClientTest.csproj", - "projectName": "ClientTest", - "projectPath": "C:\\Users\\mickl\\Desktop\\cliptrim-ui\\ClipTrimApp\\stream_deck_plugin\\ClientTest\\ClientTest.csproj", - "packagesPath": "C:\\Users\\mickl\\.nuget\\packages\\", - "outputPath": "C:\\Users\\mickl\\Desktop\\cliptrim-ui\\ClipTrimApp\\stream_deck_plugin\\ClientTest\\obj\\", - "projectStyle": "PackageReference", - "fallbackFolders": [ - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" - ], - "configFilePaths": [ - "C:\\Users\\mickl\\AppData\\Roaming\\NuGet\\NuGet.Config", - "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", - "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" - ], - "originalTargetFrameworks": [ - "net8.0" - ], - "sources": { - "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, - "C:\\Program Files\\dotnet\\library-packs": {}, - "https://api.nuget.org/v3/index.json": {}, - "https://www.nuget.org/api/v2": {}, - "https://www.nuget.org/api/v2": {} - }, - "frameworks": { - "net8.0": { - "targetAlias": "net8.0", - "projectReferences": {} - } - }, - "warningProperties": { - "warnAsError": [ - "NU1605" - ] - }, - "restoreAuditProperties": { - "enableAudit": "true", - "auditLevel": "low", - "auditMode": "direct" - }, - "SdkAnalysisLevel": "9.0.300" - }, - "frameworks": { - "net8.0": { - "targetAlias": "net8.0", - "dependencies": { - "SocketIOClient": { - "target": "Package", - "version": "[4.0.0.2, )" - } - }, - "imports": [ - "net461", - "net462", - "net47", - "net471", - "net472", - "net48", - "net481" - ], - "assetTargetFallback": true, - "warn": true, - "frameworkReferences": { - "Microsoft.NETCore.App": { - "privateAssets": "all" - } - }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.307/PortableRuntimeIdentifierGraph.json" - } - } - } - } -} \ No newline at end of file diff --git a/stream_deck_plugin/ClientTest/obj/ClientTest.csproj.nuget.g.props b/stream_deck_plugin/ClientTest/obj/ClientTest.csproj.nuget.g.props deleted file mode 100644 index 0fd8b71..0000000 --- a/stream_deck_plugin/ClientTest/obj/ClientTest.csproj.nuget.g.props +++ /dev/null @@ -1,16 +0,0 @@ - - - - True - NuGet - $(MSBuildThisFileDirectory)project.assets.json - $(UserProfile)\.nuget\packages\ - C:\Users\mickl\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages - PackageReference - 6.14.1 - - - - - - \ No newline at end of file diff --git a/stream_deck_plugin/ClientTest/obj/ClientTest.csproj.nuget.g.targets b/stream_deck_plugin/ClientTest/obj/ClientTest.csproj.nuget.g.targets deleted file mode 100644 index 934efb7..0000000 --- a/stream_deck_plugin/ClientTest/obj/ClientTest.csproj.nuget.g.targets +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/stream_deck_plugin/ClientTest/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs b/stream_deck_plugin/ClientTest/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs deleted file mode 100644 index 2217181..0000000 --- a/stream_deck_plugin/ClientTest/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs +++ /dev/null @@ -1,4 +0,0 @@ -// -using System; -using System.Reflection; -[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")] diff --git a/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.AssemblyInfo.cs b/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.AssemblyInfo.cs deleted file mode 100644 index 64e6527..0000000 --- a/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.AssemblyInfo.cs +++ /dev/null @@ -1,23 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -using System; -using System.Reflection; - -[assembly: System.Reflection.AssemblyCompanyAttribute("ClientTest")] -[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] -[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+8fda2a03af52202a841719b00041c255fbbd040b")] -[assembly: System.Reflection.AssemblyProductAttribute("ClientTest")] -[assembly: System.Reflection.AssemblyTitleAttribute("ClientTest")] -[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] - -// Generated by the MSBuild WriteCodeFragment class. - diff --git a/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.AssemblyInfoInputs.cache b/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.AssemblyInfoInputs.cache deleted file mode 100644 index f2a0d2d..0000000 --- a/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.AssemblyInfoInputs.cache +++ /dev/null @@ -1 +0,0 @@ -b89f91df1271abd7a390167ccc0cd2ebdef3dc366236d6606664bbd406eb38f9 diff --git a/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.GeneratedMSBuildEditorConfig.editorconfig b/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.GeneratedMSBuildEditorConfig.editorconfig deleted file mode 100644 index 912985a..0000000 --- a/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.GeneratedMSBuildEditorConfig.editorconfig +++ /dev/null @@ -1,15 +0,0 @@ -is_global = true -build_property.TargetFramework = net8.0 -build_property.TargetPlatformMinVersion = -build_property.UsingMicrosoftNETSdkWeb = -build_property.ProjectTypeGuids = -build_property.InvariantGlobalization = -build_property.PlatformNeutralAssembly = -build_property.EnforceExtendedAnalyzerRules = -build_property._SupportedPlatformList = Linux,macOS,Windows -build_property.RootNamespace = ClientTest -build_property.ProjectDir = C:\Users\mickl\Desktop\cliptrim-ui\ClipTrimApp\stream_deck_plugin\ClientTest\ -build_property.EnableComHosting = -build_property.EnableGeneratedComInterfaceComImportInterop = -build_property.EffectiveAnalysisLevelStyle = 8.0 -build_property.EnableCodeStyleSeverity = diff --git a/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.GlobalUsings.g.cs b/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.GlobalUsings.g.cs deleted file mode 100644 index 8578f3d..0000000 --- a/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.GlobalUsings.g.cs +++ /dev/null @@ -1,8 +0,0 @@ -// -global using global::System; -global using global::System.Collections.Generic; -global using global::System.IO; -global using global::System.Linq; -global using global::System.Net.Http; -global using global::System.Threading; -global using global::System.Threading.Tasks; diff --git a/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.assets.cache b/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.assets.cache deleted file mode 100644 index 973b7ac..0000000 Binary files a/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.assets.cache and /dev/null differ diff --git a/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.csproj.AssemblyReference.cache b/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.csproj.AssemblyReference.cache deleted file mode 100644 index 1c46003..0000000 Binary files a/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.csproj.AssemblyReference.cache and /dev/null differ diff --git a/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.csproj.BuildWithSkipAnalyzers b/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.csproj.BuildWithSkipAnalyzers deleted file mode 100644 index e69de29..0000000 diff --git a/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.csproj.CoreCompileInputs.cache b/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.csproj.CoreCompileInputs.cache deleted file mode 100644 index 3cf3820..0000000 --- a/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.csproj.CoreCompileInputs.cache +++ /dev/null @@ -1 +0,0 @@ -1f0c38acb4d7bd17394bf7939e4ce787d1f5925df1475233861d85368fa71fee diff --git a/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.csproj.FileListAbsolute.txt b/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.csproj.FileListAbsolute.txt deleted file mode 100644 index 0cb968d..0000000 --- a/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.csproj.FileListAbsolute.txt +++ /dev/null @@ -1,32 +0,0 @@ -C:\Users\mickl\Desktop\cliptrim-ui\ClipTrimApp\stream_deck_plugin\ClientTest\bin\Debug\net8.0\ClientTest.exe -C:\Users\mickl\Desktop\cliptrim-ui\ClipTrimApp\stream_deck_plugin\ClientTest\bin\Debug\net8.0\ClientTest.deps.json -C:\Users\mickl\Desktop\cliptrim-ui\ClipTrimApp\stream_deck_plugin\ClientTest\bin\Debug\net8.0\ClientTest.runtimeconfig.json -C:\Users\mickl\Desktop\cliptrim-ui\ClipTrimApp\stream_deck_plugin\ClientTest\bin\Debug\net8.0\ClientTest.dll -C:\Users\mickl\Desktop\cliptrim-ui\ClipTrimApp\stream_deck_plugin\ClientTest\bin\Debug\net8.0\ClientTest.pdb -C:\Users\mickl\Desktop\cliptrim-ui\ClipTrimApp\stream_deck_plugin\ClientTest\bin\Debug\net8.0\Microsoft.Extensions.DependencyInjection.dll -C:\Users\mickl\Desktop\cliptrim-ui\ClipTrimApp\stream_deck_plugin\ClientTest\bin\Debug\net8.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll -C:\Users\mickl\Desktop\cliptrim-ui\ClipTrimApp\stream_deck_plugin\ClientTest\bin\Debug\net8.0\Microsoft.Extensions.Logging.dll -C:\Users\mickl\Desktop\cliptrim-ui\ClipTrimApp\stream_deck_plugin\ClientTest\bin\Debug\net8.0\Microsoft.Extensions.Logging.Abstractions.dll -C:\Users\mickl\Desktop\cliptrim-ui\ClipTrimApp\stream_deck_plugin\ClientTest\bin\Debug\net8.0\Microsoft.Extensions.Options.dll -C:\Users\mickl\Desktop\cliptrim-ui\ClipTrimApp\stream_deck_plugin\ClientTest\bin\Debug\net8.0\Microsoft.Extensions.Primitives.dll -C:\Users\mickl\Desktop\cliptrim-ui\ClipTrimApp\stream_deck_plugin\ClientTest\bin\Debug\net8.0\Newtonsoft.Json.dll -C:\Users\mickl\Desktop\cliptrim-ui\ClipTrimApp\stream_deck_plugin\ClientTest\bin\Debug\net8.0\SocketIOClient.dll -C:\Users\mickl\Desktop\cliptrim-ui\ClipTrimApp\stream_deck_plugin\ClientTest\bin\Debug\net8.0\SocketIOClient.Common.dll -C:\Users\mickl\Desktop\cliptrim-ui\ClipTrimApp\stream_deck_plugin\ClientTest\bin\Debug\net8.0\SocketIOClient.Serializer.dll -C:\Users\mickl\Desktop\cliptrim-ui\ClipTrimApp\stream_deck_plugin\ClientTest\bin\Debug\net8.0\SocketIOClient.Serializer.NewtonsoftJson.dll -C:\Users\mickl\Desktop\cliptrim-ui\ClipTrimApp\stream_deck_plugin\ClientTest\bin\Debug\net8.0\System.Diagnostics.DiagnosticSource.dll -C:\Users\mickl\Desktop\cliptrim-ui\ClipTrimApp\stream_deck_plugin\ClientTest\bin\Debug\net8.0\System.IO.Pipelines.dll -C:\Users\mickl\Desktop\cliptrim-ui\ClipTrimApp\stream_deck_plugin\ClientTest\bin\Debug\net8.0\System.Text.Encodings.Web.dll -C:\Users\mickl\Desktop\cliptrim-ui\ClipTrimApp\stream_deck_plugin\ClientTest\bin\Debug\net8.0\System.Text.Json.dll -C:\Users\mickl\Desktop\cliptrim-ui\ClipTrimApp\stream_deck_plugin\ClientTest\bin\Debug\net8.0\runtimes\browser\lib\net8.0\System.Text.Encodings.Web.dll -C:\Users\mickl\Desktop\cliptrim-ui\ClipTrimApp\stream_deck_plugin\ClientTest\obj\Debug\net8.0\ClientTest.csproj.AssemblyReference.cache -C:\Users\mickl\Desktop\cliptrim-ui\ClipTrimApp\stream_deck_plugin\ClientTest\obj\Debug\net8.0\ClientTest.GeneratedMSBuildEditorConfig.editorconfig -C:\Users\mickl\Desktop\cliptrim-ui\ClipTrimApp\stream_deck_plugin\ClientTest\obj\Debug\net8.0\ClientTest.AssemblyInfoInputs.cache -C:\Users\mickl\Desktop\cliptrim-ui\ClipTrimApp\stream_deck_plugin\ClientTest\obj\Debug\net8.0\ClientTest.AssemblyInfo.cs -C:\Users\mickl\Desktop\cliptrim-ui\ClipTrimApp\stream_deck_plugin\ClientTest\obj\Debug\net8.0\ClientTest.csproj.CoreCompileInputs.cache -C:\Users\mickl\Desktop\cliptrim-ui\ClipTrimApp\stream_deck_plugin\ClientTest\obj\Debug\net8.0\ClientTest.csproj.Up2Date -C:\Users\mickl\Desktop\cliptrim-ui\ClipTrimApp\stream_deck_plugin\ClientTest\obj\Debug\net8.0\ClientTest.dll -C:\Users\mickl\Desktop\cliptrim-ui\ClipTrimApp\stream_deck_plugin\ClientTest\obj\Debug\net8.0\refint\ClientTest.dll -C:\Users\mickl\Desktop\cliptrim-ui\ClipTrimApp\stream_deck_plugin\ClientTest\obj\Debug\net8.0\ClientTest.pdb -C:\Users\mickl\Desktop\cliptrim-ui\ClipTrimApp\stream_deck_plugin\ClientTest\obj\Debug\net8.0\ClientTest.genruntimeconfig.cache -C:\Users\mickl\Desktop\cliptrim-ui\ClipTrimApp\stream_deck_plugin\ClientTest\obj\Debug\net8.0\ref\ClientTest.dll diff --git a/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.csproj.Up2Date b/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.csproj.Up2Date deleted file mode 100644 index e69de29..0000000 diff --git a/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.dll b/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.dll deleted file mode 100644 index 8074558..0000000 Binary files a/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.dll and /dev/null differ diff --git a/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.genruntimeconfig.cache b/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.genruntimeconfig.cache deleted file mode 100644 index 03ba1e1..0000000 --- a/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.genruntimeconfig.cache +++ /dev/null @@ -1 +0,0 @@ -40ec4719d56f65f4b43aa0dee95fda9a8b0de79bb640acda719765913ae5eca1 diff --git a/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.pdb b/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.pdb deleted file mode 100644 index 2a61a22..0000000 Binary files a/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ClientTest.pdb and /dev/null differ diff --git a/stream_deck_plugin/ClientTest/obj/Debug/net8.0/apphost.exe b/stream_deck_plugin/ClientTest/obj/Debug/net8.0/apphost.exe deleted file mode 100644 index 4aea178..0000000 Binary files a/stream_deck_plugin/ClientTest/obj/Debug/net8.0/apphost.exe and /dev/null differ diff --git a/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ref/ClientTest.dll b/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ref/ClientTest.dll deleted file mode 100644 index 76f703a..0000000 Binary files a/stream_deck_plugin/ClientTest/obj/Debug/net8.0/ref/ClientTest.dll and /dev/null differ diff --git a/stream_deck_plugin/ClientTest/obj/Debug/net8.0/refint/ClientTest.dll b/stream_deck_plugin/ClientTest/obj/Debug/net8.0/refint/ClientTest.dll deleted file mode 100644 index 76f703a..0000000 Binary files a/stream_deck_plugin/ClientTest/obj/Debug/net8.0/refint/ClientTest.dll and /dev/null differ diff --git a/stream_deck_plugin/ClientTest/obj/project.assets.json b/stream_deck_plugin/ClientTest/obj/project.assets.json deleted file mode 100644 index 8bde96a..0000000 --- a/stream_deck_plugin/ClientTest/obj/project.assets.json +++ /dev/null @@ -1,834 +0,0 @@ -{ - "version": 3, - "targets": { - "net8.0": { - "Microsoft.Extensions.DependencyInjection/10.0.2": { - "type": "package", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2" - }, - "compile": { - "lib/net8.0/Microsoft.Extensions.DependencyInjection.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.DependencyInjection.dll": { - "related": ".xml" - } - }, - "build": { - "buildTransitive/net8.0/_._": {} - } - }, - "Microsoft.Extensions.DependencyInjection.Abstractions/10.0.2": { - "type": "package", - "compile": { - "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { - "related": ".xml" - } - }, - "build": { - "buildTransitive/net8.0/_._": {} - } - }, - "Microsoft.Extensions.Logging/10.0.2": { - "type": "package", - "dependencies": { - "Microsoft.Extensions.DependencyInjection": "10.0.2", - "Microsoft.Extensions.Logging.Abstractions": "10.0.2", - "Microsoft.Extensions.Options": "10.0.2" - }, - "compile": { - "lib/net8.0/Microsoft.Extensions.Logging.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.Logging.dll": { - "related": ".xml" - } - }, - "build": { - "buildTransitive/net8.0/_._": {} - } - }, - "Microsoft.Extensions.Logging.Abstractions/10.0.2": { - "type": "package", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2", - "System.Diagnostics.DiagnosticSource": "10.0.2" - }, - "compile": { - "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": { - "related": ".xml" - } - }, - "build": { - "buildTransitive/net8.0/Microsoft.Extensions.Logging.Abstractions.targets": {} - } - }, - "Microsoft.Extensions.Options/10.0.2": { - "type": "package", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2", - "Microsoft.Extensions.Primitives": "10.0.2" - }, - "compile": { - "lib/net8.0/Microsoft.Extensions.Options.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.Options.dll": { - "related": ".xml" - } - }, - "build": { - "buildTransitive/net8.0/Microsoft.Extensions.Options.targets": {} - } - }, - "Microsoft.Extensions.Primitives/10.0.2": { - "type": "package", - "compile": { - "lib/net8.0/Microsoft.Extensions.Primitives.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.Primitives.dll": { - "related": ".xml" - } - }, - "build": { - "buildTransitive/net8.0/_._": {} - } - }, - "Newtonsoft.Json/13.0.4": { - "type": "package", - "compile": { - "lib/net6.0/Newtonsoft.Json.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/net6.0/Newtonsoft.Json.dll": { - "related": ".xml" - } - } - }, - "SocketIOClient/4.0.0.2": { - "type": "package", - "dependencies": { - "Microsoft.Extensions.DependencyInjection": "10.0.2", - "Microsoft.Extensions.Logging": "10.0.2", - "SocketIOClient.Common": "4.0.0", - "SocketIOClient.Serializer": "4.0.0.1", - "SocketIOClient.Serializer.NewtonsoftJson": "4.0.0.1", - "System.Text.Json": "10.0.2" - }, - "compile": { - "lib/net8.0/SocketIOClient.dll": {} - }, - "runtime": { - "lib/net8.0/SocketIOClient.dll": {} - } - }, - "SocketIOClient.Common/4.0.0": { - "type": "package", - "compile": { - "lib/net8.0/SocketIOClient.Common.dll": {} - }, - "runtime": { - "lib/net8.0/SocketIOClient.Common.dll": {} - } - }, - "SocketIOClient.Serializer/4.0.0.1": { - "type": "package", - "dependencies": { - "SocketIOClient.Common": "4.0.0" - }, - "compile": { - "lib/net8.0/SocketIOClient.Serializer.dll": {} - }, - "runtime": { - "lib/net8.0/SocketIOClient.Serializer.dll": {} - } - }, - "SocketIOClient.Serializer.NewtonsoftJson/4.0.0.1": { - "type": "package", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2", - "Newtonsoft.Json": "13.0.4", - "SocketIOClient.Common": "4.0.0", - "SocketIOClient.Serializer": "4.0.0.1" - }, - "compile": { - "lib/net8.0/SocketIOClient.Serializer.NewtonsoftJson.dll": {} - }, - "runtime": { - "lib/net8.0/SocketIOClient.Serializer.NewtonsoftJson.dll": {} - } - }, - "System.Diagnostics.DiagnosticSource/10.0.2": { - "type": "package", - "compile": { - "lib/net8.0/System.Diagnostics.DiagnosticSource.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/net8.0/System.Diagnostics.DiagnosticSource.dll": { - "related": ".xml" - } - }, - "build": { - "buildTransitive/net8.0/_._": {} - } - }, - "System.IO.Pipelines/10.0.2": { - "type": "package", - "compile": { - "lib/net8.0/System.IO.Pipelines.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/net8.0/System.IO.Pipelines.dll": { - "related": ".xml" - } - }, - "build": { - "buildTransitive/net8.0/_._": {} - } - }, - "System.Text.Encodings.Web/10.0.2": { - "type": "package", - "compile": { - "lib/net8.0/System.Text.Encodings.Web.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/net8.0/System.Text.Encodings.Web.dll": { - "related": ".xml" - } - }, - "build": { - "buildTransitive/net8.0/_._": {} - }, - "runtimeTargets": { - "runtimes/browser/lib/net8.0/System.Text.Encodings.Web.dll": { - "assetType": "runtime", - "rid": "browser" - } - } - }, - "System.Text.Json/10.0.2": { - "type": "package", - "dependencies": { - "System.IO.Pipelines": "10.0.2", - "System.Text.Encodings.Web": "10.0.2" - }, - "compile": { - "lib/net8.0/System.Text.Json.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/net8.0/System.Text.Json.dll": { - "related": ".xml" - } - }, - "build": { - "buildTransitive/net8.0/System.Text.Json.targets": {} - } - } - } - }, - "libraries": { - "Microsoft.Extensions.DependencyInjection/10.0.2": { - "sha512": "J/Zmp6fY93JbaiZ11ckWvcyxMPjD6XVwIHQXBjryTBgn7O6O20HYg9uVLFcZlNfgH78MnreE/7EH+hjfzn7VyA==", - "type": "package", - "path": "microsoft.extensions.dependencyinjection/10.0.2", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "Icon.png", - "PACKAGE.md", - "THIRD-PARTY-NOTICES.TXT", - "buildTransitive/net461/Microsoft.Extensions.DependencyInjection.targets", - "buildTransitive/net462/_._", - "buildTransitive/net8.0/_._", - "buildTransitive/netcoreapp2.0/Microsoft.Extensions.DependencyInjection.targets", - "lib/net10.0/Microsoft.Extensions.DependencyInjection.dll", - "lib/net10.0/Microsoft.Extensions.DependencyInjection.xml", - "lib/net462/Microsoft.Extensions.DependencyInjection.dll", - "lib/net462/Microsoft.Extensions.DependencyInjection.xml", - "lib/net8.0/Microsoft.Extensions.DependencyInjection.dll", - "lib/net8.0/Microsoft.Extensions.DependencyInjection.xml", - "lib/net9.0/Microsoft.Extensions.DependencyInjection.dll", - "lib/net9.0/Microsoft.Extensions.DependencyInjection.xml", - "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.dll", - "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.xml", - "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.dll", - "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.xml", - "microsoft.extensions.dependencyinjection.10.0.2.nupkg.sha512", - "microsoft.extensions.dependencyinjection.nuspec", - "useSharedDesignerContext.txt" - ] - }, - "Microsoft.Extensions.DependencyInjection.Abstractions/10.0.2": { - "sha512": "zOIurr59+kUf9vNcsUkCvKWZv+fPosUZXURZesYkJCvl0EzTc9F7maAO4Cd2WEV7ZJJ0AZrFQvuH6Npph9wdBw==", - "type": "package", - "path": "microsoft.extensions.dependencyinjection.abstractions/10.0.2", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "Icon.png", - "PACKAGE.md", - "THIRD-PARTY-NOTICES.TXT", - "buildTransitive/net461/Microsoft.Extensions.DependencyInjection.Abstractions.targets", - "buildTransitive/net462/_._", - "buildTransitive/net8.0/_._", - "buildTransitive/netcoreapp2.0/Microsoft.Extensions.DependencyInjection.Abstractions.targets", - "lib/net10.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", - "lib/net10.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", - "lib/net462/Microsoft.Extensions.DependencyInjection.Abstractions.dll", - "lib/net462/Microsoft.Extensions.DependencyInjection.Abstractions.xml", - "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", - "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", - "lib/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", - "lib/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", - "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", - "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", - "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.dll", - "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.xml", - "microsoft.extensions.dependencyinjection.abstractions.10.0.2.nupkg.sha512", - "microsoft.extensions.dependencyinjection.abstractions.nuspec", - "useSharedDesignerContext.txt" - ] - }, - "Microsoft.Extensions.Logging/10.0.2": { - "sha512": "a0EWuBs6D3d7XMGroDXm+WsAi5CVVfjOJvyxurzWnuhBN9CO+1qHKcrKV1JK7H/T4ZtHIoVCOX/YyWM8K87qtw==", - "type": "package", - "path": "microsoft.extensions.logging/10.0.2", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "Icon.png", - "PACKAGE.md", - "THIRD-PARTY-NOTICES.TXT", - "buildTransitive/net461/Microsoft.Extensions.Logging.targets", - "buildTransitive/net462/_._", - "buildTransitive/net8.0/_._", - "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Logging.targets", - "lib/net10.0/Microsoft.Extensions.Logging.dll", - "lib/net10.0/Microsoft.Extensions.Logging.xml", - "lib/net462/Microsoft.Extensions.Logging.dll", - "lib/net462/Microsoft.Extensions.Logging.xml", - "lib/net8.0/Microsoft.Extensions.Logging.dll", - "lib/net8.0/Microsoft.Extensions.Logging.xml", - "lib/net9.0/Microsoft.Extensions.Logging.dll", - "lib/net9.0/Microsoft.Extensions.Logging.xml", - "lib/netstandard2.0/Microsoft.Extensions.Logging.dll", - "lib/netstandard2.0/Microsoft.Extensions.Logging.xml", - "lib/netstandard2.1/Microsoft.Extensions.Logging.dll", - "lib/netstandard2.1/Microsoft.Extensions.Logging.xml", - "microsoft.extensions.logging.10.0.2.nupkg.sha512", - "microsoft.extensions.logging.nuspec", - "useSharedDesignerContext.txt" - ] - }, - "Microsoft.Extensions.Logging.Abstractions/10.0.2": { - "sha512": "RZkez/JjpnO+MZ6efKkSynN6ZztLpw3WbxNzjLCPBd97wWj1S9ZYPWi0nmT4kWBRa6atHsdM1ydGkUr8GudyDQ==", - "type": "package", - "path": "microsoft.extensions.logging.abstractions/10.0.2", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "Icon.png", - "PACKAGE.md", - "THIRD-PARTY-NOTICES.TXT", - "analyzers/dotnet/roslyn3.11/cs/Microsoft.Extensions.Logging.Generators.dll", - "analyzers/dotnet/roslyn3.11/cs/cs/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/de/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/es/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/fr/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/it/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/ja/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/ko/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/pl/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/pt-BR/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/ru/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/tr/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/zh-Hans/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/Microsoft.Extensions.Logging.Generators.dll", - "analyzers/dotnet/roslyn4.0/cs/cs/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/de/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/es/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/fr/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/it/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/ja/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/ko/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/pl/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/pt-BR/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/ru/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/tr/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/zh-Hans/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/Microsoft.Extensions.Logging.Generators.dll", - "analyzers/dotnet/roslyn4.4/cs/cs/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/de/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/es/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/fr/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/it/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/ja/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/ko/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/pl/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/pt-BR/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/ru/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/tr/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/zh-Hans/Microsoft.Extensions.Logging.Generators.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll", - "buildTransitive/net461/Microsoft.Extensions.Logging.Abstractions.targets", - "buildTransitive/net462/Microsoft.Extensions.Logging.Abstractions.targets", - "buildTransitive/net8.0/Microsoft.Extensions.Logging.Abstractions.targets", - "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Logging.Abstractions.targets", - "buildTransitive/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.targets", - "lib/net10.0/Microsoft.Extensions.Logging.Abstractions.dll", - "lib/net10.0/Microsoft.Extensions.Logging.Abstractions.xml", - "lib/net462/Microsoft.Extensions.Logging.Abstractions.dll", - "lib/net462/Microsoft.Extensions.Logging.Abstractions.xml", - "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll", - "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.xml", - "lib/net9.0/Microsoft.Extensions.Logging.Abstractions.dll", - "lib/net9.0/Microsoft.Extensions.Logging.Abstractions.xml", - "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll", - "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.xml", - "microsoft.extensions.logging.abstractions.10.0.2.nupkg.sha512", - "microsoft.extensions.logging.abstractions.nuspec", - "useSharedDesignerContext.txt" - ] - }, - "Microsoft.Extensions.Options/10.0.2": { - "sha512": "1De2LJjmxdqopI5AYC5dIhoZQ79AR5ayywxNF1rXrXFtKQfbQOV9+n/IsZBa7qWlr0MqoGpW8+OY2v/57udZOA==", - "type": "package", - "path": "microsoft.extensions.options/10.0.2", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "Icon.png", - "PACKAGE.md", - "THIRD-PARTY-NOTICES.TXT", - "analyzers/dotnet/roslyn4.4/cs/Microsoft.Extensions.Options.SourceGeneration.dll", - "analyzers/dotnet/roslyn4.4/cs/cs/Microsoft.Extensions.Options.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/de/Microsoft.Extensions.Options.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/es/Microsoft.Extensions.Options.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/fr/Microsoft.Extensions.Options.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/it/Microsoft.Extensions.Options.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/ja/Microsoft.Extensions.Options.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/ko/Microsoft.Extensions.Options.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/pl/Microsoft.Extensions.Options.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/pt-BR/Microsoft.Extensions.Options.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/ru/Microsoft.Extensions.Options.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/tr/Microsoft.Extensions.Options.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/zh-Hans/Microsoft.Extensions.Options.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/zh-Hant/Microsoft.Extensions.Options.SourceGeneration.resources.dll", - "buildTransitive/net461/Microsoft.Extensions.Options.targets", - "buildTransitive/net462/Microsoft.Extensions.Options.targets", - "buildTransitive/net8.0/Microsoft.Extensions.Options.targets", - "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Options.targets", - "buildTransitive/netstandard2.0/Microsoft.Extensions.Options.targets", - "lib/net10.0/Microsoft.Extensions.Options.dll", - "lib/net10.0/Microsoft.Extensions.Options.xml", - "lib/net462/Microsoft.Extensions.Options.dll", - "lib/net462/Microsoft.Extensions.Options.xml", - "lib/net8.0/Microsoft.Extensions.Options.dll", - "lib/net8.0/Microsoft.Extensions.Options.xml", - "lib/net9.0/Microsoft.Extensions.Options.dll", - "lib/net9.0/Microsoft.Extensions.Options.xml", - "lib/netstandard2.0/Microsoft.Extensions.Options.dll", - "lib/netstandard2.0/Microsoft.Extensions.Options.xml", - "lib/netstandard2.1/Microsoft.Extensions.Options.dll", - "lib/netstandard2.1/Microsoft.Extensions.Options.xml", - "microsoft.extensions.options.10.0.2.nupkg.sha512", - "microsoft.extensions.options.nuspec", - "useSharedDesignerContext.txt" - ] - }, - "Microsoft.Extensions.Primitives/10.0.2": { - "sha512": "QmSiO+oLBEooGgB3i0GRXyeYRDHjllqt3k365jwfZlYWhvSHA3UL2NEVV5m8aZa041eIlblo6KMI5txvTMpTwA==", - "type": "package", - "path": "microsoft.extensions.primitives/10.0.2", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "Icon.png", - "PACKAGE.md", - "THIRD-PARTY-NOTICES.TXT", - "buildTransitive/net461/Microsoft.Extensions.Primitives.targets", - "buildTransitive/net462/_._", - "buildTransitive/net8.0/_._", - "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Primitives.targets", - "lib/net10.0/Microsoft.Extensions.Primitives.dll", - "lib/net10.0/Microsoft.Extensions.Primitives.xml", - "lib/net462/Microsoft.Extensions.Primitives.dll", - "lib/net462/Microsoft.Extensions.Primitives.xml", - "lib/net8.0/Microsoft.Extensions.Primitives.dll", - "lib/net8.0/Microsoft.Extensions.Primitives.xml", - "lib/net9.0/Microsoft.Extensions.Primitives.dll", - "lib/net9.0/Microsoft.Extensions.Primitives.xml", - "lib/netstandard2.0/Microsoft.Extensions.Primitives.dll", - "lib/netstandard2.0/Microsoft.Extensions.Primitives.xml", - "microsoft.extensions.primitives.10.0.2.nupkg.sha512", - "microsoft.extensions.primitives.nuspec", - "useSharedDesignerContext.txt" - ] - }, - "Newtonsoft.Json/13.0.4": { - "sha512": "pdgNNMai3zv51W5aq268sujXUyx7SNdE2bj1wZcWjAQrKMFZV260lbqYop1d2GM67JI1huLRwxo9ZqnfF/lC6A==", - "type": "package", - "path": "newtonsoft.json/13.0.4", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "LICENSE.md", - "README.md", - "lib/net20/Newtonsoft.Json.dll", - "lib/net20/Newtonsoft.Json.xml", - "lib/net35/Newtonsoft.Json.dll", - "lib/net35/Newtonsoft.Json.xml", - "lib/net40/Newtonsoft.Json.dll", - "lib/net40/Newtonsoft.Json.xml", - "lib/net45/Newtonsoft.Json.dll", - "lib/net45/Newtonsoft.Json.xml", - "lib/net6.0/Newtonsoft.Json.dll", - "lib/net6.0/Newtonsoft.Json.xml", - "lib/netstandard1.0/Newtonsoft.Json.dll", - "lib/netstandard1.0/Newtonsoft.Json.xml", - "lib/netstandard1.3/Newtonsoft.Json.dll", - "lib/netstandard1.3/Newtonsoft.Json.xml", - "lib/netstandard2.0/Newtonsoft.Json.dll", - "lib/netstandard2.0/Newtonsoft.Json.xml", - "newtonsoft.json.13.0.4.nupkg.sha512", - "newtonsoft.json.nuspec", - "packageIcon.png" - ] - }, - "SocketIOClient/4.0.0.2": { - "sha512": "RYtHafPCBCoY8F9KI583t4Dw3+c45XHmPf6xLIHtQeSimDLn3rMUSnITcCCRzbI7ITkKgw1eBhICdeVEs4hjHQ==", - "type": "package", - "path": "socketioclient/4.0.0.2", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "README.md", - "README.zh.md", - "lib/net8.0/SocketIOClient.dll", - "lib/netstandard2.0/SocketIOClient.dll", - "socketioclient.4.0.0.2.nupkg.sha512", - "socketioclient.nuspec" - ] - }, - "SocketIOClient.Common/4.0.0": { - "sha512": "7wlg0hMX5/k+fZejclVR7aKSj+Q37KCmVrKPIjZV+9z/odb11hZ4L+a0T3cV1w1jicTBWFEKvjWfWh6YKtz9Qg==", - "type": "package", - "path": "socketioclient.common/4.0.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "lib/net8.0/SocketIOClient.Common.dll", - "lib/netstandard2.0/SocketIOClient.Common.dll", - "socketioclient.common.4.0.0.nupkg.sha512", - "socketioclient.common.nuspec" - ] - }, - "SocketIOClient.Serializer/4.0.0.1": { - "sha512": "+p1xnwSkX8UQQLgqr2Em6dIATl5pR7awHj1nbaRd/9aA2iAHGgy7HsseN8eblv3NHlPtTP9Y3IFDl5JKfWSYjg==", - "type": "package", - "path": "socketioclient.serializer/4.0.0.1", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "lib/net8.0/SocketIOClient.Serializer.dll", - "lib/netstandard2.0/SocketIOClient.Serializer.dll", - "socketioclient.serializer.4.0.0.1.nupkg.sha512", - "socketioclient.serializer.nuspec" - ] - }, - "SocketIOClient.Serializer.NewtonsoftJson/4.0.0.1": { - "sha512": "D7nzYdIcNIPjGp7LW+KmJHk5I6uz3ioGb6fwxdpspuruwTTl1bTwczRuvEFcFjTHtb0Avhbcaw65jo6eAUmsYw==", - "type": "package", - "path": "socketioclient.serializer.newtonsoftjson/4.0.0.1", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "lib/net8.0/SocketIOClient.Serializer.NewtonsoftJson.dll", - "lib/netstandard2.0/SocketIOClient.Serializer.NewtonsoftJson.dll", - "socketioclient.serializer.newtonsoftjson.4.0.0.1.nupkg.sha512", - "socketioclient.serializer.newtonsoftjson.nuspec" - ] - }, - "System.Diagnostics.DiagnosticSource/10.0.2": { - "sha512": "lYWBy8fKkJHaRcOuw30d67PrtVjR5754sz5Wl76s8P+vJ9FSThh9b7LIcTSODx1LY7NB3Srvg+JMnzd67qNZOw==", - "type": "package", - "path": "system.diagnostics.diagnosticsource/10.0.2", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "Icon.png", - "THIRD-PARTY-NOTICES.TXT", - "buildTransitive/net461/System.Diagnostics.DiagnosticSource.targets", - "buildTransitive/net462/_._", - "buildTransitive/net8.0/_._", - "buildTransitive/netcoreapp2.0/System.Diagnostics.DiagnosticSource.targets", - "lib/net10.0/System.Diagnostics.DiagnosticSource.dll", - "lib/net10.0/System.Diagnostics.DiagnosticSource.xml", - "lib/net462/System.Diagnostics.DiagnosticSource.dll", - "lib/net462/System.Diagnostics.DiagnosticSource.xml", - "lib/net8.0/System.Diagnostics.DiagnosticSource.dll", - "lib/net8.0/System.Diagnostics.DiagnosticSource.xml", - "lib/net9.0/System.Diagnostics.DiagnosticSource.dll", - "lib/net9.0/System.Diagnostics.DiagnosticSource.xml", - "lib/netstandard2.0/System.Diagnostics.DiagnosticSource.dll", - "lib/netstandard2.0/System.Diagnostics.DiagnosticSource.xml", - "system.diagnostics.diagnosticsource.10.0.2.nupkg.sha512", - "system.diagnostics.diagnosticsource.nuspec", - "useSharedDesignerContext.txt" - ] - }, - "System.IO.Pipelines/10.0.2": { - "sha512": "EqMsn9r18ABvTDxrDce4OWDhBE3y+rR23ilG7Y3BudDKrDKrLG/hkD/JmeFZbctAPxSkCjyJ/Ddwbn/g7ufRJA==", - "type": "package", - "path": "system.io.pipelines/10.0.2", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "Icon.png", - "PACKAGE.md", - "THIRD-PARTY-NOTICES.TXT", - "buildTransitive/net461/System.IO.Pipelines.targets", - "buildTransitive/net462/_._", - "buildTransitive/net8.0/_._", - "buildTransitive/netcoreapp2.0/System.IO.Pipelines.targets", - "lib/net10.0/System.IO.Pipelines.dll", - "lib/net10.0/System.IO.Pipelines.xml", - "lib/net462/System.IO.Pipelines.dll", - "lib/net462/System.IO.Pipelines.xml", - "lib/net8.0/System.IO.Pipelines.dll", - "lib/net8.0/System.IO.Pipelines.xml", - "lib/net9.0/System.IO.Pipelines.dll", - "lib/net9.0/System.IO.Pipelines.xml", - "lib/netstandard2.0/System.IO.Pipelines.dll", - "lib/netstandard2.0/System.IO.Pipelines.xml", - "system.io.pipelines.10.0.2.nupkg.sha512", - "system.io.pipelines.nuspec", - "useSharedDesignerContext.txt" - ] - }, - "System.Text.Encodings.Web/10.0.2": { - "sha512": "Ro4cLT4qpRy64crfLAy3ekihtXckeXrD5eI6qb6NDSEVyHcHsmH7KgN4dbnIuiBmXIoaCslx4SynLYxag1SLSQ==", - "type": "package", - "path": "system.text.encodings.web/10.0.2", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "Icon.png", - "PACKAGE.md", - "THIRD-PARTY-NOTICES.TXT", - "buildTransitive/net461/System.Text.Encodings.Web.targets", - "buildTransitive/net462/_._", - "buildTransitive/net8.0/_._", - "buildTransitive/netcoreapp2.0/System.Text.Encodings.Web.targets", - "lib/net10.0/System.Text.Encodings.Web.dll", - "lib/net10.0/System.Text.Encodings.Web.xml", - "lib/net462/System.Text.Encodings.Web.dll", - "lib/net462/System.Text.Encodings.Web.xml", - "lib/net8.0/System.Text.Encodings.Web.dll", - "lib/net8.0/System.Text.Encodings.Web.xml", - "lib/net9.0/System.Text.Encodings.Web.dll", - "lib/net9.0/System.Text.Encodings.Web.xml", - "lib/netstandard2.0/System.Text.Encodings.Web.dll", - "lib/netstandard2.0/System.Text.Encodings.Web.xml", - "runtimes/browser/lib/net10.0/System.Text.Encodings.Web.dll", - "runtimes/browser/lib/net10.0/System.Text.Encodings.Web.xml", - "runtimes/browser/lib/net8.0/System.Text.Encodings.Web.dll", - "runtimes/browser/lib/net8.0/System.Text.Encodings.Web.xml", - "runtimes/wasi/lib/net10.0/System.Text.Encodings.Web.dll", - "runtimes/wasi/lib/net10.0/System.Text.Encodings.Web.xml", - "runtimes/win/lib/net9.0/System.Text.Encodings.Web.dll", - "runtimes/win/lib/net9.0/System.Text.Encodings.Web.xml", - "system.text.encodings.web.10.0.2.nupkg.sha512", - "system.text.encodings.web.nuspec", - "useSharedDesignerContext.txt" - ] - }, - "System.Text.Json/10.0.2": { - "sha512": "zy8ey7I16G9neZ6uzxrnYwS7pidElzN8XarsBjGu7lE2m7afTKMEe18KbY3ZSmh/z/bR40oxjd6hlUcmOEaMHw==", - "type": "package", - "path": "system.text.json/10.0.2", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "Icon.png", - "PACKAGE.md", - "THIRD-PARTY-NOTICES.TXT", - "analyzers/dotnet/roslyn3.11/cs/System.Text.Json.SourceGeneration.dll", - "analyzers/dotnet/roslyn3.11/cs/cs/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/de/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/es/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/fr/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/it/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/ja/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/ko/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/pl/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/ru/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/tr/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/System.Text.Json.SourceGeneration.dll", - "analyzers/dotnet/roslyn4.0/cs/cs/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/de/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/es/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/fr/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/it/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/ja/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/ko/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/pl/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/ru/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/tr/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/System.Text.Json.SourceGeneration.dll", - "analyzers/dotnet/roslyn4.4/cs/cs/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/de/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/es/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/fr/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/it/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/ja/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/ko/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/pl/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/ru/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/tr/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll", - "buildTransitive/net461/System.Text.Json.targets", - "buildTransitive/net462/System.Text.Json.targets", - "buildTransitive/net8.0/System.Text.Json.targets", - "buildTransitive/netcoreapp2.0/System.Text.Json.targets", - "buildTransitive/netstandard2.0/System.Text.Json.targets", - "lib/net10.0/System.Text.Json.dll", - "lib/net10.0/System.Text.Json.xml", - "lib/net462/System.Text.Json.dll", - "lib/net462/System.Text.Json.xml", - "lib/net8.0/System.Text.Json.dll", - "lib/net8.0/System.Text.Json.xml", - "lib/net9.0/System.Text.Json.dll", - "lib/net9.0/System.Text.Json.xml", - "lib/netstandard2.0/System.Text.Json.dll", - "lib/netstandard2.0/System.Text.Json.xml", - "system.text.json.10.0.2.nupkg.sha512", - "system.text.json.nuspec", - "useSharedDesignerContext.txt" - ] - } - }, - "projectFileDependencyGroups": { - "net8.0": [ - "SocketIOClient >= 4.0.0.2" - ] - }, - "packageFolders": { - "C:\\Users\\mickl\\.nuget\\packages\\": {}, - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {} - }, - "project": { - "version": "1.0.0", - "restore": { - "projectUniqueName": "C:\\Users\\mickl\\Desktop\\cliptrim-ui\\ClipTrimApp\\stream_deck_plugin\\ClientTest\\ClientTest.csproj", - "projectName": "ClientTest", - "projectPath": "C:\\Users\\mickl\\Desktop\\cliptrim-ui\\ClipTrimApp\\stream_deck_plugin\\ClientTest\\ClientTest.csproj", - "packagesPath": "C:\\Users\\mickl\\.nuget\\packages\\", - "outputPath": "C:\\Users\\mickl\\Desktop\\cliptrim-ui\\ClipTrimApp\\stream_deck_plugin\\ClientTest\\obj\\", - "projectStyle": "PackageReference", - "fallbackFolders": [ - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" - ], - "configFilePaths": [ - "C:\\Users\\mickl\\AppData\\Roaming\\NuGet\\NuGet.Config", - "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", - "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" - ], - "originalTargetFrameworks": [ - "net8.0" - ], - "sources": { - "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, - "C:\\Program Files\\dotnet\\library-packs": {}, - "https://api.nuget.org/v3/index.json": {}, - "https://www.nuget.org/api/v2": {}, - "https://www.nuget.org/api/v2": {} - }, - "frameworks": { - "net8.0": { - "targetAlias": "net8.0", - "projectReferences": {} - } - }, - "warningProperties": { - "warnAsError": [ - "NU1605" - ] - }, - "restoreAuditProperties": { - "enableAudit": "true", - "auditLevel": "low", - "auditMode": "direct" - }, - "SdkAnalysisLevel": "9.0.300" - }, - "frameworks": { - "net8.0": { - "targetAlias": "net8.0", - "dependencies": { - "SocketIOClient": { - "target": "Package", - "version": "[4.0.0.2, )" - } - }, - "imports": [ - "net461", - "net462", - "net47", - "net471", - "net472", - "net48", - "net481" - ], - "assetTargetFallback": true, - "warn": true, - "frameworkReferences": { - "Microsoft.NETCore.App": { - "privateAssets": "all" - } - }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.307/PortableRuntimeIdentifierGraph.json" - } - } - } -} \ No newline at end of file diff --git a/stream_deck_plugin/ClientTest/obj/project.nuget.cache b/stream_deck_plugin/ClientTest/obj/project.nuget.cache deleted file mode 100644 index 4f6716b..0000000 --- a/stream_deck_plugin/ClientTest/obj/project.nuget.cache +++ /dev/null @@ -1,24 +0,0 @@ -{ - "version": 2, - "dgSpecHash": "h0lIwrEt1zA=", - "success": true, - "projectFilePath": "C:\\Users\\mickl\\Desktop\\cliptrim-ui\\ClipTrimApp\\stream_deck_plugin\\ClientTest\\ClientTest.csproj", - "expectedPackageFiles": [ - "C:\\Users\\mickl\\.nuget\\packages\\microsoft.extensions.dependencyinjection\\10.0.2\\microsoft.extensions.dependencyinjection.10.0.2.nupkg.sha512", - "C:\\Users\\mickl\\.nuget\\packages\\microsoft.extensions.dependencyinjection.abstractions\\10.0.2\\microsoft.extensions.dependencyinjection.abstractions.10.0.2.nupkg.sha512", - "C:\\Users\\mickl\\.nuget\\packages\\microsoft.extensions.logging\\10.0.2\\microsoft.extensions.logging.10.0.2.nupkg.sha512", - "C:\\Users\\mickl\\.nuget\\packages\\microsoft.extensions.logging.abstractions\\10.0.2\\microsoft.extensions.logging.abstractions.10.0.2.nupkg.sha512", - "C:\\Users\\mickl\\.nuget\\packages\\microsoft.extensions.options\\10.0.2\\microsoft.extensions.options.10.0.2.nupkg.sha512", - "C:\\Users\\mickl\\.nuget\\packages\\microsoft.extensions.primitives\\10.0.2\\microsoft.extensions.primitives.10.0.2.nupkg.sha512", - "C:\\Users\\mickl\\.nuget\\packages\\newtonsoft.json\\13.0.4\\newtonsoft.json.13.0.4.nupkg.sha512", - "C:\\Users\\mickl\\.nuget\\packages\\socketioclient\\4.0.0.2\\socketioclient.4.0.0.2.nupkg.sha512", - "C:\\Users\\mickl\\.nuget\\packages\\socketioclient.common\\4.0.0\\socketioclient.common.4.0.0.nupkg.sha512", - "C:\\Users\\mickl\\.nuget\\packages\\socketioclient.serializer\\4.0.0.1\\socketioclient.serializer.4.0.0.1.nupkg.sha512", - "C:\\Users\\mickl\\.nuget\\packages\\socketioclient.serializer.newtonsoftjson\\4.0.0.1\\socketioclient.serializer.newtonsoftjson.4.0.0.1.nupkg.sha512", - "C:\\Users\\mickl\\.nuget\\packages\\system.diagnostics.diagnosticsource\\10.0.2\\system.diagnostics.diagnosticsource.10.0.2.nupkg.sha512", - "C:\\Users\\mickl\\.nuget\\packages\\system.io.pipelines\\10.0.2\\system.io.pipelines.10.0.2.nupkg.sha512", - "C:\\Users\\mickl\\.nuget\\packages\\system.text.encodings.web\\10.0.2\\system.text.encodings.web.10.0.2.nupkg.sha512", - "C:\\Users\\mickl\\.nuget\\packages\\system.text.json\\10.0.2\\system.text.json.10.0.2.nupkg.sha512" - ], - "logs": [] -} \ No newline at end of file diff --git a/stream_deck_plugin/ClipTrimDotNet.sln b/stream_deck_plugin/ClipTrimDotNet.sln index a71fcb9..e9c2bce 100644 --- a/stream_deck_plugin/ClipTrimDotNet.sln +++ b/stream_deck_plugin/ClipTrimDotNet.sln @@ -1,25 +1,25 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.8.34330.188 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClipTrimDotNet", "ClipTrimDotNet\ClipTrimDotNet.csproj", "{4635D874-69C0-4010-BE46-77EF92EB1553}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {4635D874-69C0-4010-BE46-77EF92EB1553}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4635D874-69C0-4010-BE46-77EF92EB1553}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4635D874-69C0-4010-BE46-77EF92EB1553}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4635D874-69C0-4010-BE46-77EF92EB1553}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {926C6896-F36A-4F3B-A9DD-CA3AA48AD99F} - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.8.34330.188 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClipTrimDotNet", "ClipTrimDotNet\ClipTrimDotNet.csproj", "{4635D874-69C0-4010-BE46-77EF92EB1553}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4635D874-69C0-4010-BE46-77EF92EB1553}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4635D874-69C0-4010-BE46-77EF92EB1553}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4635D874-69C0-4010-BE46-77EF92EB1553}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4635D874-69C0-4010-BE46-77EF92EB1553}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {926C6896-F36A-4F3B-A9DD-CA3AA48AD99F} + EndGlobalSection +EndGlobal diff --git a/stream_deck_plugin/ClipTrimDotNet/!!README!!.txt b/stream_deck_plugin/ClipTrimDotNet/!!README!!.txt index b6e1b33..e93e13e 100644 --- a/stream_deck_plugin/ClipTrimDotNet/!!README!!.txt +++ b/stream_deck_plugin/ClipTrimDotNet/!!README!!.txt @@ -1,14 +1,14 @@ -To use: -1. Right click the project and choose "Manage Nuget Packages" -2. Choose the restore option in the Nuget screen (or just install the latest StreamDeck-Tools from Nuget) -3. Update the manifest.json file with the correct details about your plugin -4. Modify PluginAction.cs as needed (it holds the logic for your plugin) -5. Modify the PropertyInspector\PluginActionPI.html and PropertyInspector\PluginActionPI.js as needed to show field in the Property Inspector -6. Before releasing, change the Assembly Information (Right click the project -> Properties -> Application -> Assembly Information...) - -For help with StreamDeck-Tools: - Discord Server: http://discord.barraider.com -Resources: -* StreamDeck-Tools samples and tutorial: https://github.com/BarRaider/streamdeck-tools -* EasyPI library (for working with Property Inspector): https://github.com/BarRaider/streamdeck-easypi - +To use: +1. Right click the project and choose "Manage Nuget Packages" +2. Choose the restore option in the Nuget screen (or just install the latest StreamDeck-Tools from Nuget) +3. Update the manifest.json file with the correct details about your plugin +4. Modify PluginAction.cs as needed (it holds the logic for your plugin) +5. Modify the PropertyInspector\PluginActionPI.html and PropertyInspector\PluginActionPI.js as needed to show field in the Property Inspector +6. Before releasing, change the Assembly Information (Right click the project -> Properties -> Application -> Assembly Information...) + +For help with StreamDeck-Tools: + Discord Server: http://discord.barraider.com +Resources: +* StreamDeck-Tools samples and tutorial: https://github.com/BarRaider/streamdeck-tools +* EasyPI library (for working with Property Inspector): https://github.com/BarRaider/streamdeck-easypi + diff --git a/stream_deck_plugin/ClipTrimDotNet/App.config b/stream_deck_plugin/ClipTrimDotNet/App.config index 064f601..23161b3 100644 --- a/stream_deck_plugin/ClipTrimDotNet/App.config +++ b/stream_deck_plugin/ClipTrimDotNet/App.config @@ -1,42 +1,42 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/stream_deck_plugin/ClipTrimDotNet/BaseTest.cs b/stream_deck_plugin/ClipTrimDotNet/BaseTest.cs index e02abfc..af0744a 100644 --- a/stream_deck_plugin/ClipTrimDotNet/BaseTest.cs +++ b/stream_deck_plugin/ClipTrimDotNet/BaseTest.cs @@ -1 +1 @@ - + diff --git a/stream_deck_plugin/ClipTrimDotNet/Client/ClipMetadata.cs b/stream_deck_plugin/ClipTrimDotNet/Client/ClipMetadata.cs index 4960061..48b1c7b 100644 --- a/stream_deck_plugin/ClipTrimDotNet/Client/ClipMetadata.cs +++ b/stream_deck_plugin/ClipTrimDotNet/Client/ClipMetadata.cs @@ -1,53 +1,53 @@ -using Newtonsoft.Json; -using Newtonsoft.Json.Serialization; -using Newtonsoft.Json.Converters; - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Text.Json.Serialization; - -namespace ClipTrimDotNet.Client -{ - public enum PlaybackType - { - playStop, - playOverlap - } - public class ClipMetadata - { - [JsonProperty(PropertyName = "filename")] - [JsonPropertyName("filename")] - - public string Filename { get; set; } - - - [JsonProperty(PropertyName = "name")] - [JsonPropertyName("name")] - public string Name { get; set; } - - - [JsonProperty(PropertyName = "volume")] - [JsonPropertyName("volume")] - public double Volume { get; set; } = 1.0; - - - [JsonProperty(PropertyName = "startTime")] - [JsonPropertyName("startTime")] - public double StartTime { get; set; } = 0.0; - - - [JsonProperty(PropertyName = "endTime")] - [JsonPropertyName("endTime")] - public double EndTime { get; set; } = 0.0; - - - [JsonProperty(PropertyName = "playbackType")] - [Newtonsoft.Json.JsonConverter(typeof(StringEnumConverter))] - [System.Text.Json.Serialization.JsonConverter(typeof(JsonStringEnumConverter))] - [JsonPropertyName("playbackType")] - public PlaybackType PlaybackType { get; set; } = PlaybackType.playStop; - } -} +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; +using Newtonsoft.Json.Converters; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Text.Json.Serialization; + +namespace ClipTrimDotNet.Client +{ + public enum PlaybackType + { + playStop, + playOverlap + } + public class ClipMetadata + { + [JsonProperty(PropertyName = "filename")] + [JsonPropertyName("filename")] + + public string Filename { get; set; } + + + [JsonProperty(PropertyName = "name")] + [JsonPropertyName("name")] + public string Name { get; set; } + + + [JsonProperty(PropertyName = "volume")] + [JsonPropertyName("volume")] + public double Volume { get; set; } = 1.0; + + + [JsonProperty(PropertyName = "startTime")] + [JsonPropertyName("startTime")] + public double StartTime { get; set; } = 0.0; + + + [JsonProperty(PropertyName = "endTime")] + [JsonPropertyName("endTime")] + public double EndTime { get; set; } = 0.0; + + + [JsonProperty(PropertyName = "playbackType")] + [Newtonsoft.Json.JsonConverter(typeof(StringEnumConverter))] + [System.Text.Json.Serialization.JsonConverter(typeof(JsonStringEnumConverter))] + [JsonPropertyName("playbackType")] + public PlaybackType PlaybackType { get; set; } = PlaybackType.playStop; + } +} diff --git a/stream_deck_plugin/ClipTrimDotNet/Client/ClipTrimClient.cs b/stream_deck_plugin/ClipTrimDotNet/Client/ClipTrimClient.cs index c5580fb..f3f3c24 100644 --- a/stream_deck_plugin/ClipTrimDotNet/Client/ClipTrimClient.cs +++ b/stream_deck_plugin/ClipTrimDotNet/Client/ClipTrimClient.cs @@ -1,158 +1,158 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net.Http; -using System.Text; -using System.Threading.Tasks; -using Newtonsoft.Json; -using SocketIOClient; -using BarRaider.SdTools; -using System.Runtime.CompilerServices; - -namespace ClipTrimDotNet.Client -{ - public class ClipTrimClient - { - private static ClipTrimClient? instance; - public static ClipTrimClient Instance - { - get - { - if (instance == null) - { - instance = new ClipTrimClient(); - } - return instance; - } - } - - //private HttpClient httpClient; - private SocketIO socket; - - public int PortNumber { get; set; } = 5010; - - public ClipTrimClient() - { - //httpClient = new HttpClient() - //{ - // BaseAddress = new Uri("http://localhost:5010/"), - // Timeout = TimeSpan.FromSeconds(10) - //}; - Logger.Instance.LogMessage(TracingLevel.INFO, $"Starting ClipTrimClient on port {PortNumber}"); - socket = new SocketIO(new Uri($"http://localhost:5010/")); - socket.Options.AutoUpgrade = false; - socket.Options.ConnectionTimeout = TimeSpan.FromSeconds(10); - socket.Options.Reconnection = true; - socket.On("full_data", ctx => - { - try - { - var response = ctx.GetValue>(0); - Logger.Instance.LogMessage(TracingLevel.INFO, $"full_data event {JsonConvert.SerializeObject(response)}"); - Collections = response!; - //Logger.Instance.LogMessage(TracingLevel.INFO, $"Collections {JsonConvert.SerializeObject(Collections)}"); - } - catch (Exception ex) - { - Logger.Instance.LogMessage(TracingLevel.INFO, $"full_data error {ex.ToString()}"); - } - return Task.CompletedTask; - }); - socket.On("collection_updated", ctx => - { - try - { - var response = ctx.GetValue(0)!; - Logger.Instance.LogMessage(TracingLevel.INFO, $"collection_updated event {JsonConvert.SerializeObject(response)}"); - int index = Collections.FindIndex(x => x.Id == response.Id); - if (index != -1) - { - Collections[index] = response; - } - } - catch - { - - } - - return Task.CompletedTask; - }); - - Task.Run(async () => await socket.ConnectAsync()); - //Task.Run(ShortPoll); - } - - - //public async Task ShortPoll() - //{ - // while (true) - // { - // await GetMetadata(); - // await Task.Delay(TimeSpan.FromSeconds(5)); await Task.Delay(TimeSpan.FromSeconds(5)); - - // } - //} - - public List Collections { get; private set; } = new List(); - public int SelectedCollection { get; private set; } = -1; - public int PageIndex { get; private set; } = 0; - //private async Task GetMetadata() - //{ - // try - // { - // var response = await httpClient.GetAsync("meta"); - // if (response.IsSuccessStatusCode) - // { - // var json = await response.Content.ReadAsStringAsync(); - // dynamic collections = JsonConvert.DeserializeObject(json); - // collections = collections.collections; - // Collections = JsonConvert.DeserializeObject>(collections.ToString()); - // } - // } - // catch (Exception ex) - // { - // //Logger.Instance.LogMessage(TracingLevel.INFO, $"Error pinging ClipTrim API: {ex.Message}"); - // return; - // } - - //} - - public List GetCollectionNames() - { - //await GetMetadata(); - return Collections.Select(x => x.Name).ToList(); - } - - public void SetSelectedCollectionByName(string name) - { - SelectedCollection = Collections.FindIndex(x => x.Name == name); - if (SelectedCollection != -1) - { - PageIndex = 0; - } - } - - public ClipMetadata? GetClipByPagedIndex(int index) - { - if (SelectedCollection == -1) return null; - int clipIndex = PageIndex * 10 + index; - var collection = Collections[SelectedCollection]; - if (clipIndex >= 0 && clipIndex < collection.Clips.Count) - { - return collection.Clips[clipIndex]; - } - return null; - } - - public async void PlayClip(ClipMetadata? metadata) - { - if (metadata == null) return; - - //var response = await httpClient.PostAsync("playback/start", new StringContent(JsonConvert.SerializeObject(metadata), Encoding.UTF8, "application/json")); - //if (!response.IsSuccessStatusCode) - //{ - // //Logger.Instance.LogMessage(TracingLevel.INFO, $"Error playing clip: {response.ReasonPhrase}"); - //} - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.Text; +using System.Threading.Tasks; +using Newtonsoft.Json; +using SocketIOClient; +using BarRaider.SdTools; +using System.Runtime.CompilerServices; + +namespace ClipTrimDotNet.Client +{ + public class ClipTrimClient + { + private static ClipTrimClient? instance; + public static ClipTrimClient Instance + { + get + { + if (instance == null) + { + instance = new ClipTrimClient(); + } + return instance; + } + } + + //private HttpClient httpClient; + private SocketIO socket; + + public int PortNumber { get; set; } = 5010; + + public ClipTrimClient() + { + //httpClient = new HttpClient() + //{ + // BaseAddress = new Uri("http://localhost:5010/"), + // Timeout = TimeSpan.FromSeconds(10) + //}; + Logger.Instance.LogMessage(TracingLevel.INFO, $"Starting ClipTrimClient on port {PortNumber}"); + socket = new SocketIO(new Uri($"http://localhost:5010/")); + socket.Options.AutoUpgrade = false; + socket.Options.ConnectionTimeout = TimeSpan.FromSeconds(10); + socket.Options.Reconnection = true; + socket.On("full_data", ctx => + { + try + { + var response = ctx.GetValue>(0); + Logger.Instance.LogMessage(TracingLevel.INFO, $"full_data event {JsonConvert.SerializeObject(response)}"); + Collections = response!; + //Logger.Instance.LogMessage(TracingLevel.INFO, $"Collections {JsonConvert.SerializeObject(Collections)}"); + } + catch (Exception ex) + { + Logger.Instance.LogMessage(TracingLevel.INFO, $"full_data error {ex.ToString()}"); + } + return Task.CompletedTask; + }); + socket.On("collection_updated", ctx => + { + try + { + var response = ctx.GetValue(0)!; + Logger.Instance.LogMessage(TracingLevel.INFO, $"collection_updated event {JsonConvert.SerializeObject(response)}"); + int index = Collections.FindIndex(x => x.Id == response.Id); + if (index != -1) + { + Collections[index] = response; + } + } + catch + { + + } + + return Task.CompletedTask; + }); + + Task.Run(async () => await socket.ConnectAsync()); + //Task.Run(ShortPoll); + } + + + //public async Task ShortPoll() + //{ + // while (true) + // { + // await GetMetadata(); + // await Task.Delay(TimeSpan.FromSeconds(5)); await Task.Delay(TimeSpan.FromSeconds(5)); + + // } + //} + + public List Collections { get; private set; } = new List(); + public int SelectedCollection { get; private set; } = -1; + public int PageIndex { get; private set; } = 0; + //private async Task GetMetadata() + //{ + // try + // { + // var response = await httpClient.GetAsync("meta"); + // if (response.IsSuccessStatusCode) + // { + // var json = await response.Content.ReadAsStringAsync(); + // dynamic collections = JsonConvert.DeserializeObject(json); + // collections = collections.collections; + // Collections = JsonConvert.DeserializeObject>(collections.ToString()); + // } + // } + // catch (Exception ex) + // { + // //Logger.Instance.LogMessage(TracingLevel.INFO, $"Error pinging ClipTrim API: {ex.Message}"); + // return; + // } + + //} + + public List GetCollectionNames() + { + //await GetMetadata(); + return Collections.Select(x => x.Name).ToList(); + } + + public void SetSelectedCollectionByName(string name) + { + SelectedCollection = Collections.FindIndex(x => x.Name == name); + if (SelectedCollection != -1) + { + PageIndex = 0; + } + } + + public ClipMetadata? GetClipByPagedIndex(int index) + { + if (SelectedCollection == -1) return null; + int clipIndex = PageIndex * 10 + index; + var collection = Collections[SelectedCollection]; + if (clipIndex >= 0 && clipIndex < collection.Clips.Count) + { + return collection.Clips[clipIndex]; + } + return null; + } + + public async void PlayClip(ClipMetadata? metadata) + { + if (metadata == null) return; + + //var response = await httpClient.PostAsync("playback/start", new StringContent(JsonConvert.SerializeObject(metadata), Encoding.UTF8, "application/json")); + //if (!response.IsSuccessStatusCode) + //{ + // //Logger.Instance.LogMessage(TracingLevel.INFO, $"Error playing clip: {response.ReasonPhrase}"); + //} + } + } +} diff --git a/stream_deck_plugin/ClipTrimDotNet/Client/CollectionMetaData.cs b/stream_deck_plugin/ClipTrimDotNet/Client/CollectionMetaData.cs index 1060ecd..0465dac 100644 --- a/stream_deck_plugin/ClipTrimDotNet/Client/CollectionMetaData.cs +++ b/stream_deck_plugin/ClipTrimDotNet/Client/CollectionMetaData.cs @@ -1,27 +1,27 @@ -using Newtonsoft.Json; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Text.Json.Serialization; -using System.Threading.Tasks; - -namespace ClipTrimDotNet.Client -{ - public class CollectionMetaData - { - [JsonProperty(PropertyName = "name")] - [JsonPropertyName("name")] - public string Name { get; set; } - - - [JsonProperty(PropertyName = "clips")] - [JsonPropertyName("clips")] - public List Clips { get; set; } = new List(); - - - [JsonProperty(PropertyName = "id")] - [JsonPropertyName("id")] - public int Id { get; set; } - } -} +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.Json.Serialization; +using System.Threading.Tasks; + +namespace ClipTrimDotNet.Client +{ + public class CollectionMetaData + { + [JsonProperty(PropertyName = "name")] + [JsonPropertyName("name")] + public string Name { get; set; } + + + [JsonProperty(PropertyName = "clips")] + [JsonPropertyName("clips")] + public List Clips { get; set; } = new List(); + + + [JsonProperty(PropertyName = "id")] + [JsonPropertyName("id")] + public int Id { get; set; } + } +} diff --git a/stream_deck_plugin/ClipTrimDotNet/ClipTrimDotNet.csproj b/stream_deck_plugin/ClipTrimDotNet/ClipTrimDotNet.csproj index 8d7cd41..04c2057 100644 --- a/stream_deck_plugin/ClipTrimDotNet/ClipTrimDotNet.csproj +++ b/stream_deck_plugin/ClipTrimDotNet/ClipTrimDotNet.csproj @@ -1,95 +1,95 @@ - - - net8.0-windows - false - Exe - 10 - enable - enable - npm run stop - npm run start - ClipTrimDotNet - ClipTrimDotNet - Copyright © 2020 - 1.0.0.0 - 1.0.0.0 - - - bin\Debug\com.michal-courson.cliptrim.sdPlugin\ - - - bin\Release\ClipTrimDotNet.sdPlugin\ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - PreserveNewest - - - PreserveNewest - - - - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - - PreserveNewest - - - PreserveNewest - - + + + net8.0-windows + false + Exe + 10 + enable + enable + npm run stop + npm run start + ClipTrimDotNet + ClipTrimDotNet + Copyright © 2020 + 1.0.0.0 + 1.0.0.0 + + + bin\Debug\com.michal-courson.cliptrim.sdPlugin\ + + + bin\Release\ClipTrimDotNet.sdPlugin\ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + PreserveNewest + + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + PreserveNewest + + + PreserveNewest + + \ No newline at end of file diff --git a/stream_deck_plugin/ClipTrimDotNet/ClipTrimDotNet.csproj.user b/stream_deck_plugin/ClipTrimDotNet/ClipTrimDotNet.csproj.user index 48d700b..6a46d49 100644 --- a/stream_deck_plugin/ClipTrimDotNet/ClipTrimDotNet.csproj.user +++ b/stream_deck_plugin/ClipTrimDotNet/ClipTrimDotNet.csproj.user @@ -1,6 +1,6 @@ - - - - --port 23654 --pluginUUID com.michal-courson.cliptrim --registerEvent restart --info {} - + + + + --port 23654 --pluginUUID com.michal-courson.cliptrim --registerEvent restart --info {} + \ No newline at end of file diff --git a/stream_deck_plugin/ClipTrimDotNet/DialLayout.json b/stream_deck_plugin/ClipTrimDotNet/DialLayout.json index 014c4e1..d74b16a 100644 --- a/stream_deck_plugin/ClipTrimDotNet/DialLayout.json +++ b/stream_deck_plugin/ClipTrimDotNet/DialLayout.json @@ -1,40 +1,40 @@ -{ - "id": "sampleDial", - "items": [ - { - "key": "title", - "type": "text", - "rect": [ 16, 10, 136, 24 ], - "font": { - "size": 16, - "weight": 600 - }, - "alignment": "left" - }, - { - "key": "icon", - "type": "pixmap", - "rect": [ 16, 40, 48, 48 ] - }, - { - "key": "value", - "type": "text", - "rect": [ 76, 40, 108, 32 ], - "font": { - "size": 24, - "weight": 600 - }, - "alignment": "right" - }, - { - "key": "indicator", - "type": "gbar", - "rect": [ 76, 74, 108, 20 ], - "value": 0, - "subtype": 4, - "bar_h": 12, - "border_w": 0, - "bar_bg_c": "0:#427018,0.75:#705B1C,0.90:#702735,1:#702735" - } - ] +{ + "id": "sampleDial", + "items": [ + { + "key": "title", + "type": "text", + "rect": [ 16, 10, 136, 24 ], + "font": { + "size": 16, + "weight": 600 + }, + "alignment": "left" + }, + { + "key": "icon", + "type": "pixmap", + "rect": [ 16, 40, 48, 48 ] + }, + { + "key": "value", + "type": "text", + "rect": [ 76, 40, 108, 32 ], + "font": { + "size": 24, + "weight": 600 + }, + "alignment": "right" + }, + { + "key": "indicator", + "type": "gbar", + "rect": [ 76, 74, 108, 20 ], + "value": 0, + "subtype": 4, + "bar_h": 12, + "border_w": 0, + "bar_bg_c": "0:#427018,0.75:#705B1C,0.90:#702735,1:#702735" + } + ] } \ No newline at end of file diff --git a/stream_deck_plugin/ClipTrimDotNet/GlobalSettings.cs b/stream_deck_plugin/ClipTrimDotNet/GlobalSettings.cs index c9d73ad..e0e2643 100644 --- a/stream_deck_plugin/ClipTrimDotNet/GlobalSettings.cs +++ b/stream_deck_plugin/ClipTrimDotNet/GlobalSettings.cs @@ -1,108 +1,108 @@ -using BarRaider.SdTools; -using Newtonsoft.Json; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using BarRaider.SdTools.Wrappers; -using Newtonsoft.Json.Linq; - -namespace ClipTrimDotNet -{ - public class FileEntry - { - public FileEntry() - { - Volume = 1.0; - Playtype = "Play/Overlap"; - } - [JsonProperty(PropertyName = "Volume")] - public double Volume { get; set; } - [JsonProperty(PropertyName = "Playtype")] - public string Playtype { get; set; } - } - public class CollectionEntry - { - public CollectionEntry() - { - Files = new Dictionary(); - } - [JsonProperty(PropertyName = "Files")] - public Dictionary Files { get; set; } - } - - public class GlobalSettings - { - public static GlobalSettings? _inst; - public static GlobalSettings Instance - { - get - { - _inst ??= CreateDefaultSettings(); - return _inst; - } - set - { - _inst = value; - } - } - public static GlobalSettings CreateDefaultSettings() - { - GlobalSettings instance = new GlobalSettings(); - instance.BasePath = null; - instance.ProfileName = null; - instance.Collections = new Dictionary(); - return instance; - } - - - [FilenameProperty] - [JsonProperty(PropertyName = "basePath")] - public string? BasePath { get; set; } - - [JsonProperty(PropertyName = "profileName")] - public string? ProfileName { get; set; } - - [JsonProperty(PropertyName = "outputDevice")] - public string? OutputDevice { get; set; } - - [JsonProperty(PropertyName = "collections")] - public Dictionary Collections { get; set; } - - public void SetCurrentProfile(string profile) - { - ProfileName = profile; - if(!Collections.ContainsKey(profile)) - { - Collections.Add(profile, new CollectionEntry()); - } - } - - public FileEntry GetFileOptionsInCurrentProfile(string filename) - { - if(!Collections.TryGetValue(ProfileName, out CollectionEntry collection)) - { - return new FileEntry(); - } - if(!collection.Files.TryGetValue(filename, out FileEntry file)) - { - return new FileEntry(); - } - //Logger.Instance.LogMessage(TracingLevel.INFO, "fetched file settings " + filename + JsonConvert.SerializeObject(file)); - return file; - } - - public void SetFileOptionsCurrentProfile(string filename, FileEntry file) - { - //Logger.Instance.LogMessage(TracingLevel.INFO, "SetFileOptionsCurrentProfile "); - if (!Collections.TryGetValue(ProfileName, out CollectionEntry collection)) - { - return; - } - //Logger.Instance.LogMessage(TracingLevel.INFO, "SetFileOptionsCurrentProfile 2"); - //collection.Files[filename] = file; - Collections[ProfileName].Files[filename] = file; - } - } -} +using BarRaider.SdTools; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using BarRaider.SdTools.Wrappers; +using Newtonsoft.Json.Linq; + +namespace ClipTrimDotNet +{ + public class FileEntry + { + public FileEntry() + { + Volume = 1.0; + Playtype = "Play/Overlap"; + } + [JsonProperty(PropertyName = "Volume")] + public double Volume { get; set; } + [JsonProperty(PropertyName = "Playtype")] + public string Playtype { get; set; } + } + public class CollectionEntry + { + public CollectionEntry() + { + Files = new Dictionary(); + } + [JsonProperty(PropertyName = "Files")] + public Dictionary Files { get; set; } + } + + public class GlobalSettings + { + public static GlobalSettings? _inst; + public static GlobalSettings Instance + { + get + { + _inst ??= CreateDefaultSettings(); + return _inst; + } + set + { + _inst = value; + } + } + public static GlobalSettings CreateDefaultSettings() + { + GlobalSettings instance = new GlobalSettings(); + instance.BasePath = null; + instance.ProfileName = null; + instance.Collections = new Dictionary(); + return instance; + } + + + [FilenameProperty] + [JsonProperty(PropertyName = "basePath")] + public string? BasePath { get; set; } + + [JsonProperty(PropertyName = "profileName")] + public string? ProfileName { get; set; } + + [JsonProperty(PropertyName = "outputDevice")] + public string? OutputDevice { get; set; } + + [JsonProperty(PropertyName = "collections")] + public Dictionary Collections { get; set; } + + public void SetCurrentProfile(string profile) + { + ProfileName = profile; + if(!Collections.ContainsKey(profile)) + { + Collections.Add(profile, new CollectionEntry()); + } + } + + public FileEntry GetFileOptionsInCurrentProfile(string filename) + { + if(!Collections.TryGetValue(ProfileName, out CollectionEntry collection)) + { + return new FileEntry(); + } + if(!collection.Files.TryGetValue(filename, out FileEntry file)) + { + return new FileEntry(); + } + //Logger.Instance.LogMessage(TracingLevel.INFO, "fetched file settings " + filename + JsonConvert.SerializeObject(file)); + return file; + } + + public void SetFileOptionsCurrentProfile(string filename, FileEntry file) + { + //Logger.Instance.LogMessage(TracingLevel.INFO, "SetFileOptionsCurrentProfile "); + if (!Collections.TryGetValue(ProfileName, out CollectionEntry collection)) + { + return; + } + //Logger.Instance.LogMessage(TracingLevel.INFO, "SetFileOptionsCurrentProfile 2"); + //collection.Files[filename] = file; + Collections[ProfileName].Files[filename] = file; + } + } +} diff --git a/stream_deck_plugin/ClipTrimDotNet/Player.cs b/stream_deck_plugin/ClipTrimDotNet/Player.cs index 03cc755..e7343db 100644 --- a/stream_deck_plugin/ClipTrimDotNet/Player.cs +++ b/stream_deck_plugin/ClipTrimDotNet/Player.cs @@ -1,194 +1,194 @@ -using BarRaider.SdTools; -using BarRaider.SdTools.Wrappers; -using ClipTrimDotNet.Client; -using System.Text.Json.Serialization; -using Newtonsoft.Json.Linq; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Dynamic; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace ClipTrimDotNet -{ - [PluginActionId("com.michal-courson.cliptrim.player")] - public class Player : KeypadBase - { - - private ClipMetadata? metadata; - private KeyCoordinates coordinates; - private class PluginSettings - { - public static PluginSettings CreateDefaultSettings() - { - PluginSettings instance = new PluginSettings(); - instance.Path = null; - instance.PlayType = "Play/Overlap"; - instance.Index = 0; - instance.Volume = 1; - return instance; - } - - [FilenameProperty] - [JsonPropertyName("path")] - public string? Path { get; set; } - - [JsonPropertyName("index")] - public int? Index { get; set; } - [JsonPropertyName("playtype")] - public string PlayType { get; set; } - - [JsonPropertyName("volume")] - public double Volume { get; set; } - } - - #region Private Members - - private PluginSettings settings; - - #endregion - public Player(SDConnection connection, InitialPayload payload) : base(connection, payload) - { - if (payload.Settings == null || payload.Settings.Count == 0) - { - this.settings = PluginSettings.CreateDefaultSettings(); - SaveSettings(); - } - else - { - this.settings = payload.Settings.ToObject(); - } - this.coordinates = payload.Coordinates; - GlobalSettingsManager.Instance.RequestGlobalSettings(); - CheckFile(); - } - - private void Instance_OnReceivedGlobalSettings(object sender, ReceivedGlobalSettingsPayload e) - { - Tools.AutoPopulateSettings(GlobalSettings.Instance, e.Settings); - } - - public int GetIndex() - { - return Math.Max((coordinates.Row - 1) * 5 + coordinates.Column, 0); - } - - private async void CheckFile() - { - - //if (settings == null || GlobalSettings.Instance.ProfileName ==null) return; - metadata = ClipTrimClient.Instance.GetClipByPagedIndex(GetIndex()); - await Connection.SetTitleAsync($"{metadata?.Name ?? ""}"); - //Logger.Instance.LogMessage(TracingLevel.INFO, $"Set title to {metadata?.Name ?? ""}"); - - return; - - //var files = Directory.GetFiles(Path.Combine(Path.GetDirectoryName(GlobalSettings.Instance.BasePath), GlobalSettings.Instance.ProfileName), "*.wav", SearchOption.TopDirectoryOnly) - // .OrderBy(file => File.GetCreationTime(file)) - // .ToArray(); - //int? i = this.settings.Index; - //string new_path = ""; - //if (i != null && i >= 0 && i < files.Length) - //{ - // new_path = files[i ?? 0]; - //} - - - //await Connection.SetTitleAsync(Path.GetFileNameWithoutExtension(new_path)); - //if (new_path != settings.Path) - //{ - // settings.Path = new_path; - // if(new_path != "") - // { - // FileEntry opts = GlobalSettings.Instance.GetFileOptionsInCurrentProfile(new_path); - // settings.Volume = opts.Volume; - // settings.PlayType = opts.Playtype; - // } - // await SaveSettings(); - //} - } - - - private async void Connection_OnApplicationDidLaunch(object sender, BarRaider.SdTools.Wrappers.SDEventReceivedEventArgs e) - { - - } - - private void Connection_OnTitleParametersDidChange(object sender, SDEventReceivedEventArgs e) - { - //titleParameters = e.Event?.Payload?.TitleParameters; - //userTitle = e.Event?.Payload?.Title; - } - - public override void Dispose() - { - Connection.OnTitleParametersDidChange -= Connection_OnTitleParametersDidChange; - Connection.OnApplicationDidLaunch -= Connection_OnApplicationDidLaunch; - //Logger.Instance.LogMessage(TracingLevel.INFO, $"Destructor called"); - } - - public override void KeyPressed(KeyPayload payload) - { - //Logger.Instance.LogMessage(TracingLevel.INFO, "Key Pressedd"); - Tools.AutoPopulateSettings(settings, payload.Settings); - // Logger.Instance.LogMessage(TracingLevel.INFO, JsonConvert.SerializeObject(settings)); - ClipTrimClient.Instance.PlayClip(metadata); - //try - //{ - // WavPlayer.Instance.Play(settings.Path, GlobalSettings.Instance.OutputDevice, settings.Volume, settings.PlayType == "Play/Overlap" ? WavPlayer.PlayMode.PlayOverlap : WavPlayer.PlayMode.PlayStop); - //} - //catch - //{ - - //} - - } - - public override void KeyReleased(KeyPayload payload) { - - } - - - public override void OnTick() { - CheckFile(); - } - - public override async void ReceivedSettings(ReceivedSettingsPayload payload) - { - //Logger.Instance.LogMessage(TracingLevel.INFO, "Player rec settings"); - Tools.AutoPopulateSettings(settings, payload.Settings); - GlobalSettings.Instance.SetFileOptionsCurrentProfile(settings.Path, new FileEntry() { Playtype = settings.PlayType, Volume = settings.Volume }); - await Connection.SetGlobalSettingsAsync(JObject.FromObject(GlobalSettings.Instance)); - //SaveSettings(); - //CheckFile(); - } - - public override void ReceivedGlobalSettings(ReceivedGlobalSettingsPayload payload) { - //Logger.Instance.LogMessage(TracingLevel.INFO, "ReceivedGlobalSettings"); - - if (payload.Settings == null || payload.Settings.Count == 0) - { - var inst = GlobalSettings.Instance; - //GlobalSettingsManager.Instance.SetGlobalSettings(JObject.FromObject(inst)); - } - else - { - GlobalSettings.Instance = payload.Settings.ToObject(); - } - - //CheckFile(); - } - - #region Private Methods - - private Task SaveSettings() - { - return Connection.SetSettingsAsync(JObject.FromObject(settings)); - } - - #endregion - } +using BarRaider.SdTools; +using BarRaider.SdTools.Wrappers; +using ClipTrimDotNet.Client; +using System.Text.Json.Serialization; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Dynamic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ClipTrimDotNet +{ + [PluginActionId("com.michal-courson.cliptrim.player")] + public class Player : KeypadBase + { + + private ClipMetadata? metadata; + private KeyCoordinates coordinates; + private class PluginSettings + { + public static PluginSettings CreateDefaultSettings() + { + PluginSettings instance = new PluginSettings(); + instance.Path = null; + instance.PlayType = "Play/Overlap"; + instance.Index = 0; + instance.Volume = 1; + return instance; + } + + [FilenameProperty] + [JsonPropertyName("path")] + public string? Path { get; set; } + + [JsonPropertyName("index")] + public int? Index { get; set; } + [JsonPropertyName("playtype")] + public string PlayType { get; set; } + + [JsonPropertyName("volume")] + public double Volume { get; set; } + } + + #region Private Members + + private PluginSettings settings; + + #endregion + public Player(SDConnection connection, InitialPayload payload) : base(connection, payload) + { + if (payload.Settings == null || payload.Settings.Count == 0) + { + this.settings = PluginSettings.CreateDefaultSettings(); + SaveSettings(); + } + else + { + this.settings = payload.Settings.ToObject(); + } + this.coordinates = payload.Coordinates; + GlobalSettingsManager.Instance.RequestGlobalSettings(); + CheckFile(); + } + + private void Instance_OnReceivedGlobalSettings(object sender, ReceivedGlobalSettingsPayload e) + { + Tools.AutoPopulateSettings(GlobalSettings.Instance, e.Settings); + } + + public int GetIndex() + { + return Math.Max((coordinates.Row - 1) * 5 + coordinates.Column, 0); + } + + private async void CheckFile() + { + + //if (settings == null || GlobalSettings.Instance.ProfileName ==null) return; + metadata = ClipTrimClient.Instance.GetClipByPagedIndex(GetIndex()); + await Connection.SetTitleAsync($"{metadata?.Name ?? ""}"); + //Logger.Instance.LogMessage(TracingLevel.INFO, $"Set title to {metadata?.Name ?? ""}"); + + return; + + //var files = Directory.GetFiles(Path.Combine(Path.GetDirectoryName(GlobalSettings.Instance.BasePath), GlobalSettings.Instance.ProfileName), "*.wav", SearchOption.TopDirectoryOnly) + // .OrderBy(file => File.GetCreationTime(file)) + // .ToArray(); + //int? i = this.settings.Index; + //string new_path = ""; + //if (i != null && i >= 0 && i < files.Length) + //{ + // new_path = files[i ?? 0]; + //} + + + //await Connection.SetTitleAsync(Path.GetFileNameWithoutExtension(new_path)); + //if (new_path != settings.Path) + //{ + // settings.Path = new_path; + // if(new_path != "") + // { + // FileEntry opts = GlobalSettings.Instance.GetFileOptionsInCurrentProfile(new_path); + // settings.Volume = opts.Volume; + // settings.PlayType = opts.Playtype; + // } + // await SaveSettings(); + //} + } + + + private async void Connection_OnApplicationDidLaunch(object sender, BarRaider.SdTools.Wrappers.SDEventReceivedEventArgs e) + { + + } + + private void Connection_OnTitleParametersDidChange(object sender, SDEventReceivedEventArgs e) + { + //titleParameters = e.Event?.Payload?.TitleParameters; + //userTitle = e.Event?.Payload?.Title; + } + + public override void Dispose() + { + Connection.OnTitleParametersDidChange -= Connection_OnTitleParametersDidChange; + Connection.OnApplicationDidLaunch -= Connection_OnApplicationDidLaunch; + //Logger.Instance.LogMessage(TracingLevel.INFO, $"Destructor called"); + } + + public override void KeyPressed(KeyPayload payload) + { + //Logger.Instance.LogMessage(TracingLevel.INFO, "Key Pressedd"); + Tools.AutoPopulateSettings(settings, payload.Settings); + // Logger.Instance.LogMessage(TracingLevel.INFO, JsonConvert.SerializeObject(settings)); + ClipTrimClient.Instance.PlayClip(metadata); + //try + //{ + // WavPlayer.Instance.Play(settings.Path, GlobalSettings.Instance.OutputDevice, settings.Volume, settings.PlayType == "Play/Overlap" ? WavPlayer.PlayMode.PlayOverlap : WavPlayer.PlayMode.PlayStop); + //} + //catch + //{ + + //} + + } + + public override void KeyReleased(KeyPayload payload) { + + } + + + public override void OnTick() { + CheckFile(); + } + + public override async void ReceivedSettings(ReceivedSettingsPayload payload) + { + //Logger.Instance.LogMessage(TracingLevel.INFO, "Player rec settings"); + Tools.AutoPopulateSettings(settings, payload.Settings); + GlobalSettings.Instance.SetFileOptionsCurrentProfile(settings.Path, new FileEntry() { Playtype = settings.PlayType, Volume = settings.Volume }); + await Connection.SetGlobalSettingsAsync(JObject.FromObject(GlobalSettings.Instance)); + //SaveSettings(); + //CheckFile(); + } + + public override void ReceivedGlobalSettings(ReceivedGlobalSettingsPayload payload) { + //Logger.Instance.LogMessage(TracingLevel.INFO, "ReceivedGlobalSettings"); + + if (payload.Settings == null || payload.Settings.Count == 0) + { + var inst = GlobalSettings.Instance; + //GlobalSettingsManager.Instance.SetGlobalSettings(JObject.FromObject(inst)); + } + else + { + GlobalSettings.Instance = payload.Settings.ToObject(); + } + + //CheckFile(); + } + + #region Private Methods + + private Task SaveSettings() + { + return Connection.SetSettingsAsync(JObject.FromObject(settings)); + } + + #endregion + } } \ No newline at end of file diff --git a/stream_deck_plugin/ClipTrimDotNet/ProfileSwitcher.cs b/stream_deck_plugin/ClipTrimDotNet/ProfileSwitcher.cs index 3b802af..aa29bbd 100644 --- a/stream_deck_plugin/ClipTrimDotNet/ProfileSwitcher.cs +++ b/stream_deck_plugin/ClipTrimDotNet/ProfileSwitcher.cs @@ -1,165 +1,165 @@ -using BarRaider.SdTools; -using BarRaider.SdTools.Wrappers; -using ClipTrimDotNet.Client; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Dynamic; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace ClipTrimDotNet -{ - public class DataSourceItem - { - public string label { get; set; } - public string value { get; set; } - } - [PluginActionId("com.michal-courson.cliptrim.profile-switcher")] - public class ProfileSwitcher : KeypadBase - { - private class PluginSettings - { - public static PluginSettings CreateDefaultSettings() - { - PluginSettings instance = new PluginSettings(); - instance.ProfileName = null; - return instance; - } - - [JsonProperty(PropertyName = "profileName")] - public string? ProfileName { get; set; } - } - - #region Private Members - - private PluginSettings settings; - - #endregion - public ProfileSwitcher(SDConnection connection, InitialPayload payload) : base(connection, payload) - { - if (payload.Settings == null || payload.Settings.Count == 0) - { - this.settings = PluginSettings.CreateDefaultSettings(); - SaveSettings(); - } - else - { - this.settings = payload.Settings.ToObject(); - } - GlobalSettingsManager.Instance.RequestGlobalSettings(); - Connection.OnSendToPlugin += Connection_OnSendToPlugin; - SetTitle(); - } - - private async void SetTitle() - { - - await Connection.SetTitleAsync(settings.ProfileName + " B"); - } - - private async void Connection_OnSendToPlugin(object sender, SDEventReceivedEventArgs e) - { - //Logger.Instance.LogMessage(TracingLevel.INFO, "get profiles"); - if (e.Event.Payload["event"].ToString() == "getProfiles") - { - //string basePath = "C:\\Users\\mickl\\Music\\clips"; - //var files = Directory.GetDirectories(basePath, "*", SearchOption.TopDirectoryOnly).Select(x => Path.GetFileNameWithoutExtension(x)).Where(x => x != "original"); - var files = ClipTrimClient.Instance.GetCollectionNames(); - var items = files.Select(x => new DataSourceItem { label = x, value = x}); - var obj = new JObject(); - obj["event"] = "getProfiles"; - obj["items"] = JArray.FromObject(items); - //Logger.Instance.LogMessage(TracingLevel.INFO, "get profiles return " + JsonConvert.SerializeObject(obj)); - await Connection.SendToPropertyInspectorAsync(obj); - } - //if (e.Event.Payload["event"].ToString() == "getOutputDevices") - //{ - // List devices = new List(); - // for (int n = -1; n < WaveOut.DeviceCount; n++) - // { - // var caps = WaveOut.GetCapabilities(n); - // devices.Add(caps); - // } - // var items = devices.Select(x => new DataSourceItem { label = x.ProductName, value = x.ProductName }); - // var obj = new JObject(); - // obj["event"] = "getOutputDevices"; - // obj["items"] = JArray.FromObject(items); - // //Logger.Instance.LogMessage(TracingLevel.INFO, "get devices return " + JsonConvert.SerializeObject(obj)); - // await Connection.SendToPropertyInspectorAsync(obj); - //} - - } - - private void Connection_OnTitleParametersDidChange(object sender, SDEventReceivedEventArgs e) - { - } - - public override void Dispose() - { - Connection.OnTitleParametersDidChange -= Connection_OnTitleParametersDidChange; - //Logger.Instance.LogMessage(TracingLevel.INFO, $"Destructor called"); - } - - public override async void KeyPressed(KeyPayload payload) - { - //Logger.Instance.LogMessage(TracingLevel.INFO, "KeyPressed"); - //Logger.Instance.LogMessage(TracingLevel.INFO, JsonConvert.SerializeObject(settings)); - //Logger.Instance.LogMessage(TracingLevel.INFO, JsonConvert.SerializeObject(GlobalSettings.Instance)); - ClipTrimClient.Instance.SetSelectedCollectionByName(settings.ProfileName); - GlobalSettings.Instance.SetCurrentProfile(settings.ProfileName); - //Logger.Instance.LogMessage(TracingLevel.INFO, JsonConvert.SerializeObject(GlobalSettings.Instance)); - - await Connection.SetGlobalSettingsAsync(JObject.FromObject(GlobalSettings.Instance)); - await Connection.SwitchProfileAsync("ClipTrim"); - } - - public override void KeyReleased(KeyPayload payload) - { - - } - - public override void OnTick() - { - SetTitle(); - } - - public override void ReceivedSettings(ReceivedSettingsPayload payload) - { - Tools.AutoPopulateSettings(settings, payload.Settings); - SaveSettings(); - //tTitle(); - //CheckFile(); - } - - public override void ReceivedGlobalSettings(ReceivedGlobalSettingsPayload payload) - { - //Logger.Instance.LogMessage(TracingLevel.INFO, "ReceivedGlobalSettings"); - - if (payload.Settings == null || payload.Settings.Count == 0) - { - var inst = GlobalSettings.Instance; - //GlobalSettingsManager.Instance.SetGlobalSettings(JObject.FromObject(inst)); - } - else - { - GlobalSettings.Instance = payload.Settings.ToObject(); - } - - //CheckFile(); - } - - #region Private Methods - - private Task SaveSettings() - { - return Connection.SetSettingsAsync(JObject.FromObject(settings)); - } - - #endregion - } +using BarRaider.SdTools; +using BarRaider.SdTools.Wrappers; +using ClipTrimDotNet.Client; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Dynamic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ClipTrimDotNet +{ + public class DataSourceItem + { + public string label { get; set; } + public string value { get; set; } + } + [PluginActionId("com.michal-courson.cliptrim.profile-switcher")] + public class ProfileSwitcher : KeypadBase + { + private class PluginSettings + { + public static PluginSettings CreateDefaultSettings() + { + PluginSettings instance = new PluginSettings(); + instance.ProfileName = null; + return instance; + } + + [JsonProperty(PropertyName = "profileName")] + public string? ProfileName { get; set; } + } + + #region Private Members + + private PluginSettings settings; + + #endregion + public ProfileSwitcher(SDConnection connection, InitialPayload payload) : base(connection, payload) + { + if (payload.Settings == null || payload.Settings.Count == 0) + { + this.settings = PluginSettings.CreateDefaultSettings(); + SaveSettings(); + } + else + { + this.settings = payload.Settings.ToObject(); + } + GlobalSettingsManager.Instance.RequestGlobalSettings(); + Connection.OnSendToPlugin += Connection_OnSendToPlugin; + SetTitle(); + } + + private async void SetTitle() + { + + await Connection.SetTitleAsync(settings.ProfileName + " B"); + } + + private async void Connection_OnSendToPlugin(object sender, SDEventReceivedEventArgs e) + { + //Logger.Instance.LogMessage(TracingLevel.INFO, "get profiles"); + if (e.Event.Payload["event"].ToString() == "getProfiles") + { + //string basePath = "C:\\Users\\mickl\\Music\\clips"; + //var files = Directory.GetDirectories(basePath, "*", SearchOption.TopDirectoryOnly).Select(x => Path.GetFileNameWithoutExtension(x)).Where(x => x != "original"); + var files = ClipTrimClient.Instance.GetCollectionNames(); + var items = files.Select(x => new DataSourceItem { label = x, value = x}); + var obj = new JObject(); + obj["event"] = "getProfiles"; + obj["items"] = JArray.FromObject(items); + //Logger.Instance.LogMessage(TracingLevel.INFO, "get profiles return " + JsonConvert.SerializeObject(obj)); + await Connection.SendToPropertyInspectorAsync(obj); + } + //if (e.Event.Payload["event"].ToString() == "getOutputDevices") + //{ + // List devices = new List(); + // for (int n = -1; n < WaveOut.DeviceCount; n++) + // { + // var caps = WaveOut.GetCapabilities(n); + // devices.Add(caps); + // } + // var items = devices.Select(x => new DataSourceItem { label = x.ProductName, value = x.ProductName }); + // var obj = new JObject(); + // obj["event"] = "getOutputDevices"; + // obj["items"] = JArray.FromObject(items); + // //Logger.Instance.LogMessage(TracingLevel.INFO, "get devices return " + JsonConvert.SerializeObject(obj)); + // await Connection.SendToPropertyInspectorAsync(obj); + //} + + } + + private void Connection_OnTitleParametersDidChange(object sender, SDEventReceivedEventArgs e) + { + } + + public override void Dispose() + { + Connection.OnTitleParametersDidChange -= Connection_OnTitleParametersDidChange; + //Logger.Instance.LogMessage(TracingLevel.INFO, $"Destructor called"); + } + + public override async void KeyPressed(KeyPayload payload) + { + //Logger.Instance.LogMessage(TracingLevel.INFO, "KeyPressed"); + //Logger.Instance.LogMessage(TracingLevel.INFO, JsonConvert.SerializeObject(settings)); + //Logger.Instance.LogMessage(TracingLevel.INFO, JsonConvert.SerializeObject(GlobalSettings.Instance)); + ClipTrimClient.Instance.SetSelectedCollectionByName(settings.ProfileName); + GlobalSettings.Instance.SetCurrentProfile(settings.ProfileName); + //Logger.Instance.LogMessage(TracingLevel.INFO, JsonConvert.SerializeObject(GlobalSettings.Instance)); + + await Connection.SetGlobalSettingsAsync(JObject.FromObject(GlobalSettings.Instance)); + await Connection.SwitchProfileAsync("ClipTrim"); + } + + public override void KeyReleased(KeyPayload payload) + { + + } + + public override void OnTick() + { + SetTitle(); + } + + public override void ReceivedSettings(ReceivedSettingsPayload payload) + { + Tools.AutoPopulateSettings(settings, payload.Settings); + SaveSettings(); + //tTitle(); + //CheckFile(); + } + + public override void ReceivedGlobalSettings(ReceivedGlobalSettingsPayload payload) + { + //Logger.Instance.LogMessage(TracingLevel.INFO, "ReceivedGlobalSettings"); + + if (payload.Settings == null || payload.Settings.Count == 0) + { + var inst = GlobalSettings.Instance; + //GlobalSettingsManager.Instance.SetGlobalSettings(JObject.FromObject(inst)); + } + else + { + GlobalSettings.Instance = payload.Settings.ToObject(); + } + + //CheckFile(); + } + + #region Private Methods + + private Task SaveSettings() + { + return Connection.SetSettingsAsync(JObject.FromObject(settings)); + } + + #endregion + } } \ No newline at end of file diff --git a/stream_deck_plugin/ClipTrimDotNet/Program.cs b/stream_deck_plugin/ClipTrimDotNet/Program.cs index 370df29..057892d 100644 --- a/stream_deck_plugin/ClipTrimDotNet/Program.cs +++ b/stream_deck_plugin/ClipTrimDotNet/Program.cs @@ -1,20 +1,20 @@ -using BarRaider.SdTools; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace ClipTrimDotNet -{ - internal class Program - { - static void Main(string[] args) - { - // Uncomment this line of code to allow for debugging - //while (!System.Diagnostics.Debugger.IsAttached) { System.Threading.Thread.Sleep(100); } - Client.ClipTrimClient.Instance.PortNumber = 5010; - SDWrapper.Run(args); - } - } -} +using BarRaider.SdTools; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ClipTrimDotNet +{ + internal class Program + { + static void Main(string[] args) + { + // Uncomment this line of code to allow for debugging + //while (!System.Diagnostics.Debugger.IsAttached) { System.Threading.Thread.Sleep(100); } + Client.ClipTrimClient.Instance.PortNumber = 5010; + SDWrapper.Run(args); + } + } +} diff --git a/stream_deck_plugin/ClipTrimDotNet/Properties/AssemblyInfo.cs b/stream_deck_plugin/ClipTrimDotNet/Properties/AssemblyInfo.cs index 2c978f5..61d79b6 100644 --- a/stream_deck_plugin/ClipTrimDotNet/Properties/AssemblyInfo.cs +++ b/stream_deck_plugin/ClipTrimDotNet/Properties/AssemblyInfo.cs @@ -1,13 +1,13 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("1bb90885-9d98-46ef-b983-4a4ef3aea890")] +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("1bb90885-9d98-46ef-b983-4a4ef3aea890")] diff --git a/stream_deck_plugin/ClipTrimDotNet/PropertyInspector/file_player.html b/stream_deck_plugin/ClipTrimDotNet/PropertyInspector/file_player.html index a33211e..21a7ef5 100644 --- a/stream_deck_plugin/ClipTrimDotNet/PropertyInspector/file_player.html +++ b/stream_deck_plugin/ClipTrimDotNet/PropertyInspector/file_player.html @@ -1,45 +1,45 @@ - - - - - Increment Counter Settings - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + Increment Counter Settings + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/stream_deck_plugin/ClipTrimDotNet/PropertyInspector/profile_swticher.html b/stream_deck_plugin/ClipTrimDotNet/PropertyInspector/profile_swticher.html index 10af32e..49498c2 100644 --- a/stream_deck_plugin/ClipTrimDotNet/PropertyInspector/profile_swticher.html +++ b/stream_deck_plugin/ClipTrimDotNet/PropertyInspector/profile_swticher.html @@ -1,34 +1,34 @@ - - - - Increment Counter Settings - - - - - - - - - - - - - - - - - + + + + Increment Counter Settings + + + + + + + + + + + + + + + + + diff --git a/stream_deck_plugin/ClipTrimDotNet/WavPlayer.cs b/stream_deck_plugin/ClipTrimDotNet/WavPlayer.cs index 5c1f7ec..04867ee 100644 --- a/stream_deck_plugin/ClipTrimDotNet/WavPlayer.cs +++ b/stream_deck_plugin/ClipTrimDotNet/WavPlayer.cs @@ -1,225 +1,225 @@ -//using System; -//using System.Collections.Concurrent; -//using System.Collections.Generic; -//using System.Linq; -//using System.ServiceModel.Security; -//using System.Threading.Tasks; -//using BarRaider.SdTools; -//using NAudio.Wave; -//using NAudio.Wave.SampleProviders; -//using Newtonsoft.Json; - -//class CachedSound -//{ -// public byte[] AudioData { get; private set; } -// public WaveFormat WaveFormat { get; private set; } -// public CachedSound(string audioFileName) -// { -// using (var audioFileReader = new AudioFileReader(audioFileName)) -// { -// // TODO: could add resampling in here if required -// WaveFormat = audioFileReader.WaveFormat; -// var wholeFile = new List((int)(audioFileReader.Length)); -// var readBuffer = new byte[audioFileReader.WaveFormat.SampleRate * audioFileReader.WaveFormat.Channels*4]; -// int samplesRead; -// while ((samplesRead = audioFileReader.Read(readBuffer, 0, readBuffer.Length)) > 0) -// { -// wholeFile.AddRange(readBuffer.Take(samplesRead)); -// } -// AudioData = wholeFile.ToArray(); -// } -// //Logger.Instance.LogMessage(TracingLevel.INFO, $"AudioData Length {AudioData.Length}"); - -// } -//} -//class CachedSoundSampleProvider : IWaveProvider -//{ -// private readonly CachedSound cachedSound; -// private long position; - -// ~CachedSoundSampleProvider() { -// //Logger.Instance.LogMessage(TracingLevel.INFO, $"Cache destructor"); -// } - -// public CachedSoundSampleProvider(CachedSound cachedSound) -// { -// this.cachedSound = cachedSound; -// position = 0; -// } - -// public int Read(byte[] buffer, int offset, int count) -// { -// //Logger.Instance.LogMessage(TracingLevel.INFO, $"Read1 byte"); -// var availableSamples = cachedSound.AudioData.Length - position; -// var samplesToCopy = Math.Min(availableSamples, count); -// try -// { -// //Logger.Instance.LogMessage(TracingLevel.INFO, $"{cachedSound.AudioData.GetType()} {buffer.GetType()}"); -// Array.Copy(cachedSound.AudioData, position, buffer, offset, samplesToCopy); -// } -// catch (Exception ex) -// { -// //Logger.Instance.LogMessage(TracingLevel.INFO, $"{ex.ToString()}"); -// } -// //Logger.Instance.LogMessage(TracingLevel.INFO, $"Read3"); -// position += samplesToCopy; -// //Logger.Instance.LogMessage(TracingLevel.INFO, $"Sending {samplesToCopy} samples"); -// return (int)samplesToCopy; -// } - -// public WaveFormat WaveFormat => cachedSound.WaveFormat; -//} - -//public class WavPlayer -//{ -// private static WavPlayer? instance; -// public static WavPlayer Instance -// { -// get -// { -// instance ??= new WavPlayer(); -// return instance; -// } - -// } -// public enum PlayMode -// { -// PlayOverlap, -// PlayStop -// } - -// private readonly ConcurrentDictionary>> _activePlayers; - -// public WavPlayer() -// { -// _activePlayers = new ConcurrentDictionary>>(); -// } - -// public void Play(string filePath, string id, double volume, PlayMode mode) -// { -// if (string.IsNullOrWhiteSpace(filePath)) -// throw new ArgumentException("File path cannot be null or empty.", nameof(filePath)); - -// if (mode == PlayMode.PlayOverlap) -// { -// PlayWithOverlap(filePath, id, volume); -// } -// else if (mode == PlayMode.PlayStop) -// { -// PlayWithStop(filePath, id, volume); -// } -// else -// { -// throw new ArgumentOutOfRangeException(nameof(mode), "Invalid play mode specified."); -// } -// } - -// private void PlayWithOverlap(string filePath, string id, double volume) -// { - -// try -// { -// //Logger.Instance.LogMessage(TracingLevel.INFO, "Play overlap"); -// var player = CreatePlayer(filePath, id); - -// if (!_activePlayers.ContainsKey(filePath)) -// { -// _activePlayers[filePath] = new List>(); -// } - -// _activePlayers[filePath].Add(player); -// player.Item1.Volume = (float)volume; -// player.Item1.Play(); -// } -// catch(Exception ex) -// { -// //Logger.Instance.LogMessage(TracingLevel.INFO, ex.ToString()); -// } - -// //var playersToDispose = _activePlayers[filePath].Where(x => x.Item1.PlaybackState == PlaybackState.Stopped).ToList(); -// //foreach (var p in playersToDispose) -// //{ -// // p.Item1.Stop(); -// // p.Item1.Dispose(); -// //} -// //_activePlayers[filePath].RemoveAll(x => x.Item1.PlaybackState == PlaybackState.Stopped); -// } - -// private void PlayWithStop(string filePath, string id, double volume) -// { -// if (_activePlayers.TryGetValue(filePath, out var players)) -// { - -// // Stop and dispose all current players for this file -// if (players.Any(x => x.Item1.PlaybackState == PlaybackState.Playing)) -// { -// var playersToDispose = players.ToList(); -// foreach (var player in playersToDispose) -// { -// player.Item1.Stop(); -// player.Item1.Dispose(); -// } -// } -// else -// { -// PlayWithOverlap(filePath, id, volume); -// } - -// } -// else -// { -// // Start a new player -// PlayWithOverlap(filePath, id, volume); -// } - -// _activePlayers[filePath].RemoveAll(x => x.Item1.PlaybackState == PlaybackState.Stopped); -// } - -// private Tuple CreatePlayer(string filePath, string name) -// { -// var reader = new CachedSoundSampleProvider(new CachedSound(filePath)); -// //var reader = new AudioFileReader(filePath); -// int number = -1; -// for (int i = 0; i < WaveOut.DeviceCount; ++i) -// { -// if (WaveOut.GetCapabilities(i).ProductName == name) -// { -// number = i; -// } -// } -// var player = new WaveOutEvent() { DeviceNumber = number }; -// player.Init(reader); -// return new Tuple(player, reader); -// } - -// private void CleanupPlayer(string filePath) -// { -// if (_activePlayers.TryGetValue(filePath, out var players)) -// { -// var playersToDispose = players.ToList(); -// foreach (var p in playersToDispose) -// { -// p.Item1.Stop(); -// p.Item1.Dispose(); -// } -// } -// _activePlayers[filePath].RemoveAll(x => x.Item1.PlaybackState == PlaybackState.Stopped); - -// } - -// public void StopAll() -// { -// foreach (var players in _activePlayers.Values) -// { -// var playersToDispose = players.ToList(); -// foreach (var player in playersToDispose) -// { -// player.Item1.Stop(); -// player.Item1.Dispose(); -// } -// players.Clear(); -// } - -// _activePlayers.Clear(); -// } -//} +//using System; +//using System.Collections.Concurrent; +//using System.Collections.Generic; +//using System.Linq; +//using System.ServiceModel.Security; +//using System.Threading.Tasks; +//using BarRaider.SdTools; +//using NAudio.Wave; +//using NAudio.Wave.SampleProviders; +//using Newtonsoft.Json; + +//class CachedSound +//{ +// public byte[] AudioData { get; private set; } +// public WaveFormat WaveFormat { get; private set; } +// public CachedSound(string audioFileName) +// { +// using (var audioFileReader = new AudioFileReader(audioFileName)) +// { +// // TODO: could add resampling in here if required +// WaveFormat = audioFileReader.WaveFormat; +// var wholeFile = new List((int)(audioFileReader.Length)); +// var readBuffer = new byte[audioFileReader.WaveFormat.SampleRate * audioFileReader.WaveFormat.Channels*4]; +// int samplesRead; +// while ((samplesRead = audioFileReader.Read(readBuffer, 0, readBuffer.Length)) > 0) +// { +// wholeFile.AddRange(readBuffer.Take(samplesRead)); +// } +// AudioData = wholeFile.ToArray(); +// } +// //Logger.Instance.LogMessage(TracingLevel.INFO, $"AudioData Length {AudioData.Length}"); + +// } +//} +//class CachedSoundSampleProvider : IWaveProvider +//{ +// private readonly CachedSound cachedSound; +// private long position; + +// ~CachedSoundSampleProvider() { +// //Logger.Instance.LogMessage(TracingLevel.INFO, $"Cache destructor"); +// } + +// public CachedSoundSampleProvider(CachedSound cachedSound) +// { +// this.cachedSound = cachedSound; +// position = 0; +// } + +// public int Read(byte[] buffer, int offset, int count) +// { +// //Logger.Instance.LogMessage(TracingLevel.INFO, $"Read1 byte"); +// var availableSamples = cachedSound.AudioData.Length - position; +// var samplesToCopy = Math.Min(availableSamples, count); +// try +// { +// //Logger.Instance.LogMessage(TracingLevel.INFO, $"{cachedSound.AudioData.GetType()} {buffer.GetType()}"); +// Array.Copy(cachedSound.AudioData, position, buffer, offset, samplesToCopy); +// } +// catch (Exception ex) +// { +// //Logger.Instance.LogMessage(TracingLevel.INFO, $"{ex.ToString()}"); +// } +// //Logger.Instance.LogMessage(TracingLevel.INFO, $"Read3"); +// position += samplesToCopy; +// //Logger.Instance.LogMessage(TracingLevel.INFO, $"Sending {samplesToCopy} samples"); +// return (int)samplesToCopy; +// } + +// public WaveFormat WaveFormat => cachedSound.WaveFormat; +//} + +//public class WavPlayer +//{ +// private static WavPlayer? instance; +// public static WavPlayer Instance +// { +// get +// { +// instance ??= new WavPlayer(); +// return instance; +// } + +// } +// public enum PlayMode +// { +// PlayOverlap, +// PlayStop +// } + +// private readonly ConcurrentDictionary>> _activePlayers; + +// public WavPlayer() +// { +// _activePlayers = new ConcurrentDictionary>>(); +// } + +// public void Play(string filePath, string id, double volume, PlayMode mode) +// { +// if (string.IsNullOrWhiteSpace(filePath)) +// throw new ArgumentException("File path cannot be null or empty.", nameof(filePath)); + +// if (mode == PlayMode.PlayOverlap) +// { +// PlayWithOverlap(filePath, id, volume); +// } +// else if (mode == PlayMode.PlayStop) +// { +// PlayWithStop(filePath, id, volume); +// } +// else +// { +// throw new ArgumentOutOfRangeException(nameof(mode), "Invalid play mode specified."); +// } +// } + +// private void PlayWithOverlap(string filePath, string id, double volume) +// { + +// try +// { +// //Logger.Instance.LogMessage(TracingLevel.INFO, "Play overlap"); +// var player = CreatePlayer(filePath, id); + +// if (!_activePlayers.ContainsKey(filePath)) +// { +// _activePlayers[filePath] = new List>(); +// } + +// _activePlayers[filePath].Add(player); +// player.Item1.Volume = (float)volume; +// player.Item1.Play(); +// } +// catch(Exception ex) +// { +// //Logger.Instance.LogMessage(TracingLevel.INFO, ex.ToString()); +// } + +// //var playersToDispose = _activePlayers[filePath].Where(x => x.Item1.PlaybackState == PlaybackState.Stopped).ToList(); +// //foreach (var p in playersToDispose) +// //{ +// // p.Item1.Stop(); +// // p.Item1.Dispose(); +// //} +// //_activePlayers[filePath].RemoveAll(x => x.Item1.PlaybackState == PlaybackState.Stopped); +// } + +// private void PlayWithStop(string filePath, string id, double volume) +// { +// if (_activePlayers.TryGetValue(filePath, out var players)) +// { + +// // Stop and dispose all current players for this file +// if (players.Any(x => x.Item1.PlaybackState == PlaybackState.Playing)) +// { +// var playersToDispose = players.ToList(); +// foreach (var player in playersToDispose) +// { +// player.Item1.Stop(); +// player.Item1.Dispose(); +// } +// } +// else +// { +// PlayWithOverlap(filePath, id, volume); +// } + +// } +// else +// { +// // Start a new player +// PlayWithOverlap(filePath, id, volume); +// } + +// _activePlayers[filePath].RemoveAll(x => x.Item1.PlaybackState == PlaybackState.Stopped); +// } + +// private Tuple CreatePlayer(string filePath, string name) +// { +// var reader = new CachedSoundSampleProvider(new CachedSound(filePath)); +// //var reader = new AudioFileReader(filePath); +// int number = -1; +// for (int i = 0; i < WaveOut.DeviceCount; ++i) +// { +// if (WaveOut.GetCapabilities(i).ProductName == name) +// { +// number = i; +// } +// } +// var player = new WaveOutEvent() { DeviceNumber = number }; +// player.Init(reader); +// return new Tuple(player, reader); +// } + +// private void CleanupPlayer(string filePath) +// { +// if (_activePlayers.TryGetValue(filePath, out var players)) +// { +// var playersToDispose = players.ToList(); +// foreach (var p in playersToDispose) +// { +// p.Item1.Stop(); +// p.Item1.Dispose(); +// } +// } +// _activePlayers[filePath].RemoveAll(x => x.Item1.PlaybackState == PlaybackState.Stopped); + +// } + +// public void StopAll() +// { +// foreach (var players in _activePlayers.Values) +// { +// var playersToDispose = players.ToList(); +// foreach (var player in playersToDispose) +// { +// player.Item1.Stop(); +// player.Item1.Dispose(); +// } +// players.Clear(); +// } + +// _activePlayers.Clear(); +// } +//} diff --git a/stream_deck_plugin/ClipTrimDotNet/manifest.json b/stream_deck_plugin/ClipTrimDotNet/manifest.json index 9ff9b8c..ae0ee3b 100644 --- a/stream_deck_plugin/ClipTrimDotNet/manifest.json +++ b/stream_deck_plugin/ClipTrimDotNet/manifest.json @@ -1,62 +1,62 @@ -{ - - "Actions": [ - { - "Icon": "Images/icon", - "Name": "Player", - "States": [ - { - "Image": "Images/pluginAction", - "TitleAlignment": "middle", - "FontSize": 11 - } - ], - "SupportedInMultiActions": false, - "Tooltip": "Plays a bound audio file", - "UUID": "com.michal-courson.cliptrim.player", - "PropertyInspectorPath": "PropertyInspector/file_player.html" - }, - { - "Icon": "Images/icon", - "Name": "Profile Switcher", - "States": [ - { - "Image": "Images/pluginAction", - "TitleAlignment": "middle", - "FontSize": 11 - } - ], - "SupportedInMultiActions": false, - "Tooltip": "Selects which sub folder to use and opens effect profile", - "UUID": "com.michal-courson.cliptrim.profile-switcher", - "PropertyInspectorPath": "PropertyInspector/profile_swticher.html" - } - ], - "Author": "Michal Courson", - "Name": "ClipTrimDotNet", - "Description": "Pairs with cliptrim for easy voice recording and trimming", - "Icon": "Images/pluginIcon", - "Version": "0.1.0.0", - "CodePath": "ClipTrimDotNet.exe", - "Category": "ClipTrimDotNet", - "CategoryIcon": "Images/categoryIcon", - "UUID": "com.michal-courson.cliptrim", - "OS": [ - { - "Platform": "windows", - "MinimumVersion": "10" - } - ], - "SDKVersion": 2, - "Software": { - "MinimumVersion": "6.4" - }, - "Profiles": [ - { - "Name": "ClipTrim", - "DeviceType": 0, - "Readonly": false, - "DontAutoSwitchWhenInstalled": false - } - ] +{ + + "Actions": [ + { + "Icon": "Images/icon", + "Name": "Player", + "States": [ + { + "Image": "Images/pluginAction", + "TitleAlignment": "middle", + "FontSize": 11 + } + ], + "SupportedInMultiActions": false, + "Tooltip": "Plays a bound audio file", + "UUID": "com.michal-courson.cliptrim.player", + "PropertyInspectorPath": "PropertyInspector/file_player.html" + }, + { + "Icon": "Images/icon", + "Name": "Profile Switcher", + "States": [ + { + "Image": "Images/pluginAction", + "TitleAlignment": "middle", + "FontSize": 11 + } + ], + "SupportedInMultiActions": false, + "Tooltip": "Selects which sub folder to use and opens effect profile", + "UUID": "com.michal-courson.cliptrim.profile-switcher", + "PropertyInspectorPath": "PropertyInspector/profile_swticher.html" + } + ], + "Author": "Michal Courson", + "Name": "ClipTrimDotNet", + "Description": "Pairs with cliptrim for easy voice recording and trimming", + "Icon": "Images/pluginIcon", + "Version": "0.1.0.0", + "CodePath": "ClipTrimDotNet.exe", + "Category": "ClipTrimDotNet", + "CategoryIcon": "Images/categoryIcon", + "UUID": "com.michal-courson.cliptrim", + "OS": [ + { + "Platform": "windows", + "MinimumVersion": "10" + } + ], + "SDKVersion": 2, + "Software": { + "MinimumVersion": "6.4" + }, + "Profiles": [ + { + "Name": "ClipTrim", + "DeviceType": 0, + "Readonly": false, + "DontAutoSwitchWhenInstalled": false + } + ] } \ No newline at end of file diff --git a/stream_deck_plugin/ClipTrimDotNet/package-lock.json b/stream_deck_plugin/ClipTrimDotNet/package-lock.json index 8d76e11..eb84d5a 100644 --- a/stream_deck_plugin/ClipTrimDotNet/package-lock.json +++ b/stream_deck_plugin/ClipTrimDotNet/package-lock.json @@ -1,272 +1,272 @@ -{ - "name": "ClipTrimDotNet", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "devDependencies": { - "shx": "^0.3.4" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/shx": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.4.tgz", - "integrity": "sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.3", - "shelljs": "^0.8.5" - }, - "bin": { - "shx": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, - "license": "ISC" - } - } -} +{ + "name": "ClipTrimDotNet", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "devDependencies": { + "shx": "^0.3.4" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/shx": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.4.tgz", + "integrity": "sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.3", + "shelljs": "^0.8.5" + }, + "bin": { + "shx": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + } + } +} diff --git a/stream_deck_plugin/ClipTrimDotNet/package.json b/stream_deck_plugin/ClipTrimDotNet/package.json index 3ab40ee..a66cde7 100644 --- a/stream_deck_plugin/ClipTrimDotNet/package.json +++ b/stream_deck_plugin/ClipTrimDotNet/package.json @@ -1,14 +1,14 @@ -{ - "scripts": { - "stop": "streamdeck stop com.michal-courson.cliptrim", - "copy": "@powershell robocopy bin/Debug/ClipTrimDotNet.sdPlugin bin/Debug/com.michal-courson.cliptrim.sdPlugin/net8.0-windows", - "link": "streamdeck link bin/Debug/com.michal-courson.cliptrim.sdPlugin", - "restart": "streamdeck restart com.michal-courson.cliptrim", - "start": "npm run link && npm run restart", - "all": "npm run stop && npm run copy && npm run link && npm run restart", - "pack": "streamdeck pack bin/Debug/com.michal-courson.cliptrim.sdPlugin/net8.0-windows/" - }, - "devDependencies": { - "shx": "^0.3.4" - } -} +{ + "scripts": { + "stop": "streamdeck stop com.michal-courson.cliptrim", + "copy": "@powershell robocopy bin/Debug/ClipTrimDotNet.sdPlugin bin/Debug/com.michal-courson.cliptrim.sdPlugin/net8.0-windows", + "link": "streamdeck link bin/Debug/com.michal-courson.cliptrim.sdPlugin", + "restart": "streamdeck restart com.michal-courson.cliptrim", + "start": "npm run link && npm run restart", + "all": "npm run stop && npm run copy && npm run link && npm run restart", + "pack": "streamdeck pack bin/Debug/com.michal-courson.cliptrim.sdPlugin/net8.0-windows/" + }, + "devDependencies": { + "shx": "^0.3.4" + } +} diff --git a/stream_deck_plugin/ClipTrimDotNet/packages.config b/stream_deck_plugin/ClipTrimDotNet/packages.config index 5d35478..fe5d425 100644 --- a/stream_deck_plugin/ClipTrimDotNet/packages.config +++ b/stream_deck_plugin/ClipTrimDotNet/packages.config @@ -1,46 +1,46 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file