Add systemd files and passing room-id for matrix

This commit is contained in:
Jeena 2023-02-19 13:42:01 +09:00
parent 52f935a084
commit 85fd862db4
8 changed files with 96 additions and 16 deletions

View file

@ -64,7 +64,11 @@ class Image:
def get_takentime(self): def get_takentime(self):
e = self.get_exif() e = self.get_exif()
date = e.get('datetime_original') date = None
if e == None:
date = os.path.basename(self.path)
if date == None:
date = e.get('datetime_original')
if date == None: if date == None:
date = e.get('datetime') date = e.get('datetime')
if date == None: if date == None:
@ -201,7 +205,8 @@ if __name__ == "__main__":
else: else:
img_path = sys.argv[1] img_path = sys.argv[1]
img = Image(img_path) img = Image(img_path)
img.get_takentime()
img.crop() img.crop()
img.add_metadata() img.add_metadata()
img.show() #img.show()
img.safe("/home/jeena/Downloads/test.jpg") img.safe("/home/jeena/Downloads/test.jpg")

View file

@ -6,7 +6,7 @@ import os
import synology import synology
import edit import edit
import shutil import shutil
import argparse
import matrix_commander import matrix_commander
from matrix_commander import main from matrix_commander import main
@ -22,31 +22,45 @@ def years_ago(path):
ret += " ago." ret += " ago."
return ret return ret
def post_photo(path): def post_photo(path, roomid):
argv = ["matrix-commander"] argv = ["matrix-commander"]
argv.extend(["--message", "" + years_ago(path) + ""]) argv.extend(["--message", "" + years_ago(path) + ""])
argv.extend(["--image", path]) argv.extend(["--image", path])
argv.extend(["--print-event-id"]) argv.extend(["--print-event-id"])
argv.extend(["--room", roomid])
return matrix_commander.main(argv) return matrix_commander.main(argv)
if __name__ == "__main__": def get_args():
if len(sys.argv) != 2: parser = argparse.ArgumentParser(description='Post dates picture(s) to a Matrix room')
print("Usage: matrix.py richard|kaylee") parser.add_argument('-n', '--names', required=True)
exit(1) parser.add_argument('-e', '--exclude', default=None, required=False)
parser.add_argument('-r', '--roomid', required=True)
parser.add_argument('-m', '--month', default=datetime.today().month, type=int)
parser.add_argument('-d', '--day', default=datetime.today().day, type=int)
parser.add_argument('-s', '--size', default=1, type=int)
return parser.parse_args()
if __name__ == "__main__":
args = get_args()
sy_host = os.getenv('SY_DB_HOST') sy_host = os.getenv('SY_DB_HOST')
sy_user = os.getenv('SY_USER') sy_user = os.getenv('SY_USER')
# Get img paths from database
conn = synology.connect_db(sy_host, os.getenv('SY_DB_USER'), os.getenv('SY_DB_PASSWD')) conn = synology.connect_db(sy_host, os.getenv('SY_DB_USER'), os.getenv('SY_DB_PASSWD'))
names = sys.argv[1] pictures = synology.fetch_path_for_names_exclude_day_and_month(conn,
month = datetime.today().month args.names, args.exclude, args.month, args.day, args.size)
day = datetime.today().day
pictures = synology.fetch_path_for_names_day_and_month(conn, names, month, day, 1)
synology.close_db(conn) synology.close_db(conn)
# Fetch files from synology to tmp
dirpath = synology.fetch_files(sy_user + "@" + sy_host, pictures) dirpath = synology.fetch_files(sy_user + "@" + sy_host, pictures)
# Traverse dirs and post picures in matrix room
ret = 0 ret = 0
with os.scandir(dirpath) as dirs: with os.scandir(dirpath) as dirs:
for i, entry in enumerate(dirs): for i, entry in enumerate(dirs):
ret = post_photo(os.path.join(dirpath, entry.name)) ret = post_photo(os.path.join(dirpath, entry.name), args.roomid)
# Cleanup
shutil.rmtree(dirpath) shutil.rmtree(dirpath)
exit(ret) exit(ret)

View file

@ -1,4 +1,5 @@
#!/bin/bash #!/bin/bash
PATH=$HOME/.local/bin/:$PATH PATH=$HOME/.local/bin/:$PATH
pipenv run python matrix.py "richard|yingfen|kaylee" pipenv run python matrix.py -n "yingfen|richard|kaylee" -e dongyong -r "\!iyDYVdSookjYKhoXuU:jeena.net"
pipenv run python matrix.py -n "kinga|lili|karl|richard|georg|christine" -e dongyong -r "\!aPbeAzniGnemrkBcVU:jeena.net"

View file

@ -59,6 +59,34 @@ LIMIT %s;
return pictures return pictures
def fetch_path_for_names_exclude_day_and_month(conn, names, exclude, month, day, limit=1):
if exclude == None:
return fetch_path_for_names_day_and_month(conn, names, month, day, limit)
sql_query = """
SELECT folder.name, unit.filename, user_info.name AS user, EXTRACT(YEAR FROM to_timestamp(unit.takentime)::date) as year
FROM unit
LEFT OUTER JOIN face ON face.ref_id_unit = unit.id
LEFT OUTER JOIN folder ON folder.id = unit.id_folder
LEFT OUTER JOIN user_info ON user_info.id = unit.id_user
WHERE
face.id_person in (SELECT id FROM person WHERE lower(name) SIMILAR TO %s)
AND
face.id_person not in (SELECT id FROM person WHERE lower(name) SIMILAR TO %s)
AND
EXTRACT(MONTH FROM to_timestamp(unit.takentime)::date) = %s
AND
EXTRACT(DAY FROM to_timestamp(unit.takentime)::date) = %s
ORDER BY random()
LIMIT %s;
"""
cur = conn.cursor()
cur.execute(sql_query, ('%(' + names + ')%', '%(' + exclude + ')%', month, day, limit))
pictures = cur.fetchall()
cur.close()
return pictures
def fetch_files(remotehost, pictures): def fetch_files(remotehost, pictures):
dirpath = tempfile.mkdtemp() dirpath = tempfile.mkdtemp()
for picture in pictures: for picture in pictures:
@ -67,7 +95,7 @@ def fetch_files(remotehost, pictures):
path = picture[0] path = picture[0]
name = picture[1] name = picture[1]
user = picture[2] user = picture[2]
year = picture[3] + "-" if len(picture) > 3 else "" year = str(picture[3]) + "-" if len(picture) > 3 else ""
if user == '/volume1/photo': if user == '/volume1/photo':
lib_path = "/photo" lib_path = "/photo"
else: else:

View file

@ -0,0 +1,8 @@
[Unit]
Description=Synology Pictures on TV
[Service]
User=jeena
Type=simple
WorkingDirectory=/home/jeena/Projects/synology-pictures/
ExecStart=/home/jeena/Projects/synology-pictures/run.sh

View file

@ -0,0 +1,8 @@
[Unit]
Description=Run Synology Photos on TV hourly
[Timer]
OnCalendar=*-*-* *:00:00
[Install]
WantedBy=timers.target

View file

@ -0,0 +1,8 @@
[Unit]
Description=Synology Pictures on TV
[Service]
User=jeena
Type=simple
WorkingDirectory=/home/jeena/Projects/synology-pictures/
ExecStart=/home/jeena/Projects/synology-pictures/run-matrix.sh

View file

@ -0,0 +1,8 @@
[Unit]
Description=Run Synology picture of the day in matrix daily
[Timer]
OnCalendar=*-*-* 06:00:00
[Install]
WantedBy=timers.target