1
0
mirror of https://github.com/EDCD/EDMarketConnector.git synced 2025-04-13 07:47:14 +03:00

645 Commits

Author SHA1 Message Date
Athanasius
abe13176e7
EDSM: Timed latch for notifying about Legacy galaxy data
This avoids the spam from EDSM itself objecting to the passed gameversion.
We don't even send anything but Live data now.
2022-12-01 18:00:47 +00:00
Athanasius
db4f59dd16
Inara: Remove the "update 14 date passed?" check
- We're now past there and no-one should expect that messing with their clock
  will bypass this check.
2022-12-01 17:43:31 +00:00
Athanasius
b4c4e44cb7
eddn/CAPI: Use a common function for game_version strings
* This did, however, remind me that the `data` passed into `cmdr_data()`
  is an amalgam of `/profile`, `/market` and `/shipyard` queries.

  This means that the data.source_endpoint is **not correct for all of
  the data and its use**.  As such I had to pass 'hard coded' values into
  the function from the various CAPI export functions.  They know what it
  is they're exporting.

* As this reminded me that "CAPI `data` is actually a `CAPIDATA`", I've
  documented that in PLUGINS.md, but with a dire warning against relying on
  any of the extra properties.
2022-12-01 16:42:06 +00:00
Athanasius
b40d3b889f
CAPI: Use CAPI-Live-<endpoint> game_version for market & shipyard 2022-12-01 16:42:05 +00:00
Athanasius
4a8b5ed4b6
Merge pull request #1735 from EDCD/fix/1732/inara-do-not-send-empty-required
Inara: Drop various combat messages if empty opponentName
2022-12-01 16:41:32 +00:00
Athanasius
26413177a6
Inara: Also check opponentName on EscapeInterdiction
And sprinkly comments around giving a reason for the checks.
2022-12-01 13:45:10 +00:00
Athanasius
aac660fb05
Inara: Also catch empty opponentName for Interdict*ion* 2022-12-01 13:37:56 +00:00
Athanasius
2bbda30097
Inara: Drop addCommanderCombatInterdicted if empty opponentName
Addresses #1732 specifically.

At some point #1433 needs fully addressing (review all Inara API code for
compliance with docs).
2022-12-01 13:33:26 +00:00
Athanasius
e86110a3da
inara: Only warn for 'Legacy' if data would have been sent
* Specifically, only warn if the user option to send to Inara is active.
2022-11-30 12:07:48 +00:00
Athanasius
3f0aefd671
eddn: Fix spelling mistake in a log message 2022-11-28 15:38:34 +00:00
Athanasius
ab9e5f7278
Merge branch 'enhancement/1719/edsm-api-gameversion-gamebuild' into release-5.6.0-beta1 2022-11-28 12:20:36 +00:00
Athanasius
a581d889fe
edsm: Add a paranoia check for changed gameversion
* In theory we would always see `Fileheader` and clear `pending[]`, but let's
  be extra paranoid and also clear it if there's a gameversion/build difference
  between the prior event and the current one.
2022-11-28 12:18:10 +00:00
Athanasius
5743fd3803
edsm: Push gameversion/build into the queue to ensure correctness
1. Due to the _TIMEOUT on the actual `post()` of a message it would be
  possible for new entries to get queued in the meantime.  These queued
  entries could be 'in session' and end up going through pending and thus
  sent before one of the 'new session' events is detected so as to clear
  pending.  The `this.gameversion/build` could have changed in the meantime,
  so are no longer correct if game client changed.
2. So, pass in the current gameversion/build when a message is pushed into
  the queue, and parse those back out when they're pulled out of the queue.
3. Use those versions in the message, not `this.` versions.
2022-11-28 11:04:51 +00:00
Athanasius
ad95041605
edsm: Send gameversion/build in all messages
* Record the 'state' version of these in `this`.
* Use those when constructing the message.
* NB: Need to check if messages can be retained in the queue across client
  changes.  Coming up ....
2022-11-28 10:51:25 +00:00
Athanasius
2ac8026e3e
eddn: Allow for '' in standard_header()
`''` is Falsey, but a valid value, so we need an explicit `is not None`
test for these.
2022-11-27 17:01:28 +00:00
Athanasius
d902093f0b
Merge pull request #1682 from EDCD/fix/1431/eddn-replay-enhancements
Change EDDN 'replay' to using an sqlite3 DB & otherwise improve
2022-11-27 15:24:28 +00:00
Athanasius
8a58220a66
inara: Send only Live galaxy data after Update 14
* Adds `monitor.is_live_galaxy()` for general use.
* Assumes Update 14 starts after 2022-11-29T09:00:00+00:00.  That's the
  currently schedule day, and recently the servers have been down by the time.
  Likelihood of them coming back *up* quickly seems slim to none.
* If we couldn't parse the `gameversion` from Journal using
  `semantic_version.Version.coerce()` this will fail, and assume we're on
  the Legacy galaxy.
2022-11-27 12:47:19 +00:00
Athanasius
345938a81d
eddn: Set gamebuild="" for CAPI-sourced data
Whilst setting it to the same "CAPI-<endpoint>" string as `gameversion` in
these cases would probably be OK, that's not the intent of the EDDN
documentation, which has now been clarified.
2022-11-25 15:45:07 +00:00
Athanasius
073afc842f
eddn: New --trace-on plugins.eddn.send & other logging tweaks
* In case of apparent issues, have a `--trace-on` to better see what's (not)
  happening.

  All the old DBEUG logging, even if commented out, is now under this.
* Also added some INFO level logging for the legacy replay.jsonl conversion,
  as it should be one-time per user.
* Some additional DEBUG logging for closing down.
2022-11-24 14:09:57 +00:00
Philipp Trulson
c8e00304fb
Fix URL for EDDN GitHub Link 2022-11-24 14:09:43 +01:00
Athanasius
32229217b2
eddn: Bail from sending queued messages if one failed
NB: This is failed *not* due to the message being 'bad' in some manner. It
will mean the Gateway timed out, refused connection etc.
2022-11-23 16:00:28 +00:00
Athanasius
95fa9d577c
eddn: Use a shorter, 10 second, delay at startup for first queue check 2022-11-23 14:20:24 +00:00
Athanasius
3d9bb64330
eddn: Remove outdated comment about replaylog rework
And using tk `parent` *is* absolutely necessary.
2022-11-23 14:12:43 +00:00
Athanasius
b7769821be
eddn: Send immediately if docked
This has the "are we delaying sending?" check, but without the short-circuit
for "we are actually docked right now".
2022-11-23 13:56:01 +00:00
Athanasius
524c0425fb
eddn: EDDN.send_message(): Only set standard header if not already set.
Else we risk overwriting e.g. `CAPI-shipyard`.
2022-11-23 13:46:49 +00:00
Athanasius
fda91df04f
eddn: Working with tk after(), on timer or when docked
* An aborted attempt was made to use a thread worker, but:
  1. sqlite3 doesn't allow cross-thread use of the same sqlite3 connection.
  2. Having an on-going query on one cursor, e.g. gathering all the
    outstanding message `id`, whilst trying to DELETE a row hits a
    "database is locked" error.
* So, back to tk `after()`.  `send_message_by_id()` has been audited to ensure
  its boolean return is accurate.  So there shouldn't be any way in which to
  get hung up on a single message *other than if the EDDN Gateway is having
  issues, and thus it should be retried anyway*.  Any reason for a 'bad
  message' will cause `True` return and thus deletion of the message in
  *this* call to `queue_check_and_send()`.
* There is a new `reschedule` parameter to `queue_check_and_send()`.  If
  `True` then at the end it should re-schedule.

  There is a check in `journal_entry()` for the `Docked` event, and if this
  occurs it will schedule `queue_check_and_send()` with `reschedule` set to
  `False` so that we don't end up with multiple parallel schedulings.

  It's still possible for a docking to have coincided with a scheduled run
  and thus cause double-rate sending to EDDN, but we can live with that.

* The same scheduling mechanism is used, with a much smaller delay, to
  process more than one queued message per run.

  Hence the `have_rescheduled` bool *in* the function to indicate if a 'fast'
  reschedule has already been set.  This prevents the slow one *also* being
  set in this scenario.  The latter will be scheduled when the fast one
  found no more rows to process.
2022-11-23 13:29:47 +00:00
Athanasius
f2dbfacf70
eddn: Add header for CAPI outfitting and shipyard exports 2022-11-22 17:40:33 +00:00
Athanasius
f6e2504216
eddn: Fix capi_fcmaterials gameversion/build & add to CAPI commodity
* Erroneously used 'CAPI-commoodity' when it's 'CAPI-market' (name of the
  CAPI endpoint, not anything to do with EDDN schema names, and '-commodity'
  would also be wrong for that).
* Set `header` for (CAPI) `export_commodities()`.
2022-11-22 17:37:15 +00:00
Athanasius
b31c8c0536
eddn: A start on ensuring header (gameversion/build) are always set 2022-11-22 17:35:17 +00:00
Athanasius
4a0518da9f
eddn: Set header up properly for all journal messages
* New function `EDDN.add_header()`.
* It utilises new `this` members, set from `journal_entry()`.
2022-11-22 17:26:32 +00:00
Athanasius
06fa3629ea
eddn: OUT_EDDN_DELAY (not inverted) & further work on the sending
* The eddn parts of the OUT_EDDN_DO_NOT_DELAY -> OUT_EDDN_DELAY change.  This
  includes the 'sense' of it being inverted from what it was.
* EDDN.REPLAY_DELAY is now a float, as it's used with `time.sleep()`.  *This*
  is the 400ms value for inter-message cooldown.
* EDDN.REPLAY_PERIOD is still an int, used with tk `after()`.  This is how
  often we attempt the queue.
* EDDN.session is no longer a thing, move that part of EDDN.close() to
  EDDNSender.close().
* EDDN queue DB has `id`, not `message_id`.
* Now *looping* in the queue sender, not only sending the oldest message.
2022-11-22 16:49:02 +00:00
Athanasius
59f046ee67
eddn: First cut of periodic retry of sending messages 2022-11-22 15:51:10 +00:00
Athanasius
876c34ecfd
eddn: Remove two 'noqa: CCR001' that are no longer applicable 2022-11-22 14:09:08 +00:00
Athanasius
06edcf3ea9
EDDN: Remove EDDN.send() in favour of renamed .export_journal_entry()
* Now that we're not trying to do "did we just/are we know docked?" in this
  code it turns out that both CAPI and Journal messages can use the same
  function for this.
* And as it's no longer journal-specific `EDDN.export_journal_entry()` has
  been renamed to `EDDN.send_message()`.

This whole branch now needs to actually implement sending queued messages
when docked, and periodically in the case of initial failures.
2022-11-22 14:02:21 +00:00
Athanasius
fe24cf7e95
EDDN: Remove legacy sendreplay()
* `EDDN.sendreplay()` is no longer used.
* In `prefsvarschanged()` there was a reference to `eddn.replayfile`, so as
  to grey out the "Delay sending..." option if the file wasn't available.
  So that's moot and also removed, but also...
* Comment the purpose of that line in `prefsvarchanged()` because it's not
  immediately obvious.
2022-11-22 14:02:20 +00:00
Athanasius
db7bb735d2
EDDN: Put "should we send (now?)" checks into EDDN.export_journal_entry()
In some cases the check might already have been done, but if not then this
is the last easy place to perform it.

NB: Unlike the old code this does *not* attempt to check "are we docked
  *now* ?" for triggering sending of previously queue messages.  That's
  going to need a thread worker.
2022-11-22 14:02:19 +00:00
Athanasius
03b36cbe39
EDDN: Improve export_journal_fcmaterials "don't send" comment 2022-11-22 14:02:18 +00:00
Athanasius
5eb4296ec6
EDDN: First steps to ensure new code respects user configuration
It's easier to check "should we send this message at all?" earlier. Currently
all of the following ('station data') do so:

* CAPI commodity, outfitting (also fcmaterials) and shipyard.
* Journal commodity, fcmaterials, outfitting,  and shipyard.
2022-11-22 14:02:17 +00:00
Athanasius
7d0ae88757
EDDN: EDDNSender.send_message() doesn't care about do/don't send options
By this point other code will have made that decision.
2022-11-22 14:02:16 +00:00
Athanasius
0d35f8874a
config/EDDN: Rename OUT_MKT_EDDN to OUT_EDDN_SEND_STATION_DATA
This flag controls whether commodity, outfitting or shipyard schema messages
are sent.  Thus 'MKT' ('market') is misleading.  Rename it so the intent when
used is clear.
2022-11-22 14:02:15 +00:00
Athanasius
9f02f18408
config/EDDN: Rename OUT_SYS_EDDN to OUT_EDDN_SEND_NON_STATION
* This was perhaps originally meant for what the UI option says, i.e. "send
  system and scan data", but is actually being used for anything that is
  **NOT** 'station data' (even though *that* option has 'MKT' it includes
  outfitting and shipyard as well).

  So, just name this more sanely such that code using it is more obvious as
  to the actual intent.
2022-11-22 14:02:14 +00:00
Athanasius
3a57b53bbd
config/EDDN: Rename OUT_SYS_DELAY to OUT_EDDN_DO_NOT_DELAY
The sense of this `output` flag has been inverted (always?) for a long time.

1. I have the option "Delay sending until docked" showing as *off* in the UI.
2. My config.output value is `100000000001`.
3. The value of this flag is `4096`, which means 12th bit (starting from 1, not
  zero).
4. So I have the bit set, but the option visibly off.

So, rename this both to be more pertinent to its use *and* to be correct as to
what `True` for it means.
2022-11-22 14:02:13 +00:00
Athanasius
598e54eaa4
EDDNSender: Now properly sends messages to Gateway
Including removing from the queue if it succeeded, or didn't and should be
dropped.
2022-11-22 14:02:12 +00:00
Athanasius
f66a98464e
EDDNSender: Closer to actually sending messages now 2022-11-22 14:02:11 +00:00
Athanasius
2b957d140c
EDDNSender: convert_legacy_file() belongs with "open the database" 2022-11-22 14:02:10 +00:00
Athanasius
0e20f4bc00
EDDNSender: Remove legacy file after migration 2022-11-22 14:02:09 +00:00
Athanasius
f3017d40ec
EDDNSender: Fill out type hints 2022-11-22 14:02:08 +00:00
Athanasius
51fb90b999
EDDN: Change EDDN.close() to call into EDDNSender.close() 2022-11-22 14:02:07 +00:00
Athanasius
c1793ad839
EDDN: Remove EDDN->flush() 2022-11-22 14:02:06 +00:00
Athanasius
09f646a249
EDDNSender: Add delete_message() method
This was tested by temporary code in `convert_legacy_file()` to delete
the last added row once all done.
2022-11-22 14:02:06 +00:00