From: Alexander Schmidt Date: Sat, 3 Oct 2020 19:21:56 +0000 (+0200) Subject: added post command and use fifo dir from env X-Git-Url: http://git.treefish.org/~alex/mtxbot.git/commitdiff_plain/c4f107a1a27dc60858fc694839c981e001cf447f?ds=sidebyside added post command and use fifo dir from env --- diff --git a/doc/config.json b/doc/config.json index ad3d114..0f08155 100644 --- a/doc/config.json +++ b/doc/config.json @@ -3,8 +3,5 @@ "url": "https://matrix.example.com", "user": "@user:matrix.example.com", "password": "WHATEVER" - }, - "paths": { - "fifodir": "/path/to/fifo/dir" } } diff --git a/src/mtxbot-post.py b/src/mtxbot-post.py new file mode 100755 index 0000000..1ba56c4 --- /dev/null +++ b/src/mtxbot-post.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 + +import errno +import os +import posix +import stat +import sys +import time + +assert sys.version_info >= (3, 5) + +if len(sys.argv) != 2: + print("Usage: %s " % sys.argv[0]) + +fifo_dir = os.getenv('MTXBOT_FIFO_DIR', '/run/mtxbot') +fifo_path = "%s/%s" % (fifo_dir, sys.argv[1]) + +if not os.path.isdir(fifo_dir): + print("Fifo directory %s does not exist!" % fifo_dir, file=sys.stderr) + sys.exit(1) + +if not stat.S_ISFIFO( os.stat(fifo_path).st_mode ): + print("Channel %s does not exist!" % sys.argv[1], file=sys.stderr) + sys.exit(2) + +for i in range(0, 10): + fifo = -1 + try: + fifo = posix.open(fifo_path, posix.O_WRONLY | posix.O_NONBLOCK) + posix.write(fifo, sys.stdin.read().encode()) + sys.exit(0) + except OSError as e: + if e.errno == errno.ENXIO: + time.sleep(1.0) + finally: + if fifo != -1: + posix.close(fifo) + +print("Error posting to channel %s!" % sys.argv[1], file=sys.stderr) +sys.exit(3) diff --git a/src/mtxbot.py b/src/mtxbot.py index d92dcdc..722c8db 100755 --- a/src/mtxbot.py +++ b/src/mtxbot.py @@ -61,10 +61,12 @@ if len(sys.argv) != 2: with open(sys.argv[1]) as configFile: config = json.load(configFile) +fifo_dir = os.getenv('MTXBOT_FIFO_DIR', '/run/mtxbot') + while not stop: presences = [] - for entry in os.listdir(config['paths']['fifodir']): - fullpath = "%s/%s" % (config['paths']['fifodir'], entry) + for entry in os.listdir(fifo_dir): + fullpath = "%s/%s" % (fifo_dir, entry) if stat.S_ISFIFO(os.stat(fullpath).st_mode): logging.info("Creating presence for %s..." % entry) presences.append( Presence(entry, fullpath) )