Last active
June 27, 2018 19:37
-
-
Save eojji/56eb268bd679dd77ad615ebe2d9c0f91 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// https://m.cafe.naver.com/eojji/307 | |
function setPageTokenProperty(value) { | |
PropertiesService.getUserProperties().setProperty('PAGE_TOKEN', value); | |
} | |
function getPageTokenProperty() { | |
var pageTokenProperty = PropertiesService.getUserProperties().getProperty('PAGE_TOKEN'); | |
return pageTokenProperty; | |
} | |
function deletePageTokenProperty() { | |
PropertiesService.getUserProperties().deleteProperty('PAGE_TOKEN'); | |
} | |
function doCopyFolder_(sheetFolder, folderRowNum, sheetFiles, startTime) { | |
var folderRange, folderInfo; | |
try { | |
folderRange = sheetFolder.getRange(folderRowNum, 1, 1, 9); | |
folderInfo = folderRange.getValues()[0]; | |
} catch(e) { | |
console.warn('Error: %s, %s - doCopyFolder', e.name, e.message); | |
return '-1'; | |
} | |
var title, folderId, copyFolderId, fileRowNum; | |
title = folderInfo[0]; | |
folderId = folderInfo[1]; | |
copyFolderId = folderInfo[2]; | |
fileRowNum = folderInfo[7]; | |
if (!fileRowNum || fileRowNum < 3) { | |
var pageToken; | |
var objFiles = listFilesByPageToken_(folderId, pageToken, startTime); | |
if (!objFiles) { | |
return '9'; | |
} | |
var parentId = folderInfo[8]; | |
var resp = insertFolderById_(parentId, title); | |
if (!resp || !resp.id) { | |
console.warn('Error: %s, %s - insertFolderById(parentId: %s, %s)', resp.name, resp.message, parentId, title); | |
return '-1'; | |
} | |
folderInfo[7] = sheetFiles.getLastRow() + 1; // fileRowNum | |
sheetAppendFiles_(resp.id, objFiles.files, sheetFolder, sheetFiles); | |
folderInfo[2] = resp.id; // copyFolderId | |
folderRange.setValues([folderInfo]); | |
if (objFiles.pageToken) { | |
setPageTokenProperty(folderId+','+objFiles.pageToken); | |
return '1'; | |
} | |
return copyFilesBySheet_(startTime, sheetFiles); | |
} | |
var pageTokenProperty = getPageTokenProperty(); | |
if (pageTokenProperty) { | |
var arrIdAndPageToken = pageTokenProperty.split(','); | |
if (arrIdAndPageToken[0] == folderId && arrIdAndPageToken[1]) { | |
var objFiles = listFilesByPageToken_(folderId, arrIdAndPageToken[1], startTime); | |
if (objFiles) { | |
sheetAppendFiles_(copyFolderId, objFiles.files, sheetFolder, sheetFiles); | |
if (objFiles.pageToken) { | |
setPageTokenProperty(folderId+','+objFiles.pageToken); | |
return '1'; | |
} | |
} | |
} else { | |
deletePageTokenProperty(); | |
} | |
} | |
return copyFilesBySheet_(startTime, sheetFiles); | |
} | |
function sheetAppendFiles_(parentId, data, sheetFolder, sheetFiles) { | |
if (!data || data.length < 1) { | |
return; | |
} | |
var folderData = []; | |
var newDate = new Date(); | |
// title, id | |
// id2, files, fileSize, start, end, file row, parent | |
var newFolderContents = ['', 0, 0, newDate, newDate, 0, parentId]; | |
var fileData = []; | |
// copy, name, message, check, parent | |
var newFileContents = ['', '', '', '', parentId]; | |
var len = data.length; | |
for (var i = 0; i < len; i++) { | |
// title, id, mimeType, fileSize | |
var mimeType = data[i][2]; // mimeType | |
if (mimeType == 'application/vnd.google-apps.folder') { | |
folderData.push(data[i].slice(0, 2).concat(newFolderContents)); | |
} else { | |
fileData.push(data[i].concat(newFileContents)); | |
} | |
} | |
if (folderData && folderData.length > 0) { | |
sheetFolder.getRange(sheetFolder.getLastRow() + 1, 1, folderData.length, folderData[0].length).setValues(folderData); | |
} | |
if (fileData && fileData.length > 0) { | |
sheetFiles.getRange(sheetFiles.getLastRow() + 1, 1, fileData.length, fileData[0].length).setValues(fileData); | |
} | |
} | |
function insertFolderById_(parentId, folderName) { | |
var resource= { | |
"parents": [ | |
{ | |
"id": parentId | |
} | |
], | |
"title": folderName, | |
"mimeType": "application/vnd.google-apps.folder" | |
}; | |
// https://stackoverflow.com/questions/28378738/create-a-new-blob-in-memory-using-apps-script | |
// var blob = Utilities.newBlob(folderName); | |
var optionalArgs = { | |
supportsTeamDrives : true | |
}; | |
// var folder; | |
try { | |
// https://developers.google.com/drive/v2/reference/files#resource | |
return Drive.Files.insert(resource, Utilities.newBlob(folderName), optionalArgs); | |
} catch(error) { | |
return error; | |
} | |
} | |
function myFunction2() { | |
var ssId = '?????'; | |
var ss = SpreadsheetApp.openById(ssId); | |
var startTime = Date.now(); | |
var sheetFolder = ss.getSheetByName('folder'); | |
var sheetFiles = ss.getSheetByName('files'); | |
console.log('ss name: %s', ss.getName()); | |
var folderRowNum = 12; | |
var resp = doCopyFolder_(sheetFolder, folderRowNum, sheetFiles, startTime); | |
console.log('doCopyFolder_ resp: %s', resp); | |
if (resp === '1') { | |
copyFilesBySheet_(startTime, sheetFiles); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Listing folders - 6