/
watchteleboy
executable file
·103 lines (97 loc) · 2.8 KB
/
watchteleboy
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
#!/usr/bin/env python3
"""
Script to watch and record IPTV streams from http://www.teleboy.ch
Copyright: Roman Haefeli, 2011 - 2022
License: GPL-2
"""
import datetime
import os
import sys
import wt
DEFAULTS = {
'wt_version': '2.3',
'wt_abspath': os.path.abspath(__file__),
'home_dir': os.path.expanduser('~'),
'wt_dir': '{home_dir}/.watchteleboy',
'configfile': '{wt_dir}/config',
'session_cache': '{wt_dir}/session_cache',
'mpv_opts': '--keep-open',
'channel_selection': 'all',
'record_dir': '{home_dir}',
'max_bitrate': '4800000',
'fifo': '{wt_dir}/fifo_{wt_instance}_{content_type}_{id}',
'color_theme': 'light',
'player_binary': 'mpv',
'player_args': [
'--force-seekable=yes',
'--cache=yes',
'--cache-secs=600',
'--demuxer-max-bytes=1073741824',
]
}
def main():
"""main entry function to run watchteleboy"""
try:
env = wt.create_env(DEFAULTS)
except wt.WatchTeleboyError:
sys.exit(1)
if env['version']:
print(f'watchteleboy {env["wt_version"]}')
sys.exit(0)
if env['delete_cronjob']:
wt.delete_cronjob(env)
wts = wt.WatchTeleboySession(env['session_cache'])
if not wts.logged_in():
try:
assert wts.login(user=env['teleboy_user'], password=env['teleboy_pass'])
except AssertionError:
sys.exit(1)
wts.set_channel_selection(env['channel_selection'])
if env['list']:
wts.list_channels()
sys.exit(0)
if not env['channel']:
player = wt.WatchTeleboyPlayer(env)
wtgui = wt.WatchTeleboyGUI(wts, player)
try:
wtgui.run()
except KeyboardInterrupt:
sys.exit(0)
except wt.WatchTeleboyError:
sys.exit(1)
sys.exit(0)
try:
channel, mpd_url = wts.get_stream_url(env['channel']) # also returns canonical channel name
except wt.WatchTeleboyError:
sys.exit(1)
if env['print_url']:
print(mpd_url)
sys.exit(0)
try:
if env['record'] and env['starttime']:
st_obj = wt.parse_time_string(env['starttime'])
if st_obj > datetime.datetime.now() + datetime.timedelta(seconds=10):
wt.schedule_recording(env)
sys.exit()
except wt.WatchTeleboyError:
sys.exit(1)
player = wt.WatchTeleboyPlayer(env)
try:
player.set_mpd_url(mpd_url, channel)
except wt.WatchTeleboyError:
sys.exit(1)
if env['record']:
try:
player.record()
player.wait()
except wt.WatchTeleboyError:
sys.exit(1)
else:
try:
player.play()
player.wait()
except wt.WatchTeleboyError:
sys.exit(1)
sys.exit(0)
if __name__ == '__main__':
main()