From ef842671015b86618a57994584c668f8bb06889c Mon Sep 17 00:00:00 2001
From: neodarz <neodarz@neodarz.net>
Date: Wed, 13 Sep 2017 00:49:27 +0200
Subject: add pyrnotify.py

---
 scripts/.scripts/pyrnotify.py      | 160 +++++++++++++++++++++++++++++++++++++
 scripts/.scripts/weechat_notify.sh |   2 +-
 2 files changed, 161 insertions(+), 1 deletion(-)
 create mode 100644 scripts/.scripts/pyrnotify.py

diff --git a/scripts/.scripts/pyrnotify.py b/scripts/.scripts/pyrnotify.py
new file mode 100644
index 0000000..53e9c0e
--- /dev/null
+++ b/scripts/.scripts/pyrnotify.py
@@ -0,0 +1,160 @@
+# -*- coding: utf-8 -*-
+# ex:sw=4 ts=4:ai:
+#
+# Copyright (c) 2012 by Krister Svanlund <krister.svanlund@gmail.com>
+#   based on tcl version:
+#    Remote Notification Script v1.1
+#    by Gotisch <gotisch@gmail.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+# Example usage when Weechat is running on a remote PC and you want
+# want to use port 4321 for the connection.
+#
+#     On the "client" (where the notifications will end up), host is
+#     the remote host where weechat is running:
+#		python2 location/of/pyrnotify.py 4321 & ssh -R 4321:localhost:4321 username@host
+#     You can have a second argument to specified the time to display the notification
+#       python2 location/of/pyrnotify.py 4321 2000 & ssh -R 4321:localhost:4321 username@host
+#     Important to remember is that you should probably setup the
+#     connection with public key encryption and use something like
+#     autossh to do this in the background.
+#
+#     In weechat:
+#		/python load pyrnotify.py
+#		and set the port
+#		/set plugins.var.python.pyrnotify.port 4321
+#
+# It is also possible to set which host pyrnotify shall connect to,
+# this is not recommended. Using a ssh port-forward is much safer
+# and doesn't require any ports but ssh to be open.
+
+# ChangeLog:
+#
+# 2014-05-10: Change hook_print callback argument type of displayed/highlight
+#             (WeeChat >= 1.0)
+# 2012-06-19: Added simple escaping to the title and body strings for
+#             the script to handle trailing backslashes.
+
+try:
+    import weechat as w
+    in_weechat = True
+except ImportError as e:
+    in_weechat = False
+
+import os, sys, re
+import socket
+import subprocess
+import shlex
+
+SCRIPT_NAME    = "pyrnotify"
+SCRIPT_AUTHOR  = "Krister Svanlund <krister.svanlund@gmail.com>"
+SCRIPT_VERSION = "1.0"
+SCRIPT_LICENSE = "GPL3"
+SCRIPT_DESC    = "Send remote notifications over SSH"
+
+def escape(s):
+    return re.sub(r'([\\"\'])', r'\\\1', s)
+
+def run_notify(icon, nick,chan,message):
+    host = w.config_get_plugin('host')
+    try:
+        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+        s.connect((host, int(w.config_get_plugin('port'))))
+        s.send("normal %s \"%s to %s\" \"%s\"" % (icon, nick, escape(chan), escape(message)))
+        s.close()
+    except Exception as e:
+        w.prnt("", "Could not send notification: %s" % str(e))
+
+def on_msg(*a):
+    if len(a) == 8:
+        data, buffer, timestamp, tags, displayed, highlight, sender, message = a
+        if data == "private" or int(highlight):
+            if data == "private" and w.config_get_plugin('pm-icon'):
+                icon = w.config_get_plugin('pm-icon')
+            else:
+                icon = w.config_get_plugin('icon')
+            buffer = "me" if data == "private" else w.buffer_get_string(buffer, "short_name")
+            run_notify(icon, sender, buffer, message)
+            #w.prnt("", str(a))
+    return w.WEECHAT_RC_OK
+
+def weechat_script():
+    settings = {'host' : "localhost",
+                'port' : "4321",
+                'icon' : "utilities-terminal",
+                'pm-icon' : "emblem-favorite"}
+    if w.register(SCRIPT_NAME, SCRIPT_AUTHOR, SCRIPT_VERSION, SCRIPT_LICENSE, SCRIPT_DESC, "", ""):
+        for (kw, v) in settings.items():
+            if not w.config_get_plugin(kw):
+                w.config_set_plugin(kw, v)
+        w.hook_print("", "notify_message", "", 1, "on_msg", "")
+        w.hook_print("", "notify_private", "", 1, "on_msg", "private")
+        w.hook_print("", "notify_highlight", "", 1, "on_msg", "") # Not sure if this is needed
+
+
+
+
+
+
+######################################
+## This is where the client starts, except for the global if-check nothing below this line is
+## supposed to be executed in weechat, instead it runs when the script is executed from
+## commandline.
+
+def accept_connections(s, timeout=None):
+    conn, addr = s.accept()
+    try:
+        data = ""
+        d = conn.recv(1024)
+        while d:
+            data += d
+            d = conn.recv(1024)
+    finally:
+        conn.close()
+    if data:
+        try:
+            urgency, icon, title, body = shlex.split(data)
+            if timeout:
+                #subprocess.call(["/usr/bin/twmnc", "-t", timeout, "-u", urgency, "-c", "IRC", "-i", icon, escape(title), escape(body)])
+                subprocess.call(["/usr/bin/twmnc", "-t", escape(title), "-c", escape(body)])
+            else:
+                #subprocess.call(["/usr/bin/twmnc", "-u", urgency, "-c", "IRC", "-i", icon, escape(title), escape(body)])
+               subprocess.call(["/usr/bin/twmnc", "-t", "IRC", "-c", escape(title), escape(body)]) 
+
+        except ValueError as e:
+            print e
+        except OSError as e:
+            print e
+    accept_connections(s, timeout)
+
+def weechat_client(argv):
+    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+    s.bind(("localhost", int(argv[1] if len(sys.argv) > 1 else 4321)))
+    s.listen(5)
+    try:
+        accept_connections(s, argv[2] if len(sys.argv) > 2 else None)
+    except KeyboardInterrupt as e:
+        print "Keyboard interrupt"
+        print e
+    finally:
+        s.close()
+
+if __name__ == '__main__':
+    if in_weechat:
+        weechat_script()
+    else:
+        weechat_client(sys.argv)
diff --git a/scripts/.scripts/weechat_notify.sh b/scripts/.scripts/weechat_notify.sh
index e2b28af..49bef0c 100755
--- a/scripts/.scripts/weechat_notify.sh
+++ b/scripts/.scripts/weechat_notify.sh
@@ -1,7 +1,7 @@
 #!/bin/bash
 
 if [[ $1 == "start" ]]; then
-	python2 /home/neodarz/Code/weechat_notify/pyrnotify.py 4323 &
+	python2 ~/.scripts/pyrnotify.py 4323 &
 	ssh -fNT -R 4323:localhost:4323 neodarz@neodarz.net -p 19977
 elif [[ $1 == "stop" ]]; then
 	sudo kill -9 $(ps aux | grep pyrnotify.py | awk '{print $2}')
-- 
cgit v1.2.1