From 75cf0d6c16c2d340be827a79f1d28f54dab5497d Mon Sep 17 00:00:00 2001 From: Jonathan Harris Date: Tue, 22 Dec 2015 01:56:36 +0000 Subject: [PATCH] Don't lookup system in EDSM unless the option to send flight log is selected. Use EDSM's show-system URL. --- EDMarketConnector.py | 11 +++++++--- edsm.py | 48 ++++++++++++++------------------------------ 2 files changed, 23 insertions(+), 36 deletions(-) diff --git a/EDMarketConnector.py b/EDMarketConnector.py index 46ffedb6..b18b8bfb 100755 --- a/EDMarketConnector.py +++ b/EDMarketConnector.py @@ -294,7 +294,9 @@ class AppWindow: except Exception as e: if __debug__: print_exc() self.status['text'] = unicode(e) - self.edsmpoll() + else: + self.edsm.link(self.system['text']) + self.edsmpoll() if not (config.getint('output') & (config.OUT_CSV|config.OUT_TD|config.OUT_BPC|config.OUT_EDDN)): # no station data requested - we're done @@ -425,7 +427,6 @@ class AppWindow: self.system['text'] = system self.system['image'] = '' self.station['text'] = EDDB.system(system) and self.STATION_UNDOCKED or '' - self.status['text'] = strftime(_('Last updated at {HH}:{MM}:{SS}').format(HH='%H', MM='%M', SS='%S').encode('utf-8'), localtime(timestamp)).decode('utf-8') if config.getint('output') & config.OUT_LOG_FILE: flightlog.writelog(timestamp, system) if config.getint('output') & config.OUT_LOG_EDSM: @@ -433,12 +434,16 @@ class AppWindow: self.status['text'] = _('Sending data to EDSM...') self.w.update_idletasks() edsm.writelog(timestamp, system, lambda:self.edsm.lookup(system, EDDB.system(system))) # Do EDSM lookup during EDSM export + self.status['text'] = strftime(_('Last updated at {HH}:{MM}:{SS}').format(HH='%H', MM='%M', SS='%S').encode('utf-8'), localtime(timestamp)).decode('utf-8') except Exception as e: if __debug__: print_exc() self.status['text'] = unicode(e) if not config.getint('hotkey_mute'): hotkeymgr.play_bad() - self.edsmpoll() + else: + self.edsm.link(system) + self.status['text'] = strftime(_('Last updated at {HH}:{MM}:{SS}').format(HH='%H', MM='%M', SS='%S').encode('utf-8'), localtime(timestamp)).decode('utf-8') + self.edsmpoll() def edsmpoll(self): result = self.edsm.result diff --git a/edsm.py b/edsm.py index 1ed58c7e..c3d41238 100644 --- a/edsm.py +++ b/edsm.py @@ -18,25 +18,25 @@ class EDSM: def __init__(self): self.result = { 'img': None, 'url': None, 'done': True } - self.syscache = {} + self.syscache = set() EDSM._IMG_KNOWN = tk.PhotoImage(data = 'R0lGODlhDgAOAMIEAFWjVVWkVWS/ZGfFZwAAAAAAAAAAAAAAACH5BAEKAAQALAAAAAAOAA4AAAMsSLrcHEIEp8C4GDSLu15dOCyB2E2EYGKCoq5DS5QwSsDjwomfzlOziA0ITAAAOw==') # green circle EDSM._IMG_UNKNOWN = tk.PhotoImage(data = 'R0lGODlhDgAOAKECAGVLJ+ddWO5fW+5fWyH5BAEKAAMALAAAAAAOAA4AAAImnI+JEAFqgJj0LYqFNTkf2VVGEFLBWE7nAJZbKlzhFnX00twQVAAAOw==') # red circle EDSM._IMG_NEW = tk.PhotoImage(data = 'R0lGODlhEAAQAMZwANKVHtWcIteiHuiqLPCuHOS1MN22ZeW7ROG6Zuu9MOy+K/i8Kf/DAuvCVf/FAP3BNf/JCf/KAPHHSv7ESObHdv/MBv/GRv/LGP/QBPXOPvjPQfjQSvbRSP/UGPLSae7Sfv/YNvLXgPbZhP7dU//iI//mAP/jH//kFv7fU//fV//ebv/iTf/iUv/kTf/iZ/vgiP/hc/vgjv/jbfriiPriiv7ka//if//jd//sJP/oT//tHv/mZv/sLf/rRP/oYv/rUv/paP/mhv/sS//oc//lkf/mif/sUf/uPv/qcv/uTv/uUv/vUP/qhP/xP//pm//ua//sf//ubf/wXv/thv/tif/slv/tjf/smf/yYP/ulf/2R//2Sv/xkP/2av/0gP/ylf/2df/0i//0j//0lP/5cP/7a//1p//5gf/7ev/3o//2sf/5mP/6kv/2vP/3y//+jP///////////////////////////////////////////////////////////////yH5BAEKAH8ALAAAAAAQABAAAAePgH+Cg4SFhoJKPIeHYT+LhVppUTiPg2hrUkKPXWdlb2xHJk9jXoNJQDk9TVtkYCUkOy4wNjdGfy1UXGJYOksnPiwgFwwYg0NubWpmX1ArHREOFYUyWVNIVkxXQSoQhyMoNVUpRU5EixkcMzQaGy8xhwsKHiEfBQkSIg+GBAcUCIIBBDSYYGiAAUMALFR6FAgAOw==') EDSM._IMG_ERROR = tk.PhotoImage(data = 'R0lGODlhDgAOAIABAAAAAP///yH5BAEKAAEALAAAAAAOAA4AAAIcjIGJxqHaIJPypBYvzms77X1dWHlliKYmuI5GAQA7') # BBC Mode 5 '?' + # Just set link without doing a lookup + def link(self, system_name): + self.cancel_lookup() + self.result = { 'img': '', 'url': 'http://www.edsm.net/show-system?systemName=%s' % urllib.quote(system_name), 'done': True } + def lookup(self, system_name, known=0): self.cancel_lookup() - if system_name in self.syscache: # Cache URLs of systems with known coordinates - self.result = { 'img': EDSM._IMG_KNOWN, 'url': self.syscache[system_name], 'done': True } - 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() + if known or system_name in self.syscache: + self.result = { 'img': EDSM._IMG_KNOWN, 'url': 'http://www.edsm.net/show-system?systemName=%s' % urllib.quote(system_name), 'done': True } else: - self.result = { 'img': EDSM._IMG_ERROR, 'url': 'http://www.edsm.net/needed-distances?systemName=%s' % urllib.quote(system_name), 'done': True } # default URL + self.result = { 'img': EDSM._IMG_ERROR, 'url': 'http://www.edsm.net/show-system?systemName=%s' % urllib.quote(system_name), 'done': True } r = requests.get('http://www.edsm.net/api-v1/system?sysname=%s&coords=1' % urllib.quote(system_name), timeout=EDSM._TIMEOUT) r.raise_for_status() data = r.json() @@ -46,9 +46,7 @@ class EDSM: self.result['img'] = EDSM._IMG_NEW 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() + self.syscache.add(system_name) else: self.result['img'] = EDSM._IMG_UNKNOWN @@ -56,15 +54,10 @@ class EDSM: def start_lookup(self, system_name, known=0): self.cancel_lookup() - if system_name in self.syscache: # Cache URLs of systems with known coordinates - self.result = { 'img': EDSM._IMG_KNOWN, 'url': self.syscache[system_name], 'done': True } - 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() + if known or system_name in self.syscache: # Cache URLs of systems with known coordinates + self.result = { 'img': EDSM._IMG_KNOWN, 'url': 'http://www.edsm.net/show-system?systemName=%s' % urllib.quote(system_name), 'done': True } else: - self.result = { 'img': '', 'url': 'http://www.edsm.net/needed-distances?systemName=%s' % urllib.quote(system_name), 'done': False } # default URL + self.result = { 'img': '', 'url': 'http://www.edsm.net/show-system?systemName=%s' % urllib.quote(system_name), 'done': False } self.thread = threading.Thread(target = self.worker, name = 'EDSM worker', args = (system_name, self.result)) self.thread.daemon = True self.thread.start() @@ -86,8 +79,8 @@ class EDSM: requests.get('http://www.edsm.net/api-v1/url?sysname=%s' % urllib.quote(system_name), timeout=EDSM._TIMEOUT) # creates system elif data.get('coords'): result['img'] = EDSM._IMG_KNOWN - result['done'] = True # give feedback immediately - self.known(system_name, result) + result['done'] = True + self.syscache.add(system_name) else: result['img'] = EDSM._IMG_UNKNOWN except: @@ -95,17 +88,6 @@ class EDSM: result['img'] = EDSM._IMG_ERROR result['done'] = True - # Worker for known known systems - saves initial EDSM API call - def known(self, system_name, result): - # Prefer to send user to "Show distances" page for systems with known coordinates - try: - r = requests.get('http://www.edsm.net/api-v1/url?sysname=%s' % urllib.quote(system_name), timeout=EDSM._TIMEOUT) - r.raise_for_status() - data = r.json() - result['url'] = self.syscache[system_name] = data['url']['show-system'] - except: - if __debug__: print_exc() - # Flight log - http://www.edsm.net/api-logs def export(data, edsmlookupfn):