feat(plugin): migrating plugins to new plugin system (WIP)

Co-authored-by: JellyBrick <shlee1503@naver.com>
This commit is contained in:
Su-Yong
2023-11-10 21:32:05 +09:00
parent afe6accab8
commit e0e17cac99
18 changed files with 538 additions and 273 deletions

View File

@ -0,0 +1,16 @@
import { createPluginBuilder } from '../utils/builder';
const builder = createPluginBuilder('quality-changer', {
name: 'Quality Changer',
config: {
enabled: false,
},
});
export default builder;
declare global {
interface PluginBuilderList {
[builder.id]: typeof builder;
}
}

View File

@ -1,13 +1,17 @@
import { ipcMain, dialog, BrowserWindow } from 'electron';
import { dialog, BrowserWindow } from 'electron';
export default (win: BrowserWindow) => {
ipcMain.handle('qualityChanger', async (_, qualityLabels: string[], currentIndex: number) => await dialog.showMessageBox(win, {
type: 'question',
buttons: qualityLabels,
defaultId: currentIndex,
title: 'Choose Video Quality',
message: 'Choose Video Quality:',
detail: `Current Quality: ${qualityLabels[currentIndex]}`,
cancelId: -1,
}));
};
import builder from './index';
export default builder.createMain(({ handle }) => ({
onLoad(win: BrowserWindow) {
handle('qualityChanger', async (qualityLabels: string[], currentIndex: number) => await dialog.showMessageBox(win, {
type: 'question',
buttons: qualityLabels,
defaultId: currentIndex,
title: 'Choose Video Quality',
message: 'Choose Video Quality:',
detail: `Current Quality: ${qualityLabels[currentIndex]}`,
cancelId: -1,
}));
}
}));

View File

@ -1,38 +1,50 @@
import qualitySettingsTemplate from './templates/qualitySettingsTemplate.html?raw';
import builder from './';
import { ElementFromHtml } from '../utils/renderer';
import { YoutubePlayer } from '../../types/youtube-player';
function $(selector: string): HTMLElement | null {
return document.querySelector(selector);
}
// export default () => {
// document.addEventListener('apiLoaded', setup, { once: true, passive: true });
// };
const qualitySettingsButton = ElementFromHtml(qualitySettingsTemplate);
export default builder.createRenderer(({ invoke }) => {
function $(selector: string): HTMLElement | null {
return document.querySelector(selector);
}
function setup(event: CustomEvent<YoutubePlayer>) {
const api = event.detail;
const qualitySettingsButton = ElementFromHtml(qualitySettingsTemplate);
$('.top-row-buttons.ytmusic-player')?.prepend(qualitySettingsButton);
function setup(event: CustomEvent<YoutubePlayer>) {
const api = event.detail;
qualitySettingsButton.addEventListener('click', function chooseQuality() {
setTimeout(() => $('#player')?.click());
$('.top-row-buttons.ytmusic-player')?.prepend(qualitySettingsButton);
const qualityLevels = api.getAvailableQualityLevels();
qualitySettingsButton.addEventListener('click', function chooseQuality() {
setTimeout(() => $('#player')?.click());
const currentIndex = qualityLevels.indexOf(api.getPlaybackQuality());
const qualityLevels = api.getAvailableQualityLevels();
window.ipcRenderer.invoke('qualityChanger', api.getAvailableQualityLabels(), currentIndex).then((promise: { response: number }) => {
if (promise.response === -1) {
return;
}
const currentIndex = qualityLevels.indexOf(api.getPlaybackQuality());
const newQuality = qualityLevels[promise.response];
api.setPlaybackQualityRange(newQuality);
api.setPlaybackQuality(newQuality);
invoke<{ response: number }>('qualityChanger', api.getAvailableQualityLabels(), currentIndex)
.then((promise) => {
if (promise.response === -1) {
return;
}
const newQuality = qualityLevels[promise.response];
api.setPlaybackQualityRange(newQuality);
api.setPlaybackQuality(newQuality);
});
});
});
}
}
export default () => {
document.addEventListener('apiLoaded', setup, { once: true, passive: true });
};
return {
onLoad() {
console.log('qc');
document.addEventListener('apiLoaded', setup, { once: true, passive: true });
}
};
});