delta-store
Version:
An API for a store with change records
83 lines (76 loc) • 2.16 kB
text/typescript
/**
* Created by Papa on 1/3/2016.
*/
import {GoogleDrive} from './GoogleDrive';
import {ApiConstants, GoogleApi} from '../GoogleApi';
import {DriveResponse} from './GoogleDriveModel';
import {DriveConstants} from './GoogleDriveModel';
import {GoogleSetupInfo} from '../GoogleSharingModel';
import {GoogleChangeListShareInfo} from '../GoogleSharingModel';
import {MimeTypes} from './GoogleDriveModel';
export class GoogleDriveAdaptor {
constructor(
private googleApi:GoogleApi,
private googleDrive:GoogleDrive
) {
}
initialize(
apiKey:string,
clientId:string
):Promise<any> {
return this.googleApi.authorizeApis(apiKey, clientId, ApiConstants.ALL_SCOPES).then(() => {
let loadRequests = [
this.googleApi.loadApi('drive', DriveConstants.VERSION),
this.googleApi.loadApi('drive-realtime,drive-share')
];
return Promise.all(loadRequests);
});
}
setup(
setupInfo:GoogleSetupInfo
):Promise<DriveResponse> {
return this.googleDrive.findOrCreateUniqueFolder(setupInfo.rootFolder);
}
listChangeLists(
info:GoogleSetupInfo
):Promise<GoogleChangeListShareInfo[]> {
return this.googleDrive.listFiles(info.sharedAppFolderId).then((
response:DriveResponse
) => {
let files = response.result.files;
if (!files || files.length === 0) {
return [];
}
let shares:GoogleChangeListShareInfo[] = [];
files.forEach(( file ) => {
shares.push({
name: file.name,
dbId: info.dbIdField,
folderId: file.id
});
});
return shares;
});
}
populateChangeListFileInfo(
changeListInfo:GoogleChangeListShareInfo
):Promise<GoogleChangeListShareInfo> {
return this.googleDrive.listFiles(changeListInfo.folderId).then((
response:DriveResponse
) => {
let files = response.result.files;
if (!files || files.length === 0) {
return changeListInfo;
}
files.forEach(( file ) => {
if (file.mimeType.indexOf(MimeTypes.REALTIME) === 0) {
if (changeListInfo.realtimeFileId) {
throw `Multiple Realtime files found for Change List: ${changeListInfo.name}`;
}
changeListInfo.realtimeFileId = file.id;
}
});
return changeListInfo;
});
}
}