Closes#1235
This commit introduce a pretty big change on how app data files are
managed. Instead of having multiple `accounts.json`, `settings.json`,
`user.json`, `countervalues.json`, it now store everything in a single
`app.json`. And it does it in an *async* way, so it should prevent some
frame loss.
Migration will be seamless, and will keep `accounts.json` encryption if set.
So no user action is involved.
This changes comes also with some simplification on password handling
(e.g: no more need to store password hash).
/!\ Disclaimer
During development, I ran about a weird issue (~ 3 or 4 times) when my
data was simply "erased" in the file, so back to onboarding, no more settings,
etc. I suspect race/write condition, something with write-file-atomic, but I
didn't managed to reproduce, everytime I tried. Anyway, I feel not 100% confident
with it, so if you guys can test on your side, with your data (with encryption
key or not) it will help a lot!
- bugfix that if your log file reach 20Mb the exported log is not the correct one
- make the log files rotate to a gzip
- include APDU in logs
- blacklist some commands that was producing way too intensive logs
- don't log the redux action anymore. it's not that useful and way too verbose to log
- a priority queue
- don't sync during critical part of the app
- don't sync more than 2 at same time
- sync when opening a specific account
- sync a selected account in the send/receive modals
- refresh countervalue in send
room for improvment around this:
withLibcore() need to lock less often. typically we lock the whole libcore during a http call triggered by a sync. this blocks the Sign Transaction on device to happen. we also need to be able to interrupt a sync, which is not yet implemented.