Elite Dangerous Market Connector ("EDMC") is a third-party application for use with Frontier Developments' game "Elite Dangerous". Its purpose is to facilitate supplying certain game data to, and in some cases retrieving it from, a number of websites and other tools.
To do this it utilises the Journal Files written by the game when played on a PC. It also makes use of Frontier's Companion API ("Frontier's CAPI"), accessible once you've authorised this application.
We intend to release this version as the final 5.0.0 by 12th May 2021 latest unless major issues come to light. The current release 4.2.7 will NOT work well with Odyssey. It is in everyone's interests to test this version and get bugs fixed before Odyssey launches.
We now test against, and package with, Python 3.9.5. As a consequence of this we no longer support Windows 7. This is due toPython 3.9.x itself not supporting Windows 7. The application (both EDMarketConnector.exe and EDMC.exe) will crash on startup due to a missing DLL. This should have no other impact on users or plugin developers, other than the latter now being free to use features that were introduced since the Python 3.7 series. Developers can check the contents of the .python-version file in the source (it's not distributed with the Windows installer) for the currently used version in a given branch.
Changes and Enhancements
If the application detects it's running against a non-live (alpha or beta) version of the game it will append " (beta)" to the Commander name on the main UI.
Updated translations. Once more, thanks to all the translators!
We now sanity check a returned Frontier Authentication token to be sure it's for the current Commander. If it's not you'll see Error: customer_id doesn't match! on the bottom status line. Double-check you're using the correct credentials when authing!
New 'Main window transparency' slider on Settings > Appearance.
New command-line argument for EDMarketConnector.exe –reset-ui. This will:
Reset to the default Theme.
Reset the UI transparency to fully opaque.
The intention is this can be used if you've lost sight of the main window due to tweaking these options.
New CL arg for EDMarketConnector.exe –force-edmc-protocol . This is really only of use to core developers (its purpose being to force use of the edmc:// protocol for Frontier Auth callbacks, even when not 'frozen').
Linux config will be flushed to disk after any change. This means that EDMC.py can now actually make use of the latest CAPI auth if it's been updated by EDMarketConnector.py since that started. If you want to run multiple instances of the application under Linux then please check the updated Troubleshooting: Multi-Accounting wiki entry.
Linux and macOS: You can now set a font name and size in your config file. Ensuring this is a TTF font, rather than a bitmap font, should allow the application UI scaling to work.
'font' – the font name to attempt using
'font_size' – the font size to attempt using.
There is no UI for this in Preferences, you will need to edit your config file to set or change it, and then restart the application. This is not supported on Windows so as not to risk weird bugs. UI Scaling works on Windows without this.
We now also cite the git 'short hash' in the version string. For a Windows install of the application this is sourced from the .gitversion file (written during the build process). When running from source we attempt to use the command git rev-parse –short HEAD to obtain this. If this doesn't work it will be set to 'UNKNOWN'.
We have added a 'killswitch' feature to turn off specific functionality if it is found to have a bug. An example use of this would be in an "oh shit! we're sending bad data to EDDN!" moment so as to protect EDDN listeners such as EDDB. If we ever have to use this we'll announce it clearly and endeavour to get a fixed version of the program released ASAP. We will NOT be using this merely to try and get some laggards to upgrade.
Our logging code will make best efforts to still show class name and other such fields if it has trouble finding any of the required data for the calling frame. This means no longer seeing ??:??:?? when there is an issue with this.
We've pulled the latest Coriolis data which might have caused changes to ship and module names as written out to some files.
Odyssey
Every effort was made during the Odyssey Alphas to ensure that this application will continue to function correctly with it. As always, make a Bug Report if you find anything not working, but be sure to check our Known Issues first.
A new UI element 'Suit' now appears below 'Ship' when applicable. It details the type of suit you currently have equipped and its Loadout name. This UI element is collapsed/hidden if no suit/on-foot state is detected, e.g. not playing Odyssey.
Note that we can only reliably know about Suits and their Loadouts from a CAPI data pull (which is what we do automatically on docking if configured to do so, or when you press the 'Update' button). We do attempt to gather this data from Journal events as well, but if you switch to a Suit Loadout that hasn't been mentioned in them yet we won't be able to display that until the next CAPI data pull.
If anyone becomes aware of a 'suit loadouts' site/tool, a la Coriolis/EDSY but for Odyssey Suits, do let us know so we can add support for it! We're already kicking around ideas to e.g. place JSON text in the clipboard if the Suit Loadout is clicked.
Bug Fixes
Fix ship loadout export to files to not trip up in the face of file encoding issues. This relates to the 'Ship Loadout' option on the 'Output' tab of Settings/Preferences.
Ship Type/Name will now be greyed out, and not clickable, if we don't currently have loadout information for it. This prevents trying to send an empty loadout to your shipyard provider.
Bug fixed when handling CAPI-sourced shipyard information. This happens due to a Frontier bug with not returning shipyard data at all for normal stations. It has been observed that Frontier has fixed this bug for Odyssey.
Don't try to get Ship information from LoadGame event if directly in CQC.
Inara: Don't attempt to send an empty setCommanderReputationMajorFaction API call. This quietens an error from the Inara API caused when a Cmdr literally has no Major Faction Reputation yet.
Code Clean Up
Code pertaining to processing Journal events was reworked and noisy logging reduced as a consequence.
A little TRACE logging output has been commented out for now.
The code for File > Status has been cleaned up.
Localisation code has been cleaned up.
Code handling the Frontier Authorisation callback on Windows has been cleaned up.
A lot of general code cleanup relating to: Inara, outfitting, Frontier CAPI, hotkey (manual Updates), dashboard (Status.json monitoring), commodities files, and ED format ship loadout files.
Plugin Developers
The files stations.p and systems.p have been removed from the Windows Installer. These were never intended for third-party use. Their use in core code was for generating EDDB-id URLs, but we long since changed the EDDB plugin's handlers for that to use alternate URL formats based on game IDs or names. If you were using either to lookup EDDB IDs for systems and/or stations then please see how system_url() and station_url()now work in plugins/eddb.py . This change also removed the core (not plugin) eddb.py file which generated these files. You can find it still in the git history if needs be. It had gotten to the stage where generating systems.p took many hours and required 64-bit Python to have any hope of working due to memory usage.
All static data that is cleared for use by plugins is now in the file edmc_data.py and should be imported from there, not any other module. The one thing we didn't move was the 'bracket map' dictionaries in td.py as they're for use only by the code in that file. All future such data will be added to this file, and we'll endeavour not to make breaking changes to any of it without increasing our Major version.
config.appversion()is now a function that returns a semantic_version.Version. In contexts where you're expecting a string this should mostly just work. If needs be wrap it in str().
Example plugin plugintest updated. This includes an example of how to check core EDMC version if needs be. This example is also in PLUGINS.md.
config.py has undergone a major rewrite. You should no longer be using config.get(…) or config.getint(…), which will both give a deprecation warning. Use instead the correct config.get_<type>()function:
config.get_list(<key>)
config.get_str(<key>)
config.get_bool(<key>)
config.get_int(<key>)
Setting still uses config.set(…).
We now change the current working directory of EDMarketConnector.exe to its location as soon as possible in its execution. We're also paranoid about ensuring we reference the full path to the .gitversion file. However, no plugin should itself call os.chdir(…) or equivalent. You'll change the current working directory for all core code and other plugins as well (it's global to the whole process, not per-thread). Use full absolute paths instead (pathlib is what to use for this).
The state dict passed to plugins in journal_entry() calls (which is actually monitor.state in the core code) has received many additions relating to Odyssey, as well as other fixes and enhancements.
Support has been added for the NavRoute (not Route as v28 of the official Journal documentation erroneously labels it) Journal event and its associated file NavRoute.json. See PLUGINS.md:Events documentation
Similarly, there is now support for the ModuleInfo event and its associated ModulesInfo.json file.
state['Credits'] – until now no effort was made to keep this record of the credits balance up to date after the initial LoadGame event. This has now been addressed, and the balance should stay in sync as best it can from the available Journal events. It will always correct back to the actual balance on each CAPI data pull or game relog/restart.
state['Cargo'] now takes account of any CargoTransfer events. This was added to the game in the Fleet Carriers update, but also covers transfers to/from an SRV.
state['OnFoot'] is a new boolean, set true whenever we detect the Cmdr is on-foot, i.e. not in any type of vehicle (Cmdr's own ship, SRV, multi-crew in another Cmdr's ship, Apex taxi, or a Dropship).
state['Suits']and state['SuitLoadouts'] added as dicts containing information about the Cmdr's owned Suits and the Loadouts the Cmdr has defined to utilise them (and on-foot weapons). Note that in the raw CAPI data these are arrays if all members contiguously exist, else a dictionary, but we have chosen to always coerce these to a python dict for simplicity. They will be empty dicts, not None if there is no data. We use the CAPI data names for keys, not the Journal ones – e.g. slots for weapons equipped, not Modules. The id field found on e.g. weapon details in suit loadouts may be None if we got the data from the Journal rather than the CAPI data. NB: This data is only guaranteed up to date and correct after a fresh CAPI data pull, as the current Journal events don't allow for updating it on the fly (this should change in a future Odyssey patch).
state['SuitCurrent'] and state['SuitLoadoutCurrent'] contain the obvious "currently in use" data as per the Suits/SuitLoadouts.
Tracking of the new Odyssey 'Microresources' has been added:
Component – dict for 'Ship Locker' inventory.
Item – dict for 'Ship Locker' inventory.
Consumable – dict for 'Ship Locker' inventory.
Data – dict for 'Ship Locker' inventory.
BackPack – on-foot inventory, a dict containing again dicts for Component , Item, Consumable and Data. However note that the lack of a Journal event when throwing a grenade, along with no BackPackMaterials event if logging in on-foot means that we can't track the BackPack inventory perfectly.
See the updated PLUGINS.md file for details.
Note that during the Odyssey Alpha it was observed that the CAPI data['commander']['docked'] boolean was always true if the Cmdr was in their ship. This is a regression from pre-Odyssey behaviour. The core EDMC code copes with this. Please add a reproduction to the issue about this: PTS CAPI saying Commander is Docked after jumping to new system.
If you’re looking to get that fourth “Elite,” pretty soon might be your best chance. Arena is famously extremely dead, but I suspect that the release ...