* WIP: Grid export and plugin extraction
* Tweak export process
* Check for recursion of the same assembly load.
* Individual screens aren't always primary?
* Wait for cache to be writable
* Export selection only.
* Update built xml docs
* Ignore invalid archives.
* Need to ensure task is started.
Random occurrence triggered by a plugin's grid update. It's either fairly rare (related to something I was doing in-app) or new with a recent update to the plugin that caused it (just updated it last night).
* Add event-based LogMonitor state changes to better handle batch reads
Pre-reading hackily used read-all to suppress notifications. But that broke some assumptions about what read-all meant. Furthermore, the Core UI told plugins about read-all rather than the log monitor telling them -- which is really what should be telling them.
To address these concerns, LogMonitor now provides an event that both the PluginCore and PluginEventHandler listens to or tracking logging state allowing more granular information about the activities of LogMonitor, including distinguishing between ReadAll and Pre-read batches. Plugins no longer need to track if LogMonitor is in batch-read mode or not -- PluginCore now provides it.
I've also converted all built-in plugins to use the new event-based system. The old system is marked deprecated and will go away once other known contributed plugins have converted to the new system.
* Change LogMonitorState enum to [Flags], drop 'None' state
As requested, and did associated simplifications and cleanup that followed.
* WIP: initial commit for observatory herald
* Plugin error handling refactor
* make error window non-modal
* tidy up plugin error handling
* first pass for basic herald functionality
* corrections for linux env
* Use FNV hash directly instead of managing through dictionary/index file
* resolve audio queuing issue, switch to personal NetCoreAudio fork
* merge cleanup
* add enable setting, populate defaults
* framework xml doc update
* Adjust settings, add style selection, replace locale with demonym in dropdown list.
* Test is position is on screen before saving/loading.
* use a default that's actually in the list
* feat: cosmetic overhaul of native notification popup
* fix: use correct screen default
* feat: move notification test from debug build type to button press
* fix: not debug anymore
* fix: rearrange native notification settings controls
* fix: account for display scaling when positioning notification
* fix: guard against a screen that no longer exists
* fix: safer way to get screens, in case control tree changes
A few changes in preparation for the upcoming Announcer plugin.
1) De-dupe entries in the plugin table in the core settings UI when a plugin implements both Worker and Notifier interfaces.
2) Also add a "Types" column to the plugin table indicating the set of implemented interfaces found.
3) Wrap the pre-reading logic in "Read-all" scope to properly suppress a stampede of notifications (particularly audio ones) when starting the log monitor.
4) Fix the int setting UI. It rendered incorrectly, it didn't get the value from the settings class, nor wrote it back. Also implemented optional value bounding using the new setting attribute (see the related Framework PR).
5) Applied similar fixes to string setting (addressed rendering, write-back although untested).
6) Minor visual fixes (height/vertical alignment) for non-boolean settings to address cut-off/overlapping inputs.
Sorry for the larger PR, but these *should* be all the loose ends before we could consider including Basic Announcer...
Upon arrival of new records to the backing ObservableCollection, scroll the DataGrid to the last item. However, when the DataGrid is initialized, there's not yet a data context set, so when that happens, then we can listen to the CollectionChanged event to trigger scrolling (only really needed for additions).
In passing, also set the DataGrid to ReadOnly.
In the other two files, minor simplifications/cleanup.