Currently the build without implicitly included precompiled header
is not supported anyway (because Qt MOC source files do not include
stdafx.h, they include plain headers).
So when we decide to support building without implicitly included
precompiled headers we'll have to fix all the headers anyway.
Now we use only new authorization keys for signing in. If we are
preparing to sign in and we see, that some of the authorization
keys were not generated in this launch, but were read from file, we
destroy all existing auth keys and generate a completely new set.
Some major platform-dependent file operations refactoring.
All methods like "open file", "open file with", "show in folder"
were moved to core/file_utilities module with platform-dependent
backends. All methods interacting with DesktopServices made async.
ShellExecute() call reenters Qt event loop, so each time we
schedule a delayed action (like destroying FileLoader) and after
that we call ShellExecute (in psOpenFile) we destroy it inside
this call and can't use it after.
So now we perform ShellExecute calls only delayed (using task queue).
Now base::lambda can be copied and can wrap any immutable lambda.
For mutable lambdas there is base::lambda_once (which you're
supposed to call only once to pass data through lambda captures,
for example by using std::unique_ptr). Generally base::lambda is
passed by value and base::lambda_once is passed by rvalue reference.
If we start logging in and we know, that some of the authorization
keys were read from the hard drive, not generated, we destroy all
the existing authorization keys and start generating new keys.
Fix a regression introduced in 8d354382a4 which caused an overflow
in _parAnalysis access. We were resizing _parAnalysis array for a
line width without the pending newline character while we used it
for painting a line including the pending newline character. It was
not a problem before, when we were trimming them from the end of
the string, but it results in a buffer overflow and crashes in the
lastest versions. So now we just don't include the newline in the
painted string, so it has exactly the same size as _parAnalysis.
A regression was introduced in 1.0.12 version which led to wrong
activations of the main window: if a custom popup menu was shown
for the tray icon or a custom notification was clicked.
If we want to pin a chat and we have reached the limit we now check
for a deactivated (converted to supergroup) chat that is pinned and
is not in the chats list and just silently unpin it if it is found.
Also possible UB fix for a waveform encoding and decoding.
First try to activate Qt OpenSSL usage and let Qt to set
the locking methods for OpenSSL. Only if Qt didn't set them
we use our own locking methods. Before that we were always
setting our own locking methods and Qt was overriding them
at some random moment of time sometimes leading to a crash.
Media::Player::Instance started to notify about all sound
playback updates, even for video files (which do not have
DocumentData filled in), while Media::Player widgets were
relying on the existance of DocumentData in each update.
OnPropertyValueChanged() is called sometimes couple times a second
and sometimes when AudioMutex is locked already causing a deadlock.
Also some code added to support Desktop Bridge converter to UWP app.