1
0
mirror of https://github.com/EDCD/EDMarketConnector.git synced 2025-04-16 09:10:35 +03:00

Fix hang when using auto flight log on Windows.

Fixes #38
This commit is contained in:
Jonathan Harris 2015-11-08 17:47:23 +00:00
parent a4e38f7c63
commit b0c88b59c7
3 changed files with 25 additions and 10 deletions

View File

@ -171,10 +171,10 @@ class AppWindow:
hotkeymgr.register(self.w, config.getint('hotkey_code'), config.getint('hotkey_mods'))
# Install log monitoring
monitor.set_callback(self.system_change)
self.w.bind_all('<<Jump>>', self.system_change) # user-generated
if (config.getint('output') & config.OUT_LOG_AUTO) and (config.getint('output') & (config.OUT_LOG_AUTO|config.OUT_LOG_EDSM)):
monitor.enable_logging()
monitor.start()
monitor.start(self.w)
# call after credentials have changed
def login(self):
@ -369,7 +369,14 @@ class AppWindow:
except:
pass
def system_change(self, timestamp, system):
def system_change(self, event):
if not monitor.last_event:
if __debug__: print 'spurious system_change', event # eh?
return
timestamp, system = monitor.last_event # would like to use event user_data to carry this, but not accessible in Tkinter
if self.system['text'] != system:
try:
self.system['text'] = system

View File

@ -36,6 +36,8 @@ class EDSM:
elif known:
self.result = { 'img': EDSM._IMG_KNOWN, 'url': 'http://www.edsm.net/needed-distances?systemName=%s' % urllib.quote(system_name), 'done': True } # default URL
self.thread = threading.Thread(target = self.known, name = 'EDSM worker', args = (system_name, self.result))
self.thread.daemon = True
self.thread.start()
else:
self.result = { 'img': '', 'url': 'http://www.edsm.net/needed-distances?systemName=%s' % urllib.quote(system_name), 'done': True } # default URL
r = requests.get('http://www.edsm.net/api-v1/system?sysname=%s&coords=1' % urllib.quote(system_name), timeout=EDSM._TIMEOUT)
@ -48,6 +50,8 @@ class EDSM:
elif data.get('coords'):
self.result['img'] = EDSM._IMG_KNOWN
self.thread = threading.Thread(target = self.known, name = 'EDSM worker', args = (system_name, self.result))
self.thread.daemon = True
self.thread.start()
else:
self.result['img'] = EDSM._IMG_UNKNOWN
@ -60,6 +64,8 @@ class EDSM:
elif known:
self.result = { 'img': EDSM._IMG_KNOWN, 'url': 'http://www.edsm.net/needed-distances?systemName=%s' % urllib.quote(system_name), 'done': True } # default URL
self.thread = threading.Thread(target = self.known, name = 'EDSM worker', args = (system_name, self.result))
self.thread.daemon = True
self.thread.start()
else:
self.result = { 'img': '', 'url': 'http://www.edsm.net/needed-distances?systemName=%s' % urllib.quote(system_name), 'done': False } # default URL
self.thread = threading.Thread(target = self.worker, name = 'EDSM worker', args = (system_name, self.result))

View File

@ -63,14 +63,12 @@ elif platform=='win32':
class EDLogs:
def __init__(self):
self.root = None
self.logdir = self._logdir()
self.logging_enabled = self._logging_enabled
self._restart_required = False
self.observer = None
self.callback = None
def set_callback(self, callback):
self.callback = callback
self.last_event = None
def enable_logging(self):
if self.logging_enabled():
@ -132,8 +130,9 @@ class EDLogs:
if __debug__: print_exc()
return False
def start(self):
if not self.logdir or not self.callback:
def start(self, root):
self.root = root
if not self.logdir:
self.stop()
return False
if self.running():
@ -145,6 +144,7 @@ class EDLogs:
def stop(self):
self.observer = None # Orphan the worker thread
self.last_event = None
def running(self):
return self.observer and self.observer.is_alive()
@ -193,7 +193,9 @@ class EDLogs:
# Crossed midnight between timestamp and poll
now = localtime(time()-12*60%60) # yesterday
time_struct = datetime(now.tm_year, now.tm_mon, now.tm_mday, visited_struct.tm_hour, visited_struct.tm_min, visited_struct.tm_sec).timetuple() # still local time
self.callback(mktime(time_struct), system)
# Tk on Windows doesn't like to be called outside of an event handler, so generate an event
self.last_event = (mktime(time_struct), system)
self.root.event_generate('<<Jump>>', when="tail")
sleep(10) # New system gets posted to log file before hyperspace ends, so don't need to poll too often