Update 'mpv/' and'yt-dlp/'

This commit is contained in:
M.R. Firmansyah 2025-02-16 16:21:49 +07:00
parent 54df3e3e0f
commit ea31ad1d85
10 changed files with 179 additions and 2 deletions

View file

@ -1 +1,2 @@
osc=no osc=no
idle=yes

1
mpv/.config/mpv/osc.conf Normal file
View file

@ -0,0 +1 @@
greenandgrumpy=yes

View file

@ -0,0 +1,6 @@
uselocaldb=1
webport=8000
webportrangeend=8004
unsafefilebrowsing=1
verbose=0
osd-messages=1

View file

@ -0,0 +1 @@
greenandgrumpy=yes

View file

@ -0,0 +1,166 @@
"use strict";
// This is the plugin file for MPV
/*Path handling, script idea came from webtorrent plugin :
https://github.com/mrxdst/webtorrent-mpv-hook
ES5 syntax works only.
*/
var options = {
uselocaldb: 1,
filebrowserpaths: "",
webport: 8000,
webportrangeend: 8005,
address: "",
unsafefilebrowsing: 1,
verbose: 0,
"osd-messages": 1,
};
mp.options.read_options(options, "mpvremote");
var platform = mp.utils.getenv("windir") ? "win32" : "unix";
var tempdir = mp.utils.getenv("TEMP") || mp.utils.getenv("TMP") || "/tmp"; // Temp dir
var pathsep = platform === "win32" ? "\\" : "/";
function createMPVSocketFilename() {
var i = 0;
var fname = "";
while (true) {
fname =
platform === "win32"
? "\\\\.\\pipe\\mpvremote" + i
: "/tmp/mpvremote" + i;
i++;
if (!mp.utils.file_info(fname)) break;
}
return fname;
}
function getMPVSocket() {
var socketName = mp.get_property("input-ipc-server");
if (!socketName) {
var fname = createMPVSocketFilename();
mp.set_property("input-ipc-server", fname);
// Check socket
socketName = mp.get_property("input-ipc-server");
}
// TODO raise error if socket still not exists!
return socketName;
}
function getScriptPath(filename) {
var script = mp.get_script_file().replace(/\\/g, "\\\\");
var p = mp.command_native({
name: "subprocess",
args: ["node", "-p", "require('fs').realpathSync('" + script + "')"],
playback_only: false,
capture_stdout: true,
});
var s = p.stdout.split(pathsep);
s[s.length - 1] = filename;
return s.join(pathsep);
}
var scriptPath = getScriptPath("remoteServer.js");
var watchlistHandlerPath = getScriptPath("watchlisthandler.js");
var socketName = getMPVSocket();
var serverArgs = [
"node",
scriptPath,
socketName,
"-p " + options.webport,
"-e " + options.webportrangeend,
];
if (options.verbose) serverArgs.push("--verbose");
if (options.uselocaldb) serverArgs.push("--uselocaldb");
if (options.filebrowserpaths.length > 0) {
var pathsArr = options.filebrowserpaths.split("';'");
serverArgs.push("--filebrowserpaths");
for (var i = 0; i < pathsArr.length; i++) {
serverArgs.push(pathsArr[i]);
}
}
if (options.unsafefilebrowsing) serverArgs.push("--unsafefilebrowsing");
if (options["osd-messages"]) serverArgs.push("--osd-messages");
mp.command_native_async(
{
name: "subprocess",
args: serverArgs,
playback_only: false,
capture_stderr: true,
},
function (success, result, error) {
mp.msg.info(JSON.stringify(success));
mp.msg.info(JSON.stringify(result));
mp.msg.info(JSON.stringify(error));
}
);
function setFileLocalOptions(options) {
for (var key in options) {
if (options.hasOwnProperty(key)) mp.set_property(key, options[key]);
}
}
/* For handling file-local-option
Currently storing file-local-options via file-local-options.txt
because have to get file-local-options before the file fully loaded.
*/
mp.add_hook("on_load", 50, function () {
try {
/*
JSON structure should be something like this:
{
"filename1": {"http-header-fields": ["test: a", "test1: b"]},
"filename2": {"http-header-fields": ["test: a", "test1: b"]}
}
*/
mp.set_property("force-media-title", "");
// var scriptDir = mp.get_script_directory();
var fileName = mp.get_property("path");
var p = tempdir + "/" + "file-local-options.txt";
var fileLocalOptions = mp.utils.read_file(p);
fileLocalOptions = JSON.parse(fileLocalOptions);
// Find filename in the file-local-options
for (var key in fileLocalOptions) {
if (key === fileName) setFileLocalOptions(fileLocalOptions[key]);
}
} catch (exc) {
mp.msg.info(exc);
}
});
// On unload MPV, need this for saving playbacktime to database
if (options.uselocaldb) {
mp.add_hook("on_unload", 50, function () {
var currentPlaybackTime = mp.get_property("playback-time");
var currentFilename = mp.get_property("path");
var currentPercentPos = mp.get_property("percent-pos");
/* Calling binary,
not the ideal solution, but I can't find any information regarding hook supporting on JSON-IPC.
Fetch API not supported by MuJS
*/
mp.command_native_async({
name: "subprocess",
args: [
"node",
watchlistHandlerPath,
currentFilename,
currentPlaybackTime,
currentPercentPos,
],
playback_only: false,
capture_stderr: true,
});
mp.msg.info("Mediastatus updated");
});
}

Binary file not shown.

View file

@ -0,0 +1 @@
/usr/local/lib/node_modules/mpv-remote/remoteServer.js

View file

@ -0,0 +1 @@
/usr/local/lib/node_modules/mpv-remote/watchlisthandler.js

View file

@ -1,4 +1,4 @@
-o "/media/Data/Media/Video/Kanal/%(uploader)s/%(playlist&{}|)s/%(playlist_index&{} - |)s%(title)s.%(ext)s" -o "/media/Data/Media/Kanal/%(uploader)s/%(playlist&{}|)s/%(playlist_index&{} - |)s%(title)s [%(id)s].%(ext)s"
-S "res:720,codec,br,ext" -S "res:720,codec,br,ext"
--ignore-errors --ignore-errors
--downloader aria2c --downloader aria2c