aboutsummaryrefslogtreecommitdiff
path: root/dotfiles/scripts
diff options
context:
space:
mode:
authorneodarz <neodarz@neodarz.net>2020-10-06 21:43:04 +0200
committerneodarz <neodarz@neodarz.net>2020-10-06 21:43:04 +0200
commita9933887eca7a6885f6f738845f846a5f8f5a114 (patch)
tree7b8862233827c448e5bf91221c96524592f9b016 /dotfiles/scripts
parent52060dfbdfac04938393b4fdc441415fa08abe6e (diff)
downloaddotfiles_dotdrop-a9933887eca7a6885f6f738845f846a5f8f5a114.tar.xz
dotfiles_dotdrop-a9933887eca7a6885f6f738845f846a5f8f5a114.zip
Add ability to launch a video via a mpv from firefox
It just send the url to an mpv instance, for example launched via mpv --idle
Diffstat (limited to '')
-rwxr-xr-xdotfiles/scripts/ff2mpv.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/dotfiles/scripts/ff2mpv.py b/dotfiles/scripts/ff2mpv.py
new file mode 100755
index 0000000..acc5d4a
--- /dev/null
+++ b/dotfiles/scripts/ff2mpv.py
@@ -0,0 +1,49 @@
+#!/usr/bin/env python3
+
+import sys
+import struct
+import json
+from subprocess import Popen, DEVNULL
+
+
+def main():
+ message = get_message()
+ url = message.get("url")
+
+ # Need to install playerctl [1] and mpv-mpris [2]
+ # [1] https://github.com/altdesktop/playerctl
+ # [2] https://github.com/hoyon/mpv-mpris
+ # To use with https://addons.mozilla.org/fr/firefox/addon/ff2mpv/
+ # Tips: to have mpv in "deamon mode" use mpv --idle
+
+ args = ["playerctl", "--player=mpv", "open", url]
+ Popen(args, stdin=DEVNULL, stdout=DEVNULL, stderr=DEVNULL)
+
+ args = ["playerctl", "--player=mpv", "play"]
+ Popen(args, stdin=DEVNULL, stdout=DEVNULL, stderr=DEVNULL)
+
+ # Need to respond something to avoid "Error: An unexpected error occurred"
+ # in Browser Console.
+ send_message("ok")
+
+
+# https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Native_messaging#App_side
+def get_message():
+ raw_length = sys.stdin.buffer.read(4)
+ if not raw_length:
+ return {}
+ length = struct.unpack("@I", raw_length)[0]
+ message = sys.stdin.buffer.read(length).decode("utf-8")
+ return json.loads(message)
+
+
+def send_message(message):
+ content = json.dumps(message).encode("utf-8")
+ length = struct.pack("@I", len(content))
+ sys.stdout.buffer.write(length)
+ sys.stdout.buffer.write(content)
+ sys.stdout.buffer.flush()
+
+
+if __name__ == "__main__":
+ main()