@@ -431,39 +431,32 @@ private void pruneBackups(@NotNull FQID parent) throws Exception {
431431 if (fileLimit == -1 ) {
432432 return ;
433433 }
434- Request request = new Request .Builder ()
434+ Request childItemRequest = new Request .Builder ()
435435 .addHeader ("Authorization" , "Bearer " + accessToken )
436436 .url ("https://graph.microsoft.com/v1.0/drives/" + parent .driveId + "/items/" + parent .itemId + "/children?sort_by=createdDateTime" )
437437 .build ();
438- Response response = DriveBackup .httpClient .newCall (request ).execute ();
439- JSONObject parsedResponse = new JSONObject (response .body ().string ());
440- response .close ();
441- ArrayList <String > fileIDs = new ArrayList <>();
442- JSONArray jsonArray = parsedResponse .getJSONArray ("value" );
443- for (int i = 0 ; i < jsonArray .length (); i ++) {
444- fileIDs .add (jsonArray .getJSONObject (i ).getString ("id" ));
438+ JSONArray items ;
439+ try (Response childItemResponse = DriveBackup .httpClient .newCall (childItemRequest ).execute ()) {
440+ JSONObject parsedResponse = new JSONObject (childItemResponse .body ().string ());
441+ items = parsedResponse .getJSONArray ("value" );
445442 }
446- if (fileLimit < fileIDs .size ()){
447- logger .info (
448- intl ("backup-method-limit-reached" ),
449- "file-count" , String .valueOf (fileIDs .size ()),
450- "upload-method" , getName (),
451- "file-limit" , String .valueOf (fileLimit ));
443+ if (fileLimit >= items .length ()) {
444+ return ;
452445 }
453- for ( Iterator < String > iterator = fileIDs . listIterator (); iterator . hasNext (); ) {
454- String fileIDValue = iterator . next ();
455- if ( fileLimit < fileIDs . size ()) {
456- request = new Request . Builder ()
457- . addHeader ( "Authorization " , "Bearer " + accessToken )
458- . url ( "https://graph.microsoft.com/v1.0/drives/" + parent . driveId + "/items/" + fileIDValue )
459- . delete ()
460- . build ( );
461- DriveBackup . httpClient . newCall ( request ). execute (). close ();
462- iterator . remove ();
463- }
464- if ( fileIDs . size () <= fileLimit ){
465- break ;
466- }
446+ logger . info (
447+ intl ( "backup-method-limit-reached" ),
448+ "file-count" , String . valueOf ( items . length ()),
449+ "upload-method" , getName (),
450+ "file-limit " , String . valueOf ( fileLimit ));
451+ int itemsToDelete = items . length () - fileLimit ;
452+ for ( int i = 0 ; i < itemsToDelete ; i ++) {
453+ String fileIDValue = items . getJSONObject ( i ). getString ( "id" );
454+ Request deleteRequest = new Request . Builder ()
455+ . addHeader ( "Authorization" , "Bearer " + accessToken )
456+ . url ( "https://graph.microsoft.com/v1.0/drives/" + parent . driveId + "/items/" + fileIDValue )
457+ . delete ()
458+ . build () ;
459+ DriveBackup . httpClient . newCall ( deleteRequest ). execute (). close (); // TODO handle deletion failure
467460 }
468461 }
469462
0 commit comments