QApplication takes argc by reference, so copying it in to AppManager's
constructor causes QApplication's to have an invalid reference once AppManager's
constructor returns.
Instead just reference main's argc.
Fix#6641
lupdate keeps moved translations, but marks them as unfinished. Since
context hasn't changed, the meaning of phrases is the same in this case.
Mark all moved translations that were finished before as finished now.
main() couldn't hold its own state since cleanup() needed access to it.
Having the state in a class allows QApplication::aboutToQuit to call
into a member function with access to the state.
Data used in logging still needs to be global due to
qInstallMessageHandler not accepting a void* to get back to this.
Set QGuiApplication attributes before constructing Qapplication as required,
by using comma operator to call an initialization function before construction
all members in the member initializer list.
Keep logic largely unchanged, but with a defined destruction order.
Destruction is still abnormal due to QApplication::aboutToQuit forcing
us to do partial cleanup before QApplication returns, since some OSes
will kill qTox before the QApplication returns.
feat(l10n): update Italian translation from Weblate
feat(l10n): update French translation from Weblate
feat(l10n): update Spanish translation from Weblate
feat(l10n): update Portuguese (Brazil) translation from Weblate
feat(l10n): update French translation from Weblate
feat(l10n): update Spanish translation from Weblate
feat(l10n): update German translation from Weblate
Prior to 2f4e8dc3e8 we would take
the written ToxID and insert that straight into history without
any case check
Must be done prior to schema 11 since even though the UNIQUE constraint
on the peers table is fooled by the different case, the UNIQUE
constraint on the new chats and authors table which are stored as BLOBS
fail during upgrade when the two different case but equal ToxPks
collide.
Unfortunately it can't be done as its own upgrade since 11 was already
merged, and this is a prerequisite for 11 to pass for some users.
Execute prior to starting the split peer upgrade instead of as a larger
transaction for simplicity of the split upgrade, and since executing
this deduplication is idempotent.
Text comparisons in SQL are not case sensitive. Since we want to use this check
to specifically check for case mismatch, cast to blob which then does an exact
comparison.
Row ID's are not guaranteed to match those from the original peer table.
New checking method is equally strict since we already verify the number
of entries, and the SQL schema guarantees that entries are unique.
Register in Widget's constructor so that handler can always get back to
Widget.
Add unregistration functionality so that the handler doesn't run when
we've returned to the login window or when exiting.