-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcode.gs
125 lines (107 loc) · 3.48 KB
/
code.gs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('Drive Tree')
.addItem('Generate Tree', 'showForm')
.addToUi();
}
function showForm() {
var html = HtmlService.createHtmlOutputFromFile('form')
.setWidth(600)
.setHeight(500);
SpreadsheetApp.getUi().showModalDialog(html, 'Drive Tree');
}
function generateDriveTreeFromForm(folderId, level, skipExtensions, skipFolders, showFiles) {
var maxLevel = parseInt(level);
if (isNaN(maxLevel)) {
maxLevel = -1;
}
var extensions = skipExtensions.split(',').map(ext => ext.trim());
var folders = skipFolders.split(',').map(folder => folder.trim());
var showFilesBoolean = showFiles.toLowerCase() === 'true';
generateDriveTree(folderId, maxLevel, extensions, folders, showFilesBoolean);
}
function generateDriveTree(rootFolderId, maxLevel, extensions, skipFolders, showFiles) {
var folder;
if(rootFolderId){
try{
folder = DriveApp.getFolderById(rootFolderId);
} catch(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
sheet.clearContents();
sheet.appendRow(["Invalid Folder ID"]);
return;
}
} else {
folder = DriveApp.getRootFolder();
}
var tree = getFolderTree(folder, "", maxLevel, 0, extensions, skipFolders, showFiles);
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
sheet.clearContents();
var header = "Drive Tree";
if (maxLevel >= 0) {
header += " (Level " + maxLevel + ")";
}
sheet.appendRow([header]);
var treeLines = tree.split("\n");
for (var i = 0; i < treeLines.length; i++) {
sheet.appendRow([treeLines[i]]);
}
}
function getFolderTree(folder, indent, maxLevel, currentLevel, extensions, skipFolders, showFiles) {
if (maxLevel >= 0 && currentLevel > maxLevel) {
return "";
}
var tree = "";
var folders = folder.getFolders();
var files = folder.getFiles();
var folderArray = [];
while (folders.hasNext()) {
folderArray.push(folders.next());
}
var fileArray = [];
while (files.hasNext()) {
fileArray.push(files.next());
}
var totalItems = folderArray.length + fileArray.length;
var currentItem = 0;
for (var i = 0; i < folderArray.length; i++) {
currentItem++;
var subFolder = folderArray[i];
var folderName = subFolder.getName();
var valid_folder = true;
for (var j = 0; j < skipFolders.length; j++) {
if (folderName === skipFolders[j]) {
valid_folder = false;
break;
}
}
if (valid_folder) {
var isLastItem = (currentItem === totalItems);
var branchChar = isLastItem ? "└──" : "├──";
var nextIndent = indent + (isLastItem ? "│ " : "│ ");
tree += indent + branchChar + "📂 " + folderName + " \n";
tree += getFolderTree(subFolder, nextIndent, maxLevel, currentLevel + 1, extensions, skipFolders, showFiles);
}
}
if(showFiles){
for (var j = 0; j < fileArray.length; j++) {
currentItem++;
var file = fileArray[j];
var valid_extension = true;
for (var k = 0; k < extensions.length; k++) {
if (file.getName().toLowerCase().endsWith(extensions[k].toLowerCase())) {
valid_extension = false;
break;
}
}
if (valid_extension) {
var isLastItem = (currentItem === totalItems);
var branchChar = isLastItem ? "└──" : "├──";
tree += indent + branchChar + "📄 " + file.getName() + " \n";
}
}
}
return tree;
}