Co-authored-by: Su-Yong <simssy2205@gmail.com>
This commit is contained in:
JellyBrick
2023-11-27 00:18:34 +09:00
parent 3a1b77ebd8
commit 563d431c00
17 changed files with 563 additions and 679 deletions

View File

@ -1,6 +1,11 @@
import { blockers } from './types';
import { createPlugin } from '@/utils';
import { isBlockerEnabled, loadAdBlockerEngine, unloadAdBlockerEngine } from '@/plugins/adblocker/blocker';
import { createPluginBuilder } from '../utils/builder';
import injectCliqzPreload from '@/plugins/adblocker/injectors/inject-cliqz-preload';
import { inject, isInjected } from '@/plugins/adblocker/injectors/inject';
import type { BrowserWindow } from 'electron';
interface AdblockerConfig {
/**
@ -31,7 +36,7 @@ interface AdblockerConfig {
disableDefaultLists: boolean;
}
const builder = createPluginBuilder('adblocker', {
export default createPlugin({
name: 'Adblocker',
restartNeeded: false,
config: {
@ -41,12 +46,76 @@ const builder = createPluginBuilder('adblocker', {
additionalBlockLists: [],
disableDefaultLists: false,
} as AdblockerConfig,
});
menu: async ({ getConfig, setConfig }) => {
const config = await getConfig();
export default builder;
return [
{
label: 'Blocker',
submenu: Object.values(blockers).map((blocker) => ({
label: blocker,
type: 'radio',
checked: (config.blocker || blockers.WithBlocklists) === blocker,
click() {
setConfig({ blocker });
},
})),
},
];
},
backend: {
mainWindow: null as BrowserWindow | null,
async start({ getConfig, window }) {
const config = await getConfig();
this.mainWindow = window;
declare global {
interface PluginBuilderList {
[builder.id]: typeof builder;
if (config.blocker === blockers.WithBlocklists) {
await loadAdBlockerEngine(
window.webContents.session,
config.cache,
config.additionalBlockLists,
config.disableDefaultLists,
);
}
},
stop({ window }) {
if (isBlockerEnabled(window.webContents.session)) {
unloadAdBlockerEngine(window.webContents.session);
}
},
async onConfigChange(newConfig) {
console.log('Adblocker config changed', newConfig);
if (this.mainWindow) {
if (newConfig.blocker === blockers.WithBlocklists && !isBlockerEnabled(this.mainWindow.webContents.session)) {
await loadAdBlockerEngine(
this.mainWindow.webContents.session,
newConfig.cache,
newConfig.additionalBlockLists,
newConfig.disableDefaultLists,
);
}
}
},
},
preload: {
async start({ getConfig }) {
const config = await getConfig();
if (config.blocker === blockers.WithBlocklists) {
// Preload adblocker to inject scripts/styles
await injectCliqzPreload();
} else if (config.blocker === blockers.InPlayer) {
inject();
}
},
async onConfigChange(newConfig) {
if (newConfig.blocker === blockers.WithBlocklists) {
await injectCliqzPreload();
} else if (newConfig.blocker === blockers.InPlayer) {
if (!isInjected()) {
inject();
}
}
},
}
}
});