Unlike the DriveApp.getFilesByType() method that will only search for files in the immediate folder, i'm trying to also search for files inside the sub-folders.
Found this bloggpost about it, and that works as is. However my script needs to push the result into an Array. So far i can push files to the array but i'm not fetching the subfolder's files.
I have 3 functions:
trigger_GetDriveFiles
function trigger_GetDriveFiles(){
var folder = DriveApp.getFolderById("0B2XfBTL5aSGMZTNwTDlwT2JqNjg");
var filesJSObj = GetDriveFiles(folder);
for(var i in filesJSObj){
if(filesJSObj.hasOwnProperty(i)){
Logger.log(bulkFile(i, filesJSObj[i]));
}
}
}
GetDriveFiles (The out-commented section is where it fails)
function GetDriveFiles(folder) {
var files = {};
var fileIt = folder.getFiles();
while (fileIt.hasNext()) {
var f = fileIt.next();
var owner = f.getOwner().getEmail();
var id = f.getId();
if (owner != "admin.fileshare@domain.com"){
if (!files[owner]) {
files[owner] = [];
}
// push the file to the owner's array
files[owner].push(id);
}
}
/*
// Get all the sub-folders and iterate, This is the part not wokring!
var folderIt = folder.getFolders();
while(folderIt.hasNext()) {
fs = GetDriveFiles(folderIt.next());
for (var i = 0; i < fs.length; i++) {
files.push(fs[i].id)
}
}*/
return files;
}
bulkFile
function bulkFile(ownerEmail, fileIds) {
var ts = tokenService(ownerEmail);
LibDrive.Init(ts);
var dSA = LibDrive.ServiceAccount(ownerEmail);
return dSA.batchPermissionChange(fileIds, "admin.fileshare@domain.com"); //<-- This is the user that recieves the folder/file
}