mirror of
https://github.com/th-ch/youtube-music.git
synced 2026-01-11 10:31:47 +00:00
fix: fix insert
This commit is contained in:
@ -149,6 +149,7 @@
|
|||||||
"conf": "10.2.0",
|
"conf": "10.2.0",
|
||||||
"custom-electron-prompt": "1.5.7",
|
"custom-electron-prompt": "1.5.7",
|
||||||
"dbus-next": "0.10.2",
|
"dbus-next": "0.10.2",
|
||||||
|
"deepmerge-ts": "5.1.0",
|
||||||
"electron-debug": "3.2.0",
|
"electron-debug": "3.2.0",
|
||||||
"electron-is": "3.0.0",
|
"electron-is": "3.0.0",
|
||||||
"electron-localshortcut": "3.2.1",
|
"electron-localshortcut": "3.2.1",
|
||||||
|
|||||||
8
pnpm-lock.yaml
generated
8
pnpm-lock.yaml
generated
@ -58,6 +58,9 @@ dependencies:
|
|||||||
dbus-next:
|
dbus-next:
|
||||||
specifier: 0.10.2
|
specifier: 0.10.2
|
||||||
version: 0.10.2
|
version: 0.10.2
|
||||||
|
deepmerge-ts:
|
||||||
|
specifier: 5.1.0
|
||||||
|
version: 5.1.0
|
||||||
electron-debug:
|
electron-debug:
|
||||||
specifier: 3.2.0
|
specifier: 3.2.0
|
||||||
version: 3.2.0
|
version: 3.2.0
|
||||||
@ -2265,6 +2268,11 @@ packages:
|
|||||||
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
|
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/deepmerge-ts@5.1.0:
|
||||||
|
resolution: {integrity: sha512-eS8dRJOckyo9maw9Tu5O5RUi/4inFLrnoLkBe3cPfDMx3WZioXtmOew4TXQaxq7Rhl4xjDtR7c6x8nNTxOvbFw==}
|
||||||
|
engines: {node: '>=16.0.0'}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/deepmerge@4.3.1:
|
/deepmerge@4.3.1:
|
||||||
resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
|
resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
|
||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
|
|||||||
@ -14,7 +14,7 @@ const set = (key: string, value: unknown) => {
|
|||||||
store.set(key, value);
|
store.set(key, value);
|
||||||
};
|
};
|
||||||
const setPartial = (key: string, value: object) => {
|
const setPartial = (key: string, value: object) => {
|
||||||
deepmerge(store.get(key), value);
|
deepmerge(store.get(key) ?? {}, value);
|
||||||
store.set(value);
|
store.set(value);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
14
src/index.ts
14
src/index.ts
@ -103,7 +103,7 @@ if (is.windows()) {
|
|||||||
ipcMain.handle('get-main-plugin-names', () => Object.keys(mainPlugins));
|
ipcMain.handle('get-main-plugin-names', () => Object.keys(mainPlugins));
|
||||||
|
|
||||||
const initHook = (win: BrowserWindow) => {
|
const initHook = (win: BrowserWindow) => {
|
||||||
ipcMain.handle('get-config', (_, id: keyof PluginBuilderList) => deepmerge(pluginBuilders[id].config, config.get(`plugins.${id}`)) as PluginBuilderList[typeof id]['config']);
|
ipcMain.handle('get-config', (_, id: keyof PluginBuilderList) => deepmerge(pluginBuilders[id].config, config.get(`plugins.${id}`) ?? {}) as PluginBuilderList[typeof id]['config']);
|
||||||
ipcMain.handle('set-config', (_, name: string, obj: object) => config.setPartial(`plugins.${name}`, obj));
|
ipcMain.handle('set-config', (_, name: string, obj: object) => config.setPartial(`plugins.${name}`, obj));
|
||||||
|
|
||||||
config.watch((newValue) => {
|
config.watch((newValue) => {
|
||||||
@ -148,7 +148,7 @@ async function loadPlugins(win: BrowserWindow) {
|
|||||||
Key extends keyof PluginBuilderList,
|
Key extends keyof PluginBuilderList,
|
||||||
Config extends PluginBaseConfig = PluginBuilderList[Key]['config'],
|
Config extends PluginBaseConfig = PluginBuilderList[Key]['config'],
|
||||||
>(name: Key): MainPluginContext<Config> => ({
|
>(name: Key): MainPluginContext<Config> => ({
|
||||||
getConfig: () => deepmerge(pluginBuilders[name].config, config.get(`plugins.${name}`)) as Config,
|
getConfig: () => deepmerge(pluginBuilders[name].config, config.get(`plugins.${name}`) ?? {}) as Config,
|
||||||
setConfig: (newConfig) => {
|
setConfig: (newConfig) => {
|
||||||
config.setPartial(`plugins.${name}`, newConfig);
|
config.setPartial(`plugins.${name}`, newConfig);
|
||||||
},
|
},
|
||||||
@ -167,14 +167,15 @@ async function loadPlugins(win: BrowserWindow) {
|
|||||||
const pluginConfigs = config.plugins.getPlugins();
|
const pluginConfigs = config.plugins.getPlugins();
|
||||||
for (const [pluginId, factory] of Object.entries(mainPlugins)) {
|
for (const [pluginId, factory] of Object.entries(mainPlugins)) {
|
||||||
if (Object.hasOwn(pluginBuilders, pluginId)) {
|
if (Object.hasOwn(pluginBuilders, pluginId)) {
|
||||||
|
try {
|
||||||
const builder = pluginBuilders[pluginId as keyof PluginBuilderList];
|
const builder = pluginBuilders[pluginId as keyof PluginBuilderList];
|
||||||
const config = deepmerge(builder.config, pluginConfigs[pluginId as keyof PluginBuilderList]);
|
const config = deepmerge(builder.config, pluginConfigs[pluginId as keyof PluginBuilderList] ?? {});
|
||||||
|
|
||||||
if (config?.enabled) {
|
if (config.enabled) {
|
||||||
builder.styles?.forEach((style) => {
|
builder.styles?.forEach((style) => {
|
||||||
injectCSS(win.webContents, style);
|
injectCSS(win.webContents, style);
|
||||||
console.log('[YTMusic]', `"${pluginId}" plugin meta data is loaded`);
|
|
||||||
});
|
});
|
||||||
|
console.log('[YTMusic]', `"${pluginId}" plugin data is loaded`);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const context = createContext(pluginId as keyof PluginBuilderList);
|
const context = createContext(pluginId as keyof PluginBuilderList);
|
||||||
@ -187,6 +188,9 @@ async function loadPlugins(win: BrowserWindow) {
|
|||||||
console.trace(error);
|
console.trace(error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} catch(err) {
|
||||||
|
console.log('[YTMusic]', `Cannot initialize "${pluginId}" plugin: ${String(err)}`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -56,7 +56,7 @@ export const mainMenuTemplate = async (win: BrowserWindow): Promise<MenuTemplate
|
|||||||
Key extends keyof PluginBuilderList,
|
Key extends keyof PluginBuilderList,
|
||||||
Config extends PluginBaseConfig = PluginBuilderList[Key]['config'],
|
Config extends PluginBaseConfig = PluginBuilderList[Key]['config'],
|
||||||
>(name: Key): MenuPluginContext<Config> => ({
|
>(name: Key): MenuPluginContext<Config> => ({
|
||||||
getConfig: () => deepmerge(pluginBuilders[name].config, config.get(`plugins.${name}`)) as Config,
|
getConfig: () => deepmerge(pluginBuilders[name].config, config.get(`plugins.${name}`) ?? {}) as Config,
|
||||||
setConfig: (newConfig) => {
|
setConfig: (newConfig) => {
|
||||||
config.setPartial(`plugins.${name}`, newConfig);
|
config.setPartial(`plugins.${name}`, newConfig);
|
||||||
},
|
},
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import builder, { PictureInPicturePluginConfig } from './index';
|
|||||||
|
|
||||||
import { injectCSS } from '../utils/main';
|
import { injectCSS } from '../utils/main';
|
||||||
|
|
||||||
export default builder.createMain(({ getConfig, setConfig, send, handle }) => {
|
export default builder.createMain(({ getConfig, setConfig, send, handle, on }) => {
|
||||||
let isInPiP = false;
|
let isInPiP = false;
|
||||||
let originalPosition: number[];
|
let originalPosition: number[];
|
||||||
let originalSize: number[];
|
let originalSize: number[];
|
||||||
@ -96,8 +96,7 @@ export default builder.createMain(({ getConfig, setConfig, send, handle }) => {
|
|||||||
config ??= await getConfig();
|
config ??= await getConfig();
|
||||||
win ??= window;
|
win ??= window;
|
||||||
setConfig({ isInPiP });
|
setConfig({ isInPiP });
|
||||||
injectCSS(win.webContents, style);
|
on('picture-in-picture', () => {
|
||||||
ipcMain.on('picture-in-picture', () => {
|
|
||||||
togglePiP();
|
togglePiP();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -17,7 +17,7 @@ const createContext = <
|
|||||||
Key extends keyof PluginBuilderList,
|
Key extends keyof PluginBuilderList,
|
||||||
Config extends PluginBaseConfig = PluginBuilderList[Key]['config'],
|
Config extends PluginBaseConfig = PluginBuilderList[Key]['config'],
|
||||||
>(name: Key): PluginContext<Config> => ({
|
>(name: Key): PluginContext<Config> => ({
|
||||||
getConfig: () => deepmerge(pluginBuilders[name].config, config.get(`plugins.${name}`)) as Config,
|
getConfig: () => deepmerge(pluginBuilders[name].config, config.get(`plugins.${name}`) ?? {}) as Config,
|
||||||
setConfig: (newConfig) => {
|
setConfig: (newConfig) => {
|
||||||
config.setPartial(`plugins.${name}`, newConfig);
|
config.setPartial(`plugins.${name}`, newConfig);
|
||||||
},
|
},
|
||||||
@ -28,7 +28,7 @@ const preloadedPluginList = [];
|
|||||||
|
|
||||||
const pluginConfig = config.plugins.getPlugins();
|
const pluginConfig = config.plugins.getPlugins();
|
||||||
Object.entries(preloadPlugins)
|
Object.entries(preloadPlugins)
|
||||||
.filter(([id]) => deepmerge(pluginBuilders[id as keyof PluginBuilderList].config, pluginConfig[id as keyof PluginBuilderList])?.enabled)
|
.filter(([id]) => deepmerge(pluginBuilders[id as keyof PluginBuilderList].config, pluginConfig[id as keyof PluginBuilderList] ?? {}).enabled)
|
||||||
.forEach(async ([id]) => {
|
.forEach(async ([id]) => {
|
||||||
if (Object.hasOwn(preloadPlugins, id)) {
|
if (Object.hasOwn(preloadPlugins, id)) {
|
||||||
const factory = (preloadPlugins as Record<string, PreloadPluginFactory<PluginBaseConfig>>)[id];
|
const factory = (preloadPlugins as Record<string, PreloadPluginFactory<PluginBaseConfig>>)[id];
|
||||||
|
|||||||
@ -4,13 +4,13 @@ import { rendererPlugins } from 'virtual:RendererPlugins';
|
|||||||
|
|
||||||
import { deepmerge as createDeepmerge } from '@fastify/deepmerge';
|
import { deepmerge as createDeepmerge } from '@fastify/deepmerge';
|
||||||
|
|
||||||
|
import { pluginBuilders } from 'virtual:PluginBuilders';
|
||||||
|
|
||||||
import { PluginBaseConfig, RendererPluginContext, RendererPluginFactory } from './plugins/utils/builder';
|
import { PluginBaseConfig, RendererPluginContext, RendererPluginFactory } from './plugins/utils/builder';
|
||||||
|
|
||||||
import { startingPages } from './providers/extracted-data';
|
import { startingPages } from './providers/extracted-data';
|
||||||
import { setupSongControls } from './providers/song-controls-front';
|
import { setupSongControls } from './providers/song-controls-front';
|
||||||
import setupSongInfo from './providers/song-info-front';
|
import setupSongInfo from './providers/song-info-front';
|
||||||
import {mainPlugins} from "virtual:MainPlugins";
|
|
||||||
import {pluginBuilders} from "virtual:PluginBuilders";
|
|
||||||
|
|
||||||
const deepmerge = createDeepmerge();
|
const deepmerge = createDeepmerge();
|
||||||
|
|
||||||
@ -125,7 +125,7 @@ const createContext = <
|
|||||||
const rendererPluginList = Object.entries(rendererPlugins);
|
const rendererPluginList = Object.entries(rendererPlugins);
|
||||||
const rendererPluginResult = await Promise.allSettled(
|
const rendererPluginResult = await Promise.allSettled(
|
||||||
rendererPluginList
|
rendererPluginList
|
||||||
.filter(([id]) => deepmerge(pluginBuilders[id as keyof PluginBuilderList].config, pluginConfig[id as keyof PluginBuilderList])?.enabled)
|
.filter(([id]) => deepmerge(pluginBuilders[id as keyof PluginBuilderList].config, pluginConfig[id as keyof PluginBuilderList] ?? {}).enabled)
|
||||||
.map(async ([id, builder]) => {
|
.map(async ([id, builder]) => {
|
||||||
const context = createContext(id as keyof PluginBuilderList);
|
const context = createContext(id as keyof PluginBuilderList);
|
||||||
return [id, await (builder as RendererPluginFactory<PluginBaseConfig>)(context)] as const;
|
return [id, await (builder as RendererPluginFactory<PluginBaseConfig>)(context)] as const;
|
||||||
|
|||||||
Reference in New Issue
Block a user