mirror of
https://github.com/th-ch/youtube-music.git
synced 2026-01-11 10:31:47 +00:00
Initial commit - app + 4 plugins
This commit is contained in:
1
plugins/adblocker/.gitignore
vendored
Normal file
1
plugins/adblocker/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
detector.buffer
|
||||
3
plugins/adblocker/back.js
Normal file
3
plugins/adblocker/back.js
Normal file
@ -0,0 +1,3 @@
|
||||
const { blockWindowAds } = require("./blocker");
|
||||
|
||||
module.exports = win => blockWindowAds(win.webContents);
|
||||
12
plugins/adblocker/blocker.js
Normal file
12
plugins/adblocker/blocker.js
Normal file
@ -0,0 +1,12 @@
|
||||
const { initialize, containsAds } = require("./contains-ads");
|
||||
|
||||
module.exports.blockWindowAds = webContents => {
|
||||
initialize();
|
||||
webContents.session.webRequest.onBeforeRequest(
|
||||
["*://*./*"],
|
||||
(details, cb) => {
|
||||
const shouldBeBlocked = containsAds(details.url);
|
||||
cb({ cancel: shouldBeBlocked });
|
||||
}
|
||||
);
|
||||
};
|
||||
24
plugins/adblocker/contains-ads.js
Normal file
24
plugins/adblocker/contains-ads.js
Normal file
@ -0,0 +1,24 @@
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
const Blocker = require("ad-block");
|
||||
|
||||
const client = new Blocker.AdBlockClient();
|
||||
const file = path.resolve(__dirname, "detector.buffer");
|
||||
|
||||
module.exports.client = client;
|
||||
module.exports.initialize = () =>
|
||||
new Promise((resolve, reject) => {
|
||||
fs.readFile(file, (err, buffer) => {
|
||||
if (err) {
|
||||
return reject(err);
|
||||
}
|
||||
client.deserialize(buffer);
|
||||
return resolve();
|
||||
});
|
||||
});
|
||||
|
||||
const none = Blocker.FilterOptions.noFilterOption;
|
||||
const isAd = (req, base) => client.matches(req, none, base);
|
||||
|
||||
module.exports.containsAds = (req, base) => isAd(req, base);
|
||||
module.exports.isAd = isAd;
|
||||
67
plugins/adblocker/generator.js
Normal file
67
plugins/adblocker/generator.js
Normal file
@ -0,0 +1,67 @@
|
||||
// This file generates the detector buffer
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
const Blocker = require("ad-block");
|
||||
const https = require("https");
|
||||
|
||||
const SOURCES = [
|
||||
"https://raw.githubusercontent.com/kbinani/adblock-youtube-ads/master/signed.txt"
|
||||
];
|
||||
|
||||
function parseAdblockList(client, adblockList) {
|
||||
const urls = adblockList.split("\n");
|
||||
const totalSize = urls.length;
|
||||
console.log(
|
||||
"Parsing " + totalSize + " urls (this can take a couple minutes)."
|
||||
);
|
||||
urls.map(line => client.parse(line));
|
||||
console.log("Created buffer.");
|
||||
}
|
||||
|
||||
function writeBuffer(client) {
|
||||
const output = path.resolve(__dirname, "detector.buffer");
|
||||
fs.writeFile(output, client.serialize(64), err => {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return;
|
||||
}
|
||||
console.log("Wrote buffer to detector.buffer!");
|
||||
});
|
||||
}
|
||||
|
||||
function generateDetectorBuffer() {
|
||||
const client = new Blocker.AdBlockClient();
|
||||
let nbSourcesFetched = 0;
|
||||
|
||||
// fetch updated versions
|
||||
SOURCES.forEach(source => {
|
||||
console.log("Downloading " + source);
|
||||
https
|
||||
.get(source, resp => {
|
||||
let data = "";
|
||||
|
||||
// A chunk of data has been recieved.
|
||||
resp.on("data", chunk => {
|
||||
data += chunk;
|
||||
});
|
||||
|
||||
// The whole response has been received. Print out the result.
|
||||
resp.on("end", () => {
|
||||
parseAdblockList(client, data);
|
||||
nbSourcesFetched++;
|
||||
|
||||
if (nbSourcesFetched === SOURCES.length) {
|
||||
writeBuffer(client);
|
||||
}
|
||||
});
|
||||
})
|
||||
.on("error", err => {
|
||||
console.log("Error: " + err.message);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = generateDetectorBuffer;
|
||||
if (require.main === module) {
|
||||
generateDetectorBuffer();
|
||||
}
|
||||
Reference in New Issue
Block a user