aboutsummaryrefslogtreecommitdiff
path: root/src/client/apis/google_docs/GooglePhotosClientUtils.ts
diff options
context:
space:
mode:
authorSam Wilkins <samwilkins333@gmail.com>2019-09-06 06:29:26 -0400
committerSam Wilkins <samwilkins333@gmail.com>2019-09-06 06:29:26 -0400
commit5d59e9a379417140e10778cd43e8f87ecb816c37 (patch)
tree3470286463c83ecd30cb436f1a46a5aa5543667a /src/client/apis/google_docs/GooglePhotosClientUtils.ts
parent0404047f5e747608b33474fa1c883a489cd6b403 (diff)
lightly tested functional export of any image doc (web url or stored in server public folder) to google photos, optionally stored in a given target album
Diffstat (limited to 'src/client/apis/google_docs/GooglePhotosClientUtils.ts')
-rw-r--r--src/client/apis/google_docs/GooglePhotosClientUtils.ts73
1 files changed, 31 insertions, 42 deletions
diff --git a/src/client/apis/google_docs/GooglePhotosClientUtils.ts b/src/client/apis/google_docs/GooglePhotosClientUtils.ts
index b95cc98c9..2b72800a9 100644
--- a/src/client/apis/google_docs/GooglePhotosClientUtils.ts
+++ b/src/client/apis/google_docs/GooglePhotosClientUtils.ts
@@ -1,53 +1,42 @@
-import { Album } from "../../../server/apis/google/typings/albums";
-import { PostToServer } from "../../../Utils";
+import { PostToServer, Utils } from "../../../Utils";
import { RouteStore } from "../../../server/RouteStore";
import { ImageField } from "../../../new_fields/URLField";
+import { StrCast, Cast } from "../../../new_fields/Types";
+import { Doc, Opt } from "../../../new_fields/Doc";
+import { Id } from "../../../new_fields/FieldSymbols";
+import requestImageSize = require('../../util/request-image-size');
+import Photos = require('googlephotos');
export namespace GooglePhotosClientUtils {
- export const Create = async (title: string) => {
- let parameters = {
- action: Album.Action.Create,
- body: { album: { title } }
- } as Album.Create;
- return PostToServer(RouteStore.googlePhotosQuery, parameters);
- };
+ export type AlbumReference = { id: string } | { title: string };
+ export const endpoint = () => fetch(Utils.prepend(RouteStore.googlePhotosAccessToken)).then(async response => new Photos(await response.text()));
- export const List = async (options?: Partial<Album.ListOptions>) => {
- let parameters = {
- action: Album.Action.List,
- parameters: {
- pageSize: (options ? options.pageSize : 20) || 20,
- pageToken: (options ? options.pageToken : undefined) || undefined,
- excludeNonAppCreatedData: (options ? options.excludeNonAppCreatedData : false) || false,
- } as Album.ListOptions
- } as Album.List;
- return PostToServer(RouteStore.googlePhotosQuery, parameters);
- };
+ export interface MediaInput {
+ description: string;
+ source: string;
+ }
- export const Get = async (albumId: string) => {
- let parameters = {
- action: Album.Action.Get,
- albumId
- } as Album.Get;
- return PostToServer(RouteStore.googlePhotosQuery, parameters);
- };
-
- export const toDataURL = (field: ImageField | undefined) => {
- if (!field) {
- return undefined;
+ export const UploadMedia = async (sources: Doc[], album?: AlbumReference) => {
+ if (album && "title" in album) {
+ album = (await endpoint()).albums.create(album.title);
+ }
+ const media: MediaInput[] = [];
+ sources.forEach(document => {
+ const data = Cast(Doc.GetProto(document).data, ImageField);
+ const description = StrCast(document.caption);
+ if (!data) {
+ return undefined;
+ }
+ media.push({
+ source: data.url.href,
+ description,
+ } as MediaInput);
+ });
+ if (media.length) {
+ return PostToServer(RouteStore.googlePhotosMediaUpload, { media, album });
}
- const image = document.createElement("img");
- image.src = field.url.href;
- image.width = 200;
- image.height = 200;
- const canvas = document.createElement("canvas");
- canvas.width = image.width;
- canvas.height = image.height;
- const ctx = canvas.getContext("2d")!;
- ctx.drawImage(image, 0, 0);
- const dataUrl = canvas.toDataURL("image/png");
- return dataUrl.replace(/^data:image\/(png|jpg);base64,/, "");
+ return undefined;
};
} \ No newline at end of file