This commit is contained in:
eric
2026-05-19 09:19:52 +00:00
parent 585bcd9500
commit b617555360
30 changed files with 477 additions and 207 deletions

View File

@@ -362,8 +362,13 @@ resolve_neko_profile_dir() {
resolve_neko_profile_dir_for_instance() {
local idx="${1:-1}"
local base
local base override
base="${NEKO_PROFILE_HOST_DIR:-$(resolve_neko_profile_dir)}"
eval "override=\"\${NEKO_PROFILE_HOST_DIR_${idx}:-}\""
if [ -n "$override" ]; then
printf '%s' "$override"
return 0
fi
case "$idx" in
1) printf '%s' "$base" ;;
*) printf '%s-%s' "$base" "$idx" ;;
@@ -541,8 +546,22 @@ neko_managed_policies_enabled() {
esac
}
copy_neko_tampermonkey_seed_dir() {
local src="${1:-}" dst="${2:-}" marker="${3:-}"
[ -e "$src" ] || return 0
if [ -e "$dst" ]; then
if [ -z "$marker" ] || grep -R -a -q "$marker" "$dst" 2>/dev/null; then
return 0
fi
rm -rf "$dst" 2>/dev/null || true
fi
mkdir -p "$(dirname "$dst")"
cp -a "$src" "$dst" 2>/dev/null || true
rm -f "$dst/LOCK" 2>/dev/null || true
}
seed_neko_tampermonkey_profile() {
local target="${1:-}" donor="${2:-}" rel src dst
local target="${1:-}" donor="${2:-}" rel src dst marker
[ -n "$target" ] || return 0
if [ -z "$donor" ] || [ ! -d "$donor/Default/Extensions/dhdgffkkebhmkfjojejmpbldmpobfkfo" ]; then
donor="$(find_neko_tampermonkey_seed_profile "$target")"
@@ -555,21 +574,17 @@ seed_neko_tampermonkey_profile() {
"Local Extension Settings/dhdgffkkebhmkfjojejmpbldmpobfkfo"; do
src="$donor/Default/$rel"
dst="$target/Default/$rel"
[ -e "$src" ] || continue
[ ! -e "$dst" ] || continue
mkdir -p "$(dirname "$dst")"
cp -a "$src" "$dst" 2>/dev/null || true
rm -f "$dst/LOCK" 2>/dev/null || true
marker="Tampermonkey"
case "$rel" in
"Local Extension Settings/"*) marker="YouTube Studio Auto Dismiss" ;;
esac
copy_neko_tampermonkey_seed_dir "$src" "$dst" "$marker"
done
rel="Managed Extension Settings/dhdgffkkebhmkfjojejmpbldmpobfkfo"
src="$donor/Default/$rel"
dst="$target/Default/$rel"
if neko_managed_policies_enabled; then
if [ -e "$src" ] && [ ! -e "$dst" ]; then
mkdir -p "$(dirname "$dst")"
cp -a "$src" "$dst" 2>/dev/null || true
rm -f "$dst/LOCK" 2>/dev/null || true
fi
copy_neko_tampermonkey_seed_dir "$src" "$dst" "YouTube Studio Auto Dismiss"
else
rm -rf "$dst" 2>/dev/null || true
fi
@@ -626,7 +641,22 @@ if not isinstance(source, dict):
raise SystemExit(0)
target = load(target_pref)
settings = target.setdefault("extensions", {}).setdefault("settings", {})
if ext_id not in settings:
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(settings.get(ext_id)):
settings[ext_id] = source
target_pref.parent.mkdir(parents=True, exist_ok=True)
target_pref.write_text(json.dumps(target, ensure_ascii=False, separators=(",", ":")), encoding="utf-8")
@@ -746,6 +776,9 @@ ensure_runtime_dirs_owned_by_live() {
backup_config \
.pm2 \
.process_runner \
web-console/out \
web-console/.next \
web-console/node_modules \
services/neko/data
do
path="$ROOT_DIR/$rel"
@@ -1318,7 +1351,7 @@ install_neko_browser() {
export NEKO_IMAGE="$(resolve_neko_image)"
export NEKO_BROWSER_SUPERVISOR_CONF="$(resolve_neko_supervisor_conf)"
export NEKO_MANAGED_POLICIES="${NEKO_MANAGED_POLICIES:-0}"
export NEKO_DESKTOP_SCREEN="${NEKO_DESKTOP_SCREEN:-1920x1080@30}"
export NEKO_DESKTOP_SCREEN="${NEKO_DESKTOP_SCREEN:-1280x720@15}"
export NEKO_WEBRTC_UDP_RANGE="${NEKO_WEBRTC_UDP_RANGE:-52000-52099}"
export NEKO_WEBRTC_UDP_RANGE_1="${NEKO_WEBRTC_UDP_RANGE_1:-$NEKO_WEBRTC_UDP_RANGE}"
export NEKO_WEBRTC_UDP_RANGE_2="${NEKO_WEBRTC_UDP_RANGE_2:-52101-52199}"

View File

@@ -314,8 +314,22 @@ neko_managed_policies_enabled() {
esac
}
copy_neko_tampermonkey_seed_dir() {
local src="${1:-}" dst="${2:-}" marker="${3:-}"
[ -e "$src" ] || return 0
if [ -e "$dst" ]; then
if [ -z "$marker" ] || grep -R -a -q "$marker" "$dst" 2>/dev/null; then
return 0
fi
rm -rf "$dst" 2>/dev/null || true
fi
mkdir -p "$(dirname "$dst")"
cp -a "$src" "$dst" 2>/dev/null || true
rm -f "$dst/LOCK" 2>/dev/null || true
}
seed_neko_tampermonkey_profile() {
local target="${1:-}" donor="${2:-}" rel src dst
local target="${1:-}" donor="${2:-}" rel src dst marker
[ -n "$target" ] || return 0
if [ -z "$donor" ] || [ ! -d "$donor/Default/Extensions/dhdgffkkebhmkfjojejmpbldmpobfkfo" ]; then
donor="$(find_neko_tampermonkey_seed_profile "$target")"
@@ -328,21 +342,17 @@ seed_neko_tampermonkey_profile() {
"Local Extension Settings/dhdgffkkebhmkfjojejmpbldmpobfkfo"; do
src="$donor/Default/$rel"
dst="$target/Default/$rel"
[ -e "$src" ] || continue
[ ! -e "$dst" ] || continue
mkdir -p "$(dirname "$dst")"
cp -a "$src" "$dst" 2>/dev/null || true
rm -f "$dst/LOCK" 2>/dev/null || true
marker="Tampermonkey"
case "$rel" in
"Local Extension Settings/"*) marker="YouTube Studio Auto Dismiss" ;;
esac
copy_neko_tampermonkey_seed_dir "$src" "$dst" "$marker"
done
rel="Managed Extension Settings/dhdgffkkebhmkfjojejmpbldmpobfkfo"
src="$donor/Default/$rel"
dst="$target/Default/$rel"
if neko_managed_policies_enabled; then
if [ -e "$src" ] && [ ! -e "$dst" ]; then
mkdir -p "$(dirname "$dst")"
cp -a "$src" "$dst" 2>/dev/null || true
rm -f "$dst/LOCK" 2>/dev/null || true
fi
copy_neko_tampermonkey_seed_dir "$src" "$dst" "YouTube Studio Auto Dismiss"
else
rm -rf "$dst" 2>/dev/null || true
fi
@@ -399,7 +409,22 @@ if not isinstance(source, dict):
raise SystemExit(0)
target = load(target_pref)
settings = target.setdefault("extensions", {}).setdefault("settings", {})
if ext_id not in settings:
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(settings.get(ext_id)):
settings[ext_id] = source
target_pref.parent.mkdir(parents=True, exist_ok=True)
target_pref.write_text(json.dumps(target, ensure_ascii=False, separators=(",", ":")), encoding="utf-8")