Index: autotests/calendar/data/calendar1_create_request.txt =================================================================== --- autotests/calendar/data/calendar1_create_request.txt +++ autotests/calendar/data/calendar1_create_request.txt @@ -1,4 +1,4 @@ -POST https://www.googleapis.com/calendar/v3/calendars +POST https://www.googleapis.com/calendar/v3/calendars?prettyPrint=false Content-Type: application/json { Index: autotests/calendar/data/calendar1_fetch_request.txt =================================================================== --- autotests/calendar/data/calendar1_fetch_request.txt +++ autotests/calendar/data/calendar1_fetch_request.txt @@ -1 +1 @@ -GET https://www.googleapis.com/calendar/v3/users/me/calendarList/averylongtvshowscalendarid@group.calendar.google.com +GET https://www.googleapis.com/calendar/v3/users/me/calendarList/averylongtvshowscalendarid@group.calendar.google.com?prettyPrint=false Index: autotests/calendar/data/calendar1_modify_request.txt =================================================================== --- autotests/calendar/data/calendar1_modify_request.txt +++ autotests/calendar/data/calendar1_modify_request.txt @@ -1,4 +1,4 @@ -PUT https://www.googleapis.com/calendar/v3/calendars/averylongtvshowscalendarid@group.calendar.google.com +PUT https://www.googleapis.com/calendar/v3/calendars/averylongtvshowscalendarid@group.calendar.google.com?prettyPrint=false Content-Type: application/json { Index: autotests/calendar/data/calendar2_create_request.txt =================================================================== --- autotests/calendar/data/calendar2_create_request.txt +++ autotests/calendar/data/calendar2_create_request.txt @@ -1,4 +1,4 @@ -POST https://www.googleapis.com/calendar/v3/calendars +POST https://www.googleapis.com/calendar/v3/calendars?prettyPrint=false Content-Type: application/json { Index: autotests/calendar/data/calendar2_modify_request.txt =================================================================== --- autotests/calendar/data/calendar2_modify_request.txt +++ autotests/calendar/data/calendar2_modify_request.txt @@ -1,4 +1,4 @@ -PUT https://www.googleapis.com/calendar/v3/calendars/MockAccount +PUT https://www.googleapis.com/calendar/v3/calendars/MockAccount?prettyPrint=false Content-Type: application/json { Index: autotests/calendar/data/calendars_fetch_page1_request.txt =================================================================== --- autotests/calendar/data/calendars_fetch_page1_request.txt +++ autotests/calendar/data/calendars_fetch_page1_request.txt @@ -1 +1 @@ -GET https://www.googleapis.com/calendar/v3/users/me/calendarList +GET https://www.googleapis.com/calendar/v3/users/me/calendarList?prettyPrint=false Index: autotests/calendar/data/calendars_fetch_page2_request.txt =================================================================== --- autotests/calendar/data/calendars_fetch_page2_request.txt +++ autotests/calendar/data/calendars_fetch_page2_request.txt @@ -1 +1 @@ -GET https://www.googleapis.com/calendar/v3/users/me/calendarList?pageToken=Eh0KEmc6MDAwMDAwMTQyNjVlYWI3MhDond_S9JTaAg%3D%3D +GET https://www.googleapis.com/calendar/v3/users/me/calendarList?pageToken=Eh0KEmc6MDAwMDAwMTQyNjVlYWI3MhDond_S9JTaAg%3D%3D&prettyPrint=false Index: autotests/calendar/data/event1_create_request.txt =================================================================== --- autotests/calendar/data/event1_create_request.txt +++ autotests/calendar/data/event1_create_request.txt @@ -1,4 +1,4 @@ -POST https://www.googleapis.com/calendar/v3/calendars/MockAccount/events?sendUpdates=all +POST https://www.googleapis.com/calendar/v3/calendars/MockAccount/events?sendUpdates=all&prettyPrint=false Content-Type: application/json { Index: autotests/calendar/data/event1_fetch_request.txt =================================================================== --- autotests/calendar/data/event1_fetch_request.txt +++ autotests/calendar/data/event1_fetch_request.txt @@ -1 +1 @@ -GET https://www.googleapis.com/calendar/v3/calendars/MockAccount/events/3if6lf59tove1e037baa75l54t +GET https://www.googleapis.com/calendar/v3/calendars/MockAccount/events/3if6lf59tove1e037baa75l54t?prettyPrint=false Index: autotests/calendar/data/event1_modify_request.txt =================================================================== --- autotests/calendar/data/event1_modify_request.txt +++ autotests/calendar/data/event1_modify_request.txt @@ -1,4 +1,4 @@ -PUT https://www.googleapis.com/calendar/v3/calendars/MockAccount/events/3if6lf59tove1e037baa75l54t?sendUpdates=all +PUT https://www.googleapis.com/calendar/v3/calendars/MockAccount/events/3if6lf59tove1e037baa75l54t?sendUpdates=all&prettyPrint=false Content-Type: application/json { Index: autotests/calendar/data/event2_create_request.txt =================================================================== --- autotests/calendar/data/event2_create_request.txt +++ autotests/calendar/data/event2_create_request.txt @@ -1,4 +1,4 @@ -POST https://www.googleapis.com/calendar/v3/calendars/MockAccount/events?sendUpdates=all +POST https://www.googleapis.com/calendar/v3/calendars/MockAccount/events?sendUpdates=all&prettyPrint=false Content-Type: application/json { Index: autotests/calendar/data/event2_modify_request.txt =================================================================== --- autotests/calendar/data/event2_modify_request.txt +++ autotests/calendar/data/event2_modify_request.txt @@ -1,4 +1,4 @@ -PUT https://www.googleapis.com/calendar/v3/calendars/MockAccount/events/_60o3iopicdhjib9g6ss32b9k70p68b9ocdhm8b9ocphjioj6clh36c9j70?sendUpdates=all +PUT https://www.googleapis.com/calendar/v3/calendars/MockAccount/events/_60o3iopicdhjib9g6ss32b9k70p68b9ocdhm8b9ocphjioj6clh36c9j70?sendUpdates=all&prettyPrint=false Content-Type: application/json { Index: autotests/calendar/data/events_fetch_page1_request.txt =================================================================== --- autotests/calendar/data/events_fetch_page1_request.txt +++ autotests/calendar/data/events_fetch_page1_request.txt @@ -1 +1 @@ -GET https://www.googleapis.com/calendar/v3/calendars/MockAccount/events?showDeleted=true +GET https://www.googleapis.com/calendar/v3/calendars/MockAccount/events?showDeleted=true&prettyPrint=false Index: autotests/calendar/data/events_fetch_page2_request.txt =================================================================== --- autotests/calendar/data/events_fetch_page2_request.txt +++ autotests/calendar/data/events_fetch_page2_request.txt @@ -1 +1 @@ -GET https://www.googleapis.com/calendar/v3/calendars/MockAccount/events?showDeleted=true&pageToken=ClEKQ182a3MzaWRoazZvcWpnYzlsNnNyM2NjcGc2OHBqMmUyMGRsbm00cWJjY2xwbmlyajM1cGptdXJyN2RoaWlzb3JmZGsYASCAgIDqg5PLwhIaDQgAEgAY-KP05dmb2gI%3D +GET https://www.googleapis.com/calendar/v3/calendars/MockAccount/events?showDeleted=true&prettyPrint=false&pageToken=ClEKQ182a3MzaWRoazZvcWpnYzlsNnNyM2NjcGc2OHBqMmUyMGRsbm00cWJjY2xwbmlyajM1cGptdXJyN2RoaWlzb3JmZGsYASCAgIDqg5PLwhIaDQgAEgAY-KP05dmb2gI%3D Index: autotests/calendar/data/freebusy1_query_request.txt =================================================================== --- autotests/calendar/data/freebusy1_query_request.txt +++ autotests/calendar/data/freebusy1_query_request.txt @@ -1,4 +1,4 @@ -POST https://www.googleapis.com/calendar/v3/freeBusy +POST https://www.googleapis.com/calendar/v3/freeBusy?prettyPrint=false Content-Type: application/json { Index: autotests/contacts/data/contact1_create_request.txt =================================================================== --- autotests/contacts/data/contact1_create_request.txt +++ autotests/contacts/data/contact1_create_request.txt @@ -1,4 +1,4 @@ -POST https://www.google.com/m8/feeds/contacts/MockAccount/full +POST https://www.google.com/m8/feeds/contacts/MockAccount/full?prettyPrint=false GData-Version: 3.0 Content-Type: application/atom+xml Index: autotests/contacts/data/contact1_fetch_photo_request.txt =================================================================== --- autotests/contacts/data/contact1_fetch_photo_request.txt +++ autotests/contacts/data/contact1_fetch_photo_request.txt @@ -1,2 +1,2 @@ -GET https://www.google.com/m8/feeds/photos/media/MockAccount/68f6ee7a8a57c4cc +GET https://www.google.com/m8/feeds/photos/media/MockAccount/68f6ee7a8a57c4cc?prettyPrint=false GData-Version: 3.0 Index: autotests/contacts/data/contact1_fetch_request.txt =================================================================== --- autotests/contacts/data/contact1_fetch_request.txt +++ autotests/contacts/data/contact1_fetch_request.txt @@ -1,2 +1,2 @@ -GET https://www.google.com/m8/feeds/contacts/MockAccount/full/68f6ee7a8a57c4cc?alt=json +GET https://www.google.com/m8/feeds/contacts/MockAccount/full/68f6ee7a8a57c4cc?alt=json&prettyPrint=false GData-Version: 3.0 Index: autotests/contacts/data/contact1_modify_request.txt =================================================================== --- autotests/contacts/data/contact1_modify_request.txt +++ autotests/contacts/data/contact1_modify_request.txt @@ -1,4 +1,4 @@ -PUT https://www.google.com/m8/feeds/contacts/MockAccount/full/68f6ee7a8a57c4cc +PUT https://www.google.com/m8/feeds/contacts/MockAccount/full/68f6ee7a8a57c4cc?prettyPrint=false GData-Version: 3.0 If-Match: * Content-Type: application/atom+xml Index: autotests/contacts/data/contact2_create_request.txt =================================================================== --- autotests/contacts/data/contact2_create_request.txt +++ autotests/contacts/data/contact2_create_request.txt @@ -1,4 +1,4 @@ -POST https://www.google.com/m8/feeds/contacts/MockAccount/full +POST https://www.google.com/m8/feeds/contacts/MockAccount/full?prettyPrint=false GData-Version: 3.0 Content-Type: application/atom+xml Index: autotests/contacts/data/contact2_fetch_photo_request.txt =================================================================== --- autotests/contacts/data/contact2_fetch_photo_request.txt +++ autotests/contacts/data/contact2_fetch_photo_request.txt @@ -1,2 +1,2 @@ -GET https://www.google.com/m8/feeds/photos/media/MockAccount/2d71e4bb897f47a8 +GET https://www.google.com/m8/feeds/photos/media/MockAccount/2d71e4bb897f47a8?prettyPrint=false GData-Version: 3.0 Index: autotests/contacts/data/contact2_modify_request.txt =================================================================== --- autotests/contacts/data/contact2_modify_request.txt +++ autotests/contacts/data/contact2_modify_request.txt @@ -1,4 +1,4 @@ -PUT https://www.google.com/m8/feeds/contacts/MockAccount/full/2d71e4bb897f47a8 +PUT https://www.google.com/m8/feeds/contacts/MockAccount/full/2d71e4bb897f47a8?prettyPrint=false GData-Version: 3.0 Content-Type: application/atom+xml If-Match: * Index: autotests/contacts/data/contacts_fetch_page1_request.txt =================================================================== --- autotests/contacts/data/contacts_fetch_page1_request.txt +++ autotests/contacts/data/contacts_fetch_page1_request.txt @@ -1,2 +1,2 @@ -GET https://www.google.com/m8/feeds/contacts/MockAccount/full?alt=json&showdeleted=true +GET https://www.google.com/m8/feeds/contacts/MockAccount/full?alt=json&showdeleted=true&prettyPrint=false Gdata-version: 3.0 Index: autotests/contacts/data/contacts_fetch_page2_request.txt =================================================================== --- autotests/contacts/data/contacts_fetch_page2_request.txt +++ autotests/contacts/data/contacts_fetch_page2_request.txt @@ -1,2 +1,2 @@ -GET https://www.google.com/m8/feeds/contacts/MockAccount/full?max-results=1&showdeleted=true&start-index=2&alt=json +GET https://www.google.com/m8/feeds/contacts/MockAccount/full?max-results=1&showdeleted=true&start-index=2&alt=json&prettyPrint=false Gdata-version: 3.0 Index: autotests/contacts/data/contacts_group1_create_request.txt =================================================================== --- autotests/contacts/data/contacts_group1_create_request.txt +++ autotests/contacts/data/contacts_group1_create_request.txt @@ -1,4 +1,4 @@ -POST https://www.google.com/m8/feeds/groups/MockAccount/full +POST https://www.google.com/m8/feeds/groups/MockAccount/full?prettyPrint=false Content-Type: application/atom+xml GData-Version: 3.0 Index: autotests/contacts/data/contacts_group1_fetch_request.txt =================================================================== --- autotests/contacts/data/contacts_group1_fetch_request.txt +++ autotests/contacts/data/contacts_group1_fetch_request.txt @@ -1,3 +1,3 @@ -GET https://www.google.com/m8/feeds/groups/MockAccount/full?alt=json +GET https://www.google.com/m8/feeds/groups/MockAccount/full?alt=json&prettyPrint=false GData-Version: 3.0 Index: autotests/contacts/data/contacts_group1_modify_request.txt =================================================================== --- autotests/contacts/data/contacts_group1_modify_request.txt +++ autotests/contacts/data/contacts_group1_modify_request.txt @@ -1,4 +1,4 @@ -POST https://www.google.com/m8/feeds/groups/MockAccount/full/4ca7b44c093feab0 +POST https://www.google.com/m8/feeds/groups/MockAccount/full/4ca7b44c093feab0?prettyPrint=false Content-Type: application/atom+xml GData-Version: 3.0 If-Match: * Index: autotests/contacts/data/contacts_group2_create_request.txt =================================================================== --- autotests/contacts/data/contacts_group2_create_request.txt +++ autotests/contacts/data/contacts_group2_create_request.txt @@ -1,4 +1,4 @@ -POST https://www.google.com/m8/feeds/groups/MockAccount/full +POST https://www.google.com/m8/feeds/groups/MockAccount/full?prettyPrint=false Content-Type: application/atom+xml GData-Version: 3.0 Index: autotests/contacts/data/contacts_group2_modify_request.txt =================================================================== --- autotests/contacts/data/contacts_group2_modify_request.txt +++ autotests/contacts/data/contacts_group2_modify_request.txt @@ -1,4 +1,4 @@ -POST https://www.google.com/m8/feeds/groups/MockAccount/full/12881c7f0a03cd16 +POST https://www.google.com/m8/feeds/groups/MockAccount/full/12881c7f0a03cd16?prettyPrint=false Content-Type: application/atom+xml GData-Version: 3.0 If-Match: * Index: autotests/contacts/data/contacts_groups_fetch_page1_request.txt =================================================================== --- autotests/contacts/data/contacts_groups_fetch_page1_request.txt +++ autotests/contacts/data/contacts_groups_fetch_page1_request.txt @@ -1,2 +1,2 @@ -GET https://www.google.com/m8/feeds/groups/MockAccount/full?alt=json +GET https://www.google.com/m8/feeds/groups/MockAccount/full?alt=json&prettyPrint=false GData-Version: 3.0 Index: autotests/contacts/data/contacts_groups_fetch_page2_request.txt =================================================================== --- autotests/contacts/data/contacts_groups_fetch_page2_request.txt +++ autotests/contacts/data/contacts_groups_fetch_page2_request.txt @@ -1,2 +1,2 @@ -GET https://www.google.com/m8/feeds/groups/MockAccount/full?alt=json&start-index=2 +GET https://www.google.com/m8/feeds/groups/MockAccount/full?alt=json&start-index=2&prettyPrint=false GData-Version: 3.0 Index: autotests/core/createjobtest.cpp =================================================================== --- autotests/core/createjobtest.cpp +++ autotests/core/createjobtest.cpp @@ -48,7 +48,6 @@ void start() override { QNetworkRequest request(mUrl); - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); enqueueRequest(request, mData); } @@ -84,19 +83,19 @@ QTest::addColumn>("scenarios"); QTest::newRow("success") << Scenarios{ - { QUrl(QStringLiteral("https://example.test/request/data")), QNetworkAccessManager::PostOperation, + { QUrl(QStringLiteral("https://example.test/request/data?prettyPrint=false")), QNetworkAccessManager::PostOperation, "New data", 200, "Data created" } }; QTest::newRow("creation failed") << Scenarios{ - { QUrl(QStringLiteral("https://example.test/request/data")), QNetworkAccessManager::PostOperation, + { QUrl(QStringLiteral("https://example.test/request/data?prettyPrint=false")), QNetworkAccessManager::PostOperation, "New data", KGAPI2::Forbidden, {} } }; QTest::newRow("redirect") << Scenarios{ - { QUrl(QStringLiteral("https://example.test/request/data")), QNetworkAccessManager::PostOperation, + { QUrl(QStringLiteral("https://example.test/request/data?prettyPrint=false")), QNetworkAccessManager::PostOperation, "New data", KGAPI2::TemporarilyMoved, "https://example.test/moved/data" }, - { QUrl(QStringLiteral("https://example.test/moved/data")), QNetworkAccessManager::PostOperation, + { QUrl(QStringLiteral("https://example.test/moved/data?prettyPrint=false")), QNetworkAccessManager::PostOperation, "New data", KGAPI2::OK, "Data created" } }; } Index: autotests/core/data/accountinfo_fetch_request.txt =================================================================== --- autotests/core/data/accountinfo_fetch_request.txt +++ autotests/core/data/accountinfo_fetch_request.txt @@ -1 +1 @@ -GET https://www.googleapis.com/oauth2/v1/userinfo +GET https://www.googleapis.com/oauth2/v1/userinfo?prettyPrint=false Index: autotests/core/data/accountmanager_part1_request.txt =================================================================== --- autotests/core/data/accountmanager_part1_request.txt +++ autotests/core/data/accountmanager_part1_request.txt @@ -1,4 +1,4 @@ -POST https://accounts.google.com/o/oauth2/token +POST https://accounts.google.com/o/oauth2/token?prettyPrint=false Content-Type: application/x-www-form-urlencoded client_id=Key1&client_secret=Secret1&code=TheCakeIsALie&redirect_uri=http://127.0.0.1:42413&grant_type=authorization_code \ No newline at end of file Index: autotests/core/data/accountmanager_refresh_request.txt =================================================================== --- autotests/core/data/accountmanager_refresh_request.txt +++ autotests/core/data/accountmanager_refresh_request.txt @@ -1,4 +1,4 @@ -POST https://accounts.google.com/o/oauth2/token +POST https://accounts.google.com/o/oauth2/token?prettyPrint=false Content-Type: application/x-www-form-urlencoded client_id=Key1&client_secret=Secret1&refresh_token=FakeRefreshToken&grant_type=refresh_token \ No newline at end of file Index: autotests/core/fetchjobtest.cpp =================================================================== --- autotests/core/fetchjobtest.cpp +++ autotests/core/fetchjobtest.cpp @@ -53,9 +53,6 @@ void start() override { QNetworkRequest request(mUrl); - if (account()) { - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); - } enqueueRequest(request); } @@ -90,19 +87,19 @@ QTest::addColumn>("scenarios"); QTest::newRow("success") << Scenarios{ - { QUrl(QStringLiteral("https://example.test/request/data")), QNetworkAccessManager::GetOperation, + { QUrl(QStringLiteral("https://example.test/request/data?prettyPrint=false")), QNetworkAccessManager::GetOperation, {}, 200, "Test Response", false } }; QTest::newRow("not found") << Scenarios{ - { QUrl(QStringLiteral("https://example.test/does/not/exist")), QNetworkAccessManager::GetOperation, + { QUrl(QStringLiteral("https://example.test/does/not/exist?prettyPrint=false")), QNetworkAccessManager::GetOperation, {}, KGAPI2::NotFound, {}, false } }; QTest::newRow("redirect") << Scenarios{ - { QUrl(QStringLiteral("https://example.test/request/data")), QNetworkAccessManager::GetOperation, + { QUrl(QStringLiteral("https://example.test/request/data?prettyPrint=false")), QNetworkAccessManager::GetOperation, {}, KGAPI2::TemporarilyMoved, "https://example.test/moved/data", false }, - { QUrl(QStringLiteral("https://example.test/moved/data")), QNetworkAccessManager::GetOperation, + { QUrl(QStringLiteral("https://example.test/moved/data?prettyPrint=false")), QNetworkAccessManager::GetOperation, {}, KGAPI2::OK, "Here's your data", false } }; } @@ -126,12 +123,12 @@ QTest::addColumn>("scenarios"); QTest::newRow("success") << Scenarios{ - { QUrl(QStringLiteral("https://example.test/request/data")), QNetworkAccessManager::GetOperation, + { QUrl(QStringLiteral("https://example.test/request/data?prettyPrint=false")), QNetworkAccessManager::GetOperation, {}, 200, "Response" } }; QTest::newRow("token expired") << Scenarios{ - { QUrl(QStringLiteral("https://example.test/request/data")), QNetworkAccessManager::GetOperation, + { QUrl(QStringLiteral("https://example.test/request/data?prettyPrint=false")), QNetworkAccessManager::GetOperation, {}, KGAPI2::Unauthorized, {} } }; } Index: autotests/drive/aboutfetchjobtest.cpp =================================================================== --- autotests/drive/aboutfetchjobtest.cpp +++ autotests/drive/aboutfetchjobtest.cpp @@ -17,7 +17,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . */ - +#include #include #include @@ -32,7 +32,12 @@ using namespace KGAPI2; +namespace { + static const char *LimitedFieldTag = "limited fields"; +} + Q_DECLARE_METATYPE(QList) +Q_DECLARE_METATYPE(KGAPI2::Drive::AboutPtr) class AboutFetchJobTest : public QObject { @@ -43,17 +48,40 @@ NetworkAccessManagerFactory::setFactory(new FakeNetworkAccessManagerFactory); } + void testFetch_data() + { + QTest::addColumn>("scenarios"); + QTest::addColumn("about"); + + QTest::newRow("") + << QList{ + scenarioFromFile(QFINDTESTDATA("data/about_fetch_request.txt"), + QFINDTESTDATA("data/about_fetch_response.txt")) + } + << aboutFromFile(QFINDTESTDATA("data/about.json")); + + QTest::newRow(LimitedFieldTag) + << QList{ + scenarioFromFile(QFINDTESTDATA("data/about_fetch_limited_fields_request.txt"), + QFINDTESTDATA("data/about_fetch_limited_fields_response.txt")) + } + << aboutFromFile(QFINDTESTDATA("data/about_limited_fields.json")); + } + void testFetch() { - FakeNetworkAccessManagerFactory::get()->setScenarios({ - scenarioFromFile(QFINDTESTDATA("data/about_fetch_request.txt"), - QFINDTESTDATA("data/about_fetch_response.txt")) + QFETCH(QList, scenarios); + QFETCH(KGAPI2::Drive::AboutPtr, about); - }); - const auto about = aboutFromFile(QFINDTESTDATA("data/about.json")); + FakeNetworkAccessManagerFactory::get()->setScenarios(scenarios); auto account = AccountPtr::create(QStringLiteral("MockAccount"), QStringLiteral("MockToken")); auto job = new Drive::AboutFetchJob(account, nullptr); + + if (strcmp(LimitedFieldTag, QTest::currentDataTag()) == 0) { + job->setFields({ Drive::About::Fields::Kind, Drive::About::Fields::PermissionId}); + } + QVERIFY(execJob(job)); const auto items = job->items(); QCOMPARE(items.count(), 1); Index: autotests/drive/data/about_fetch_limited_fields_request.txt =================================================================== --- autotests/drive/data/about_fetch_limited_fields_request.txt +++ autotests/drive/data/about_fetch_limited_fields_request.txt @@ -1 +1 @@ -GET https://www.googleapis.com/drive/v2/about?includeSubscribed=true +GET https://www.googleapis.com/drive/v2/about?includeSubscribed=true&fields=kind,permissionId&prettyPrint=false Index: autotests/drive/data/about_fetch_limited_fields_response.txt =================================================================== --- /dev/null +++ autotests/drive/data/about_fetch_limited_fields_response.txt @@ -0,0 +1,7 @@ +HTTP/1.1 200 OK +content-type: application/json; charset=UTF-8 + +{ + "kind": "drive#about", + "permissionId": "07857126568572968161" +} Index: autotests/drive/data/about_fetch_request.txt =================================================================== --- autotests/drive/data/about_fetch_request.txt +++ autotests/drive/data/about_fetch_request.txt @@ -1 +1 @@ -GET https://www.googleapis.com/drive/v2/about?includeSubscribed=true +GET https://www.googleapis.com/drive/v2/about?includeSubscribed=true&prettyPrint=false Index: autotests/drive/data/about_limited_fields.json =================================================================== --- /dev/null +++ autotests/drive/data/about_limited_fields.json @@ -0,0 +1,4 @@ +{ + "kind": "drive#about", + "permissionId": "07857126568572968161" +} Index: autotests/drive/data/change1_fetch_request.txt =================================================================== --- autotests/drive/data/change1_fetch_request.txt +++ autotests/drive/data/change1_fetch_request.txt @@ -1 +1 @@ -GET https://www.googleapis.com/drive/v2/changes/194 +GET https://www.googleapis.com/drive/v2/changes/194?prettyPrint=false Index: autotests/drive/data/changes_fetch_page1_request.txt =================================================================== --- autotests/drive/data/changes_fetch_page1_request.txt +++ autotests/drive/data/changes_fetch_page1_request.txt @@ -1 +1 @@ -GET https://www.googleapis.com/drive/v2/changes?includeDeleted=true&includeSubscribed=true +GET https://www.googleapis.com/drive/v2/changes?includeDeleted=true&includeSubscribed=true&prettyPrint=false Index: autotests/drive/data/changes_fetch_page2_request.txt =================================================================== --- autotests/drive/data/changes_fetch_page2_request.txt +++ autotests/drive/data/changes_fetch_page2_request.txt @@ -1 +1 @@ -GET https://www.googleapis.com/drive/v2/changes?includeDeleted=true&includeSubscribed=true&pageToken=195 +GET https://www.googleapis.com/drive/v2/changes?includeDeleted=true&includeSubscribed=true&pageToken=195&prettyPrint=false Index: autotests/drive/data/file1_copy_request.txt =================================================================== --- autotests/drive/data/file1_copy_request.txt +++ autotests/drive/data/file1_copy_request.txt @@ -1,4 +1,4 @@ -POST https://www.googleapis.com/drive/v2/files/abcdefghijklmnopqrstuvwxyz/copy?convert=false&ocr=false&pinned=false +POST https://www.googleapis.com/drive/v2/files/abcdefghijklmnopqrstuvwxyz/copy?convert=false&ocr=false&pinned=false&prettyPrint=false Content-Type: application/json { Index: autotests/drive/data/file1_create_request.txt =================================================================== --- autotests/drive/data/file1_create_request.txt +++ autotests/drive/data/file1_create_request.txt @@ -1,4 +1,4 @@ -POST https://www.googleapis.com/drive/v2/files?convert=false&ocr=false&pinned=false&useContentAsIndexableText=false +POST https://www.googleapis.com/drive/v2/files?convert=false&ocr=false&pinned=false&useContentAsIndexableText=false&prettyPrint=false Content-Type: application/json { Index: autotests/drive/data/file2_copy_request.txt =================================================================== --- autotests/drive/data/file2_copy_request.txt +++ autotests/drive/data/file2_copy_request.txt @@ -1,4 +1,4 @@ -POST https://www.googleapis.com/drive/v2/files/abc123def456ghi789/copy?convert=false&ocr=false&pinned=false +POST https://www.googleapis.com/drive/v2/files/abc123def456ghi789/copy?convert=false&ocr=false&pinned=false&prettyPrint=false Content-Type: application/json { Index: autotests/drive/data/teamdrive_create_request.txt =================================================================== --- autotests/drive/data/teamdrive_create_request.txt +++ autotests/drive/data/teamdrive_create_request.txt @@ -1,4 +1,4 @@ -POST https://www.googleapis.com/drive/v2/teamdrives?requestId=MockRequestId +POST https://www.googleapis.com/drive/v2/teamdrives?requestId=MockRequestId&prettyPrint=false { "kind": "drive#teamDrive", Index: autotests/drive/data/teamdrive_fetch_request.txt =================================================================== --- autotests/drive/data/teamdrive_fetch_request.txt +++ autotests/drive/data/teamdrive_fetch_request.txt @@ -1 +1 @@ -GET https://www.googleapis.com/drive/v2/teamdrives +GET https://www.googleapis.com/drive/v2/teamdrives?prettyPrint=false Index: autotests/drive/data/teamdrive_modify_request.txt =================================================================== --- autotests/drive/data/teamdrive_modify_request.txt +++ autotests/drive/data/teamdrive_modify_request.txt @@ -1,4 +1,4 @@ -POST https://www.googleapis.com/drive/v2/teamdrives/0APqEW6eViiMXUk9PVA +POST https://www.googleapis.com/drive/v2/teamdrives/0APqEW6eViiMXUk9PVA?prettyPrint=false { "kind": "drive#teamDrive", Index: autotests/tasks/data/task1_create_request.txt =================================================================== --- autotests/tasks/data/task1_create_request.txt +++ autotests/tasks/data/task1_create_request.txt @@ -1,4 +1,4 @@ -POST https://www.googleapis.com/tasks/v1/lists/MockAccount/tasks +POST https://www.googleapis.com/tasks/v1/lists/MockAccount/tasks?prettyPrint=false Content-Type: application/json { Index: autotests/tasks/data/task1_fetch_request.txt =================================================================== --- autotests/tasks/data/task1_fetch_request.txt +++ autotests/tasks/data/task1_fetch_request.txt @@ -1 +1 @@ -GET https://www.googleapis.com/tasks/v1/lists/MockAccount/tasks/MDk5OTU2NTg1OTM5NjgzODgzMDk6MDoxOTU0MzA5MzY1 +GET https://www.googleapis.com/tasks/v1/lists/MockAccount/tasks/MDk5OTU2NTg1OTM5NjgzODgzMDk6MDoxOTU0MzA5MzY1?prettyPrint=false Index: autotests/tasks/data/task1_modify_request.txt =================================================================== --- autotests/tasks/data/task1_modify_request.txt +++ autotests/tasks/data/task1_modify_request.txt @@ -1,4 +1,4 @@ -PUT https://www.googleapis.com/tasks/v1/lists/MockAccount/tasks/MDk5OTU2NTg1OTM5NjgzODgzMDk6MDoxOTU0MzA5MzY1 +PUT https://www.googleapis.com/tasks/v1/lists/MockAccount/tasks/MDk5OTU2NTg1OTM5NjgzODgzMDk6MDoxOTU0MzA5MzY1?prettyPrint=false Content-Type: application/json { Index: autotests/tasks/data/task1_move_request.txt =================================================================== --- autotests/tasks/data/task1_move_request.txt +++ autotests/tasks/data/task1_move_request.txt @@ -1 +1 @@ -POST https://www.googleapis.com/tasks/v1/lists/MockAccount/tasks/MDk5OTU2NTg1OTM5NjgzODgzMDk6MDoxOTU0MzA5MzY1/move +POST https://www.googleapis.com/tasks/v1/lists/MockAccount/tasks/MDk5OTU2NTg1OTM5NjgzODgzMDk6MDoxOTU0MzA5MzY1/move?prettyPrint=false Index: autotests/tasks/data/task2_create_request.txt =================================================================== --- autotests/tasks/data/task2_create_request.txt +++ autotests/tasks/data/task2_create_request.txt @@ -1,4 +1,4 @@ -POST https://www.googleapis.com/tasks/v1/lists/MockAccount/tasks +POST https://www.googleapis.com/tasks/v1/lists/MockAccount/tasks?prettyPrint=false Content-Type: application/json { Index: autotests/tasks/data/task2_modify_request.txt =================================================================== --- autotests/tasks/data/task2_modify_request.txt +++ autotests/tasks/data/task2_modify_request.txt @@ -1,4 +1,4 @@ -PUT https://www.googleapis.com/tasks/v1/lists/MockAccount/tasks/MDk5OTU2NTg1OTM5NjgzODgzMDk6MDoxNTczOTM0NTg3 +PUT https://www.googleapis.com/tasks/v1/lists/MockAccount/tasks/MDk5OTU2NTg1OTM5NjgzODgzMDk6MDoxNTczOTM0NTg3?prettyPrint=false Content-Type: application/json { Index: autotests/tasks/data/task2_move_request.txt =================================================================== --- autotests/tasks/data/task2_move_request.txt +++ autotests/tasks/data/task2_move_request.txt @@ -1 +1 @@ -POST https://www.googleapis.com/tasks/v1/lists/MockAccount/tasks/MDk5OTU2NTg1OTM5NjgzODgzMDk6MDoxNTczOTM0NTg3/move +POST https://www.googleapis.com/tasks/v1/lists/MockAccount/tasks/MDk5OTU2NTg1OTM5NjgzODgzMDk6MDoxNTczOTM0NTg3/move?prettyPrint=false Index: autotests/tasks/data/task2_move_with_parent_request.txt =================================================================== --- autotests/tasks/data/task2_move_with_parent_request.txt +++ autotests/tasks/data/task2_move_with_parent_request.txt @@ -1 +1 @@ -POST https://www.googleapis.com/tasks/v1/lists/MockAccount/tasks/MDk5OTU2NTg1OTM5NjgzODgzMDk6MDoxNTczOTM0NTg3/move?parent=newMockParent +POST https://www.googleapis.com/tasks/v1/lists/MockAccount/tasks/MDk5OTU2NTg1OTM5NjgzODgzMDk6MDoxNTczOTM0NTg3/move?parent=newMockParent&prettyPrint=false Index: autotests/tasks/data/tasklist1_create_request.txt =================================================================== --- autotests/tasks/data/tasklist1_create_request.txt +++ autotests/tasks/data/tasklist1_create_request.txt @@ -1,4 +1,4 @@ -POST https://www.googleapis.com/tasks/v1/users/@me/lists +POST https://www.googleapis.com/tasks/v1/users/@me/lists?prettyPrint=false Content-type: application/json { Index: autotests/tasks/data/tasklist1_modify_request.txt =================================================================== --- autotests/tasks/data/tasklist1_modify_request.txt +++ autotests/tasks/data/tasklist1_modify_request.txt @@ -1,4 +1,4 @@ -PUT https://www.googleapis.com/tasks/v1/users/@me/lists/MDk5OTU2NTg1OTM5NjgzODgzMDk6MDow +PUT https://www.googleapis.com/tasks/v1/users/@me/lists/MDk5OTU2NTg1OTM5NjgzODgzMDk6MDow?prettyPrint=false Content-type: application/json { Index: autotests/tasks/data/tasklist2_create_request.txt =================================================================== --- autotests/tasks/data/tasklist2_create_request.txt +++ autotests/tasks/data/tasklist2_create_request.txt @@ -1,4 +1,4 @@ -POST https://www.googleapis.com/tasks/v1/users/@me/lists +POST https://www.googleapis.com/tasks/v1/users/@me/lists?prettyPrint=false Content-type: application/json { Index: autotests/tasks/data/tasklist2_modify_request.txt =================================================================== --- autotests/tasks/data/tasklist2_modify_request.txt +++ autotests/tasks/data/tasklist2_modify_request.txt @@ -1,4 +1,4 @@ -PUT https://www.googleapis.com/tasks/v1/users/@me/lists/MDk5OTU2NTg1OTM5NjgzODgzMDk6MzU1NDQ5NDI4ODIzODI5ODow +PUT https://www.googleapis.com/tasks/v1/users/@me/lists/MDk5OTU2NTg1OTM5NjgzODgzMDk6MzU1NDQ5NDI4ODIzODI5ODow?prettyPrint=false Content-type: application/json { Index: autotests/tasks/data/tasklists_fetch_page1_request.txt =================================================================== --- autotests/tasks/data/tasklists_fetch_page1_request.txt +++ autotests/tasks/data/tasklists_fetch_page1_request.txt @@ -1 +1 @@ -GET https://www.googleapis.com/tasks/v1/users/@me/lists +GET https://www.googleapis.com/tasks/v1/users/@me/lists?prettyPrint=false Index: autotests/tasks/data/tasklists_fetch_page2_request.txt =================================================================== --- autotests/tasks/data/tasklists_fetch_page2_request.txt +++ autotests/tasks/data/tasklists_fetch_page2_request.txt @@ -1 +1 @@ -GET https://www.googleapis.com/tasks/v1/users/@me/lists?pageToken=MDk5OTU2NTg1OTM5NjgzODgzMDk6NjExNzc0NDYwNjE5ODE5MTow&maxResults=20 +GET https://www.googleapis.com/tasks/v1/users/@me/lists?pageToken=MDk5OTU2NTg1OTM5NjgzODgzMDk6NjExNzc0NDYwNjE5ODE5MTow&maxResults=20&prettyPrint=false Index: autotests/tasks/data/tasks_fetch_page1_request.txt =================================================================== --- autotests/tasks/data/tasks_fetch_page1_request.txt +++ autotests/tasks/data/tasks_fetch_page1_request.txt @@ -1 +1 @@ -GET https://www.googleapis.com/tasks/v1/lists/MockAccount/tasks?showDeleted=true&showCompleted=true +GET https://www.googleapis.com/tasks/v1/lists/MockAccount/tasks?showDeleted=true&showCompleted=true&prettyPrint=false Index: autotests/tasks/data/tasks_fetch_page2_request.txt =================================================================== --- autotests/tasks/data/tasks_fetch_page2_request.txt +++ autotests/tasks/data/tasks_fetch_page2_request.txt @@ -1,2 +1,2 @@ -GET https://www.googleapis.com/tasks/v1/lists/MockAccount/tasks?pageToken=MDk5OTU2NTg1OTM5NjgzODgzMDk6MDoxOTU0MzA5MzY1&maxResults=20 +GET https://www.googleapis.com/tasks/v1/lists/MockAccount/tasks?pageToken=MDk5OTU2NTg1OTM5NjgzODgzMDk6MDoxOTU0MzA5MzY1&maxResults=20&prettyPrint=false Index: examples/teamdrive/mainwindow.cpp =================================================================== --- examples/teamdrive/mainwindow.cpp +++ examples/teamdrive/mainwindow.cpp @@ -261,10 +261,9 @@ KGAPI2::Drive::FileFetchJob *fileFetchJob = new KGAPI2::Drive::FileFetchJob(query, m_account, nullptr); fileFetchJob->setIncludeTeamDriveItems(true); fileFetchJob->setSupportsTeamDrives(true); - fileFetchJob->setFields((KGAPI2::Drive::FileFetchJob::BasicFields & ~KGAPI2::Drive::FileFetchJob::Permissions) - | KGAPI2::Drive::FileFetchJob::Labels - | KGAPI2::Drive::FileFetchJob::ExportLinks - | KGAPI2::Drive::FileFetchJob::LastViewedByMeDate); + fileFetchJob->setFields({ + KGAPI2::Drive::File::Fields::Title, + }); connect(fileFetchJob, &KGAPI2::Job::finished, this, &MainWindow::slotTeamdriveFetchJobFinished); } @@ -282,7 +281,7 @@ return; } - /* Get all items we have received from Google (should be just one) */ + /* Get all items we have received from Google */ KGAPI2::ObjectsList objects = fetchJob->items(); QString text; Index: src/blogger/blogfetchjob.cpp =================================================================== --- src/blogger/blogfetchjob.cpp +++ src/blogger/blogfetchjob.cpp @@ -79,9 +79,6 @@ request.setUrl(BloggerService::fetchBlogsByUserIdUrl(d->id)); break; } - if (account()) { - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); - } enqueueRequest(request); } Index: src/blogger/commentdeletejob.cpp =================================================================== --- src/blogger/commentdeletejob.cpp +++ src/blogger/commentdeletejob.cpp @@ -80,7 +80,6 @@ void CommentDeleteJob::start() { QNetworkRequest request(BloggerService::deleteCommentUrl(d->blogId, d->postId, d->commentId)); - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); enqueueRequest(request); } Index: src/blogger/commentfetchjob.cpp =================================================================== --- src/blogger/commentfetchjob.cpp +++ src/blogger/commentfetchjob.cpp @@ -40,8 +40,6 @@ CommentFetchJob *parent); ~Private(); - QNetworkRequest createRequest(const QUrl &url); - QString blogId; QString postId; QString commentId; @@ -71,17 +69,6 @@ { } -QNetworkRequest CommentFetchJob::Private::createRequest(const QUrl &url) -{ - QNetworkRequest request; - if (q->account()) { - request.setRawHeader("Authorization", "Bearer " + q->account()->accessToken().toLatin1()); - } - request.setUrl(url); - - return request; -} - CommentFetchJob::CommentFetchJob(const QString &blogId, const AccountPtr &account, @@ -177,7 +164,7 @@ } url.setQuery(query); - const QNetworkRequest request = d->createRequest(url); + const QNetworkRequest request(url); enqueueRequest(request); } @@ -205,7 +192,7 @@ } if (feedData.nextPageUrl.isValid()) { - const QNetworkRequest request = d->createRequest(feedData.nextPageUrl); + const QNetworkRequest request(feedData.nextPageUrl); enqueueRequest(request); } else { emitFinished(); Index: src/blogger/pagecreatejob.cpp =================================================================== --- src/blogger/pagecreatejob.cpp +++ src/blogger/pagecreatejob.cpp @@ -59,9 +59,7 @@ void PageCreateJob::start() { const QUrl url = BloggerService::createPageUrl(d->page->blogId()); - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); - request.setUrl(url); + QNetworkRequest request(url); const QByteArray rawData = Page::toJSON(d->page); Index: src/blogger/pagedeletejob.cpp =================================================================== --- src/blogger/pagedeletejob.cpp +++ src/blogger/pagedeletejob.cpp @@ -71,7 +71,6 @@ void PageDeleteJob::start() { QNetworkRequest request(BloggerService::deletePageUrl(d->blogId, d->pageId)); - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); enqueueRequest(request); } Index: src/blogger/pagefetchjob.cpp =================================================================== --- src/blogger/pagefetchjob.cpp +++ src/blogger/pagefetchjob.cpp @@ -114,9 +114,6 @@ } url.setQuery(query); QNetworkRequest request(url); - if (account()) { - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); - } enqueueRequest(request); } Index: src/blogger/pagemodifyjob.cpp =================================================================== --- src/blogger/pagemodifyjob.cpp +++ src/blogger/pagemodifyjob.cpp @@ -60,9 +60,7 @@ void PageModifyJob::start() { const QUrl url = BloggerService::modifyPageUrl(d->page->blogId(), d->page->id()); - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); - request.setUrl(url); + QNetworkRequest request(url); const QByteArray rawData = Page::toJSON(d->page); enqueueRequest(request, rawData, QStringLiteral("application/json")); Index: src/blogger/postcreatejob.cpp =================================================================== --- src/blogger/postcreatejob.cpp +++ src/blogger/postcreatejob.cpp @@ -71,9 +71,7 @@ query.addQueryItem(QStringLiteral("isDraft"), Utils::bool2Str(d->isDraft)); url.setQuery(query); } - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); - request.setUrl(url); + QNetworkRequest request(url); const QByteArray rawData = Post::toJSON(d->post); Index: src/blogger/postdeletejob.cpp =================================================================== --- src/blogger/postdeletejob.cpp +++ src/blogger/postdeletejob.cpp @@ -71,8 +71,8 @@ void PostDeleteJob::start() { - QNetworkRequest request(BloggerService::deletePostUrl(d->blogId, d->postId)); - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); + const QUrl url = BloggerService::deletePostUrl(d->blogId, d->postId); + QNetworkRequest request(url); enqueueRequest(request); } Index: src/blogger/postfetchjob.cpp =================================================================== --- src/blogger/postfetchjob.cpp +++ src/blogger/postfetchjob.cpp @@ -38,8 +38,6 @@ const QString &postId, PostFetchJob *parent); - QNetworkRequest createRequest(const QUrl &url); - QString blogId; QString postId; @@ -68,17 +66,6 @@ { } -QNetworkRequest PostFetchJob::Private::createRequest(const QUrl &url) -{ - QNetworkRequest request; - if (q->account()) { - request.setRawHeader("Authorization", "Bearer " + q->account()->accessToken().toLatin1()); - } - request.setUrl(url); - - return request; -} - PostFetchJob::PostFetchJob(const QString &blogId, const AccountPtr &account, QObject *parent) @@ -203,7 +190,7 @@ query.addQueryItem(QStringLiteral("status"), QStringLiteral("scheduled")); } url.setQuery(query); - const QNetworkRequest request = d->createRequest(url); + const QNetworkRequest request(url); enqueueRequest(request); } @@ -229,7 +216,7 @@ } if (feedData.nextPageUrl.isValid()) { - const QNetworkRequest request = d->createRequest(feedData.nextPageUrl); + const QNetworkRequest request(feedData.nextPageUrl); enqueueRequest(request); } else { emitFinished(); Index: src/blogger/postmodifyjob.cpp =================================================================== --- src/blogger/postmodifyjob.cpp +++ src/blogger/postmodifyjob.cpp @@ -59,9 +59,7 @@ void PostModifyJob::start() { const QUrl url = BloggerService::modifyPostUrl(d->post->blogId(), d->post->id()); - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); - request.setUrl(url); + QNetworkRequest request(url); const QByteArray rawData = Post::toJSON(d->post); enqueueRequest(request, rawData, QStringLiteral("application/json")); Index: src/blogger/postsearchjob.cpp =================================================================== --- src/blogger/postsearchjob.cpp +++ src/blogger/postsearchjob.cpp @@ -38,8 +38,6 @@ const QString &query, PostSearchJob *parent); - QNetworkRequest createRequest(const QUrl &url); - QString blogId; QString query; bool fetchBodies; @@ -58,17 +56,6 @@ { } -QNetworkRequest PostSearchJob::Private::createRequest(const QUrl &url) -{ - QNetworkRequest request; - if (q->account()) { - request.setRawHeader("Authorization", "Bearer " + q->account()->accessToken().toLatin1()); - } - request.setUrl(url); - - return request; -} - PostSearchJob::PostSearchJob(const QString &blogId, const QString &query, const AccountPtr &account, @@ -100,7 +87,7 @@ query.addQueryItem(QStringLiteral("q"), d->query); query.addQueryItem(QStringLiteral("fetchBodies"), Utils::bool2Str(d->fetchBodies)); url.setQuery(query); - const QNetworkRequest request = d->createRequest(url); + const QNetworkRequest request(url); enqueueRequest(request); } @@ -124,7 +111,7 @@ } if (feedData.nextPageUrl.isValid()) { - const QNetworkRequest request = d->createRequest(feedData.nextPageUrl); + const QNetworkRequest request(feedData.nextPageUrl); enqueueRequest(request); } else { emitFinished(); Index: src/calendar/calendarcreatejob.cpp =================================================================== --- src/calendar/calendarcreatejob.cpp +++ src/calendar/calendarcreatejob.cpp @@ -70,10 +70,8 @@ CalendarPtr calendar = d->calendars.current(); const QUrl url = CalendarService::createCalendarUrl(); - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); + QNetworkRequest request(url); request.setRawHeader("GData-Version", CalendarService::APIVersion().toLatin1()); - request.setUrl(url); const QByteArray rawData = CalendarService::calendarToJSON(calendar); Index: src/calendar/calendardeletejob.cpp =================================================================== --- src/calendar/calendardeletejob.cpp +++ src/calendar/calendardeletejob.cpp @@ -83,7 +83,6 @@ const QString calendarId = d->calendarsIds.current(); const QUrl url = CalendarService::removeCalendarUrl(calendarId); QNetworkRequest request(url); - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); request.setRawHeader("GData-Version", CalendarService::APIVersion().toLatin1()); QStringList headers; Index: src/calendar/calendarfetchjob.cpp =================================================================== --- src/calendar/calendarfetchjob.cpp +++ src/calendar/calendarfetchjob.cpp @@ -54,10 +54,8 @@ QNetworkRequest CalendarFetchJob::Private::createRequest(const QUrl& url) { - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + q->account()->accessToken().toLatin1()); + QNetworkRequest request(url); request.setRawHeader("GData-Version", CalendarService::APIVersion().toLatin1()); - request.setUrl(url); QStringList headers; const auto rawHeaderList = request.rawHeaderList(); Index: src/calendar/calendarmodifyjob.cpp =================================================================== --- src/calendar/calendarmodifyjob.cpp +++ src/calendar/calendarmodifyjob.cpp @@ -69,10 +69,8 @@ const CalendarPtr calendar = d->calendars.current(); const QUrl url = CalendarService::updateCalendarUrl(calendar->uid()); - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); + QNetworkRequest request(url); request.setRawHeader("GData-Version", CalendarService::APIVersion().toLatin1()); - request.setUrl(url); const QByteArray rawData = CalendarService::calendarToJSON(calendar); Index: src/calendar/eventcreatejob.cpp =================================================================== --- src/calendar/eventcreatejob.cpp +++ src/calendar/eventcreatejob.cpp @@ -86,10 +86,8 @@ const EventPtr event = d->events.current(); const QUrl url = CalendarService::createEventUrl(d->calendarId, d->updatesPolicy); - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); + QNetworkRequest request(url); request.setRawHeader("GData-Version", CalendarService::APIVersion().toLatin1()); - request.setUrl(url); const QByteArray rawData = CalendarService::eventToJSON(event, CalendarService::EventSerializeFlag::NoID); Index: src/calendar/eventdeletejob.cpp =================================================================== --- src/calendar/eventdeletejob.cpp +++ src/calendar/eventdeletejob.cpp @@ -88,7 +88,6 @@ const QString eventId = d->eventsIds.current(); const QUrl url = CalendarService::removeEventUrl(d->calendarId, eventId); QNetworkRequest request(url); - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); request.setRawHeader("GData-Version", CalendarService::APIVersion().toLatin1()); QStringList headers; Index: src/calendar/eventfetchjob.cpp =================================================================== --- src/calendar/eventfetchjob.cpp +++ src/calendar/eventfetchjob.cpp @@ -62,10 +62,8 @@ QNetworkRequest EventFetchJob::Private::createRequest(const QUrl& url) { - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + q->account()->accessToken().toLatin1()); + QNetworkRequest request(url); request.setRawHeader("GData-Version", CalendarService::APIVersion().toLatin1()); - request.setUrl(url); QStringList headers; auto rawHeaderList = request.rawHeaderList(); Index: src/calendar/eventmodifyjob.cpp =================================================================== --- src/calendar/eventmodifyjob.cpp +++ src/calendar/eventmodifyjob.cpp @@ -85,10 +85,8 @@ const EventPtr event = d->events.current(); const QUrl url = CalendarService::updateEventUrl(d->calendarId, event->id(), d->updatesPolicy); - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); + QNetworkRequest request(url); request.setRawHeader("GData-Version", CalendarService::APIVersion().toLatin1()); - request.setUrl(url); const QByteArray rawData = CalendarService::eventToJSON(event); Index: src/calendar/eventmovejob.cpp =================================================================== --- src/calendar/eventmovejob.cpp +++ src/calendar/eventmovejob.cpp @@ -62,10 +62,8 @@ const QString eventId = eventsIds.current(); const QUrl url = CalendarService::moveEventUrl(source, destination, eventId); - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + q->account()->accessToken().toLatin1()); + QNetworkRequest request(url); request.setRawHeader("GData-Version", CalendarService::APIVersion().toLatin1()); - request.setUrl(url); QStringList headers; auto rawHeaderList = request.rawHeaderList(); Index: src/calendar/freebusyqueryjob.cpp =================================================================== --- src/calendar/freebusyqueryjob.cpp +++ src/calendar/freebusyqueryjob.cpp @@ -93,7 +93,6 @@ const QByteArray json = document.toJson(QJsonDocument::Compact); QNetworkRequest request(CalendarService::freeBusyQueryUrl()); - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); request.setRawHeader("GData-Version", CalendarService::APIVersion().toLatin1()); enqueueRequest(request, json, QStringLiteral("application/json")); } Index: src/contacts/contactcreatejob.cpp =================================================================== --- src/contacts/contactcreatejob.cpp +++ src/contacts/contactcreatejob.cpp @@ -64,10 +64,8 @@ const ContactPtr contact = contacts.current(); const QUrl url = ContactsService::createContactUrl(q->account()->accountName()); - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + q->account()->accessToken().toLatin1()); + QNetworkRequest request(url); request.setRawHeader("GData-Version", ContactsService::APIVersion().toLatin1()); - request.setUrl(url); QByteArray rawData = ContactsService::contactToXML(contact); rawData.prepend("enqueueRequest(request, rawData, QStringLiteral("application/atom+xml")); if (!contact->photo().isEmpty()) { - QNetworkRequest photoRequest; - photoRequest.setRawHeader("Authorization", "Bearer " + q->account()->accessToken().toLatin1()); + const QUrl url = ContactsService::photoUrl(q->account()->accountName(), contact->uid()); + QNetworkRequest photoRequest(url); photoRequest.setHeader(QNetworkRequest::ContentTypeHeader, QLatin1String("image/*")); - photoRequest.setUrl(ContactsService::photoUrl(q->account()->accountName(), contact->uid())); pendingPhoto.first = contact->photo().rawData(); pendingPhoto.second = contact->photo().type(); q->enqueueRequest(photoRequest, pendingPhoto.first, QStringLiteral("modifyImage")); Index: src/contacts/contactdeletejob.cpp =================================================================== --- src/contacts/contactdeletejob.cpp +++ src/contacts/contactdeletejob.cpp @@ -59,7 +59,6 @@ const QString contactId = contactIds.current(); const QUrl url = ContactsService::removeContactUrl(q->account()->accountName(), contactId); QNetworkRequest request(url); - request.setRawHeader("Authorization", "Bearer " + q->account()->accessToken().toLatin1()); request.setRawHeader("GData-Version", ContactsService::APIVersion().toLatin1()); QStringList headers; Index: src/contacts/contactfetchjob.cpp =================================================================== --- src/contacts/contactfetchjob.cpp +++ src/contacts/contactfetchjob.cpp @@ -58,10 +58,8 @@ QNetworkRequest ContactFetchJob::Private::createRequest(const QUrl& url) { - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + q->account()->accessToken().toLatin1()); + QNetworkRequest request(url); request.setRawHeader("GData-Version", ContactsService::APIVersion().toLatin1()); - request.setUrl(url); QStringList headers; auto rawHeaderList = request.rawHeaderList(); Index: src/contacts/contactfetchphotojob.cpp =================================================================== --- src/contacts/contactfetchphotojob.cpp +++ src/contacts/contactfetchphotojob.cpp @@ -60,9 +60,7 @@ const ContactPtr contact = contacts.current(); const QUrl url = ContactsService::photoUrl(q->account()->accountName(), contact->uid()); - QNetworkRequest request; - request.setUrl(url); - request.setRawHeader("Authorization", "Bearer " + q->account()->accessToken().toLatin1()); + QNetworkRequest request(url); request.setRawHeader("GData-Version", ContactsService::APIVersion().toLatin1()); q->enqueueRequest(request); } Index: src/contacts/contactmodifyjob.cpp =================================================================== --- src/contacts/contactmodifyjob.cpp +++ src/contacts/contactmodifyjob.cpp @@ -28,6 +28,7 @@ #include "account.h" #include "private/queuehelper_p.h" +#include #include #include #include @@ -65,8 +66,7 @@ const ContactPtr contact = contacts.current(); const QUrl url = ContactsService::updateContactUrl(q->account()->accountName(), contact->uid()); - QNetworkRequest request; - request.setUrl(url); + QNetworkRequest request(url); QByteArray rawData = ContactsService::contactToXML(contact); rawData.prepend("enqueueRequest(request, rawData, QStringLiteral("application/atom+xml")); - QNetworkRequest photoRequest; - photoRequest.setUrl(ContactsService::photoUrl(q->account()->accountName(), contact->uid())); + const QUrl photoUrl = ContactsService::photoUrl(q->account()->accountName(), contact->uid()); + QNetworkRequest photoRequest(photoUrl); if (!contact->photo().isEmpty()) { - QNetworkRequest photoRequest; photoRequest.setHeader(QNetworkRequest::ContentTypeHeader, QLatin1String("image/*")); - photoRequest.setUrl(ContactsService::photoUrl(q->account()->accountName(), contact->uid())); pendingPhoto.first = contact->photo().rawData(); pendingPhoto.second = contact->photo().type(); q->enqueueRequest(photoRequest, pendingPhoto.first, QStringLiteral("modifyImage")); @@ -128,12 +126,18 @@ { QNetworkRequest r = request; r.setRawHeader("If-Match", "*"); - r.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); r.setRawHeader("GData-Version", ContactsService::APIVersion().toLatin1()); if (contentType == QLatin1String("modifyImage")) { accessManager->put(r, data); } else if (contentType == QLatin1String("deleteImage")) { + // Delete requests have no response body so there isn't anything to pretty print + QUrl cleanedUrl = r.url(); + QUrlQuery cleanedQuery(cleanedUrl); + cleanedQuery.removeAllQueryItems(Job::StandardParams::PrettyPrint); + cleanedUrl.setQuery(cleanedQuery); + r.setUrl(cleanedUrl); + accessManager->deleteResource(r); } else { r.setHeader(QNetworkRequest::ContentTypeHeader, contentType); Index: src/contacts/contactsgroupcreatejob.cpp =================================================================== --- src/contacts/contactsgroupcreatejob.cpp +++ src/contacts/contactsgroupcreatejob.cpp @@ -68,10 +68,8 @@ const ContactsGroupPtr contact = d->groups.current(); const QUrl url = ContactsService::createGroupUrl(account()->accountName()); - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); + QNetworkRequest request(url); request.setRawHeader("GData-Version", ContactsService::APIVersion().toLatin1()); - request.setUrl(url); QByteArray rawData = ContactsService::contactsGroupToXML(contact); rawData.prepend("account()->accessToken().toLatin1()); + QNetworkRequest request(url); request.setRawHeader("GData-Version", ContactsService::APIVersion().toLatin1()); - request.setUrl(url); QStringList headers; auto rawHeaderList = request.rawHeaderList(); Index: src/contacts/contactsgroupfetchjob.cpp =================================================================== --- src/contacts/contactsgroupfetchjob.cpp +++ src/contacts/contactsgroupfetchjob.cpp @@ -52,10 +52,8 @@ QNetworkRequest ContactsGroupFetchJob::Private::createRequest(const QUrl& url) { - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + q->account()->accessToken().toLatin1()); + QNetworkRequest request(url); request.setRawHeader("GData-Version", ContactsService::APIVersion().toLatin1()); - request.setUrl(url); QStringList headers; auto rawHeaderList = request.rawHeaderList(); Index: src/contacts/contactsgroupmodifyjob.cpp =================================================================== --- src/contacts/contactsgroupmodifyjob.cpp +++ src/contacts/contactsgroupmodifyjob.cpp @@ -70,10 +70,8 @@ const ContactsGroupPtr group = d->groups.current(); const QUrl url = ContactsService::updateGroupUrl(account()->accountName(), group->id()); - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); + QNetworkRequest request(url); request.setRawHeader("GData-Version", ContactsService::APIVersion().toLatin1()); - request.setUrl(url); QByteArray rawData = ContactsService::contactsGroupToXML(group); rawData.prepend("accessToken().toLatin1()); + const QUrl url = QUrl(QStringLiteral("https://www.googleapis.com/oauth2/v1/userinfo")); + QNetworkRequest request(url); QStringList headers; const auto rawHeaderList = request.rawHeaderList(); Index: src/core/deletejob.cpp =================================================================== --- src/core/deletejob.cpp +++ src/core/deletejob.cpp @@ -22,6 +22,7 @@ #include "deletejob.h" +#include #include #include @@ -58,6 +59,13 @@ r.setRawHeader("If-Match", "*"); } + // Delete requests have no response body so there isn't anything to pretty print + QUrl cleanedUrl = r.url(); + QUrlQuery cleanedQuery(cleanedUrl); + cleanedQuery.removeAllQueryItems(Job::StandardParams::PrettyPrint); + cleanedUrl.setQuery(cleanedQuery); + r.setUrl(cleanedUrl); + accessManager->deleteResource(r); } Index: src/core/job.h =================================================================== --- src/core/job.h +++ src/core/job.h @@ -27,6 +27,7 @@ #include "kgapicore_export.h" #include +#include class QNetworkAccessManager; class QNetworkReply; @@ -40,12 +41,13 @@ * * Usual workflow of Job subclasses is to reimplement Job::start, * Job::dispatchRequest and Job::handleReply, then enqueue a QNetworkRequest using - * Job::enqueueRequest. The request will automatically be scheduled in a queue - * and dispatched by calling Job::dispatchRequest implementation. When a reply - * is received, the Job will automatically perform error handling and if there - * is no error, the reply is passed to implementation of Job::handleReply. + * Job::enqueueRequest. Authorization headers and standard query parameters will be + * set by Job class. The request will automatically be scheduled in a queue and + * dispatched by calling Job::dispatchRequest implementation. When a reply is received, + * the Job will automatically perform error handling and if there is no error, the + * reply is passed to implementation of Job::handleReply. * - * Job is automatically when program enters an event loop. + * Job is automatically started when program enters an event loop. * * @author Daniel Vrátil * @since 2.0 @@ -72,7 +74,7 @@ * @brief Whether the job is running * * This property indicates whether the job is running or not. The value is - * set to @p true when the job is started (see Job::start) and back to + * set to @p true when the job is started (see Job::start) and back to * @p false right before Job::finished is emitted. * * @see Job::isRunning, Job::finished @@ -96,6 +98,11 @@ */ explicit Job(const AccountPtr &account, QObject* parent = nullptr); + struct StandardParams { + static const QString PrettyPrint; + static const QString Fields; + }; + /** * @brief Destructor */ @@ -178,15 +185,49 @@ */ AccountPtr account() const; + /** + * @brief Sets whether response will have indentations and line breaks. + * + * When this is false, it can reduce the response payload size, + * which might lead to better performance in some environments. + * Default is false. + * + * @param prettyPrint + */ + void setPrettyPrint(bool prettyPrint); + + /** + * @brief Returns prettyPrint query parameter. + * + * @return prettyPrint query parameter + */ + bool prettyPrint() const; + + /** + * @brief Set subset of fields to include in the response. + * + * Use for better performance. + * + * @param fields List of fields + */ + void setFields(const QStringList &fields); + + /** + * @brief Returns fields selector. + * + * @return List of fields + */ + QStringList fields() const; + /** * @brief Restarts this job * * When a job finishes, it's possible to run it again, without having * to create a new job. * * The job will throw away all results retrieved in previous run and retrieve * everything again. - * + * * @see Job::aboutToStart */ void restart(); @@ -313,6 +354,7 @@ * * Subclasses should call this method to enqueue the @p request in main job * queue. The request is automatically dispatched, and reply is handled. + * Authorization headers and standars query parameters will be applied. * * @param request Request to enqueue * @param data Data to be send in body of the request Index: src/core/job.cpp =================================================================== --- src/core/job.cpp +++ src/core/job.cpp @@ -31,6 +31,7 @@ #include #include #include +#include using namespace KGAPI2; @@ -62,20 +63,19 @@ return sInstance; } -void FileLogger::logRequest(const KGAPI2::Request &request) +void FileLogger::logRequest(const QNetworkRequest &request, const QByteArray &rawData) { if (!mFile) { return; } QTextStream stream(mFile.data()); - stream << "C: " << request.request.url().toDisplayString() << "\n"; - stream << " Content-type: " << request.contentType << "\n"; - const auto headers = request.request.rawHeaderList(); + stream << "C: " << request.url().toDisplayString() << "\n"; + const auto headers = request.rawHeaderList(); for (const auto &header : headers) { - stream << " " << header << ": " << request.request.rawHeader(header) << "\n\n"; + stream << " " << header << ": " << request.rawHeader(header) << "\n"; } - stream << " " << request.rawData << "\n\n"; + stream << " " << rawData << "\n\n"; mFile->flush(); } @@ -89,9 +89,9 @@ stream << "S: " << reply->url().toDisplayString() << "\n"; const auto headers = reply->rawHeaderList(); for (const auto &header : headers) { - stream << " " << header << ": " << reply->rawHeader(header) << "\n\n"; + stream << " " << header << ": " << reply->rawHeader(header) << "\n"; } - stream << " " << rawData; + stream << " " << rawData << "\n\n"; mFile->flush(); } @@ -102,6 +102,7 @@ error(KGAPI2::NoError), accessManager(nullptr), maxTimeout(0), + prettyPrint(false), q(parent) { } @@ -322,18 +323,39 @@ const Request r = requestQueue.dequeue(); currentRequest = r; + QNetworkRequest authorizedRequest = r.request; + if (account) { + authorizedRequest.setRawHeader("Authorization", "Bearer " + account->accessToken().toLatin1()); + } + + QUrl url = authorizedRequest.url(); + QUrlQuery standardParamQuery(url); + if (!fields.isEmpty()) { + standardParamQuery.addQueryItem(Job::StandardParams::Fields, fields.join(QStringLiteral(","))); + } + + if (!standardParamQuery.hasQueryItem(Job::StandardParams::PrettyPrint)) { + standardParamQuery.addQueryItem(Job::StandardParams::PrettyPrint, prettyPrint ? QStringLiteral("true") : QStringLiteral("false")); + } + + url.setQuery(standardParamQuery); + authorizedRequest.setUrl(url); + qCDebug(KGAPIDebug) << q << "Dispatching request to" << r.request.url(); - FileLogger::self()->logRequest(r); + FileLogger::self()->logRequest(authorizedRequest, r.rawData); - q->dispatchRequest(accessManager, r.request, r.rawData, r.contentType); + q->dispatchRequest(accessManager, authorizedRequest, r.rawData, r.contentType); if (requestQueue.isEmpty()) { dispatchTimer->stop(); } } /************************* PUBLIC **********************/ +const QString Job::StandardParams::PrettyPrint = QStringLiteral("prettyPrint"); +const QString Job::StandardParams::Fields = QStringLiteral("fields"); + Job::Job(QObject* parent): QObject(parent), d(new Private(this)) @@ -421,6 +443,31 @@ d->account = account; } +bool Job::prettyPrint() const +{ + return d->prettyPrint; +} + +void Job::setPrettyPrint(bool prettyPrint) +{ + if (d->isRunning) { + qCWarning(KGAPIDebug) << "Called setPrettyPrint() on running job. Ignoring."; + return; + } + + d->prettyPrint = prettyPrint; +} + +QStringList Job::fields() const +{ + return d->fields; +} + +void Job::setFields(const QStringList &fields) +{ + d->fields = fields; +} + void Job::restart() { if (d->isRunning) { Index: src/core/job_p.h =================================================================== --- src/core/job_p.h +++ src/core/job_p.h @@ -48,7 +48,7 @@ static FileLogger *self(); - void logRequest(const Request &request); + void logRequest(const QNetworkRequest &request, const QByteArray &rawData); void logReply(const QNetworkReply *reply, const QByteArray &rawData); private: @@ -81,6 +81,8 @@ QQueue requestQueue; QTimer *dispatchTimer; int maxTimeout; + bool prettyPrint; + QStringList fields; Request currentRequest; Index: src/drive/about.h =================================================================== --- src/drive/about.h +++ src/drive/about.h @@ -221,8 +221,56 @@ typedef QSharedPointer MaxUploadSizePtr; typedef QList MaxUploadSizesList; - explicit About(const About &other); - virtual ~About(); + struct Fields { + static const QString AdditionalRoleInfo; + static const QString AdditionalRoles; + static const QString BackgroundImageLink; + static const QString BytesUsed; + static const QString CanCreateTeamDrives; + static const QString ColorRgb; + static const QString DisplayName; + static const QString DomainSharingPolicy; + static const QString EmailAddress; + static const QString Etag; + static const QString ExportFormats; + static const QString FeatureName; + static const QString FeatureRate; + static const QString Features; + static const QString FolderColorPalette; + static const QString Id; + static const QString ImportFormats; + static const QString IsAuthenticatedUser; + static const QString IsCurrentAppInstalled; + static const QString Kind; + static const QString LanguageCode; + static const QString LargestChangeId; + static const QString MaxUploadSizes; + static const QString Name; + static const QString PermissionId; + static const QString Picture; + static const QString PrimaryRole; + static const QString QuotaBytesByService; + static const QString QuotaBytesTotal; + static const QString QuotaBytesUsed; + static const QString QuotaBytesUsedAggregate; + static const QString QuotaBytesUsedInTrash; + static const QString QuotaType; + static const QString RemainingChangeIds; + static const QString RoleSets; + static const QString RootFolderId; + static const QString SelfLink; + static const QString ServiceName; + static const QString Size; + static const QString Source; + static const QString Targets; + static const QString TeamDriveThemes; + static const QString Type; + static const QString Url; + static const QString User; + }; + + About(const About &other); + ~About() override; bool operator==(const About &other) const; bool operator!=(const About &other) const { return !operator==(other); } @@ -340,10 +388,10 @@ static AboutPtr fromJSON(const QByteArray &jsonData); private: - explicit About(); + About(); class Private; - Private *const d; + QScopedPointer const d; friend class Private; }; Index: src/drive/about.cpp =================================================================== --- src/drive/about.cpp +++ src/drive/about.cpp @@ -361,6 +361,52 @@ { } +const QString About::Fields::AdditionalRoleInfo= QStringLiteral("additionalRoleInfo"); +const QString About::Fields::AdditionalRoles= QStringLiteral("additionalRoles"); +const QString About::Fields::BackgroundImageLink= QStringLiteral("backgroundImageLink"); +const QString About::Fields::BytesUsed= QStringLiteral("bytesUsed"); +const QString About::Fields::CanCreateTeamDrives= QStringLiteral("canCreateTeamDrives"); +const QString About::Fields::ColorRgb= QStringLiteral("colorRgb"); +const QString About::Fields::DisplayName= QStringLiteral("displayName"); +const QString About::Fields::DomainSharingPolicy= QStringLiteral("domainSharingPolicy"); +const QString About::Fields::EmailAddress= QStringLiteral("emailAddress"); +const QString About::Fields::Etag= QStringLiteral("etag"); +const QString About::Fields::ExportFormats= QStringLiteral("exportFormats"); +const QString About::Fields::FeatureName= QStringLiteral("featureName"); +const QString About::Fields::FeatureRate= QStringLiteral("featureRate"); +const QString About::Fields::Features= QStringLiteral("features"); +const QString About::Fields::FolderColorPalette= QStringLiteral("folderColorPalette"); +const QString About::Fields::Id= QStringLiteral("id"); +const QString About::Fields::ImportFormats= QStringLiteral("importFormats"); +const QString About::Fields::IsAuthenticatedUser= QStringLiteral("isAuthenticatedUser"); +const QString About::Fields::IsCurrentAppInstalled= QStringLiteral("isCurrentAppInstalled"); +const QString About::Fields::Kind= QStringLiteral("kind"); +const QString About::Fields::LanguageCode= QStringLiteral("languageCode"); +const QString About::Fields::LargestChangeId= QStringLiteral("largestChangeId"); +const QString About::Fields::MaxUploadSizes= QStringLiteral("maxUploadSizes"); +const QString About::Fields::Name= QStringLiteral("name"); +const QString About::Fields::PermissionId= QStringLiteral("permissionId"); +const QString About::Fields::Picture= QStringLiteral("picture"); +const QString About::Fields::PrimaryRole= QStringLiteral("primaryRole"); +const QString About::Fields::QuotaBytesByService= QStringLiteral("quotaBytesByService"); +const QString About::Fields::QuotaBytesTotal= QStringLiteral("quotaBytesTotal"); +const QString About::Fields::QuotaBytesUsedAggregate= QStringLiteral("quotaBytesUsedAggregate"); +const QString About::Fields::QuotaBytesUsedInTrash= QStringLiteral("quotaBytesUsedInTrash"); +const QString About::Fields::QuotaBytesUsed= QStringLiteral("quotaBytesUsed"); +const QString About::Fields::QuotaType= QStringLiteral("quotaType"); +const QString About::Fields::RemainingChangeIds= QStringLiteral("remainingChangeIds"); +const QString About::Fields::RoleSets= QStringLiteral("roleSets"); +const QString About::Fields::RootFolderId= QStringLiteral("rootFolderId"); +const QString About::Fields::SelfLink= QStringLiteral("selfLink"); +const QString About::Fields::ServiceName= QStringLiteral("serviceName"); +const QString About::Fields::Size= QStringLiteral("size"); +const QString About::Fields::Source= QStringLiteral("source"); +const QString About::Fields::Targets= QStringLiteral("targets"); +const QString About::Fields::TeamDriveThemes= QStringLiteral("teamDriveThemes"); +const QString About::Fields::Type= QStringLiteral("type"); +const QString About::Fields::Url= QStringLiteral("url"); +const QString About::Fields::User= QStringLiteral("user"); + About::About(): KGAPI2::Object(), d(new Private) @@ -373,10 +419,7 @@ { } -About::~About() -{ - delete d; -} +About::~About() = default; bool About::operator==(const About &other) const { Index: src/drive/aboutfetchjob.cpp =================================================================== --- src/drive/aboutfetchjob.cpp +++ src/drive/aboutfetchjob.cpp @@ -30,6 +30,7 @@ #include #include +#include using namespace KGAPI2; using namespace KGAPI2::Drive; @@ -118,9 +119,8 @@ void AboutFetchJob::start() { - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); - request.setUrl(DriveService::fetchAboutUrl(d->includeSubscribed, d->maxChangeIdCount, d->startChangeId)); + QUrl url = DriveService::fetchAboutUrl(d->includeSubscribed, d->maxChangeIdCount, d->startChangeId); + QNetworkRequest request(url); enqueueRequest(request); } Index: src/drive/appfetchjob.cpp =================================================================== --- src/drive/appfetchjob.cpp +++ src/drive/appfetchjob.cpp @@ -61,13 +61,13 @@ void AppFetchJob::start() { - QNetworkRequest request; + QUrl url; if (d->appId.isEmpty()) { - request.setUrl(DriveService::fetchAppsUrl()); + url = DriveService::fetchAppsUrl(); } else { - request.setUrl(DriveService::fetchAppUrl(d->appId)); + url = DriveService::fetchAppUrl(d->appId); } - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); + QNetworkRequest request(url); enqueueRequest(request); } Index: src/drive/changefetchjob.cpp =================================================================== --- src/drive/changefetchjob.cpp +++ src/drive/changefetchjob.cpp @@ -38,7 +38,6 @@ { public: Private(ChangeFetchJob *parent); - QNetworkRequest createRequest(const QUrl &url); QString changeId; @@ -60,16 +59,6 @@ { } -QNetworkRequest ChangeFetchJob::Private::createRequest(const QUrl &url) -{ - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + q->account()->accessToken().toLatin1()); - request.setUrl(url); - - return request; -} - - ChangeFetchJob::ChangeFetchJob(const QString &changeId, const AccountPtr &account, QObject *parent): @@ -168,7 +157,7 @@ url = DriveService::fetchChangeUrl(d->changeId); } - const QNetworkRequest request = d->createRequest(url); + QNetworkRequest request(url); enqueueRequest(request); } @@ -198,7 +187,7 @@ } if (feedData.nextPageUrl.isValid()) { - const QNetworkRequest request = d->createRequest(feedData.nextPageUrl); + QNetworkRequest request(feedData.nextPageUrl); enqueueRequest(request); } Index: src/drive/childreferencecreatejob.cpp =================================================================== --- src/drive/childreferencecreatejob.cpp +++ src/drive/childreferencecreatejob.cpp @@ -61,9 +61,7 @@ const ChildReferencePtr reference = references.takeFirst(); const QUrl url = DriveService::createChildReference(folderId); - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + q->account()->accessToken().toLatin1()); - request.setUrl(url); + QNetworkRequest request(url); const QByteArray rawData = ChildReference::toJSON(reference); q->enqueueRequest(request, rawData, QStringLiteral("application/json")); Index: src/drive/childreferencedeletejob.cpp =================================================================== --- src/drive/childreferencedeletejob.cpp +++ src/drive/childreferencedeletejob.cpp @@ -99,7 +99,6 @@ const QUrl url = DriveService::deleteChildReference(d->folderId, childId); QNetworkRequest request(url); - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); enqueueRequest(request); } Index: src/drive/childreferencefetchjob.cpp =================================================================== --- src/drive/childreferencefetchjob.cpp +++ src/drive/childreferencefetchjob.cpp @@ -37,7 +37,6 @@ { public: Private(ChildReferenceFetchJob *parent); - QNetworkRequest createRequest(const QUrl &url); QString folderId; QString childId; @@ -51,15 +50,6 @@ { } -QNetworkRequest ChildReferenceFetchJob::Private::createRequest(const QUrl &url) -{ - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + q->account()->accessToken().toLatin1()); - request.setUrl(url); - - return request; -} - ChildReferenceFetchJob::ChildReferenceFetchJob(const QString &folderId, const AccountPtr &account, QObject *parent): @@ -94,7 +84,7 @@ url = DriveService::fetchParentReferenceUrl(d->folderId, d->childId); } - const QNetworkRequest request = d->createRequest(url); + QNetworkRequest request(url); enqueueRequest(request); } @@ -121,7 +111,7 @@ if (feedData.nextPageUrl.isValid()) { - const QNetworkRequest request = d->createRequest(feedData.nextPageUrl); + QNetworkRequest request(feedData.nextPageUrl); enqueueRequest(request); } Index: src/drive/file.h =================================================================== --- src/drive/file.h +++ src/drive/file.h @@ -602,6 +602,59 @@ bool isFolder() const; + struct Fields { + static const QString SelfLink; + static const QString Etag; + static const QString Kind; + static const QString NextLink; + static const QString NextPageToken; + static const QString Id; + static const QString Title; + static const QString MimeType; + static const QString Description; + static const QString Labels; + static const QString CreatedDate; + static const QString ModifiedDate; + static const QString ModifiedByMeDate; + static const QString DownloadUrl; + static const QString IndexableText; + static const QString UserPermission; + static const QString FileExtension; + static const QString Md5Checksum; + static const QString FileSize; + static const QString AlternateLink; + static const QString EmbedLink; + static const QString SharedWithMeDate; + static const QString Parents; + static const QString ExportLinks; + static const QString OriginalFilename; + static const QString OwnerNames; + static const QString LastModifiedByMeDate; + static const QString Editable; + static const QString WritersCanShare; + static const QString ThumbnailLink; + static const QString LastViewedByMeDate; + static const QString WebContentLink; + static const QString ExplicitlyTrashed; + static const QString ImageMediaMetadata; + static const QString Thumbnail; + static const QString WebViewLink; + static const QString IconLink; + static const QString Shared; + static const QString Owners; + static const QString LastModifyingUser; + static const QString AppDataContents; + static const QString OpenWithLinks; + static const QString DefaultOpenWithLink; + static const QString HeadRevisionId; + static const QString Copyable; + static const QString Properties; + static const QString MarkedViewedByMeDate; + static const QString Version; + static const QString SharingUser; + static const QString Permissions; + }; + static FilePtr fromJSON(const QByteArray &jsonData); static FilesList fromJSONFeed(const QByteArray &jsonData, FeedData &feedData); static QByteArray toJSON(const FilePtr &file, SerializationOptions options = NoOptions); Index: src/drive/file.cpp =================================================================== --- src/drive/file.cpp +++ src/drive/file.cpp @@ -525,7 +525,7 @@ { const QByteArray ba = QByteArray::fromBase64(map[QStringLiteral("image")].toByteArray()); d->image = QImage::fromData(ba); - d->mimeType = map[QStringLiteral("mimeType")].toString(); + d->mimeType = map[Fields::MimeType].toString(); } File::Thumbnail::Thumbnail(const File::Thumbnail &other): @@ -655,21 +655,21 @@ FilePtr File::Private::fromJSON(const QVariantMap &map) { - if (!map.contains(QStringLiteral("kind")) || - map[QStringLiteral("kind")].toString() != QLatin1String("drive#file")) + if (!map.contains(File::Fields::Kind) || + map[File::Fields::Kind].toString() != QLatin1String("drive#file")) { return FilePtr(); } FilePtr file(new File()); - file->setEtag(map[QStringLiteral("etag")].toString()); - file->d->id = map[QStringLiteral("id")].toString(); - file->d->selfLink = map[QStringLiteral("selfLink")].toUrl(); - file->d->title = map[QStringLiteral("title")].toString(); - file->d->mimeType = map[QStringLiteral("mimeType")].toString(); - file->d->description = map[QStringLiteral("description")].toString(); - - const QVariantMap labelsData = map[QStringLiteral("labels")].toMap(); + file->setEtag(map[Fields::Etag].toString()); + file->d->id = map[Fields::Id].toString(); + file->d->selfLink = map[Fields::SelfLink].toUrl(); + file->d->title = map[Fields::Title].toString(); + file->d->mimeType = map[Fields::MimeType].toString(); + file->d->description = map[Fields::Description].toString(); + + const QVariantMap labelsData = map[Fields::Labels].toMap(); File::LabelsPtr labels(new File::Labels()); labels->d->starred = labelsData[QStringLiteral("starred")].toBool(); labels->d->hidden = labelsData[QStringLiteral("hidden")].toBool(); @@ -679,67 +679,67 @@ file->d->labels = labels; // FIXME FIXME FIXME Verify the date format - file->d->createdDate = QDateTime::fromString(map[QStringLiteral("createdDate")].toString(), Qt::ISODate); - file->d->modifiedDate = QDateTime::fromString(map[QStringLiteral("modifiedDate")].toString(), Qt::ISODate); - file->d->modifiedByMeDate = QDateTime::fromString(map[QStringLiteral("modifiedByMeDate")].toString(), Qt::ISODate); - file->d->downloadUrl = map[QStringLiteral("downloadUrl")].toUrl(); + file->d->createdDate = QDateTime::fromString(map[Fields::CreatedDate].toString(), Qt::ISODate); + file->d->modifiedDate = QDateTime::fromString(map[Fields::ModifiedDate].toString(), Qt::ISODate); + file->d->modifiedByMeDate = QDateTime::fromString(map[Fields::ModifiedByMeDate].toString(), Qt::ISODate); + file->d->downloadUrl = map[Fields::DownloadUrl].toUrl(); - const QVariantMap indexableTextData = map[QStringLiteral("indexableText")].toMap(); + const QVariantMap indexableTextData = map[Fields::IndexableText].toMap(); File::IndexableTextPtr indexableText(new File::IndexableText()); indexableText->d->text = indexableTextData[QStringLiteral("text")].toString(); file->d->indexableText = indexableText; - const QVariantMap userPermissionData = map[QStringLiteral("userPermission")].toMap(); + const QVariantMap userPermissionData = map[Fields::UserPermission].toMap(); file->d->userPermission = Permission::Private::fromJSON(userPermissionData); - file->d->fileExtension = map[QStringLiteral("fileExtension")].toString(); - file->d->md5Checksum = map[QStringLiteral("md5Checksum")].toString(); - file->d->fileSize = map[QStringLiteral("fileSize")].toLongLong(); - file->d->alternateLink = map[QStringLiteral("alternateLink")].toUrl(); - file->d->embedLink = map[QStringLiteral("embedLink")].toUrl(); - file->d->sharedWithMeDate = QDateTime::fromString(map[QStringLiteral("sharedWithMeDate")].toString(), Qt::ISODate); + file->d->fileExtension = map[Fields::FileExtension].toString(); + file->d->md5Checksum = map[Fields::Md5Checksum].toString(); + file->d->fileSize = map[Fields::FileSize].toLongLong(); + file->d->alternateLink = map[Fields::AlternateLink].toUrl(); + file->d->embedLink = map[Fields::EmbedLink].toUrl(); + file->d->sharedWithMeDate = QDateTime::fromString(map[Fields::SharedWithMeDate].toString(), Qt::ISODate); - const QVariantList parents = map[QStringLiteral("parents")].toList(); + const QVariantList parents = map[Fields::Parents].toList(); for (const QVariant &parent : parents) { file->d->parents << ParentReference::Private::fromJSON(parent.toMap()); } - const QVariantMap exportLinksData = map[QStringLiteral("exportLinks")].toMap(); + const QVariantMap exportLinksData = map[Fields::ExportLinks].toMap(); QVariantMap::ConstIterator iter = exportLinksData.constBegin(); for ( ; iter != exportLinksData.constEnd(); ++iter) { file->d->exportLinks.insert(iter.key(), iter.value().toUrl()); } file->d->originalFileName = map[QStringLiteral("originalFileName")].toString(); file->d->quotaBytesUsed = map[QStringLiteral("quotaBytesUsed")].toLongLong(); - file->d->ownerNames = map[QStringLiteral("ownerNames")].toStringList(); + file->d->ownerNames = map[Fields::OwnerNames].toStringList(); file->d->lastModifyingUserName = map[QStringLiteral("lastModifyingUserName")].toString(); - file->d->editable = map[QStringLiteral("editable")].toBool(); - file->d->writersCanShare = map[QStringLiteral("writersCanShare")].toBool(); - file->d->thumbnailLink = map[QStringLiteral("thumbnailLink")].toUrl(); - file->d->lastViewedByMeDate = QDateTime::fromString(map[QStringLiteral("lastViewedByMeDate")].toString(), Qt::ISODate); - file->d->webContentLink = map[QStringLiteral("webContentLink")].toUrl(); - file->d->explicitlyTrashed = map[QStringLiteral("explicitlyTrashed")].toBool(); - - const QVariantMap imageMetaData = map[QStringLiteral("imageMediaMetadata")].toMap(); + file->d->editable = map[Fields::Editable].toBool(); + file->d->writersCanShare = map[Fields::WritersCanShare].toBool(); + file->d->thumbnailLink = map[Fields::ThumbnailLink].toUrl(); + file->d->lastViewedByMeDate = QDateTime::fromString(map[Fields::LastViewedByMeDate].toString(), Qt::ISODate); + file->d->webContentLink = map[Fields::WebContentLink].toUrl(); + file->d->explicitlyTrashed = map[Fields::ExplicitlyTrashed].toBool(); + + const QVariantMap imageMetaData = map[Fields::ImageMediaMetadata].toMap(); file->d->imageMediaMetadata = File::ImageMediaMetadataPtr(new File::ImageMediaMetadata(imageMetaData)); - const QVariantMap thumbnailData = map[QStringLiteral("thumbnail")].toMap(); + const QVariantMap thumbnailData = map[Fields::Thumbnail].toMap(); File::ThumbnailPtr thumbnail(new File::Thumbnail(thumbnailData)); file->d->thumbnail = thumbnail; - file->d->webViewLink = map[QStringLiteral("webViewLink")].toUrl(); - file->d->iconLink = map[QStringLiteral("iconLink")].toUrl(); - file->d->shared = map[QStringLiteral("shared")].toBool(); + file->d->webViewLink = map[Fields::WebViewLink].toUrl(); + file->d->iconLink = map[Fields::IconLink].toUrl(); + file->d->shared = map[Fields::Shared].toBool(); - const QVariantList ownersList = map[QStringLiteral("owners")].toList(); + const QVariantList ownersList = map[Fields::Owners].toList(); for (const QVariant &owner : ownersList) { file->d->owners << User::fromJSON(owner.toMap()); } - const QVariantMap lastModifyingUser = map[QStringLiteral("lastModifyingUser")].toMap(); + const QVariantMap lastModifyingUser = map[Fields::LastModifyingUser].toMap(); file->d->lastModifyingUser = User::fromJSON(lastModifyingUser); return file; @@ -991,6 +991,57 @@ return (d->mimeType == File::folderMimeType()); } +const QString File::Fields::Kind = QStringLiteral("kind"); +const QString File::Fields::NextLink = QStringLiteral("nextLink"); +const QString File::Fields::NextPageToken = QStringLiteral("nextPageToken"); +const QString File::Fields::SelfLink = QStringLiteral("selfLink"); +const QString File::Fields::Etag = QStringLiteral("etag"); +const QString File::Fields::Id = QStringLiteral("id"); +const QString File::Fields::Title = QStringLiteral("title"); +const QString File::Fields::MimeType = QStringLiteral("mimeType"); +const QString File::Fields::Description = QStringLiteral("description"); +const QString File::Fields::Labels = QStringLiteral("labels"); +const QString File::Fields::CreatedDate = QStringLiteral("createdDate"); +const QString File::Fields::ModifiedDate = QStringLiteral("modifiedDate"); +const QString File::Fields::ModifiedByMeDate = QStringLiteral("modifiedByMeDate"); +const QString File::Fields::DownloadUrl = QStringLiteral("downloadUrl"); +const QString File::Fields::IndexableText = QStringLiteral("indexableText"); +const QString File::Fields::UserPermission = QStringLiteral("userPermission"); +const QString File::Fields::FileExtension = QStringLiteral("fileExtension"); +const QString File::Fields::Md5Checksum = QStringLiteral("md5Checksum"); +const QString File::Fields::FileSize = QStringLiteral("fileSize"); +const QString File::Fields::AlternateLink = QStringLiteral("alternateLink"); +const QString File::Fields::EmbedLink = QStringLiteral("embedLink"); +const QString File::Fields::SharedWithMeDate = QStringLiteral("sharedWithMeDate"); +const QString File::Fields::Parents = QStringLiteral("parents"); +const QString File::Fields::ExportLinks = QStringLiteral("exportLinks"); +const QString File::Fields::OriginalFilename = QStringLiteral("originalFilename"); +const QString File::Fields::OwnerNames = QStringLiteral("ownerNames"); +const QString File::Fields::LastModifiedByMeDate = QStringLiteral("lastModifiedByMeDate"); +const QString File::Fields::Editable = QStringLiteral("editable"); +const QString File::Fields::WritersCanShare = QStringLiteral("writersCanShare"); +const QString File::Fields::ThumbnailLink = QStringLiteral("thumbnailLink"); +const QString File::Fields::LastViewedByMeDate = QStringLiteral("lastViewedByMeDate"); +const QString File::Fields::WebContentLink = QStringLiteral("webContentLink"); +const QString File::Fields::ExplicitlyTrashed = QStringLiteral("explicitlyTrashed"); +const QString File::Fields::ImageMediaMetadata = QStringLiteral("imageMediaMetadata"); +const QString File::Fields::Thumbnail = QStringLiteral("thumbnail"); +const QString File::Fields::WebViewLink = QStringLiteral("webViewLink"); +const QString File::Fields::IconLink = QStringLiteral("iconLink"); +const QString File::Fields::Shared = QStringLiteral("shared"); +const QString File::Fields::Owners = QStringLiteral("owners"); +const QString File::Fields::LastModifyingUser = QStringLiteral("lastModifyingUser"); +const QString File::Fields::AppDataContents = QStringLiteral("appDataContents"); +const QString File::Fields::OpenWithLinks = QStringLiteral("openWithLinks"); +const QString File::Fields::DefaultOpenWithLink = QStringLiteral("defaultOpenWithLink"); +const QString File::Fields::HeadRevisionId = QStringLiteral("headRevisionId"); +const QString File::Fields::Copyable = QStringLiteral("copyable"); +const QString File::Fields::Properties = QStringLiteral("properties"); +const QString File::Fields::MarkedViewedByMeDate = QStringLiteral("markedViewedByMeDate"); +const QString File::Fields::Version = QStringLiteral("version"); +const QString File::Fields::SharingUser = QStringLiteral("sharingUser"); +const QString File::Fields::Permissions = QStringLiteral("permissions"); + FilePtr File::fromJSON(const QByteArray &jsonData) { QJsonDocument document = QJsonDocument::fromJson(jsonData); @@ -1018,8 +1069,8 @@ } const QVariant data = document.toVariant(); const QVariantMap map = data.toMap(); - if (!map.contains(QStringLiteral("kind")) || - map[QStringLiteral("kind")].toString() != QLatin1String("drive#fileList")) + if (!map.contains(File::Fields::Kind) || + map[Fields::Kind].toString() != QLatin1String("drive#fileList")) { return FilesList(); } @@ -1034,8 +1085,8 @@ } } - if (map.contains(QStringLiteral("nextLink"))) { - feedData.nextPageUrl = map[QStringLiteral("nextLink")].toUrl(); + if (map.contains(File::Fields::NextLink)) { + feedData.nextPageUrl = map[File::Fields::NextLink].toUrl(); } return list; @@ -1045,15 +1096,15 @@ { QVariantMap map; - map[QStringLiteral("kind")] = QLatin1String("drive#file"); + map[File::Fields::Kind] = QLatin1String("drive#file"); if (!file->description().isEmpty()) { - map[QStringLiteral("description")] = file->description(); + map[Fields::Description] = file->description(); } if (file->indexableText() && !file->indexableText()->text().isEmpty()) { QVariantMap indexableText; indexableText[QStringLiteral("text")] = file->indexableText()->text(); - map[QStringLiteral("indexableText")] = indexableText; + map[Fields::IndexableText] = indexableText; } if (file->labels()) { @@ -1063,33 +1114,33 @@ labels[QStringLiteral("starred")] = file->labels()->starred(); labels[QStringLiteral("trashed")] = file->labels()->trashed(); labels[QStringLiteral("viewed")] = file->labels()->viewed(); - map[QStringLiteral("labels")] = labels; + map[Fields::Labels] = labels; } if (file->lastViewedByMeDate().isValid()) { - map[QStringLiteral("lastViewedByMeDate")] = file->lastViewedByMeDate().toString(Qt::ISODate); + map[Fields::LastViewedByMeDate] = file->lastViewedByMeDate().toString(Qt::ISODate); } if (!file->mimeType().isEmpty()) { - map[QStringLiteral("mimeType")] = file->mimeType(); + map[Fields::MimeType] = file->mimeType(); } if (file->modifiedDate().isValid()) { - map[QStringLiteral("modifiedDate")] = file->modifiedDate().toString(Qt::ISODate); + map[Fields::ModifiedDate] = file->modifiedDate().toString(Qt::ISODate); } if (file->createdDate().isValid() && !(options & ExcludeCreationDate)) { - map[QStringLiteral("createdDate")] = file->createdDate().toString(Qt::ISODate); + map[Fields::CreatedDate] = file->createdDate().toString(Qt::ISODate); } if (file->modifiedByMeDate().isValid()) { - map[QStringLiteral("modifiedByMeDate")] = file->modifiedByMeDate().toString(Qt::ISODate); + map[Fields::ModifiedByMeDate] = file->modifiedByMeDate().toString(Qt::ISODate); } if (file->fileSize() > 0) { - map[QStringLiteral("fileSize")] = file->fileSize(); + map[Fields::FileSize] = file->fileSize(); } if (!file->title().isEmpty()) { - map[QStringLiteral("title")] = file->title(); + map[Fields::Title] = file->title(); } QVariantList parents; @@ -1099,35 +1150,35 @@ parents << ParentReference::Private::toJSON(parent); } if (!parents.isEmpty()) { - map[QStringLiteral("parents")] = parents; + map[Fields::Parents] = parents; } if (!file->etag().isEmpty()) { - map[QStringLiteral("etag")] = file->etag(); + map[Fields::Etag] = file->etag(); } if (!file->d->id.isEmpty()) { - map[QStringLiteral("id")] = file->d->id; + map[Fields::Id] = file->d->id; } if (!file->d->selfLink.isEmpty()) { - map[QStringLiteral("selfLink")] = file->d->selfLink; + map[Fields::SelfLink] = file->d->selfLink; } if (!file->d->downloadUrl.isEmpty()) { - map[QStringLiteral("downloadUrl")] = file->d->downloadUrl; + map[Fields::DownloadUrl] = file->d->downloadUrl; } if (!file->d->fileExtension.isEmpty()) { - map[QStringLiteral("fileExtension")] = file->d->fileExtension; + map[Fields::FileExtension] = file->d->fileExtension; } if (!file->d->md5Checksum.isEmpty()) { - map[QStringLiteral("md5Checksum")] = file->d->md5Checksum; + map[Fields::Md5Checksum] = file->d->md5Checksum; } if (!file->d->alternateLink.isEmpty()) { - map[QStringLiteral("alternateLink")] = file->d->alternateLink; + map[Fields::AlternateLink] = file->d->alternateLink; } if (!file->d->embedLink.isEmpty()) { - map[QStringLiteral("embedLink")] = file->d->embedLink; + map[Fields::EmbedLink] = file->d->embedLink; } if (!file->d->sharedWithMeDate.isNull()) { - map[QStringLiteral("sharedWithMeDate")] = file->d->sharedWithMeDate.toString(Qt::ISODate); + map[Fields::SharedWithMeDate] = file->d->sharedWithMeDate.toString(Qt::ISODate); } @@ -1138,38 +1189,38 @@ map[QStringLiteral("quotaBytesUsed")] = file->d->quotaBytesUsed; } if (!file->d->ownerNames.isEmpty()) { - map[QStringLiteral("ownerNames")] = QVariant(file->d->ownerNames); + map[Fields::OwnerNames] = QVariant(file->d->ownerNames); } if (!file->d->lastModifyingUserName.isEmpty()) { map[QStringLiteral("lastModifyingUserName")] = file->d->lastModifyingUserName; } if (!file->d->editable) { // default is true - map[QStringLiteral("editable")] = file->d->editable; + map[Fields::Editable] = file->d->editable; } if (file->d->writersCanShare) { // default is false - map[QStringLiteral("writersCanShare")] = file->d->writersCanShare; + map[Fields::WritersCanShare] = file->d->writersCanShare; } if (!file->d->thumbnailLink.isEmpty()) { - map[QStringLiteral("thumbnailLink")] = file->d->thumbnailLink; + map[Fields::ThumbnailLink] = file->d->thumbnailLink; } if (!file->d->lastViewedByMeDate.isNull()) { - map[QStringLiteral("lastViewedByMeDate")] = file->d->lastViewedByMeDate.toString(Qt::ISODate); + map[Fields::LastViewedByMeDate] = file->d->lastViewedByMeDate.toString(Qt::ISODate); } if (!file->d->webContentLink.isEmpty()) { - map[QStringLiteral("webContentLink")] = file->d->webContentLink; + map[Fields::WebContentLink] = file->d->webContentLink; } if (file->d->explicitlyTrashed) { - map[QStringLiteral("explicitlyTrashed")] = file->d->explicitlyTrashed; + map[Fields::ExplicitlyTrashed] = file->d->explicitlyTrashed; } if (!file->d->webViewLink.isEmpty()) { - map[QStringLiteral("webViewLink")] = file->d->webViewLink; + map[Fields::WebViewLink] = file->d->webViewLink; } if (!file->d->iconLink.isEmpty()) { - map[QStringLiteral("iconLink")] = file->d->iconLink; + map[Fields::IconLink] = file->d->iconLink; } if (file->d->shared) { - map[QStringLiteral("shared")] = file->d->shared; + map[Fields::Shared] = file->d->shared; } #if 0 @@ -1211,9 +1262,3 @@ QJsonDocument document = QJsonDocument::fromVariant(map); return document.toJson(QJsonDocument::Compact); } - - - - - - Index: src/drive/fileabstractmodifyjob.cpp =================================================================== --- src/drive/fileabstractmodifyjob.cpp +++ src/drive/fileabstractmodifyjob.cpp @@ -60,10 +60,8 @@ const QString fileId = filesIds.takeFirst(); const QUrl url = q->url(fileId); - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + q->account()->accessToken().toLatin1()); + QNetworkRequest request(url); request.setHeader(QNetworkRequest::ContentLengthHeader, 0); - request.setUrl(url); q->enqueueRequest(request); } Index: src/drive/fileabstractuploadjob.cpp =================================================================== --- src/drive/fileabstractuploadjob.cpp +++ src/drive/fileabstractuploadjob.cpp @@ -155,7 +155,6 @@ QUrlQuery query(url); query.addQueryItem(QStringLiteral("useContentAsIndexableText"), Utils::bool2Str(useContentAsIndexableText)); - QNetworkRequest request; QByteArray rawData; QString contentType; @@ -187,8 +186,7 @@ } url.setQuery(query); - request.setUrl(url); - request.setRawHeader("Authorization", "Bearer " + q->account()->accessToken().toLatin1()); + QNetworkRequest request(url); request.setHeader(QNetworkRequest::ContentLengthHeader, rawData.length()); request.setHeader(QNetworkRequest::ContentTypeHeader, contentType); request.setAttribute(QNetworkRequest::User, filePath); Index: src/drive/filecopyjob.cpp =================================================================== --- src/drive/filecopyjob.cpp +++ src/drive/filecopyjob.cpp @@ -65,7 +65,6 @@ q->updateUrl(url); QNetworkRequest request(url); - request.setRawHeader("Authorization", "Bearer " + q->account()->accessToken().toLatin1()); const QByteArray rawData = File::toJSON(file); Index: src/drive/filedeletejob.cpp =================================================================== --- src/drive/filedeletejob.cpp +++ src/drive/filedeletejob.cpp @@ -90,8 +90,6 @@ const QUrl url = DriveService::deleteFileUrl(fileId); QNetworkRequest request(url); - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); - enqueueRequest(request); } Index: src/drive/filefetchcontentjob.cpp =================================================================== --- src/drive/filefetchcontentjob.cpp +++ src/drive/filefetchcontentjob.cpp @@ -86,8 +86,6 @@ void FileFetchContentJob::start() { QNetworkRequest request(d->url); - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); - enqueueRequest(request); } Index: src/drive/filefetchjob.h =================================================================== --- src/drive/filefetchjob.h +++ src/drive/filefetchjob.h @@ -51,58 +51,10 @@ WRITE setUpdateViewedDate) public: - enum Fields { - AllFields = 0ULL, - Id = 1ULL << 0, - Title = 1ULL << 1, - MimeType = 1ULL << 2, - Description = 1ULL << 3, - Labels = 1ULL << 4, - CreatedDate = 1ULL << 5, - ModifiedDate = 1ULL << 6, - ModifiedByMeDate = 1ULL << 7, - DownloadUrl = 1ULL << 8, - IndexableText = 1ULL << 9, - UserPermission = 1ULL << 10, - FileExtension = 1ULL << 11, - MD5Checksum = 1ULL << 12, - FileSize = 1ULL << 13, - AlternateLink = 1ULL << 14, - EmbedLink = 1ULL << 15, - SharedWithMeDate = 1ULL << 16, - Parents = 1ULL << 17, - ExportLinks = 1ULL << 18, - OriginalFilename = 1ULL << 19, - OwnerNames = 1ULL << 20, - LastModifiedByMeDate = 1ULL << 21, - Editable = 1ULL << 22, - WritersCanShare = 1ULL << 23, - ThumbnailLink = 1ULL << 24, - LastViewedByMeDate = 1ULL << 25, - WebContentLink = 1ULL << 26, - ExplicitlyTrashed = 1ULL << 27, - ImageMediaMetadata = 1ULL << 28, - Thumbnail = 1ULL << 29, - WebViewLink = 1ULL << 30, - IconLink = 1ULL << 31, - Shared = 1ULL << 32, - Owners = 1ULL << 33, - LastModifyingUser = 1ULL << 34, - AppDataContents = 1ULL << 35, - OpenWithLinks = 1ULL << 36, - DefaultOpenWithLink = 1ULL << 37, - HeadRevisionId = 1ULL << 38, - Copyable = 1ULL << 39, - Properties = 1ULL << 40, - MarkedViewedByMeDate = 1ULL << 41, - Version = 1ULL << 42, - SharingUser = 1ULL << 43, - Permissions = 1ULL << 44, - - BasicFields = Id | Title | MimeType | CreatedDate | ModifiedDate | FileSize | DownloadUrl | Permissions, - AccessFields = CreatedDate | ModifiedDate | ModifiedByMeDate | LastModifiedByMeDate | LastViewedByMeDate | MarkedViewedByMeDate, - SharingFields = SharedWithMeDate | WritersCanShare | Shared | Owners | SharingUser | OwnerNames - // TODO: More? + struct FieldShorthands { + static const QStringList BasicFields; + static const QStringList AccessFields; + static const QStringList SharingFields; }; explicit FileFetchJob(const QString &fileId, @@ -114,12 +66,12 @@ explicit FileFetchJob(const AccountPtr &account, QObject *parent = nullptr); ~FileFetchJob() override; + void setFields(const QStringList &fields); + QStringList fields() const; + bool updateViewedDate() const; void setUpdateViewedDate(bool updateViewedDate); - void setFields(qulonglong fields); - qulonglong fields() const; - bool includeTeamDriveItems() const; void setIncludeTeamDriveItems(bool includeTeamDriveItems); Index: src/drive/filefetchjob.cpp =================================================================== --- src/drive/filefetchjob.cpp +++ src/drive/filefetchjob.cpp @@ -40,7 +40,6 @@ public: Private(FileFetchJob *parent); void processNext(); - QNetworkRequest createRequest(const QUrl &url); QStringList fieldsToStrings(qulonglong fields); FileSearchQuery searchQuery; @@ -51,210 +50,64 @@ bool updateViewedDate; - qulonglong fields; + QStringList fields; private: FileFetchJob *const q; }; FileFetchJob::Private::Private(FileFetchJob *parent): isFeed(false), updateViewedDate(false), - fields(FileFetchJob::AllFields), q(parent) { } -QNetworkRequest FileFetchJob::Private::createRequest(const QUrl &url) -{ - QNetworkRequest request; - request.setUrl(url); - request.setRawHeader("Authorization", "Bearer " + q->account()->accessToken().toLatin1()); - - return request; -} - -QStringList FileFetchJob::Private::fieldsToStrings(qulonglong fields) -{ - if (fields & AllFields) { - return QStringList(); - } - - QStringList fieldsStrings; - // Always fetch kind - fieldsStrings << QStringLiteral("kind"); - - // FIXME: Use QMetaEnum once it supports enums larger than int - if (fields & Id) { - fieldsStrings << QStringLiteral("id"); - } - if (fields & Title) { - fieldsStrings << QStringLiteral("title"); - } - if (fields & MimeType) { - fieldsStrings << QStringLiteral("mimeType"); - } - if (fields & Description) { - fieldsStrings << QStringLiteral("description"); - } - if (fields & Labels) { - fieldsStrings << QStringLiteral("labels"); - } - if (fields & CreatedDate) { - fieldsStrings << QStringLiteral("createdDate"); - } - if (fields & ModifiedDate) { - fieldsStrings << QStringLiteral("modifiedDate"); - } - if (fields & ModifiedByMeDate) { - fieldsStrings << QStringLiteral("modifiedByMeDate"); - } - if (fields & DownloadUrl) { - fieldsStrings << QStringLiteral("downloadUrl"); - } - if (fields & IndexableText) { - fieldsStrings << QStringLiteral("indexableText"); - } - if (fields & UserPermission) { - fieldsStrings << QStringLiteral("userPermission"); - } - if (fields & FileExtension) { - fieldsStrings << QStringLiteral("fileExtension"); - } - if (fields & MD5Checksum) { - fieldsStrings << QStringLiteral("md5Checksum"); - } - if (fields & FileSize) { - fieldsStrings << QStringLiteral("fileSize"); - } - if (fields & AlternateLink) { - fieldsStrings << QStringLiteral("alternateLink"); - } - if (fields & EmbedLink) { - fieldsStrings << QStringLiteral("embedLink"); - } - if (fields & SharedWithMeDate) { - fieldsStrings << QStringLiteral("sharedWithMeDate"); - } - if (fields & Parents) { - fieldsStrings << QStringLiteral("parents"); - } - if (fields & ExportLinks) { - fieldsStrings << QStringLiteral("exportLinks"); - } - if (fields & OriginalFilename) { - fieldsStrings << QStringLiteral("originalFilename"); - } - if (fields & OwnerNames) { - fieldsStrings << QStringLiteral("ownerNames"); - } - if (fields & LastModifiedByMeDate) { - fieldsStrings << QStringLiteral("lastModifiedByMeDate"); - } - if (fields & Editable) { - fieldsStrings << QStringLiteral("editable"); - } - if (fields & WritersCanShare) { - fieldsStrings << QStringLiteral("writersCanShare"); - } - if (fields & ThumbnailLink) { - fieldsStrings << QStringLiteral("thumbnailLink"); - } - if (fields & LastViewedByMeDate) { - fieldsStrings << QStringLiteral("lastViewedByMeDate"); - } - if (fields & WebContentLink) { - fieldsStrings << QStringLiteral("webContentLink"); - } - if (fields & ExplicitlyTrashed) { - fieldsStrings << QStringLiteral("explicitlyTrashed"); - } - if (fields & ImageMediaMetadata) { - fieldsStrings << QStringLiteral("imageMediaMetadata"); - } - if (fields & Thumbnail) { - fieldsStrings << QStringLiteral("thumbnail"); - } - if (fields & WebViewLink) { - fieldsStrings << QStringLiteral("webViewLink"); - } - if (fields & IconLink) { - fieldsStrings << QStringLiteral("iconLink"); - } - if (fields & Shared) { - fieldsStrings << QStringLiteral("shared"); - } - if (fields & Owners) { - fieldsStrings << QStringLiteral("owners"); - } - if (fields & LastModifyingUser) { - fieldsStrings << QStringLiteral("lastModifyingUser"); - } - if (fields & AppDataContents) { - fieldsStrings << QStringLiteral("appDataContents"); - } - if (fields & OpenWithLinks) { - fieldsStrings << QStringLiteral("openWithLinks"); - } - if (fields & DefaultOpenWithLink) { - fieldsStrings << QStringLiteral("defaultOpenWithLink"); - } - if (fields & HeadRevisionId) { - fieldsStrings << QStringLiteral("headRevisionId"); - } - if (fields & Copyable) { - fieldsStrings << QStringLiteral("copyable"); - } - if (fields & Properties) { - fieldsStrings << QStringLiteral("properties"); - } - if (fields & MarkedViewedByMeDate) { - fieldsStrings << QStringLiteral("markedViewedByMeDate"); - } - if (fields & Version) { - fieldsStrings << QStringLiteral("version"); - } - if (fields & SharingUser) { - fieldsStrings << QStringLiteral("sharingUser"); - } - if (fields & Permissions) { - fieldsStrings << QStringLiteral("permissions"); - } - - return fieldsStrings; -} - - void FileFetchJob::Private::processNext() { QUrl url; if (isFeed) { url = DriveService::fetchFilesUrl(); + QUrlQuery query(url); if (!searchQuery.isEmpty()) { query.addQueryItem(QStringLiteral("q"), searchQuery.serialize()); } - if (fields != FileFetchJob::AllFields) { - const QStringList fieldsStrings = fieldsToStrings(fields); - query.addQueryItem(QStringLiteral("fields"), - QStringLiteral("etag,kind,nextLink,nextPageToken,selfLink,items(%1)").arg(fieldsStrings.join(QStringLiteral(",")))); - } - url.setQuery(query); + + if (!fields.isEmpty()) { + // Deserializing requires kind attribute, always force add it + if (!fields.contains(File::Fields::Kind)) { + fields << File::Fields::Kind; + } + QString itemFields = QStringLiteral("items(%1)").arg(fields.join(QStringLiteral(","))); + Job *baseJob = dynamic_cast(q); + baseJob->setFields({ + File::Fields::Etag, + File::Fields::Kind, + File::Fields::NextLink, + File::Fields::NextPageToken, + File::Fields::SelfLink, + itemFields + }); + } } else { if (filesIDs.isEmpty()) { q->emitFinished(); return; } const QString fileId = filesIDs.takeFirst(); url = DriveService::fetchFileUrl(fileId); - if (fields != FileFetchJob::AllFields) { - const QStringList fieldsStrings = fieldsToStrings(fields); - QUrlQuery query(url); - query.addQueryItem(QStringLiteral("fields"), fieldsStrings.join(QStringLiteral(","))); - url.setQuery(query); + + Job *baseJob = dynamic_cast(q); + if (!fields.isEmpty()) { + // Deserializing requires kind attribute, always force add it + if (!fields.contains(File::Fields::Kind)) { + fields << File::Fields::Kind; + } + baseJob->setFields(fields); } } @@ -268,7 +121,8 @@ } url.setQuery(withTeamdriveQuery); - q->enqueueRequest(createRequest(url)); + QNetworkRequest request(url); + q->enqueueRequest(request); } FileFetchJob::FileFetchJob(const QString &fileId, @@ -329,12 +183,17 @@ d->processNext(); } -void FileFetchJob::setFields(qulonglong fields) +void FileFetchJob::setFields(const QStringList &fields) { + if (isRunning()) { + qCWarning(KGAPIDebug) << "Called setFields() on running job. Ignoring."; + return; + } + d->fields = fields; } -qulonglong FileFetchJob::fields() const +QStringList FileFetchJob::fields() const { return d->fields; } @@ -359,6 +218,34 @@ d->supportsTeamDrives = supportsTeamDrives; } +const QStringList FileFetchJob::FieldShorthands::BasicFields = { + File::Fields::Id, + File::Fields::Title, + File::Fields::MimeType, + File::Fields::CreatedDate, + File::Fields::ModifiedDate, + File::Fields::FileSize, + File::Fields::DownloadUrl, + File::Fields::Permissions +}; + +const QStringList FileFetchJob::FieldShorthands::AccessFields = { + File::Fields::CreatedDate, + File::Fields::ModifiedDate, + File::Fields::ModifiedByMeDate, + File::Fields::LastModifiedByMeDate, + File::Fields::LastViewedByMeDate, + File::Fields::MarkedViewedByMeDate +}; + +const QStringList FileFetchJob::FieldShorthands::SharingFields = { + File::Fields::SharedWithMeDate, + File::Fields::WritersCanShare, + File::Fields::Shared, + File::Fields::Owners, + File::Fields::SharingUser, + File::Fields::OwnerNames +}; ObjectsList FileFetchJob::handleReplyWithItems(const QNetworkReply *reply, const QByteArray &rawData) @@ -374,7 +261,7 @@ items << File::fromJSONFeed(rawData, feedData); if (feedData.nextPageUrl.isValid()) { - const QNetworkRequest request = d->createRequest(feedData.nextPageUrl); + QNetworkRequest request(feedData.nextPageUrl); enqueueRequest(request); } Index: src/drive/parentreferencecreatejob.cpp =================================================================== --- src/drive/parentreferencecreatejob.cpp +++ src/drive/parentreferencecreatejob.cpp @@ -61,9 +61,7 @@ const ParentReferencePtr reference = references.takeFirst(); const QUrl url = DriveService::createParentReferenceUrl(fileId); - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + q->account()->accessToken().toLatin1()); - request.setUrl(url); + QNetworkRequest request(url); const QByteArray rawData = ParentReference::toJSON(reference); q->enqueueRequest(request, rawData, QStringLiteral("application/json")); Index: src/drive/parentreferencedeletejob.cpp =================================================================== --- src/drive/parentreferencedeletejob.cpp +++ src/drive/parentreferencedeletejob.cpp @@ -101,7 +101,6 @@ const QUrl url = DriveService::deleteParentReferenceUrl(d->fileId, referenceId); QNetworkRequest request(url); - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); enqueueRequest(request); } Index: src/drive/parentreferencefetchjob.cpp =================================================================== --- src/drive/parentreferencefetchjob.cpp +++ src/drive/parentreferencefetchjob.cpp @@ -67,13 +67,13 @@ void ParentReferenceFetchJob::start() { - QNetworkRequest request; + QUrl url; if (d->referenceId.isEmpty()) { - request.setUrl(DriveService::fetchParentReferencesUrl(d->fileId)); + url = DriveService::fetchParentReferencesUrl(d->fileId); } else { - request.setUrl(DriveService::fetchParentReferenceUrl(d->fileId, d->referenceId)); + url = DriveService::fetchParentReferenceUrl(d->fileId, d->referenceId); } - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); + QNetworkRequest request(url); enqueueRequest(request); } Index: src/drive/permissioncreatejob.cpp =================================================================== --- src/drive/permissioncreatejob.cpp +++ src/drive/permissioncreatejob.cpp @@ -62,9 +62,7 @@ const QUrl url = DriveService::createPermissionUrl(fileId); - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + q->account()->accessToken().toLatin1()); - request.setUrl(url); + QNetworkRequest request(url); const QByteArray rawData = Permission::toJSON(permission); q->enqueueRequest(request, rawData, QStringLiteral("application/json")); Index: src/drive/permissiondeletejob.cpp =================================================================== --- src/drive/permissiondeletejob.cpp +++ src/drive/permissiondeletejob.cpp @@ -99,7 +99,6 @@ const QString permissionId = d->permissionsIds.takeFirst(); const QUrl url = DriveService::deletePermissionUrl(d->fileId, permissionId); QNetworkRequest request(url); - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); enqueueRequest(request); } Index: src/drive/permissionfetchjob.cpp =================================================================== --- src/drive/permissionfetchjob.cpp +++ src/drive/permissionfetchjob.cpp @@ -89,14 +89,14 @@ void PermissionFetchJob::start() { - QNetworkRequest request; + QUrl url; if (d->permissionId.isEmpty()) { - request.setUrl(DriveService::fetchPermissionsUrl(d->fileId)); + url = DriveService::fetchPermissionsUrl(d->fileId); } else { - request.setUrl(DriveService::fetchPermissionUrl(d->fileId, d->permissionId)); + url = DriveService::fetchPermissionUrl(d->fileId, d->permissionId); } - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); + QNetworkRequest request(url); enqueueRequest(request); } Index: src/drive/permissionmodifyjob.cpp =================================================================== --- src/drive/permissionmodifyjob.cpp +++ src/drive/permissionmodifyjob.cpp @@ -63,7 +63,6 @@ const QUrl url = DriveService::modifyPermissionUrl(fileId, permission->id()); QNetworkRequest request(url); - request.setRawHeader("Authorization", "Bearer " + q->account()->accessToken().toLatin1()); const QByteArray rawData = Permission::toJSON(permission); q->enqueueRequest(request, rawData, QStringLiteral("application/json")); Index: src/drive/revisiondeletejob.cpp =================================================================== --- src/drive/revisiondeletejob.cpp +++ src/drive/revisiondeletejob.cpp @@ -99,8 +99,6 @@ const QUrl url = DriveService::deleteRevisionUrl(d->fileId, revisionId); QNetworkRequest request(url); - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); - enqueueRequest(request); } Index: src/drive/revisionfetchjob.cpp =================================================================== --- src/drive/revisionfetchjob.cpp +++ src/drive/revisionfetchjob.cpp @@ -66,13 +66,13 @@ void RevisionFetchJob::start() { - QNetworkRequest request; + QUrl url; if (d->revisionId.isEmpty()) { - request.setUrl(DriveService::fetchRevisionsUrl(d->fileId)); + url = DriveService::fetchRevisionsUrl(d->fileId); } else { - request.setUrl(DriveService::fetchRevisionUrl(d->fileId, d->revisionId)); + url = DriveService::fetchRevisionUrl(d->fileId, d->revisionId); } - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); + QNetworkRequest request(url); enqueueRequest(request); } Index: src/drive/revisionmodifyjob.cpp =================================================================== --- src/drive/revisionmodifyjob.cpp +++ src/drive/revisionmodifyjob.cpp @@ -62,7 +62,6 @@ const QUrl url = DriveService::modifyRevisionUrl(fileId, revision->id()); QNetworkRequest request(url); - request.setRawHeader("Authorization", "Bearer " + q->account()->accessToken().toLatin1()); const QByteArray rawData = Revision::toJSON(revision); q->enqueueRequest(request, rawData, QStringLiteral("application/json")); Index: src/drive/teamdrivecreatejob.cpp =================================================================== --- src/drive/teamdrivecreatejob.cpp +++ src/drive/teamdrivecreatejob.cpp @@ -66,14 +66,13 @@ QUrl url = DriveService::fetchTeamdrivesUrl(); - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + q->account()->accessToken().toLatin1()); QUrlQuery query(url); if (!requestId.isEmpty()) { query.addQueryItem(RequestIdParam, requestId); } url.setQuery(query); - request.setUrl(url); + + QNetworkRequest request(url); const QByteArray rawData = Teamdrive::toJSON(teamdrive); q->enqueueRequest(request, rawData, QStringLiteral("application/json")); Index: src/drive/teamdrivedeletejob.cpp =================================================================== --- src/drive/teamdrivedeletejob.cpp +++ src/drive/teamdrivedeletejob.cpp @@ -82,9 +82,8 @@ const QString teamdriveId = d->teamdrivesIds.takeFirst(); const QUrl url = DriveService::fetchTeamdriveUrl(teamdriveId); - QNetworkRequest request(url); - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); + QNetworkRequest request(url); enqueueRequest(request); } Index: src/drive/teamdrivefetchjob.cpp =================================================================== --- src/drive/teamdrivefetchjob.cpp +++ src/drive/teamdrivefetchjob.cpp @@ -44,7 +44,6 @@ { public: Private(TeamdriveFetchJob *parent); - QNetworkRequest createRequest(const QUrl &url); TeamdriveSearchQuery searchQuery; QString teamdriveId; @@ -61,16 +60,6 @@ { } -QNetworkRequest TeamdriveFetchJob::Private::createRequest(const QUrl &url) -{ - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + q->account()->accessToken().toLatin1()); - request.setUrl(url); - - return request; -} - - TeamdriveFetchJob::TeamdriveFetchJob(const QString &teamdriveId, const AccountPtr &account, QObject *parent): @@ -137,7 +126,7 @@ url = DriveService::fetchTeamdriveUrl(d->teamdriveId); } - const QNetworkRequest request = d->createRequest(url); + QNetworkRequest request(url); enqueueRequest(request); } @@ -169,7 +158,7 @@ if (feedData.nextPageUrl.isValid()) { // Reapply query options applyRequestParameters(feedData.nextPageUrl); - const QNetworkRequest request = d->createRequest(feedData.nextPageUrl); + QNetworkRequest request(feedData.nextPageUrl); enqueueRequest(request); } Index: src/drive/teamdrivemodifyjob.cpp =================================================================== --- src/drive/teamdrivemodifyjob.cpp +++ src/drive/teamdrivemodifyjob.cpp @@ -62,7 +62,6 @@ const QUrl url = DriveService::fetchTeamdriveUrl(teamdrive->id()); QNetworkRequest request(url); - request.setRawHeader("Authorization", "Bearer " + q->account()->accessToken().toLatin1()); const QByteArray rawData = Teamdrive::toJSON(teamdrive); q->enqueueRequest(request, rawData, QStringLiteral("application/json")); Index: src/latitude/locationcreatejob.cpp =================================================================== --- src/latitude/locationcreatejob.cpp +++ src/latitude/locationcreatejob.cpp @@ -69,10 +69,8 @@ url = LatitudeService::insertLocationUrl(); } - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); + QNetworkRequest request(url); request.setRawHeader("GData-Version", LatitudeService::APIVersion().toLatin1()); - request.setUrl(url); const QByteArray rawData = LatitudeService::locationToJSON(d->location); Index: src/latitude/locationdeletejob.cpp =================================================================== --- src/latitude/locationdeletejob.cpp +++ src/latitude/locationdeletejob.cpp @@ -89,7 +89,6 @@ } QNetworkRequest request(url); - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); request.setRawHeader("GData-Version", LatitudeService::APIVersion().toLatin1()); QStringList headers; Index: src/latitude/locationfetchhistoryjob.cpp =================================================================== --- src/latitude/locationfetchhistoryjob.cpp +++ src/latitude/locationfetchhistoryjob.cpp @@ -59,10 +59,8 @@ QNetworkRequest LocationFetchHistoryJob::Private::createRequest(const QUrl& url) { - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + q->account()->accessToken().toLatin1()); + QNetworkRequest request(url); request.setRawHeader("GData-Version", LatitudeService::APIVersion().toLatin1()); - request.setUrl(url); return request; } Index: src/latitude/locationfetchjob.cpp =================================================================== --- src/latitude/locationfetchjob.cpp +++ src/latitude/locationfetchjob.cpp @@ -87,10 +87,8 @@ } else { url = LatitudeService::retrieveLocationUrl(d->timestamp, d->granularity); } - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); + QNetworkRequest request(url); request.setRawHeader("GData-Version", LatitudeService::APIVersion().toLatin1()); - request.setUrl(url); enqueueRequest(request); } Index: src/tasks/taskcreatejob.cpp =================================================================== --- src/tasks/taskcreatejob.cpp +++ src/tasks/taskcreatejob.cpp @@ -95,9 +95,7 @@ query.addQueryItem(QStringLiteral("parent"), d->parentId); } url.setQuery(query); - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); - request.setUrl(url); + QNetworkRequest request(url); const QByteArray rawData = TasksService::taskToJSON(task); Index: src/tasks/taskdeletejob.cpp =================================================================== --- src/tasks/taskdeletejob.cpp +++ src/tasks/taskdeletejob.cpp @@ -61,7 +61,6 @@ const QString taskId = tasksIds.current(); const QUrl url = TasksService::removeTaskUrl(taskListId, taskId); QNetworkRequest request(url); - request.setRawHeader("Authorization", "Bearer " + q->account()->accessToken().toLatin1()); QStringList headers; const auto rawHeaderList = request.rawHeaderList(); Index: src/tasks/taskfetchjob.cpp =================================================================== --- src/tasks/taskfetchjob.cpp +++ src/tasks/taskfetchjob.cpp @@ -68,9 +68,7 @@ QNetworkRequest TaskFetchJob::Private::createRequest(const QUrl& url) { - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + q->account()->accessToken().toLatin1()); - request.setUrl(url); + QNetworkRequest request(url); QStringList headers; const auto rawHeaderList = request.rawHeaderList(); Index: src/tasks/tasklistcreatejob.cpp =================================================================== --- src/tasks/tasklistcreatejob.cpp +++ src/tasks/tasklistcreatejob.cpp @@ -70,9 +70,7 @@ const TaskListPtr taskList = d->taskLists.current(); const QUrl url = TasksService::createTaskListUrl(); - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); - request.setUrl(url); + QNetworkRequest request(url); const QByteArray rawData = TasksService::taskListToJSON(taskList); Index: src/tasks/tasklistdeletejob.cpp =================================================================== --- src/tasks/tasklistdeletejob.cpp +++ src/tasks/tasklistdeletejob.cpp @@ -58,7 +58,6 @@ const QString taskListId = taskListsIds.current(); const QUrl url = TasksService::removeTaskListUrl(taskListId); QNetworkRequest request(url); - request.setRawHeader("Authorization", "Bearer " + q->account()->accessToken().toLatin1()); QStringList headers; const auto rawHeaderList = request.rawHeaderList(); Index: src/tasks/tasklistfetchjob.cpp =================================================================== --- src/tasks/tasklistfetchjob.cpp +++ src/tasks/tasklistfetchjob.cpp @@ -49,9 +49,7 @@ QNetworkRequest TaskListFetchJob::Private::createRequest(const QUrl& url) { - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + q->account()->accessToken().toLatin1()); - request.setUrl(url); + QNetworkRequest request(url); QStringList headers; const auto rawHeaderList = request.rawHeaderList(); Index: src/tasks/tasklistmodifyjob.cpp =================================================================== --- src/tasks/tasklistmodifyjob.cpp +++ src/tasks/tasklistmodifyjob.cpp @@ -72,9 +72,7 @@ const TaskListPtr taskList = d->taskLists.current(); const QUrl url = TasksService::updateTaskListUrl(taskList->uid()); - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); - request.setUrl(url); + QNetworkRequest request(url); const QByteArray rawData = TasksService::taskListToJSON(taskList); Index: src/tasks/taskmodifyjob.cpp =================================================================== --- src/tasks/taskmodifyjob.cpp +++ src/tasks/taskmodifyjob.cpp @@ -73,9 +73,7 @@ const TaskPtr task = d->tasks.current(); const QUrl url = TasksService::updateTaskUrl(d->taskListId, task->uid()); - QNetworkRequest request; - request.setRawHeader("Authorization", "Bearer " + account()->accessToken().toLatin1()); - request.setUrl(url); + QNetworkRequest request(url); const QByteArray rawData = TasksService::taskToJSON(task); Index: src/tasks/taskmovejob.cpp =================================================================== --- src/tasks/taskmovejob.cpp +++ src/tasks/taskmovejob.cpp @@ -62,7 +62,6 @@ const QString taskId = tasksIds.current(); const QUrl url = TasksService::moveTaskUrl(taskListId, taskId, newParentId); QNetworkRequest request(url); - request.setRawHeader("Authorization", "Bearer " + q->account()->accessToken().toLatin1()); QStringList headers; const auto rawHeaderList = request.rawHeaderList();