Normal update

This commit is contained in:
DUOLabs333
2022-10-24 14:17:53 -04:00
parent 64a966eddd
commit aebde3317e
85 changed files with 24241 additions and 16438 deletions
@@ -3,7 +3,7 @@
<html>
<head>
<script>
var lastMsg, allowed=false, dir=null;
var lastMsg, allowed=false, dir=null, noThumbs=null;
var locStor = {};
@@ -117,6 +117,8 @@
if(ext=="jpeg") ext="jpg";
if(ext=="tiff") ext="tif";
if(["dng","cr2","nef","arw","3fr","fff","gpr"].indexOf(ext)!=-1) ext="tif";
if(noThumbs) ext="---";
var thmb=null;
if(thmb==null && (ext=="jpg" || ext=="tif")) { // || ext=="--psd"
var lim = 130000;
@@ -202,10 +204,11 @@
async function askPermissions() {
if(dir) {
if(await dir.requestPermission({mode:"readwrite"})!="granted") return;
if(await dir.requestPermission({mode:"readwrite"})!="granted") { send("1","You must give Photopea access to some folder."); return; }
}
else {
dir = await window.showDirectoryPicker();
try { dir = await window.showDirectoryPicker(); }
catch(e) { send("1","You must give Photopea access to some folder."); return; }
locStor.fset = dir;
var os = locStor.db["transaction"](["rsrc"], "readwrite")["objectStore"]("rsrc");
@@ -229,7 +232,8 @@
if(msg.code=="show") {
printFolder(msg.prm);
noThumbs=msg.nothumbs;
printFolder(msg.prm);
}
else if(msg.code=="load") {
printFile(msg.prm);
@@ -10,28 +10,47 @@
<script type="text/javascript">
var sentFalse = false;
var clientId = '463342976776-04ub3ijsr7i5qobn8ha32ap6vsaae75a.apps.googleusercontent.com';
var scope = 'https://www.googleapis.com/auth/drive';
var discoveryDocs = 'https://www.googleapis.com/discovery/v1/apis/drive/v3/rest';
var clientId = "463342976776-04ub3ijsr7i5qobn8ha32ap6vsaae75a.apps.googleusercontent.com";
var scope = "https://www.googleapis.com/auth/drive";
var discoveryDocs = "https://www.googleapis.com/discovery/v1/apis/drive/v3/rest";
var mode3dir = "Photopea";
var client;
var isShared = false;
//var isShared = false;
var sharedDrives = null;
var mode = 0; //0 = normal, 1 = shared drives, 2 = application folder, 3 = PP folder
function go()
{
var queryString = window.location.search;
var urlParams = new URLSearchParams(queryString);
if(urlParams.get('sharedDrive') == 'true') isShared = true;
if(urlParams.get('mode')) mode = urlParams.get('mode');
if(mode == 2) { scope = "https://www.googleapis.com/auth/drive.appdata"; }
else if(mode == 3) { scope = "https://www.googleapis.com/auth/drive.file"; }
else { scope = "https://www.googleapis.com/auth/drive"; }
window.addEventListener("message", onMessage, false);
gapi.load('client', gapiInit);
}
function saveToken(e)
{
localStorage.setItem("googledriveAccessToken", e.access_token);
localStorage.setItem("googledriveAccessTokenValidUntil", Date.now() + e.expires_in * 1000);
if(mode == 2)
{
localStorage.setItem("googledriveAppFolderAccessToken", e.access_token);
localStorage.setItem("googledriveAppFolderAccessTokenValidUntil", Date.now() + e.expires_in * 1000);
}
else if(mode == 3)
{
localStorage.setItem("googledriveFileAccessToken", e.access_token);
localStorage.setItem("googledriveFileAccessTokenValidUntil", Date.now() + e.expires_in * 1000);
}
else
{
localStorage.setItem("googledriveAccessToken", e.access_token);
localStorage.setItem("googledriveAccessTokenValidUntil", Date.now() + e.expires_in * 1000);
}
send("ready", true);
}
@@ -45,6 +64,24 @@
scope: scope,
callback: saveToken,
});
if(mode == 2)
{
if(Date.now() < localStorage.getItem("googledriveAppFolderAccessTokenValidUntil"))
{
gapi.client.setToken({ "access_token" : localStorage.getItem("googledriveAppFolderAccessToken") });
send("ready", true);
return;
}
}
else if(mode == 3)
{
if(Date.now() < localStorage.getItem("googledriveFileAccessTokenValidUntil"))
{
gapi.client.setToken({ "access_token" : localStorage.getItem("googledriveFileAccessToken") });
send("ready", true);
return;
}
}
if(Date.now() < localStorage.getItem("googledriveAccessTokenValidUntil"))
{
gapi.client.setToken({ "access_token" : localStorage.getItem("googledriveAccessToken") });
@@ -97,7 +134,20 @@
{
if(!id)
{
if(!isShared) id = "root";
if(mode == 0) id = "root";
else if(mode == 3 )
{
if(path.length == 2 && path[1] == "")
{
checkFile("root", path[0], null, null);
return;
}
else
{
id = "root";
}
}
else if(mode == 2) id = "appDataFolder";
else if(path.length == 1 && path[0] == "")
{
listDrives(null, []);
@@ -147,11 +197,15 @@
'pageToken' : pageToken,
'pageSize': 1000,
'fields': "nextPageToken, files(id, name, size, modifiedTime, kind, mimeType, trashed)",};
if(isShared)
if(mode == 1)
{
req['supportsAllDrives'] = true;
req['includeItemsFromAllDrives'] = true;
}
else if(mode == 2)
{
req['spaces'] = "appDataFolder";
}
gapi.client.drive.files.list(req)
.then(function(response) {
var files = response.result.files;
@@ -189,7 +243,7 @@
{
out.push([drives[i].name, -1, Math.round(Date.parse(drives[i].createdTime)/1000)])
}
if(pageToken) listDir(pageToken,query,out);
if(pageToken) listDrives(pageToken,out);
else { send(0,out); }
})
.catch(handleError);
@@ -202,11 +256,15 @@
'pageToken' : pageToken,
'pageSize': 1000,
'fields': "nextPageToken, files(id, name, size, modifiedTime, kind, mimeType, thumbnailLink, trashed)",};
if(isShared)
if(mode == 1)
{
req['supportsAllDrives'] = true;
req['includeItemsFromAllDrives'] = true;
}
else if(mode == 2)
{
req['spaces'] = "appDataFolder";
}
gapi.client.drive.files.list(req)
.then(function(response) {
var files = response.result.files;
@@ -233,7 +291,7 @@
{
var xhr = new XMLHttpRequest();
var shared = "";
if(isShared) shared = "&supportsAllDrives=true";
if(mode == 1) shared = "&supportsAllDrives=true";
xhr.open('GET', "https://www.googleapis.com/drive/v3/files/" + fileId + "?alt=media" + shared);
xhr.responseType = "arraybuffer";
xhr.setRequestHeader('Authorization', 'Bearer ' + gapi.client.getToken().access_token);
@@ -246,7 +304,7 @@
{
var xhr = new XMLHttpRequest();
var shared = "";
if(isShared) shared = "&supportsAllDrives=true";
if(mode == 1) shared = "&supportsAllDrives=true";
xhr.open('GET', "https://www.googleapis.com/drive/v3/files/" + fileId + "?fields=thumbnailLink" + shared);
xhr.setRequestHeader('Authorization', 'Bearer ' + gapi.client.getToken().access_token);
xhr.onload = function(e)
@@ -270,9 +328,9 @@
function deleteFile(fileId)
{
if(isShared) { trashFile(fileId); return; }
if(mode == 1) { trashFile(fileId); return; }
var req = { 'fileId' : fileId, };
if(isShared) req['supportsAllDrives'] = true;
//if(isShared) req['supportsAllDrives'] = true;
gapi.client.drive.files.delete(req)
.then(function(response) {
send(0,"");
@@ -292,7 +350,7 @@
'trashed' : true,
}
};
if(isShared) req['supportsAllDrives'] = true;
if(mode == 1) req['supportsAllDrives'] = true;
gapi.client.drive.files.update(req)
.then(function(response) {
send(0,"");
@@ -313,9 +371,15 @@
'mimeType': 'application/vnd.google-apps.folder',
}
}
if(isShared) req['supportsAllDrives'] = true;
if(mode == 1) req['supportsAllDrives'] = true;
gapi.client.drive.files.create( req )
.then(function(response) {
.then(function(response) {
if(response.result.name == mode3dir)
{
var query = "'" + response.result.id + "' in parents";
listDir(null, query, [])
return;
}
send(0,"");
})
.catch(function(response) {
@@ -333,7 +397,7 @@
'name' : newName,
}
};
if(isShared) req['supportsAllDrives'] = true;
if(mode == 1) req['supportsAllDrives'] = true;
gapi.client.drive.files.update(req)
.then(function(response) {
send(0,"");
@@ -345,6 +409,7 @@
}
//check if file exists, then overwrite, otherwise create new file.
//if buffer is null, we check whether direcory exist and if not, we create it
function checkFile(parentId, name, pageToken, buffer)
{
var query = "'" + parentId + "' in parents";
@@ -353,11 +418,15 @@
'pageToken' : pageToken,
'pageSize': 1000,
'fields': "nextPageToken, files(id, name, trashed)",};
if(isShared)
if(mode == 1)
{
req['supportsAllDrives'] = true;
req['includeItemsFromAllDrives'] = true;
}
else if(mode == 2)
{
req['spaces'] = "appDataFolder";
}
gapi.client.drive.files.list(req)
.then(function(response) {
var files = response.result.files;
@@ -369,12 +438,18 @@
if(files[i].name == name)
{
found = true;
uploadFile(files[i].id,parentId,name,buffer);
if(buffer) { uploadFile(files[i].id,parentId,name,buffer); }
else
{
query = "'" + files[i].id + "' in parents";
listDir(null, query, []);
}
return;
}
}
if(!found && pageToken) checkFile(parentId, name, pageToken, buffer);
else uploadFile(null,parentId,name,buffer);
else if(buffer) uploadFile(null,parentId,name,buffer);
else { createDir('root', name)}
})
.catch(handleError);
}
@@ -392,7 +467,7 @@
metadata['Content-Type'] = contentType;
metadata['Content-Length'] = file.size;
var shared = "";
if(isShared) shared = "&supportsAllDrives=true";
if(mode == 1) shared = "&supportsAllDrives=true";
if(!fileId) xhr.open("POST", "https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable" + shared);
else xhr.open("PATCH", "https://www.googleapis.com/upload/drive/v3/files/" + fileId + "?uploadType=resumable" + shared);
xhr.setRequestHeader('Authorization', 'Bearer ' + gapi.client.getToken().access_token);
@@ -430,7 +505,7 @@
form.append('metadata', new Blob([JSON.stringify(metadata)], { type: 'application/json' }));
form.append('file', file);
var shared = "";
if(isShared) shared = "&supportsAllDrives=true";
if(mode == 1) shared = "&supportsAllDrives=true";
if(!fileId) xhr.open('POST', 'https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart&fields=id' + shared);
else xhr.open('PATCH', 'https://www.googleapis.com/upload/drive/v3/files/' + fileId + '?uploadType=multipart&fields=id' + shared);
xhr.setRequestHeader('Authorization', 'Bearer ' + gapi.client.getToken().access_token);
@@ -442,12 +517,27 @@
function signOutUser()
{
localStorage.removeItem("googledriveAccessToken");
localStorage.removeItem("googledriveAccessTokenValidUntil");
if(mode == 2)
{
localStorage.removeItem("googledriveAppFolderAccessToken");
localStorage.removeItem("googledriveAppFolderAccessTokenValidUntil");
}
if(mode == 3)
{
localStorage.removeItem("googledriveFileAccessToken");
localStorage.removeItem("googledriveFileAccessTokenValidUntil");
}
else
{
localStorage.removeItem("googledriveAccessToken");
localStorage.removeItem("googledriveAccessTokenValidUntil");
}
gapi.client.setToken('');
send("ready", false);
var cred = gapi.client.getToken();
if (cred !== null) {
google.accounts.oauth2.revoke(cred.access_token, () => {console.log('Revoked: ' + cred.access_token)});
gapi.client.setToken('');
gapi.client.setToken("");
}
}
@@ -463,17 +553,21 @@
if(e.origin && (e.origin == "https://accounts.google.com" || e.origin == "https://content.googleapis.com")) { return; }
if((typeof e.data) == "string") {
var msg = JSON.parse(e.data);
if(mode == 3 && msg.code != "forget")
{
msg.prm = "/" + mode3dir + msg.prm;
}
console.log(msg);
//TODO: cannot list directory if name contains forwardslash
if(msg.code=="show") { doAction(listDir, { "path" : msg.prm }) }
else if(msg.code=="load") { doAction(downloadFile, { "path" : msg.prm }); }
else if(msg.code=="delete") { doAction(deleteFile, { "path" : msg.prm }); }
else if(msg.code=="save" && msg.prm.endsWith("/")) { doAction(createDir, { "path" : msg.prm.slice(0, -1) }); }
//TODO: will not work if filename contains colon(s)
else if(msg.code=="rename") { doAction(renameFile, {"path" : msg.prm }); }
else if(msg.code=="forget") { doAction(signOutUser); }
lastMsg=msg;
}
//TODO: cannot list directory if name contains forwardslash
if(msg.code=="show") { doAction(listDir, { "path" : msg.prm }) }
else if(msg.code=="load") { doAction(downloadFile, { "path" : msg.prm }); }
else if(msg.code=="delete") { doAction(deleteFile, { "path" : msg.prm }); }
else if(msg.code=="save" && msg.prm.endsWith("/")) { doAction(createDir, { "path" : msg.prm.slice(0, -1) }); }
//TODO: will not work if filename contains colon(s)
else if(msg.code=="rename") { doAction(renameFile, {"path" : msg.prm }); }
else if(msg.code=="forget") { doAction(signOutUser); }
lastMsg=msg;
}
else {
if(lastMsg.code=="save") doAction(checkFile, { "path": lastMsg.prm, "buffer" : e.data });
}