aboutsummaryrefslogtreecommitdiff
path: root/lib/jobs
AgeCommit message (Collapse)Author
2020-12-28BaseJob::initiate: add Q_LIKELYKitsune Ral
...to show the sunny-day case. (cherry picked from commit 5d15e3b23649a54abdb3812c10f4a7d2ce07d7dd)
2020-12-27Fix use-after-free of QNetworkReply in BaseJobNicolas Fella
Usually QNetworkAccessManager expects the user to delete the replies, but when the QNetworkAccessManager itself is deleted it deletes all pending replies (https://code.woboq.org/qt5/qtbase/src/network/access/qnetworkaccessmanager.cpp.html#529). This can lead to use-after-free crashes when d->reply is accessed. By putting the reply into a QPointer the exiting if(d->reply) checks can work properly. (cherry picked from commit 9d854e778d8d6ef8e03e1ea74fe958675b24fd45)
2020-12-24Fix clang-tidy/clazy warningsKitsune Ral
2020-12-23BaseJob: add [[fallthrough]] as clang-tidy saysKitsune Ral
2020-12-23BaseJob: tolerate unexpected error payloadsKitsune Ral
Proxy servers may return arbitrary HTML, for one example; so don't expect to find a valid JSON object in whatever non-empty payload next to a non-2xx HTTP code. Fixes #421.
2020-12-10Fix DELETE jobs with json dataTobias Fella
DeleteDeviceJob requires authentication, but the JSON data is not added for DELETE requests. Since QNetworkAccessManager::deleteResource does not support body data, we need to send a custom request.
2020-08-04BaseJob: go for a retry on IncorrectResponseKitsune Ral
The most frequent occurence of IncorrectResponse so far is a proxy/CDN failure. This is not a grave error; there's a chance that the retry will succeed. In the worst case the job will fail after 3 identical errors (except SyncJob that will try to get through forever - but SyncJob failures should still be indicated in the client's UI in some non-intrusive way).
2020-08-04Cleanup around [BaseJob::]IncorrectResponse[Error]Kitsune Ral
2020-06-26Disable HTTP2; enable pipeliningKitsune Ral
Long run tests over 2+ days kept crashing before this commit but stopped crashing with pipelining on and HTTP2 off.
2020-06-12BaseJob: fail early if the job needs token and there's noneKitsune Ral
2020-06-11BaseJob::prepareError(): be more tolerant to empty error payloadsKitsune Ral
TooManyRequests can come without a payload, apparently.
2020-06-07BaseJob: jsonData() and prepareResult/Error()Kitsune Ral
* JSON response is stored internally in BaseJob, rather than passed around virtual response handlers. This allow to lazily deserialise parts of the JSON response when the client calls for them instead of deserialising upon arrival and storing POD pieces. This is incompatible with the current generated code, so temporarily FTBFS. * BaseJob::loadFromJson() and BaseJob::takeFromJson() have been added to facilitate picking parts of the result as described above in derived job classes. * BaseJob::jsonData(), BaseJob::jsonItems() and (protected) BaseJob::reply() for direct access to the response in its various forms. * To further eliminate boilerplate code in generated job classes, a group of *ExpectedKeys() methods has been added - this allows to reflect the API definition of required response keys in a more "declarative" way, delegating validation to BaseJob. * parseReply() and parseJson() pair turns to singular prepareResult(). Thanks to all the changes above, in most cases it will not need overriding, unlike before. * BaseJob::Private::parseJson() is introduced, to wrap QJsonDocument::parseJson() into something less verbose. This serves a completely different purpose to the former BaseJob::parseJson(). * BaseJob::doCheckReply() takes the place, and the name, of checkReply().
2020-06-07MediaThumbnailJob: be specific about the transformKitsune Ral
What's needed for a thumbnail is normally "scale", not "crop" (as these are defined in The Spec).
2020-06-07BaseJob: expose statusCode as Q_PROPERTYKitsune Ral
2020-06-01Remove the piece of code introduced too early onKitsune Ral
parseJsonDocument() will come later.
2020-05-31BaseJob: use non-deprecated API for Qt 5.15Kitsune Ral
Qt 5.15 renamed HTTP2AllowedAttribute to Http2AllowedAttribute, deprecating the old spelling.
2020-05-31BaseJob::rawData: overload for (even) quicker accessKitsune Ral
No functional changes either.
2020-05-31Move around and format codeKitsune Ral
No functional changes here.
2020-05-12basejob.cpp: nitpicks from clang-formatKitsune Ral
2020-04-14BaseJob::makeRequestUrl(): even more tolerance to slash separatorsKitsune Ral
The code is really defensive now, making sure there's exactly one slash between the base path and the endpoint. It's still very conservative about the path composition otherwise (no normalisation etc.).
2020-04-07BaseJob: don't finish and re-try at the same timeKitsune Ral
Due to a missing return statement, a retry with auth case led to the job being finished and pending at the same time, with no good consequences.
2020-04-06BaseJob: disable pipeliningKitsune Ral
Longer running on RHEL/CentOS 8 leads to crashes that no more occur with disabled pipelining.
2020-04-06Revert changes accidentally sneaked in with the previous commitKitsune Ral
2020-04-06CMakeLists: install header files to a subdirectoryKitsune Ral
This is a Quotient part of #328 fix; QtOlm part is pending.
2020-04-05RequestData: create empty QByteArray by defaultKitsune Ral
May fix #380. Also: remove explicit copying disablers, the unique_ptr<> member disables copying just fine.
2020-03-30BaseJob: check the connection even harderKitsune Ral
2020-03-30BaseJob: shutdown timers on abandoning and destructionKitsune Ral
A part of the fix for #398.
2019-12-12BaseJob::initiate(): fix nullptr dereferencingKitsune Ral
2019-12-12BaseJob: prepare() -> initiate() + refactoring around itKitsune Ral
* BaseJob::initiate() now calls ConnectionData::submit() without relying on Connection to do that * ConnectionData::submit() is now the only site where a job enters Pending state * No more shortcuts to BaseJob::sendRequest(), even retries are sent through the ConnectionData submission queue * Additional validation in BaseJob::initiate() that the request data device is actually open (because QtNetwork API officially requires that, even if you can get away passing a closed QBuffer to it)
2019-12-12Move FileError definition from DownloadFileJob to BaseJobKitsune Ral
Will use it in BaseJob in a later commit.
2019-12-12RequestData: optimise fromData() and preopen the bufferKitsune Ral
It was just a coincidence that QBuffer allowed reading from it without being isReadable() at the moment of starting a job.
2019-12-11BaseJob::StatusCode: offset first error from ErrorLevelKitsune Ral
Q_ENUM seems to resolve int to the first enum identifier with that value so NetworkError == ErrorLevel looks confusing in logs.
2019-11-19BaseJob: Don't send accessToken if not needed; send again on 401Kitsune Ral
The first part closes #358; the second part is a workaround for non-standard cases when endpoints without security by the spec turn out to be secured (in particular, the case of authenticating media servers).
2019-10-20Qualify types in signals and Q_INVOKABLEsKitsune Ral
Because https://doc.qt.io/qt-5/moc.html#limitations . For direct connections that doesn't matter but it very much does for queued ones. Along with this DirectChatsMap and IgnoredUsersList have been moved from Connection:: to Quotient::.
2019-10-02BaseJob::Private: experiment with [[nodiscard]]Kitsune Ral
2019-10-02More fixes for Apple not having deduction guides in stdlibKitsune Ral
2019-09-29BaseJob, urlForLog() -> dumpRequest(): include HTTP verb into log linesKitsune Ral
2019-09-29Rename pieces with qmc/qmatrixclientKitsune Ral
2019-08-27More compliant 'using' for chrono_literalsKitsune Ral
Compilers warn on using 'using ...::operator""s' because they think we're redefining the reserved suffix.
2019-08-27Don't use enumerator attributesKitsune Ral
Anything after enumerators is a problem for moc before Qt 5.12; so we can't use enumerator attributes before then.
2019-08-20BaseJob/ConnectionData: connection-wide rate-limitingKitsune Ral
As before, completely transparent for clients, driven by 529 errors from the server (but cases of rate limiting are signalled by BaseJob::rateLimited). That brings changes to BaseJob API: timeouts now use int64_t and also can be handled in std::chrono terms; aboutToStart() -> aboutToSendRequest(); started() -> sentRequest(). Closes #292.
2019-08-20BaseJob: Status/StatusCode tweaks, cleanup, mo' commentsKitsune Ral
Notably, recovered Status::fromHttpCode() that was introduced in 5722ceaf4bd10c29f1091e3dc5a87f5650ea8c71 but fell victim of a careless merge (so much for introducing non-topical changes in feature branches).
2019-08-16BaseJob: support M_USER_DEACTIVATED error codeKitsune Ral
Closes #344.
2019-08-13Support for server notices rooms (MSC1452)Kitsune Ral
Closes #326.
2019-08-09Namespace: QMatrixClient -> Quotient (with back comp alias)Kitsune Ral
2019-08-09Rename zero-impact stringsKitsune Ral
2019-08-02Apply the new brace wrapping to source filesKitsune Ral
2019-08-02Merge branch 'master' into use-clang-formatKitsune Ral
2019-07-12Minor polishKitsune Ral
2019-07-09Merge branch 'master' into use-clang-formatKitsune Ral