|  |  | @@ -28,7 +28,7 @@ import static com.jdbernard.wdiwtlt.cli.CliErr.* | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | public class CommandLineInterface { |  |  |  | public class CommandLineInterface { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     public static final VERSION = "0.1.1" |  |  |  |     public static final VERSION = "0.1.3" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     public static final def DOC = """\ |  |  |  |     public static final def DOC = """\ | 
			
		
	
		
		
			
				
					
					|  |  |  | wdiwtlt v$VERSION |  |  |  | wdiwtlt v$VERSION | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -97,14 +97,14 @@ Configuration: | 
			
		
	
		
		
			
				
					
					|  |  |  |     private String titleStyle, normalStyle, statusStyle, promptStyle, |  |  |  |     private String titleStyle, normalStyle, statusStyle, promptStyle, | 
			
		
	
		
		
			
				
					
					|  |  |  |         artistStyle, albumStyle, fileStyle, errorStyle, playlistStyle, |  |  |  |         artistStyle, albumStyle, fileStyle, errorStyle, playlistStyle, | 
			
		
	
		
		
			
				
					
					|  |  |  |         cmdStyle, optStyle |  |  |  |         cmdStyle, optStyle | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     private String eraseToEnd = new ANSI().eraseLine(Erase.ToEnd).toString() | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     private String clearLine = new ANSI().eraseLine(Erase.All).toString() |  |  |  |     private String clearLine = new ANSI().eraseLine(Erase.All).toString() | 
			
		
	
		
		
			
				
					
					|  |  |  |     private String afterInput = |  |  |  |     private String afterInput = | 
			
		
	
		
		
			
				
					
					|  |  |  |         new ANSI().eraseLine(Erase.All).scrollUp().cursorUp().toString() |  |  |  |         new ANSI().eraseLine(Erase.All).scrollUp().cursorUp().toString() | 
			
		
	
		
		
			
				
					
					|  |  |  |     private String beforeLeader = |  |  |  |     private String beforeLeader = | 
			
		
	
		
		
			
				
					
					|  |  |  |         new ANSI().saveCursor().cursorPrevLine(3).toString() |  |  |  |         new ANSI().saveCursor().cursorPrevLine(3).toString() | 
			
		
	
		
		
			
				
					
					|  |  |  |     private String afterLeader = |  |  |  |     private String afterLeader = | 
			
		
	
		
		
			
				
					
					|  |  |  |         new ANSI().restoreCursor().eraseLine(Erase.ToEnd).toString() |  |  |  |         new ANSI().restoreCursor().toString() | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     private String eraseLeader = |  |  |  |     private String eraseLeader = | 
			
		
	
		
		
			
				
					
					|  |  |  |         new ANSI().eraseLine(Erase.All).cursorPrevLine().eraseLine(Erase.All) |  |  |  |         new ANSI().eraseLine(Erase.All).cursorPrevLine().eraseLine(Erase.All) | 
			
		
	
		
		
			
				
					
					|  |  |  |             .cursorPrevLine().eraseLine(Erase.All) |  |  |  |             .cursorPrevLine().eraseLine(Erase.All) | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -391,7 +391,8 @@ Configuration: | 
			
		
	
		
		
			
				
					
					|  |  |  |                         printLongMessage(errorStyle + errMsg + normalStyle) } |  |  |  |                         printLongMessage(errorStyle + errMsg + normalStyle) } | 
			
		
	
		
		
			
				
					
					|  |  |  |                     else { |  |  |  |                     else { | 
			
		
	
		
		
			
				
					
					|  |  |  |                         status.text = errorStyle + errMsg + normalStyle |  |  |  |                         status.text = errorStyle + errMsg + normalStyle | 
			
		
	
		
		
			
				
					
					|  |  |  |                         dismissMsgDate = new Date(new Date().time + msgTimeout) } } } |  |  |  |                         dismissMsgDate = new Date(new Date().time + msgTimeout) } } | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 outStream.print eraseToEnd } | 
			
		
	
		
		
			
				
					
					|  |  |  |             else { |  |  |  |             else { | 
			
		
	
		
		
			
				
					
					|  |  |  |                 drawLeader() |  |  |  |                 drawLeader() | 
			
		
	
		
		
			
				
					
					|  |  |  |                 if (curMediaFile && |  |  |  |                 if (curMediaFile && | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -405,8 +406,13 @@ Configuration: | 
			
		
	
		
		
			
				
					
					|  |  |  |                 Thread.sleep(250) } } } |  |  |  |                 Thread.sleep(250) } } } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     private def processInput(String line) { |  |  |  |     private def processInput(String line) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         line = line.trim() | 
			
		
	
		
		
			
				
					
					|  |  |  |         logger.debug("line: $line") |  |  |  |         logger.debug("line: $line") | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if (line.indexOf(' and ') > 0 || line.indexOf(';')> 0) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |           String[] cmds = line.split(/ and |;/) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |           return cmds.collect(this.&processInput) } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         String[] parts = line.split(' ', 2) |  |  |  |         String[] parts = line.split(' ', 2) | 
			
		
	
		
		
			
				
					
					|  |  |  |         String command = parts[0]?.toLowerCase() |  |  |  |         String command = parts[0]?.toLowerCase() | 
			
		
	
		
		
			
				
					
					|  |  |  |         String rest = parts.size() == 2 ? parts[1]?.trim() : null |  |  |  |         String rest = parts.size() == 2 ? parts[1]?.trim() : null | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -551,6 +557,7 @@ Configuration: | 
			
		
	
		
		
			
				
					
					|  |  |  |                     [(idKeyFor(selectionClass)): it.id]) }.findAll() |  |  |  |                     [(idKeyFor(selectionClass)): it.id]) }.findAll() | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         case ~/absent files/: |  |  |  |         case ~/absent files/: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             scanMediaLibrary() | 
			
		
	
		
		
			
				
					
					|  |  |  |             return library.getMediaFilesWhere(presentLocally: false) |  |  |  |             return library.getMediaFilesWhere(presentLocally: false) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         case ~/files tagged( as){0,1}((\s[^\s]+)+)/: |  |  |  |         case ~/files tagged( as){0,1}((\s[^\s]+)+)/: | 
			
		
	
	
		
		
			
				
					
					|  |  |   |