1
0
mirror of https://github.com/EDCD/EDMarketConnector.git synced 2025-04-15 08:40:34 +03:00

Send Cmdr ranks to EDSM

This commit is contained in:
Jonathan Harris 2016-10-20 13:21:44 +01:00
parent 4d5b669bd4
commit 5a54c3126b
3 changed files with 49 additions and 0 deletions

View File

@ -498,6 +498,20 @@ class AppWindow:
self.station['text'] = monitor.station or (EDDB.system(monitor.system) and self.STATION_UNDOCKED or '')
if system_changed or station_changed:
self.status['text'] = ''
if config.getint('output') & config.OUT_SYS_EDSM and not monitor.is_beta and monitor.ranks and (not entry or entry['event'] in ['Progress', 'Promotion']):
# Send rank info to EDSM on startup or change
try:
self.status['text'] = _('Sending data to EDSM...')
self.w.update_idletasks()
self.edsm.setranks(monitor.ranks)
self.status['text'] = ''
except Exception as e:
if __debug__: print_exc()
self.status['text'] = unicode(e)
if not config.getint('hotkey_mute'):
hotkeymgr.play_bad()
if not entry or not monitor.mode:
return # Fake event or in CQC

24
edsm.py
View File

@ -143,3 +143,27 @@ class EDSM:
else:
self.result['img'] = EDSM._IMG_KNOWN
self.syscache.add(system_name)
def setranks(self, ranks):
if not ranks:
return
try:
url = 'https://www.edsm.net/api-commander-v1/set-ranks?commanderName=%s&apiKey=%s&fromSoftware=%s&fromSoftwareVersion=%s' % (
urllib2.quote(config.get('edsm_cmdrname').encode('utf-8')),
urllib2.quote(config.get('edsm_apikey')),
urllib2.quote(applongname),
urllib2.quote(appversion)
)
for k,v in ranks.iteritems():
if v is not None:
url += '&%s=%s' % (k, urllib2.quote('%d;%d' % v))
r = self.opener.open(url, timeout=EDSM._TIMEOUT)
reply = json.loads(r.read())
(msgnum, msg) = reply['msgnum'], reply['msg']
except:
if __debug__: print_exc()
raise Exception(_("Error: Can't connect to EDSM"))
if msgnum // 100 not in (1,4):
raise Exception(_('Error: EDSM {MSG}').format(MSG=msg))

View File

@ -80,6 +80,7 @@ class EDLogs(FileSystemEventHandler):
self.system = None
self.station = None
self.coordinates = None
self.ranks = None
def set_callback(self, name, callback):
if name in self.callbacks:
@ -214,9 +215,11 @@ class EDLogs(FileSystemEventHandler):
if entry['event'] == 'Fileheader':
self.version = entry['gameversion']
self.is_beta = 'beta' in entry['gameversion'].lower()
self.ranks = None
elif entry['event'] == 'LoadGame':
self.cmdr = entry['Commander']
self.mode = entry.get('GameMode') # 'Open', 'Solo', 'Group', or None for CQC
self.ranks = { "Combat": None, "Trade": None, "Explore": None, "Empire": None, "Federation": None, "CQC": None }
elif entry['event'] == 'NewCommander':
self.cmdr = entry['Name']
elif entry['event'] in ['Undocked']:
@ -228,6 +231,14 @@ class EDLogs(FileSystemEventHandler):
self.coordinates = None # Docked event doesn't include coordinates
self.system = entry['StarSystem'] == 'ProvingGround' and 'CQC' or entry['StarSystem']
self.station = entry.get('StationName') # May be None
elif entry['event'] in ['Rank', 'Promotion'] and self.ranks:
for k,v in entry.iteritems():
if k in self.ranks:
self.ranks[k] = (v,0)
elif entry['event'] == 'Progress' and self.ranks:
for k,v in entry.iteritems():
if self.ranks.get(k) is not None:
self.ranks[k] = (self.ranks[k][0], min(v, 100)) # perhaps not taken promotion mission yet
return entry
except:
if __debug__: