mirror of
https://github.com/hensm/fx_cast.git
synced 2026-06-08 08:39:59 +00:00
89 lines
2.0 KiB
TypeScript
89 lines
2.0 KiB
TypeScript
"use strict";
|
|
|
|
import child_process from "child_process";
|
|
import path from "path";
|
|
|
|
import { sendMessage } from "../lib/messaging";
|
|
|
|
|
|
function fatal (message: string) {
|
|
console.error(message);
|
|
process.exit(1);
|
|
}
|
|
|
|
|
|
let selectorApp: child_process.ChildProcess | undefined;
|
|
let selectorAppOpen = false;
|
|
|
|
export function startReceiverSelector (data: string) {
|
|
if (process.platform !== "darwin") {
|
|
fatal("Invalid platform for native receiver selector.");
|
|
}
|
|
|
|
if (!data) {
|
|
fatal("Missing native selector data");
|
|
} else {
|
|
try {
|
|
JSON.parse(data);
|
|
} catch (err) {
|
|
fatal("Invalid native selector data.");
|
|
}
|
|
}
|
|
|
|
if (selectorApp && selectorAppOpen) {
|
|
selectorApp.kill();
|
|
selectorAppOpen = false;
|
|
}
|
|
|
|
const selectorPath = path.join(process.cwd()
|
|
, "fx_cast_selector.app/Contents/MacOS/fx_cast_selector");
|
|
|
|
selectorApp = child_process.spawn(selectorPath, [ data ]);
|
|
selectorAppOpen = true;
|
|
|
|
if (selectorApp.stdout) {
|
|
selectorApp.stdout.setEncoding("utf-8");
|
|
selectorApp.stdout.on("data", data => {
|
|
const jsonData = JSON.parse(data);
|
|
|
|
if (!jsonData.mediaType) {
|
|
sendMessage({
|
|
subject: "main:receiverSelector/stop"
|
|
, data: jsonData
|
|
});
|
|
|
|
return;
|
|
}
|
|
|
|
sendMessage({
|
|
subject: "main:receiverSelector/selected"
|
|
, data: jsonData
|
|
});
|
|
});
|
|
}
|
|
|
|
selectorApp.on("error", err => {
|
|
sendMessage({
|
|
subject: "main:receiverSelector/error"
|
|
, data: err.message
|
|
});
|
|
});
|
|
|
|
selectorApp.on("close", () => {
|
|
if (selectorAppOpen) {
|
|
selectorAppOpen = false;
|
|
|
|
sendMessage({
|
|
subject: "main:receiverSelector/close"
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
export function stopReceiverSelector () {
|
|
if (!selectorApp?.killed) {
|
|
selectorApp?.kill();
|
|
selectorAppOpen = false;
|
|
}
|
|
}
|