aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--package.json1
-rw-r--r--src/client/util/Import & Export/DirectoryImportBox.tsx7
-rw-r--r--src/client/views/Main.tsx3
-rw-r--r--src/extensions/ArrayExtensions.ts639
-rw-r--r--src/extensions/Extensions.ts2
-rw-r--r--src/server/apis/google/GooglePhotosUploadUtils.ts8
-rw-r--r--src/server/credentials/google_docs_token.json2
-rw-r--r--src/server/index.ts10
8 files changed, 326 insertions, 346 deletions
diff --git a/package.json b/package.json
index f869713ba..b20c31a7a 100644
--- a/package.json
+++ b/package.json
@@ -114,6 +114,7 @@
"@types/youtube": "0.0.38",
"adm-zip": "^0.4.13",
"archiver": "^3.0.3",
+ "array-batcher": "^1.0.2",
"async": "^2.6.2",
"babel-runtime": "^6.26.0",
"bcrypt-nodejs": "0.0.3",
diff --git a/src/client/util/Import & Export/DirectoryImportBox.tsx b/src/client/util/Import & Export/DirectoryImportBox.tsx
index e3958e3a4..762302bc8 100644
--- a/src/client/util/Import & Export/DirectoryImportBox.tsx
+++ b/src/client/util/Import & Export/DirectoryImportBox.tsx
@@ -20,6 +20,7 @@ import { listSpec } from "../../../new_fields/Schema";
import { GooglePhotos } from "../../apis/google_docs/GooglePhotosClientUtils";
import { SchemaHeaderField } from "../../../new_fields/SchemaHeaderField";
import "./DirectoryImportBox.scss";
+import { batchedMapAsync } from "array-batcher";
const unsupported = ["text/html", "text/plain"];
interface FileResponse {
@@ -103,7 +104,7 @@ export default class DirectoryImportBox extends React.Component<FieldViewProps>
runInAction(() => this.phase = `Internal: uploading ${this.quota - this.completed} files to Dash...`);
- const uploads = await validated.batchedMapAsync<FileResponse>({ batchSize: 15 }, async batch => {
+ const uploads = await batchedMapAsync(validated, { batchSize: 15 }, async batch => {
const formData = new FormData();
const parameters = { method: 'POST', body: formData };
@@ -113,9 +114,9 @@ export default class DirectoryImportBox extends React.Component<FieldViewProps>
formData.append(Utils.GenerateGuid(), file);
});
- const responses = (await fetch(RouteStore.upload, parameters)).json();
+ const responses = await (await fetch(RouteStore.upload, parameters)).json();
runInAction(() => this.completed += batch.length);
- return responses;
+ return responses as FileResponse[];
});
await Promise.all(uploads.map(async upload => {
diff --git a/src/client/views/Main.tsx b/src/client/views/Main.tsx
index 53912550c..70d2235e6 100644
--- a/src/client/views/Main.tsx
+++ b/src/client/views/Main.tsx
@@ -7,9 +7,6 @@ import { Cast } from "../../new_fields/Types";
import { Doc, DocListCastAsync } from "../../new_fields/Doc";
import { List } from "../../new_fields/List";
import { DocServer } from "../DocServer";
-const Extensions = require("../../extensions/Extensions");
-
-Extensions.AssignExtensions();
let swapDocs = async () => {
let oldDoc = await Cast(CurrentUserUtils.UserDocument.linkManagerDoc, Doc);
diff --git a/src/extensions/ArrayExtensions.ts b/src/extensions/ArrayExtensions.ts
index 872f107a7..ca407862b 100644
--- a/src/extensions/ArrayExtensions.ts
+++ b/src/extensions/ArrayExtensions.ts
@@ -1,333 +1,318 @@
interface Array<T> {
- fixedBatch<T>(batcher: FixedBatcher): T[][];
- predicateBatch<T, A = undefined>(batcher: PredicateBatcherSync<T, A>): T[][];
- predicateBatchAsync<T, A = undefined>(batcher: PredicateBatcherAsync<T, A>): Promise<T[][]>;
- batch<A = undefined>(batcher: BatcherSync<T, A>): T[][];
- batchAsync<A = undefined>(batcher: Batcher<T, A>): Promise<T[][]>;
-
- batchedForEach<A = undefined>(batcher: BatcherSync<T, A>, handler: BatchHandlerSync<T>): void;
- batchedMap<O, A = undefined>(batcher: BatcherSync<T, A>, handler: BatchConverterSync<T, O>): O[];
-
- batchedForEachAsync<A = undefined>(batcher: Batcher<T, A>, handler: BatchHandler<T>): Promise<void>;
- batchedMapAsync<O, A = undefined>(batcher: Batcher<T, A>, handler: BatchConverter<T, O>): Promise<O[]>;
-
- batchedForEachInterval<A = undefined>(batcher: Batcher<T, A>, handler: BatchHandler<T>, interval: Interval): Promise<void>;
- batchedMapInterval<O, A = undefined>(batcher: Batcher<T, A>, handler: BatchConverter<T, O>, interval: Interval): Promise<O[]>;
-
lastElement(): T;
}
-interface BatchContext {
- completedBatches: number;
- remainingBatches: number;
-}
-
-interface ExecutorResult<A> {
- updated: A;
- makeNextBatch: boolean;
-}
-
-interface PredicateBatcherCommon<A> {
- initial: A;
- persistAccumulator?: boolean;
-}
-
-interface Interval {
- magnitude: number;
- unit: typeof module.exports.TimeUnit;
-}
-
-type BatchConverterSync<I, O> = (batch: I[], context: BatchContext) => O[];
-type BatchConverterAsync<I, O> = (batch: I[], context: BatchContext) => Promise<O[]>;
-type BatchConverter<I, O> = BatchConverterSync<I, O> | BatchConverterAsync<I, O>;
-
-type BatchHandlerSync<I> = (batch: I[], context: BatchContext) => void;
-type BatchHandlerAsync<I> = (batch: I[], context: BatchContext) => Promise<void>;
-type BatchHandler<I> = BatchHandlerSync<I> | BatchHandlerAsync<I>;
-
-type BatcherSync<I, A> = FixedBatcher | PredicateBatcherSync<I, A>;
-type BatcherAsync<I, A> = PredicateBatcherAsync<I, A>;
-type Batcher<I, A> = BatcherSync<I, A> | BatcherAsync<I, A>;
-
-type FixedBatcher = { batchSize: number } | { batchCount: number, mode?: typeof module.exports.Mode };
-type PredicateBatcherSync<I, A> = PredicateBatcherCommon<A> & { executor: (element: I, accumulator: A) => ExecutorResult<A> };
-type PredicateBatcherAsync<I, A> = PredicateBatcherCommon<A> & { executorAsync: (element: I, accumulator: A) => Promise<ExecutorResult<A>> };
-
-
-module.exports.Mode = {
- Balanced: 0,
- Even: 1
-};
-
-module.exports.TimeUnit = {
- Milliseconds: 0,
- Seconds: 1,
- Minutes: 2
-};
-
-module.exports.Assign = function () {
-
- Array.prototype.fixedBatch = function <T>(batcher: FixedBatcher): T[][] {
- const batches: T[][] = [];
- const length = this.length;
- let i = 0;
- if ("batchSize" in batcher) {
- const { batchSize } = batcher;
- while (i < this.length) {
- const cap = Math.min(i + batchSize, length);
- batches.push(this.slice(i, i = cap));
- }
- } else if ("batchCount" in batcher) {
- let { batchCount, mode } = batcher;
- const resolved = mode || module.exports.Mode.Balanced;
- if (batchCount < 1) {
- throw new Error("Batch count must be a positive integer!");
- }
- if (batchCount === 1) {
- return [this];
- }
- if (batchCount >= this.length) {
- return this.map((element: T) => [element]);
- }
-
- let length = this.length;
- let size: number;
-
- if (length % batchCount === 0) {
- size = Math.floor(length / batchCount);
- while (i < length) {
- batches.push(this.slice(i, i += size));
- }
- } else if (resolved === module.exports.Mode.Balanced) {
- while (i < length) {
- size = Math.ceil((length - i) / batchCount--);
- batches.push(this.slice(i, i += size));
- }
- } else {
- batchCount--;
- size = Math.floor(length / batchCount);
- if (length % size === 0) {
- size--;
- }
- while (i < size * batchCount) {
- batches.push(this.slice(i, i += size));
- }
- batches.push(this.slice(size * batchCount));
- }
- }
- return batches;
- };
-
- Array.prototype.predicateBatch = function <T, A>(batcher: PredicateBatcherSync<T, A>): T[][] {
- const batches: T[][] = [];
- let batch: T[] = [];
- const { executor, initial, persistAccumulator } = batcher;
- let accumulator = initial;
- for (let element of this) {
- const { updated, makeNextBatch } = executor(element, accumulator);
- accumulator = updated;
- if (!makeNextBatch) {
- batch.push(element);
- } else {
- batches.push(batch);
- batch = [element];
- if (!persistAccumulator) {
- accumulator = initial;
- }
- }
- }
- batches.push(batch);
- return batches;
- };
-
- Array.prototype.predicateBatchAsync = async function <T, A>(batcher: BatcherAsync<T, A>): Promise<T[][]> {
- const batches: T[][] = [];
- let batch: T[] = [];
- const { executorAsync, initial, persistAccumulator } = batcher;
- let accumulator: A = initial;
- for (let element of this) {
- const { updated, makeNextBatch } = await executorAsync(element, accumulator);
- accumulator = updated;
- if (!makeNextBatch) {
- batch.push(element);
- } else {
- batches.push(batch);
- batch = [element];
- if (!persistAccumulator) {
- accumulator = initial;
- }
- }
- }
- batches.push(batch);
- return batches;
- };
-
- Array.prototype.batch = function <T, A>(batcher: BatcherSync<T, A>): T[][] {
- if ("executor" in batcher) {
- return this.predicateBatch(batcher);
- } else {
- return this.fixedBatch(batcher);
- }
- };
-
- Array.prototype.batchAsync = async function <T, A>(batcher: Batcher<T, A>): Promise<T[][]> {
- if ("executorAsync" in batcher) {
- return this.predicateBatchAsync(batcher);
- } else {
- return this.batch(batcher);
- }
- };
-
- Array.prototype.batchedForEach = function <I, A>(batcher: BatcherSync<I, A>, handler: BatchHandlerSync<I>): void {
- if (this.length) {
- let completed = 0;
- const batches = this.batch(batcher);
- const quota = batches.length;
- for (let batch of batches) {
- const context: BatchContext = {
- completedBatches: completed,
- remainingBatches: quota - completed,
- };
- handler(batch, context);
- completed++;
- }
- }
- };
-
- Array.prototype.batchedMap = function <I, O, A>(batcher: BatcherSync<I, A>, handler: BatchConverterSync<I, O>): O[] {
- if (!this.length) {
- return [];
- }
- let collector: O[] = [];
- let completed = 0;
- const batches = this.batch(batcher);
- const quota = batches.length;
- for (let batch of batches) {
- const context: BatchContext = {
- completedBatches: completed,
- remainingBatches: quota - completed,
- };
- collector.push(...handler(batch, context));
- completed++;
- }
- return collector;
- };
-
- Array.prototype.batchedForEachAsync = async function <I, A>(batcher: Batcher<I, A>, handler: BatchHandler<I>): Promise<void> {
- if (this.length) {
- let completed = 0;
- const batches = await this.batchAsync(batcher);
- const quota = batches.length;
- for (let batch of batches) {
- const context: BatchContext = {
- completedBatches: completed,
- remainingBatches: quota - completed,
- };
- await handler(batch, context);
- completed++;
- }
- }
- };
-
- Array.prototype.batchedMapAsync = async function <I, O, A>(batcher: Batcher<I, A>, handler: BatchConverter<I, O>): Promise<O[]> {
- if (!this.length) {
- return [];
- }
- let collector: O[] = [];
- let completed = 0;
- const batches = await this.batchAsync(batcher);
- const quota = batches.length;
- for (let batch of batches) {
- const context: BatchContext = {
- completedBatches: completed,
- remainingBatches: quota - completed,
- };
- collector.push(...(await handler(batch, context)));
- completed++;
- }
- return collector;
- };
-
- Array.prototype.batchedForEachInterval = async function <I, A>(batcher: Batcher<I, A>, handler: BatchHandler<I>, interval: Interval): Promise<void> {
- if (!this.length) {
- return;
- }
- const batches = await this.batchAsync(batcher);
- const quota = batches.length;
- return new Promise<void>(async resolve => {
- const iterator = batches[Symbol.iterator]();
- let completed = 0;
- while (true) {
- const next = iterator.next();
- await new Promise<void>(resolve => {
- setTimeout(async () => {
- const batch = next.value;
- const context: BatchContext = {
- completedBatches: completed,
- remainingBatches: quota - completed,
- };
- await handler(batch, context);
- resolve();
- }, convert(interval));
- });
- if (++completed === quota) {
- break;
- }
- }
- resolve();
- });
- };
-
- Array.prototype.batchedMapInterval = async function <I, O, A>(batcher: Batcher<I, A>, handler: BatchConverter<I, O>, interval: Interval): Promise<O[]> {
- if (!this.length) {
- return [];
- }
- let collector: O[] = [];
- const batches = await this.batchAsync(batcher);
- const quota = batches.length;
- return new Promise<O[]>(async resolve => {
- const iterator = batches[Symbol.iterator]();
- let completed = 0;
- while (true) {
- const next = iterator.next();
- await new Promise<void>(resolve => {
- setTimeout(async () => {
- const batch = next.value;
- const context: BatchContext = {
- completedBatches: completed,
- remainingBatches: quota - completed,
- };
- collector.push(...(await handler(batch, context)));
- resolve();
- }, convert(interval));
- });
- if (++completed === quota) {
- resolve(collector);
- break;
- }
- }
- });
- };
-
- Array.prototype.lastElement = function <T>() {
- if (!this.length) {
- return undefined;
- }
- const last: T = this[this.length - 1];
- return last;
- };
-
+// interface BatchContext {
+// completedBatches: number;
+// remainingBatches: number;
+// }
+
+// interface ExecutorResult<A> {
+// updated: A;
+// makeNextBatch: boolean;
+// }
+
+// interface PredicateBatcherCommon<A> {
+// initial: A;
+// persistAccumulator?: boolean;
+// }
+
+// interface Interval {
+// magnitude: number;
+// unit: typeof module.exports.TimeUnit;
+// }
+
+// type BatchConverterSync<I, O> = (batch: I[], context: BatchContext) => O[];
+// type BatchConverterAsync<I, O> = (batch: I[], context: BatchContext) => Promise<O[]>;
+// type BatchConverter<I, O> = BatchConverterSync<I, O> | BatchConverterAsync<I, O>;
+
+// type BatchHandlerSync<I> = (batch: I[], context: BatchContext) => void;
+// type BatchHandlerAsync<I> = (batch: I[], context: BatchContext) => Promise<void>;
+// type BatchHandler<I> = BatchHandlerSync<I> | BatchHandlerAsync<I>;
+
+// type BatcherSync<I, A> = FixedBatcher | PredicateBatcherSync<I, A>;
+// type BatcherAsync<I, A> = PredicateBatcherAsync<I, A>;
+// type Batcher<I, A> = BatcherSync<I, A> | BatcherAsync<I, A>;
+
+// type FixedBatcher = { batchSize: number } | { batchCount: number, mode?: typeof module.exports.Mode };
+// type PredicateBatcherSync<I, A> = PredicateBatcherCommon<A> & { executor: (element: I, accumulator: A) => ExecutorResult<A> };
+// type PredicateBatcherAsync<I, A> = PredicateBatcherCommon<A> & { executorAsync: (element: I, accumulator: A) => Promise<ExecutorResult<A>> };
+
+
+// module.exports.Mode = {
+// Balanced: 0,
+// Even: 1
+// };
+
+// module.exports.TimeUnit = {
+// Milliseconds: 0,
+// Seconds: 1,
+// Minutes: 2
+// };
+
+// module.exports.Assign = function () {
+
+// Array.prototype.fixedBatch = function <T>(batcher: FixedBatcher): T[][] {
+// const batches: T[][] = [];
+// const length = this.length;
+// let i = 0;
+// if ("batchSize" in batcher) {
+// const { batchSize } = batcher;
+// while (i < this.length) {
+// const cap = Math.min(i + batchSize, length);
+// batches.push(this.slice(i, i = cap));
+// }
+// } else if ("batchCount" in batcher) {
+// let { batchCount, mode } = batcher;
+// const resolved = mode || module.exports.Mode.Balanced;
+// if (batchCount < 1) {
+// throw new Error("Batch count must be a positive integer!");
+// }
+// if (batchCount === 1) {
+// return [this];
+// }
+// if (batchCount >= this.length) {
+// return this.map((element: T) => [element]);
+// }
+
+// let length = this.length;
+// let size: number;
+
+// if (length % batchCount === 0) {
+// size = Math.floor(length / batchCount);
+// while (i < length) {
+// batches.push(this.slice(i, i += size));
+// }
+// } else if (resolved === module.exports.Mode.Balanced) {
+// while (i < length) {
+// size = Math.ceil((length - i) / batchCount--);
+// batches.push(this.slice(i, i += size));
+// }
+// } else {
+// batchCount--;
+// size = Math.floor(length / batchCount);
+// if (length % size === 0) {
+// size--;
+// }
+// while (i < size * batchCount) {
+// batches.push(this.slice(i, i += size));
+// }
+// batches.push(this.slice(size * batchCount));
+// }
+// }
+// return batches;
+// };
+
+// Array.prototype.predicateBatch = function <T, A>(batcher: PredicateBatcherSync<T, A>): T[][] {
+// const batches: T[][] = [];
+// let batch: T[] = [];
+// const { executor, initial, persistAccumulator } = batcher;
+// let accumulator = initial;
+// for (let element of this) {
+// const { updated, makeNextBatch } = executor(element, accumulator);
+// accumulator = updated;
+// if (!makeNextBatch) {
+// batch.push(element);
+// } else {
+// batches.push(batch);
+// batch = [element];
+// if (!persistAccumulator) {
+// accumulator = initial;
+// }
+// }
+// }
+// batches.push(batch);
+// return batches;
+// };
+
+// Array.prototype.predicateBatchAsync = async function <T, A>(batcher: BatcherAsync<T, A>): Promise<T[][]> {
+// const batches: T[][] = [];
+// let batch: T[] = [];
+// const { executorAsync, initial, persistAccumulator } = batcher;
+// let accumulator: A = initial;
+// for (let element of this) {
+// const { updated, makeNextBatch } = await executorAsync(element, accumulator);
+// accumulator = updated;
+// if (!makeNextBatch) {
+// batch.push(element);
+// } else {
+// batches.push(batch);
+// batch = [element];
+// if (!persistAccumulator) {
+// accumulator = initial;
+// }
+// }
+// }
+// batches.push(batch);
+// return batches;
+// };
+
+// Array.prototype.batch = function <T, A>(batcher: BatcherSync<T, A>): T[][] {
+// if ("executor" in batcher) {
+// return this.predicateBatch(batcher);
+// } else {
+// return this.fixedBatch(batcher);
+// }
+// };
+
+// Array.prototype.batchAsync = async function <T, A>(batcher: Batcher<T, A>): Promise<T[][]> {
+// if ("executorAsync" in batcher) {
+// return this.predicateBatchAsync(batcher);
+// } else {
+// return this.batch(batcher);
+// }
+// };
+
+// Array.prototype.batchedForEach = function <I, A>(batcher: BatcherSync<I, A>, handler: BatchHandlerSync<I>): void {
+// if (this.length) {
+// let completed = 0;
+// const batches = this.batch(batcher);
+// const quota = batches.length;
+// for (let batch of batches) {
+// const context: BatchContext = {
+// completedBatches: completed,
+// remainingBatches: quota - completed,
+// };
+// handler(batch, context);
+// completed++;
+// }
+// }
+// };
+
+// Array.prototype.batchedMap = function <I, O, A>(batcher: BatcherSync<I, A>, handler: BatchConverterSync<I, O>): O[] {
+// if (!this.length) {
+// return [];
+// }
+// let collector: O[] = [];
+// let completed = 0;
+// const batches = this.batch(batcher);
+// const quota = batches.length;
+// for (let batch of batches) {
+// const context: BatchContext = {
+// completedBatches: completed,
+// remainingBatches: quota - completed,
+// };
+// collector.push(...handler(batch, context));
+// completed++;
+// }
+// return collector;
+// };
+
+// Array.prototype.batchedForEachAsync = async function <I, A>(batcher: Batcher<I, A>, handler: BatchHandler<I>): Promise<void> {
+// if (this.length) {
+// let completed = 0;
+// const batches = await this.batchAsync(batcher);
+// const quota = batches.length;
+// for (let batch of batches) {
+// const context: BatchContext = {
+// completedBatches: completed,
+// remainingBatches: quota - completed,
+// };
+// await handler(batch, context);
+// completed++;
+// }
+// }
+// };
+
+// Array.prototype.batchedMapAsync = async function <I, O, A>(batcher: Batcher<I, A>, handler: BatchConverter<I, O>): Promise<O[]> {
+// if (!this.length) {
+// return [];
+// }
+// let collector: O[] = [];
+// let completed = 0;
+// const batches = await this.batchAsync(batcher);
+// const quota = batches.length;
+// for (let batch of batches) {
+// const context: BatchContext = {
+// completedBatches: completed,
+// remainingBatches: quota - completed,
+// };
+// collector.push(...(await handler(batch, context)));
+// completed++;
+// }
+// return collector;
+// };
+
+// Array.prototype.batchedForEachInterval = async function <I, A>(batcher: Batcher<I, A>, handler: BatchHandler<I>, interval: Interval): Promise<void> {
+// if (!this.length) {
+// return;
+// }
+// const batches = await this.batchAsync(batcher);
+// const quota = batches.length;
+// return new Promise<void>(async resolve => {
+// const iterator = batches[Symbol.iterator]();
+// let completed = 0;
+// while (true) {
+// const next = iterator.next();
+// await new Promise<void>(resolve => {
+// setTimeout(async () => {
+// const batch = next.value;
+// const context: BatchContext = {
+// completedBatches: completed,
+// remainingBatches: quota - completed,
+// };
+// await handler(batch, context);
+// resolve();
+// }, convert(interval));
+// });
+// if (++completed === quota) {
+// break;
+// }
+// }
+// resolve();
+// });
+// };
+
+// Array.prototype.batchedMapInterval = async function <I, O, A>(batcher: Batcher<I, A>, handler: BatchConverter<I, O>, interval: Interval): Promise<O[]> {
+// if (!this.length) {
+// return [];
+// }
+// let collector: O[] = [];
+// const batches = await this.batchAsync(batcher);
+// const quota = batches.length;
+// return new Promise<O[]>(async resolve => {
+// const iterator = batches[Symbol.iterator]();
+// let completed = 0;
+// while (true) {
+// const next = iterator.next();
+// await new Promise<void>(resolve => {
+// setTimeout(async () => {
+// const batch = next.value;
+// const context: BatchContext = {
+// completedBatches: completed,
+// remainingBatches: quota - completed,
+// };
+// collector.push(...(await handler(batch, context)));
+// resolve();
+// }, convert(interval));
+// });
+// if (++completed === quota) {
+// resolve(collector);
+// break;
+// }
+// }
+// });
+// };
+
+Array.prototype.lastElement = function <T>() {
+ if (!this.length) {
+ return undefined;
+ }
+ const last: T = this[this.length - 1];
+ return last;
};
-const convert = (interval: Interval) => {
- const { magnitude, unit } = interval;
- switch (unit) {
- default:
- case module.exports.TimeUnit.Milliseconds:
- return magnitude;
- case module.exports.TimeUnit.Seconds:
- return magnitude * 1000;
- case module.exports.TimeUnit.Minutes:
- return magnitude * 1000 * 60;
- }
-}; \ No newline at end of file
+// };
+
+// const convert = (interval: Interval) => {
+// const { magnitude, unit } = interval;
+// switch (unit) {
+// default:
+// case module.exports.TimeUnit.Milliseconds:
+// return magnitude;
+// case module.exports.TimeUnit.Seconds:
+// return magnitude * 1000;
+// case module.exports.TimeUnit.Minutes:
+// return magnitude * 1000 * 60;
+// }
+// }; \ No newline at end of file
diff --git a/src/extensions/Extensions.ts b/src/extensions/Extensions.ts
index 1bcebd0e2..1391140b9 100644
--- a/src/extensions/Extensions.ts
+++ b/src/extensions/Extensions.ts
@@ -2,6 +2,6 @@ const ArrayExtensions = require("./ArrayExtensions");
const StringExtensions = require("./StringExtensions");
module.exports.AssignExtensions = function () {
- ArrayExtensions.Assign();
+ // ArrayExtensions.Assign();
StringExtensions.Assign();
}; \ No newline at end of file
diff --git a/src/server/apis/google/GooglePhotosUploadUtils.ts b/src/server/apis/google/GooglePhotosUploadUtils.ts
index fc6772ffd..29575763c 100644
--- a/src/server/apis/google/GooglePhotosUploadUtils.ts
+++ b/src/server/apis/google/GooglePhotosUploadUtils.ts
@@ -7,7 +7,7 @@ import { Opt } from '../../../new_fields/Doc';
import * as sharp from 'sharp';
import { MediaItemCreationResult } from './SharedTypes';
import { NewMediaItem } from "../../index";
-const { TimeUnit } = require("../../../extensions/ArrayExtensions");
+import { batchedMapInterval, FixedBatcher, TimeUnit, Interval } from "array-batcher";
const uploadDirectory = path.join(__dirname, "../../public/files/");
@@ -81,10 +81,10 @@ export namespace GooglePhotosUploadUtils {
});
})).newMediaItemResults;
};
- const batcher = { batchSize: 50 };
- const interval = { magnitude: 100, unit: TimeUnit.Milliseconds };
+ const batcher: FixedBatcher = { batchSize: 50 };
+ const interval: Interval = { magnitude: 100, unit: TimeUnit.Milliseconds };
- const newMediaItemResults = await newMediaItems.batchedMapInterval(batcher, createFromUploadTokens, interval);
+ const newMediaItemResults = await batchedMapInterval(newMediaItems, batcher, createFromUploadTokens, interval);
return { newMediaItemResults };
};
diff --git a/src/server/credentials/google_docs_token.json b/src/server/credentials/google_docs_token.json
index 7c49eed43..cdea139a3 100644
--- a/src/server/credentials/google_docs_token.json
+++ b/src/server/credentials/google_docs_token.json
@@ -1 +1 @@
-{"access_token":"ya29.ImCJB1Y8Z8vgUH4vyYA9xwqvLg281kOQKfA8_AGs_EqF1VKQVWfZsMoYkPJN3QwJmIUxlzTO1N-ehUGIxu0Jq3kKR-zzW7rQIMgeQu32OHogK4kvFxpM7l7RNYRw_9x22I0","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":1568935635717} \ No newline at end of file
+{"access_token":"ya29.ImCJB_jd-XlGcIHAHgN2Zl3BWQ6sMHdeMMuRxU6sPCbAYIT8hXws-WDmQf65ZY1f-0d3y7HcCcuOxtZJ_0IcBb1-yIBxiOf3VJWPmvjGiJQq_mANGVSSmsBHhqpIaYkeQN0","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":1568973665276} \ No newline at end of file
diff --git a/src/server/index.ts b/src/server/index.ts
index e3e4221cf..e03079d66 100644
--- a/src/server/index.ts
+++ b/src/server/index.ts
@@ -47,9 +47,7 @@ const mongoose = require('mongoose');
const probe = require("probe-image-size");
import * as qs from 'query-string';
import { Opt } from '../new_fields/Doc';
-const Extensions = require("../extensions/Extensions");
-const ArrayExtensions = require("../extensions/ArrayExtensions");
-
+import { batchedMapInterval, TimeUnit } from "array-batcher";
const download = (url: string, dest: fs.PathLike) => request.get(url).pipe(fs.createWriteStream(dest));
let youtubeApiKey: string;
@@ -101,8 +99,6 @@ enum Method {
POST
}
-Extensions.AssignExtensions();
-
/**
* Please invoke this function when adding a new route to Dash's server.
* It ensures that any requests leading to or containing user-sensitive information
@@ -861,9 +857,9 @@ app.post(RouteStore.googlePhotosMediaUpload, async (req, res) => {
return newMediaItems;
};
const batcher = { batchSize: 25 };
- const interval = { magnitude: 100, unit: ArrayExtensions.TimeUnit.Milliseconds };
+ const interval = { magnitude: 100, unit: TimeUnit.Milliseconds };
- const newMediaItems = await mediaInput.batchedMapInterval(batcher, dispatchUpload, interval);
+ const newMediaItems = await batchedMapInterval(mediaInput, batcher, dispatchUpload, interval);
if (failed) {
return _error(res, tokenError);