s
This commit is contained in:
@@ -62,33 +62,6 @@ managed_policies_enabled() {
|
||||
esac
|
||||
}
|
||||
|
||||
find_tampermonkey_extension_dir() {
|
||||
seed_dir="${NEKO_TAMPERMONKEY_SEED_DIR:-/etc/neko/tampermonkey-seed}"
|
||||
ext_id="dhdgffkkebhmkfjojejmpbldmpobfkfo"
|
||||
for manifest in "$seed_dir/Default/Extensions/$ext_id"/*/manifest.json; do
|
||||
[ -f "$manifest" ] || continue
|
||||
dirname "$manifest"
|
||||
return 0
|
||||
done
|
||||
}
|
||||
|
||||
append_extension_dir() {
|
||||
extension_dir="${1:-}"
|
||||
[ -n "$extension_dir" ] || return 0
|
||||
[ -d "$extension_dir" ] || return 0
|
||||
if [ -n "$load_extension_dirs" ]; then
|
||||
load_extension_dirs="${load_extension_dirs},${extension_dir}"
|
||||
else
|
||||
load_extension_dirs="$extension_dir"
|
||||
fi
|
||||
}
|
||||
|
||||
find_youtube_auto_dismiss_extension_dir() {
|
||||
extension_dir="${NEKO_YOUTUBE_AUTO_DISMISS_EXTENSION_DIR:-/etc/neko/youtube-auto-dismiss-extension}"
|
||||
[ -f "$extension_dir/manifest.json" ] || return 0
|
||||
printf '%s' "$extension_dir"
|
||||
}
|
||||
|
||||
copy_seed_dir_if_missing() {
|
||||
src="${1:-}"
|
||||
dst="${2:-}"
|
||||
@@ -133,7 +106,22 @@ if not isinstance(source, dict):
|
||||
target = load(target_preferences)
|
||||
settings = target.setdefault("extensions", {}).setdefault("settings", {})
|
||||
current = settings.get(ext_id)
|
||||
if not isinstance(current, dict) or current.get("state") != 1:
|
||||
|
||||
def should_replace_current(value: object) -> bool:
|
||||
if not isinstance(value, dict):
|
||||
return True
|
||||
if value.get("state") != 1:
|
||||
return True
|
||||
if value.get("from_webstore") is not True:
|
||||
return True
|
||||
path = str(value.get("path") or "")
|
||||
if path.startswith("/"):
|
||||
return True
|
||||
if value.get("location") == 8:
|
||||
return True
|
||||
return False
|
||||
|
||||
if should_replace_current(current):
|
||||
settings[ext_id] = source
|
||||
target_preferences.parent.mkdir(parents=True, exist_ok=True)
|
||||
target_preferences.write_text(json.dumps(target, ensure_ascii=False, separators=(",", ":")), encoding="utf-8")
|
||||
@@ -181,15 +169,6 @@ profile_dir="/home/neko/.config/chromium"
|
||||
if [ "$family" = "google-chrome" ]; then
|
||||
profile_dir="/home/neko/.config/google-chrome"
|
||||
fi
|
||||
tampermonkey_extension_dir="$(find_tampermonkey_extension_dir || true)"
|
||||
youtube_auto_dismiss_extension_dir="$(find_youtube_auto_dismiss_extension_dir || true)"
|
||||
load_extension_dirs=""
|
||||
append_extension_dir "$tampermonkey_extension_dir"
|
||||
append_extension_dir "$youtube_auto_dismiss_extension_dir"
|
||||
load_extension_flags=""
|
||||
if [ -n "$load_extension_dirs" ]; then
|
||||
load_extension_flags="--load-extension=$load_extension_dirs"
|
||||
fi
|
||||
|
||||
render_mode="${NEKO_BROWSER_RENDER_MODE:-auto}"
|
||||
render_flags="--disable-gpu --use-gl=swiftshader --enable-unsafe-swiftshader"
|
||||
@@ -244,7 +223,6 @@ launch_browser() {
|
||||
--remote-debugging-address=127.0.0.1 \
|
||||
--remote-debugging-port=9222 \
|
||||
--user-data-dir="$profile_dir" \
|
||||
${load_extension_flags} \
|
||||
--password-store=basic \
|
||||
--no-first-run \
|
||||
--new-window \
|
||||
|
||||
@@ -46,7 +46,6 @@ services:
|
||||
- "./external-extensions:/usr/share/chromium/extensions:ro"
|
||||
- "./external-extensions:/usr/share/chromium-browser/extensions:ro"
|
||||
- "./tampermonkey-seed:/etc/neko/tampermonkey-seed:ro"
|
||||
- "./youtube-auto-dismiss-extension:/etc/neko/youtube-auto-dismiss-extension:ro"
|
||||
- "./provisioning:/var/www/provisioning:ro"
|
||||
- "./browser-launch.sh:/etc/neko/browser-launch.sh:ro"
|
||||
- "./${NEKO_BROWSER_SUPERVISOR_CONF}:/etc/neko/supervisord/${NEKO_BROWSER_SUPERVISOR_CONF}:ro"
|
||||
@@ -74,7 +73,6 @@ services:
|
||||
- "./external-extensions:/usr/share/chromium/extensions:ro"
|
||||
- "./external-extensions:/usr/share/chromium-browser/extensions:ro"
|
||||
- "./tampermonkey-seed:/etc/neko/tampermonkey-seed:ro"
|
||||
- "./youtube-auto-dismiss-extension:/etc/neko/youtube-auto-dismiss-extension:ro"
|
||||
- "./provisioning:/var/www/provisioning:ro"
|
||||
- "./browser-launch.sh:/etc/neko/browser-launch.sh:ro"
|
||||
- "./${NEKO_BROWSER_SUPERVISOR_CONF}:/etc/neko/supervisord/${NEKO_BROWSER_SUPERVISOR_CONF}:ro"
|
||||
@@ -102,7 +100,6 @@ services:
|
||||
- "./external-extensions:/usr/share/chromium/extensions:ro"
|
||||
- "./external-extensions:/usr/share/chromium-browser/extensions:ro"
|
||||
- "./tampermonkey-seed:/etc/neko/tampermonkey-seed:ro"
|
||||
- "./youtube-auto-dismiss-extension:/etc/neko/youtube-auto-dismiss-extension:ro"
|
||||
- "./provisioning:/var/www/provisioning:ro"
|
||||
- "./browser-launch.sh:/etc/neko/browser-launch.sh:ro"
|
||||
- "./${NEKO_BROWSER_SUPERVISOR_CONF}:/etc/neko/supervisord/${NEKO_BROWSER_SUPERVISOR_CONF}:ro"
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
{
|
||||
"manifest_version": 3,
|
||||
"name": "YouTube Studio Auto Dismiss",
|
||||
"version": "1.1.0",
|
||||
"description": "Auto-clicks visible Dismiss buttons on YouTube Studio livestreaming pages.",
|
||||
"content_scripts": [
|
||||
{
|
||||
"matches": [
|
||||
"https://studio.youtube.com/channel/*/livestreaming",
|
||||
"https://studio.youtube.com/video/*/livestreaming",
|
||||
"https://studio.youtube.com/*/livestreaming"
|
||||
],
|
||||
"js": ["youtube-studio-auto-dismiss.js"],
|
||||
"run_at": "document_idle"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,46 +0,0 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
function isVisible(element) {
|
||||
var style = window.getComputedStyle(element);
|
||||
return style.display !== "none" && style.visibility !== "hidden" && element.offsetParent !== null;
|
||||
}
|
||||
|
||||
function clickElement(element) {
|
||||
if (!element) return;
|
||||
element.dispatchEvent(
|
||||
new MouseEvent("click", {
|
||||
view: window,
|
||||
bubbles: true,
|
||||
cancelable: true,
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
function findDismiss(root) {
|
||||
var buttons = (root || document).querySelectorAll("button");
|
||||
for (var i = 0; i < buttons.length; i += 1) {
|
||||
var button = buttons[i];
|
||||
var text = button.innerText ? button.innerText.trim() : "";
|
||||
if (text === "Dismiss" && isVisible(button)) {
|
||||
return button;
|
||||
}
|
||||
if (button.shadowRoot) {
|
||||
var shadowButton = findDismiss(button.shadowRoot);
|
||||
if (shadowButton) return shadowButton;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function run() {
|
||||
clickElement(findDismiss(document));
|
||||
}
|
||||
|
||||
if (document.readyState === "complete") {
|
||||
run();
|
||||
} else {
|
||||
window.addEventListener("load", run, { once: true });
|
||||
}
|
||||
window.setInterval(run, 5000);
|
||||
})();
|
||||
Reference in New Issue
Block a user