Skip to content

Commit 71dfd15

Browse files
change api calls to use drives variant
1 parent a4791fa commit 71dfd15

File tree

1 file changed

+26
-22
lines changed

1 file changed

+26
-22
lines changed

DriveBackup/src/main/java/ratismal/drivebackup/uploaders/onedrive/OneDriveUploader.java

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -114,28 +114,30 @@ public void test(java.io.File testFile) {
114114
try {
115115
String destination = normalizePath(ConfigParser.getConfig().backupStorage.remoteDirectory);
116116
FQID destinationId = createPath(destination);
117-
Request request = new Request.Builder()
117+
Request uploadRequest = new Request.Builder()
118118
.addHeader("Authorization", "Bearer " + accessToken)
119-
.url("https://graph.microsoft.com/v1.0/me/drive/root:/" + destination + "/" + testFile.getName() + ":/content")
119+
.url("https://graph.microsoft.com/v1.0/drives/" + destinationId.driveId + "/items/" + destinationId.itemId
120+
+ ":/" + testFile.getName() + ":/content")
120121
.put(RequestBody.create(testFile, MediaType.parse("plain/txt")))
121122
.build();
122-
Response response = DriveBackup.httpClient.newCall(request).execute();
123-
int statusCode = response.code();
124-
response.close();
125-
if (statusCode != 201) {
126-
setErrorOccurred(true);
123+
String testFileId;
124+
try (Response response = DriveBackup.httpClient.newCall(uploadRequest).execute()) {
125+
if (response.code() != 201) {
126+
setErrorOccurred(true);
127+
}
128+
JSONObject parsedResponse = new JSONObject(response.body().string());
129+
testFileId = parsedResponse.getString("id");
127130
}
128131
TimeUnit.SECONDS.sleep(5);
129-
request = new Request.Builder()
132+
Request delteRequest = new Request.Builder()
130133
.addHeader("Authorization", "Bearer " + accessToken)
131-
.url("https://graph.microsoft.com/v1.0/me/drive/root:/" + destination + "/" + testFile.getName() + ":/")
132-
.delete() // TODO delete permanently
134+
.url("https://graph.microsoft.com/v1.0/drives/" + destinationId.driveId + "/items/" + testFileId)
135+
.delete()
133136
.build();
134-
response = DriveBackup.httpClient.newCall(request).execute();
135-
statusCode = response.code();
136-
response.close();
137-
if (statusCode != 204) {
138-
setErrorOccurred(true);
137+
try (Response response = DriveBackup.httpClient.newCall(delteRequest).execute()) {
138+
if (response.code() != 204) {
139+
setErrorOccurred(true);
140+
}
139141
}
140142
} catch (Exception exception) {
141143
NetUtil.catchException(exception, "graph.microsoft.com", logger);
@@ -158,7 +160,8 @@ public void uploadFile(java.io.File file, String location) throws IOException {
158160
FQID destinationId = createPath(destinationPath);
159161
Request request = new Request.Builder()
160162
.addHeader("Authorization", "Bearer " + accessToken)
161-
.url("https://graph.microsoft.com/v1.0/me/drive/root:/" + destinationPath + "/" + file.getName() + ":/createUploadSession")
163+
.url("https://graph.microsoft.com/v1.0/drives/" + destinationId.driveId
164+
+ "/items/" + destinationId.itemId+ ":/" + file.getName() + ":/createUploadSession")
162165
.post(RequestBody.create("{}", jsonMediaType))
163166
.build();
164167
JSONObject parsedResponse;
@@ -185,12 +188,13 @@ public void uploadFile(java.io.File file, String location) throws IOException {
185188
retryCount = 0;
186189
} else if (uploadResponse.code() == 201 || uploadResponse.code() == 200) {
187190
break;
188-
} else { // conflict after successful upload not handled
191+
} else { // TODO conflict after successful upload not handled
189192
if (retryCount > MAX_RETRY_ATTEMPTS) {
190193
request = new Request.Builder().url(uploadURL).delete().build();
191194
DriveBackup.httpClient.newCall(request).execute().close();
192195
throw new IOException(String.format("Upload failed after %d retries. %d %s", MAX_RETRY_ATTEMPTS, uploadResponse.code(), uploadResponse.message()));
193196
}
197+
// TODO handle 507 Insufficent Storage?
194198
if (uploadResponse.code() >= 500 && uploadResponse.code() < 600) {
195199
Thread.sleep(exponentialBackoffMillis);
196200
exponentialBackoffMillis *= EXPONENTIAL_BACKOFF_FACTOR;
@@ -200,7 +204,7 @@ public void uploadFile(java.io.File file, String location) throws IOException {
200204
}
201205
}
202206
try {
203-
pruneBackups(destinationPath);
207+
pruneBackups(destinationId);
204208
} catch (Exception e) {
205209
logger.log(intl("backup-method-prune-failed"));
206210
throw e;
@@ -286,7 +290,7 @@ private FQID createFolder(FQID root, String folder) throws IOException {
286290
+ "\", \"folder\": {}, \"@microsoft.graph.conflictBehavior\": \"fail\" }", jsonMediaType);
287291
Request request = new Request.Builder()
288292
.addHeader("Authorization", "Bearer " + accessToken)
289-
.url("https://graph.microsoft.com/v1.0/me/drive/root/children")
293+
.url("https://graph.microsoft.com/v1.0/drives/" + root.driveId + "/items/" + root.itemId + "/children")
290294
.post(requestBody)
291295
.build();
292296
try (Response response = DriveBackup.httpClient.newCall(request).execute()) {
@@ -402,14 +406,14 @@ private FQID getFolder(FQID root, String folder) {
402406
* @param parent the folder containing the files
403407
* @throws Exception
404408
*/
405-
private void pruneBackups(String parent) throws Exception {
409+
private void pruneBackups(FQID parent) throws Exception {
406410
int fileLimit = ConfigParser.getConfig().backupStorage.keepCount;
407411
if (fileLimit == -1) {
408412
return;
409413
}
410414
Request request = new Request.Builder()
411415
.addHeader("Authorization", "Bearer " + accessToken)
412-
.url("https://graph.microsoft.com/v1.0/me/drive/root:/" + parent + ":/children?sort_by=createdDateTime")
416+
.url("https://graph.microsoft.com/v1.0/drives/" + parent.driveId + "/items/" + parent.itemId + "/children?sort_by=createdDateTime")
413417
.build();
414418
Response response = DriveBackup.httpClient.newCall(request).execute();
415419
JSONObject parsedResponse = new JSONObject(response.body().string());
@@ -431,7 +435,7 @@ private void pruneBackups(String parent) throws Exception {
431435
if (fileLimit < fileIDs.size()) {
432436
request = new Request.Builder()
433437
.addHeader("Authorization", "Bearer " + accessToken)
434-
.url("https://graph.microsoft.com/v1.0/me/drive/items/" + fileIDValue)
438+
.url("https://graph.microsoft.com/v1.0/drives/" + parent.driveId + "/items/" + fileIDValue)
435439
.delete()
436440
.build();
437441
DriveBackup.httpClient.newCall(request).execute().close();

0 commit comments

Comments
 (0)