* Change systemPreferences.isDarkMode() to nativeTheme.shouldUseDarkColors
* Remove vibrancy parameter to BrowserWindow
* Update curve25519-n; removes context-aware deprecation warning
* Set app.allowRendererProcessReuse = true to remove warning
* Move from deprecated setters to direct property set
* Serialized sender certificates: Store less, store plain object
* isMenuBarAutoHide -> autoHideMenuBar
* UUID: Fix sealed sender indicator on message details screen
* Data._cleanData: Remove function keys, handle null in array
Also:
- run _cleanData when saving attachment download jobs
- remove job from jobs table when the send itself throws error
* _cleanData: Don't dig into strings, booleans, or numbers
* getPropsForMessageDetail: Make it clear what we're reducing
Co-authored-by: Ken Powers <ken@signal.org>
* If focus was set to document.body during archive, focus left pane
* Shortcut Guide: Add space between text and shortcut highlight
* Ensure that draft attachment can be closed with click on X button
* Move to keyDown event for user idle checking
* Additional resiliency around avatars; check for them on on-disk
* Increase timeouts to preserve websocket connection
* On startup, be resilient to malformed JSON in log files
* Don't crash if shell.openExternal returns an error
* Whenever we request a contact/group sync, also request block list
* Avatar popup: Ensure styling is mouse- and keyboard-appropriate
* MainHeader: Create popperRoot on demand, not on mount
* CompositionInput: Disable default Ctrl-/ shortcut
* Update libphonenumber
* Prevent FOUC on startup, use Signal Blue instead
Instead of flashing a white background on startup, the app will show a blue background while everything is loading.
* Make sure tests are rendered on white background
* Use `icon_250.png` as the loading image
* Remove hardcoded 'Loading...' text from template
First, we write the key a whole lot less. We write it on creation, then
never again.
Second, it's in a file we control very closely. Instead of blindly
regenerating the key if the target file generates an error on read,
we block startup unless the error is 'ENOENT' - the file isn't there
at all.
This still allows for the key.txt file to be deleted or corrupted
somehow, but it should be a lot less common than the high-traffic
config.json used for window location and media permissions.