1
0
mirror of https://github.com/EDCD/EDMarketConnector.git synced 2025-06-06 18:33:13 +03:00

Merge branch 'releases' into stable

This commit is contained in:
Athanasius 2020-08-26 22:49:28 +01:00
commit 2a09874554
9 changed files with 129 additions and 54 deletions

View File

@ -1,6 +1,22 @@
This is the master changelog for Elite Dangerous Market Connector. Entries are in reverse chronological order (latest first). This is the master changelog for Elite Dangerous Market Connector. Entries are in reverse chronological order (latest first).
--- ---
Release 4.0.6
===
* Correct the three System Provider plugins to *not* show the *next* system
in a plotted route instead of the current system.
Release 4.0.5
===
* Built using Python 3.7.9.
* Fix EDSM plugin so the System provider actually updates the URLs for
jumps to new systems.
In general this cleans up the code for all three System and Station Providers;
EDDB, EDSM, Inara.
Release 4.0.4 Release 4.0.4
=== ===

View File

@ -949,9 +949,26 @@ if __name__ == "__main__":
def messagebox_not_py3(): def messagebox_not_py3():
plugins_not_py3_last = config.getint('plugins_not_py3_last') or 0 plugins_not_py3_last = config.getint('plugins_not_py3_last') or 0
if (plugins_not_py3_last + 86400) < int(time()) and len(plug.PLUGINS_not_py3): if (plugins_not_py3_last + 86400) < int(time()) and len(plug.PLUGINS_not_py3):
# Yes, this is horribly hacky so as to be sure we match the key
# that we told Translators to use.
popup_text = "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."
popup_text = popup_text.replace('\n', '\\n')
popup_text = popup_text.replace('\r', '\\r')
# Now the string should match, so try translation
popup_text = _(popup_text)
# And substitute in the other words.
popup_text = popup_text.format(PLUGINS=_('Plugins'), FILE=_('File'), SETTINGS=_('Settings'), DISABLED='.disabled')
# 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( tk.messagebox.showinfo(
_('EDMC: Plugins Without Python 3.x Support'), _('EDMC: Plugins Without Python 3.x Support'),
_("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.".format(PLUGINS=_('Plugins'), FILE=_('File'), SETTINGS=_('Settings'), DISABLED='.disabled')) popup_text
) )
config.set('plugins_not_py3_last', int(time())) config.set('plugins_not_py3_last', int(time()))

View File

@ -490,6 +490,9 @@
/* Update button in main window. [EDMarketConnector.py] */ /* Update button in main window. [EDMarketConnector.py] */
"Update" = "Actualizar"; "Update" = "Actualizar";
/* Option to use alternate URL method on shipyard links [prefs.py] */
"Use alternate URL method" = "Usar método URL alternativo.";
/* Status dialog subtitle - CR value of ship. [stats.py] */ /* Status dialog subtitle - CR value of ship. [stats.py] */
"Value" = "Valor"; "Value" = "Valor";

View File

@ -13,7 +13,7 @@ appcmdname = 'EDMC'
# appversion **MUST** follow Semantic Versioning rules: # appversion **MUST** follow Semantic Versioning rules:
# <https://semver.org/#semantic-versioning-specification-semver> # <https://semver.org/#semantic-versioning-specification-semver>
# Major.Minor.Patch(-prerelease)(+buildmetadata) # Major.Minor.Patch(-prerelease)(+buildmetadata)
appversion = '4.0.4' #-rc1+a872b5f' appversion = '4.0.6' #-rc1+a872b5f'
# For some things we want appversion without (possible) +build metadata # For some things we want appversion without (possible) +build metadata
appversion_nobuild = str(semantic_version.Version(appversion).truncate('prerelease')) appversion_nobuild = str(semantic_version.Version(appversion).truncate('prerelease'))
copyright = u'© 2015-2019 Jonathan Harris, 2020 EDCD' copyright = u'© 2015-2019 Jonathan Harris, 2020 EDCD'

View File

@ -32,7 +32,7 @@ You will need several pieces of software installed, or the files from their
"Windows Software Development Kit - Windows 10.0.18362.1" in "Windows Software Development Kit - Windows 10.0.18362.1" in
"Apps & Features", *not* "Windows SDK AddOn". "Apps & Features", *not* "Windows SDK AddOn".
1. [Python](https://python.org): 32-bit version of Python 3.7 for Windows. 1. [Python](https://python.org): 32-bit version of Python 3.7 for Windows.
[v3.7.7](https://www.python.org/downloads/release/python-377/) is the most [v3.7.9](https://www.python.org/downloads/release/python-379/) is the most
recently tested version. You need the `Windows x86 executable installer` recently tested version. You need the `Windows x86 executable installer`
file, for the 32-bit version. file, for the 32-bit version.
1. [py2exe](https://github.com/albertosottile/py2exe): 1. [py2exe](https://github.com/albertosottile/py2exe):

View File

@ -168,11 +168,26 @@
<!-- Windows --> <!-- Windows -->
<item> <item>
<title>Release 4.0.4</title> <title>Release 4.0.6</title>
<description> <description>
<![CDATA[ <![CDATA[
<style>body { font-family:"Segoe UI","Tahoma"; font-size: 75%; } h2 { font-family:"Segoe UI","Tahoma"; font-size: 105%; }</style> <style>body { font-family:"Segoe UI","Tahoma"; font-size: 75%; } h2 { font-family:"Segoe UI","Tahoma"; font-size: 105%; }</style>
<h2>Release 4.0.6</h2>
<ul>
<li>Correct the three System Provider plugins to <em>not</em> show the <em>next</em> system
in a plotted route instead of the current system.</li>
</ul>
<h2>Release 4.0.5</h2>
<ul>
<li>Built using Python 3.7.9.</li>
<li>Fix EDSM plugin so the System provider actually updates the URLs for
jumps to new systems.</li>
</ul>
<p>In general this cleans up the code for all three System and Station Providers;
EDDB, EDSM, Inara.</p>
<h2>Release 4.0.4</h2> <h2>Release 4.0.4</h2>
<ul> <ul>
<li> <li>
@ -603,11 +618,11 @@ If any of your plugins are listed in that section then they will need updating,
]]> ]]>
</description> </description>
<enclosure <enclosure
url="https://github.com/EDCD/EDMarketConnector/releases/download/Release/4.0.4/EDMarketConnector_win_4.0.4.msi" url="https://github.com/EDCD/EDMarketConnector/releases/download/Release/4.0.6/EDMarketConnector_win_4.0.6.msi"
sparkle:os="windows" sparkle:os="windows"
sparkle:installerArguments="/passive LAUNCH=yes" sparkle:installerArguments="/passive LAUNCH=yes"
sparkle:version="4.0.4" sparkle:version="4.0.6"
length="11419648" length="11317248"
type="application/octet-stream" type="application/octet-stream"
/> />
</item> </item>

View File

@ -46,16 +46,17 @@ this.station_marketid = None
def system_url(system_name: str) -> str: def system_url(system_name: str) -> str:
if this.system_address: if this.system_address:
return requests.utils.requote_uri(f'https://eddb.io/system/ed-address/{this.system_address}') return requests.utils.requote_uri(f'https://eddb.io/system/ed-address/{this.system_address}')
elif system_name:
if system_name:
return requests.utils.requote_uri(f'https://eddb.io/system/name/{system_name}') return requests.utils.requote_uri(f'https://eddb.io/system/name/{system_name}')
else:
return '' return ''
def station_url(system_name: str, station_name: str) -> str: def station_url(system_name: str, station_name: str) -> str:
if this.station_marketid: if this.station_marketid:
return requests.utils.requote_uri(f'https://eddb.io/station/market-id/{this.station_marketid}') return requests.utils.requote_uri(f'https://eddb.io/station/market-id/{this.station_marketid}')
else:
return system_url('') return system_url(system_name)
def plugin_start3(plugin_dir): def plugin_start3(plugin_dir):
return 'eddb' return 'eddb'
@ -70,15 +71,15 @@ def plugin_app(parent):
this.station_link.configure(popup_copy = lambda x: x != STATION_UNDOCKED) this.station_link.configure(popup_copy = lambda x: x != STATION_UNDOCKED)
def prefs_changed(cmdr, is_beta): def prefs_changed(cmdr, is_beta):
# Override standard URL functions # Do *NOT* set 'url' here, as it's set to a function that will call
if config.get('system_provider') == 'eddb': # through correctly. We don't want a static string.
this.system_link['url'] = system_url(this.system) pass
if config.get('station_provider') == 'eddb':
this.station_link['url'] = station_url(this.system, this.station)
def journal_entry(cmdr, is_beta, system, station, entry, state): def journal_entry(cmdr, is_beta, system, station, entry, state):
# Always update, even if we're not the *current* system or station provider. # Always update our system address even if we're not currently the provider for system or station, but dont update
# on events that contain "future" data, such as FSDTarget
if entry['event'] in ('Location', 'Docked', 'CarrierJump', 'FSDJump'):
this.system_address = entry.get('SystemAddress') or this.system_address this.system_address = entry.get('SystemAddress') or this.system_address
this.system = entry.get('StarSystem') or this.system this.system = entry.get('StarSystem') or this.system
@ -98,13 +99,15 @@ def journal_entry(cmdr, is_beta, system, station, entry, state):
# Only actually change URLs if we are current provider. # Only actually change URLs if we are current provider.
if config.get('system_provider') == 'eddb': if config.get('system_provider') == 'eddb':
this.system_link['text'] = this.system this.system_link['text'] = this.system
this.system_link['url'] = system_url(this.system) # Override standard URL function # Do *NOT* set 'url' here, as it's set to a function that will call
# through correctly. We don't want a static string.
this.system_link.update_idletasks() this.system_link.update_idletasks()
# But only actually change the URL if we are current station provider. # But only actually change the URL if we are current station provider.
if config.get('station_provider') == 'eddb': if config.get('station_provider') == 'eddb':
this.station_link['text'] = this.station or (this.system_population and this.system_population > 0 and STATION_UNDOCKED or '') this.station_link['text'] = this.station or (this.system_population and this.system_population > 0 and STATION_UNDOCKED or '')
this.station_link['url'] = station_url(this.system, this.station) # Override standard URL function # Do *NOT* set 'url' here, as it's set to a function that will call
# through correctly. We don't want a static string.
this.station_link.update_idletasks() this.station_link.update_idletasks()
@ -119,7 +122,8 @@ def cmdr_data(data, is_beta):
# Override standard URL functions # Override standard URL functions
if config.get('system_provider') == 'eddb': if config.get('system_provider') == 'eddb':
this.system_link['text'] = this.system this.system_link['text'] = this.system
this.system_link['url'] = system_url(this.system) # Do *NOT* set 'url' here, as it's set to a function that will call
# through correctly. We don't want a static string.
this.system_link.update_idletasks() this.system_link.update_idletasks()
if config.get('station_provider') == 'eddb': if config.get('station_provider') == 'eddb':
if data['commander']['docked']: if data['commander']['docked']:
@ -129,6 +133,7 @@ def cmdr_data(data, is_beta):
else: else:
this.station_link['text'] = '' this.station_link['text'] = ''
this.station_link['url'] = station_url(this.system, this.station) # Do *NOT* set 'url' here, as it's set to a function that will call
# through correctly. We don't want a static string.
this.station_link.update_idletasks() this.station_link.update_idletasks()

View File

@ -14,8 +14,6 @@
import json import json
import requests import requests
import sys import sys
import time
import urllib.request, urllib.error, urllib.parse
from queue import Queue from queue import Queue
from threading import Thread from threading import Thread
@ -59,14 +57,26 @@ STATION_UNDOCKED: str = '×' # "Station" name to display when not docked = U+00
# Main window clicks # Main window clicks
def system_url(system_name): def system_url(system_name):
return 'https://www.edsm.net/en/system?systemName=%s' % urllib.parse.quote(system_name) if this.system_address:
return requests.utils.requote_uri(f'https://www.edsm.net/en/system?systemID64={this.system_address}')
if system_name:
return requests.utils.requote_uri(f'https://www.edsm.net/en/system?systemName={system_name}')
return ''
def station_url(system_name, station_name): def station_url(system_name, station_name):
if station_name: if system_name and station_name:
return 'https://www.edsm.net/en/system?systemName=%s&stationName=%s' % (urllib.parse.quote(system_name), urllib.parse.quote(station_name)) return requests.utils.requote_uri(f'https://www.edsm.net/en/system?systemName={system_name}&stationName={station_name}')
else:
return 'https://www.edsm.net/en/system?systemName=%s&stationName=ALL' % urllib.parse.quote(system_name)
# monitor state might think these are gone, but we don't yet
if this.system and this.station:
return requests.utils.requote_uri(f'https://www.edsm.net/en/system?systemName={this.system}&stationName={this.station}')
if system_name:
return requests.utils.requote_uri(f'https://www.edsm.net/en/system?systemName={system_name}&stationName=ALL')
return ''
def plugin_start3(plugin_dir): def plugin_start3(plugin_dir):
# Can't be earlier since can only call PhotoImage after window is created # Can't be earlier since can only call PhotoImage after window is created
@ -207,7 +217,9 @@ def credentials(cmdr):
def journal_entry(cmdr, is_beta, system, station, entry, state): def journal_entry(cmdr, is_beta, system, station, entry, state):
# Always update, even if we're not the *current* system or station provider. # Always update our system address even if we're not currently the provider for system or station, but dont update
# on events that contain "future" data, such as FSDTarget
if entry['event'] in ('Location', 'Docked', 'CarrierJump', 'FSDJump'):
this.system_address = entry.get('SystemAddress') or this.system_address this.system_address = entry.get('SystemAddress') or this.system_address
this.system = entry.get('StarSystem') or this.system this.system = entry.get('StarSystem') or this.system
@ -294,9 +306,10 @@ def cmdr_data(data, is_beta):
this.station = this.station or data['commander']['docked'] and data['lastStarport']['name'] this.station = this.station or data['commander']['docked'] and data['lastStarport']['name']
# TODO: Fire off the EDSM API call to trigger the callback for the icons # TODO: Fire off the EDSM API call to trigger the callback for the icons
if config.get('station_provider') == 'EDSM': if config.get('system_provider') == 'EDSM':
this.system_link['text'] = this.system this.system_link['text'] = this.system
this.system_link['url'] = system_url(this.system) # Do *NOT* set 'url' here, as it's set to a function that will call
# through correctly. We don't want a static string.
this.system_link.update_idletasks() this.system_link.update_idletasks()
if config.get('station_provider') == 'EDSM': if config.get('station_provider') == 'EDSM':
if data['commander']['docked']: if data['commander']['docked']:
@ -306,7 +319,8 @@ def cmdr_data(data, is_beta):
else: else:
this.station_link['text'] = '' this.station_link['text'] = ''
this.station_link['url'] = station_url(this.system, this.station) # Do *NOT* set 'url' here, as it's set to a function that will call
# through correctly. We don't want a static string.
this.station_link.update_idletasks() this.station_link.update_idletasks()

View File

@ -73,15 +73,20 @@ def system_url(system_name):
elif system_name: elif system_name:
return requests.utils.requote_uri(f'https://inara.cz/galaxy-starsystem/?search={system_name}') return requests.utils.requote_uri(f'https://inara.cz/galaxy-starsystem/?search={system_name}')
return this.system return ''
def station_url(system_name, station_name): def station_url(system_name, station_name):
if system_name: if system_name and station_name:
if station_name:
return requests.utils.requote_uri(f'https://inara.cz/galaxy-station/?search={system_name}%20[{station_name}]') return requests.utils.requote_uri(f'https://inara.cz/galaxy-station/?search={system_name}%20[{station_name}]')
# monitor state might think these are gone, but we don't yet
if this.system and this.station:
return requests.utils.requote_uri(f'https://inara.cz/galaxy-station/?search={this.system}%20[{this.station}]')
if system_name:
return system_url(system_name) return system_url(system_name)
return this.station or this.system return ''
def plugin_start3(plugin_dir): def plugin_start3(plugin_dir):
@ -155,12 +160,6 @@ def prefs_changed(cmdr, is_beta):
changed = config.getint('inara_out') != this.log.get() changed = config.getint('inara_out') != this.log.get()
config.set('inara_out', this.log.get()) config.set('inara_out', this.log.get())
# Override standard URL functions
if config.get('system_provider') == 'Inara':
this.system_link['url'] = system_url(this.system)
if config.get('station_provider') == 'Inara':
this.station_link['url'] = station_url(this.system, this.station)
if cmdr and not is_beta: if cmdr and not is_beta:
this.cmdr = cmdr this.cmdr = cmdr
this.FID = None this.FID = None
@ -232,7 +231,9 @@ def journal_entry(cmdr, is_beta, system, station, entry, state):
elif entry['event'] in ['ShipyardNew', 'ShipyardSwap'] or (entry['event'] == 'Location' and entry['Docked']): elif entry['event'] in ['ShipyardNew', 'ShipyardSwap'] or (entry['event'] == 'Location' and entry['Docked']):
this.suppress_docked = True this.suppress_docked = True
# Always update, even if we're not the *current* system or station provider. # Always update our system address even if we're not currently the provider for system or station, but dont update
# on events that contain "future" data, such as FSDTarget
if entry['event'] in ('Location', 'Docked', 'CarrierJump', 'FSDJump'):
this.system_address = entry.get('SystemAddress') or this.system_address this.system_address = entry.get('SystemAddress') or this.system_address
this.system = entry.get('StarSystem') or this.system this.system = entry.get('StarSystem') or this.system
@ -752,12 +753,14 @@ def journal_entry(cmdr, is_beta, system, station, entry, state):
# Only actually change URLs if we are current provider. # Only actually change URLs if we are current provider.
if config.get('system_provider') == 'Inara': if config.get('system_provider') == 'Inara':
this.system_link['text'] = this.system this.system_link['text'] = this.system
this.system_link['url'] = system_url(this.system) # Do *NOT* set 'url' here, as it's set to a function that will call
# through correctly. We don't want a static string.
this.system_link.update_idletasks() this.system_link.update_idletasks()
if config.get('station_provider') == 'Inara': if config.get('station_provider') == 'Inara':
this.station_link['text'] = this.station or (this.system_population and this.system_population > 0 and STATION_UNDOCKED or '') this.station_link['text'] = this.station or (this.system_population and this.system_population > 0 and STATION_UNDOCKED or '')
this.station_link['url'] = station_url(this.system, this.station) # Do *NOT* set 'url' here, as it's set to a function that will call
# through correctly. We don't want a static string.
this.station_link.update_idletasks() this.station_link.update_idletasks()
def cmdr_data(data, is_beta): def cmdr_data(data, is_beta):
@ -773,7 +776,8 @@ def cmdr_data(data, is_beta):
# Override standard URL functions # Override standard URL functions
if config.get('system_provider') == 'Inara': if config.get('system_provider') == 'Inara':
this.system_link['text'] = this.system this.system_link['text'] = this.system
this.system_link['url'] = system_url(this.system) # Do *NOT* set 'url' here, as it's set to a function that will call
# through correctly. We don't want a static string.
this.system_link.update_idletasks() this.system_link.update_idletasks()
if config.get('station_provider') == 'Inara': if config.get('station_provider') == 'Inara':
if data['commander']['docked']: if data['commander']['docked']:
@ -783,7 +787,8 @@ def cmdr_data(data, is_beta):
else: else:
this.station_link['text'] = '' this.station_link['text'] = ''
this.station_link['url'] = station_url(this.system, this.station) # Do *NOT* set 'url' here, as it's set to a function that will call
# through correctly. We don't want a static string.
this.station_link.update_idletasks() this.station_link.update_idletasks()
if config.getint('inara_out') and not is_beta and not this.multicrew and credentials(this.cmdr): if config.getint('inara_out') and not is_beta and not this.multicrew and credentials(this.cmdr):