1
0
mirror of https://github.com/laurent22/joplin.git synced 2024-12-24 10:27:10 +02:00
joplin/CliClient/app/base-command.js

98 lines
1.5 KiB
JavaScript
Raw Normal View History

const { _ } = require('lib/locale.js');
const { reg } = require('lib/registry.js');
2017-10-07 19:07:38 +02:00
2017-07-10 22:03:46 +02:00
class BaseCommand {
2017-10-07 18:30:27 +02:00
constructor() {
this.stdout_ = null;
2017-10-07 19:07:38 +02:00
this.prompt_ = null;
2017-10-07 18:30:27 +02:00
}
2017-07-10 22:03:46 +02:00
usage() {
throw new Error('Usage not defined');
}
2017-12-26 12:38:53 +02:00
encryptionCheck(item) {
if (item && item.encryption_applied) throw new Error(_('Cannot change encrypted item'));
}
2017-07-10 22:03:46 +02:00
description() {
throw new Error('Description not defined');
}
async action() {
2017-07-10 22:03:46 +02:00
throw new Error('Action not defined');
}
compatibleUis() {
return ['cli', 'gui'];
}
supportsUi(ui) {
return this.compatibleUis().indexOf(ui) >= 0;
}
2017-07-10 22:03:46 +02:00
options() {
return [];
}
2017-07-18 20:21:03 +02:00
hidden() {
return false;
}
2017-07-19 00:14:20 +02:00
enabled() {
return true;
}
2017-08-20 16:29:18 +02:00
cancellable() {
return false;
}
2017-07-10 22:03:46 +02:00
async cancel() {}
2017-08-04 19:51:01 +02:00
name() {
const r = this.usage().split(' ');
2017-08-04 19:51:01 +02:00
return r[0];
}
2017-10-14 23:44:50 +02:00
setDispatcher(fn) {
this.dispatcher_ = fn;
2017-10-07 18:30:27 +02:00
}
2017-10-14 23:44:50 +02:00
dispatch(action) {
if (!this.dispatcher_) throw new Error('Dispatcher not defined');
return this.dispatcher_(action);
2017-10-07 18:30:27 +02:00
}
2017-10-14 23:44:50 +02:00
setStdout(fn) {
this.stdout_ = fn;
2017-10-14 20:03:23 +02:00
}
stdout(text) {
if (this.stdout_) this.stdout_(text);
2017-10-14 20:03:23 +02:00
}
2017-10-07 19:07:38 +02:00
setPrompt(fn) {
this.prompt_ = fn;
}
async prompt(message, options = null) {
if (!this.prompt_) throw new Error('Prompt is undefined');
return await this.prompt_(message, options);
}
2017-08-04 19:51:01 +02:00
metadata() {
return {
name: this.name(),
usage: this.usage(),
options: this.options(),
hidden: this.hidden(),
};
}
logger() {
return reg.logger();
}
2017-07-10 22:03:46 +02:00
}
module.exports = { BaseCommand };