From ddadaf36f2b47d851cd8bbec1ed15b6e04d4b0ab Mon Sep 17 00:00:00 2001 From: Athanasius Date: Fri, 17 Jul 2020 18:27:38 +0100 Subject: [PATCH 01/14] Update PLUGINS.md Adds missing blank line that caused acciental underline/heading --- PLUGINS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/PLUGINS.md b/PLUGINS.md index d6a214b9..9f7bf42a 100644 --- a/PLUGINS.md +++ b/PLUGINS.md @@ -363,6 +363,7 @@ If the player has chosen to "Send flight log and Cmdr status to Inara" this gets called when the player starts the game, enters a new system, docks or undocks. It is called some time after the corresponding `journal_entry()` event. + --- ```python def inara_notify_ship(eventData): From d18c53e82b244b5781449fca549fae2a1fe26116 Mon Sep 17 00:00:00 2001 From: Athanasius Date: Thu, 23 Jul 2020 15:35:54 +0100 Subject: [PATCH 02/14] Translations: Add 'Use alternate URL method' to phrases --- L10n/en.template | 3 +++ 1 file changed, 3 insertions(+) diff --git a/L10n/en.template b/L10n/en.template index fdfef11d..132df0d5 100644 --- a/L10n/en.template +++ b/L10n/en.template @@ -490,6 +490,9 @@ /* Update button in main window. [EDMarketConnector.py] */ "Update" = "Update"; +/* Option to use alternate URL method on shipyard links [prefs.py] */ +"Use alternate URL method" = "Use alternate URL method"; + /* Status dialog subtitle - CR value of ship. [stats.py] */ "Value" = "Value"; From b9075f11596da0e414f588c12acc5401dec982a3 Mon Sep 17 00:00:00 2001 From: Athanasius Date: Tue, 14 Jul 2020 19:15:57 +0100 Subject: [PATCH 03/14] Change \xd7 character to a normal 'x' so that 3.46 EDMC.exe finds newer versions. --- edmarketconnector.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/edmarketconnector.xml b/edmarketconnector.xml index 81d0b356..3f14366a 100644 --- a/edmarketconnector.xml +++ b/edmarketconnector.xml @@ -333,12 +333,12 @@ station on eddb.io. This removes the need for stations.p. That file will be removed in a future version, plugin authors should not be relying on its presence.

NB: It's now using the system's "Population" data from Journal messages to -determine if the system has stations or not. This allows for the × as +determine if the system has stations or not. This allows for the x as station name to be clickable to open the eddb.io page for system when you're not docked. It's known that some systems with stations have a Population of "0" and thus won't allow this functionality. This is Frontier's issue, not EDMC's. If you logged out in a populated system, run EDMC afresh, and use -the 'Update' button you won't see the × until you login fully to the game.

+the 'Update' button you won't see the x until you login fully to the game.

  • Tweak to Inara plugin so it will send updates via the Inara API more From 68fb18310d24ccb3c6560a6d55917f0f20b45886 Mon Sep 17 00:00:00 2001 From: A_D Date: Mon, 27 Jul 2020 18:55:59 +0200 Subject: [PATCH 04/14] Dont crash when journal_dir is None Ensures that journal_dir is always at least an empty string. Fixes #639 --- monitor.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/monitor.py b/monitor.py index eb63e83c..ac7e8d10 100644 --- a/monitor.py +++ b/monitor.py @@ -118,9 +118,14 @@ class EDLogs(FileSystemEventHandler): def start(self, root): self.root = root - logdir = expanduser(config.get('journaldir') or config.default_journal_dir) # type: ignore # config is weird + journal_dir = config.get('journaldir') or config.default_journal_dir - if not logdir or not isdir(logdir): # type: ignore # config does weird things in its get + if journal_dir is None: + journal_dir = '' + + logdir = expanduser(journal_dir) # type: ignore # config is weird + + if not logdir or not isdir(logdir): self.stop() return False From cf6eec328976eca14d03c723864a1f001c04e6a1 Mon Sep 17 00:00:00 2001 From: Athanasius Date: Sun, 2 Aug 2020 19:31:20 +0100 Subject: [PATCH 05/14] Removed keyring dependency This remove all dependencies on the keyring lib, updates the requirements.txt to reflect that, and ensures that setup.py does not attempt to package it. Any use of the "old" keyring code will now return None and warn about its deprecation. --- config.py | 19 ++++--------------- requirements.txt | 3 +-- setup.py | 2 -- 3 files changed, 5 insertions(+), 19 deletions(-) diff --git a/config.py b/config.py index f6ad1acf..b0b887ec 100644 --- a/config.py +++ b/config.py @@ -1,5 +1,6 @@ import numbers import sys +import warnings from os import getenv, makedirs, mkdir, pardir from os.path import expanduser, dirname, exists, isdir, join, normpath from sys import platform @@ -367,25 +368,13 @@ class Config(object): # Common def get_password(self, account): - try: - import keyring - return keyring.get_password(self.identifier, account) - except ImportError: - return None + warnings.warn("password subsystem is no longer supported", DeprecationWarning) def set_password(self, account, password): - try: - import keyring - keyring.set_password(self.identifier, account, password) - except ImportError: - pass + warnings.warn("password subsystem is no longer supported", DeprecationWarning) def delete_password(self, account): - try: - import keyring - keyring.delete_password(self.identifier, account) - except: - pass # don't care - silently fail + warnings.warn("password subsystem is no longer supported", DeprecationWarning) # singleton config = Config() diff --git a/requirements.txt b/requirements.txt index 2327e183..4887f10a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,4 @@ certifi==2019.9.11 -keyring==19.2.0 -pathtools>=0.1.2 requests>=2.11.1 watchdog>=0.8.3 +semantic-version>=2.8.5 diff --git a/setup.py b/setup.py index be40d655..6bf35f8e 100755 --- a/setup.py +++ b/setup.py @@ -73,7 +73,6 @@ if sys.platform=='darwin': 'optimize': 2, 'packages': [ 'requests', - 'keyring.backends', 'sqlite3', # Included for plugins ], 'includes': [ @@ -119,7 +118,6 @@ elif sys.platform=='win32': 'optimize': 2, 'packages': [ 'requests', - 'keyring.backends', 'sqlite3', # Included for plugins ], 'includes': [ From ffd0079e16cf0f5bcc95007d03b4dbaff668844b Mon Sep 17 00:00:00 2001 From: Athanasius Date: Thu, 30 Jul 2020 14:05:09 +0100 Subject: [PATCH 06/14] PLUGINS.md: Logging is being added, how to prepare * Currently you use `print(...)` * `logging` support is coming, here's how to prepare. --- PLUGINS.md | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/PLUGINS.md b/PLUGINS.md index 9f7bf42a..02daa688 100644 --- a/PLUGINS.md +++ b/PLUGINS.md @@ -55,6 +55,72 @@ import myNotebook as nb ``` For creating UI elements. +--- +### Logging +Currently (still in 4.0.3) the only way to provide any logged output from a +plugin is to use `print(...)` statements. When running the application from +the packaged executeable all output is redirected to a log file. See +[Reporting a problem](https://github.com/EDCD/EDMarketConnector/wiki/Troubleshooting#reporting-a-problem) +for the location of this log file. + +A future version of EDMC will implement proper logging using the Python +`logging` module. Plugin developers should get their code ready for this by +using the following code instead of simple `print(...)' statements + +Insert this at the top-level of your load.py file (so not inside +`plugin_start3()`): +```python +import logging + +from config import appname + +# This could also be returned from plugin_start3() +plugin_name = os.path.basename(os.path.dirname(__file__)) + +# A Logger is used per 'found' plugin to make it easy to include the plugin's +# folder name in the logging output format. +logger = logging.getLogger(f'{appname}.{plugin_name}') + +# If the Logger has handlers then it was already set up by the core code, else +# it needs setting up here. +if not logger.hasHandlers(): + level = logging.INFO # So logger.info(...) is equivalent to print() + + logger.setLevel(level) + logger_channel = logging.StreamHandler() + logger_channel.setLevel(level) + logger_formatter = logging.Formatter(f'%(asctime)s - %(name)s - %(levelname)s - %(module)s:%(lineno)d:%(funcName)s: %(message)s') + logger_formatter.default_time_format = '%Y-%m-%d %H:%M:%S' + logger_formatter.default_msec_format = '%s.%03d' + logger_channel.setFormatter(logger_formatter) + logger.addHandler(logger_channel) +``` + +Then replace `print(...)` statements with one of the following: +```python + logger.info('some info message') # instead of print(...) + + logger.debug('something only for debug') + + logger.warning('Something needs warning about') + + logger.error('Some error happened') + + logger.critical('Something went wrong in a critical manner') + + try: + ... + catch Exception: + # This logs at 'ERROR' level. + # Also automatically includes exception information. + logger.exception('An exception occurred') + + try: + ... + catch Exception as e: + logger.debug('Exception we only note in debug output', exc_info=e) +``` + --- ### Startup From 0d55e4f6c90498e102ce890a9acad1e44dfa7e29 Mon Sep 17 00:00:00 2001 From: Athanasius Date: Thu, 30 Jul 2020 14:17:14 +0100 Subject: [PATCH 07/14] PLUGINS.md: Fix typo ' -> ` --- PLUGINS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PLUGINS.md b/PLUGINS.md index 02daa688..d574620b 100644 --- a/PLUGINS.md +++ b/PLUGINS.md @@ -65,7 +65,7 @@ for the location of this log file. A future version of EDMC will implement proper logging using the Python `logging` module. Plugin developers should get their code ready for this by -using the following code instead of simple `print(...)' statements +using the following code instead of simple `print(...)` statements Insert this at the top-level of your load.py file (so not inside `plugin_start3()`): From ba09cfd8aaff870466e4d3cabbfb66e141b3f7a8 Mon Sep 17 00:00:00 2001 From: Athanasius Date: Thu, 30 Jul 2020 14:32:12 +0100 Subject: [PATCH 08/14] PLUGINS.md: except not catch --- PLUGINS.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PLUGINS.md b/PLUGINS.md index d574620b..8a43bf6f 100644 --- a/PLUGINS.md +++ b/PLUGINS.md @@ -110,14 +110,14 @@ Then replace `print(...)` statements with one of the following: try: ... - catch Exception: + except Exception: # This logs at 'ERROR' level. # Also automatically includes exception information. logger.exception('An exception occurred') try: ... - catch Exception as e: + except Exception as e: logger.debug('Exception we only note in debug output', exc_info=e) ``` From 513e21a06e0df2e0187515c2f12da35cee2a5e87 Mon Sep 17 00:00:00 2001 From: Athanasius Date: Sun, 2 Aug 2020 18:24:24 +0100 Subject: [PATCH 09/14] Inara timer fix. I had to pull a diff out of the old branch, apply it, and reverse things like the addition of logging. This needs to be the minimum change for the fix. Tested with a quick login, then spamming market buy/sell orders. They were correctly queued and then sent after 30s since previous API calls. --- plugins/inara.py | 94 +++++++++++++++++++++++++++--------------------- 1 file changed, 53 insertions(+), 41 deletions(-) diff --git a/plugins/inara.py b/plugins/inara.py index dcfd5c70..da71d0a0 100644 --- a/plugins/inara.py +++ b/plugins/inara.py @@ -21,7 +21,6 @@ import plug if __debug__: from traceback import print_exc - _TIMEOUT = 20 FAKE = ['CQC', 'Training', 'Destination'] # Fake systems that shouldn't be sent to Inara CREDIT_RATIO = 1.05 # Update credits if they change by 5% over the course of a session @@ -50,8 +49,11 @@ this.loadout = None this.fleet = None this.shipswap = False # just swapped ship -this.last_update_time = time.time() # last time we updated (set to now because we're going to update quickly) -FLOOD_LIMIT_SECONDS = 45 # minimum time between sending non-major cargo triggered messages +# last time we updated, if unset in config this is 0, which means an instant update +LAST_UPDATE_CONF_KEY = 'inara_last_update' +# this.last_update_time = config.getint(LAST_UPDATE_CONF_KEY) +FLOOD_LIMIT_SECONDS = 30 # minimum time between sending events +this.timer_run = True # Main window clicks @@ -86,6 +88,10 @@ def plugin_start3(plugin_dir): this.thread = Thread(target = worker, name = 'Inara worker') this.thread.daemon = True this.thread.start() + + this.timer_thread = Thread(target=call_timer, name='Inara timer') + this.timer_thread.daemon = True + this.timer_thread.start() return 'Inara' def plugin_app(parent): @@ -97,11 +103,14 @@ def plugin_app(parent): def plugin_stop(): # Send any unsent events call() + time.sleep(0.1) # Sleep for 100ms to allow call to go out, and to force a context switch to our other threads # Signal thread to close and wait for it this.queue.put(None) this.thread.join() this.thread = None + this.timer_run = False + def plugin_prefs(parent, cmdr, is_beta): PADX = 10 @@ -189,7 +198,7 @@ def journal_entry(cmdr, is_beta, system, station, entry, state): # Send any unsent events when switching accounts if cmdr and cmdr != this.cmdr: - call() + call(force=True) this.cmdr = cmdr this.FID = state['FID'] @@ -246,8 +255,6 @@ def journal_entry(cmdr, is_beta, system, station, entry, state): if config.getint('inara_out') and not is_beta and not this.multicrew and credentials(cmdr): try: - old_events = len(this.events) # Will only send existing events if we add a new event below - # Dump starting state to Inara if (this.newuser or @@ -306,6 +313,8 @@ def journal_entry(cmdr, is_beta, system, station, entry, state): this.loadout = make_loadout(state) add_event('setCommanderShipLoadout', entry['timestamp'], this.loadout) + + call() # Call here just to be sure that if we can send, we do, otherwise it'll get it in the next tick # Promotions @@ -435,35 +444,21 @@ def journal_entry(cmdr, is_beta, system, station, entry, state): cargo = [OrderedDict([('itemName', k), ('itemCount', state['Cargo'][k])]) for k in sorted(state['Cargo'])] - # if our cargo differers from last we checked, we're at a station, - # and our flood limit isnt covered, queue an update - should_poll = this.cargo != cargo and time.time() - this.last_update_time > FLOOD_LIMIT_SECONDS - - # Send event(s) to Inara - if entry['event'] == 'ShutDown' or len(this.events) > old_events or should_poll: - - # Send cargo and materials if changed - if this.cargo != cargo: - add_event('setCommanderInventoryCargo', entry['timestamp'], cargo) - this.cargo = cargo - materials = [] - for category in ['Raw', 'Manufactured', 'Encoded']: - materials.extend([ OrderedDict([('itemName', k), ('itemCount', state[category][k])]) for k in sorted(state[category]) ]) - if this.materials != materials: - add_event('setCommanderInventoryMaterials', entry['timestamp'], materials) - this.materials = materials - - # Queue a call to Inara - call() + # Send cargo and materials if changed + if this.cargo != cargo: + add_event('setCommanderInventoryCargo', entry['timestamp'], cargo) + this.cargo = cargo + materials = [] + for category in ['Raw', 'Manufactured', 'Encoded']: + materials.extend([ OrderedDict([('itemName', k), ('itemCount', state[category][k])]) for k in sorted(state[category]) ]) + if this.materials != materials: + add_event('setCommanderInventoryMaterials', entry['timestamp'], materials) + this.materials = materials except Exception as e: if __debug__: print_exc() return str(e) - # - # Events that don't need to be sent immediately but will be sent on the next mandatory event - # - # Send credits and stats to Inara on startup only - otherwise may be out of date if entry['event'] == 'LoadGame': add_event('setCommanderCredits', entry['timestamp'], @@ -857,14 +852,22 @@ def add_event(name, timestamp, data): ('eventData', data), ])) +def call_timer(wait=FLOOD_LIMIT_SECONDS): + while this.timer_run: + time.sleep(wait) + if this.timer_run: # check again in here just in case we're closing and the stars align + call() # Queue a call to Inara, handled in Worker thread -def call(callback=None): +def call(callback=None, force=False): if not this.events: return - this.last_update_time = time.time() - + if (time.time() - config.getint(LAST_UPDATE_CONF_KEY)) <= FLOOD_LIMIT_SECONDS and not force: + return + + config.set(LAST_UPDATE_CONF_KEY, int(time.time())) + print(f"INARA: {time.asctime()} sending {len(this.events)} entries to inara (call)") data = OrderedDict([ ('header', OrderedDict([ ('appName', applongname), @@ -887,6 +890,8 @@ def worker(): else: (url, data, callback) = item + print(f"INARA: {time.asctime()} sending {len(data['events'])} entries to inara (worker)") + retrying = 0 while retrying < 3: try: @@ -896,28 +901,35 @@ def worker(): status = reply['header']['eventStatus'] if callback: callback(reply) - elif status // 100 != 2: # 2xx == OK (maybe with warnings) + elif status // 100 != 2: # 2xx == OK (maybe with warnings) # Log fatal errors print('Inara\t%s %s' % (reply['header']['eventStatus'], reply['header'].get('eventStatusText', ''))) print(json.dumps(data, indent=2, separators = (',', ': '))) - plug.show_error(_('Error: Inara {MSG}').format(MSG = reply['header'].get('eventStatusText', status))) + plug.show_error(_('Error: Inara {MSG}').format(MSG=reply['header'].get('eventStatusText', status))) else: # Log individual errors and warnings for data_event, reply_event in zip(data['events'], reply['events']): if reply_event['eventStatus'] != 200: print('Inara\t%s %s\t%s' % (reply_event['eventStatus'], reply_event.get('eventStatusText', ''), json.dumps(data_event))) if reply_event['eventStatus'] // 100 != 2: - plug.show_error(_('Error: Inara {MSG}').format(MSG = '%s, %s' % (data_event['eventName'], reply_event.get('eventStatusText', reply_event['eventStatus'])))) - if data_event['eventName'] in ['addCommanderTravelCarrierJump', 'addCommanderTravelDock', 'addCommanderTravelFSDJump', 'setCommanderTravelLocation']: + plug.show_error(_('Error: Inara {MSG}').format( + MSG=f'{data_event["eventName"]},' + f'{reply_event.get("eventStatusText", reply_event["eventStatus"])}')) + if data_event['eventName'] in ('addCommanderTravelCarrierJump', + 'addCommanderTravelDock', + 'addCommanderTravelFSDJump', + 'setCommanderTravelLocation'): this.lastlocation = reply_event.get('eventData', {}) - this.system_link.event_generate('<>', when="tail") # calls update_location in main thread + # calls update_location in main thread + this.system_link.event_generate('<>', when="tail") elif data_event['eventName'] in ['addCommanderShip', 'setCommanderShip']: this.lastship = reply_event.get('eventData', {}) - this.system_link.event_generate('<>', when="tail") # calls update_ship in main thread + # calls update_ship in main thread + this.system_link.event_generate('<>', when="tail") break - except: - if __debug__: print_exc() + except Exception: + logger.debug('Sending events', exc_info=e) retrying += 1 else: if callback: From e5ca8a6f262e6134d156a58ffdcbf04e59079b32 Mon Sep 17 00:00:00 2001 From: Athanasius Date: Sun, 2 Aug 2020 19:41:14 +0100 Subject: [PATCH 10/14] Release 4.0.4: Changelog, version, appcast * Version 4.0.4 * ChangeLog.md * edmarketconnector.xml (except length) --- ChangeLog.md | 19 +++++++++++++++++++ config.py | 2 +- edmarketconnector.xml | 28 +++++++++++++++++++++++++--- 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/ChangeLog.md b/ChangeLog.md index 1c5c7701..eb75a48f 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -1,6 +1,25 @@ This is the master changelog for Elite Dangerous Market Connector. Entries are in reverse chronological order (latest first). --- +Release 4.0.4 +=== + + * Don't crash if no non-default Journal Directory has been set. + * Only send to Inara API at most once every 30 seconds. This should avoid + the "Inara 400 Too much requests, slow down, cowboy. ;) ..." message and + being locked out from the API for an hour as a result. Any events that + require data to be sent during the 30s cooldown will be queued and sent when + that timer expires. + + This was caused by previous changes in an attempt to send cargo events + to Inara more often. This fix retains that enhancement. + + Note that if you log out and stop EDMC within 30 seconds you might have + some events not sent. If we tried to force a send then it might hit the + limit when you want to log back in and continue playing. As it is you can + re-run EDMC and log back into the game to ensure Inara is synchronised + properly. + Release 4.0.3 === diff --git a/config.py b/config.py index b0b887ec..c65b59dc 100644 --- a/config.py +++ b/config.py @@ -13,7 +13,7 @@ appcmdname = 'EDMC' # appversion **MUST** follow Semantic Versioning rules: # # Major.Minor.Patch(-prerelease)(+buildmetadata) -appversion = '4.0.3' #-rc1+a872b5f' +appversion = '4.0.4' #-rc1+a872b5f' # For some things we want appversion without (possible) +build metadata appversion_nobuild = str(semantic_version.Version(appversion).truncate('prerelease')) copyright = u'© 2015-2019 Jonathan Harris, 2020 EDCD' diff --git a/edmarketconnector.xml b/edmarketconnector.xml index 3f14366a..41b5dcd4 100644 --- a/edmarketconnector.xml +++ b/edmarketconnector.xml @@ -168,11 +168,33 @@ - Release 4.0.3 + Release 4.0.4 body { font-family:"Segoe UI","Tahoma"; font-size: 75%; } h2 { font-family:"Segoe UI","Tahoma"; font-size: 105%; } +

    Release 4.0.4

    +
      +
    • +

      Don't crash if no non-default Journal Directory has been set.

      +
    • +
    • +

      Only send to Inara API at most once every 30 seconds. This should avoid +the "Inara 400 Too much requests, slow down, cowboy. ;) ..." message and +being locked out from the API for an hour as a result. Any events that +require data to be sent during the 30s cooldown will be queued and sent when +that timer expires.

      +

      This was caused by previous changes in an attempt to send cargo events +to Inara more often. This fix retains that enhancement.

      +

      Note that if you log out and stop EDMC within 30 seconds you might have +some events not sent. If we tried to force a send then it might hit the +limit when you want to log back in and continue playing. As it is you can +re-run EDMC and log back into the game to ensure Inara is synchronised +properly.

      +
    • +
    + +

    Release 4.0.3

    NB: Anyone who installed a 4.0.3-rcX release candidate version should first uninstall it before installing this. @@ -578,10 +600,10 @@ If any of your plugins are listed in that section then they will need updating, ]]> From c51a1459d1f721b5484af7415f26d64f573f4f4e Mon Sep 17 00:00:00 2001 From: Athanasius Date: Sun, 2 Aug 2020 19:56:14 +0100 Subject: [PATCH 11/14] Release 4.0.4: Mention Python 3.7.8 in changelogs. --- ChangeLog.md | 1 + edmarketconnector.xml | 3 +++ 2 files changed, 4 insertions(+) diff --git a/ChangeLog.md b/ChangeLog.md index eb75a48f..92083dcf 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -4,6 +4,7 @@ This is the master changelog for Elite Dangerous Market Connector. Entries are Release 4.0.4 === + * Built using Python 3.7.8. Prior 4.0.x releases used 3.7.7. * Don't crash if no non-default Journal Directory has been set. * Only send to Inara API at most once every 30 seconds. This should avoid the "Inara 400 Too much requests, slow down, cowboy. ;) ..." message and diff --git a/edmarketconnector.xml b/edmarketconnector.xml index 41b5dcd4..9854da44 100644 --- a/edmarketconnector.xml +++ b/edmarketconnector.xml @@ -176,6 +176,9 @@

    Release 4.0.4

    • +

      Built using Python 3.7.8. Prior 4.0.x releases used 3.7.7.

      +
    • +
    • Don't crash if no non-default Journal Directory has been set.

    • From 451dcbff2182f8b2907d287acac9f3ccb1a4df0b Mon Sep 17 00:00:00 2001 From: Athanasius Date: Sun, 2 Aug 2020 20:02:45 +0100 Subject: [PATCH 12/14] Release 4.0.4: Post-build appcast length update --- edmarketconnector.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edmarketconnector.xml b/edmarketconnector.xml index 9854da44..b551f74c 100644 --- a/edmarketconnector.xml +++ b/edmarketconnector.xml @@ -607,7 +607,7 @@ If any of your plugins are listed in that section then they will need updating, sparkle:os="windows" sparkle:installerArguments="/passive LAUNCH=yes" sparkle:version="4.0.4" - length="11325440" + length="11411456" type="application/octet-stream" /> From c8635b84d2fad8f03472ebf04d86416de15a5a79 Mon Sep 17 00:00:00 2001 From: Athanasius Date: Sun, 2 Aug 2020 20:04:37 +0100 Subject: [PATCH 13/14] Translations: Minor changes * Back to {HH}:{MM}:{SS} for this. * A few extra "Use alternate URL method" translations. --- L10n/cs.strings | 4 ++-- L10n/de.strings | 4 ++-- L10n/es.strings | 4 ++-- L10n/fi.strings | 4 ++-- L10n/fr.strings | 4 ++-- L10n/hu.strings | 4 ++-- L10n/it.strings | 4 ++-- L10n/ja.strings | 4 ++-- L10n/lv.strings | 4 ++-- L10n/nl.strings | 7 +++++-- L10n/pl.strings | 4 ++-- L10n/pt-BR.strings | 4 ++-- L10n/pt-PT.strings | 4 ++-- L10n/ru.strings | 4 ++-- L10n/sl.strings | 4 ++-- L10n/sr-Latn-BA.strings | 4 ++-- L10n/sr-Latn.strings | 4 ++-- L10n/sv-SE.strings | 4 ++-- L10n/uk.strings | 7 +++++-- L10n/zh-Hans.strings | 4 ++-- 20 files changed, 46 insertions(+), 40 deletions(-) diff --git a/L10n/cs.strings b/L10n/cs.strings index 48c58606..42acb642 100644 --- a/L10n/cs.strings +++ b/L10n/cs.strings @@ -235,8 +235,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Jazyk"; -/* [EDMarketConnector.py] */ -"Last updated at {HH}:{MM}:{SS}" = "Poslední aktualizace {HH}:{MM}:{SS}"; +/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ +"Last updated at %H:%M:%S" = "Poslední aktualizace %H:%M:%S"; /* Federation rank. [stats.py] */ "Lieutenant" = "Lieutenant"; diff --git a/L10n/de.strings b/L10n/de.strings index 9e50095f..14ef93ea 100644 --- a/L10n/de.strings +++ b/L10n/de.strings @@ -235,8 +235,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Sprache"; -/* [EDMarketConnector.py] */ -"Last updated at {HH}:{MM}:{SS}" = "Zuletzt aktualisiert um {HH}:{MM}:{SS}"; +/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ +"Last updated at %H:%M:%S" = "Zuletzt aktualisiert um %H:%M:%S"; /* Federation rank. [stats.py] */ "Lieutenant" = "Kapitänleutnant"; diff --git a/L10n/es.strings b/L10n/es.strings index 5d4d819a..8dc4eb49 100644 --- a/L10n/es.strings +++ b/L10n/es.strings @@ -235,8 +235,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Idioma"; -/* [EDMarketConnector.py] */ -"Last updated at {HH}:{MM}:{SS}" = "Última actualización: {HH}:{MM}:{SS}"; +/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ +"Last updated at %H:%M:%S" = "Última actualización: %H:%M:%S"; /* Federation rank. [stats.py] */ "Lieutenant" = "Teniente de navío"; diff --git a/L10n/fi.strings b/L10n/fi.strings index 7c00b1b1..fd0ff40a 100644 --- a/L10n/fi.strings +++ b/L10n/fi.strings @@ -235,8 +235,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Kieli"; -/* [EDMarketConnector.py] */ -"Last updated at {HH}:{MM}:{SS}" = "Päivitetty viimeksi {HH}:{MM}:{SS}"; +/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ +"Last updated at %H:%M:%S" = "Päivitetty viimeksi %H:%M:%S"; /* Federation rank. [stats.py] */ "Lieutenant" = "Lieutenant"; diff --git a/L10n/fr.strings b/L10n/fr.strings index 97550996..617fc168 100644 --- a/L10n/fr.strings +++ b/L10n/fr.strings @@ -235,8 +235,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Langue"; -/* [EDMarketConnector.py] */ -"Last updated at {HH}:{MM}:{SS}" = "Dernière mise à jour à {HH}:{MM}:{SS}"; +/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ +"Last updated at %H:%M:%S" = "Dernière mise à jour à %H:%M:%S"; /* Federation rank. [stats.py] */ "Lieutenant" = "Lieutenant"; diff --git a/L10n/hu.strings b/L10n/hu.strings index daa68919..18880370 100644 --- a/L10n/hu.strings +++ b/L10n/hu.strings @@ -232,8 +232,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Nyelv"; -/* [EDMarketConnector.py] */ -"Last updated at {HH}:{MM}:{SS}" = "Utoljára frissítve {HH}:{MM}:{SS}"; +/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ +"Last updated at %H:%M:%S" = "Utoljára frissítve %H:%M:%S"; /* Federation rank. [stats.py] */ "Lieutenant" = "Hadnagy"; diff --git a/L10n/it.strings b/L10n/it.strings index 8ec9f094..4a37b4c0 100644 --- a/L10n/it.strings +++ b/L10n/it.strings @@ -235,8 +235,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Lingua"; -/* [EDMarketConnector.py] */ -"Last updated at {HH}:{MM}:{SS}" = "Ultimo aggiornamento alle {HH}:{MM}:{SS}"; +/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ +"Last updated at %H:%M:%S" = "Ultimo aggiornamento alle %H:%M:%S"; /* Federation rank. [stats.py] */ "Lieutenant" = "Lieutenant"; diff --git a/L10n/ja.strings b/L10n/ja.strings index 1810a0a7..9d067991 100644 --- a/L10n/ja.strings +++ b/L10n/ja.strings @@ -235,8 +235,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "言語"; -/* [EDMarketConnector.py] */ -"Last updated at {HH}:{MM}:{SS}" = "最終更新時間 {HH}:{MM}:{SS}"; +/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ +"Last updated at %H:%M:%S" = "最終更新時間 %H:%M:%S"; /* Federation rank. [stats.py] */ "Lieutenant" = "Lieutenant"; diff --git a/L10n/lv.strings b/L10n/lv.strings index 3113fbbb..8247abc4 100644 --- a/L10n/lv.strings +++ b/L10n/lv.strings @@ -217,8 +217,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Valoda"; -/* [EDMarketConnector.py] */ -"Last updated at {HH}:{MM}:{SS}" = "Pēdējo reizi atjaunināts {HH}:{MM}:{SS}"; +/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ +"Last updated at %H:%M:%S" = "Pēdējo reizi atjaunināts %H:%M:%S"; /* Federation rank. [stats.py] */ "Lieutenant" = "Leitnants"; diff --git a/L10n/nl.strings b/L10n/nl.strings index a3ee89e7..747d4452 100644 --- a/L10n/nl.strings +++ b/L10n/nl.strings @@ -235,8 +235,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Taal"; -/* [EDMarketConnector.py] */ -"Last updated at {HH}:{MM}:{SS}" = "Voor het laatst bijgewerkt om {HH}:{MM}:{SS}"; +/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ +"Last updated at %H:%M:%S" = "Voor het laatst bijgewerkt om %H:%M:%S"; /* Federation rank. [stats.py] */ "Lieutenant" = "Lieutenant"; @@ -490,6 +490,9 @@ /* Update button in main window. [EDMarketConnector.py] */ "Update" = "Bijwerken"; +/* Option to use alternate URL method on shipyard links [prefs.py] */ +"Use alternate URL method" = "Gebruik andere URL methode"; + /* Status dialog subtitle - CR value of ship. [stats.py] */ "Value" = "Waarde"; diff --git a/L10n/pl.strings b/L10n/pl.strings index e2d26f8e..e0954301 100644 --- a/L10n/pl.strings +++ b/L10n/pl.strings @@ -235,8 +235,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Język"; -/* [EDMarketConnector.py] */ -"Last updated at {HH}:{MM}:{SS}" = "Ostatnia aktualizacja {HH}:{MM}:{SS}"; +/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ +"Last updated at %H:%M:%S" = "Ostatnia aktualizacja %H:%M:%S"; /* Federation rank. [stats.py] */ "Lieutenant" = "Lieutenant"; diff --git a/L10n/pt-BR.strings b/L10n/pt-BR.strings index bb0c339f..c3fdd3f5 100644 --- a/L10n/pt-BR.strings +++ b/L10n/pt-BR.strings @@ -235,8 +235,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Idioma"; -/* [EDMarketConnector.py] */ -"Last updated at {HH}:{MM}:{SS}" = "Última atualização {HH}:{MM}:{SS}"; +/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ +"Last updated at %H:%M:%S" = "Última atualização %H:%M:%S"; /* Federation rank. [stats.py] */ "Lieutenant" = "Tenente"; diff --git a/L10n/pt-PT.strings b/L10n/pt-PT.strings index 249b6e29..2e78260d 100644 --- a/L10n/pt-PT.strings +++ b/L10n/pt-PT.strings @@ -235,8 +235,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Linguagem"; -/* [EDMarketConnector.py] */ -"Last updated at {HH}:{MM}:{SS}" = "Última actualização: {HH}:{MM}:{SS}"; +/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ +"Last updated at %H:%M:%S" = "Última actualização: %H:%M:%S"; /* Federation rank. [stats.py] */ "Lieutenant" = "Tenente"; diff --git a/L10n/ru.strings b/L10n/ru.strings index e7f012b8..5ae27431 100644 --- a/L10n/ru.strings +++ b/L10n/ru.strings @@ -235,8 +235,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Язык"; -/* [EDMarketConnector.py] */ -"Last updated at {HH}:{MM}:{SS}" = "Последнее обновление в {HH}:{MM}:{SS}"; +/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ +"Last updated at %H:%M:%S" = "Последнее обновление в %H:%M:%S"; /* Federation rank. [stats.py] */ "Lieutenant" = "Лейтенант"; diff --git a/L10n/sl.strings b/L10n/sl.strings index fe2f7435..2020469c 100644 --- a/L10n/sl.strings +++ b/L10n/sl.strings @@ -184,8 +184,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Jezik"; -/* [EDMarketConnector.py] */ -"Last updated at {HH}:{MM}:{SS}" = "Zadnja osvežitev podatkov {HH}:{MM}:{SS} "; +/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ +"Last updated at %H:%M:%S" = "Zadnja osvežitev podatkov %H:%M:%S "; /* Federation rank. [stats.py] */ "Lieutenant" = "LIeutenant"; diff --git a/L10n/sr-Latn-BA.strings b/L10n/sr-Latn-BA.strings index 3a1dbdc2..3178ffb9 100644 --- a/L10n/sr-Latn-BA.strings +++ b/L10n/sr-Latn-BA.strings @@ -235,8 +235,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Jezik"; -/* [EDMarketConnector.py] */ -"Last updated at {HH}:{MM}:{SS}" = "Posljednji put osvježeno {HH}:{MM}:{SS}"; +/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ +"Last updated at %H:%M:%S" = "Posljednji put osvježeno %H:%M:%S"; /* Federation rank. [stats.py] */ "Lieutenant" = "Lieutenant"; diff --git a/L10n/sr-Latn.strings b/L10n/sr-Latn.strings index 1245451b..45eacc40 100644 --- a/L10n/sr-Latn.strings +++ b/L10n/sr-Latn.strings @@ -235,8 +235,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Jezik"; -/* [EDMarketConnector.py] */ -"Last updated at {HH}:{MM}:{SS}" = "Poslednji put osveženo {HH}:{MM}:{SS}"; +/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ +"Last updated at %H:%M:%S" = "Poslednji put osveženo %H:%M:%S"; /* Federation rank. [stats.py] */ "Lieutenant" = "Lieutenant"; diff --git a/L10n/sv-SE.strings b/L10n/sv-SE.strings index d707eedd..b968a501 100644 --- a/L10n/sv-SE.strings +++ b/L10n/sv-SE.strings @@ -235,8 +235,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Språk"; -/* [EDMarketConnector.py] */ -"Last updated at {HH}:{MM}:{SS}" = "Senaste uppdatering: {HH}:{MM}:{SS}"; +/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ +"Last updated at %H:%M:%S" = "Senaste uppdatering: %H:%M:%S"; /* Federation rank. [stats.py] */ "Lieutenant" = "Lieutenant"; diff --git a/L10n/uk.strings b/L10n/uk.strings index 09b80c27..ace0df1f 100644 --- a/L10n/uk.strings +++ b/L10n/uk.strings @@ -235,8 +235,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Мова"; -/* [EDMarketConnector.py] */ -"Last updated at {HH}:{MM}:{SS}" = "Останнє оновлення було {HH}:{MM}:{SS}"; +/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ +"Last updated at %H:%M:%S" = "Останнє оновлення було %H:%M:%S"; /* Federation rank. [stats.py] */ "Lieutenant" = "Лейтенант"; @@ -490,6 +490,9 @@ /* Update button in main window. [EDMarketConnector.py] */ "Update" = "Оновлення"; +/* Option to use alternate URL method on shipyard links [prefs.py] */ +"Use alternate URL method" = "Використовувати альтернативний URL-метод"; + /* Status dialog subtitle - CR value of ship. [stats.py] */ "Value" = "Вартість"; diff --git a/L10n/zh-Hans.strings b/L10n/zh-Hans.strings index 2ddbeee6..68827d9d 100644 --- a/L10n/zh-Hans.strings +++ b/L10n/zh-Hans.strings @@ -232,8 +232,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "语言"; -/* [EDMarketConnector.py] */ -"Last updated at {HH}:{MM}:{SS}" = "最后更新于 {HH}:{MM}:{SS}"; +/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ +"Last updated at %H:%M:%S" = "最后更新于 %H:%M:%S"; /* Federation rank. [stats.py] */ "Lieutenant" = "Lieutenant"; From 412dad86a79ed85916693c7f942ae5f5dc1a1833 Mon Sep 17 00:00:00 2001 From: Athanasius Date: Sun, 2 Aug 2020 20:14:55 +0100 Subject: [PATCH 14/14] Release 4.0.4: Correct translations and update appcast length * Pulling in latest translations meant needing to change %H:%M:%S back to {HH}:{MM}:{SS}. * Built and tested, so has appcast length updated too. --- L10n/cs.strings | 4 ++-- L10n/de.strings | 4 ++-- L10n/es.strings | 4 ++-- L10n/fi.strings | 4 ++-- L10n/fr.strings | 4 ++-- L10n/hu.strings | 4 ++-- L10n/it.strings | 4 ++-- L10n/ja.strings | 4 ++-- L10n/lv.strings | 4 ++-- L10n/nl.strings | 4 ++-- L10n/pl.strings | 4 ++-- L10n/pt-BR.strings | 4 ++-- L10n/pt-PT.strings | 4 ++-- L10n/ru.strings | 4 ++-- L10n/sl.strings | 4 ++-- L10n/sr-Latn-BA.strings | 4 ++-- L10n/sr-Latn.strings | 4 ++-- L10n/sv-SE.strings | 4 ++-- L10n/uk.strings | 4 ++-- L10n/zh-Hans.strings | 4 ++-- edmarketconnector.xml | 2 +- 21 files changed, 41 insertions(+), 41 deletions(-) diff --git a/L10n/cs.strings b/L10n/cs.strings index 42acb642..39e80e0d 100644 --- a/L10n/cs.strings +++ b/L10n/cs.strings @@ -235,8 +235,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Jazyk"; -/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ -"Last updated at %H:%M:%S" = "Poslední aktualizace %H:%M:%S"; +/* [EDMarketConnector.py] - Leave '{HH}:{MM}:{SS}' as-is */ +"Last updated at {HH}:{MM}:{SS}" = "Poslední aktualizace {HH}:{MM}:{SS}"; /* Federation rank. [stats.py] */ "Lieutenant" = "Lieutenant"; diff --git a/L10n/de.strings b/L10n/de.strings index 14ef93ea..08fb23c7 100644 --- a/L10n/de.strings +++ b/L10n/de.strings @@ -235,8 +235,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Sprache"; -/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ -"Last updated at %H:%M:%S" = "Zuletzt aktualisiert um %H:%M:%S"; +/* [EDMarketConnector.py] - Leave '{HH}:{MM}:{SS}' as-is */ +"Last updated at {HH}:{MM}:{SS}" = "Zuletzt aktualisiert um {HH}:{MM}:{SS}"; /* Federation rank. [stats.py] */ "Lieutenant" = "Kapitänleutnant"; diff --git a/L10n/es.strings b/L10n/es.strings index 8dc4eb49..d4105d03 100644 --- a/L10n/es.strings +++ b/L10n/es.strings @@ -235,8 +235,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Idioma"; -/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ -"Last updated at %H:%M:%S" = "Última actualización: %H:%M:%S"; +/* [EDMarketConnector.py] - Leave '{HH}:{MM}:{SS}' as-is */ +"Last updated at {HH}:{MM}:{SS}" = "Última actualización: {HH}:{MM}:{SS}"; /* Federation rank. [stats.py] */ "Lieutenant" = "Teniente de navío"; diff --git a/L10n/fi.strings b/L10n/fi.strings index fd0ff40a..205c3394 100644 --- a/L10n/fi.strings +++ b/L10n/fi.strings @@ -235,8 +235,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Kieli"; -/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ -"Last updated at %H:%M:%S" = "Päivitetty viimeksi %H:%M:%S"; +/* [EDMarketConnector.py] - Leave '{HH}:{MM}:{SS}' as-is */ +"Last updated at {HH}:{MM}:{SS}" = "Päivitetty viimeksi {HH}:{MM}:{SS}"; /* Federation rank. [stats.py] */ "Lieutenant" = "Lieutenant"; diff --git a/L10n/fr.strings b/L10n/fr.strings index 617fc168..e51c107c 100644 --- a/L10n/fr.strings +++ b/L10n/fr.strings @@ -235,8 +235,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Langue"; -/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ -"Last updated at %H:%M:%S" = "Dernière mise à jour à %H:%M:%S"; +/* [EDMarketConnector.py] - Leave '{HH}:{MM}:{SS}' as-is */ +"Last updated at {HH}:{MM}:{SS}" = "Dernière mise à jour à {HH}:{MM}:{SS}"; /* Federation rank. [stats.py] */ "Lieutenant" = "Lieutenant"; diff --git a/L10n/hu.strings b/L10n/hu.strings index 18880370..7275ada4 100644 --- a/L10n/hu.strings +++ b/L10n/hu.strings @@ -232,8 +232,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Nyelv"; -/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ -"Last updated at %H:%M:%S" = "Utoljára frissítve %H:%M:%S"; +/* [EDMarketConnector.py] - Leave '{HH}:{MM}:{SS}' as-is */ +"Last updated at {HH}:{MM}:{SS}" = "Utoljára frissítve {HH}:{MM}:{SS}"; /* Federation rank. [stats.py] */ "Lieutenant" = "Hadnagy"; diff --git a/L10n/it.strings b/L10n/it.strings index 4a37b4c0..4ddbb393 100644 --- a/L10n/it.strings +++ b/L10n/it.strings @@ -235,8 +235,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Lingua"; -/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ -"Last updated at %H:%M:%S" = "Ultimo aggiornamento alle %H:%M:%S"; +/* [EDMarketConnector.py] - Leave '{HH}:{MM}:{SS}' as-is */ +"Last updated at {HH}:{MM}:{SS}" = "Ultimo aggiornamento alle {HH}:{MM}:{SS}"; /* Federation rank. [stats.py] */ "Lieutenant" = "Lieutenant"; diff --git a/L10n/ja.strings b/L10n/ja.strings index 9d067991..7848f534 100644 --- a/L10n/ja.strings +++ b/L10n/ja.strings @@ -235,8 +235,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "言語"; -/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ -"Last updated at %H:%M:%S" = "最終更新時間 %H:%M:%S"; +/* [EDMarketConnector.py] - Leave '{HH}:{MM}:{SS}' as-is */ +"Last updated at {HH}:{MM}:{SS}" = "最終更新時間 {HH}:{MM}:{SS}"; /* Federation rank. [stats.py] */ "Lieutenant" = "Lieutenant"; diff --git a/L10n/lv.strings b/L10n/lv.strings index 8247abc4..0a485523 100644 --- a/L10n/lv.strings +++ b/L10n/lv.strings @@ -217,8 +217,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Valoda"; -/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ -"Last updated at %H:%M:%S" = "Pēdējo reizi atjaunināts %H:%M:%S"; +/* [EDMarketConnector.py] - Leave '{HH}:{MM}:{SS}' as-is */ +"Last updated at {HH}:{MM}:{SS}" = "Pēdējo reizi atjaunināts {HH}:{MM}:{SS}"; /* Federation rank. [stats.py] */ "Lieutenant" = "Leitnants"; diff --git a/L10n/nl.strings b/L10n/nl.strings index 747d4452..9628e488 100644 --- a/L10n/nl.strings +++ b/L10n/nl.strings @@ -235,8 +235,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Taal"; -/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ -"Last updated at %H:%M:%S" = "Voor het laatst bijgewerkt om %H:%M:%S"; +/* [EDMarketConnector.py] - Leave '{HH}:{MM}:{SS}' as-is */ +"Last updated at {HH}:{MM}:{SS}" = "Voor het laatst bijgewerkt om {HH}:{MM}:{SS}"; /* Federation rank. [stats.py] */ "Lieutenant" = "Lieutenant"; diff --git a/L10n/pl.strings b/L10n/pl.strings index e0954301..72bc34fd 100644 --- a/L10n/pl.strings +++ b/L10n/pl.strings @@ -235,8 +235,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Język"; -/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ -"Last updated at %H:%M:%S" = "Ostatnia aktualizacja %H:%M:%S"; +/* [EDMarketConnector.py] - Leave '{HH}:{MM}:{SS}' as-is */ +"Last updated at {HH}:{MM}:{SS}" = "Ostatnia aktualizacja {HH}:{MM}:{SS}"; /* Federation rank. [stats.py] */ "Lieutenant" = "Lieutenant"; diff --git a/L10n/pt-BR.strings b/L10n/pt-BR.strings index c3fdd3f5..980fd473 100644 --- a/L10n/pt-BR.strings +++ b/L10n/pt-BR.strings @@ -235,8 +235,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Idioma"; -/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ -"Last updated at %H:%M:%S" = "Última atualização %H:%M:%S"; +/* [EDMarketConnector.py] - Leave '{HH}:{MM}:{SS}' as-is */ +"Last updated at {HH}:{MM}:{SS}" = "Última atualização {HH}:{MM}:{SS}"; /* Federation rank. [stats.py] */ "Lieutenant" = "Tenente"; diff --git a/L10n/pt-PT.strings b/L10n/pt-PT.strings index 2e78260d..1da61a83 100644 --- a/L10n/pt-PT.strings +++ b/L10n/pt-PT.strings @@ -235,8 +235,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Linguagem"; -/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ -"Last updated at %H:%M:%S" = "Última actualização: %H:%M:%S"; +/* [EDMarketConnector.py] - Leave '{HH}:{MM}:{SS}' as-is */ +"Last updated at {HH}:{MM}:{SS}" = "Última actualização: {HH}:{MM}:{SS}"; /* Federation rank. [stats.py] */ "Lieutenant" = "Tenente"; diff --git a/L10n/ru.strings b/L10n/ru.strings index 5ae27431..c357b97c 100644 --- a/L10n/ru.strings +++ b/L10n/ru.strings @@ -235,8 +235,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Язык"; -/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ -"Last updated at %H:%M:%S" = "Последнее обновление в %H:%M:%S"; +/* [EDMarketConnector.py] - Leave '{HH}:{MM}:{SS}' as-is */ +"Last updated at {HH}:{MM}:{SS}" = "Последнее обновление в {HH}:{MM}:{SS}"; /* Federation rank. [stats.py] */ "Lieutenant" = "Лейтенант"; diff --git a/L10n/sl.strings b/L10n/sl.strings index 2020469c..5b705bbf 100644 --- a/L10n/sl.strings +++ b/L10n/sl.strings @@ -184,8 +184,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Jezik"; -/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ -"Last updated at %H:%M:%S" = "Zadnja osvežitev podatkov %H:%M:%S "; +/* [EDMarketConnector.py] - Leave '{HH}:{MM}:{SS}' as-is */ +"Last updated at {HH}:{MM}:{SS}" = "Zadnja osvežitev podatkov {HH}:{MM}:{SS} "; /* Federation rank. [stats.py] */ "Lieutenant" = "LIeutenant"; diff --git a/L10n/sr-Latn-BA.strings b/L10n/sr-Latn-BA.strings index 3178ffb9..783e1029 100644 --- a/L10n/sr-Latn-BA.strings +++ b/L10n/sr-Latn-BA.strings @@ -235,8 +235,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Jezik"; -/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ -"Last updated at %H:%M:%S" = "Posljednji put osvježeno %H:%M:%S"; +/* [EDMarketConnector.py] - Leave '{HH}:{MM}:{SS}' as-is */ +"Last updated at {HH}:{MM}:{SS}" = "Posljednji put osvježeno {HH}:{MM}:{SS}"; /* Federation rank. [stats.py] */ "Lieutenant" = "Lieutenant"; diff --git a/L10n/sr-Latn.strings b/L10n/sr-Latn.strings index 45eacc40..3f1191c2 100644 --- a/L10n/sr-Latn.strings +++ b/L10n/sr-Latn.strings @@ -235,8 +235,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Jezik"; -/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ -"Last updated at %H:%M:%S" = "Poslednji put osveženo %H:%M:%S"; +/* [EDMarketConnector.py] - Leave '{HH}:{MM}:{SS}' as-is */ +"Last updated at {HH}:{MM}:{SS}" = "Poslednji put osveženo {HH}:{MM}:{SS}"; /* Federation rank. [stats.py] */ "Lieutenant" = "Lieutenant"; diff --git a/L10n/sv-SE.strings b/L10n/sv-SE.strings index b968a501..a3d5ed83 100644 --- a/L10n/sv-SE.strings +++ b/L10n/sv-SE.strings @@ -235,8 +235,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Språk"; -/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ -"Last updated at %H:%M:%S" = "Senaste uppdatering: %H:%M:%S"; +/* [EDMarketConnector.py] - Leave '{HH}:{MM}:{SS}' as-is */ +"Last updated at {HH}:{MM}:{SS}" = "Senaste uppdatering: {HH}:{MM}:{SS}"; /* Federation rank. [stats.py] */ "Lieutenant" = "Lieutenant"; diff --git a/L10n/uk.strings b/L10n/uk.strings index ace0df1f..cc0c5bcf 100644 --- a/L10n/uk.strings +++ b/L10n/uk.strings @@ -235,8 +235,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "Мова"; -/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ -"Last updated at %H:%M:%S" = "Останнє оновлення було %H:%M:%S"; +/* [EDMarketConnector.py] - Leave '{HH}:{MM}:{SS}' as-is */ +"Last updated at {HH}:{MM}:{SS}" = "Останнє оновлення було {HH}:{MM}:{SS}"; /* Federation rank. [stats.py] */ "Lieutenant" = "Лейтенант"; diff --git a/L10n/zh-Hans.strings b/L10n/zh-Hans.strings index 68827d9d..251fa21f 100644 --- a/L10n/zh-Hans.strings +++ b/L10n/zh-Hans.strings @@ -232,8 +232,8 @@ /* Appearance setting prompt. [prefs.py] */ "Language" = "语言"; -/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */ -"Last updated at %H:%M:%S" = "最后更新于 %H:%M:%S"; +/* [EDMarketConnector.py] - Leave '{HH}:{MM}:{SS}' as-is */ +"Last updated at {HH}:{MM}:{SS}" = "最后更新于 {HH}:{MM}:{SS}"; /* Federation rank. [stats.py] */ "Lieutenant" = "Lieutenant"; diff --git a/edmarketconnector.xml b/edmarketconnector.xml index b551f74c..fdba6d04 100644 --- a/edmarketconnector.xml +++ b/edmarketconnector.xml @@ -607,7 +607,7 @@ If any of your plugins are listed in that section then they will need updating, sparkle:os="windows" sparkle:installerArguments="/passive LAUNCH=yes" sparkle:version="4.0.4" - length="11411456" + length="11419648" type="application/octet-stream" />