1
0
mirror of https://github.com/EDCD/EDMarketConnector.git synced 2025-04-17 17:42:20 +03:00

Odyssey Suits: Store available data from CAPI.

I've gone with 'None' for when there's no data, rather than {}.  That
makes for simpler checks on if there is data (a dict.get('foo') only
checks for that, not the dict structure otherwise).

If no 'suit' in the data we assume no Odyssey, but otherwise plough on
with dict.get() statements as they'll default to None if it's not
present.

*Users* of this monitor.state[] extra data get to choose what to do if
some data is present but not other.
This commit is contained in:
Athanasius 2021-04-13 12:12:51 +01:00
parent a70da4a522
commit 2246278286
3 changed files with 66 additions and 34 deletions

View File

@ -589,6 +589,10 @@ class Session(object):
# logger.trace('timestamp not in data, adding from response headers') # logger.trace('timestamp not in data, adding from response headers')
data['timestamp'] = time.strftime('%Y-%m-%dT%H:%M:%SZ', parsedate(r.headers['Date'])) # type: ignore data['timestamp'] = time.strftime('%Y-%m-%dT%H:%M:%SZ', parsedate(r.headers['Date'])) # type: ignore
# Update Odyssey Suit data
if endpoint == URL_QUERY:
self.suit_update(data)
return data return data
def profile(self) -> CAPIData: def profile(self) -> CAPIData:
@ -632,6 +636,25 @@ class Session(object):
return data return data
def suit_update(self, data: CAPIData) -> None:
"""
Update monitor.state suit data.
:param data: CAPI data to extra suit data from.
"""
if (current_suit := data.get('suit')) is None:
# Probably no Odyssey on the account, so point attempting more.
return
monitor.state['SuitCurrent'] = current_suit
monitor.state['Suits'] = data.get('suits')
if (suit_loadouts := data.get('loadouts')) is None:
logger.warning('CAPI data had "suit" but no (suit) "loadouts"')
monitor.state['SuitLoadoutCurrent'] = data.get('loadout')
monitor.state['SuitLoadouts'] = suit_loadouts
def close(self) -> None: def close(self) -> None:
"""Close CAPI authorization session.""" """Close CAPI authorization session."""
self.state = Session.STATE_INIT self.state = Session.STATE_INIT

View File

@ -23,6 +23,11 @@ companion_category_map = {
'NonMarketable': False, # Don't appear in the in-game market so don't report 'NonMarketable': False, # Don't appear in the in-game market so don't report
} }
# Map suit symbol names to English localised names
companion_suit_type_map = {
'TacticalSuit_Class1': 'Dominator Suit',
}
# Map Coriolis's names to names displayed in the in-game shipyard. # Map Coriolis's names to names displayed in the in-game shipyard.
coriolis_ship_map = { coriolis_ship_map = {
'Cobra Mk III': 'Cobra MkIII', 'Cobra Mk III': 'Cobra MkIII',

View File

@ -114,42 +114,46 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
# Cmdr state shared with EDSM and plugins # Cmdr state shared with EDSM and plugins
# If you change anything here update PLUGINS.md documentation! # If you change anything here update PLUGINS.md documentation!
self.state: Dict = { self.state: Dict = {
'Captain': None, # On a crew 'Captain': None, # On a crew
'Cargo': defaultdict(int), 'Cargo': defaultdict(int),
'Credits': None, 'Credits': None,
'FID': None, # Frontier Cmdr ID 'FID': None, # Frontier Cmdr ID
'Horizons': None, # Does this user have Horizons? 'Horizons': None, # Does this user have Horizons?
'Loan': None, 'Loan': None,
'Raw': defaultdict(int), 'Raw': defaultdict(int),
'Manufactured': defaultdict(int), 'Manufactured': defaultdict(int),
'Encoded': defaultdict(int), 'Encoded': defaultdict(int),
'Engineers': {}, 'Engineers': {},
'Rank': {}, 'Rank': {},
'Reputation': {}, 'Reputation': {},
'Statistics': {}, 'Statistics': {},
'Role': None, # Crew role - None, Idle, FireCon, FighterCon 'Role': None, # Crew role - None, Idle, FireCon, FighterCon
'Friends': set(), # Online friends 'Friends': set(), # Online friends
'ShipID': None, 'ShipID': None,
'ShipIdent': None, 'ShipIdent': None,
'ShipName': None, 'ShipName': None,
'ShipType': None, 'ShipType': None,
'HullValue': None, 'HullValue': None,
'ModulesValue': None, 'ModulesValue': None,
'Rebuy': None, 'Rebuy': None,
'Modules': None, 'Modules': None,
'CargoJSON': None, # The raw data from the last time cargo.json was read 'CargoJSON': None, # The raw data from the last time cargo.json was read
'Route': None, # Last plotted route from Route.json file 'Route': None, # Last plotted route from Route.json file
'OnFoot': False, # Whether we think you're on-foot 'OnFoot': False, # Whether we think you're on-foot
'Component': defaultdict(int), # Odyssey Components in Ship Locker 'Component': defaultdict(int), # Odyssey Components in Ship Locker
'Item': defaultdict(int), # Odyssey Items in Ship Locker 'Item': defaultdict(int), # Odyssey Items in Ship Locker
'Consumable': defaultdict(int), # Odyssey Consumables in Ship Locker 'Consumable': defaultdict(int), # Odyssey Consumables in Ship Locker
'Data': defaultdict(int), # Odyssey Data in Ship Locker 'Data': defaultdict(int), # Odyssey Data in Ship Locker
'BackPack': { # Odyssey BackPack contents 'BackPack': { # Odyssey BackPack contents
'Component': defaultdict(int), # BackPack Components 'Component': defaultdict(int), # BackPack Components
'Consumable': defaultdict(int), # BackPack Consumables 'Consumable': defaultdict(int), # BackPack Consumables
'Item': defaultdict(int), # BackPack Items 'Item': defaultdict(int), # BackPack Items
'Data': defaultdict(int), # Backpack Data 'Data': defaultdict(int), # Backpack Data
}, },
'SuitCurrent': None,
'Suits': None,
'SuitLoadoutCurrent': None,
'SuitLoadouts': None,
} }
def start(self, root: 'tkinter.Tk') -> bool: # noqa: CCR001 def start(self, root: 'tkinter.Tk') -> bool: # noqa: CCR001