CLOUD: Upload ListDirectory Requests
Lots of checks to avoid JSON-related segfaults added.
This commit is contained in:
parent
f95073f008
commit
f3959e1401
6 changed files with 117 additions and 39 deletions
|
@ -43,15 +43,13 @@ BoxListDirectoryByIdRequest::BoxListDirectoryByIdRequest(BoxStorage *storage, Co
|
|||
|
||||
BoxListDirectoryByIdRequest::~BoxListDirectoryByIdRequest() {
|
||||
_ignoreCallback = true;
|
||||
if (_workingRequest)
|
||||
_workingRequest->finish();
|
||||
if (_workingRequest) _workingRequest->finish();
|
||||
delete _listDirectoryCallback;
|
||||
}
|
||||
|
||||
void BoxListDirectoryByIdRequest::start() {
|
||||
_ignoreCallback = true;
|
||||
if (_workingRequest)
|
||||
_workingRequest->finish();
|
||||
if (_workingRequest) _workingRequest->finish();
|
||||
_files.clear();
|
||||
_ignoreCallback = false;
|
||||
|
||||
|
@ -76,8 +74,11 @@ void BoxListDirectoryByIdRequest::makeRequest(uint32 offset) {
|
|||
|
||||
void BoxListDirectoryByIdRequest::responseCallback(Networking::JsonResponse response) {
|
||||
_workingRequest = nullptr;
|
||||
if (_ignoreCallback)
|
||||
if (_ignoreCallback) {
|
||||
delete response.value;
|
||||
return;
|
||||
}
|
||||
|
||||
if (response.request)
|
||||
_date = response.request->date();
|
||||
|
||||
|
@ -103,7 +104,7 @@ void BoxListDirectoryByIdRequest::responseCallback(Networking::JsonResponse resp
|
|||
Common::JSONObject responseObject = json->asObject();
|
||||
//debug(9, "%s", json->stringify(true).c_str());
|
||||
|
||||
//TODO: check that error is returned the right way
|
||||
//TODO: handle error messages passed as JSON
|
||||
/*
|
||||
if (responseObject.contains("error") || responseObject.contains("error_summary")) {
|
||||
warning("Box returned error: %s", responseObject.getVal("error_summary")->asString().c_str());
|
||||
|
@ -129,22 +130,15 @@ void BoxListDirectoryByIdRequest::responseCallback(Networking::JsonResponse resp
|
|||
|
||||
Common::JSONArray items = responseObject.getVal("entries")->asArray();
|
||||
for (uint32 i = 0; i < items.size(); ++i) {
|
||||
if (!Networking::CurlJsonRequest::jsonIsObject(items[i], "BoxListDirectoryByIdRequest"))
|
||||
continue;
|
||||
if (!Networking::CurlJsonRequest::jsonIsObject(items[i], "BoxListDirectoryByIdRequest")) continue;
|
||||
|
||||
Common::JSONObject item = items[i]->asObject();
|
||||
|
||||
if (!Networking::CurlJsonRequest::jsonContainsString(item, "id", "BoxListDirectoryByIdRequest"))
|
||||
continue;
|
||||
if (!Networking::CurlJsonRequest::jsonContainsString(item, "name", "BoxListDirectoryByIdRequest"))
|
||||
continue;
|
||||
if (!Networking::CurlJsonRequest::jsonContainsString(item, "type", "BoxListDirectoryByIdRequest"))
|
||||
continue;
|
||||
if (!Networking::CurlJsonRequest::jsonContainsString(item, "modified_at", "BoxListDirectoryByIdRequest"))
|
||||
continue;
|
||||
if (!Networking::CurlJsonRequest::jsonContainsString(item, "size", "BoxListDirectoryByIdRequest") &&
|
||||
!Networking::CurlJsonRequest::jsonContainsIntegerNumber(item, "size", "BoxListDirectoryByIdRequest"))
|
||||
continue;
|
||||
if (!Networking::CurlJsonRequest::jsonContainsString(item, "id", "BoxListDirectoryByIdRequest")) continue;
|
||||
if (!Networking::CurlJsonRequest::jsonContainsString(item, "name", "BoxListDirectoryByIdRequest")) continue;
|
||||
if (!Networking::CurlJsonRequest::jsonContainsString(item, "type", "BoxListDirectoryByIdRequest")) continue;
|
||||
if (!Networking::CurlJsonRequest::jsonContainsString(item, "modified_at", "BoxListDirectoryByIdRequest")) continue;
|
||||
if (!Networking::CurlJsonRequest::jsonContainsStringOrIntegerNumber(item, "size", "BoxListDirectoryByIdRequest")) continue;
|
||||
|
||||
Common::String id = item.getVal("id")->asString();
|
||||
Common::String name = item.getVal("name")->asString();
|
||||
|
@ -172,20 +166,16 @@ void BoxListDirectoryByIdRequest::responseCallback(Networking::JsonResponse resp
|
|||
received += responseObject.getVal("limit")->asIntegerNumber();
|
||||
bool hasMore = (received < totalCount);
|
||||
|
||||
if (hasMore)
|
||||
makeRequest(received);
|
||||
else
|
||||
finishListing(_files);
|
||||
if (hasMore) makeRequest(received);
|
||||
else finishListing(_files);
|
||||
|
||||
delete json;
|
||||
}
|
||||
|
||||
void BoxListDirectoryByIdRequest::errorCallback(Networking::ErrorResponse error) {
|
||||
_workingRequest = nullptr;
|
||||
if (_ignoreCallback)
|
||||
return;
|
||||
if (error.request)
|
||||
_date = error.request->date();
|
||||
if (_ignoreCallback) return;
|
||||
if (error.request) _date = error.request->date();
|
||||
finishError(error);
|
||||
}
|
||||
|
||||
|
@ -197,8 +187,7 @@ Common::String BoxListDirectoryByIdRequest::date() const { return _date; }
|
|||
|
||||
void BoxListDirectoryByIdRequest::finishListing(Common::Array<StorageFile> &files) {
|
||||
Request::finishSuccess();
|
||||
if (_listDirectoryCallback)
|
||||
(*_listDirectoryCallback)(Storage::ListDirectoryResponse(this, files));
|
||||
if (_listDirectoryCallback) (*_listDirectoryCallback)(Storage::ListDirectoryResponse(this, files));
|
||||
}
|
||||
|
||||
} // End of namespace Box
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue