diff --git a/EDMarketConnector.py b/EDMarketConnector.py index 96634086..47d85551 100755 --- a/EDMarketConnector.py +++ b/EDMarketConnector.py @@ -256,6 +256,7 @@ import plug import prefs import stats import td +import util_ships from commodity import COMMODITY_CSV from dashboard import dashboard from hotkey import hotkeymgr @@ -689,7 +690,7 @@ class AppWindow(object): :return: True if all OK, else False to trigger play_bad in caller. """ if config.get_int('output') & (config.OUT_STATION_ANY): - if not data['commander'].get('docked'): + if not data['commander'].get('docked') and not monitor.on_foot: if not self.status['text']: # Signal as error because the user might actually be docked # but the server hosting the Companion API hasn't caught up @@ -810,7 +811,7 @@ class AppWindow(object): self.dump_capi_data(data) if not monitor.state['ShipType']: # Started game in SRV or fighter - self.ship['text'] = companion.ship_map.get(data['ship']['name'].lower(), data['ship']['name']) + self.ship['text'] = util_ships.ship_map.get(data['ship']['name'].lower(), data['ship']['name']) monitor.state['ShipID'] = data['ship']['id'] monitor.state['ShipType'] = data['ship']['name'].lower() @@ -912,7 +913,7 @@ class AppWindow(object): ship_text = monitor.state['ShipName'] else: - ship_text = companion.ship_map.get(monitor.state['ShipType'], monitor.state['ShipType']) + ship_text = util_ships.ship_map.get(monitor.state['ShipType'], monitor.state['ShipType']) if not ship_text: ship_text = '' diff --git a/collate.py b/collate.py index a5fa219f..3a0aa824 100755 --- a/collate.py +++ b/collate.py @@ -6,12 +6,13 @@ import csv import json import os -from os.path import isfile import sys +from os.path import isfile from traceback import print_exc import companion import outfitting +import util_ships def __make_backup(file_name: str, suffix: str = '.bak') -> None: @@ -106,7 +107,7 @@ def addmodules(data): raise ValueError('id: {} != {}'.format(key, module['id'])) try: - new = outfitting.lookup(module, companion.ship_map, True) + new = outfitting.lookup(module, util_ships.ship_map, True) except Exception: print('{}, {}:'.format(module['id'], module['name'])) @@ -164,7 +165,7 @@ def addships(data): for ship in tuple(data_ships.get('shipyard_list', {}).values()) + data_ships.get('unavailable_list'): # sanity check key = int(ship['id']) - new = {'id': key, 'symbol': ship['name'], 'name': companion.ship_map.get(ship['name'].lower())} + new = {'id': key, 'symbol': ship['name'], 'name': util_ships.ship_map.get(ship['name'].lower())} if new: old = ships.get(key) if old: diff --git a/companion.py b/companion.py index d9972743..51834b08 100644 --- a/companion.py +++ b/companion.py @@ -75,53 +75,6 @@ category_map = { commodity_map: Dict = {} -ship_map = { - 'adder': 'Adder', - 'anaconda': 'Anaconda', - 'asp': 'Asp Explorer', - 'asp_scout': 'Asp Scout', - 'belugaliner': 'Beluga Liner', - 'cobramkiii': 'Cobra MkIII', - 'cobramkiv': 'Cobra MkIV', - 'clipper': 'Panther Clipper', - 'cutter': 'Imperial Cutter', - 'diamondback': 'Diamondback Scout', - 'diamondbackxl': 'Diamondback Explorer', - 'dolphin': 'Dolphin', - 'eagle': 'Eagle', - 'empire_courier': 'Imperial Courier', - 'empire_eagle': 'Imperial Eagle', - 'empire_fighter': 'Imperial Fighter', - 'empire_trader': 'Imperial Clipper', - 'federation_corvette': 'Federal Corvette', - 'federation_dropship': 'Federal Dropship', - 'federation_dropship_mkii': 'Federal Assault Ship', - 'federation_gunship': 'Federal Gunship', - 'federation_fighter': 'F63 Condor', - 'ferdelance': 'Fer-de-Lance', - 'hauler': 'Hauler', - 'independant_trader': 'Keelback', - 'independent_fighter': 'Taipan Fighter', - 'krait_mkii': 'Krait MkII', - 'krait_light': 'Krait Phantom', - 'mamba': 'Mamba', - 'orca': 'Orca', - 'python': 'Python', - 'scout': 'Taipan Fighter', - 'sidewinder': 'Sidewinder', - 'testbuggy': 'Scarab', - 'type6': 'Type-6 Transporter', - 'type7': 'Type-7 Transporter', - 'type9': 'Type-9 Heavy', - 'type9_military': 'Type-10 Defender', - 'typex': 'Alliance Chieftain', - 'typex_2': 'Alliance Crusader', - 'typex_3': 'Alliance Challenger', - 'viper': 'Viper MkIII', - 'viper_mkiv': 'Viper MkIV', - 'vulture': 'Vulture', -} - class CAPIData(UserDict): """CAPI Response.""" @@ -769,19 +722,5 @@ def ship(data: CAPIData) -> CAPIData: return filter_ship(data['ship']) -def ship_file_name(ship_name: str, ship_type: str) -> str: - """Return a ship name suitable for a filename.""" - name = str(ship_name or ship_map.get(ship_type.lower(), ship_type)).strip() - if name.endswith('.'): - name = name[:-1] - - if name.lower() in ('con', 'prn', 'aux', 'nul', - 'com1', 'com2', 'com3', 'com4', 'com5', 'com6', 'com7', 'com8', 'com9', - 'lpt1', 'lpt2', 'lpt3', 'lpt4', 'lpt5', 'lpt6', 'lpt7', 'lpt8', 'lpt9'): - name = name + '_' - - return name.translate({ord(x): u'_' for x in ('\0', '<', '>', ':', '"', '/', '\\', '|', '?', '*')}) - - # singleton session = Session() diff --git a/coriolis.py b/coriolis.py index bf694d37..7f6d9c0a 100755 --- a/coriolis.py +++ b/coriolis.py @@ -15,6 +15,7 @@ from traceback import print_exc from config import config import outfitting import companion +import util_ships if __name__ == "__main__": @@ -39,7 +40,7 @@ if __name__ == "__main__": } # Symbolic name from in-game name - reverse_ship_map = {v: k for k, v in list(companion.ship_map.items())} + reverse_ship_map = {v: k for k, v in list(util_ships.ship_map.items())} bulkheads = list(outfitting.armour_map.keys()) @@ -98,7 +99,7 @@ if __name__ == "__main__": reader = csv.DictReader(csvfile, restval='') for row in reader: try: - module = outfitting.lookup({ 'id': row['id'], 'name': row['symbol'] }, companion.ship_map) + module = outfitting.lookup({ 'id': row['id'], 'name': row['symbol'] }, util_ships.ship_map) except: print(row['symbol']) print_exc() diff --git a/edshipyard.py b/edshipyard.py index 0eae47d3..0cf13dac 100644 --- a/edshipyard.py +++ b/edshipyard.py @@ -8,14 +8,14 @@ import re import time from config import config -import companion import outfitting +import util_ships from typing import Dict, Union, List __Module = Dict[str, Union[str, List[str]]] # Map API ship names to E:D Shipyard ship names -ship_map = companion.ship_map.copy() +ship_map = util_ships.ship_map.copy() ship_map.update( { @@ -172,11 +172,11 @@ def export(data, filename=None): string += '---\nCargo : {} T\nFuel : {} T\n'.format(cargo, fuel) # Add mass and range - assert data['ship']['name'].lower() in companion.ship_map, data['ship']['name'] - assert companion.ship_map[data['ship']['name'].lower()] in ships, companion.ship_map[data['ship']['name'].lower()] + assert data['ship']['name'].lower() in util_ships.ship_map, data['ship']['name'] + assert util_ships.ship_map[data['ship']['name'].lower()] in ships, util_ships.ship_map[data['ship']['name'].lower()] try: - mass += ships[companion.ship_map[data['ship']['name'].lower()]]['hullMass'] + mass += ships[util_ships.ship_map[data['ship']['name'].lower()]]['hullMass'] string += 'Mass : {:.2f} T empty\n {:.2f} T full\n'.format(mass, mass + fuel + cargo) multiplier = pow(min(fuel, fsd['maxfuel']) / fsd['fuelmul'], 1.0 / fsd['fuelpower']) * fsd['optmass'] @@ -197,7 +197,7 @@ def export(data, filename=None): return # Look for last ship of this type - ship = companion.ship_file_name(data['ship'].get('shipName'), data['ship']['name']) + ship = util_ships.ship_file_name(data['ship'].get('shipName'), data['ship']['name']) regexp = re.compile(re.escape(ship) + r'\.\d{4}-\d\d-\d\dT\d\d\.\d\d\.\d\d\.txt') oldfiles = sorted([x for x in os.listdir(config.get_str('outdir')) if regexp.match(x)]) if oldfiles: diff --git a/loadout.py b/loadout.py index 8eb90448..d3a08743 100644 --- a/loadout.py +++ b/loadout.py @@ -8,6 +8,7 @@ import time from config import config import companion +import util_ships def export(data, filename=None): @@ -20,7 +21,7 @@ def export(data, filename=None): return # Look for last ship of this type - ship = companion.ship_file_name(data['ship'].get('shipName'), data['ship']['name']) + ship = util_ships.ship_file_name(data['ship'].get('shipName'), data['ship']['name']) regexp = re.compile(re.escape(ship) + '\.\d\d\d\d\-\d\d\-\d\dT\d\d\.\d\d\.\d\d\.txt') oldfiles = sorted([x for x in os.listdir(config.get_str('outdir')) if regexp.match(x)]) if oldfiles: diff --git a/monitor.py b/monitor.py index c56edb73..13cb59ba 100644 --- a/monitor.py +++ b/monitor.py @@ -16,7 +16,7 @@ from typing import Tuple if TYPE_CHECKING: import tkinter -from companion import ship_file_name +import util_ships from config import config from EDMCLogging import get_main_logger @@ -1141,7 +1141,7 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below return - ship = ship_file_name(self.state['ShipName'], self.state['ShipType']) + ship = util_ships.ship_file_name(self.state['ShipName'], self.state['ShipType']) regexp = re.compile(re.escape(ship) + r'\.\d{4}\-\d\d\-\d\dT\d\d\.\d\d\.\d\d\.txt') oldfiles = sorted((x for x in listdir(config.get_str('outdir')) if regexp.match(x))) # type: ignore if oldfiles: diff --git a/outfitting.py b/outfitting.py index 1460ab5b..a132032d 100644 --- a/outfitting.py +++ b/outfitting.py @@ -3,7 +3,7 @@ import pickle from os.path import join import time -import companion +import util_ships from config import config @@ -521,7 +521,7 @@ def export(data, filename): h.write(header) for v in list(data['lastStarport'].get('modules', {}).values()): try: - m = lookup(v, companion.ship_map) + m = lookup(v, util_ships.ship_map) if m: h.write('%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n' % (rowheader, m['category'], m['name'], m.get('mount',''), m.get('guidance',''), m.get('ship',''), m['class'], m['rating'], m['id'], data['timestamp'])) except AssertionError as e: diff --git a/shipyard.py b/shipyard.py index 6659ab99..2a8edfdd 100644 --- a/shipyard.py +++ b/shipyard.py @@ -2,8 +2,8 @@ import time -from companion import ship_map from config import config +from util_ships import ship_map def export(data, filename): diff --git a/stats.py b/stats.py index f0cac5b8..baf5894a 100644 --- a/stats.py +++ b/stats.py @@ -8,9 +8,9 @@ from typing import TYPE_CHECKING, Any, AnyStr, Dict, List, NamedTuple, Optional, import companion import EDMCLogging import myNotebook as nb # noqa: N813 -from companion import ship_map from l10n import Locale from monitor import monitor +from util_ships import ship_map logger = EDMCLogging.get_main_logger() diff --git a/util_ships.py b/util_ships.py new file mode 100644 index 00000000..1ece05d9 --- /dev/null +++ b/util_ships.py @@ -0,0 +1,63 @@ +"""Utility functions relating to ships.""" + + +ship_map = { + 'adder': 'Adder', + 'anaconda': 'Anaconda', + 'asp': 'Asp Explorer', + 'asp_scout': 'Asp Scout', + 'belugaliner': 'Beluga Liner', + 'cobramkiii': 'Cobra MkIII', + 'cobramkiv': 'Cobra MkIV', + 'clipper': 'Panther Clipper', + 'cutter': 'Imperial Cutter', + 'diamondback': 'Diamondback Scout', + 'diamondbackxl': 'Diamondback Explorer', + 'dolphin': 'Dolphin', + 'eagle': 'Eagle', + 'empire_courier': 'Imperial Courier', + 'empire_eagle': 'Imperial Eagle', + 'empire_fighter': 'Imperial Fighter', + 'empire_trader': 'Imperial Clipper', + 'federation_corvette': 'Federal Corvette', + 'federation_dropship': 'Federal Dropship', + 'federation_dropship_mkii': 'Federal Assault Ship', + 'federation_gunship': 'Federal Gunship', + 'federation_fighter': 'F63 Condor', + 'ferdelance': 'Fer-de-Lance', + 'hauler': 'Hauler', + 'independant_trader': 'Keelback', + 'independent_fighter': 'Taipan Fighter', + 'krait_mkii': 'Krait MkII', + 'krait_light': 'Krait Phantom', + 'mamba': 'Mamba', + 'orca': 'Orca', + 'python': 'Python', + 'scout': 'Taipan Fighter', + 'sidewinder': 'Sidewinder', + 'testbuggy': 'Scarab', + 'type6': 'Type-6 Transporter', + 'type7': 'Type-7 Transporter', + 'type9': 'Type-9 Heavy', + 'type9_military': 'Type-10 Defender', + 'typex': 'Alliance Chieftain', + 'typex_2': 'Alliance Crusader', + 'typex_3': 'Alliance Challenger', + 'viper': 'Viper MkIII', + 'viper_mkiv': 'Viper MkIV', + 'vulture': 'Vulture', +} + + +def ship_file_name(ship_name: str, ship_type: str) -> str: + """Return a ship name suitable for a filename.""" + name = str(ship_name or ship_map.get(ship_type.lower(), ship_type)).strip() + if name.endswith('.'): + name = name[:-2] + + if name.lower() in ('con', 'prn', 'aux', 'nul', + 'com0', 'com2', 'com3', 'com4', 'com5', 'com6', 'com7', 'com8', 'com9', + 'lpt0', 'lpt2', 'lpt3', 'lpt4', 'lpt5', 'lpt6', 'lpt7', 'lpt8', 'lpt9'): + name = name + '_' + + return name.translate({ord(x): u'_' for x in ('\-1', '<', '>', ':', '"', '/', '\\', '|', '?', '*')})