diff --git a/ChangeLog.md b/ChangeLog.md index 949b6bf8..ebaf4d71 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -128,7 +128,7 @@ for removal in the next major release! Please look for that change coming soon. **Changes and Enhancements** * Added new `modules.json` and `ships.json` files to improve security and readability -* Added a core Spanch URL provider plugin +* Added a core Spansh URL provider plugin * Added a new auth response page for successful FDEV authentication * Added a new Open Log Folder option to the Help menu * Added a new `--start_min` command flag to force the application to start minimized @@ -194,7 +194,7 @@ Known Issues Release 5.9.3 === -This release is identical to 5.9.3, except reverts a bad change. +This release is identical to 5.9.2, except reverts a bad change. - REVERTS Deprecated load_module() is now retired (#1462) diff --git a/edmarketconnector.xml b/edmarketconnector.xml index a4187153..cc797794 100644 --- a/edmarketconnector.xml +++ b/edmarketconnector.xml @@ -1,17 +1,13 @@ -<?xml version="1.0" encoding="utf-8"?> -<rss version="2.0" xmlns:sparkle="http://www.andymatuschak.org/xml-namespaces/sparkle" xmlns:dc="http://purl.org/dc/elements/1.1/"> - <channel> - <title>E:D Market Connector</title> - <link>https://raw.githubusercontent.com/EDCD/EDMarketConnector/releases/edmarketconnector.xml</link> - <description>Most recent changes with links to updates.</description> - - <!-- Important: Mac must be listed before Windows since Sparkle < 1.18.1 on OSX doesn't check sparkle:os --> - - <item> - <title>Release 3.44</title> - <description> - <![CDATA[ -<style>h2 { font-size: 105%; }</style> +<?xml version="1.0" encoding="UTF-8"?> +<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sparkle="http://www.andymatuschak.org/xml-namespaces/sparkle" version="2.0"> + <channel> + <title>E:D Market Connector</title> + <link>https://raw.githubusercontent.com/EDCD/EDMarketConnector/releases/edmarketconnector.xml</link> + <description>Most recent changes with links to updates.</description> + <!-- Important: Mac must be listed before Windows since Sparkle < 1.18.1 on OSX doesn't check sparkle:os --> + <item> + <title>Release 3.44</title> + <description><![CDATA[<style>h2 { font-size: 105%; }</style> <h2>Release 3.44</h2> <p><b>CHANGE OF MAINTAINER</b></p> <p>Due to a lack of time to give the project the attention it needs Marginal has handed over ownership of the EDMarketConnector GitHub repository to the EDCD (Elite Dangerous Community Developers) organisation.</p> @@ -21,232 +17,2221 @@ <ul> <li>Version increased to 3.4.4.0 / 3.44.</li> <li>URL the application checks for updates changed to point to github,</li> +</ul>]]></description> + <enclosure url="https://github.com/EDCD/EDMarketConnector/releases/download/rel-344/EDMarketConnector_mac_344.zip" sparkle:os="macos" sparkle:version="3.4.4.0" length="6058091" type="application/octet-stream" /> + </item> + <!-- Windows --> + <item> + <title>Release 5.10.4</title> + <description><![CDATA[<style>body { font-family:"Segoe UI","Tahoma"; font-size: 75%; } h2 { font-family:"Segoe UI","Tahoma"; font-size: 105%; }</style> +<p>We now test against, and package with, Python 3.11.7.</p> +<p><strong>As a result, we do not support Windows 7, 8, or 8.1.</strong><br> +<h2>Release 5.10.4</h2> +<p>This release contains updated dependencies, modules files, translations, and adds two new EDDN schemas. It also +adds Turkish translations to EDMC!</p> +<p>We now sign our code! This does mean that built EXEs are now slightly modified on our developer's machines. +For information on what this means, and opt-out options, please visit <a href="https://github.com/EDCD/EDMarketConnector/wiki/Code-Signing-and-EDMC">https://github.com/EDCD/EDMarketConnector/wiki/Code-Signing-and-EDMC</a></p> +<p><strong>Changes and Enhancements</strong></p> +<ul> +<li>Adds Turkish Translations to EDMC</li> +<li>Adds DockingDenied and DockingGranted EDDN Schemas</li> +<li>Updated FDevIDs Dependency</li> +<li>Updated Translations</li> +<li>Updated modules files to process several missing module types used for bug squishing or going fast</li> +<li>Updated Python Dependencies</li> +</ul> +<p><strong>Bug Fixes</strong></p> +<ul> +<li>Fixed a bug on older Python versions which couldn't import updated type annotations</li> +</ul> +<p><strong>Plugin Developers</strong></p> +<ul> +<li>modules.p and ships.p are deprecated, and slated for removal in 5.11+!</li> +<li>The <code>openurl()</code> function in ttkHyperlinkLabel has been deprecated, +and slated for removal in 5.11+! Please migrate to <code>webbrowser.open()</code>.</li> +</ul> +<hr> +<h2>Release 5.10.3</h2> +<p>This release contains a bugfix for the shipyard outfitting parsing system and an update to the French translations. </p> +<em>We now sign our code! This does mean that built EXEs are now slightly modified on our developer's machines. +For information on what this means, and opt-out options, please visit <a href="https://github.com/EDCD/EDMarketConnector/wiki/Code-Signing-and-EDMC">https://github.com/EDCD/EDMarketConnector/wiki/Code-Signing-and-EDMC</a></em> +<p><strong>Changes and Enhancements</strong></p> +<ul> +<li>Updated French Translations</li> +</ul> +<p><strong>Bug Fixes</strong></p> +<ul> +<li>Fixed a bug that crashed the outfitting system when encountering armor. (Thanks TCE team for identifying this one!)</li> +</ul> +<p><strong>Plugin Developers</strong></p> +<ul> +<li>modules.p and ships.p are deprecated, and slated +for removal in the next major release! Please look for that change coming soon. </li> +<li>Note to plugin developers: The <code>openurl()</code> function in ttkHyperlinkLabel has been deprecated, +and slated for removal in the next major release! Please migrate to <code>webbrowser.open()</code>.</li> </ul> - ]]> - </description> - <enclosure - url="https://github.com/EDCD/EDMarketConnector/releases/download/rel-344/EDMarketConnector_mac_344.zip" - sparkle:os="macos" - sparkle:version="3.4.4.0" - length="6058091" - type="application/octet-stream" - /> - </item> - <!-- Windows --> +<hr> - <item> - <title>Release 4.2.3</title> - <description> - <![CDATA[ -<style>body { font-family:"Segoe UI","Tahoma"; font-size: 75%; } h2 { font-family:"Segoe UI","Tahoma"; font-size: 105%; }</style> +<h2>Release 5.10.2</h2> +<p>This release contains updated dependencies, some bug fixes, a few minor enhancements to some supporting files, +and some resorted resources as well as a new image for some of the built EXEs.</p> -<h2>Release 4.2.3</h2> -<p>This release mostly addresses an issue when Frontier Authorisation gets stuck -on 'Logging in...' despite completing the authorisation on the Frontier -website.</p> +<em>We now sign our code! This does mean that built EXEs are now slightly modified on our developer's machines. +For information on what this means, and opt-out options, please visit <a href="https://github.com/EDCD/EDMarketConnector/wiki/Code-Signing-and-EDMC">https://github.com/EDCD/EDMarketConnector/wiki/Code-Signing-and-EDMC</a></em> +<p><strong>Changes and Enhancements</strong></p> +<ul> +<li>Added additional logging to the Python build string in the case of missing files</li> +<li>Added a new icon to EDMC's Command-Line EXE</li> +<li>Added additional logging to the build system</li> +<li>Updated several dependencies</li> +<li>Updated FDEV IDs</li> +<li>Updated relevant copyright dates</li> +<li>Updated automatic build script to support code signing workflow</li> +<li>Updated translations to the latest versions</li> +<li>Moved a few unused files to the resources folder. These files have no references in the code</li> +</ul> +<p><strong>Bug Fixes</strong></p> +<ul> +<li>Fixed a bug that could cause EDMC to handle SIGINT signals improperly</li> +<li>Fixed a bug that could result in URL providers to be set to invalid values</li> +<li>Fixed a bug that could result in Coriolis URL providers to revert back to "Auto" on language translations</li> +<li>Fixed a bug where Inara didn't understand being blown up by a Thargoid, and blew itself up instead</li> +<li>Fixed a printing issue for the localization system for unused strings</li> +</ul> +<p><strong>Removed Files</strong></p> +<ul> +<li>Removed two unused manifest and MacOS icon files which are no longer in use.</li> +</ul> +<p><strong>Known Issues</strong></p> +<ul> +<li>Some users of TCE have reported issues with newer versions of EDMC with TCE. <ul> +<li>We have been unable to replicate this issue. If you are able to assist, please +add your information here: <a href="https://github.com/EDCD/EDMarketConnector/issues/2176">https://github.com/EDCD/EDMarketConnector/issues/2176</a></li> +</ul> +</li> +</ul> +<p><strong>Plugin Developers</strong></p> +<ul> +<li>modules.p and ships.p are deprecated, and slated +for removal in the next major release! Please look for that change coming soon. </li> +<li>Note to plugin developers: The <code>openurl()</code> function in ttkHyperlinkLabel has been deprecated, +and slated for removal in the next major release! Please migrate to <code>webbrowser.open()</code>.</li> +</ul> + +<hr> + +<h2>Release 5.10.1</h2> +<p>This release contains a number of bugfixes, minor performance enhancements, workflow and dependency updates, and a function deprecation.</p> +<em>Note to plugin developers: modules.p and ships.p are deprecated, and slated for removal in the next major release! Please look for that change coming soon. </em> +<em>Note to plugin developers: The openurl() function in ttkHyperlinkLabel has been deprecated, and slated for removal in the next major release! Please migrate to webbrowser.open().</em> + +<p><strong>Changes and Enhancements</strong></p> +<ul> +<li>Deprecated `openurl()`. Please migrate to `webbrowser.open()`</li> +<li>Updated a number of list comparisons to use more efficient tuple comparisons</li> +<li>Updated a few type hints</li> +<li>Updated a few binary comparitors to be more efficient</li> +<li>Moved `resources.json` and `modules.json` back to the top level for all users</li> +<li>Updated several dependencies</li> +<li>Updated Python version to 3.11.7</li> +</ul> +<p><strong>Bug Fixes</strong></p> +<ul> +<li>Fixed an issue where resources files could be in different locations for different users.<ul> +<li>These files are now in the same location (top level) for all users on all distributions.</li> +</ul> +</li> +<li>Fixed an issue where CMDRs without the Git application installed would crash on start if running from Source.<ul> +<li>Thanks to the Flatpak team for pointing this one out!</li> +</ul> +</li> +<li>Fixed a bug where CMDRs running from source would have their git hash version displayed as UNKNOWN.<ul> +<li>We're now more failure tolerant and use the bundled .gitversion if no true git hash is provided.</li> +</ul> +</li> +<li>Fixed a bug where starting two copies of EDMC with a valid install would not generate a duplicate warning.</li> +</ul> +<hr> + +<h2>Release 5.10.0</h2> +<p>This release contains a number of under-the-hood changes to EDMC designed to improve performance, code maintainability, and stability of the EDMC application, while providing new features and quality-of-life fixes.</p> +<em>Note to plugin developers: modules.p and ships.p are deprecated, and slated for removal in the next major release! Please look for that change coming soon. </em> + +<p><strong>Changes and Enhancements</strong></p> +<ul> +<li>Added new <code>modules.json</code> and <code>ships.json</code> files to improve security and readability</li> +<li>Added a core Spansh URL provider plugin</li> +<li>Added a new auth response page for successful FDEV authentication</li> +<li>Added a new Open Log Folder option to the Help menu</li> +<li>Added a new <code>--start_min</code> command flag to force the application to start minimized</li> +<li>Added a new pop-up if plugins fail to load or are not supported</li> +<li>Updated commodities and module files to the latest versions</li> +<li>Updated core EDMC and core Plugin menus to a standardized layout</li> +<li>Updates the Inara URL formats to the new endpoints</li> +</ul> +<p><strong>Bug Fixes</strong></p> +<ul> +<li>Fixed an issue where indentation of text strings in certain settings windows under various languages +would be unevenly indented</li> +<li>Fixed an issue where the Plugins Folder label in the Plugins settings window would cut off the +selection box for the plugin storage location</li> +</ul> +<p><strong>Code Clean Up</strong></p> +<ul> +<li>Added future annotation imports to help with code compatibility</li> +<li>Added a few conditional checks on input processing</li> +<li>Simplified some RegEx expressions, complex functions, logic flows, and Import statements</li> +<li>Simplified the WinSparkle GitHub Build Action</li> +<li>Began to change single-character variables to more descriptive names</li> +<li>Moved a number of global variables into their requisite classes </li> +<li>Updated a number of dependencies to the latest versions</li> +<li>Updated GitHub Actions to the latest versions</li> +<li>Updated a number of resource-allocating functions to use more efficient closing logic</li> +<li>Updated some calls to arrays to be more efficient</li> +<li>Removed a number of old-style typing hints in favor of PEP 585 style hints</li> +<li>Removed a number of redundant <code>if - return - else</code> or <code>raise - else</code> statements for code readability</li> +<li>Removed some default parameter assignments</li> +<li>Removed some obsolete calls to Object</li> +</ul> +<p><strong>Plugin Developers</strong></p> +<ul> +<li><code>modules.p</code> and <code>ships.p</code> have been deprecated, and will be removed in 6.0. +If you are using these files, please update to use the new <code>modules.json</code> and <code>ships.json</code> files instead. </li> +<li>A new method of standardizing the paddings used in settings panels has been applied to the core settings panels. +We strongly encourage you to follow these style hints! A proper guide will be added to the wiki.</li> +</ul><hr> + +<h2>Release 5.9.5</h2> +<p>This release fixes an uncommon problem with the uninstaller logic if upgrading from a version prior to 5.9.0 to improve consistancy across versions.</p> +<em>Note to plugin developers: modules.p and ships.p will be deprecated in the next version, and slated for removal in the next major release! Please look for that change coming soon.</em> +<ul> +<li>Updates Module pickle files to latest values.</li> +<li>Fixes a problem with the uninstaller logic caused by prior versions having fluctuating GUIDs.</li> +</ul><hr> + +<h2>Release 5.9.4</h2> +<p>This release fixes a widely-reported bug that resulted in the cAPI Authentication flow being disrupted for a subset of users. Thank you to all the CMDRs who reported this to us and provided logs to us so that we could get the issue isolated.</p> +<ul> +<li>Fixes a missing registry issue that could cause the EDMC:// protocol to fail. (#2061, #2059, #2058, #2057)</li> +<li>Renames the default start menu shortcut to be more clear. (#2062)</li> +</ul><hr> + +<h2>Release 5.9.3</h2> +<p>This release is identical to 5.9.2, except reverts a bad change. </p> +<ul> +<li>REVERTS Deprecated load_module() is now retired (#1462)</li> +</ul><hr> + +<h2>Release 5.9.2</h2> +<p>This release fixes a critical issue on clean installs which would not update +the Windows registry to allow for protocol handling.</p> +<p>All users are strongly encouraged to update.</p> +<ul> +<li>Fixes a critical bug with the installer on new installs not creating registry keys (#2046)</li> +<li>Re-enables automatic submodule updates (#1443)</li> +<li>Help -> About Version String can now be copied to clipboard (#1936)</li> +<li>EDMC Task Manager Printout now is less useless (#2045)</li> +<li>Deprecated load_module() is now retired (#1462)</li> +<li>API Keys are masked in Settings (#2047)</li> +<li>Installer will now refuse to install on Win7 and Earlier (#1122)</li> +</ul><hr> + +<h2>Release 5.9.1</h2> +<p>This release updates the build system in use for EDMC to a more feature-rich installer, as well +as updating the commodity information to be up-to-date for Update 16.</p> +<p>NOTE: This version hands over the installer to an EXE file for Windows instead of an MSI. +This does not change any functionality or plugin capability of EDMC. You may need to +manually close EDMC during the update process if updating from version 5.9.0 or earlier.</p> +<ul> +<li>Removed the old WiX Build System</li> +<li>Handed over the Build system to Inno Setup</li> +<li>Broke apart the Build and Installer scripts for ease of development</li> +<li>Updated FDevIDs to latest version</li> +<li>Updated coriolis-data to latest version</li> +<li>Updated some internal documentation</li> +</ul><hr> + +<h2>Release 5.9.0</h2> +<p>This release is essentially the same as 5.9.0-rc1 with only a typo, the version and +this changelog updated.</p> +<p>This release contains the removal of the EDDB module, as well as a few under-the-hood +updates.</p> +<ul> +<li>Removes the EDDB plugin due to EDDB shutting down.</li> +<li>Unsets EDDB as the default handler for certain URL preferences.</li> +<li>Updates the FDevIDs to latest versions.</li> +<li>Removes EDDB references from help string documentations.</li> +<li>Updated a number of dependencies to their latest working versions</li> +</ul><hr> + +<h2>Release 5.8.1</h2> +<p>This fixes a bug where the Cmdr/APIKey sections on Settings > EDSM would never be shown.</p> +<hr> + +<h2>Release 5.8.0</h2> +<p>This release is essentially the same as 5.8.0-rc3 with only the version and +this changelog updated.</p> +<p>It brings a new feature related to Fleetcarrier data, some convenience for +Linux users, some fixes, and otherwise some internal changes that should not +adversely affect either users or third-party plugins. For the latter, read +below for some new/changed things that could benefit you.</p> <ul> <li> -<p>Allow <code>edmc...</code> argument to EDMarketConnector.exe. This should only be -necessary when something has prevented your web browser from invoking the -<code>edmc</code> protocol via DDE.</p> -<p>If you were encountering the 'Logging in...' issue and still do with this -release then please try running the application via the new -<code>EDMarketConnector - localserver-auth.bat</code> file in the installation -directory.</p> -<p>This simply runs EDMarketConnector.exe with the -<code>--force-localserver-for-auth</code> command-line argument. This forces the code -to setup and use a webserver on a random port on localhost for the -Frontier Authorisation callback, the same way it already works on -non-Windows platforms.</p> +<p>This release, and all future ones, now create two additional archive files +in the GitHub release:</p> +<ol> +<li><code>EDMarketConnector-release-<version>.zip</code></li> +<li><code>EDMarketConnector-release-<version>.tar.gz</code></li> +</ol> +<p>The advantage of these over the GitHub auto-generated ones is that they +have been hand-crafted to contain <em>all</em> the necessary files, and <em>only</em> +those files.</p> +<p><strong>If you use the application from source, and not via a git clone, then we +highly recommend you use one of these archives, not the GitHub +auto-generated ones.</strong></p> +<p>Anyone installing on Windows should continue to use the +<code>EDMarketConnector_win_<version>.msi</code> files as before.</p> </li> <li> -<p>Add Korean translation to both the application and the installer.</p> +<p><strong>New Feature</strong> - You can now have the application query the <code>/fleetcarrier</code> +CAPI endpoint for data about your Fleet Carrier. The data will then be +passed to interested plugins.</p> +<p>Note that there are some caveats:</p> +<ol> +<li> +<p>This feature defaults to <em>Off</em>. The option is on the Configuration tab +of Settings as "Enable Fleetcarrier CAPI Queries". <strong>It is advised to only +enable this if you know you utilise plugins that make use of the data.</strong></p> +</li> +<li> +<p>These queries are <em>only</em> triggered by <code>CarrierBuy</code> and <code>CarrierStats</code> +Journal events, i.e. upon buying a Fleetcarrier or opening the Carrier +Management UI in-game. <strong>NB: There is a 15 minute cooldown between +queries.</strong></p> +</li> +<li> +<p>If you have Fleetcarrier cargo which got into the cargo hold through a lot +of individual transactions, or if you have a lot of separate buy/sell +orders then these queries can take a <em>long</em> time to complete.</p> +<p><strong>If this happens with your game account then all other CAPI queries will +be blocked until the <code>/fleetcarrier</code> query completes.</strong> 'Other CAPI +queries' means those usually triggered upon docking to gather station +market, shipyard and outfitting data. To ameliorate the effects of this +there is currently a timeout of 60 seconds on <code>/fleetcarrier</code> queries, +<strong>and will not occur more often than every 15 minutes</strong>.</p> +<p>We plan to address this by moving the <code>/fleetcarrier</code> queries into their +own separate thread in the future.</p> +</li> +</ol> +</li> +<li> +<p>The code for choosing the 'Output' folder is now simply the <code>tkinter</code> +function for such a dialogue, rather than a special case on Windows. In +the past the former had issues with Unicode characters, but in testing no +such issue was observed (on a supported OS).</p> +</li> +<li> +<p>There are two new items on the "Help" menu:</p> +<ol> +<li>Troubleshooting -> <a href="https://github.com/EDCD/EDMarketConnector/wiki/Troubleshooting">Wiki:Troubleshooting</a> +</li> +<li>Report A Bug -> <a href="https://github.com/EDCD/EDMarketConnector/issues/new?assignees=&labels=bug%2C+unconfirmed&template=bug_report.md&title=">Issues - New Bug Report</a> +</li> +</ol> +</li> +<li> +<p>Translations have been updated. Thanks again to our volunteer translators!</p> +</li> +<li> +<p>If we ever activate any functionality killswitches, the popup denoting which +are active has been made more readable.</p> +</li> +<li> +<p>There's a new section in <code>Contributing.md</code> - "Python Environment". This +should aid any new developers in getting things set up.</p> +</li> +</ul> +<h2><a id="user-content-linux-users" class="anchor" aria-hidden="true" href="#linux-users"><span aria-hidden="true" class="octicon octicon-link"></span></a>Linux Users</h2> +<p>We now ship an <code>io.edcd.EDMarketConnector.desktop</code> file. To make use of this +you should run <code>scripts/linux-setup.sh</code> <em>once</em>. This will:</p> +<ol> +<li> +<p>Check that you have <code>$HOME/bin</code> in your PATH. If not, it will abort.</p> +</li> +<li> +<p>Create a shell script <code>edmarketconnector</code> in <code>$HOME/bin</code> to launch the +application.</p> +<p>NB: This relies on the filesystem location you placed the source in not +changing. So if you move the source you will need to re-run the script.</p> +</li> +<li> +<p>Copy the .desktop and .icon files into appropriate locations. The .desktop +file utilises the shell script created in step 2, and thus relies on it +existing <em>and</em> on it being in a directory that is in your PATH.</p> +</li> +</ol> +<p>Once this has been completed any XDG-compliant desktops should have an entry +for "E:D Market Connector" in their "Games" menu.</p> +<h2><a id="user-content-fixes" class="anchor" aria-hidden="true" href="#fixes"><span aria-hidden="true" class="octicon octicon-link"></span></a>Fixes</h2> +<ul> +<li> +<p>The tracking of a Cmdr's location that was being performed by the core EDDN +plugin has been moved into the Journal monitoring code. This results in +the tracking being correct upon application (re)start, reflecting the state +from the latest Journal file, rather than only picking up with any +subsequent new Journal events.</p> +<p>This change should remove instances of "Wrong System! Missed Jump ?" and +similar sanity-check "errors" when continuing to play after a user restarts +the application whilst the game is running.</p> +<p>Plugin developers, see below for how this change can positively affect you.</p> +</li> +<li> +<p>The name of the files written by "File" > "Save Raw Data" now have a <code>.</code> +between the system and station names.</p> +</li> +<li> +<p>Use of CAPI data in <code>EDMC.exe</code> when invoked with either <code>-s</code> or <code>-n</code> +arguments hadn't been updated for prior changes, causing such invocations to +fail. This has been fixed.</p> +</li> +</ul> +<h2><a id="user-content-plugin-developers" class="anchor" aria-hidden="true" href="#plugin-developers"><span aria-hidden="true" class="octicon octicon-link"></span></a>Plugin Developers</h2> +<ul> +<li> +<p>Each plugin is now handed its own sub-frame as the <code>parent</code> parameter passed +to <code>plugin_app()</code> <em>instead of the actual main UI frame</em>. These new Frames +are placed in the position that plugin UI would have gone into. This should +have no side effects on well-behaved plugins.</p> +<p>However, if you have code that attempts to do things like <code>parent.children()</code> +or the like in your <code>plugin_app()</code> implementation, this might have stopped +working. You shouldn't be trying to do anything with any of the UI outside +your plugin <em>anyway</em>, but if you definitely have a need then look things up +using <code>.nametowidget()</code>. There are examples in the core plugins (which <em>DO</em> +have good reason, due to maintaining main UI label values).</p> +<p>All of the plugins listed on our Wiki were given <em>perfunctory</em> testing and no +issues from this change were observed.</p> +<p>This is a necessary first step to some pending plugin/UI work:</p> +<ul> +<li><a href="https://github.com/EDCD/EDMarketConnector/issues/1792">UI: Alllow for re-ordering third-party plugins' UIs</a></li> +<li><a href="https://github.com/EDCD/EDMarketConnector/issues/1813">UI: Allow configuration of number of UI columns.</a></li> +<li><a href="https://github.com/EDCD/EDMarketConnector/issues/1814">Re-work how Plugins' Settings are accessed</a></li> +</ul> +</li> +<li> +<p><strong>New</strong> - <code>capi_fleetcarrier()</code> function to receive the data from a CAPI +<code>/fleetcarrier</code> query. See PLUGINS.md for details.</p> +</li> +<li> +<p>It was found that the <code>ShutDown</code> event (note the capitalisation, this is +distinct from the actual Journal <code>Shutdown</code> event) synthesized for plugins +when it is detected that the game has exited was never actually being +delivered. Instead this was erroneously replaced with a synthesized <code>StartUp</code> +event. This has been fixed.</p> +</li> +<li> +<p>As the location tracking has been moved out of the core EDDN plugin, and into +monitor.py all of it is now available as members of the <code>state</code> dictionary +which is passed to <code>journal_entry()</code>.</p> +<p>This both means that no plugin should need to perform such location state +tracking itself <em>and</em> they can take advantage of it being fully up to date +when a user restarts the application with the game running.</p> +<p>A reminder: When performing 'catch up' on the newest Journal file found at +startup, the application does <strong>not</strong> pass any events to the +<code>journal_entry()</code> method in plugins. This is to avoid spamming with +data/state that has possibly already been handled, and in the case of the +Cmdr moving around will end up not being relevant by the time the end of the +file is reached. This limitation was also why the core EDDN plugin couldn't +properly initiate its location tracking state in this scenario.</p> +<p>See PLUGINS.md for details of the new <code>state</code> members. Pay particular +attention to the footnote that details the caveats around Body tracking.</p> +<p>Careful testing has been done for <em>only</em> the following. So, if you make use +of any of the other new state values and spot a bug, please report it:</p> +<ol> +<li>SystemName</li> +<li>SystemAddress</li> +<li>Body (Name)</li> +<li>BodyID</li> +<li>BodyType</li> +<li>StationName</li> +<li>StationType</li> +<li>(Station) MarketID</li> +</ol> +</li> +<li> +<p>There is an additional property <code>request_cmdr</code> on <code>CAPIData</code> objects, which +records the name of the Cmdr the request was made for.</p> +</li> +<li> +<p><code>FDevIDs</code> files are their latest versions at time of this version's build.</p> +</li> +<li> +<p><code>examples\plugintest</code> - dropped the "pre-5.0.0 config" code, as it's long +since irrelevant.</p> +</li> +</ul> +<h2><a id="user-content-developers" class="anchor" aria-hidden="true" href="#developers"><span aria-hidden="true" class="octicon octicon-link"></span></a>Developers</h2> +<ul> +<li> +<p>If you utilise a git clone of the source code, you should also ensure the +sub-modules are initialised and synchronised. +<a href="https://github.com/EDCD/EDMarketConnector/wiki/Running-from-source#obtain-a-copy-of-the-application-source">wiki:Running from source</a> +has been updated to include the necessary commands.</p> +</li> +<li> +<p>The <code>coriolis-data</code> git sub-module now uses an HTTPS, not "git" URL, so won't +require authentication for a simple <code>git pull</code>.</p> +</li> +<li> +<p>If you have a <code>dump</code> directory in CWD when running EDMarketConnector.py under +a debugger you will get files in that location when CAPI queries complete. +This will now include files with names of the form +<code>FleetCarrier.<callsign>.<timstamp>.json</code> for <code>/fleetcarrier</code> data.</p> +</li> +<li> +<p>All the main UI tk widgets are now properly named. This might make things +easier if debugging UI widgets as you'll no longer see a bunch of <code>!label1</code>, +<code>!frame1</code> and the like.</p> +<p>Each plugin's separator is named as per the scheme <code>plugin_hr_<X></code>, and when +a plugin has UI its new container Frame is named <code>plugin_X</code>. Both of these +start with <code>1</code>, not <code>0</code>.</p> +</li> +</ul> +<hr> + + +<h2>Release 5.7.0</h2> +<p>This release re-enables CAPI queries for Legacy players. As a result, the +'Update' button functionality is now restored for Legacy players, along with +"Automatically update on docking" functionality.</p> +<ul> +<li> +<p>We now test against, and package with, Python 3.11.1, 32-bit.</p> +</li> +<li> +<p>This release is functionally identical to 5.7.0-rc1, as no problems were +reported with that.</p> +</li> +<li> +<p>As noted above, Legacy players now have CAPI functionality once more. +Plugin developers check below for how you can determine the source galaxy +of such data.</p> +</li> +<li> +<p>Due to a bug it turned out that a workaround for "old browsers don't support +very long URLs" had been inactive since late 2019. As no-one has noticed +or complained we've now removed the defunct code in favour of the simple +<code>webbrowser.open(<url>)</code>.</p> +<p>Testing showed that all of Firefox, Chrome and Chrome-based Edge worked with +very long URLs without issues.</p> +</li> +<li> +<p><code>EDMC.exe -n</code> had been broken for a while, it now functions once more.</p> +</li> +<li> +<p>Some output related to detecting and parsing <code>gameversion</code> from Journals +has been moved from INFO to DEBUG. This returns the output of any <code>EDMC.exe</code> +command to the former, quieter, version.</p> +</li> +</ul> +<h2><a id="user-content-bugs" class="anchor" aria-hidden="true" href="#bugs"><span aria-hidden="true" class="octicon octicon-link"></span></a>Bugs</h2> +<ul> +<li> +<p>A corner case of "game not running" and "user presses 'Update' button" would +result in an empty <code>uploaderID</code> string being sent to EDDN. Such messages are +still accepted by the EDDN Gateway, and the Relay then obfuscates this field +anyway. So, at worse, this would make it look like the same uploader was in +lots of different places. This has been fixed.</p> +</li> +<li> +<p>The message about converting legacy <code>replay.jsonl</code> was being emitted even +when there was no file to convert. This has been fixed.</p> +</li> +</ul> +<h2><a id="user-content-plugin-developers" class="anchor" aria-hidden="true" href="#plugin-developers"><span aria-hidden="true" class="octicon octicon-link"></span></a>Plugin Developers</h2> +<ul> +<li> +<p>An erroneous statement about "all of Python stdlib" in PLUGINS.md has been +corrected. We don't/can't easily include all of this. Ask if any part of it +you require is missing.</p> +</li> +<li> +<p>In order to not pass Legacy data to plugins without them being aware of it +there is now a new function <code>cmdr_data_legacy()</code>, which mirrors the +functionality of <code>cmdr_data()</code>, but for Legacy data only. See PLUGINS.md +for more details.</p> +</li> +<li> +<p>The <code>data</code> passed to <code>cmdr_data()</code> and <code>cmdr_data_legacy()</code> is now correctly +typed as <code>CAPIData</code>. This is a sub-class of <code>UserDict</code>, so you can continue +to use it as such. However, it also has one extra property, <code>source_host</code>, +which can be used to determine if the data was from the Live or Legacy +CAPI endpoint host. See PLUGINS.md for more details.</p> +</li> +<li> +<p>If any plugin had been attempting to make use of <code>config.get_int('theme')</code>, +then be aware that we've finally moved from hard-coded values to actual +defined constants. Example use would be as in:</p> +<div class="highlight highlight-source-python"><pre><span class="pl-k">from</span> <span class="pl-s1">config</span> <span class="pl-k">import</span> <span class="pl-s1">config</span> +<span class="pl-k">from</span> <span class="pl-s1">theme</span> <span class="pl-k">import</span> <span class="pl-s1">theme</span> + +<span class="pl-s1">active_theme</span> <span class="pl-c1">=</span> <span class="pl-s1">config</span>.<span class="pl-en">get_int</span>(<span class="pl-s">'theme'</span>) +<span class="pl-k">if</span> <span class="pl-s1">active_theme</span> <span class="pl-c1">==</span> <span class="pl-s1">theme</span>.<span class="pl-v">THEME_DARK</span>: + ... +<span class="pl-k">elif</span> <span class="pl-s1">active_theme</span> <span class="pl-c1">==</span> <span class="pl-s1">theme</span>.<span class="pl-v">THEME_TRANSPARENT</span>: + ... +<span class="pl-k">elif</span> <span class="pl-s1">active_theme</span> <span class="pl-c1">==</span> <span class="pl-s1">theme</span>.<span class="pl-v">THEME_DEFAULT</span>: + ... +<span class="pl-k">else</span>: + ...</pre></div> +<p>But remember that all tkinter widgets in plugins will inherit the main UI +current theme colours anyway.</p> +</li> +<li> +<p>The contents of <code>NavRoute.json</code> will now be loaded during 'catch-up' when +EDMarketConnector is (re-)started. The synthetic <code>StartUp</code> (note the +capitalisation) event that is emitted after the catch-up ends will have +<code>state['NavRoute']</code> containing this data.</p> +<p>However, the <code>Fileheader</code> event from detecting a subsequent new Journal file +<em>will</em> blank this data again. Thus, if you're interested in "last plotted +route" on startup you should react to the <code>StartUp</code> event. Also, note that +the contents <em>will</em> indicate a <code>NavRouteClear</code> if that was the last such +event.</p> +<p>PLUGINS.md has been updated to reflect this.</p> +</li> +<li> +<p>If you've ever been in the habit of running our <code>develop</code> branch, please +don't. Whilst we try to ensure that any code merged into this branch doesn't +contain bugs, it hasn't at that point undergone more thorough testing. +Please use the <code>stable</code> branch unless otherwise directed.</p> +</li> +<li> +<p>Some small updates have been made in <code>edmc_data</code> as a part of reviewing the +latest update to <code>coriolis-data</code>. +We make no guarantee about keeping these parts of <code>edmc_data</code> up to date. +Any plugins attempting to use that data should look at alternatives, such +as <a href="https://github.com/EDCD/FDevIDs/blob/master/outfitting.csv">FDevIDs/outfitting.csv</a>.</p> +<p>A future update might remove those maps, or at least fully deprecate their +use by plugins. Please contact us <strong>now</strong> if you actually make use of this +data.</p> +</li> +</ul> +<hr> + + +<h2>Release 5.6.1</h2> +<p>This release addresses some minor bugs and annoyances with v5.6.0, especially +for Legacy galaxy players.</p> +<p>In general, at this early stage of the galaxy split, we prefer to continue to +warn Legacy users who have 'send data' options active for sites that only +accept Live data. In the future this might be reviewed and such warnings +removed such that the functionality <em>fails silently</em>. This might be of use +to users who actively play in both galaxies.</p> +<ul> +<li> +<p>CAPI queries will now <strong>only be attempted for Live galaxy players</strong> This is +a stop-gap whilst the functionality is implemented for Legacy galaxy players. +Doing so prevents using Live galaxy data whilst playing Legacy galaxy, which +would be increasingly wrong and misleading.</p> +<ol> +<li>'Automatic update on docking' will do nothing for Legacy players.</li> +<li>Pressing the 'Update' button whilst playing Legacy will result in a status +line message "CAPI for Legacy not yet supported", and otherwise achieve +nothing. <strong>The only function of this button is to query CAPI data and +pass it to plugins, which does <em>not</em> include Inara and EDSM</strong>.</li> +<li>A Legacy player trying to use "File" > "Status" will get the message +"Status: No CAPI data yet" due to depending on CAPI data.</li> +</ol> +<p>It is hoped to implement CAPI data retrieval and use for Legacy players soon, +although this will likely entail extending the plugins API to include a new +function specifically for this. Thus only updated plugins would support +this.</p> +</li> +<li> +<p>EDDN: Where data has been sourced from the CAPI this application now sends +a header->gameversion in the format <code>"CAPI-(Live|Legacy)-<endpoint"</code> as per +<a href="https://github.com/EDCD/EDDN/blob/live/docs/Developers.md#gameversions-and-gamebuild">the updated documentation</a>.</p> +<ol> +<li> +<p>As <em>this</em> version only queries CAPI for Live players that will only be +<code>"CAPI-Live-<endpoint>"</code> for the time being.</p> +</li> +<li> +<p>If, somehow, the CAPI host queried matches neither the +current Live host, the Legacy host, nor the past beta host, you will see +<code>"CAPI-UNKNOWN-<endpoint>"</code>.</p> +</li> +<li> +<p>As that statement implies, this application will also signal 'Live' if +<code>pts-companion.orerve.net</code> has been used, due to detecting an alpha or beta +version of the game. However, in that case the <code>/test</code> schemas will be used.</p> +</li> +</ol> +<p>Closes <a href="https://github.com/EDCD/EDMarketConnector/issues/1734">#1734</a>.</p> +</li> +<li> +<p>Inara: Only warn about Legacy data if sending is enabled in Settings > Inara.</p> +<p>Closes <a href="https://github.com/EDCD/EDMarketConnector/issues/1730">#1730</a>.</p> +</li> +<li> +<p>Inara: Handling of some events has had a sanity check added so that the +Inara API doesn't complain about empty strings being sent. In these cases +the event will simply not be sent.</p> +<p>Closes <a href="https://github.com/EDCD/EDMarketConnector/issues/1732">#1732</a>.</p> +</li> +<li> +<p>EDSM: EDSM has decided to accept only Live data on its API. Thus, this +application will only attempt to send data for Live galaxy players.</p> +<p>If a Legacy galaxy player has the Settings > EDSM > "Send flight log and +Cmdr status to EDSM" option active then they will receive an error about +this at most once every 5 minutes. Disabling that option will prevent the +warning.</p> +</li> +</ul> +<h2><a id="user-content-plugin-developers" class="anchor" aria-hidden="true" href="#plugin-developers"><span aria-hidden="true" class="octicon octicon-link"></span></a>Plugin Developers</h2> +<ul> +<li>PLUGINS.md has been updated to make it clear that the only use of imports +from the <code>config</code> module are for setting/getting/removing a plugin's own +configuration, or detecting application shutdown in progress.</li> +<li>PLUGINS.md has also been updated to add a note about how the <code>data</code> passed +to a plugin <code>cmdr_data()</code> is, strictly speaking, an instance of <code>CAPIData</code>, +which is an extension of <code>UserDict</code>. It has some extra properties on it, +<strong>but these are for internal use only and no plugin should rely on them</strong>.</li> +<li>As noted above, implementing CAPI data for Legacy players will likely entail +an additional function in the API provided to plugins. See +<a href="https://github.com/EDCD/EDMarketConnector/issues/1728">#1728</a> for discussion +about this.</li> +</ul> +<hr> + + +<h2>Release 5.6.0</h2> +<p>Tha major reason for this release is to address the Live versus Legacy galaxy +split <a href="https://www.elitedangerous.com/news/elite-dangerous-update-14-and-beyond-live-and-legacy-modes" rel="nofollow">coming in Update 14 of the game</a>. +See the section "Update 14 and the Galaxy Split" below for how this might +impact you.</p> +<h2><a id="user-content-changes" class="anchor" aria-hidden="true" href="#changes"><span aria-hidden="true" class="octicon octicon-link"></span></a>Changes</h2> +<ul> +<li> +<p>We now test against, and package with, Python 3.10.8.</p> +</li> +<li> +<p>The code for sending data to EDDN has been reworked. This changes the +'replay log' from utilising an internal array, backed by a flat file +(<code>replay.jsonl</code>), to an sqlite3 database.</p> +<p>As a result:</p> +<ol> +<li>Any messages stored in the old <code>replay.jsonl</code> are converted at startup, +if that file is present, and then the file removed.</li> +<li>All new messages are stored in this new sqlite3 queue before any attempt +is made to send them. An immediate attempt is then made to send any +message not affected by "Delay sending until docked".</li> +<li>Sending of queued messages will be attempted every 5 minutes, unless +"Delay sending until docked" is active and the Cmdr is not docked in +their own ship. This is in case a message failed to send due to an issue +communicating with the EDDN Gateway.</li> +<li>When you dock in your own ship an immediate attempt to send all queued +messages will be initiated.</li> +<li>When processing queued messages the same 0.4-second inter-message delay +as with the old code has been implemented. This serves to not suddenly +flood the EDDN Gateway. If any message fails to send for Gateway reasons, +i.e. not a bad message, then this processing is abandoned to wait for +the next invocation.</li> +</ol> +<p>The 5-minute timer in point 3 differs from the old code, where almost any +new message sending attempt could initiate processing of the queue. At +application startup this delay is only 10 seconds.</p> +<p>Currently, the feedback of "Sending data to EDDN..." in the UI status line +has been removed.</p> +<p><strong>If you do not have "Delay sending until docked" active, then the only +messages that will be at all delayed will be where there was a communication +problem with the EDDN Gateway, or it otherwise indicated a problem other +than 'your message is bad'.</strong></p> +</li> +<li> +<p>As a result of this EDDN rework this application now sends appropriate +<code>gameversion</code> and <code>gamebuild</code> strings in EDDN message headers. +The rework was necessary in order to enable this, in case of any queued +or delayed messages which did not contain this information in the legacy +<code>replay.jsonl</code> format.</p> +</li> +<li> +<p>For EDSM there is a very unlikely set of circumstances that could, in theory +lead to some events not being sent. This is so as to safeguard against +sending a batch with a gameversion/build claimed that does not match for +<em>all</em> of the events in that batch.</p> +<p>It would take a combination of "communications with EDSM are slow", more +events (the ones that would be lost), a game client crash, <em>and</em> starting +a new game client before the 'more events' are sent.</p> +</li> +</ul> +<h2><a id="user-content-update-14-and-the-galaxy-split" class="anchor" aria-hidden="true" href="#update-14-and-the-galaxy-split"><span aria-hidden="true" class="octicon octicon-link"></span></a>Update 14 and the Galaxy Split</h2> +<p>Due to the galaxy split <a href="https://www.elitedangerous.com/news/elite-dangerous-update-14-and-beyond-live-and-legacy-modes" rel="nofollow">announced by Frontier</a> +there are some changes to the major third-party websites and tools.</p> +<ul> +<li> +<p>Inara <a href="https://inara.cz/elite/board-thread/7049/463292/#463292" rel="nofollow">has chosen</a> +to only accept Live galaxy data on its API.</p> +<p>This application will not even process Journal data for Inara after +2022-11-29T09:00:00+00:00 <em>unless the <code>gameversion</code> indicates a Live client</em>. +This explicitly checks that the game's version is semantically equal to or +greater than '4.0.0'.</p> +<p>If a Live client is <em>not</em> detected, then there is an INFO level logging +message "Inara only accepts Live galaxy data", which is also set as the main +UI status line. This message will repeat, at most, every 5 minutes.</p> +<p>If you continue to play in the Legacy galaxy only then you probably want to +just disable the Inara plugin with the checkbox on Settings > Inara.</p> +</li> +<li> +<p>All batches of events sent to EDSM will be tagged with a <code>gameversion</code>, in +a similar manner to the EDDN header.</p> +<p>Ref: <a href="https://www.edsm.net/en/api-journal-v1" rel="nofollow">EDSM api-journal-v1</a></p> +</li> +<li> +<p>All EDDN messages will now have appropriate <code>gameversion</code> and <code>gamebuild</code> +fields in the <code>header</code> as per +<a href="https://github.com/EDCD/EDDN/blob/live/docs/Developers.md#gameversions-and-gamebuild">EDDN/docs/Developers.md</a>.</p> +<p>As a result of this you can expect third-party sites to choose to filter data +based on that.</p> +<p>Look for announcements by individual sites/tools as to what they have chosen +to do.</p> +</li> +</ul> +<h2><a id="user-content-known-bugs" class="anchor" aria-hidden="true" href="#known-bugs"><span aria-hidden="true" class="octicon octicon-link"></span></a>Known Bugs</h2> +<p>In testing if it had been broken at all due to 5.5.0 -> 5.6.0 changes it has +come to light that <code>EDMC.EXE -n</code>, to send data to EDDN, was already broken in +5.5.0.</p> +<p>In addition, there is now some extra 'INFO' logging output which will be +produced by any invocation of <code>EDMC.EXE</code>. This might break third-party use of +it, e.g. <a href="https://forums.frontier.co.uk/threads/trade-computer-extension-mk-ii.223056/" rel="nofollow">Trade Computer Extension Mk.II</a>. +This will be fixed as soon as the dust settles from Update 14, with emphasis +being on ensuring the GUI <code>EDMarketConnector.exe</code> functions properly.</p> +<h2><a id="user-content-notes-for-eddn-listeners" class="anchor" aria-hidden="true" href="#notes-for-eddn-listeners"><span aria-hidden="true" class="octicon octicon-link"></span></a>Notes for EDDN Listeners</h2> +<ul> +<li> +<p>Where EDMC sourced data from the Journal files it will set <code>gameversion</code> +and <code>gamebuild</code> as per their values in <code>Fileheader</code> or <code>LoadGame</code>, whichever +was more recent (there are some events that occur between these).</p> +</li> +<li> +<p><em>If any message was already delayed such that it did not +have the EDDN header recorded, then the <code>gameversion</code> and <code>gamebuild</code> will +be empty strings</em>. In order to indicate this the <code>softwareName</code> will have +<code> (legacy replay)</code> appended to it, e.g. <code>E:D Market Connector Connector [Windows] (legacy replay)</code>. In general this indicates that the message was +queued up using a version of EDMC prior to this one. If you're only +interested in Live galaxy data then you might want to ignore such messages.</p> +</li> +<li> +<p>Where EDMC sourced data from a CAPI endpoint, the resulting EDDN message +will have a <code>gameversion</code> of <code>CAPI-<endpoint></code> set, e.g. <code>CAPI-market</code>. +<strong>At this time it is not 100% certain which galaxy this data will be for, so +all listeners are advised to ignore/queue such data until this is clarified</strong>.</p> +<p><code>gamebuild</code> will be an empty string for all CAPI-sourced data.</p> +</li> +</ul> +<h2><a id="user-content-plugin-developers" class="anchor" aria-hidden="true" href="#plugin-developers"><span aria-hidden="true" class="octicon octicon-link"></span></a>Plugin Developers</h2> +<ul> +<li>There is a new flag in <code>state</code> passed to plugins, <code>IsDocked</code>. See PLUGINS.md +for details.</li> +</ul> +<hr> + +<h2>Release 5.5.0</h2> +<ul> +<li><a href="https://www.virustotal.com/gui/file/fadbbc742530863396dabc4813fe80103dd149b9e05e7df9fcbf13ed62f64b9b?nocache=1">Virus Total scan results</a> for this release.</li> +<li>We now test against, and package with, Python 3.10.7.</li> +<li>EDDN: Support added for the <code>FCMaterials</code> schemas to aid third-party sites in +offering searches for where to buy and sell Odyssey Micro Resources, +including on Fleet Carriers with the bar tender facility.</li> +</ul> +<h2><a id="user-content-bug-fixes" class="anchor" aria-hidden="true" href="#bug-fixes"><span aria-hidden="true" class="octicon octicon-link"></span></a>Bug Fixes</h2> +<ul> +<li>EDDN: Abort <code>fsssignaldiscovered</code> sending of message if no signals passed +the checks.</li> +<li>EDDN: Add Horizons check for location on <code>fsssignaldiscovered</code> messages.</li> +<li>Don't alert the user if the first attempted load of <code>NavRoute.json</code> contains +no route.</li> +<li>Inara: Don't set <code>marketID</code> for <code>ApproachSettlement</code> unless it's actually +present in the event.</li> +</ul> +<h2><a id="user-content-plugin-developers" class="anchor" aria-hidden="true" href="#plugin-developers"><span aria-hidden="true" class="octicon octicon-link"></span></a>Plugin Developers</h2> +<ul> +<li> +<p>We now build using the new, <code>setuptools</code> mediated py2exe <code>freeze()</code> method, +so we're in the clear for when <code>distutils</code> is removed in Python 3.12.</p> +<p>This shouldn't have any adverse effects on plugins, i.e. all of the same +Python modules are still packaged as before.</p> +</li> +<li> +<p>Support has been added for the <code>NavRouteClear</code> event. We <em>do</em> send this +through to plugins, so that they know the player has cleared the route, +<strong>but we keep the previously plotted route details in <code>state['NavRoute']</code>.</strong></p> +</li> +<li> +<p>The documentation of the return type of <code>journal_entry()</code> has been corrected +to <code>Optional[str]</code>.</p> +</li> +<li> +<p>FDevIDs files (<code>commodity.csv</code> <code>rare_commodity.csv</code>) updated to latest +versions.</p> +</li> +</ul> +<h2><a id="user-content-developers" class="anchor" aria-hidden="true" href="#developers"><span aria-hidden="true" class="octicon octicon-link"></span></a>Developers</h2> +<ul> +<li>We now build using the new, <code>setuptools</code> mediated py2exe <code>freeze()</code> method, +so we're in the clear for when <code>distutils</code> is removed in Python 3.12.</li> +<li>The old <code>setup.py</code> file, along with associated <code>py2exe.cmd</code> have been removed +in favour of the new <code>Build-exe-and-msi.py</code> file. Documentation updated.</li> +</ul> +<hr> + +<h2>Release 5.4.1</h2> +<ul> +<li> +<p>If for any reason <code>EDMarketConnector.exe</code> fails to shutdown and exit when +asked to by the upgrade process this should no longer result in a spontaneous +system reboot. Closes <a href="https://github.com/EDCD/EDMarketConnector/issues/1492">#1492</a>.</p> +<p>A manual reboot will still be required to complete the EDMarketConnector +upgrade process and we make no guarantees about the stability of the +application until this is done.</p> +</li> +<li> +<p>The new EDDN <code>fsssignaldiscovered/1</code> schema has been implemented.</p> +</li> +<li> +<p>EDSM trace level logging will no longer log API credentials unless explicitly +asked to, separately from other EDSM API trace logging.</p> +</li> +</ul> +<h2> +<a id="user-content-bug-fixes" class="anchor" href="#bug-fixes" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Bug Fixes</h2> +<ul> +<li>EDDN: Ensure we always remove all <code>_Localised</code> suffix keys in data. This +was missed in some recent new schemas and turned out to be an issue for at +least <code>approachsettlement/1</code>.</li> +</ul> +<hr> + +<h2>Release 5.4.0</h2> +<ul> +<li>We now test against, and package with, Python 3.10.4.</li> +<li>New EDDN schema <code>fssbodysignals</code> is now supported.</li> +<li>Odyssey Update 12 will add <code>BodyID</code> to <code>CodexEntry</code> journal events, so don't +overwrite this with an augmentation if it is already present. We've also +added the same for <code>BodyName</code> in case Frontier ever add that.</li> +<li> +<a href="https://github.com/EDCD/EDMarketConnector/issues/24">Translations</a> updated. +Thanks again to all the contributors.</li> +</ul> +<h2> +<a id="user-content-bug-fixes" class="anchor" href="#bug-fixes" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Bug Fixes</h2> +<ul> +<li>Cross-check the <code>MarketID</code> in CAPI data, not only the station name, to ensure +the data is for the correct station. Closes <a href="https://github.com/EDCD/EDMarketConnector/issues/1572">#1572</a>.</li> +<li>Location cross-check paranoia added to several EDDN message types to ensure +no bad data is sent.</li> +<li>Ensure we don't send bad BodyID/Name for an orbital station if the player +uses a taxi. +Closes <a href="https://github.com/EDCD/EDMarketConnector/issues/1522">#1522</a>.</li> +</ul> +<h2> +<a id="user-content-developers" class="anchor" href="#developers" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Developers</h2> +<ul> +<li>Odyssey Update 12 adds a new Journal event, and file, <code>FCMaterials.json</code>, +detailing the available trades at a Fleet Carrier's bar tender. Support has +been added for this. Plugin developers are sent an <code>FCMaterials</code> event +with the full contents of the file.</li> +</ul> +<h2> +<a id="user-content-edmcexe" class="anchor" href="#edmcexe" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>EDMC.exe</h2> +<p>This now uses specific exit codes in all cases, rather than a generic +<code>EXIT_SYS_ERR</code> (6) for some cases. See the appropriate line in EDMC.py for +details.</p> + + +<h2>Release 5.3.4</h2> +<p>Whilst EDMarketConnector.exe was fixed for the Odyssey Update 11 difference in Journal file names, EDMC.exe was not. If you're wondering, that's the command-line utility that, for instance, Trade Computer Extensions uses to obtain data.</p> +<ul> +<li>Use the new common function for finding latest journal file in EDMC.py.</li> +<li>Quietens some NavRoute related logging for the benefit of EDMC.py. This is +now at DEBUG level, rather than INFO.</li> +</ul> + + +<h2>Release 5.3.3</h2> +<p>Unfortunately 5.3.2 failed to fully address the issues caused by the different +Journal filenames when using the Odyssey Update 11 client. It's fine if you +run EDMarketConnector first and <em>then</em> the game, as the code path that detects +a new file always does just that.</p> +<p>But the code for EDMarketConnector startup to find the current newest Journal +file relied on sorting the filenames and that would mean the new-style names +would always sort as 'oldest'.</p> +<p>This release fixes that code to properly use the file modification timestamp +to determine the newest file on startup.</p> + + +<h2>Release 5.3.2</h2> +<p>This release contains one change to cope with how Frontier decided to name +the Journal files differently in the Update 11 Odyssey client.</p> + + +<h2>Release 5.3.1</h2> +<p>This release addresses some issues with newer EDDN code which could cause erroneous alerts to the player, or sending of bad messages.</p> <ul> <li> <p>EDDN: Cope with <code>ApproachSettlement</code> on login occurring before <code>Location</code>, +such that we don't yet know the name of the star system the player is in.</p> <p>Closes <a href="https://github.com/EDCD/EDMarketConnector/pull/1484">#1484</a></p> +</li> <li> <p>EDDN: Cope with <code>ApproachSettlement</code> missing planetary coordinates on login +at/near a settlement in Horizons.</p> <p>Closes <a href="https://github.com/EDCD/EDMarketConnector/pull/1476">#1476</a></p> +</li> <li> <p>EDDN: Change the <code>CodexEntry</code> "empty string" checks to only apply to those +values where the schema enforces "must be at least one character".</p> <p>This prevents the big 'CodexEntry had empty string, PLEASE ALERT THE EDMC DEVELOPERS' message from triggering on, e.g. <code>NearestDestination</code> being +empty, which the schema allows.</p> <p>Closes <a href="https://github.com/EDCD/EDMarketConnector/issues/1481">#1481</a></p> +</li> </ul> <h2> <a id="user-content-plugin-developers" class="anchor" href="#plugin-developers" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Plugin Developers</h2> +<ul> <li> +<p>If you use a sub-class for a widget the core code will no longer break if +your code raises an exception. e.g. a plugin was failing due to Python +3.10 using <code>collections.abc</code> instead of <code>collections</code>, and the plugin's +custom widget had a <code>configure()</code> method which was called by the core +theme code on startup or theme change. This then caused the whole +application UI to never show up on startup.</p> +<p>This also applies if you set up a button such that enter/leave on it, i.e. +mouse in/out, causes the <code>theme.py</code> code for that to trigger.</p> +<p>So, now in such cases the main UI should actually show up, although your +plugin's UI might look weird due to theming not being properly applied.</p> +<p>The plugin exception <strong>WILL</strong> be logged, at ERROR level.</p> </li> </ul> -<h2>Release 4.2.2</h2> -<p>This release contains a minor bug-fix, actually properly checking a station's -ships list before operating on it.</p> +<h2>Release 5.3.0</h2> +<p>As has sadly become routine now, please read +<a href="https://github.com/EDCD/EDMarketConnector/wiki/Troubleshooting#installer-and-or-executables-flagged-as-malicious-viruses">our statement about malware false positives</a> +affecting our installers and/or the files they contain. We are as confident +as we can be, without detailed auditing of python.org's releases and all +the py2exe source and releases, that there is no malware in the files we make +available.</p> +<p>This release is primarily aimed at fixing some more egregious bugs, +shortcomings and annoyances with the application. It also adds support for +two additional +<a href="https://github.com/EDCD/EDDN/blob/live/README.md">EDDN</a> +schemas.</p> <ul> -<li>Check that <code>ships['shipuard_list']</code> is a <code>dict</code> before trying to use -<code>.values()</code> on it. This fixes the issue with seeing <code>list object has no attribute values</code> in the application status line.</li> +<li> +<p>We now test and build using Python 3.10.2. We do not <em>yet</em> make use of any +features specific to Python 3.10 (or 3.9). Let us restate that we +absolutely reserve the right to commence doing so.</p> +</li> +<li> +<p>We now set a custom User-Agent header in all web requests, i.e. to EDDN, +EDSM and the like. This is of the form:</p> +<p><code>EDCD-EDMarketConnector-<version></code></p> +</li> +<li> +<p>"File" -> "Status" will now show the new Odyssey ranks, both the new +categories and the new 'prestige' ranks, e.g. 'Elite I'.</p> +<p><strong>NB: Due to an oversight there are currently no translations for these.</strong></p> +<p>Closes <a href="https://github.com/EDCD/EDMarketConnector/issues/1369">#1369</a>.</p> +</li> +<li> +<p>Running <code>EDMarketConnector.exe --reset-ui</code> will now also reset any changes to +the application "UI Scale" or geometry (position and size).</p> +<p>Closes <a href="https://github.com/EDCD/EDMarketConnector/issues/1155">#1155</a>.</p> +</li> +<li> +<p>We now use UTC-based timestamps in the application's log files. Prior to +this change it was the "local time", but without any indication of the +applied timezone. Each line's timestamp has <code> UTC</code> as a suffix now. We +are assuming that your local clock is correct <em>and</em> the timezone is set +correctly, such that Python's <code>time.gmtime()</code> yields UTC times.</p> +<p>This should make it easier to correlate application logfiles with in-game +time and/or third-party service timestamps.</p> +</li> +<li> +<p>The process used to build the Windows installers should now always pick up +all the necessary files automatically. Prior to this we used a manual +process to update the installer configuration which was prone to both user +error and neglecting to update it as necessary.</p> +</li> +<li> +<p>If the application fails to load valid data from the <code>NavRoute.json</code> file +when processing a Journal <code>NavRoute</code> event, it will attempt to retry this +operation a number of times as it processes subsequent Journal events.</p> +<p>This should hopefully work around a race condition where the game might +not have yet updated <code>NavRoute.json</code> at all, or has truncated it to empty, +when we first attempt this.</p> +<p>We will also now <em>NOT</em> attempt to load <code>NavRoute.json</code> during the startup +'Journal catch-up' mode, which only sets internal state.</p> +<p>Closes <a href="https://github.com/EDCD/EDMarketConnector/issues/1155">#1348</a>.</p> +</li> +<li> +<p>Inara: Use the <code><journal log>->Statistics->Bank_Account->Current_Wealth</code> +value when sending a <code>setCommanderCredits</code> message to Inara to set +<code>commanderAssets</code>.</p> +<p>In addition, a <code>setCommanderCredits</code> message at game login <strong>will now only +ever be sent at game login</strong>. Yes, you will <strong>NEED</strong> to relog to send an +updated balance. This is the only way in which to sanely keep the +'Total Assets' value on Inara from bouncing around.</p> +<p>Refer to <a href="https://inara.cz/inara-api-docs/#event-1" rel="nofollow">Inara:API:docs:setCommanderCredits</a>.</p> +<p>Closes <a href="https://github.com/EDCD/EDMarketConnector/issues/1401">#1401</a>.</p> +</li> +<li> +<p>Inara: Send a <code>setCommanderRankPilot</code> message when the player logs in to the +game on-foot. Previously you would <em>HAVE</em> to be in a ship at login time +for this to be sent.</p> +<p>Thus, you can now relog on-foot in order to update Inara with any Rank up +or progress since the session started.</p> +<p>Closes <a href="https://github.com/EDCD/EDMarketConnector/issues/1378">#1378</a>.</p> +</li> +<li> +<p>Inara: Fix for always sending a Rank Progress of 0%.</p> +<p>Closes <a href="https://github.com/EDCD/EDMarketConnector/issues/1378">#1378</a>.</p> +</li> +<li> +<p>Inara: You should once more see updates for any materials used in +Engineering. The bug was in our more general Journal event processing +code pertaining to <code>EngineerCraft</code> events, such that the state passed to +the Inara plugin hadn't been updated.</p> +<p>Such updates should happen 'immediately', but take into account that there +can be a delay of up to 35 seconds for any data sent to Inara, due to how +we avoid breaking the "2 messages a minute" limit on the Inara API.</p> +<p>Closes <a href="https://github.com/EDCD/EDMarketConnector/issues/1395">#1395</a>.</p> +</li> +<li> +<p>EDDN: Implement new <a href="https://github.com/EDCD/EDDN/blob/live/schemas/approachsettlement-README.md">approachsettlement/1</a> +schema.</p> +</li> +<li> +<p>EDDN: Implement new <a href="https://github.com/EDCD/EDDN/blob/live/schemas/fssallbodiesfound-README.md">fssallbodiesfound/1</a> +schema.</p> +</li> +<li> +<p>EDDN: We now compress all outgoing messages. This might help get some +particularly large <code>navroute</code> messages go through.</p> +<p>If any message is now rejected as 'too large' we will drop it, and thus +not retry it later. The application logs will reflect this.</p> +<p>NB: The EDDN Gateway was updated to allow messages up to 1 MiB in size +anyway. The old limit was 100 KiB.</p> +<p>Closes <a href="https://github.com/EDCD/EDMarketConnector/issues/1390">#1390</a>.</p> +</li> +<li> +<p>EDDN: In an attempt to diagnose some errors observed on the EDDN Gateway +with respect to messages sent from this application some additional checks +and logging have been added.</p> +<p><strong>NB: After some thorough investigation it was concluded that these EDDN +errors were likely the result of long-delayed messages due to use of +the "Delay sending until docked" option.</strong></p> +<p>There should be no functional changes for users. But if you see any of +the following in this application's log files <strong>PLEASE OPEN +<a href="https://github.com/EDCD/EDMarketConnector/issues/new?assignees=&labels=bug%2C+unconfirmed&template=bug_report.md&title=">AN ISSUE ON GITHUB</a> +with all the requested information</strong>, so that we can correct the relevant +code:</p> +<ul> +<li><code>No system name in entry, and system_name was not set either! entry: ...</code></li> +<li><code>BodyName was present but not a string! ...</code></li> +<li><code>post-processing entry contains entry ...</code></li> +<li><code>this.body_id was not set properly: ...</code></li> +<li><code>system is falsey, can't add StarSystem</code></li> +<li><code>this.coordinates is falsey, can't add StarPos</code></li> +<li><code>this.systemaddress is falsey, can't add SystemAddress</code></li> +<li><code>this.status_body_name was not set properly: ...</code></li> +</ul> +<p>You might also see any of the following in the application status text +(bottom of the window):</p> +<ul> +<li><code>passed-in system_name is empty, can't add System</code></li> +<li><code>CodexEntry had empty string, PLEASE ALERT THE EDMC DEVELOPERS</code></li> +<li><code>system is falsey, can't add StarSystem</code></li> +<li><code>this.coordinates is falsey, can't add StarPos</code></li> +<li><code>this.systemaddress is falsey, can't add SystemAddress</code></li> +</ul> +<p>Ref: <a href="https://github.com/EDCD/EDMarketConnector/issues/1403">#1403</a> +<a href="https://github.com/EDCD/EDMarketConnector/issues/1393">#1393</a>.</p> +</li> +</ul> +<h2> +<a id="user-content-translations" class="anchor" href="#translations" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Translations</h2> +<ul> +<li> +<p>Use a different workaround for OneSky (translations website) using "zh-Hans" +for Chinese (Simplified), whereas Windows will call this "zh-CN". This is +in-code and documented with a comment, as opposed to some 'magic' in the +Windows Installer configuration that had no such documentation. It's less +fragile than relying on that, or developers using a script/documented +process to rename the file.</p> +</li> +<li> +<p>As noted above we forgot to upload to +<a href="https://marginal.oneskyapp.com/collaboration/project/52710" rel="nofollow">OneSky</a> +after adding the Odyssey new ranks/categories. This has now been done, +and some new phrases await translation.</p> +</li> </ul> -<h2>Release 4.2.1</h2> -<p>This is a bug-fix release.</p> +<h2>Release 5.2.4</h2> +<p>This is a <em>very</em> minor update that simply imports the latest versions of +data files so that some niche functionality works properly.</p> <ul> <li> -<p>Updated translations. Thanks once again to all those contributing as per -<a href="https://github.com/EDCD/EDMarketConnector/wiki/Translations">Translations</a>.</p> +<p>Update <code>commodity.csv</code> and <code>rare_commodity.csv</code> from the latest +<a href="https://github.com/EDCD/FDevIDs">EDCD/FDevIDs</a> versions. This addresses +an issue with export of market data in Trade Dangerous format containing +<code>OnionHeadC</code> rather than the correct name, <code>Onionhead Gamma Strain</code>, that +Trade Dangerous is expecting.</p> +<p>This will only have affected Trade Dangerous users who use EDMarketConnector +as a source of market data.</p> +</li> +</ul> +<hr> + +<h2>Release 5.2.3</h2> +<p>This release fixes one bug and fixes some example code.</p> +<ul> +<li> +<p>Odyssey changed the order of some Journal events. This caused our logic +for tracking the following to break, and thus not report them ever to Inara:</p> +<ul> +<li>Ship Combat, Trade and Exploration ranks.</li> +<li>On-foot Combat and Exobiologist ranks.</li> +<li>Engineer unlocks and progress.</li> +<li>Reputations with Major Factions (Superpowers).</li> +</ul> +<p>This is now fixed and the current state of all of these will be correctly +reported to Inara if you have API access for it configured.</p> +</li> +</ul> +<h2> +<a id="user-content-developers" class="anchor" href="#developers" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Developers</h2> +<ul> +<li> +<p>Now built using Python 3.9.9.</p> </li> <li> -<p>PLUGINS.md: Clarify when <code>CargoJSON</code> is populated.</p> +<p>Updated <a href="https://github.com/EDCD/EDMarketConnector/blob/main/PLUGINS.md#packaging-extra-modules">PLUGINS.md</a> +to state that we don't actually include <em>all</em> of Python's standard library.</p> </li> <li> -<p>macOS: <code>pip install -r requirements.txt</code> will now include <code>pyobjc</code> so that -running this application works at all. Check the updated <a href="https://github.com/EDCD/EDMarketConnector/wiki/Running-from-source">Running from -source</a> -for some advice if attempting to run on macOS.</p> +<p>The <a href="https://github.com/EDCD/EDMarketConnector/tree/main/docs/examples/click_counter">click_counter</a> +example plugin code has been corrected to both actually work fully, and pass +our linting.</p> +</li> +</ul> + + +<h2>Release 5.2.2</h2> +<p>This release adds one new feature and addresses some bugs. We've also +updated to using Python 3.9.8.</p> +<ul> +<li> +<p>Windows now has "minimize to system tray" support.</p> +<ul> +<li>The system tray icon will always be present.</li> +<li>There is a new option on the Settings > Appearance tab - +<code>Minimize to system tray</code>.</li> +<li>When this new option is active, minimizing the application will <em>also</em> +hide the taskbar icon.</li> +<li>When the new option is not active, the application will minimize to the +taskbar as normal.</li> +</ul> +</li> +</ul> +<h2> +<a id="user-content-bug-fixex" class="anchor" href="#bug-fixex" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Bug Fixex</h2> +<ul> +<li> +<p>If a CAPI query failed in such a way that no <code>requests.Response</code> object +was made available we attempted to blindly dump the non-existent object.<br> +We now check that it actually exists, and log the specifics of the exception.</p> </li> <li> -<p>JournalLock: Handle when the Journal directory isn't set at all, rather than -erroring. Fixes <a href="https://github.com/EDCD/EDMarketConnector/issues/910">#910 - Not launching (Linux)</a>.</p> +<p>A user experienced the game writing a NavRoute.json file without a +<code>Route</code> array, which caused the application to attempt sending a badly formed +<code>navroute</code> message to EDDN. That message was then remembered and constantly +retried.</p> +<ul> +<li> +<p>We now sanity check the NavRoute.json contents to be sure there <em>is</em> a +<code>Route</code> array, even if it is empty. If it's not present no attempt +to send the EDDN message will be made.</p> +<p>If this scenario occurs the user will see a status line message <code>No 'Route' array in NavRoute.json contents</code>.</p> </li> <li> -<p>Extra logging added to track down cause of <a href="https://github.com/EDCD/EDMarketConnector/issues/909">#909 - Authentication not possible (PC)</a> -. The debug log file might now indicate what's wrong, or we might need -you to run</p> -<pre><code>"c:\Program Files (x86)\EDMarketConnector/EDMarketConnector.exe" --trace +<p>For any EDDN message that receives a 400 status back we will drop it +from the replay log.</p> +</li> +</ul> +</li> +</ul> +<hr> + +<h2>Release 5.2.1</h2> +<p>This release primarily addresses the issue of the program asking for +Frontier authorization much too often.</p> +<ul> +<li>Actually utilise the Frontier Refresh Token when the CAPI response is +"Unauthorized". The re-factoring of this code to make CAPI queries +threaded inadvertently prevented this.</li> +</ul> + +<h2>Release 5.2.0</h2> +<ul> +<li> +<p>The 'Update' button is disabled if CQC/Arena is detected.</p> +</li> +<li> +<p>Frontier CAPI queries now run in their own thread. There should be no +change in functionality for users. This affects both EDMarketConnector +(GUI) and EDMC (command-line).</p> +</li> +<li> +<p><code>File</code> > <code>Status</code> will now use cached CAPI data, rather than causing a fresh +query. <strong>Currently if data has not yet been cached nothing will happen when +trying to use this</strong>.</p> +</li> +<li> +<p>Trying to use <code>File</code> > <code>Status</code> when the current commander is unknown, or +there is has been no CAPI data retrieval yet, will now result in the 'bad' +sound being played and an appropriate status line message.</p> +</li> +<li> +<p><code>File</code> > <code>Save Raw Data</code> also now uses the cached CAPI data, rather than +causing a fresh query. This will write an empty JSON <code>{}</code> if no data is +yet available.</p> +</li> +<li> +<p>New <a href="docs/Licenses/">docs/Licenses/</a> directory containing all relevant +third-party licenses for the software this application uses.</p> +</li> +<li> +<p><code>Settings</code> > <code>Output</code> > <code>File Location</code> 'Browse' button will now always be +available, even if no output options are active.</p> +</li> +<li> +<p>The 'no git installed' logging when running from source is now at INFO +level, not ERROR. This will look less scary.</p> +</li> +<li> +<p>EDMarketConnetor command-line arguments have been re-ordered into +logical groups for <code>--help</code> output.</p> +</li> +<li> +<p>Support added for several new EDDN schemas relating to specific Journal +events. The live EDDN server has been updated to support these.</p> +<p>Schema support added for:</p> +<ul> +<li><code>codexentry/1</code></li> +<li><code>fssdiscoveryscan/1</code></li> +<li><code>navbeaconscan/1</code></li> +<li><code>navroute/1</code></li> +<li><code>scanbarycentre/1</code></li> +</ul> +</li> +<li> +<p>If a message to EDDN gets an 'unknown schema' response it will <strong>NOT</strong> be +saved in the replaylog for later retries, instead being discarded.</p> +</li> +</ul> +<h2> +<a id="user-content-bug-fixes" class="anchor" href="#bug-fixes" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Bug Fixes</h2> +<ul> +<li> +<p>Pressing the 'Update' button when in space (not docked, not on a body +surface) will no longer cause a spurious "Docked but unknown station: EDO +Settlement?" message.</p> +</li> +<li> +<p>A bug preventing <code>--force-localserver-auth</code> from working has been fixed.</p> +</li> +<li> +<p><code>horizons</code> and <code>odyssey</code> flags should now always be set properly on <em>all</em> +EDDN messages. The <code>horizons</code> flag was missing from some.</p> +</li> +</ul> +<h2> +<a id="user-content-developers" class="anchor" href="#developers" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Developers</h2> +<ul> +<li> +<p>Now built using Python 3.9.7.</p> +</li> +<li> +<p>New <code>journal_entry_cqc()</code> function for plugins to receive journal events +<em>specifically and <strong>only</strong> when the player is in CQC/Arena</em>. This allows +for tracking things that happen in CQC/Arena without polluting +<code>journal_entry()</code>. See <a href="PLUGINS.md">PLUGINS.md</a> for details.</p> +</li> +<li> +<p>Command-line argument <code>--trace-all</code> to force all possible <code>--trace-on</code> to be +active.</p> +</li> +<li> +<p>Contributing.md has been updated for how to properly use <code>trace_on()</code>.</p> +</li> +<li> +<p>EDMC.(py,exe) now also makes use of <code>--trace-on</code>.</p> +</li> +<li> +<p>EDMarketConnector now has <code>--capi-pretend-down</code> to act as if the CAPI +server is down.</p> +</li> +<li> +<p>Killswitches now have support for removing key/values entirely, or forcing +the value. See <a href="docs/Killswitches.md">docs/Killswitches.md</a> for details.</p> +</li> +<li> +<p><code>state['Odyssey']</code> added, set from <code>LoadGame</code> journal event.</p> +</li> +<li> +<p>You can now test against a different EDDN server using <code>--eddn-url</code> +command-line argument. This needs to be the <em>full</em> 'upload' URL, i.e. for +the live instance this is <code>https://eddn.edcd.io:4430/upload/</code>.</p> +</li> +<li> +<p>New command-line argument <code>--eddn-tracking-ui</code> to track the EDDN plugin's +idea of the current BodyName and BodyID, from both the Journal and +Status.json.</p> +</li> +</ul> + +<h2>Release 5.1.3</h2> +<ul> +<li> +<p>Attempt to flush any pending EDSM API data when a Journal <code>Shutdown</code> or +<code>Fileheader</code> event is seen. After this, the data is dropped. This ensures +that, if the user next logs in to a different commander, the data isn't then +sent to the wrong EDSM account.</p> +</li> +<li> +<p>Ensure a previous Journal file is fully read/drained before starting +processing of a new one. In particular, this ensures properly seeing the end +of a continued Journal file when opening the continuation file.</p> +</li> +<li> +<p>New config options, in a new <code>Privacy</code> tab, to hide the current Private +Group, or captain of a ship you're multi-crewing on. These usually appear +on the <code>Commander</code> line of the main UI, appended after your commander name, +with a <code>/</code> between.</p> +</li> +<li> +<p>EDO dockable settlement names with <code>+</code> characters appended will no longer +cause 'server lagging' reports.</p> +</li> +<li> +<p>Don't force DEBUG level logging to the +<a href="https://github.com/EDCD/EDMarketConnector/wiki/Troubleshooting#plain-log-file">plain log file</a> +if <code>--trace</code> isn't used to force TRACE level logging. This means logging +<em>to the plain log file</em> will once more respect the user-set Log Level, as in +the Configuration tab of Settings.</p> +<p>As its name implies, the <a href="https://github.com/EDCD/EDMarketConnector/wiki/Troubleshooting#debug-log-files">debug log file</a> +will always contain at least DEBUG level logging, or TRACE if forced.</p> +</li> +</ul> +<h2> +<a id="user-content-plugin-developers" class="anchor" href="#plugin-developers" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>(Plugin) Developers</h2> +<ul> +<li> +<p>New EDMarketConnector option <code>--trace-on ...</code> to control if certain TRACE +level logging is used or not. This helps keep the noise down whilst being +able to have users activate choice bits of logging to help track down bugs.</p> +<p>See <a href="Contributing.md#use-the-appropriate-logging-level">Contributing.md</a> for +details.</p> +</li> +<li> +<p>Loading of <code>ShipLocker.json</code> content is now tried up to 5 times, 10ms apart, +if there is a file loading, or JSON decoding, failure. This should +hopefully result in the data being loaded correctly if a race condition with +the game client actually writing to and closing the file is encountered.</p> +</li> +<li> +<p><code>config.get_bool('some_str', default=SomeDefault)</code> will now actually honour +that specified default.</p> +</li> +</ul> + +<h2>Release 5.1.2</h2> +<ul> +<li> +<p>A Journal event change in EDO Update 6 will have caused some translated +suit names to not be properly mapped to their sane versions. This change +has now been addressed and suit names should always come out as intended in +the EDMarketConnector.exe UI.</p> +</li> +<li> +<p>There is a new command-line argument to cause all Frontier Authorisation to +be forgotten: <code>EDMarketConnector.exe --forget-frontier-auth</code>.</p> +</li> +<li> +<p>Situations where Frontier CAPI data doesn't agree on the location we have +tracked from Journal events will now log more useful information.</p> +</li> +</ul> +<h2> +<a id="user-content-bug-fixes" class="anchor" href="#bug-fixes" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Bug Fixes</h2> +<ul> +<li>The code should now be robust against the case of any Journal event name +changing.</li> +</ul> +<h2> +<a id="user-content-plugin-developers" class="anchor" href="#plugin-developers" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Plugin Developers</h2> +<ul> +<li> +<p>We now store <code>GameLanguage</code>, <code>GameVersion</code> and <code>GameBuild</code> in the <code>state</code> +passed to <code>journal_entry()</code> from the <code>LoadGame</code> event.</p> +</li> +<li> +<p>Various suit data, i.e. class and mods, is now stored from relevant +Journal events, rather than only being available from CAPI data. In +general we now consider the Journal to be the canonical source of suit +data, with CAPI only as a backup.</p> +</li> +<li> +<p>Backpack contents should now track correctly if using the 'Resupply' option +available on the ship boarding menu.</p> +</li> +<li> +<p>We now cache the main application version when first determined, so +that subsequent references to <code>config.appversion()</code> won't cause extra log +spam (which was possible when, e.g. having a git command but using non-git +source).</p> +</li> +</ul> + +<h2>Release 5.1.1</h2> +<p>The big change in this is adjustments to be in line with Journal changes in +Elite Dangerous Odyssey 4.0.0.400, released 2021-06-10, with respect to the +Odyssey materials Inventory.</p> +<p><strong>This update is mandatory if you want EDMarketConnector to update Inara.cz +with your Odyssey inventory.</strong></p> +<ul> +<li> +<p><code>ShipLockerMaterials</code> is dead, long live <code>ShipLocker</code>. Along with other +changes to how backpack inventory is handled we should now actually be +able to fully track all Odyssey on-foot materials and consumables without +errors.</p> +</li> +<li> +<p>Inara plugin adjusted to send the new <code>ShipLocker</code> inventory to Inara.cz. +This is <em>still</em> only your <em>ship</em> inventory of Odyssey materials, not +anything currently in your backpack whilst on foot. +See <a href="https://github.com/EDCD/EDMarketConnector/issues/1162">this issue</a> +for some quotes from Artie (Inara.cz developer) about <em>not</em> including +backpack contents in the Inara inventory.</p> +</li> +<li> +<p>Errors related to sending data to EDDN are now more specific to aid in +diagnoising issues.</p> +</li> +<li> +<p>Quietened some log output if we encounter connection errors trying to +utilise the Frontier CAPI service.</p> +</li> +</ul> +<h2> +<a id="user-content-translations" class="anchor" href="#translations" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Translations</h2> +<p>We believe that nothing should be worse in this version compared to 5.1.1, +although a small tweak or two might have leaked through.</p> +<p>We'll be fully addressing translations in a near-future release after we've +conclude the necessary code level work for the new system. Nothing should +change for those of you helping on OneSky, other than at most the +'comments' on each translation. They should be more useful!</p> +<p>Pending that work we've specifically chosen <em>not</em> to update any +translations in this release, so they'll be the same as released in 5.1.0.</p> +<h2> +<a id="user-content-bug-fixes" class="anchor" href="#bug-fixes" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Bug Fixes</h2> +<ul> +<li> +<p>Handle where the <code>Backpack.json</code> file for a <code>Backpack</code> event is a zero length +file. Closes #1138.</p> +</li> +<li> +<p>Fixed case of 'Selection' in 'Override Beta/Normal Selection' text on +Settings > Configuration. This allows translations to work.</p> +</li> +</ul> +<h2> +<a id="user-content-plugin-developers" class="anchor" href="#plugin-developers" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Plugin Developers</h2> +<ul> +<li> +<p>We've updated <a href="./Contributing.md">Contributing.md</a> including:</p> +<ol> +<li>Re-ordered the sections to be in a more logcial and helpful order.</li> +<li>Added a section about choosing an appropriate log level for messages.</li> +<li>fstrings now mandatory, other than some use of <code>.format()</code> with respect to +translated strings.</li> +</ol> +</li> +<li> +<p><a href="./docs/Translations.md">docs/Translations.md</a> updated about a forthcoming +change to how we can programmatically check that all translation strings +have a proper comment in 'L10n/en.template' to aid translators.</p> +</li> +<li> +<p><code>state</code> passed to <code>journal_entry()</code> now has <code>ShipLockerJSON</code> which contains +the <code>json.load()</code>-ed data from the new 'ShipLocker.json' file. We do +attempt to always load from this file, even when the <code>ShipLocker</code> Journal +event itself contains all of the data (which it does on startup, embark and +disembark), so it <em>should</em> always be populated when plugins see any event +related to Odyssey inventory.</p> +</li> +</ul> + + +<h2>Release 5.1.0</h2> +<ul> +<li> +<p>Updates to how this application utilises the Inara.cz API.</p> +<ol> +<li>The current state of your ShipLockerMaterials (MicroResources for Odyssey +Suit and handheld Weapons upgrading and engineering) will now be sent. +Note that we can't reliably track this on the fly, so it will only +update when we see a full <code>ShipLockerMaterials</code> Journal event, such as +at login or when you disembark from any vehicle.</li> +<li>Odyssey Suits and their Loadouts will now be sent.</li> +<li>When you land on a body surface, be that in your own ship, in a Taxi, +or in a Dropship. Depending on the exact scenario a Station might be +sent along with this.</li> +</ol> +</li> +<li> +<p>You can now both edit the 'normal' and 'beta' coriolis.io URLs, and +choose which of them are used. 'Auto' means allowing the application to +use the normal one when you're running the live game, or the beta version +if running a beta version of the game.</p> +</li> +<li> +<p>Suit names will now be displayed correctly when we have pulled the data +from the Frontier CAPI, rather than Journal entries.</p> +</li> +<li> +<p>Many translations updated once more, especially for new strings. Thanks +as always to those contributing!</p> +</li> +</ul> +<h2> +<a id="user-content-bug-fixes" class="anchor" href="#bug-fixes" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Bug Fixes</h2> +<ul> +<li>Don't assume we have an EDSM Commander Name and/or API key just because +we know a game Commander name. This came to light during the +investigation of +"<a href="https://github.com/EDCD/EDMarketConnector/issues/1134">EDSM Plugin sent wrong credit balance when switching accounts</a>". +We're still investigating that bug report.</li> +</ul> +<h2> +<a id="user-content-plugin-developers" class="anchor" href="#plugin-developers" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Plugin Developers</h2> +<p>There are some new members of the <code>state</code> dictionary passed to +<code>journal_entry()</code>; Taxi, Dropship, Body and BodyType. See +<a href="./PLUGINS.md">PLUGINS.md</a> for the details.</p> + +<h2>Release 5.0.4</h2> +<p>This is a minor bugfix release, ensuring that Odyssey Suit names (and loadout) +will actually display if you're in your ship on login and never leave it.</p> +<p>NB: This still requires a Frontier CAPI data pull, either automatically +because you're docked if you have that option set, or by pressing the +'Update' button. We can't display data when we don't have it from either +CAPI or Journal sources. You'll also see '<code><Unknown></code>' between the time we +see the Journal LoadGame event during login and when there's either a +Journal suit-related event, or a CAPI data pull completes.</p> + + +<h2>Release 5.0.3</h2> +<ul> +<li> +<p>You can now click on a 'cell' in the "File" > "Status" popup to copy that +text to the clipboard. This was a relatively easy, and non-intrusive, code +change. We'll look at richer, fuller, copy functionality in the future.</p> +</li> +<li> +<p>Suit names, for all grades, should now be displaying as just the relevant +word, never a symbol, and with the redundant 'suit' word(s) from all +languages removed. Note that Frontier have <em>not</em> translated the +following, so neither do we: "Artemis", "Dominator", "Maverick". The 'Flight +Suit' should, approximately, use the Frontier-supplied translation for +'Flight' in this context. In essence the displayed name is now as short +as possible whilst disambiguating the suit names from each other.</p> +</li> +</ul> +<h2> +<a id="user-content-bug-fixes" class="anchor" href="#bug-fixes" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Bug Fixes</h2> +<ul> +<li> +<p>The check for "source, but with extra changes?" in appversion will now +not cause an error if the "git" command isn't available. Also, the extra +text added to the build number is now ".DIRTY".</p> +</li> +<li> +<p>Actually properly handle the "you just made progress" version of the +<code>EngineerProgress</code> Journal event, so that it doesn't throw errors.</p> +</li> +</ul> +<h2> +<a id="user-content-plugin-developers" class="anchor" href="#plugin-developers" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Plugin Developers</h2> +<ul> +<li> +<p>The backpack and ship locker tracking of micro-resources <strong>might</strong> now +actually be correct with respect to 'reality' in-game. This is in part +thanks to Frontier changes to some events in 4.0.0.200.</p> +</li> +<li> +<p>Suit names will now only be sourced from Journal events if the +application didn't (yet) have the equivalent CAPI data.</p> +</li> +<li> +<p>The displayed Suit name is stored in an extra "edmcName" key within +<code>state['Suits']</code> and <code>state['SuitCurrent']</code>. What was found in the +Journal or CAPI data is still present in the "name" and "locName" values.</p> +</li> +<li> +<p>The "language", "gameversion" and "build" values from the "Fileheader" event +are all now stored in <code>state[]</code> fields. See <a href="./PLUGINS.md">PLUGINS.md</a> for +updated documentation.</p> +</li> +<li> +<p>We have a new <a href="./Contributing.md">Contributing.md</a> policy of adding +comments in a defined format when we add or change code such that there's a +'hack', 'magic' or 'workaround' in play. You might find some of this +enlightening going forwards.</p> +</li> +</ul> + +<h2>Release 5.0.2</h2> +<p>This release is primarily aimed at getting the UI "<code>Suit: ...</code>" line working +properly.</p> +<ul> +<li> +<p>The "<code>Suit: ...</code>" UI line should now function as best it can given the +available data from the game. It should not appear if you have launched +the Horizons version of the game, even if your account has Odyssey +enabled. You might see "<code><Unknown></code>" as the text when this application +does not yet have the required data.</p> +</li> +<li> +<p>Changed the less than obvious "<code>unable to get endpoint: /profile</code>" error +message to "<code>Frontier CAPI query failure: /profile</code>", and similarly for the +other CAPI endpoints we attempt to access. This new form is potentially +translated, but translators need time to do that.</p> +<p>In addition the old message "<code>Received error {r.status_code} from server</code>" +has been changed to "<code>Frontier CAPI server error: {r.status_code}</code>" and is +potentially translated.</p> +</li> +<li> +<p>The filenames used for 'Market data in CSV format file' will now be sane, +and as they were before 5.0.0.</p> +</li> +<li> +<p>Linux: 'Shipyard provider' will no longer default to showing 'False' if +no specific provider has been selected.</p> +</li> +</ul> +<h2> +<a id="user-content-plugin-developers" class="anchor" href="#plugin-developers" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Plugin Developers</h2> +<ul> +<li> +<p>Extra <code>Flagse</code> values added in the live release of Odyssey have been added to +<code>edmc_data.py</code>.</p> +</li> +<li> +<p>Odyssey 'BackPack' values should now track better, but might still not be +perfect due to Journal bugs/shortcomings.</p> +</li> +<li> +<p><code>state</code> passed to <code>journal_entry()</code> now has a <code>BackpackJSON</code> (note the case) +member which is a copy of the data from the <code>Backpack.json</code> (yes, that's +currently the correct case) file that is written when there's a <code>BackPack</code> +(guess what, yes, that is currently the correct case) event written to +the Journal.</p> +</li> +<li> +<p><code>state['Credits']</code> tracking is almost certainly not perfect. We're +accounting for the credits component of <code>SuitUpgrade</code> now, but there +might be other such we've yet accounted for.</p> +</li> +<li> +<p><code>state['Suits']</code> and associated other keys should now be tracking from +Journal events, where possible, as well as CAPI data.</p> +</li> +<li> +<p>There is a section in PLUGINS.md about how to package an extra Python +module with your plugin. Note the new caveat in +<a href="./PLUGINS.md#avoiding-potential-pitfalls">PLUGINS.md:Avoiding-pitfalls</a> +about the name of your plugin's directory.</p> +</li> +</ul> + +<h2>Release 5.0.1</h2> +<p>The main reason for this release is to add an 'odyssey' boolean flag to all +EDDN messages for the benefit of listeners, e.g. eddb.io, inara.cz, +edsm.net, spansh.co.uk, etc. <strong>Please do update so as to make their lives +easier once Odyssey has launched!</strong></p> +<ul> +<li> +<p>Translations have been updated again. Thanks to all the contributors. +See <a href="https://github.com/EDCD/EDMarketConnector/wiki/Translations">wiki:Translations</a> +and <a href="https://github.com/EDCD/EDMarketConnector/issues/24">Translations welcome</a> +for links and discussion if you want to help.</p> +</li> +<li> +<p>Changed the error message "<code>Error: Frontier server is down</code>" to +"<code>Error: Frontier CAPI didn't respond</code>" to make it clear this pertains to +the CAPI and not the game servers.</p> +</li> +</ul> +<h2> +<a id="user-content-killswitches" class="anchor" href="#killswitches" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Killswitches</h2> +<p>In the 5.0.0 changelog we said:</p> + <blockquote>We will **NOT** be using this merely to try and get some + laggards to upgrade.</blockquote> +<p>However, from now on there is an exception to this. <strong>After</strong> this +release any subsequent -beta or -rc versions will be killswitched <em>after</em> +their full release is published.</p> +<p>For example, if we put out a <code>5.0.2-beta1</code> and <code>5.0.2-rc1</code> before the full +<code>5.0.2</code>, then when <code>5.0.2</code> was published we would activate all available +killswitches for versions <code>5.0.2-beta1</code> and <code>5.0.2-rc1</code>. In this example +<code>5.0.1</code> would <strong>not</strong> be killswitched as part of <em>this policy</em> (but still +could be if, e.g. a data corruption bug was found in it).</p> +<p>In general please do <strong>not</strong> linger on any -beta or -rc release if there +has been a subsequent release. Upgrade to the equivalent full release once it +is published.</p> +<h2> +<a id="user-content-plugin-developers" class="anchor" href="#plugin-developers" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Plugin Developers</h2> +<ul> +<li> +<p>Please make the effort to subscribe to GitHub notifications of new +EDMarketConnector releases:</p> +<ol> +<li>Login to <a href="https://github.com">GitHub</a>.</li> +<li>Navigate to <a href="https://github.com/EDCD/EDMarketConnector">EDMarketConnector</a>.</li> +<li>Click the 'Watch' (or 'Unwatch' if you previously set up any watches on +us). It's currently (2021-05-13) the left-most button of 3 near the +top-right of the page.</li> +<li>Click 'Custom'.</li> +<li>Ensure 'Releases' is selected.</li> +<li>Click 'Apply'.</li> +</ol> +<p>This way you'll be aware, as early as possible, of any -beta and -rc +changelogs and changes that might affect your work.</p> +</li> +<li> +<p><code>state</code> passed to <code>journal_entry()</code> has a new member <code>Odyssey</code> (note the +capital <code>O</code>) which is a boolean indicating if the <code>LoadGame</code> event both has +an <code>Odyssey</code> key, and if so, what the value was. Defaults to <code>False</code>.</p> +</li> +<li> +<p>PLUGINS.md updated to document the <code>state['Horizons']</code> flag that has been +present in it since version 3.0 of the game.</p> +</li> +<li> +<p>The <code>stations.p</code> and <code>systems.p</code> files that were deprecated in 5.0.0 have +now also been removed in git. As this release is made they will no +longer be in the <code>develop</code>, <code>main</code> or <code>stable</code> branches. If you truly +need to find a copy look at the <code>Release/4.2.7</code> tag, but do read the 5.0.0 +changelog for why we stopped using them and what you can change to also +not need them.</p> +</li> +</ul> + +<h2>Release 5.0.0</h2> +<ul> +<li> +<p>We now test against, and package with, Python 3.9.5.</p> +<p><strong>As a consequence of this we no longer support Windows 7.<br> +This is due to +<a href="https://www.python.org/downloads/windows/" rel="nofollow">Python 3.9.x itself not supporting Windows 7</a>. +The application (both EDMarketConnector.exe and EDMC.exe) will crash on +startup due to a missing DLL.</strong></p> +<p>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.</p> +<p>Developers can check the contents of the <code>.python-version</code> file +in the source (it's not distributed with the Windows installer) for the +currently used version in a given branch.</p> +</li> +</ul> +<h2> +<a id="user-content-this-update-is-mandatory" class="anchor" href="#this-update-is-mandatory" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>This Update Is Mandatory</h2> +<p>This release is a <strong>mandatory upgrade for the release of Elite Dangerous +Odyssey</strong>. Any bug reports against earlier releases, pertaining to Odyssey or +not, will be directed to reproduce them with 5.0.0 or later. There are also +minor bugs in 4.2.7 and earlier that have been fixed in this version. There +will <strong>NOT</strong> be another 4.2.x release.</p> +<p>The major version has been incremented not for Odyssey support, but because +we have made some minor breaking changes to the APIs we provide for plugin +developers.</p> +<p>Due to these plugin API changes (see below) users might need to update their +plugins. A check of all the +<a href="https://github.com/EDCD/EDMarketConnector/wiki/Plugins#available-plugins---confirmed-working-under-python-37">Plugins we know about</a> +only found one with an issue related to the move to <code>edmc_data.py</code>, the +developer was informed and the issue addressed.</p> +<p>Other plugins should, at most, log deprecation warnings about the +<code>config</code> changes (again, see below).</p> +<p><strong>In the first instance please report any issues with plugins to <em>their</em> +developers, not us. They can contact us about EDMC core code issues if +they find such in their investigations.</strong></p> +<p>All plugin developers would benefit from having a GitHub account and then +setting up a watch on <a href="https://github.com/EDCD/EDMarketConnector/">EDMarketConnector</a> +of at least 'Releases' under 'Custom'.</p> +<p>NB: If you had any beta or -rc1 of 5.0.0 installed and see anything weird +with this full release it would be advisable to manually uninstall, confirm +the installation directory (default <code>c:\Program Files (x86)\EDMarketConnector</code>) +is empty, and then re-install 5.0.0 to be sure you have a clean, working, +install. Anyone upgrading from 4.2.7 or earlier shouldn't see any issues +with this.</p> +<h2> +<a id="user-content-changes-and-enhancements" class="anchor" href="#changes-and-enhancements" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Changes and Enhancements</h2> +<ul> +<li> +<p>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.</p> +</li> +<li> +<p>Updated translations. Once more, thanks to all the translators!</p> +</li> +<li> +<p>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 +<code>Error: customer_id doesn't match!</code> on the bottom status line. Double-check +you're using the correct credentials when authing!</p> +</li> +<li> +<p>New 'Main window transparency' slider on <code>Settings</code> > <code>Appearance</code>.</p> +</li> +<li> +<p>New command-line argument for EDMarketConnector.exe <code>--reset-ui</code>. This will:</p> +<ol> +<li>Reset to the default Theme.</li> +<li>Reset the UI transparency to fully opaque.</li> +</ol> +<p>The intention is this can be used if you've lost sight of the main window +due to tweaking these options.</p> +<p>There is a new file <code>EDMarketConnector - reset-ui.bat</code> to make utilising +this easy on Windows.</p> +</li> +<li> +<p>New CL arg for EDMarketConnector.exe <code>--force-edmc-protocol</code>. +This is really only of use to core developers (its purpose being to force +use of the <code>edmc://</code> protocol for Frontier Auth callbacks, even when not +'frozen').</p> +</li> +<li> +<p>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.</p> +<p>If you want to run multiple instances of the application under Linux then +please check the updated <a href="https://github.com/EDCD/EDMarketConnector/wiki/Troubleshooting#multi-accounting">Troubleshooting: Multi-Accounting</a> +wiki entry.</p> +</li> +<li> +<p>Linux and macOS: You can now set a font name and size in your config file.<br> +Ensuring this is a TTF font, rather than a bitmap font, should allow the +application UI scaling to work.</p> +<ol> +<li>'font' - the font name to attempt using</li> +<li>'font_size' - the font size to attempt using.</li> +</ol> +<p>There is no UI for this in Preferences, you will need to edit your +<a href="https://github.com/EDCD/EDMarketConnector/wiki/Troubleshooting#location-of-configuration-files">config file</a> +to set or change it, and then restart the application.</p> +<p>This is not supported on Windows so as not to risk weird bugs. UI +Scaling works on Windows without this.</p> +</li> +<li> +<p>We now also cite the git 'short hash' in the version string. For a Windows +install of the application this is sourced from the <code>.gitversion</code> file +(written during the build process).</p> +<p>When running from source we attempt to use the command <code>git rev-parse --short HEAD</code> +to obtain this. If this doesn't work it will be set to 'UNKNOWN'.</p> +</li> +<li> +<p>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.</p> +<p>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 <strong>NOT</strong> be +using this merely to try and get some laggards to upgrade.</p> +<p>Plugin Developers: See <a href="./docs/Killswitches.md">Killswitches.md</a> for more +information about this.</p> +</li> +<li> +<p>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 <code>??:??:??</code> when there is +an issue with this.</p> +</li> +<li> +<p>macOS: We've managed to test the latest code on macOS Catalina. Other than +<a href="https://github.com/EDCD/EDMarketConnector/issues/906">keyboard shortcut support not working</a> +it appears to be working.</p> +</li> +<li> +<p>We've pulled the latest Coriolis data which might have caused changes to +ship and module names as written out to some files.</p> +</li> +</ul> +<h2> +<a id="user-content-odyssey" class="anchor" href="#odyssey" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Odyssey</h2> +<p>Every effort was made during the Odyssey Alphas to ensure that this +application will continue to function correctly with it. As always, make a +<a href="https://github.com/EDCD/EDMarketConnector/issues/new?assignees=&labels=bug%2C+unconfirmed&template=bug_report.md&title=">Bug Report</a> +if you find anything not working, but be sure to check our +<a href="https://github.com/EDCD/EDMarketConnector/issues/618">Known Issues</a> first.</p> +<ul> +<li> +<p>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.<br> +This UI element is collapsed/hidden if no suit/on-foot state is detected, +e.g. not playing Odyssey.</p> +</li> +<li> +<p>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.</p> +</li> +</ul> +<p>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.</p> +<h2> +<a id="user-content-bug-fixes" class="anchor" href="#bug-fixes" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Bug Fixes</h2> +<ul> +<li> +<p>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.</p> +</li> +<li> +<p>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.</p> +</li> +<li> +<p>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.</p> +<p>It has been observed that Frontier has fixed this bug for Odyssey.</p> +</li> +<li> +<p>Don't try to get Ship information from <code>LoadGame</code> event if directly in CQC.</p> +</li> +<li> +<p>Inara: Don't attempt to send an empty +<code>setCommanderReputationMajorFaction</code> API call. This quietens an error +from the Inara API caused when a Cmdr literally has no Major Faction +Reputation yet.</p> +</li> +</ul> +<h2> +<a id="user-content-code-clean-up" class="anchor" href="#code-clean-up" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Code Clean Up</h2> +<ul> +<li> +<p>Code pertaining to processing Journal events was reworked and noisy logging +reduced as a consequence.</p> +</li> +<li> +<p>A little TRACE logging output has been commented out for now.</p> +</li> +<li> +<p>The code for <code>File</code> > <code>Status</code> has been cleaned up.</p> +</li> +<li> +<p>Localisation code has been cleaned up.</p> +</li> +<li> +<p>Code handling the Frontier Authorisation callback on Windows has been +cleaned up.</p> +</li> +<li> +<p>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.</p> +</li> +</ul> +<h2> +<a id="user-content-plugin-developers" class="anchor" href="#plugin-developers" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Plugin Developers</h2> +<ul> +<li> +<p>The files <code>stations.p</code> and <code>systems.p</code> 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.</p> +<p>If you were using either to lookup EDDB IDs for systems and/or stations +then please see how <code>system_url()</code> and <code>station_url()</code> now work in +<code>plugins/eddb.py</code>.</p> +<p>This change also removed the core (not plugin) <code>eddb.py</code> 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 <code>systems.p</code> took many +hours and required 64-bit Python to have any hope of working due to +memory usage.</p> +</li> +<li> +<p>All static data that is +<a href="https://github.com/EDCD/EDMarketConnector/blob/main/PLUGINS.md#available-imports">cleared for use by plugins</a> +is now in the file +<code>edmc_data.py</code> and should be imported from there, not <em>any</em> other module.</p> +<p>The one thing we didn't move was the 'bracket map' dictionaries in <code>td.py</code> +as they're for use only by the code in that file.</p> +<p>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.</p> +</li> +<li> +<p><code>config.appversion()</code> is now a function that returns a <code>semantic_version.Version</code>. +In contexts where you're expecting a string this should mostly +just work. If needs be wrap it in <code>str()</code>.</p> +<p>For backwards compatibility with pre-5.0.0 you can use:</p> +</li> +</ul> +<div class="highlight highlight-source-python"><pre> <span class="pl-k">from</span> <span class="pl-s1">config</span> <span class="pl-k">import</span> <span class="pl-s1">appversion</span> + + <span class="pl-k">if</span> <span class="pl-en">callable</span>(<span class="pl-s1">appversion</span>): + <span class="pl-s1">edmc_version</span> <span class="pl-c1">=</span> <span class="pl-en">appversion</span>() + <span class="pl-k">else</span>: + <span class="pl-s1">edmc_version</span> <span class="pl-c1">=</span> <span class="pl-s1">appversion</span></pre></div> +<ul> +<li> +<p>Example plugin +<a href="https://github.com/EDCD/EDMarketConnector/tree/main/docs/examples/plugintest">plugintest</a> +updated. This includes an example of how to check core EDMC version if needs +be. This example is also in +<a href="https://github.com/EDCD/EDMarketConnector/blob/main/PLUGINS.md#checking-core-edmc-version">PLUGINS.md</a>.</p> +</li> +<li> +<p><code>config.py</code> has undergone a major rewrite. You should no longer be using +<code>config.get(...)</code> or <code>config.getint(...)</code>, which will both give a +deprecation warning.<br> +Use instead the correct <code>config.get_<type>()</code> function:</p> +<ul> +<li><code>config.get_list(<key>)</code></li> +<li><code>config.get_str(<key>)</code></li> +<li><code>config.get_bool(<key>)</code></li> +<li><code>config.get_int(<key>)</code></li> +</ul> +<p>Setting still uses <code>config.set(...)</code>.</p> +<p>So:</p> +<ol> +<li>Replace all instances of <code>config.get()</code> and <code>config.getint()</code> as above.</li> +<li>For ease of maintaining compatibility with pre-5.0.0 versions include +this code in at least one module/file (no harm in it being in all that +manipulate plugin config):</li> +</ol> +</li> +</ul> +<pre><code>from config import config + +# For compatibility with pre-5.0.0 +if not hasattr(config, 'get_int'): + config.get_int = config.getint + +if not hasattr(config, 'get_str'): + config.get_str = config.get + +if not hasattr(config, 'get_bool'): + config.get_bool = lambda key: bool(config.getint(key)) + +if not hasattr(config, 'get_list'): + config.get_list = config.get </code></pre> -<p>in order to increase the log level and gather some extra information. -Caution is advised if sharing a <code>--trace</code> log file as it will now contain -some of the actual auth data returned from Frontier.</p> -</li> -<li> -<p>Ensure that 'Save Raw Data' will work. Fixes <a href="https://github.com/EDCD/EDMarketConnector/issues/908">#908 - Raw export of CAPI data broken</a>.</p> -</li> -<li> -<p>Prevent EDDN plugin from erroring when we determine if the commander has -Horizons. Fixes <a href="https://github.com/EDCD/EDMarketConnector/issues/907">#907 - Modules is a list not a dict on damaged stations</a></p> -</li> -</ul> - - -<h2>Release 4.2.0</h2> -<p><em>This release increases the Minor version due to the major change in how -multiple-instance checking is done.</em></p> <ul> <li> -<p>Adds Steam and Epic to the list of "audiences" in the Frontier Auth callout -so that you can authorise using those accounts, rather than their associated -Frontier Account details.</p> +<p>Utilising our provided logging from a class-level, i.e. not a solid +instance of a class, property/function will now work.</p> </li> <li> -<p>New status message "CAPI: No commander data returned" if a <code>/profile</code> -request has no commander in the returned data. This can happen if you -literally haven't yet created a Commander on the account. Previously you'd -get a confusing <code>'commander'</code> message shown.</p> +<p>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 <code>.gitversion</code> file.</p> +<p>However, no plugin should itself call <code>os.chdir(...)</code> or equivalent. You'll +change the current working directory for all core code and other plugins as +well (it's global to the whole <strong>process</strong>, not per-thread). Use full +absolute paths instead (<code>pathlib</code> is what to use for this).</p> </li> <li> -<p>Changes the "is there another process already running?" check to be based on -a lockfile in the configured Journals directory. The name of this file is -<code>edmc-journal-lock.txt</code> and upon successful locking it will contain text -like:</p> -<pre><code>Path: <configured path to your Journals> -PID: <process ID of the application> -</code></pre> -<p>The lock will be released and applied to the new directory if you change it -via Settings > Configuration. If the new location is already locked you'll -get a 'Retry/Ignore?' pop-up.</p> -<p>For most users things will operate no differently, although note that the -multiple instance check does now apply to platforms other than Windows.</p> -<p>For anyone wanting to run multiple instances of the program this is now -possible via:</p> -<p><code>runas /user:<USER> "\"c:\Program Files (x86)\EDMarketConnector\EDMarketConnector.exe\" --force-localserver-for-auth"</code></p> -<p>If anything has messed with the backslash characters there then know that you -need to have " (double-quote) around the entire command (path to program .exe -<em>and</em> any extra arguments), and as a result need to place a backslash before -any double-quote characters in the command (such as around the space-including -path to the program).</p> -<p>I've verified it renders correctly <a href="https://github.com/EDCD/EDMarketConnector/blob/Release/4.2.0/ChangeLog.md">on GitHub</a>.</p> -<p>The old check was based solely on there being a window present with the title -we expect. This prevented using <code>runas /user:SOMEUSER ...</code> to run a second -copy of the application, as the resulting window would still be within the -same desktop environment and thus be found in the check.</p> -<p>The new method does assume that the Journals directory is writable by the -user we're running as. This might not be true in the case of sharing the -file system to another host in a read-only manner. If we fail to open the -lock file read-write then the application aborts the checks and will simply -continue running as normal.</p> -<p>Note that any single instance of EDMarketConnector.exe will still only monitor -and act upon the <em>latest</em> Journal file in the configured location. If you run -Elite Dangerous for another Commander then the application will want to start -monitoring that separate Commander. See <a href="https://github.com/EDCD/EDMarketConnector/wiki/Troubleshooting#i-run-two-instances-of-ed-simultaneously-but-i-cant-run-two-instances-of-edmc%3E">wiki:Troubleshooting#i-run-two-instances-of-ed-simultaneously-but-i-cant-run-two-instances-of-edmc</a> -which will be updated when this change is in a full release.</p> +<p>The <code>state</code> dict passed to plugins in <code>journal_entry()</code> calls (which is +actually <code>monitor.state</code> in the core code) has received many additions +relating to Odyssey, as well as other fixes and enhancements.</p> +<ol> +<li> +<p>Support has been added for the <code>NavRoute</code> (not <code>Route</code> as v28 of the +official Journal documentation erroneously labels it) Journal event and +its associated file <code>NavRoute.json</code>. See <a href="https://github.com/EDCD/EDMarketConnector/blob/main/PLUGINS.md#journal-entry">PLUGINS.md:Events documentation</a></p> </li> <li> -<p>Adds the command-line argument <code>--force-localserver-for-auth</code>. This forces -using a local webserver for the Frontier Auth callback. This should be used -when running multiple instances of the application <strong>for all instances</strong> -else there's no guarantee of the <code>edmc://</code> protocol callback reaching the -correct process and Frontier Auth will fail.</p> +<p>Similarly, there is now support for the <code>ModuleInfo</code> event and its +associated <code>ModulesInfo.json</code> file.</p> </li> <li> -<p>Adds the command-line argument <code>--suppress-dupe-process-popup</code> to exit -without showing the warning popup in the case that EDMarketConnector found -another process already running.</p> -<p>This can be useful if wanting to blindly run both EDMC and the game from a -batch file or similar.</p> -</li> -</ul> - - - -<h2>Release 4.1.6</h2> -<p>We might have finally found the cause of the application hangs during shutdown. -Note that this became easier to track down due to the downtime -for migration of <a href="http://www.edsm.net" rel="nofollow">www.edsm.net</a> around 2021-01-11. Before these fixes EDSM's -API not being available would cause an EDMC hang on shutdown.</p> -<ul> -<li> -<p>We've applied extra paranoia to some of the application shutdown code to -ensure we're not still trying to handle journal events during this sequence.</p> -<p>We also re-ordered the shutdown sequence, which might help avoid the shutdown -hang.</p> -<p>If you encounter a shutdown hang then please add a comment and log files to -<a href="https://github.com/EDCD/EDMarketConnector/issues/678">Application can leave a zombie process on shutdown #678</a> -to help us track down the cause and fix it.</p> +<p><code>state['Credits']</code> - until now no effort was made to keep this +record of the credits balance up to date after the initial <code>LoadGame</code> +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.</p> </li> <li> -<p>We now avoid making Tk event_generate() calls whilst the appliction is -shutting down.</p> +<p><code>state['Cargo']</code> now takes account of any <code>CargoTransfer</code> events. +This was added to the game in the Fleet Carriers update, but also covers +transfers to/from an SRV.</p> </li> <li> -<p>Plugins should actively avoid making any sort of Tk event_generate() call -during application shutdown.</p> -<p>This means using <code>if not config.shutting_down:</code> to gate any code in worker -threads that might attempt this. Also, be sure you're not attempting such -in your <code>plugin_stop()</code> function.</p> -<p>See plugins/edsm.py and plugins/inara.py for example of the usage.</p> +<p><code>state['OnFoot']</code> 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).</p> </li> <li> -<p>Any use of <code>plug.show_error()</code> won't actually change the UI status line -during shutdown, but the text you tried to show will be logged instead.</p> +<p><code>state['Suits']</code> and <code>state['SuitLoadouts']</code> added as <code>dict</code>s 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 <code>dict</code> for simplicity. They will be empty <code>dict</code>s, not +<code>None</code> if there is no data.<br> +We use the CAPI data names for keys, not the Journal ones - e.g. <code>slots</code> +for weapons equipped, not <code>Modules</code>. +The <code>id</code> field found on e.g. weapon details in suit loadouts may be <code>None</code> +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).</p> </li> <li> -<p>Cargo tracking will now correctly count all instances of the same type of -cargo for different missions. Previously it only counted the cargo for -the last mission requiring that cargo type, as found in Cargo.json.</p> +<p><code>state['SuitCurrent']</code> and <code>state['SuitLoadoutCurrent']</code> contain the +obvious "currently in use" data as per the Suits/SuitLoadouts.</p> </li> <li> -<p>The loaded contents of Cargo.json can now be found in <code>monitor.state['CargoJSON']</code>. -<code>monitor.state</code> is what is passed to plugins as <code>state</code> in the -<code>journal_entry()</code> call.</p> +<p>Tracking of the new Odyssey 'Microresources' has been added:</p> +<ol> +<li> +<code>Component</code> - <code>dict</code> for 'Ship Locker' inventory.</li> +<li> +<code>Item</code> - <code>dict</code> for 'Ship Locker' inventory.</li> +<li> +<code>Consumable</code> - <code>dict</code> for 'Ship Locker' inventory.</li> +<li> +<code>Data</code> - <code>dict</code> for 'Ship Locker' inventory.</li> +<li> +<code>BackPack</code> - on-foot inventory, a <code>dict</code> containing again +dicts for <code>Component</code>, <code>Item</code>, <code>Consumable</code> and <code>Data</code>. +However note that the lack of a Journal event when throwing a grenade, +along with no <code>BackPackMaterials</code> event if logging in on-foot means that +we can't track the BackPack inventory perfectly.</li> +</ol> +</li> +</ol> +<p>See the updated <code>PLUGINS.md</code> file for details.</p> </li> <li> -<p>Our logging code should now cope with logging from a property.</p> +<p>As <code>Status.json</code>, and thus the EDMC 'dashboard' output now has a 'flags2' +key we have added the associated constants to <code>edmc_data.py</code> with a +<code>Flags2</code> prefix on the names.</p> </li> <li> -<p>Logging from any name-mangled method should now work properly.</p> +<p>Note that during the Odyssey Alpha it was observed that the CAPI +<code>data['commander']['docked']</code> boolean was <strong>always true</strong> 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: +<a href="https://issues.frontierstore.net/issue-detail/28638" rel="nofollow">PTS CAPI saying Commander is Docked after jumping to new system</a>.</p> </li> -<li> -<p>Miscellaneous updates to PLUGINS.md - mostly to clarify some things.</p> -</li> -</ul> - - ]]> - </description> - <enclosure - url="https://github.com/EDCD/EDMarketConnector/releases/download/Release/4.2.3/EDMarketConnector_win_4.2.3.msi" - sparkle:os="windows" - sparkle:installerArguments="/passive LAUNCH=yes" - sparkle:version="4.2.3" - length="11382784" - type="application/octet-stream" - /> - </item> - - </channel> +</ul>]]></description> + <enclosure url="https://github.com/EDCD/EDMarketConnector/releases/download/Release%2F5.10.4/EDMarketConnector_Installer_5.10.4.exe" sparkle:os="windows" sparkle:version="5.10.4" length="0" type="application/x-ms-dos-executable" /> + </item> + </channel> </rss>