Skip to content

Instantly share code, notes, and snippets.

@pizzacat83
Last active December 4, 2018 04:54
Show Gist options
  • Save pizzacat83/9837681fcb5f0b6030178ae2cea38430 to your computer and use it in GitHub Desktop.
Save pizzacat83/9837681fcb5f0b6030178ae2cea38430 to your computer and use it in GitHub Desktop.
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;
}
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