mirror of
https://github.com/th-ch/youtube-music.git
synced 2026-01-11 02:31:45 +00:00
101 lines
2.8 KiB
TypeScript
101 lines
2.8 KiB
TypeScript
import { net } from 'electron';
|
|
|
|
import { createPlugin } from '@/utils';
|
|
import { registerCallback } from '@/providers/song-info';
|
|
import { t } from '@/i18n';
|
|
|
|
type LumiaData = {
|
|
origin: string;
|
|
eventType: string;
|
|
url?: string;
|
|
videoId?: string;
|
|
playlistId?: string;
|
|
cover?: string | null;
|
|
cover_url?: string | null;
|
|
title?: string;
|
|
artists?: string[];
|
|
status?: string;
|
|
progress?: number;
|
|
duration?: number;
|
|
album_url?: string | null;
|
|
album?: string | null;
|
|
views?: number;
|
|
isPaused?: boolean;
|
|
};
|
|
|
|
export default createPlugin({
|
|
name: () => t('plugins.lumiastream.name'),
|
|
description: () => t('plugins.lumiastream.description'),
|
|
restartNeeded: true,
|
|
config: {
|
|
enabled: false,
|
|
},
|
|
backend({ ipc }) {
|
|
const secToMilisec = (t?: number) =>
|
|
t ? Math.round(Number(t) * 1e3) : undefined;
|
|
const previousStatePaused = null;
|
|
|
|
const data: LumiaData = {
|
|
origin: '\u0079\u006f\u0075\u0074\u0075\u0062\u0065\u006d\u0075\u0073\u0069\u0063',
|
|
eventType: 'switchSong',
|
|
};
|
|
|
|
const post = (data: LumiaData) => {
|
|
const port = 39231;
|
|
const headers = {
|
|
'Content-Type': 'application/json',
|
|
'Accept': 'application/json',
|
|
'Access-Control-Allow-Headers': '*',
|
|
'Access-Control-Allow-Origin': '*',
|
|
} as const;
|
|
const url = `http://127.0.0.1:${port}/api/media`;
|
|
|
|
net
|
|
.fetch(url, {
|
|
method: 'POST',
|
|
body: JSON.stringify({ token: 'lsmedia_ytmsI7812', data }),
|
|
headers,
|
|
})
|
|
.catch((error: { code: number; errno: number }) => {
|
|
console.log(
|
|
`Error: '${
|
|
error.code || error.errno
|
|
}' - when trying to access lumiastream webserver at port ${port}`,
|
|
);
|
|
});
|
|
};
|
|
|
|
ipc.on('peard:player-api-loaded', () =>
|
|
ipc.send('peard:setup-time-changed-listener'),
|
|
);
|
|
|
|
registerCallback((songInfo) => {
|
|
if (!songInfo.title && !songInfo.artist) {
|
|
return;
|
|
}
|
|
|
|
if (previousStatePaused === null) {
|
|
data.eventType = 'switchSong';
|
|
} else if (previousStatePaused !== songInfo.isPaused) {
|
|
data.eventType = 'playPause';
|
|
}
|
|
|
|
data.duration = secToMilisec(songInfo.songDuration);
|
|
data.progress = secToMilisec(songInfo.elapsedSeconds);
|
|
data.url = songInfo.url;
|
|
data.videoId = songInfo.videoId;
|
|
data.playlistId = songInfo.playlistId;
|
|
data.cover = songInfo.imageSrc;
|
|
data.cover_url = songInfo.imageSrc;
|
|
data.album_url = songInfo.imageSrc;
|
|
data.title = songInfo.title;
|
|
data.artists = [songInfo.artist];
|
|
data.status = songInfo.isPaused ? 'stopped' : 'playing';
|
|
data.isPaused = songInfo.isPaused;
|
|
data.album = songInfo.album;
|
|
data.views = songInfo.views;
|
|
post(data);
|
|
});
|
|
},
|
|
});
|