aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSam Wilkins <samwilkins333@gmail.com>2019-09-09 11:21:00 -0400
committerSam Wilkins <samwilkins333@gmail.com>2019-09-09 11:21:00 -0400
commit0c987a119fc6baa344cd6a8d229556c02af64898 (patch)
treef9980dfd999ab34d80bdce7118039f3d4c09025c /src
parent8c28206b7c61402bf76f9b7e747b31ae44d5090b (diff)
updates
Diffstat (limited to 'src')
-rw-r--r--src/client/util/Import & Export/DirectoryImportBox.tsx48
-rw-r--r--src/server/apis/google/GooglePhotosUploadUtils.ts44
-rw-r--r--src/server/credentials/google_docs_token.json2
-rw-r--r--src/server/index.ts22
4 files changed, 64 insertions, 52 deletions
diff --git a/src/client/util/Import & Export/DirectoryImportBox.tsx b/src/client/util/Import & Export/DirectoryImportBox.tsx
index ab2801ee3..7693a388f 100644
--- a/src/client/util/Import & Export/DirectoryImportBox.tsx
+++ b/src/client/util/Import & Export/DirectoryImportBox.tsx
@@ -18,8 +18,14 @@ import { Id } from "../../../new_fields/FieldSymbols";
import { List } from "../../../new_fields/List";
import { Cast, BoolCast, NumCast } from "../../../new_fields/Types";
import { listSpec } from "../../../new_fields/Schema";
+import { GooglePhotosClientUtils } from "../../apis/google_docs/GooglePhotosClientUtils";
const unsupported = ["text/html", "text/plain"];
+interface FileResponse {
+ name: string;
+ path: string;
+ type: string;
+}
@observer
export default class DirectoryImportBox extends React.Component<FieldViewProps> {
@@ -87,34 +93,32 @@ export default class DirectoryImportBox extends React.Component<FieldViewProps>
let sizes = [];
let modifiedDates = [];
+ let formData = new FormData();
for (let uploaded_file of validated) {
- let formData = new FormData();
- formData.append('file', uploaded_file);
- let dropFileName = uploaded_file ? uploaded_file.name : "-empty-";
- let type = uploaded_file.type;
-
+ formData.append(Utils.GenerateGuid(), uploaded_file);
sizes.push(uploaded_file.size);
modifiedDates.push(uploaded_file.lastModified);
-
runInAction(() => this.remaining++);
-
- let prom = fetch(Utils.prepend(RouteStore.upload), {
- method: 'POST',
- body: formData
- }).then(async (res: Response) => {
- let names = await res.json();
- console.log(names);
- await Promise.all(names.map((file: any) => {
- let docPromise = Docs.Get.DocumentFromType(type, Utils.prepend(file), { nativeWidth: 300, width: 300, title: dropFileName });
- docPromise.then(doc => {
- doc && docs.push(doc) && runInAction(() => this.remaining--);
- });
- }));
- });
- promises.push(prom);
}
- await Promise.all(promises);
+ const parameters = { method: 'POST', body: formData };
+ const uploads: FileResponse[] = await (await fetch(Utils.prepend(RouteStore.upload), parameters)).json();
+
+ await Promise.all(uploads.map(async upload => {
+ const type = upload.type;
+ const path = Utils.prepend(upload.path);
+ const options = {
+ nativeWidth: 300,
+ width: 300,
+ title: upload.name
+ };
+ const document = await Docs.Get.DocumentFromType(type, path, options);
+ document && docs.push(document) && runInAction(() => this.remaining--);
+ console.log(`(${this.quota - this.remaining}/${this.quota}) ${upload.name}`);
+ }));
+
+ await GooglePhotosClientUtils.UploadImageDocuments(docs, { title: directory });
+ console.log("Finished upload!");
for (let i = 0; i < docs.length; i++) {
let doc = docs[i];
diff --git a/src/server/apis/google/GooglePhotosUploadUtils.ts b/src/server/apis/google/GooglePhotosUploadUtils.ts
index d4a2a2bb3..35f986250 100644
--- a/src/server/apis/google/GooglePhotosUploadUtils.ts
+++ b/src/server/apis/google/GooglePhotosUploadUtils.ts
@@ -89,7 +89,8 @@ export namespace DownloadUtils {
const png = ".png";
const pngs = [".png", ".PNG"];
- const jpg = [".jpg", ".JPG", ".jpeg", ".JPEG"];
+ const jpgs = [".jpg", ".JPG", ".jpeg", ".JPEG"];
+ const formats = [".jpg", ".png", ".gif"];
const size = "content-length";
const type = "content-type";
@@ -110,7 +111,8 @@ export namespace DownloadUtils {
mediaPaths: [],
fileNames: { clean: resolved }
};
- const { isLocal, stream } = classify(url = path.normalize(url));
+ const { isLocal, stream, normalized } = classify(url);
+ url = normalized;
if (!isLocal) {
const metadata = (await new Promise<any>((resolve, reject) => {
request.head(url, async (error, res) => {
@@ -131,37 +133,35 @@ export namespace DownloadUtils {
suffix: size.suffix
}))
];
- let validated = true;
if (pngs.includes(extension)) {
resizers.forEach(element => element.resizer = element.resizer.png());
- } else if (jpg.includes(extension)) {
+ } else if (jpgs.includes(extension)) {
resizers.forEach(element => element.resizer = element.resizer.jpeg());
- } else {
- validated = false;
+ } else if (!formats.includes(extension.toLowerCase())) {
+ return reject();
}
- if (validated) {
- for (let resizer of resizers) {
- const suffix = resizer.suffix;
- let mediaPath: string;
- await new Promise<void>(resolve => {
- const filename = resolved.substring(0, resolved.length - extension.length) + suffix + extension;
- information.mediaPaths.push(mediaPath = uploadDirectory + filename);
- information.fileNames[suffix] = filename;
- stream(url).pipe(resizer.resizer).pipe(fs.createWriteStream(mediaPath))
- .on('close', resolve)
- .on('error', reject);
- });
- }
- resolve(information);
+ for (let resizer of resizers) {
+ const suffix = resizer.suffix;
+ let mediaPath: string;
+ await new Promise<void>(resolve => {
+ const filename = resolved.substring(0, resolved.length - extension.length) + suffix + extension;
+ information.mediaPaths.push(mediaPath = uploadDirectory + filename);
+ information.fileNames[suffix] = filename;
+ stream(url).pipe(resizer.resizer).pipe(fs.createWriteStream(mediaPath))
+ .on('close', resolve)
+ .on('error', reject);
+ });
}
+ resolve(information);
});
};
const classify = (url: string) => {
- const isLocal = /Dash-Web\\src\\server\\public\\files/g.test(url);
+ const isLocal = /Dash-Web(\\|\/)src(\\|\/)server(\\|\/)public(\\|\/)files/g.test(url);
return {
isLocal,
- stream: isLocal ? fs.createReadStream : request
+ stream: isLocal ? fs.createReadStream : request,
+ normalized: isLocal ? path.normalize(url) : url
};
};
diff --git a/src/server/credentials/google_docs_token.json b/src/server/credentials/google_docs_token.json
index 66668aaef..fabc18cfd 100644
--- a/src/server/credentials/google_docs_token.json
+++ b/src/server/credentials/google_docs_token.json
@@ -1 +1 @@
-{"access_token":"ya29.Glx9BwKT8sxbXNR78f2Ks3pAe2DfsxOhrYMj8SACNi13xwJ0MtLU4WYb4_cbHAj2X8imZW9eUBlAsY9RXoMEPOmVpMlhMjxVZKBo_0lwJ6xSTunSdrR1e8P7vkRV4Q","refresh_token":"1/HTv_xFHszu2Nf3iiFrUTaeKzC_Vp2-6bpIB06xW_WHI","scope":"https://www.googleapis.com/auth/presentations.readonly https://www.googleapis.com/auth/documents.readonly https://www.googleapis.com/auth/drive.file https://www.googleapis.com/auth/documents https://www.googleapis.com/auth/photoslibrary https://www.googleapis.com/auth/photoslibrary.appendonly https://www.googleapis.com/auth/drive https://www.googleapis.com/auth/presentations https://www.googleapis.com/auth/photoslibrary.sharing","token_type":"Bearer","expiry_date":1567962258021} \ No newline at end of file
+{"access_token":"ya29.Glx-BwgWcpQUukTNyuUqvSAYrDyxDNUhCLtrFDJAViROvicm0DrcRvCn4OaQdn2m2IZQYcG-19cvQYoOC3UJCtWXLRvKZzQCbZZSykpxYu_lflUyEnIGZOIHMbbEjA","refresh_token":"1/HTv_xFHszu2Nf3iiFrUTaeKzC_Vp2-6bpIB06xW_WHI","scope":"https://www.googleapis.com/auth/presentations.readonly https://www.googleapis.com/auth/documents.readonly https://www.googleapis.com/auth/drive.file https://www.googleapis.com/auth/documents https://www.googleapis.com/auth/photoslibrary https://www.googleapis.com/auth/photoslibrary.appendonly https://www.googleapis.com/auth/drive https://www.googleapis.com/auth/presentations https://www.googleapis.com/auth/photoslibrary.sharing","token_type":"Bearer","expiry_date":1568008211814} \ No newline at end of file
diff --git a/src/server/index.ts b/src/server/index.ts
index 54525cd31..baef94a59 100644
--- a/src/server/index.ts
+++ b/src/server/index.ts
@@ -561,6 +561,11 @@ class NodeCanvasFactory {
const pngTypes = [".png", ".PNG"];
const jpgTypes = [".jpg", ".JPG", ".jpeg", ".JPEG"];
const uploadDirectory = __dirname + "/public/files/";
+interface FileResponse {
+ name: string;
+ path: string;
+ type: string;
+}
// SETTERS
app.post(
RouteStore.upload,
@@ -569,13 +574,16 @@ app.post(
form.uploadDir = uploadDirectory;
form.keepExtensions = true;
form.parse(req, async (_err, _fields, files) => {
- let names: string[] = [];
- for (const name in files) {
- const file = path.basename(files[name].path);
- await UploadUtils.UploadImage(uploadDirectory + file, file);
- names.push(`/files/` + file);
+ let results: FileResponse[] = [];
+ for (const key in files) {
+ const { name, type, path: location } = files[key];
+ const filename = path.basename(location);
+ await UploadUtils.UploadImage(uploadDirectory + filename, path.basename(name));
+ results.push({ name, type, path: `/files/${filename}` });
+ console.log(path.basename(name));
}
- res.send(names);
+ console.log("All files traversed!");
+ _success(res, results);
});
}
);
@@ -843,7 +851,7 @@ app.post(RouteStore.googlePhotosMediaDownload, async (req, res) => {
UploadUtils.UploadImage(item.baseUrl, item.filename, prefix)
);
const completed = await Promise.all(pending).catch(error => _error(res, downloadError, error));
- _success(res, completed);
+ Array.isArray(completed) && _success(res, completed);
return;
}
_invalid(res, requestError);