Last active
June 26, 2018 01:01
-
-
Save eojji/1cd5ea824a2dca8d0fb36ac898d5e988 to your computer and use it in GitHub Desktop.
Copy files by spreadsheet. Listing folders - 5 https://m.cafe.naver.com/eojji/306
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
/* | |
* check: 파일 복사 함수 호출의 반환값으로 다음 작업을 결정합니다. | |
* '1': 계속 진행 | |
* '-1': 프로세스 중단 | |
* '-2': after 트리거 생성 | |
* '-3': hour 트리거 생성 | |
**/ | |
function callFileCopy_(title, id, parentId) { | |
var copiedState = { | |
copy: '1', | |
link: '', // or Error name | |
message: 'Ok', | |
check: '1' | |
} | |
var resource = { | |
'title': title, | |
parents: [{ id: parentId }] | |
}; | |
var optionalArgs = { | |
supportsTeamDrives : true | |
}; | |
var resp; | |
try { | |
resp = Drive.Files.copy(resource, id, optionalArgs); | |
if (resp && resp.id) { | |
copiedState.link = resp.alternateLink; | |
return copiedState; | |
} | |
} catch(error) { | |
resp = error; // error.name, error.message; | |
} | |
copiedState.copy = '0'; // Not copy | |
var rowContents; | |
var logSpreadSheet = getLogSpreadSheet(); | |
var thisFunctionName = 'Call Drive.Files.copy'; | |
var email = Session.getEffectiveUser().getEmail(); | |
if (!resp || !resp.name) { | |
console.warn('%s, Error !resp.name, Title: %s - %s', email, title, thisFunctionName); | |
rowContents = ['Error, No response', 'Title: '+title, 'at '+thisFunctionName]; | |
logSheetAppendRow(logSpreadSheet, rowContents); | |
copiedState.link = ''; | |
copiedState.message = ''; | |
copiedState.check = '-2'; | |
return copiedState; | |
} | |
copiedState.link = resp.name; | |
copiedState.message = resp.message; | |
console.warn('%s, Error: %s, Message: %s, Title: %s - %s', email, resp.name, resp.message, title, thisFunctionName); | |
rowContents = ['Error: '+resp.name, 'Message: '+resp.message, 'Title: '+title, 'at '+thisFunctionName]; | |
logSheetAppendRow(logSpreadSheet, rowContents); | |
if (resp.message.indexOf('User rate limit exceeded') >= 0) { | |
copiedState.check = '-3'; // create trigger, hour | |
} else if (resp.message.indexOf('The user has exceeded') >= 0 || | |
resp.message.indexOf('The file limit for this Team Drive') >= 0) { | |
copiedState.check = '-1'; // process kill | |
} else { | |
copiedState.check = '1'; // Skip | |
// Error Name: Exception | |
// 'Internal Error' | |
// '빈 응답' | |
} | |
return copiedState; | |
} | |
function copyFilesBySheet_(startTime, sheet) { | |
var lastRow = sheet.getLastRow(); | |
if (!lastRow || lastRow < 3) { | |
return '9'; | |
} | |
var startRow = sheet.getRange('B1').getValue(); | |
if (!startRow || startRow < 3) { | |
startRow = 3; | |
} | |
if (startRow > lastRow) { | |
return '9'; | |
} | |
var rows = lastRow - startRow + 1; | |
var fileValues = sheet.getRange(startRow, 1, rows, 9).getValues(); | |
var fileCont; | |
var valuesCopyfile = []; | |
for (var idx = 0; idx < rows; idx++) { | |
fileCont = fileValues[idx] | |
var title = fileCont[0]; | |
var id = fileCont[1]; | |
var parent = fileCont[8]; | |
var copiedState = callFileCopy_(title, id, parent); | |
var arr = [copiedState.copy]; | |
arr.push(copiedState.link); | |
arr.push(copiedState.message); | |
arr.push(copiedState.check); | |
valuesCopyfile.push(arr); | |
if (copiedState.check === '1') { | |
// console.log('copiedState.chek: %s === 1', copiedState.check); | |
} else { | |
console.log('%s Not === 1, break copyFilesBySheet, copiedState.chek', copiedState.check); | |
break; | |
} | |
if (!timeCheck(startTime, 30000)) { // needTime: 30 sec | |
break; | |
} | |
// end for var idx | |
} | |
var valuesLength = valuesCopyfile.length; | |
sheet.getRange(startRow, 5, valuesLength, valuesCopyfile[0].length).setValues(valuesCopyfile); | |
var readToRow = (copiedState.check === '1') ? (startRow + valuesLength) : (startRow + valuesLength - 1); | |
sheet.getRange('B1').setValue(readToRow); | |
if (idx >= rows) { | |
return '9'; | |
} | |
return copiedState.check; | |
} | |
function timeCheck(startTime, needTime) { | |
var nowDate = new Date(); | |
// remain = 6 min - ( now - start ) | |
var remain = 360000 - (nowDate.getTime() - startTime); | |
if (remain < needTime) { | |
return false; | |
} else { | |
return true; | |
} | |
} | |
function createLogSpreadSheet() { | |
var ss = SpreadsheetApp.create('_Log ' + Date.now()); | |
var sheet = ss.getSheets()[0]; | |
sheet.appendRow(['Time', 'Message']); | |
PropertiesService.getUserProperties().setProperty('LOG_SS_ID', ss.getId()); | |
return ss; | |
} | |
function getLogSpreadSheet() { | |
var logSpreadSheetId = PropertiesService.getUserProperties().getProperty('LOG_SS_ID'); | |
if (! logSpreadSheetId || logSpreadSheetId.length < 10) { | |
return createLogSpreadSheet(); | |
} | |
try { | |
var file = DriveApp.getFileById(logSpreadSheetId); | |
if (file.isTrashed()) { | |
return createLogSpreadSheet(); | |
} else { | |
return SpreadsheetApp.openById(logSpreadSheetId); | |
} | |
} catch(e) { | |
return createLogSpreadSheet(); | |
} | |
} | |
function logSheetAppendRow(ssLog, rowContents) { | |
rowContents.unshift(new Date()); | |
ssLog.getSheets()[0].appendRow(rowContents); | |
} | |
function myFunction() { | |
var ssId = '??? 1S3YnsvFA'; | |
var ss = SpreadsheetApp.openById(ssId); | |
var startTime = Date.now(); | |
var sheetFiles = ss.getSheets()[1]; | |
console.log('ss name: %s', ss.getName()); | |
var resp = copyFilesBySheet_(startTime, sheetFiles); | |
console.log('copyFilesBySheet resp: %s', resp); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Listing folders - 5