1
0
mirror of https://github.com/laurent22/joplin.git synced 2025-04-17 11:26:26 +02:00
2019-09-19 22:51:18 +01:00

72 lines
1.8 KiB
JavaScript

const { shim } = require('lib/shim');
const SyncTargetRegistry = require('lib/SyncTargetRegistry');
const { reg } = require('lib/registry.js');
const { _ } = require('lib/locale.js');
const Setting = require('lib/models/Setting');
class Shared {
constructor(comp, showInfoMessageBox, showErrorMessageBox) {
this.comp_ = comp;
this.dropboxApi_ = null;
this.comp_.state = {
loginUrl: '',
authCode: '',
checkingAuthToken: false,
};
this.loginUrl_click = () => {
if (!this.comp_.state.loginUrl) return;
shim.openUrl(this.comp_.state.loginUrl);
};
this.authCodeInput_change = event => {
this.comp_.setState({
authCode: typeof event === 'object' ? event.target.value : event,
});
};
this.submit_click = async () => {
this.comp_.setState({ checkingAuthToken: true });
const api = await this.dropboxApi();
try {
const response = await api.execAuthToken(this.comp_.state.authCode);
Setting.setValue(`sync.${this.syncTargetId()}.auth`, response.access_token);
api.setAuthToken(response.access_token);
await showInfoMessageBox(_('The application has been authorised!'));
this.comp_.props.dispatch({ type: 'NAV_BACK' });
reg.scheduleSync();
} catch (error) {
await showErrorMessageBox(_('Could not authorise application:\n\n%s\n\nPlease try again.', error.message));
} finally {
this.comp_.setState({ checkingAuthToken: false });
}
};
}
syncTargetId() {
return SyncTargetRegistry.nameToId('dropbox');
}
async dropboxApi() {
if (this.dropboxApi_) return this.dropboxApi_;
const syncTarget = reg.syncTarget(this.syncTargetId());
this.dropboxApi_ = await syncTarget.api();
return this.dropboxApi_;
}
async refreshUrl() {
const api = await this.dropboxApi();
this.comp_.setState({
loginUrl: api.loginUrl(),
});
}
}
module.exports = Shared;