Merge remote-tracking branch 'origin/master' into claude/vod-multi-source-49a8ba

This commit is contained in:
4gray committed 2026-07-29 00:10:35 +02:00
commit 26b820cc29
60 files changed
+2772 -160

No files matched your search

@@ -182,6 +182,18 @@ export interface ElectronBridgeWindowState {
isFullScreen: boolean;
}
/**
* A playlist file the operating system asked the app to open — a command line
* argument, a file association double-click, or macOS' `open-file` event. The
* main process resolves the path to an absolute one before handing it over.
*/
export interface ElectronBridgePlaylistOpenRequest {
fileName: string;
filePath: string;
/** Pass back to `acknowledgePlaylistOpenRequest` once received. */
requestId: string;
}
export interface ElectronBridgeAppUpdateRelease {
version: string;
releaseDate?: string;
@@ -575,6 +587,21 @@ export interface ElectronBridgeApi {
title: string
) => Promise<Playlist>;
openPlaylistFromFile: () => Promise<Playlist | null>;
onPlaylistOpenRequest: (
callback: (request: ElectronBridgePlaylistOpenRequest) => void
) => () => void;
/**
* Tells the main process that an `onPlaylistOpenRequest` listener is
* attached, so it can push the playlist files the OS handed over — both
* the ones queued before this renderer existed and any that arrive later.
* Call it *after* subscribing.
*/
announcePlaylistOpenListener: () => Promise<void>;
/**
* Confirms a pushed request reached this renderer. Until it does, the main
* process keeps the request and replays it to the next renderer.
*/
acknowledgePlaylistOpenRequest: (requestId: string) => Promise<void>;
getPathForFile: (file: File) => string;
saveFileDialog: (
defaultPath: string,
@@ -18,7 +18,27 @@ export const PLAYLIST_CANCEL_REFRESH = 'PLAYLIST:CANCEL_REFRESH';
// General
export const ERROR = 'ERROR';
/**
* Main -> renderer push carrying an `ElectronBridgePlaylistOpenRequest`: a
* playlist file the OS asked the app to open, either before the window existed
* (first launch with a path argument) or while it was already running (second
* launch, macOS `open-file`). This is the only channel requests leave the
* main-process queue through.
*/
export const OPEN_FILE = 'OPEN_FILE';
/**
* Renderer -> main invoke announcing that an `OPEN_FILE` listener is attached.
* Carries no payload: it only tells the queue where to push.
*/
export const ANNOUNCE_PLAYLIST_OPEN_LISTENER =
'announce-playlist-open-listener';
/**
* Renderer -> main invoke confirming a pushed request was received. Until it
* arrives the request stays in the queue, so a renderer that reloads or dies
* mid-delivery gets it replayed instead of losing it.
*/
export const ACKNOWLEDGE_PLAYLIST_OPEN_REQUEST =
'acknowledge-playlist-open-request';
// Views
export const VIEW_SETTINGS = 'VIEW:SETTINGS';