-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdsvideomonitor.py
107 lines (80 loc) · 2.82 KB
/
dsvideomonitor.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import os
import logging
from time import sleep
import sys
from watchdog.observers import Observer
from DaemonLite import DaemonLite
from notification.PushbulletClient import PushbulletClient
from notification.PushoverClient import PushoverClient
from watchdoghandler import VideoFileHandler
#
# YOU CAN CHANGE SETTINGS
#
video_folder = "/volume1/video/"
patterns = ["*.avi", "*.mkv", "*.mp4"]
languages = ["slv", "eng"]
run_indexer = True # run synology media indexer
# UNCOMMENT PREFERRED PUSH NOTIFICATION SERVICE
# notifier = None # set not None if disabled
notifier = PushbulletClient()
# notifier = PushoverClient()
notifier.set_api_key("YOUR_KEY")
#
# DON'T CHANGE ANYTHING DOWN HERE
#
# initialize logger
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
logger.propagate = False
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
# file handler
fh = logging.FileHandler("/var/log/dsvideomonitor.log", "a")
fh.setLevel(logging.DEBUG)
fh.setFormatter(formatter)
logger.addHandler(fh)
keep_fds = [fh.stream.fileno()]
# console handler
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
ch.setFormatter(formatter)
logger.addHandler(ch)
def file_processed(src_file, indexed, subtitles):
file_name = os.path.basename(src_file)
if notifier:
logger.info("Sending %s notification ..." % notifier.get_name())
notifier.send_message(file_name, "Indexed: %s\nSubtitles: %s" % (indexed, subtitles))
logger.info("File %s processed." % file_name)
logger.info("Done.")
logger.info("===========================================")
def error_processing(src_file, msg):
if notifier:
logger.info("Sending %s notification ..." % notifier.get_name())
file_name = os.path.basename(src_file)
notifier.send_message(file_name, "ERROR: " + msg)
class DSVideoMonitor(DaemonLite):
def run(self):
logger.info("DSVideoMonitor started.")
logger.info("Monitoring folder: %s" % video_folder)
if notifier:
notifier.set_logger(logger)
event_handler = VideoFileHandler(patterns=patterns)
event_handler.set_logger(logger)
event_handler.set_languages(languages)
event_handler.run_indexer = run_indexer
event_handler.set_folder(video_folder)
# listen to events
event_handler.on_file_processed += file_processed
event_handler.on_error += error_processing
observer = Observer()
observer.schedule(event_handler, video_folder, recursive=True)
observer.start()
while True:
sleep(1)
#
# create new instance of video monitor and run as daemon
#
video_monitor = DSVideoMonitor("/var/run/dsvideomonitor.pid")
if (len(sys.argv) < 2) or (sys.argv[1] == "start"):
video_monitor.start()
elif sys.argv[1] == "stop":
video_monitor.stop()