1
0
mirror of https://github.com/EDCD/EDMarketConnector.git synced 2025-04-16 09:10:35 +03:00

Merge branch 'stable' into releases

This commit is contained in:
David Sangrey 2024-03-15 15:17:10 -04:00
commit 7541bab443
No known key found for this signature in database
GPG Key ID: 3AEADBB0186884BC
25 changed files with 239 additions and 71 deletions

View File

@ -126,6 +126,10 @@ jobs:
with:
filepath: './EDMC_Installer_Config.iss'
- name: Rename Installer
run: |
Get-ChildItem -Path . -Filter "EDMarketConnector_Installer_*.exe" | Rename-Item -NewName {"EDMarketConnector_Installer_Unsigned_$($_.Name -replace '^EDMarketConnector_Installer_', '')"}
- name: Upload build files
uses: actions/upload-artifact@v3
with:

View File

@ -1,38 +1,51 @@
This is the master changelog for Elite Dangerous Market Connector. Entries are in reverse chronological order (latest first).
---
Copyrights
* We currently test against, and package with, Python 3.11.7, 32-bit.
* As a result, we do not support Windows 7, 8, or 8.1.
* Developers can check the contents of the `.python-version` file
in the source (not distributed with the Windows installer) for the
currently used version.
---
Release 5.10.2
===
Please see the [docs/Licenses](docs/Licenses/) directory for copies of any
licenses for software we use with EDMarketConnector, either at runtime, or to
produce the Windows executables and installer.
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.
---
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 https://github.com/EDCD/EDMarketConnector/wiki/Code-Signing-and-EDMC
* We now test against, and package with, Python 3.11.7, 32-bit.
**Changes and Enhancements**
* Added additional logging to the Python build string in the case of missing files
* Added a new icon to EDMC's Command-Line EXE
* Added additional logging to the build system
* Updated several dependencies
* Updated FDEV IDs
* Updated relevant copyright dates
* Updated automatic build script to support code signing workflow
* Updated translations to the latest versions
* Moved a few unused files to the resources folder. These files have no references in the code
**As a consequence of this we no longer support Windows 7.
This is due to
[Python 3.10.x and later not supporting Windows 7](https://www.python.org/downloads/windows/).
The application (both EDMarketConnector.exe and EDMC.exe) will crash on
startup due to a missing DLL.**
**Bug Fixes**
* Fixed a bug that could cause EDMC to handle SIGINT signals improperly
* Fixed a bug that could result in URL providers to be set to invalid values
* Fixed a bug that could result in Coriolis URL providers to revert back to "Auto" on language translations
* Fixed a bug where Inara didn't understand being blown up by a Thargoid, and blew itself up instead
* Fixed a printing issue for the localization system for unused strings
As [Windows 8.1 is now End-Of-Life](https://learn.microsoft.com/en-us/lifecycle/faq/windows#windows-8-1)
we no longer explicitly support it, but for the time being it will likely
continue to work. This is dependent on future Python releases not dropping
support for Windows 8.1 in a manner that prevents it working. Any bug report
made against Windows 8.1 use may be ignored unless reproduced on a supported
OS.
**Removed Files**
* Removed two unused manifest and MacOS icon files which are no longer in use.
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.
**Known Issues**
* Some users of TCE have reported issues with newer versions of EDMC with TCE.
* We have been unable to replicate this issue. If you are able to assist, please
add your information here: https://github.com/EDCD/EDMarketConnector/issues/2176
Developers can check the contents of the `.python-version` file
in the source (it's not distributed with the Windows installer) for the
currently used version in a given branch.
**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.
* 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()`.
---
Release 5.10.1
===
This release contains a number of bugfixes, minor performance enhancements,

View File

@ -1,6 +0,0 @@
<Application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<VisualElements
BackgroundColor="black"
ShowNameOnSquare150x150Logo="on"
ForegroundText="light" />
</Application>

Binary file not shown.

View File

@ -353,7 +353,12 @@ if __name__ == '__main__': # noqa: C901
button = ttk.Button(frame, text='OK', command=lambda: sys.exit(0))
button.grid(row=2, column=0, sticky=tk.S)
root.mainloop()
try:
root.mainloop()
except KeyboardInterrupt:
logger.info("Ctrl+C Detected, Attempting Clean Shutdown")
sys.exit()
logger.info('Exiting')
journal_lock = JournalLock()
locked = journal_lock.obtain_lock()
@ -802,6 +807,9 @@ class AppWindow:
self.w.bind_all('<<CompanionAuthEvent>>', self.auth) # cAPI auth
self.w.bind_all('<<Quit>>', self.onexit) # Updater
# Check for Valid Providers
validate_providers()
# Start a protocol handler to handle cAPI registration. Requires main loop to be running.
self.w.after_idle(lambda: protocol.protocolhandler.start(self.w))
@ -2110,6 +2118,51 @@ def show_killswitch_poppup(root=None):
ok_button.grid(columnspan=2, sticky=tk.EW)
def validate_providers():
"""Check if Config has an invalid provider set, and reset to default if we do."""
reset_providers = {}
station_provider: str = config.get_str("station_provider")
if station_provider not in plug.provides('station_url'):
logger.error("Station Provider Not Valid. Setting to Default.")
config.set('station_provider', 'EDSM')
reset_providers["Station"] = (station_provider, "EDSM")
shipyard_provider: str = config.get_str("shipyard_provider")
if shipyard_provider not in plug.provides('shipyard_url'):
logger.error("Shipyard Provider Not Valid. Setting to Default.")
config.set('shipyard_provider', 'EDSY')
reset_providers["Shipyard"] = (shipyard_provider, "EDSY")
system_provider: str = config.get_str("system_provider")
if system_provider not in plug.provides('system_url'):
logger.error("System Provider Not Valid. Setting to Default.")
config.set('system_provider', 'EDSM')
reset_providers["System"] = (system_provider, "EDSM")
if not reset_providers:
return
# LANG: Popup-text about Reset Providers
popup_text = _(r'One or more of your URL Providers were invalid, and have been reset:\r\n\r\n')
for provider in reset_providers:
# LANG: Text About What Provider Was Reset
popup_text += _(r'{PROVIDER} was set to {OLDPROV}, and has been reset to {NEWPROV}\r\n')
popup_text = popup_text.format(
PROVIDER=provider,
OLDPROV=reset_providers[provider][0],
NEWPROV=reset_providers[provider][1]
)
# And now we do need these to be actual \r\n
popup_text = popup_text.replace('\\n', '\n')
popup_text = popup_text.replace('\\r', '\r')
tk.messagebox.showinfo(
# LANG: Popup window title for Reset Providers
_('EDMC: Default Providers Reset'),
popup_text
)
# Run the app
if __name__ == "__main__": # noqa: C901
logger.info(f'Startup v{appversion()} : Running on Python v{sys.version}')
@ -2365,6 +2418,9 @@ sys.path: {sys.path}'''
# Check for FDEV IDs
root.after(3, check_fdev_ids)
# Start the main event loop
root.mainloop()
try:
root.mainloop()
except KeyboardInterrupt:
logger.info("Ctrl+C Detected, Attempting Clean Shutdown")
app.onexit()
logger.info('Exiting')

@ -1 +1 @@
Subproject commit 069b09b1afbd2001248ad93b1481d6f6a309c6f5
Subproject commit 7205c79331f42c1a28b757b27467f79ff106716b

View File

@ -231,6 +231,15 @@
/* EDMarketConnector.py: Popup-text about 'broken' plugins that failed to load; In files: EDMarketConnector.py:2266; */
"One or more of your enabled plugins failed to load. Please see the list on the '{PLUGINS}' tab of '{FILE}' > '{SETTINGS}'. This could be caused by a wrong folder structure. The load.py file should be located under plugins/PLUGIN_NAME/load.py.\r\n\r\nYou can disable a plugin by renaming its folder to have '{DISABLED}' on the end of the name." = "One or more of your enabled plugins failed to load. Please see the list on the '{PLUGINS}' tab of '{FILE}' > '{SETTINGS}'. This could be caused by a wrong folder structure. The load.py file should be located under plugins/PLUGIN_NAME/load.py.\r\n\r\nYou can disable a plugin by renaming its folder to have '{DISABLED}' on the end of the name.";
/* EDMarketConnector.py: Popup-text about Reset Providers; In files: EDMarketConnector.py:2146; */
"One or more of your URL Providers were invalid, and have been reset:\r\n\r\n" = "One or more of your URL Providers were invalid, and have been reset:\r\n\r\n";
/* EDMarketConnector.py: Text About What Provider Was Reset; In files: EDMarketConnector.py:2148; */
"{PROVIDER} was set to {OLDPROV}, and has been reset to {NEWPROV}\r\n" = "{PROVIDER} was set to {OLDPROV}, and has been reset to {NEWPROV}\r\n";
/* EDMarketConnector.py: Popup window title for Reset Providers; In files: EDMarketConnector.py:2161; */
"EDMC: Default Providers Reset" = "EDMC: Default Providers Reset";
/* journal_lock.py: Title text on popup when Journal directory already locked; In files: journal_lock.py:208; */
"Journal directory already locked" = "Journal directory already locked";
@ -246,13 +255,13 @@
/* l10n.py: The system default language choice in Settings > Appearance; prefs.py: Settings > Configuration - Label on 'reset journal files location to default' button; prefs.py: The system default language choice in Settings > Appearance; prefs.py: Label for 'Default' theme radio button; In files: l10n.py:193; prefs.py:455; prefs.py:709; prefs.py:742; */
"Default" = "Default";
/* coriolis.py: 'Auto' label for Coriolis site override selection; coriolis.py: Coriolis normal/beta selection - auto; In files: coriolis.py:74; coriolis.py:77; coriolis.py:123; coriolis.py:139; coriolis.py:145; */
/* coriolis.py: 'Auto' label for Coriolis site override selection; coriolis.py: Coriolis normal/beta selection - auto; In files: coriolis.py:48; coriolis.py:74; coriolis.py:77; coriolis.py:94; coriolis.py:123; coriolis.py:139; coriolis.py:145; coriolis.py:179; coriolis.py:182; */
"Auto" = "Auto";
/* coriolis.py: 'Normal' label for Coriolis site override selection; coriolis.py: Coriolis normal/beta selection - normal; In files: coriolis.py:75; coriolis.py:121; coriolis.py:137; */
/* coriolis.py: 'Normal' label for Coriolis site override selection; coriolis.py: Coriolis normal/beta selection - normal; In files: coriolis.py:49; coriolis.py:75; coriolis.py:95; coriolis.py:121; coriolis.py:137; coriolis.py:180; */
"Normal" = "Normal";
/* coriolis.py: 'Beta' label for Coriolis site override selection; coriolis.py: Coriolis normal/beta selection - beta; In files: coriolis.py:76; coriolis.py:122; coriolis.py:138; */
/* coriolis.py: 'Beta' label for Coriolis site override selection; coriolis.py: Coriolis normal/beta selection - beta; In files: coriolis.py:50; coriolis.py:76; coriolis.py:96; coriolis.py:122; coriolis.py:138; coriolis.py:181; */
"Beta" = "Beta";
/* coriolis.py: Settings>Coriolis: Help/hint for changing coriolis URLs; In files: coriolis.py:91:93; */

View File

@ -1,3 +1,11 @@
/* edsm.py:Settings>EDSM - Label on checkbox for 'send data'; In files: edsm.py:316; */
"Send flight log and CMDR status to EDSM" = "Invia il registro di volo e lo stato del CMDR a EDSM";
/* prefs.py:Label on button used to open a filesystem folder; In files: prefs.py:706; */
"Open Log Folder" = "Cartella Log";
/* inara.py:Text Inara Show API key; In files: inara.py:305; */
"Show API Key" = "Mostra API Key";
/* Language name */
"!Language" = "Italiano";
@ -205,12 +213,24 @@
/* EDMarketConnector.py: Popup-text about 'active' plugins without Python 3.x support; In files: EDMarketConnector.py:2253:2259; */
"One or more of your enabled plugins do not yet have support for Python 3.x. Please see the list on the '{PLUGINS}' tab of '{FILE}' > '{SETTINGS}'. You should check if there is an updated version available, else alert the developer that they need to update the code for Python 3.x.\r\n\r\nYou can disable a plugin by renaming its folder to have '{DISABLED}' on the end of the name." = "Uno o più dei tuoi plugin non ha ancora il supporto per Python 3.x. Per favore guarda la lista '{PLUGINS}' nella tab a '{FILE}' > '{SETTINGS}'. Dovresti controllare se ci sono aggiornamenti, altrimenti avvisa gli sviluppatori che devono aggiornare il codice a Python 3.x.\n\nPuoi disabilitare il plugin rinominando la cartella aggiungendo '{DISABLED}' alla fine del nome.";
/* EDMarketConnector.py: Popup-text about missing FDEVID Files; In files: EDMarketConnector.py:2329; */
"FDevID Files not found! Some functionality regarding commodities may be disabled.\r\n\r\n Do you want to open the Wiki page on how to set up submodules?" = "File FDevID non trovati! Alcune funzionalità relative alle commodities potrebbero essere disabilitate.\n\n Vuoi aprire la pagina Wiki su come impostare i sottomoduli?";
/* EDMarketConnector.py: Popup window title for missing FDEVID files; In files: EDMarketConnector.py:2340; */
"FDevIDs: Missing Commodity Files" = "FDevID: file delle Commodity mancanti";
/* EDMarketConnector.py: Settings > Plugins tab; prefs.py: Label on Settings > Plugins tab; In files: EDMarketConnector.py:2263; prefs.py:986; */
"Plugins" = "Plugins";
/* EDMarketConnector.py: Popup window title for list of 'enabled' plugins that don't work with Python 3.x; In files: EDMarketConnector.py:2274; */
"EDMC: Plugins Without Python 3.x Support" = "EDMC: Plugins senza Supporto Python 3.x";
/* EDMarketConnector.py: Popup window title for list of 'broken' plugins that failed to load; In files: EDMarketConnector.py:2285; */
"EDMC: Broken Plugins" = "EDMC: plugin non funzionanti";
/* EDMarketConnector.py: Popup-text about 'broken' plugins that failed to load; In files: EDMarketConnector.py:2266; */
"One or more of your enabled plugins failed to load. Please see the list on the '{PLUGINS}' tab of '{FILE}' > '{SETTINGS}'. This could be caused by a wrong folder structure. The load.py file should be located under plugins/PLUGIN_NAME/load.py.\r\n\r\nYou can disable a plugin by renaming its folder to have '{DISABLED}' on the end of the name." = "Impossibile caricare uno o più plugin abilitati. Consulta l'elenco nella scheda '{PLUGINS}' di '{FILE}' > '{SETTINGS}'. Ciò potrebbe essere causato da un'errata struttura delle cartelle. Il file load.py dovrebbe trovarsi in plugins/PLUGIN_NAME/load.py.\n\nPuoi disabilitare un plugin rinominando la sua cartella in modo che abbia '{DISABLED}' alla fine del nome.";
/* journal_lock.py: Title text on popup when Journal directory already locked; In files: journal_lock.py:208; */
"Journal directory already locked" = "cartella Journal già bloccata";
@ -463,6 +483,9 @@
/* prefs.py: Plugins - Label on URL to documentation about migrating plugins from Python 2.7; In files: prefs.py:962; */
"Information on migrating plugins" = "Informazioni sulla migrazione dei plugins";
/* prefs.py: Plugins - Label for list of 'broken' plugins that failed to load; In files: prefs.py:1039; */
"Broken Plugins" = "Plugin non funzionanti";
/* prefs.py: Lable on list of user-disabled plugins; In files: prefs.py:977; */
"Disabled Plugins" = "Plugin disabilitati";

View File

@ -213,12 +213,24 @@
/* EDMarketConnector.py: Popup-text about 'active' plugins without Python 3.x support; In files: EDMarketConnector.py:2253:2259; */
"One or more of your enabled plugins do not yet have support for Python 3.x. Please see the list on the '{PLUGINS}' tab of '{FILE}' > '{SETTINGS}'. You should check if there is an updated version available, else alert the developer that they need to update the code for Python 3.x.\r\n\r\nYou can disable a plugin by renaming its folder to have '{DISABLED}' on the end of the name." = "Jedan ili više aktiviranih dodataka (plugins) nemaju podršku za Python 3.x. Pogledajte listu u '{PLUGINS}' tabu u '{FILE}' > '{SETTINGS}'. Proverite da li postoji nadograđena verzija ili obavesite autora da treba da promeni kod za Python 3.x.\n\nMožete deaktivirati dodatak (plugin) dodavanjem '{DISABLED}' na kraju imena njegovog foldera.";
/* EDMarketConnector.py: Popup-text about missing FDEVID Files; In files: EDMarketConnector.py:2329; */
"FDevID Files not found! Some functionality regarding commodities may be disabled.\r\n\r\n Do you want to open the Wiki page on how to set up submodules?" = "FDevID fajlovi nisu pronađeni! Neke funkcionalnosti vezane za artikle će možda biti deaktivirane.\n\nDa li želite da otvorite Wiki stranu koja objašnjava kako da podesite pod-module?";
/* EDMarketConnector.py: Popup window title for missing FDEVID files; In files: EDMarketConnector.py:2340; */
"FDevIDs: Missing Commodity Files" = "FDevIDs: Nedostaju fajlovi za robu";
/* EDMarketConnector.py: Settings > Plugins tab; prefs.py: Label on Settings > Plugins tab; In files: EDMarketConnector.py:2263; prefs.py:986; */
"Plugins" = "Dodaci (plugins)";
/* EDMarketConnector.py: Popup window title for list of 'enabled' plugins that don't work with Python 3.x; In files: EDMarketConnector.py:2274; */
"EDMC: Plugins Without Python 3.x Support" = "EDMC: Dodaci (plugins) bez Python 3.x podrške";
/* EDMarketConnector.py: Popup window title for list of 'broken' plugins that failed to load; In files: EDMarketConnector.py:2285; */
"EDMC: Broken Plugins" = "EDMC: Pokvareni Pluginovi";
/* EDMarketConnector.py: Popup-text about 'broken' plugins that failed to load; In files: EDMarketConnector.py:2266; */
"One or more of your enabled plugins failed to load. Please see the list on the '{PLUGINS}' tab of '{FILE}' > '{SETTINGS}'. This could be caused by a wrong folder structure. The load.py file should be located under plugins/PLUGIN_NAME/load.py.\r\n\r\nYou can disable a plugin by renaming its folder to have '{DISABLED}' on the end of the name." = "Jedan ili više vaših aktivnih pluginova se nije učitao. Molimo pogledajte listu na '{PLUGINS}' tabu u okviru '{FILE}' > '{SETTINGS}'. Obo vi moglo da se desi zbog pogrešne strukture foldera. load.py fajl bi trebao da se nalazi unutar plugins/PLUGIN_NAME/load.py.\n\nPojedinačni plugin možete deaktivirati promenom imena njegovog foldera dodavanjem '{DISABLED}' na kraju.";
/* journal_lock.py: Title text on popup when Journal directory already locked; In files: journal_lock.py:208; */
"Journal directory already locked" = "Žurnal direktorijum je već zaključan";
@ -471,6 +483,9 @@
/* prefs.py: Plugins - Label on URL to documentation about migrating plugins from Python 2.7; In files: prefs.py:962; */
"Information on migrating plugins" = "Informacije o migraciji dodataka (plugins)";
/* prefs.py: Plugins - Label for list of 'broken' plugins that failed to load; In files: prefs.py:1039; */
"Broken Plugins" = "Pokvareni pluginovi";
/* prefs.py: Lable on list of user-disabled plugins; In files: prefs.py:977; */
"Disabled Plugins" = "Deaktivirani dodaci (plugins)";

View File

@ -67,6 +67,6 @@ Please see the [Acknowledgements](https://github.com/EDCD/EDMarketConnector/wiki
License
-------
Copyright © 2015-2019 Jonathan Harris, 2020-2021 EDCD
Copyright © 2015-2019 Jonathan Harris, 2020-2024 EDCD
Licensed under the [GNU Public License (GPL)](http://www.gnu.org/licenses/gpl-2.0.html) version 2 or later.

View File

@ -80,8 +80,8 @@ def generate_data_files(
"modules.json",
"ships.json",
"ships.p", # TODO: Remove in 6.0
f"{app_name}.VisualElementsManifest.xml",
f"{app_name}.ico",
f"resources/{appcmdname}.ico",
"EDMarketConnector - TRACE.bat",
"EDMarketConnector - localserver-auth.bat",
"EDMarketConnector - reset-ui.bat",
@ -165,15 +165,16 @@ def build() -> None:
"script": "EDMarketConnector.py",
"icon_resources": [(0, f"{appname}.ico")],
"other_resources": [
(24, 1, pathlib.Path(f"{appname}.manifest").read_text(encoding="UTF8"))
(24, 1, pathlib.Path(f"resources/{appname}.manifest").read_text(encoding="UTF8"))
],
}
console_config: dict = {
"dest_base": appcmdname,
"script": "EDMC.py",
"icon_resources": [(0, f"resources/{appcmdname}.ico")],
"other_resources": [
(24, 1, pathlib.Path(f"{appcmdname}.manifest").read_text(encoding="UTF8"))
(24, 1, pathlib.Path(f"resources/{appcmdname}.manifest").read_text(encoding="UTF8"))
],
}
@ -185,7 +186,8 @@ def build() -> None:
data_files=data_files,
options=options,
)
except FileNotFoundError:
except FileNotFoundError as err:
print(err)
sys.exit(
"Build Failed due to Missing Files! Have you set up your submodules? \n"
"https://github.com/EDCD/EDMarketConnector/wiki/Running-from-source"

View File

@ -54,10 +54,10 @@ appcmdname = 'EDMC'
# <https://semver.org/#semantic-versioning-specification-semver>
# Major.Minor.Patch(-prerelease)(+buildmetadata)
# NB: Do *not* import this, use the functions appversion() and appversion_nobuild()
_static_appversion = '5.10.1'
_static_appversion = '5.10.2'
_cached_version: semantic_version.Version | None = None
copyright = '© 2015-2019 Jonathan Harris, 2020-2023 EDCD'
copyright = '© 2015-2019 Jonathan Harris, 2020-2024 EDCD'
update_feed = 'https://raw.githubusercontent.com/EDCD/EDMarketConnector/releases/edmarketconnector.xml'
update_interval = 8*60*60 # 8 Hours

View File

@ -45,6 +45,9 @@ class CoriolisConfig:
self.normal_url = ''
self.beta_url = ''
self.override_mode = ''
self.override_text_old_auto = _('Auto') # LANG: Coriolis normal/beta selection - auto
self.override_text_old_normal = _('Normal') # LANG: Coriolis normal/beta selection - normal
self.override_text_old_beta = _('Beta') # LANG: Coriolis normal/beta selection - beta
self.normal_textvar = tk.StringVar()
self.beta_textvar = tk.StringVar()
@ -87,6 +90,11 @@ def plugin_prefs(parent: ttk.Notebook, cmdr: str | None, is_beta: bool) -> tk.Fr
PADY = 1 # noqa: N806
BOXY = 2 # noqa: N806 # box spacing
# Save the old text values for the override mode, so we can update them if the language is changed
coriolis_config.override_text_old_auto = _('Auto') # LANG: Coriolis normal/beta selection - auto
coriolis_config.override_text_old_normal = _('Normal') # LANG: Coriolis normal/beta selection - normal
coriolis_config.override_text_old_beta = _('Beta') # LANG: Coriolis normal/beta selection - beta
conf_frame = nb.Frame(parent)
conf_frame.columnconfigure(index=1, weight=1)
cur_row = 0
@ -157,6 +165,25 @@ def prefs_changed(cmdr: str | None, is_beta: bool) -> None:
_('Auto'): 'auto', # LANG: Coriolis normal/beta selection - auto
}.get(coriolis_config.override_mode, coriolis_config.override_mode)
# Check if the language was changed and the override_mode was valid before the change
if coriolis_config.override_mode not in ('beta', 'normal', 'auto'):
coriolis_config.override_mode = {
coriolis_config.override_text_old_normal: 'normal',
coriolis_config.override_text_old_beta: 'beta',
coriolis_config.override_text_old_auto: 'auto',
}.get(coriolis_config.override_mode, coriolis_config.override_mode)
# Language was seemingly changed, so we need to update the textvars
if coriolis_config.override_mode in ('beta', 'normal', 'auto'):
coriolis_config.override_textvar.set(
value={
'auto': _('Auto'), # LANG: 'Auto' label for Coriolis site override selection
'normal': _('Normal'), # LANG: 'Normal' label for Coriolis site override selection
'beta': _('Beta') # LANG: 'Beta' label for Coriolis site override selection
# LANG: 'Auto' label for Coriolis site override selection
}.get(coriolis_config.override_mode, _('Auto'))
)
# If the override mode is still invalid, default to auto
if coriolis_config.override_mode not in ('beta', 'normal', 'auto'):
logger.warning(f'Unexpected value {coriolis_config.override_mode=!r}. Defaulting to "auto"')
coriolis_config.override_mode = 'auto'

View File

@ -997,7 +997,18 @@ def journal_entry( # noqa: C901, CCR001
elif 'KillerName' in entry:
data['opponentName'] = entry['KillerName']
new_add_event('addCommanderCombatDeath', entry['timestamp'], data)
elif 'KillerShip' in entry:
data['opponentName'] = entry['KillerShip']
# Paranoia in case of e.g. Thargoid activity not having complete data
opponent_name_issue = 'opponentName' not in data or data['opponentName'] == ""
wing_opponent_names_issue = 'wingOpponentNames' not in data or data['wingOpponentNames'] == []
if opponent_name_issue and wing_opponent_names_issue:
logger.warning('Dropping addCommanderCombatDeath message'
'because opponentName and wingOpponentNames came out as ""')
else:
new_add_event('addCommanderCombatDeath', entry['timestamp'], data)
elif event_name == 'Interdicted':
data = OrderedDict([('starsystemName', system),
@ -1014,8 +1025,11 @@ def journal_entry( # noqa: C901, CCR001
elif 'Power' in entry:
data['opponentName'] = entry['Power']
elif 'IsThargoid' in entry and entry['IsThargoid']:
data['opponentName'] = 'Thargoid'
# Paranoia in case of e.g. Thargoid activity not having complete data
if data['opponentName'] == "":
if 'opponentName' not in data or data['opponentName'] == "":
logger.warning('Dropping addCommanderCombatInterdicted message because opponentName came out as ""')
else:
@ -1037,31 +1051,42 @@ def journal_entry( # noqa: C901, CCR001
elif 'Power' in entry:
data['opponentName'] = entry['Power']
# Shouldn't be needed here as Interdiction events can't target Thargoids (yet)
# but done just in case of future changes or so
elif 'IsThargoid' in entry and entry['IsThargoid']:
data['opponentName'] = 'Thargoid'
# Paranoia in case of e.g. Thargoid activity not having complete data
if data['opponentName'] == "":
if 'opponentName' not in data or data['opponentName'] == "":
logger.warning('Dropping addCommanderCombatInterdiction message because opponentName came out as ""')
else:
new_add_event('addCommanderCombatInterdiction', entry['timestamp'], data)
elif event_name == 'EscapeInterdiction':
data = OrderedDict([
('starsystemName', system),
('isPlayer', entry['IsPlayer']),
])
if 'Interdictor' in entry:
data['opponentName'] = entry['Interdictor']
elif 'Faction' in entry:
data['opponentName'] = entry['Faction']
elif 'Power' in entry:
data['opponentName'] = entry['Power']
elif 'isThargoid' in entry and entry['isThargoid']:
data['opponentName'] = 'Thargoid'
# Paranoia in case of e.g. Thargoid activity not having complete data
if entry.get('Interdictor') is None or entry['Interdictor'] == "":
logger.warning(
'Dropping addCommanderCombatInterdictionEscape message'
'because opponentName came out as ""'
)
if 'opponentName' not in data or data['opponentName'] == "":
logger.warning('Dropping addCommanderCombatInterdiction message because opponentName came out as ""')
else:
new_add_event(
'addCommanderCombatInterdictionEscape',
entry['timestamp'],
{
'starsystemName': system,
'opponentName': entry['Interdictor'],
'isPlayer': entry['IsPlayer'],
}
)
new_add_event('addCommanderCombatInterdictionEscape', entry['timestamp'], data)
elif event_name == 'PVPKill':
new_add_event(

View File

@ -5,30 +5,30 @@ wheel
# We can't rely on just picking this up from either the base (not venv),
# or venv-init-time version. Specify here so that dependabot will prod us
# about new versions.
setuptools==69.0.3
setuptools==69.1.1
# Static analysis tools
flake8==6.1.0
flake8==7.0.0
flake8-annotations-coverage==0.0.6
flake8-cognitive-complexity==0.1.0
flake8-comprehensions==3.14.0
flake8-docstrings==1.7.0
flake8-json==23.7.0
flake8-noqa==1.3.2
flake8-noqa==1.4.0
flake8-polyfill==1.0.2
flake8-use-fstring==1.4
mypy==1.8.0
pep8-naming==0.13.3
safety==2.3.5
types-requests==2.31.0.20231231
types-requests==2.31.0.20240125
types-pkg-resources==0.1.3
# Code formatting tools
autopep8==2.0.4
# Git pre-commit checking
pre-commit==3.6.0
pre-commit==3.6.2
# HTML changelogs
grip==4.6.2
@ -38,9 +38,9 @@ grip==4.6.2
py2exe==0.13.0.1; sys_platform == 'win32'
# Testing
pytest==7.4.3
pytest==8.0.2
pytest-cov==4.1.0 # Pytest code coverage support
coverage[toml]==7.3.4 # pytest-cov dep. This is here to ensure that it includes TOML support for pyproject.toml configs
coverage[toml]==7.4.1 # pytest-cov dep. This is here to ensure that it includes TOML support for pyproject.toml configs
coverage-conditional-plugin==0.9.0
# For manipulating folder permissions and the like.
pywin32==306; sys_platform == 'win32'

View File

@ -16,7 +16,7 @@ AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#SuppURL}
AppUpdatesURL={#SuppURL}
AppCopyright=Copyright (C) 2015-2019 Jonathan Harris, 2020-2023 EDCD
AppCopyright=Copyright (C) 2015-2019 Jonathan Harris, 2020-2024 EDCD
AllowUNCPath=no
AllowNetworkDrive=no
DefaultDirName={autopf}\{#MyAppName}

BIN
resources/edmc.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

View File

@ -291,7 +291,7 @@ if __name__ == '__main__':
print(f'NEW! {file}:{c.lineno}: {arg!r}')
for old in set(template) ^ seen:
print(f'No longer used: {old}')
print(f'No longer used: {old!r}')
elif args.json:
to_print_data = [