summaryrefslogtreecommitdiffstats
path: root/player/javascript
diff options
context:
space:
mode:
authorAvi Halachmi (:avih) <avihpit@yahoo.com>2019-12-21 12:13:15 +0200
committerAvi Halachmi (:avih) <avihpit@yahoo.com>2019-12-21 14:57:10 +0200
commit71ddb22b39ec3cce1c39b7f53975e51e94d257d4 (patch)
treea475a493535ffae5e01eaff0707fb8c75fd7f64e /player/javascript
parent05fb6f906de25016faff2bdedd1f47f1e4077554 (diff)
downloadmpv-71ddb22b39ec3cce1c39b7f53975e51e94d257d4.tar.bz2
mpv-71ddb22b39ec3cce1c39b7f53975e51e94d257d4.tar.xz
js: read_options: support on_update (match 478a321d)
This is a bit different than the lua code: on script-opts change it simply re-applies the conf-file and script-opts to the options object, and if this results in any changed value at options then on_update is called with the changelist as argument. This allows a value to revert back to the conf-file value if the matching script-opts key had a different value and then got deleted. It also guarantees to call back whenever the options object is modified, which the lua code doesn't do (e.g. if the caller changed a value and the observer changed it back - it won't detect a change).
Diffstat (limited to 'player/javascript')
-rw-r--r--player/javascript/defaults.js18
1 files changed, 16 insertions, 2 deletions
diff --git a/player/javascript/defaults.js b/player/javascript/defaults.js
index 9694b852d7..4520373886 100644
--- a/player/javascript/defaults.js
+++ b/player/javascript/defaults.js
@@ -511,8 +511,8 @@ g.require = new_require(SCRIPTDIR_META + "/" + main_script[1]);
/**********************************************************************
* mp.options
*********************************************************************/
-function read_options(opts, id) {
- id = String(typeof id != "undefined" ? id : mp.get_script_name());
+function read_options(opts, id, on_update) {
+ id = String(id ? id : mp.get_script_name());
mp.msg.debug("reading options for " + id);
var conf, fname = "~~/script-opts/" + id + ".conf";
@@ -556,6 +556,20 @@ function read_options(opts, id) {
else
mp.msg.error(info, "Error: can't convert '" + val + "' to " + type);
});
+
+ if (on_update) {
+ mp.observe_property("options/script-opts", "native", function(_n, _v) {
+ var saved = JSON.parse(JSON.stringify(opts)); // clone
+ var changelist = {}, changed = false;
+ read_options(opts, id); // re-apply conf-file + script-opts
+ for (var key in opts) {
+ if (opts[key] != saved[key]) // type always stays the same
+ changelist[key] = changed = true;
+ }
+ if (changed)
+ on_update(changelist);
+ });
+ }
}
mp.options = { read_options: read_options };