Compare commits
9 Commits
v2.0.17
...
sidecar-v1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e90d154b83 | ||
|
|
fa749b571d | ||
|
|
ef188e1f67 | ||
|
|
f7b9695418 | ||
|
|
b4c0589b04 | ||
|
|
66c441b17f | ||
|
|
94bc704950 | ||
|
|
7900d2d9f2 | ||
|
|
e0396df7b0 |
@@ -39,27 +39,7 @@ jobs:
|
|||||||
- name: Install npm dependencies
|
- name: Install npm dependencies
|
||||||
run: npm ci
|
run: npm ci
|
||||||
|
|
||||||
- name: Setup code signing
|
|
||||||
env:
|
|
||||||
APPLE_API_KEY: ${{ secrets.APPLE_API_KEY }}
|
|
||||||
APPLE_API_KEY_CONTENT: ${{ secrets.APPLE_API_KEY_CONTENT }}
|
|
||||||
run: |
|
|
||||||
if [ -n "${APPLE_API_KEY_CONTENT}" ]; then
|
|
||||||
echo "Setting up notarization API key..."
|
|
||||||
mkdir -p ~/private_keys
|
|
||||||
echo "${APPLE_API_KEY_CONTENT}" > ~/private_keys/AuthKey_${APPLE_API_KEY}.p8
|
|
||||||
else
|
|
||||||
echo "No signing secrets configured, skipping code signing setup"
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Build Tauri app
|
- name: Build Tauri app
|
||||||
env:
|
|
||||||
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
|
|
||||||
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
|
|
||||||
APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }}
|
|
||||||
APPLE_API_KEY: ${{ secrets.APPLE_API_KEY }}
|
|
||||||
APPLE_API_ISSUER: ${{ secrets.APPLE_API_ISSUER }}
|
|
||||||
APPLE_API_KEY_PATH: ~/private_keys/AuthKey_${{ secrets.APPLE_API_KEY }}.p8
|
|
||||||
run: npm run tauri build
|
run: npm run tauri build
|
||||||
|
|
||||||
- name: Upload to release
|
- name: Upload to release
|
||||||
@@ -111,6 +91,3 @@ jobs:
|
|||||||
"${REPO_API}/releases/${RELEASE_ID}/assets?name=${encoded_name}")
|
"${REPO_API}/releases/${RELEASE_ID}/assets?name=${encoded_name}")
|
||||||
echo "Upload response: HTTP ${HTTP_CODE}"
|
echo "Upload response: HTTP ${HTTP_CODE}"
|
||||||
done
|
done
|
||||||
|
|
||||||
- name: Cleanup signing artifacts
|
|
||||||
run: rm -rf ~/private_keys
|
|
||||||
|
|||||||
@@ -212,7 +212,11 @@ class APIServer:
|
|||||||
|
|
||||||
@app.put("/api/config")
|
@app.put("/api/config")
|
||||||
async def update_config(update: ConfigUpdate):
|
async def update_config(update: ConfigUpdate):
|
||||||
engine_reloaded, message = ctrl.apply_settings(update.settings)
|
import asyncio
|
||||||
|
loop = asyncio.get_event_loop()
|
||||||
|
engine_reloaded, message = await loop.run_in_executor(
|
||||||
|
None, ctrl.apply_settings, update.settings
|
||||||
|
)
|
||||||
return {
|
return {
|
||||||
"status": "ok",
|
"status": "ok",
|
||||||
"message": message,
|
"message": message,
|
||||||
|
|||||||
@@ -608,8 +608,17 @@ class AppController:
|
|||||||
Returns (engine_reload_needed, message).
|
Returns (engine_reload_needed, message).
|
||||||
"""
|
"""
|
||||||
if new_config:
|
if new_config:
|
||||||
for key, value in new_config.items():
|
# Flatten nested dicts into dot-notation keys so we merge
|
||||||
self.config.set(key, value)
|
# individual values instead of replacing entire sections
|
||||||
|
# (e.g. remote.mode instead of overwriting all of remote)
|
||||||
|
def _flatten(d, prefix=""):
|
||||||
|
for k, v in d.items():
|
||||||
|
full_key = f"{prefix}{k}" if not prefix else f"{prefix}.{k}"
|
||||||
|
if isinstance(v, dict):
|
||||||
|
_flatten(v, full_key)
|
||||||
|
else:
|
||||||
|
self.config.set(full_key, v)
|
||||||
|
_flatten(new_config)
|
||||||
|
|
||||||
# Update web server display settings
|
# Update web server display settings
|
||||||
if self.web_server:
|
if self.web_server:
|
||||||
|
|||||||
@@ -320,9 +320,13 @@ class DeepgramTranscriptionEngine:
|
|||||||
def _build_ws_url_and_headers(self):
|
def _build_ws_url_and_headers(self):
|
||||||
"""Return ``(url, headers)`` depending on the current mode."""
|
"""Return ``(url, headers)`` depending on the current mode."""
|
||||||
if self.mode == "managed":
|
if self.mode == "managed":
|
||||||
# Ensure the server URL uses wss:// and append the path
|
# Convert HTTP(S) URLs to WS(S) for WebSocket connection
|
||||||
url = self.server_url.rstrip("/")
|
url = self.server_url.rstrip("/")
|
||||||
if not url.startswith("ws://") and not url.startswith("wss://"):
|
if url.startswith("https://"):
|
||||||
|
url = "wss://" + url[len("https://"):]
|
||||||
|
elif url.startswith("http://"):
|
||||||
|
url = "ws://" + url[len("http://"):]
|
||||||
|
elif not url.startswith("ws://") and not url.startswith("wss://"):
|
||||||
url = f"wss://{url}"
|
url = f"wss://{url}"
|
||||||
url = f"{url}/ws/transcribe"
|
url = f"{url}/ws/transcribe"
|
||||||
return url, {}
|
return url, {}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "local-transcription",
|
"name": "local-transcription",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "2.0.17",
|
"version": "2.0.18",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite dev",
|
"dev": "vite dev",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "local-transcription"
|
name = "local-transcription"
|
||||||
version = "1.0.11"
|
version = "1.0.13"
|
||||||
description = "A standalone desktop application for real-time speech-to-text transcription using Whisper models"
|
description = "A standalone desktop application for real-time speech-to-text transcription using Whisper models"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
requires-python = ">=3.9"
|
requires-python = ">=3.9"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "local-transcription"
|
name = "local-transcription"
|
||||||
version = "2.0.17"
|
version = "2.0.18"
|
||||||
description = "Real-time speech-to-text transcription for streamers"
|
description = "Real-time speech-to-text transcription for streamers"
|
||||||
authors = ["Local Transcription Contributors"]
|
authors = ["Local Transcription Contributors"]
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"productName": "Local Transcription",
|
"productName": "Local Transcription",
|
||||||
"version": "2.0.17",
|
"version": "2.0.18",
|
||||||
"identifier": "net.anhonesthost.local-transcription",
|
"identifier": "net.anhonesthost.local-transcription",
|
||||||
"build": {
|
"build": {
|
||||||
"frontendDist": "../dist",
|
"frontendDist": "../dist",
|
||||||
|
|||||||
@@ -47,6 +47,9 @@
|
|||||||
let autoCheckUpdates = $state(true);
|
let autoCheckUpdates = $state(true);
|
||||||
|
|
||||||
let isCloudMode = $derived(remoteMode === "managed" || remoteMode === "byok");
|
let isCloudMode = $derived(remoteMode === "managed" || remoteMode === "byok");
|
||||||
|
let isCloudOnly = $derived(
|
||||||
|
computeDevices.some(d => d.id === "cloud")
|
||||||
|
);
|
||||||
|
|
||||||
// Room creation / join state
|
// Room creation / join state
|
||||||
let shareCode = $state("");
|
let shareCode = $state("");
|
||||||
@@ -453,7 +456,7 @@
|
|||||||
/>
|
/>
|
||||||
Managed Service
|
Managed Service
|
||||||
</label>
|
</label>
|
||||||
{#if !backendStore.isCloudOnly}
|
{#if !isCloudOnly}
|
||||||
<label>
|
<label>
|
||||||
<input
|
<input
|
||||||
type="radio"
|
type="radio"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
"""Version information for Local Transcription."""
|
"""Version information for Local Transcription."""
|
||||||
|
|
||||||
__version__ = "2.0.17"
|
__version__ = "2.0.18"
|
||||||
__version_info__ = (2, 0, 17)
|
__version_info__ = (2, 0, 18)
|
||||||
|
|
||||||
# Version history:
|
# Version history:
|
||||||
# 1.4.0 - Auto-update feature:
|
# 1.4.0 - Auto-update feature:
|
||||||
|
|||||||
Reference in New Issue
Block a user