aboutsummaryrefslogtreecommitdiff
path: root/src/client/apis/google_docs/GooglePhotosClientUtils.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/apis/google_docs/GooglePhotosClientUtils.ts')
-rw-r--r--src/client/apis/google_docs/GooglePhotosClientUtils.ts88
1 files changed, 37 insertions, 51 deletions
diff --git a/src/client/apis/google_docs/GooglePhotosClientUtils.ts b/src/client/apis/google_docs/GooglePhotosClientUtils.ts
index ff9460b62..e8fd8fb8a 100644
--- a/src/client/apis/google_docs/GooglePhotosClientUtils.ts
+++ b/src/client/apis/google_docs/GooglePhotosClientUtils.ts
@@ -1,27 +1,26 @@
-import { AssertionError } from "assert";
-import { EditorState } from "prosemirror-state";
-import { Doc, DocListCastAsync, Opt } from "../../../fields/Doc";
-import { Id } from "../../../fields/FieldSymbols";
-import { RichTextField } from "../../../fields/RichTextField";
-import { RichTextUtils } from "../../../fields/RichTextUtils";
-import { Cast, StrCast } from "../../../fields/Types";
-import { ImageField } from "../../../fields/URLField";
-import { MediaItem, NewMediaItemResult } from "../../../server/apis/google/SharedTypes";
-import { Utils } from "../../../Utils";
-import { Docs, DocumentOptions, DocUtils } from "../../documents/Documents";
-import { Networking } from "../../Network";
-import { FormattedTextBox } from "../../views/nodes/formattedText/FormattedTextBox";
-import { GoogleAuthenticationManager } from "../GoogleAuthenticationManager";
+import { AssertionError } from 'assert';
+import { EditorState } from 'prosemirror-state';
+import { Doc, DocListCastAsync, Opt } from '../../../fields/Doc';
+import { Id } from '../../../fields/FieldSymbols';
+import { RichTextField } from '../../../fields/RichTextField';
+import { RichTextUtils } from '../../../fields/RichTextUtils';
+import { Cast, StrCast } from '../../../fields/Types';
+import { ImageField } from '../../../fields/URLField';
+import { MediaItem, NewMediaItemResult } from '../../../server/apis/google/SharedTypes';
+import { Utils } from '../../../Utils';
+import { Docs, DocumentOptions, DocUtils } from '../../documents/Documents';
+import { Networking } from '../../Network';
+import { FormattedTextBox } from '../../views/nodes/formattedText/FormattedTextBox';
+import { GoogleAuthenticationManager } from '../GoogleAuthenticationManager';
import Photos = require('googlephotos');
export namespace GooglePhotos {
-
const endpoint = async () => new Photos(await GoogleAuthenticationManager.Instance.fetchOrGenerateAccessToken());
export enum MediaType {
ALL_MEDIA = 'ALL_MEDIA',
PHOTO = 'PHOTO',
- VIDEO = 'VIDEO'
+ VIDEO = 'VIDEO',
}
export type AlbumReference = { id: string } | { title: string };
@@ -58,11 +57,10 @@ export namespace GooglePhotos {
HOUSES: 'HOUSES',
GARDENS: 'GARDENS',
FLOWERS: 'FLOWERS',
- HOLIDAYS: 'HOLIDAYS'
+ HOLIDAYS: 'HOLIDAYS',
};
export namespace Export {
-
export interface AlbumCreationResult {
albumId: string;
mediaItems: MediaItem[];
@@ -82,20 +80,20 @@ export namespace GooglePhotos {
if (!images || !images.length) {
return undefined;
}
- const resolved = title ? title : (StrCast(collection.title) || `Dash Collection (${collection[Id]}`);
+ const resolved = title ? title : StrCast(collection.title) || `Dash Collection (${collection[Id]}`;
const { id, productUrl } = await Create.Album(resolved);
const response = await Transactions.UploadImages(images, { id }, descriptionKey);
if (response) {
const { results, failed } = response;
let index: Opt<number>;
while ((index = failed.pop()) !== undefined) {
- Doc.RemoveDocFromList(dataDocument, "data", images.splice(index, 1)[0]);
+ Doc.RemoveDocFromList(dataDocument, 'data', images.splice(index, 1)[0]);
}
const mediaItems: MediaItem[] = results.map(item => item.mediaItem);
if (mediaItems.length !== images.length) {
throw new AssertionError({ actual: mediaItems.length, expected: images.length });
}
- const idMapping = new Doc;
+ const idMapping = new Doc();
for (let i = 0; i < images.length; i++) {
const image = Doc.GetProto(images[i]);
const mediaItem = mediaItems[i];
@@ -117,38 +115,30 @@ export namespace GooglePhotos {
return { albumId: id, mediaItems };
}
};
-
}
export namespace Import {
-
export type CollectionConstructor = (data: Array<Doc>, options: DocumentOptions, ...args: any) => Doc;
export const CollectionFromSearch = async (constructor: CollectionConstructor, requested: Opt<Partial<Query.SearchOptions>>): Promise<Doc> => {
await GoogleAuthenticationManager.Instance.fetchOrGenerateAccessToken();
const response = await Query.ContentSearch(requested);
const uploads = await Transactions.WriteMediaItemsToServer(response);
- const children = uploads.map((upload: Transactions.UploadInformation) => {
- const document = Docs.Create.ImageDocument(Utils.fileUrl(upload.fileNames.clean));
- document.contentSize = upload.contentSize;
- return document;
- });
+ const children = uploads.map((upload: Transactions.UploadInformation) => Docs.Create.ImageDocument(Utils.fileUrl(upload.fileNames.clean) /*, {"data_contentSize":upload.contentSize}*/));
const options = { _width: 500, _height: 500 };
return constructor(children, options);
};
-
}
export namespace Query {
-
- const delimiter = ", ";
- const comparator = (a: string, b: string) => (a < b) ? -1 : (a > b ? 1 : 0);
+ const delimiter = ', ';
+ const comparator = (a: string, b: string) => (a < b ? -1 : a > b ? 1 : 0);
export const TagChildImages = async (collection: Doc) => {
await GoogleAuthenticationManager.Instance.fetchOrGenerateAccessToken();
const idMapping = await Cast(collection.googlePhotosIdMapping, Doc);
if (!idMapping) {
- throw new Error("Appending image metadata requires that the targeted collection have already been mapped to an album!");
+ throw new Error('Appending image metadata requires that the targeted collection have already been mapped to an album!');
}
const tagMapping = new Map<string, string>();
const images = (await DocListCastAsync(collection.data))!.map(Doc.GetProto);
@@ -169,7 +159,7 @@ export namespace GooglePhotos {
const concatenated = tagMapping.get(image[Id])!;
const tags = concatenated.split(delimiter);
if (tags.length > 1) {
- const cleaned = concatenated.replace(ContentCategories.NONE + delimiter, "");
+ const cleaned = concatenated.replace(ContentCategories.NONE + delimiter, '');
image.googlePhotosTags = cleaned.split(delimiter).sort(comparator).join(delimiter);
} else {
image.googlePhotosTags = ContentCategories.NONE;
@@ -253,19 +243,15 @@ export namespace GooglePhotos {
export const GetImage = async (mediaItemId: string): Promise<Transactions.MediaItem> => {
return (await endpoint()).mediaItems.get(mediaItemId);
};
-
}
namespace Create {
-
export const Album = async (title: string) => {
return (await endpoint()).albums.create(title);
};
-
}
export namespace Transactions {
-
export interface UploadInformation {
mediaPaths: string[];
fileNames: { [key: string]: string };
@@ -295,18 +281,20 @@ export namespace GooglePhotos {
};
export const WriteMediaItemsToServer = async (body: { mediaItems: any[] }): Promise<UploadInformation[]> => {
- const uploads = await Networking.PostToServer("/googlePhotosMediaGet", body);
+ const uploads = await Networking.PostToServer('/googlePhotosMediaGet', body);
return uploads;
};
- export const UploadThenFetch = async (sources: Doc[], album?: AlbumReference, descriptionKey = "caption") => {
+ export const UploadThenFetch = async (sources: Doc[], album?: AlbumReference, descriptionKey = 'caption') => {
const response = await UploadImages(sources, album, descriptionKey);
if (!response) {
return undefined;
}
- const baseUrls: string[] = await Promise.all(response.results.map(item => {
- return new Promise<string>(resolve => Query.GetImage(item.mediaItem.id).then(item => resolve(item.baseUrl)));
- }));
+ const baseUrls: string[] = await Promise.all(
+ response.results.map(item => {
+ return new Promise<string>(resolve => Query.GetImage(item.mediaItem.id).then(item => resolve(item.baseUrl)));
+ })
+ );
return baseUrls;
};
@@ -315,9 +303,9 @@ export namespace GooglePhotos {
failed: number[];
}
- export const UploadImages = async (sources: Doc[], album?: AlbumReference, descriptionKey = "caption"): Promise<Opt<ImageUploadResults>> => {
+ export const UploadImages = async (sources: Doc[], album?: AlbumReference, descriptionKey = 'caption'): Promise<Opt<ImageUploadResults>> => {
await GoogleAuthenticationManager.Instance.fetchOrGenerateAccessToken();
- if (album && "title" in album) {
+ if (album && 'title' in album) {
album = await Create.Album(album.title);
}
const media: MediaInput[] = [];
@@ -327,13 +315,13 @@ export namespace GooglePhotos {
return;
}
const url = data.url.href;
- const target = Doc.MakeAlias(source);
+ const target = Doc.MakeEmbedding(source);
const description = parseDescription(target, descriptionKey);
await DocUtils.makeCustomViewClicked(target, Docs.Create.FreeformDocument);
media.push({ url, description });
}
if (media.length) {
- const results = await Networking.PostToServer("/googlePhotosMediaPost", { media, album });
+ const results = await Networking.PostToServer('/googlePhotosMediaPost', { media, album });
return results;
}
};
@@ -341,14 +329,12 @@ export namespace GooglePhotos {
const parseDescription = (document: Doc, descriptionKey: string) => {
let description: string = Utils.prepend(`/doc/${document[Id]}?sharing=true`);
const target = document[descriptionKey];
- if (typeof target === "string") {
+ if (typeof target === 'string') {
description = target;
} else if (target instanceof RichTextField) {
description = RichTextUtils.ToPlainText(EditorState.fromJSON(FormattedTextBox.Instance.config, JSON.parse(target.Data)));
}
return description;
};
-
}
-
-} \ No newline at end of file
+}