-
-
Notifications
You must be signed in to change notification settings - Fork 31
/
service.py
192 lines (153 loc) · 7.2 KB
/
service.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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
# coding=utf-8
# Gnu General Public License - see LICENSE.TXT
import time
import traceback
import xbmc
import xbmcaddon
import xbmcgui
from resources.lib.lazylogger import LazyLogger
from resources.lib.play_utils import Service, PlaybackService, send_progress
from resources.lib.kodi_utils import HomeWindow
from resources.lib.widgets import set_background_image, set_random_movies
from resources.lib.websocket_client import WebSocketClient
from resources.lib.menu_functions import set_library_window_values
from resources.lib.server_detect import check_server, check_connection_speed
from resources.lib.monitors import LibraryChangeMonitor, ContextMonitor
from resources.lib.datamanager import clear_old_cache_data
from resources.lib.tracking import set_timing_enabled
from resources.lib.image_server import HttpImageServerThread
from resources.lib.playnext import PlayNextService
settings = xbmcaddon.Addon()
log_timing_data = settings.getSetting('log_timing') == "true"
if log_timing_data:
set_timing_enabled(True)
# clear user and token when logging in
home_window = HomeWindow()
home_window.clear_property("user_name")
home_window.clear_property("AccessToken")
home_window.clear_property("Params")
log = LazyLogger('service')
monitor = xbmc.Monitor()
try:
clear_old_cache_data()
except Exception as error:
log.error("Error in clear_old_cache_data() : {0}".format(error))
# wait for 10 seconds for the Kodi splash screen to close
i = 0
while not monitor.abortRequested():
if i == 100 or not xbmc.getCondVisibility("Window.IsVisible(startup)"):
break
i += 1
xbmc.sleep(100)
check_server()
image_server = HttpImageServerThread()
image_server.start()
# set up all the services
monitor = Service()
playback_service = PlaybackService(monitor)
home_window = HomeWindow()
last_progress_update = time.time()
last_content_check = time.time()
last_background_update = 0
last_random_movie_update = 0
# start the library update monitor
library_change_monitor = LibraryChangeMonitor()
library_change_monitor.start()
# start the WebSocket Client running
remote_control = settings.getSetting('websocket_enabled') == "true"
websocket_client = WebSocketClient(library_change_monitor)
if remote_control:
websocket_client.start()
play_next_service = None
play_next_trigger_time = int(settings.getSetting('play_next_trigger_time'))
if play_next_trigger_time > 0:
play_next_service = PlayNextService(monitor)
play_next_service.start()
# Start the context menu monitor
context_monitor = None
context_menu = settings.getSetting('override_contextmenu') == "true"
if context_menu:
context_monitor = ContextMonitor()
context_monitor.start()
background_interval = int(settings.getSetting('background_interval'))
newcontent_interval = int(settings.getSetting('new_content_check_interval'))
random_movie_list_interval = int(settings.getSetting('random_movie_refresh_interval'))
random_movie_list_interval = random_movie_list_interval * 60
enable_logging = settings.getSetting('log_debug') == "true"
if enable_logging:
xbmcgui.Dialog().notification(settings.getAddonInfo('name'),
"Debug logging enabled!",
time=8000,
icon=xbmcgui.NOTIFICATION_WARNING)
prev_user = home_window.get_property("user_name")
first_run = True
home_window.set_property('exit', 'False')
while home_window.get_property('exit') == 'False':
try:
if xbmc.Player().isPlaying():
last_random_movie_update = time.time() - (random_movie_list_interval - 15)
# if playing every 10 seconds updated the server with progress
if (time.time() - last_progress_update) > 10:
last_progress_update = time.time()
send_progress()
else:
screen_saver_active = xbmc.getCondVisibility("System.ScreenSaverActive")
if not screen_saver_active:
user_changed = False
if prev_user != home_window.get_property("user_name"):
log.debug("user_change_detected")
prev_user = home_window.get_property("user_name")
user_changed = True
if user_changed or first_run:
settings = xbmcaddon.Addon()
server_speed_check_data = settings.getSetting("server_speed_check_data")
server_host = settings.getSetting('server_address')
if server_host is not None and server_host != "" and server_host != "<none>" and server_host not in server_speed_check_data:
message = "This is the first time you have connected to this server.\nDo you want to run a connection speed test?"
response = xbmcgui.Dialog().yesno("First Connection", message)
if response:
speed = check_connection_speed()
if speed > 0:
settings.setSetting("server_speed_check_data", server_host + "-" + str(speed))
else:
settings.setSetting("server_speed_check_data", server_host + "-skipped")
if user_changed or (random_movie_list_interval != 0 and (time.time() - last_random_movie_update) > random_movie_list_interval):
last_random_movie_update = time.time()
set_random_movies()
if user_changed or (newcontent_interval != 0 and (time.time() - last_content_check) > newcontent_interval):
last_content_check = time.time()
library_change_monitor.check_for_updates()
if user_changed or (background_interval != 0 and (time.time() - last_background_update) > background_interval):
last_background_update = time.time()
set_library_window_values(user_changed)
set_background_image(user_changed)
if remote_control and user_changed:
websocket_client.stop_client()
websocket_client = WebSocketClient(library_change_monitor)
websocket_client.start()
elif screen_saver_active:
last_random_movie_update = time.time() - (random_movie_list_interval - 15)
if background_interval != 0 and ((time.time() - last_background_update) > background_interval):
last_background_update = time.time()
set_background_image(False)
except Exception as error:
log.error("Exception in Playback Monitor: {0}".format(error))
log.error("{0}".format(traceback.format_exc()))
first_run = False
xbmc.sleep(1000)
image_server.stop()
# stop the WebSocket Client
websocket_client.stop_client()
# call stop on the library update monitor
library_change_monitor.stop()
# stop the play next episode service
if play_next_service:
play_next_service.stop_service()
# call stop on the context menu monitor
if context_monitor:
context_monitor.stop_monitor()
# clear user and token when logging off
home_window.clear_property("user_name")
home_window.clear_property("AccessToken")
home_window.clear_property("userimage")
log.debug("Service shutting down")