Google photos - нет teamDriveId, но API считает, что это командный диск - PullRequest
0 голосов
/ 24 октября 2018

ОК, поэтому я разработал приложение с appmaker, которое может перемещать файлы с личных дисков на групповые диски и наоборот.Это менее тривиально, чем кажется, поскольку процесс перемещения / копирования отличается для личных и командных дисков.Он отлично работает, за исключением файлов на фотографиях Google, которые отображаются на диске.

через приложение, которое мы получаем FileId и FolderId.Я проверяю, где находится текущий файл и целевая папка с file.teamDriveId, что является ложным-y для файлов / папок на личном диске, и затем направляю код к правильной функции, чтобы фактически выполнить перемещение, см. function moveFileToFolder.

проблема: google photos drive test false для .teamDriveId (т. е. на персональном диске, где они отображаются в обычном интерфейсе google), но при обработке function D2T код ломается и выдает ошибкучто это файл Team Drive Exception: Cannot use this operation on a Team Drive item.однако файл не имеет teamDriveId.checkmate!

одна идея, которую я имел, состояла в том, чтобы получить teamDriveId для фотографий Google и добавить в файл внутри фотографий Google, а затем скопировать, но, похоже, это не сработает.Если у кого есть идея, буду благодарен .. спасибо.

/* 
moveFiletoFolder first redirects to the correct function
Drive to Drive : D2D
Team to Team: T2T
Drive To team: D2T
team to drive: T2D
*/



function moveT2T(fileId, newFolderId, Description){

  var file = Drive.Files.get(fileId, {supportsTeamDrives: true});
  var folder=Drive.Files.get(newFolderId, {supportsTeamDrives: true});
  console.log(file.title +' moveT2T ' + folder.title); 


//first PATCH the file - moves it to the new folder 
  Drive.Files.patch(file, fileId, {
    removeParents: file.parents.map(function(f) { return f.id; }),
    addParents: [newFolderId],   //problem line for non-team drives
    supportsTeamDrives: true 
       });

  return (file.title + " moved to " + folder.title);
}




function moveD2D(sourceFileId, targetFolderId, Description) {

 var file = DriveApp.getFileById(sourceFileId);
 var targetfolder= DriveApp.getFolderById(targetFolderId);

 console.log(file.getName() +' moveD2D ' + targetfolder.getName());
 file.getParents().next().removeFile(file);
 DriveApp.getFolderById(targetFolderId).addFile(file);

 return (file.getName() + " moved to " + targetfolder.title);

}


function moveD2T(sourceFileId, targetFolderId, Description) {

 var file = DriveApp.getFileById(sourceFileId);
 var folder=Drive.Files.get(targetFolderId, {supportsTeamDrives: true});

 console.log(file.getName() +' moveD2T ' + folder.title);
  //file.getParents().next().removeFile(file); // this line was removed - 
  not needed when moving from personal to team drive!

    DriveApp.getFolderById(targetFolderId).addFile(file);

  return (file.getName() + " moved to " + folder.title);

}


function moveP2T(fileId, newFolderId, Description) {

/* doesnt work!
    var file = Drive.Files.get(fileId, {supportsTeamDrives: true});
    var folder=Drive.Files.get(newFolderId, {supportsTeamDrives: true});

    newId=Drive.Files.generateIds().ids[0];




  Drive.Files.insert(file, fileId,{
  "supportsTeamDrives": true    
  });

\\ this crashes but is the correct code for moving from personal to team drive:
 DriveApp.getFolderById(targetFolderId).addFile(file);  

  Drive.Files.patch(file, fileId, {
    removeParents: file.parents.map(function(f) { return f.id; }),
    addParents: [newFolderId],   //problem line for non-team drives
    supportsTeamDrives: true 
       });

  */
}


function moveFileToFolder(fileId, newFolderId, Description) {  
  var file = Drive.Files.get(fileId, {supportsTeamDrives: true});
  var folder=Drive.Files.get(newFolderId, {supportsTeamDrives: true});

  if (file.spaces.indexOf('photos')!= -1){
   //console.log(file.teamDriveId);
   // moveD2T(fileId, newFolderId, Description);  //Exception: Cannot use this operation on a Team Drive item. line 95 DriveApp.getFolderById(targetFolderId).addFile(file);
    moveP2T(fileId, newFolderId, Description);


return (file.title + " moved to " + folder.title) ;
  }

  if (file.teamDriveId ){   
    // file is in a Team Drive , it can be copied to Team 
 Folder or Drive Folder with moveT2T 
// i.e. moveT2T = moveT2D
moveT2T(fileId, newFolderId, Description);
return (file.title + " moved to " + folder.title) ;
  }


 if (!file.teamDriveId && !folder.teamDriveId){
   //file is being copied between  Drive folders only
    moveD2D(fileId, newFolderId, Description);
    return (file.title + " moved to " + folder.title) ;
   }

  if (!file.teamDriveId && folder.teamDriveId){
   //file is currently in Drive, needs to move to Team Drive folder
    moveD2T(fileId, newFolderId, Description);
    return (file.title + " moved to " + folder.title);
        }

   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...