@@ -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