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 ( ) {
return 'tag <command> [tag] [note]' ;
}
description ( ) {
return '<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.' ;
}
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
if ( args . command == 'remove' && ! tag ) throw new Error ( _ ( 'Tag does not exist: "%s"' , args . tag ) ) ;
if ( args . command == 'add' ) {
2017-07-11 20:17:23 +02:00
if ( ! notes . length ) throw new Error ( _ ( 'Note does not exist: "%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-07-10 22:03:46 +02:00
} else if ( args . command == 'remove' ) {
if ( ! tag ) throw new Error ( _ ( 'Tag does not exist: "%s"' , args . tag ) ) ;
2017-07-11 20:17:23 +02:00
if ( ! notes . length ) throw new Error ( _ ( 'Note does not exist: "%s"' , args . note ) ) ;
for ( let i = 0 ; i < notes . length ; i ++ ) {
await Tag . removeNote ( tag . id , notes [ i ] . id ) ;
}
2017-07-10 22:03:46 +02:00
} else if ( args . command == 'list' ) {
if ( tag ) {
let notes = await Tag . notes ( tag . id ) ;
notes . map ( ( note ) => { this . log ( note . title ) ; } ) ;
} else {
let tags = await Tag . all ( ) ;
tags . map ( ( tag ) => { this . log ( tag . title ) ; } ) ;
}
} else {
throw new Error ( _ ( 'Invalid command: "%s"' , args . command ) ) ;
}
}
}
module . exports = Command ;