mirror of
https://github.com/hensm/fx_cast.git
synced 2026-06-11 18:19:58 +00:00
App refactor (#140)
* Add additional types * Split components from single index module into smaller modules * Misc smaller changes
This commit is contained in:
88
app/src/bridge/components/receiverSelector.ts
Normal file
88
app/src/bridge/components/receiverSelector.ts
Normal file
@@ -0,0 +1,88 @@
|
||||
"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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user