Last active
December 4, 2018 04:54
-
-
Save pizzacat83/9837681fcb5f0b6030178ae2cea38430 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
function getAllFiles(targetFolder, pathstr){ | |
var filesList = []; | |
var files = targetFolder.getFiles(); | |
while(files.hasNext()){ | |
var file = files.next(); | |
filesList.push([file,pathstr+"/"]); | |
} | |
var childFolders = targetFolder.getFolders(); | |
while(childFolders.hasNext()){ | |
var childFolder = childFolders.next(); | |
if(JSON.parse(properties.getProperty('updateCheck.muteFolderList')).indexOf(childFolder.getId())!=-1)continue; | |
filesList = filesList.concat( getAllFiles(childFolder, pathstr+"/"+childFolder.getName()) ); | |
} | |
return filesList; | |
} |
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
var UPDATE_SHEET_ID = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; | |
var UPDATE_SHEET_NAME = "シートn"; | |
function updateCheck(targetFolder){ | |
var folders = targetFolder.getFolders(); | |
var files = targetFolder.getFiles(); | |
// ルート直下のファイル | |
var rootFilesItr = rootFolder.getFiles(); | |
var rootFiles = []; | |
while(rootFilesItr.hasNext()){ | |
var file = rootFilesItr.next(); | |
rootFiles.push([file,""]); | |
} | |
var allFiles = getAllFiles(targetFolder, "/"+targetFolder.getName()).concat(rootFiles); | |
var lastUpdateMap = {}; | |
allFiles.forEach( | |
function(value, i){ | |
var file = value[0]; | |
var id = file.getId(); | |
lastUpdateMap[id] = {file:file, path:value[1]}; | |
} | |
); | |
// スプレッドシートに記載されているフォルダ名と更新日時を取得。 | |
var spreadsheet = SpreadsheetApp.openById(UPDATE_SHEET_ID); | |
var sheet = spreadsheet.getSheetByName(UPDATE_SHEET_NAME); | |
var lastRow = sheet.getLastRow(); | |
var sheetRange = sheet.getRange(1, 1, lastRow+2000, 4); | |
// ID, Date, path, isDeleted | |
var data = sheetRange.getValues(); | |
var updatedData = JSON.parse(JSON.stringify(data)); | |
// 取得したデータをMapに変換。 | |
var sheetData = {}; | |
for (var i = 0; i < lastRow; i++) { | |
sheetData[data[i][0]] = {fileId: data[i][0], lastUpdate : data[i][1], name:data[i][2], isDeleted:data[i][3], rowNo : i}; | |
} | |
// 実際のフォルダとスプレッドシート情報を比較。 | |
var updateFileMap = []; | |
for (key in lastUpdateMap) { | |
//現在あるものをループ | |
if(UPDATE_SHEET_ID == key){ | |
if(key in sheetData){ | |
delete sheetData[key]; | |
} | |
continue; | |
} | |
if(key in sheetData) { | |
// ファイル名がシートに存在する場合。 | |
lastUpdateMap[key].lastUpdate = lastUpdateMap[key].file.getLastUpdated(); | |
var newData = lastUpdateMap[key]; | |
var oldData = sheetData[key]; | |
if(newData.lastUpdate - Date.parse(oldData.lastUpdate) > 5*60*1000 || oldData.isDeleted) { | |
// ファイルが更新されている場合。 | |
lastUpdateMap[key].name=newData.file.getName(); | |
lastUpdateMap[key].url = lastUpdateMap[key].file.getUrl(); | |
updatedData[oldData.rowNo][1]=newData.lastUpdate; | |
updatedData[oldData.rowNo][2]=lastUpdateMap[key].path+newData.name; | |
updatedData[oldData.rowNo][3]=''; | |
if(oldData.isDeleted){ | |
updateFileMap.push({filename:lastUpdateMap[key].path+lastUpdateMap[key].name, lastUpdate:lastUpdateMap[key].lastUpdate, url:lastUpdateMap[key].url, updateType:"追加", color:"#6dc651"}); | |
}else{ | |
updateFileMap.push({filename:lastUpdateMap[key].path+lastUpdateMap[key].name, lastUpdate:lastUpdateMap[key].lastUpdate, url:lastUpdateMap[key].url, updateType:"更新", color:"#f5bc41"}); | |
} | |
} | |
//確認済みは削除 | |
delete sheetData[key]; | |
} else { | |
// フォルダ名がシートに存在しない場合。 | |
// つまり追加だね | |
updatedData[lastRow][0] = key; | |
lastUpdateMap[key].lastUpdate = lastUpdateMap[key].file.getLastUpdated(); | |
lastUpdateMap[key].name = lastUpdateMap[key].file.getName(); | |
lastUpdateMap[key].url = lastUpdateMap[key].file.getUrl(); | |
updatedData[lastRow][0] = key; | |
updatedData[lastRow][1] = lastUpdateMap[key].lastUpdate; | |
updatedData[lastRow][2] = lastUpdateMap[key].path+lastUpdateMap[key].name; | |
updateFileMap.push({filename:lastUpdateMap[key].path+lastUpdateMap[key].name, lastUpdate:lastUpdateMap[key].lastUpdate, url:lastUpdateMap[key].url, updateType:"追加", color:"#6dc651"}); | |
lastRow++; | |
} | |
} | |
var currentFolderName = targetFolder.getName(); | |
for(key in sheetData){ | |
// 確認できなかったファイルたち | |
if(sheetData[key].isDeleted === true) continue; | |
var filename = sheetData[key].name.match(/\/(.+?)\//); | |
if(filename&&filename[1]!=currentFolderName) continue; | |
updateFileMap.push({filename:sheetData[key].name, lastUpdate:null, url:null, updateType:"削除",color:"#ec565c"}); | |
updatedData[sheetData[key].rowNo][3] = true; | |
} | |
sheetRange.setValues(updatedData); | |
return updateFileMap; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment