You've already forked joplin
							
							
				mirror of
				https://github.com/laurent22/joplin.git
				synced 2025-10-31 00:07:48 +02:00 
			
		
		
		
	Minor changes on CLI
This commit is contained in:
		| @@ -329,7 +329,7 @@ class Application { | ||||
| 		if (!this.currentFolder_) this.currentFolder_ = await Folder.defaultFolder(); | ||||
| 		Setting.setValue('activeFolderId', this.currentFolder_ ? this.currentFolder_.id : ''); | ||||
|  | ||||
| 		if (this.currentFolder_) await this.vorpal().exec('use ' + this.currentFolder_.title); | ||||
| 		if (this.currentFolder_) await this.vorpal().exec('use ' + this.escapeShellArg(this.currentFolder_.title)); | ||||
|  | ||||
| 		// If we still have arguments, pass it to Vorpal and exit | ||||
| 		if (argv.length) { | ||||
|   | ||||
| @@ -20,21 +20,20 @@ function autocompleteFolders() { | ||||
| 	}); | ||||
| } | ||||
|  | ||||
| function autocompleteItems() { | ||||
| 	let promise = null; | ||||
| async function autocompleteItems() { | ||||
| 	let items = []; | ||||
| 	if (!app().currentFolder()) { | ||||
| 		promise = Folder.all(); | ||||
| 		items = await Folder.all(); | ||||
| 	} else { | ||||
| 		promise = Note.previews(app().currentFolder().id); | ||||
| 		items = await Note.previews(app().currentFolder().id); | ||||
| 	} | ||||
|  | ||||
| 	return promise.then((items) => { | ||||
| 		let output = []; | ||||
| 		for (let i = 0; i < items.length; i++) { | ||||
| 			output.push(quotePromptArg(items[i].title)); | ||||
| 		} | ||||
| 		return output;			 | ||||
| 	}); | ||||
| 	let output = []; | ||||
| 	for (let i = 0; i < items.length; i++) { | ||||
| 		output.push(quotePromptArg(items[i].title)); | ||||
| 	} | ||||
| 	 | ||||
| 	return output; | ||||
| } | ||||
|  | ||||
| export { autocompleteFolders, autocompleteItems }; | ||||
| @@ -1,6 +1,7 @@ | ||||
| import { BaseCommand } from './base-command.js'; | ||||
| import { app } from './app.js'; | ||||
| import { _ } from 'lib/locale.js'; | ||||
| import { BaseModel } from 'lib/base-model.js'; | ||||
| import { Folder } from 'lib/models/folder.js'; | ||||
| import { Note } from 'lib/models/note.js'; | ||||
| import { autocompleteFolders } from './autocomplete.js'; | ||||
| @@ -25,7 +26,7 @@ class Command extends BaseCommand { | ||||
| 			['-r, --reverse', 'Reverses the sorting order.'], | ||||
| 			['-t, --type <type>', 'Displays only the items of the specific type(s). Can be `n` for notes, `t` for todos, or `nt` for notes and todos (eg. `-tt` would display only the todos, while `-ttd` would display notes and todos.'], | ||||
| 			['-f, --format <format>', 'Either "text" or "json"'], | ||||
| 			['-l, --long', 'Use long list format. Format is NOTE_COUNT (for notebook), DATE, TODO_CHECKED (for todos), TITLE'], | ||||
| 			['-l, --long', 'Use long list format. Format is ID, NOTE_COUNT (for notebook), DATE, TODO_CHECKED (for todos), TITLE'], | ||||
| 		]; | ||||
| 	} | ||||
|  | ||||
| @@ -80,11 +81,15 @@ class Command extends BaseCommand { | ||||
|  | ||||
| 			let seenTitles = []; | ||||
| 			let rows = []; | ||||
| 			let shortIdShown = false; | ||||
| 			for (let i = 0; i < items.length; i++) { | ||||
| 				let item = items[i]; | ||||
| 				let row = []; | ||||
|  | ||||
| 				if (options.long) { | ||||
| 					row.push(BaseModel.shortId(item.id)); | ||||
| 					shortIdShown = true; | ||||
|  | ||||
| 					if (modelType == Folder.modelType()) { | ||||
| 						row.push(await Folder.noteCount(item.id)); | ||||
| 					} | ||||
| @@ -93,8 +98,8 @@ class Command extends BaseCommand { | ||||
| 				} | ||||
|  | ||||
| 				let title = item.title + suffix; | ||||
| 				if (seenTitles.indexOf(item.title) >= 0 || !item.title) { | ||||
| 					title += ' (' + item.id.substr(0,4) + ')'; | ||||
| 				if (!shortIdShown && (seenTitles.indexOf(item.title) >= 0 || !item.title)) { | ||||
| 					title += ' (' + BaseModel.shortId(item.id) + ')'; | ||||
| 				} else { | ||||
| 					seenTitles.push(item.title); | ||||
| 				} | ||||
|   | ||||
| @@ -13,10 +13,6 @@ class Command extends BaseCommand { | ||||
| 		return 'Creates a new note.'; | ||||
| 	} | ||||
|  | ||||
| 	aliases() { | ||||
| 		return ['touch']; | ||||
| 	} | ||||
|  | ||||
| 	async action(args) { | ||||
| 		if (!app().currentFolder()) throw new Error(_('Notes can only be created within a notebook.')); | ||||
|  | ||||
|   | ||||
| @@ -40,6 +40,7 @@ class Command extends BaseCommand { | ||||
| 			const ok = force ? true : await vorpalUtils.cmdPromptConfirm(this, _('Delete notebook "%s"?', folder.title)); | ||||
| 			if (!ok) return; | ||||
| 			await Folder.delete(folder.id); | ||||
| 			await app().refreshCurrentFolder(); | ||||
| 		} else { | ||||
| 			const notes = await app().loadItems(BaseModel.TYPE_NOTE, pattern); | ||||
| 			if (!notes.length) throw new Error(_('No note matchin pattern "%s"', pattern)); | ||||
|   | ||||
| @@ -7,6 +7,11 @@ import { vorpalUtils } from './vorpal-utils.js'; | ||||
|  | ||||
| class Command extends BaseCommand { | ||||
|  | ||||
| 	constructor() { | ||||
| 		super(); | ||||
| 		this.syncTarget_ = null; | ||||
| 	} | ||||
|  | ||||
| 	usage() { | ||||
| 		return 'sync'; | ||||
| 	} | ||||
| @@ -17,12 +22,16 @@ class Command extends BaseCommand { | ||||
|  | ||||
| 	options() { | ||||
| 		return [ | ||||
| 			['--target <target>', 'Sync to provided target (defaults to sync.target config value)'], | ||||
| 			['--random-failures', 'For debugging purposes. Do not use.'], | ||||
| 		]; | ||||
| 	} | ||||
|  | ||||
| 	async action(args) { | ||||
| 		let sync = await app().synchronizer(Setting.value('sync.target')); | ||||
| 		this.syncTarget_ = Setting.value('sync.target'); | ||||
| 		if (args.options.target) this.syncTarget_ = args.options.target; | ||||
|  | ||||
| 		let sync = await app().synchronizer(this.syncTarget_); | ||||
|  | ||||
| 		let options = { | ||||
| 			onProgress: (report) => { | ||||
| @@ -36,7 +45,7 @@ class Command extends BaseCommand { | ||||
| 			randomFailures: args.options['random-failures'] === true, | ||||
| 		}; | ||||
|  | ||||
| 		this.log(_('Synchronization target: %s', Setting.value('sync.target'))); | ||||
| 		this.log(_('Synchronization target: %s', this.syncTarget_)); | ||||
|  | ||||
| 		if (!sync) throw new Error(_('Cannot initialize synchronizer.')); | ||||
|  | ||||
| @@ -51,10 +60,14 @@ class Command extends BaseCommand { | ||||
| 	} | ||||
|  | ||||
| 	async cancel() { | ||||
| 		const target = this.syncTarget_ ? this.syncTarget_ : Setting.value('sync.target'); | ||||
|  | ||||
| 		vorpalUtils.redrawDone(); | ||||
| 		this.log(_('Cancelling...')); | ||||
| 		let sync = await app().synchronizer(Setting.value('sync.target')); | ||||
| 		let sync = await app().synchronizer(target); | ||||
| 		sync.cancel(); | ||||
|  | ||||
| 		this.syncTarget_ = null; | ||||
| 	} | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -8,4 +8,5 @@ cp "$CLIENT_DIR/package.json" "$CLIENT_DIR/build" | ||||
|  | ||||
| # Always keep this as the last line so that the exit | ||||
| # code of build.sh is the same as the build command: | ||||
| npm run build | ||||
| #npm run build | ||||
| yarn run build | ||||
							
								
								
									
										2139
									
								
								CliClient/yarn.lock
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2139
									
								
								CliClient/yarn.lock
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -102,6 +102,10 @@ class BaseModel { | ||||
| 		return this.loadByField('id', id); | ||||
| 	} | ||||
|  | ||||
| 	static shortId(id) { | ||||
| 		return id.substr(0, 4); | ||||
| 	} | ||||
|  | ||||
| 	static loadByPartialId(partialId) { | ||||
| 		return this.modelSelectOne('SELECT * FROM `' + this.tableName() + '` WHERE `id` LIKE ?', [partialId + '%']); | ||||
| 	} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user