Commit Graph
2472 Commits
Author SHA1 Message Date
Athanasius 71858357eb CAPI: Log if no commander in profile() data 2021-03-06 18:54:24 +00:00
Athanasius 67a91cf7d1 CAPI: Handle when we get no 'commander' in returned data.
I was testing the new Steam or Epic CAPI auth.  My EGS account hasn't
yet been used, so has no commander attached.  EDMC thinks the auth has
succeeded in this case, but hitting 'Update' causes it to error because
the returned data is empty.

So, add some checks for lack of 'commander' key and a specific message
"CAPI: No commander data returned" for status line.

Without this there's a KeyError exception thrown, causing the status
line to just get 'commander' in it, which isn't helpful.
2021-03-06 18:54:18 +00:00
Athanasius 5f3bd9be71 Add Steam and EGS to Frontier Auth audiences. 2021-03-06 18:54:12 +00:00
Athanasius 79ad7a596a Pre-Release 4.2.0-beta1: version and changelog Release/4.2.0-beta1 2021-03-06 11:09:05 +00:00
Athanasius 87859720ac Merge pull request #882 from EDCD/enhancement/859-journal-lock-on-change
Update Journal lock if user changes directory
2021-03-05 16:18:40 +00:00
Athanasius 8c2609858f L10n: Removed extraneous 'WIBBLE'. 2021-03-05 16:13:10 +00:00
Athanasius 696d55a165 L10n: Add missing " character 2021-03-05 16:09:30 +00:00
Athanasius d8e9748c88 Small tweak to "couldn't lock" message 2021-03-05 16:02:36 +00:00
Athanasius e430c3b350 Refactor old no_other_instance_running() into handle_edmc_callback_or_foregrounding()
The actual duplicate process checks *used* to be done in this function,
but no longer are.  Instead it's now specifically performing the "is
this an edmc:// auth callback?" check, including the foreground of the
extant process if needs be.
2021-03-05 15:57:53 +00:00
Athanasius f3ef653a8d Change journal changed locking strings to translations. 2021-03-05 15:46:30 +00:00
Athanasius 09cc677a42 L10n: Add new strings for changed journal locking 2021-03-05 15:44:35 +00:00
Athanasius 1663238cd0 Tweak comment about 'not locked' meaning doing edmc:// checks 2021-03-05 15:25:01 +00:00
Athanasius f449286983 Implement retry of locking when journal dir changed.
In case the user does have another EDMC instance running that they need
to kill first.
2021-03-05 15:08:13 +00:00
Athanasius 447cd2c2d7 Remove unused monitor.JournalLock.self.journal_dir_lock 2021-03-05 14:18:34 +00:00
Athanasius 4884f75419 Change self.journal_dir* vars when updating lock.
* Also, need to seek(0) before unlock to be operating on correct range
of bytes with msvcrt.locking().
2021-03-05 13:46:10 +00:00
Athanasius e9c31c3293 Implement releasing of monitor.JournalLock()
* Implement JournalLock.release_lock().
* Renamed other methods to remove journaldir_ prefix.
* Slightly tweak the code flow for obtaining the lock.
* Implement JournalLock.update_lock(), called from AppWindow.postprefs().
2021-03-05 12:45:22 +00:00
Athanasius c0e7be98f8 Move journal locking code into new monitor.JournalLock class 2021-03-05 12:03:54 +00:00
Athanasius 872f380831 PLUGINS.md: Correct and expand on monitor.game_running() documentation 2021-02-18 09:29:52 +00:00
Athanasius 9b1b34f273 Merge pull request #857 from EDCD/enhancement/856-CL-arg-force-local-webserver
Add `--force-localserver-for-auth` CL arg to EDMarketConnector
2021-01-23 09:05:36 +00:00
Athanasius b0f52b3d55 'import fcntl' failing means we need to lie about no other instances. 2021-01-22 14:15:32 +00:00
Athanasius e1757a3a99 protocol: Don't use win32-specific edmc://auth if --force-localserver-for-auth
Tested with a build/install and run with:

	"c:\Program Files (x86)\EDMarketConnector\EDMarketConnector.exe" --force-localserver-for-auth --trace

2021-01-22 12:57:11.020 - TRACE - protocol.ProtocolHandler.__init__:222: Web ser
ver listening on http://localhost:53657/auth
2021-01-22 13:11:42 +00:00
Athanasius 3b2b658881 Add --force-localserver-for-auth CL arg to EDMarketConnector 2021-01-22 13:11:42 +00:00
Athanasius 11b1c436a7 seek(0) before sys.stdout.truncate()
Without this we only truncate to where the file was when we did the
stdout/err redirect.

What I observed was it truncated out the "journal locking" output, but
not anything from a prior run of the program.
2021-01-22 13:10:03 +00:00
Athanasius 831367c30b Need to flush the journal dir lock file contents after write. 2021-01-20 14:45:09 +00:00
Athanasius 8f94a259be Merge pull request #852 from EDCD/enhancement/process-dupe-check-using-folder-lock
Switch to using a journals folder lockfile to enforce single process
2021-01-19 20:44:37 +00:00
Athanasius b3e4eafb14 Properly document the l_param passed to enumwindowsproc() 2021-01-19 20:40:56 +00:00
Athanasius 479bfe58eb Log truncate outside the 'else' & misc logging cleanups and comments
* The "truncate the stdout redirect" code was erroneously inside the
  else of a try.
* Added some comments about exceptions found on Linux when unable to
  open the journals_dir lock file
* Changed 'assuming another process running' logging to not split lines.
* "Couldn't open <journal lock file>" isn't inside no_other_instances()
  so made the message more obvious.
2021-01-19 12:39:32 +00:00
Athanasius 45619622af Catch when we can't open the journal_dir lockfile 2021-01-19 12:27:55 +00:00
Athanasius 0530eecc52 Fully set up logging early, and use it in no_other_instance() checks 2021-01-19 12:21:07 +00:00
Athanasius 7ed90aee83 Comment EnumWindows()/enumwindowsproc() to document function. 2021-01-19 11:54:17 +00:00
Athanasius f86f1ac188 imports tweaks to pass isort 2021-01-18 22:27:53 +00:00
Athanasius d2490673f4 Add some noqa: C901 & remove old SIGTERM -> stack trace
* We're not going to refactor those 'complex' sections any time soon, so
  clean up flake8 output for now.
* No-one still uses "send SIGTERM to see a stack trace".
2021-01-18 22:25:11 +00:00
Athanasius 2be09a5db1 Add back the "restore/foreground the existing window" code 2021-01-18 22:20:01 +00:00
Athanasius 35a476f209 Comments added, some noqa and split a line 2021-01-18 22:18:54 +00:00
Athanasius 1714219c17 Split enumwindowsproc() conditional into multiple lines 2021-01-18 21:54:45 +00:00
Athanasius bf7e21a94f protocol.py: Reinstate 'from config import appname' 2021-01-18 21:42:04 +00:00
Athanasius a75f5b9130 Move sys.stdout redirect to top.
* In `develop` config import will set up logging, so let's head that off
  at the pass and put the redirect right at the top.
* Also moved the EDMCLogging import to right after the config import's
  new position, to emulate `develop` behaviour.
* We *append* on the initial open of the redirect log file.  Then once
  we're sure we're the only process we truncate this.
2021-01-18 21:40:18 +00:00
Athanasius 820d481ca9 Restore old "another window with this handle?" code for edmc://auth
The edmc://auth catch/forward code relies on the old "is there another
window with this handle already?" check, so need to reinstate that code
*after* the lock check in order to forward the message.
2021-01-18 21:28:07 +00:00
Athanasius 377eef9c2b config import needs to be up top for now & misc
* The end of the win32/else conditional was identical, so only do that
  write to the successfully locked file in one place.

* No need to go out of `__main__` only to go straight back in.
2021-01-18 21:15:52 +00:00
Athanasius 397eda8d3e Catch only 'ImportError' for fcntl & 'Exception' for fcntl.flock() 2021-01-18 21:09:12 +00:00
Athanasius bf2a10f88b Catch only 'Exception' off mvscrt.locking()
* It *should* only be a PermissionError, although the docs actually say
  the 'higher' OSError.  This way we will always catch whatever it is.
* The print uses {e!r} so as to make it explicit what the type of the
  exception is.
2021-01-18 21:09:12 +00:00
Athanasius dbba1d24c7 Minor cleanups: Correct filename for lockfile, ...
* The variable is journal_dir_lockfile not lockfile.
* Typehint on journal_dir (likely not needed in `develop` as config.py
  is cleaned up there).
* Tweak the per-platform prints
2021-01-18 21:09:11 +00:00
Athanasius 0263dc628b Added some fcntl-based locking code for !win32
* If fcntl can't be imported it will just let things slide.
2021-01-18 21:09:11 +00:00
Athanasius 5c09ef78f8 Add comment as to why the file open is done at top level 2021-01-18 21:09:11 +00:00
Athanasius ab281bca5a Implement msvcrt.locking() under win32
NB: The locked file *must* be opened at top level in order for the file
handle to not get cleaned up, which also removes the locks.
2021-01-18 21:09:11 +00:00
Athanasius 937a38f0b5 Remove extraneous enforce_single_instance() code & add opening of journal lock file 2021-01-18 21:09:10 +00:00
Athanasius 4689666b13 Strip out old win32 only window handle checking code. 2021-01-18 21:08:15 +00:00
Athanasius 61275b73a1 Merge pull request #851 from EDCD/enhancement/848-suppress-dupe-process-popup
Add --suppress-dupe-process-popup and move enforce_single_instance() call after
2021-01-18 21:05:34 +00:00
Athanasius 7e0c141547 This version of protocol.py doesn't yet need EDMCLogging 2021-01-18 14:53:44 +00:00
Athanasius c67b1b76f7 Move argsparse code to top & do rename enforce_single_instance() -> no_other_instance_running()
1. We need the args available at the top.
2. In `develop` we'd renamed `enforce_single_instance()` to
   `no_other_instance_running()` so that it's obvious it's a function
   returning a boolean, rather than the function that does the
   enforcement.
2021-01-18 14:48:17 +00:00