You've already forked joplin
mirror of
https://github.com/laurent22/joplin.git
synced 2025-11-23 22:36:32 +02:00
65 lines
1.8 KiB
TypeScript
65 lines
1.8 KiB
TypeScript
|
|
import { _ } from '@joplin/lib/locale';
|
||
|
|
import BaseCommand from './base-command';
|
||
|
|
import app from './app';
|
||
|
|
import Logger from '@joplin/utils/Logger';
|
||
|
|
import ShareService from '@joplin/lib/services/share/ShareService';
|
||
|
|
import { ModelType } from '@joplin/lib/BaseModel';
|
||
|
|
import SyncTargetRegistry from '@joplin/lib/SyncTargetRegistry';
|
||
|
|
import Setting from '@joplin/lib/models/Setting';
|
||
|
|
import { reg } from '@joplin/lib/registry';
|
||
|
|
|
||
|
|
const logger = Logger.create('command-publish');
|
||
|
|
|
||
|
|
type Args = {
|
||
|
|
note: string;
|
||
|
|
options: {
|
||
|
|
force?: boolean;
|
||
|
|
};
|
||
|
|
};
|
||
|
|
|
||
|
|
|
||
|
|
class Command extends BaseCommand {
|
||
|
|
public usage() {
|
||
|
|
return 'publish [note]';
|
||
|
|
}
|
||
|
|
|
||
|
|
public description() {
|
||
|
|
return _('Publishes a note to Joplin Server or Joplin Cloud');
|
||
|
|
}
|
||
|
|
|
||
|
|
public options() {
|
||
|
|
return [
|
||
|
|
['-f, --force', _('Do not ask for user confirmation.')],
|
||
|
|
];
|
||
|
|
}
|
||
|
|
|
||
|
|
public enabled() {
|
||
|
|
return SyncTargetRegistry.isJoplinServerOrCloud(Setting.value('sync.target'));
|
||
|
|
}
|
||
|
|
|
||
|
|
public async action(args: Args) {
|
||
|
|
const targetNote = await app().loadItemOrFail(ModelType.Note, args.note);
|
||
|
|
const parent = await app().loadItem(ModelType.Folder, targetNote.parent_id);
|
||
|
|
|
||
|
|
const force = args.options.force;
|
||
|
|
const alreadyShared = !!targetNote.is_shared;
|
||
|
|
const ok = force || alreadyShared ? true : await this.prompt(
|
||
|
|
_('Publish note "%s" (in notebook "%s")?', targetNote.title, parent.title ?? '<root>'),
|
||
|
|
{ booleanAnswerDefault: 'n' },
|
||
|
|
);
|
||
|
|
if (!ok) return;
|
||
|
|
|
||
|
|
logger.info('Share note: ', targetNote.id);
|
||
|
|
const share = await ShareService.instance().shareNote(targetNote.id, false);
|
||
|
|
|
||
|
|
this.stdout(_('Synchronising...'));
|
||
|
|
await reg.waitForSyncFinishedThenSync();
|
||
|
|
|
||
|
|
const userId = ShareService.instance().userId;
|
||
|
|
const shareUrl = ShareService.instance().shareUrl(userId, share);
|
||
|
|
this.stdout(_('Published at URL: %s', shareUrl));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
module.exports = Command;
|