2017-07-10 22:03:46 +02:00
import { BaseCommand } from './base-command.js' ;
import { app } from './app.js' ;
import { _ } from 'lib/locale.js' ;
import { Tag } from 'lib/models/tag.js' ;
import { BaseModel } from 'lib/base-model.js' ;
class Command extends BaseCommand {
usage ( ) {
2017-08-04 18:02:43 +02:00
return 'tag <tag-command> [tag] [note]' ;
2017-07-10 22:03:46 +02:00
}
description ( ) {
2017-08-04 18:02:43 +02:00
return _ ( '<tag-command> can be "add", "remove" or "list" to assign or remove [tag] from [note], or to list the notes associated with [tag]. The command `tag list` can be used to list all the tags.' ) ;
2017-07-10 22:03:46 +02:00
}
async action ( args ) {
let tag = null ;
if ( args . tag ) tag = await app ( ) . loadItem ( BaseModel . TYPE _TAG , args . tag ) ;
2017-07-11 20:17:23 +02:00
let notes = [ ] ;
if ( args . note ) {
notes = await app ( ) . loadItems ( BaseModel . TYPE _NOTE , args . note ) ;
}
2017-07-10 22:03:46 +02:00
2017-08-04 18:02:43 +02:00
const command = args [ 'tag-command' ] ;
2017-07-10 22:03:46 +02:00
2017-08-04 18:02:43 +02:00
if ( command == 'remove' && ! tag ) throw new Error ( _ ( 'Cannot find "%s".' , args . tag ) ) ;
if ( command == 'add' ) {
2017-07-18 20:21:03 +02:00
if ( ! notes . length ) throw new Error ( _ ( 'Cannot find "%s".' , args . note ) ) ;
2017-07-10 22:03:46 +02:00
if ( ! tag ) tag = await Tag . save ( { title : args . tag } ) ;
2017-07-11 20:17:23 +02:00
for ( let i = 0 ; i < notes . length ; i ++ ) {
await Tag . addNote ( tag . id , notes [ i ] . id ) ;
}
2017-08-04 18:02:43 +02:00
} else if ( command == 'remove' ) {
2017-07-18 20:21:03 +02:00
if ( ! tag ) throw new Error ( _ ( 'Cannot find "%s".' , args . tag ) ) ;
if ( ! notes . length ) throw new Error ( _ ( 'Cannot find "%s".' , args . note ) ) ;
2017-07-11 20:17:23 +02:00
for ( let i = 0 ; i < notes . length ; i ++ ) {
await Tag . removeNote ( tag . id , notes [ i ] . id ) ;
}
2017-08-04 18:02:43 +02:00
} else if ( command == 'list' ) {
2017-07-10 22:03:46 +02:00
if ( tag ) {
let notes = await Tag . notes ( tag . id ) ;
2017-10-07 18:30:27 +02:00
notes . map ( ( note ) => { this . stdout ( note . title ) ; } ) ;
2017-07-10 22:03:46 +02:00
} else {
let tags = await Tag . all ( ) ;
2017-10-07 18:30:27 +02:00
tags . map ( ( tag ) => { this . stdout ( tag . title ) ; } ) ;
2017-07-10 22:03:46 +02:00
}
} else {
2017-08-04 18:02:43 +02:00
throw new Error ( _ ( 'Invalid command: "%s"' , command ) ) ;
2017-07-10 22:03:46 +02:00
}
}
}
module . exports = Command ;