Introduce first basic functions in shell
This commit is contained in:
		
							parent
							
								
									b2d1afadfc
								
							
						
					
					
						commit
						47f133f418
					
				| @ -37,10 +37,9 @@ func (queue MailQ) WriteMachineReadable(writer io.Writer) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (queue MailQ) WriteHumanReadable(writer io.Writer) { | func (queue MailQ) WriteHumanReadable(writer io.Writer) { | ||||||
| 	if len(queue.Entries) == 0 { | 	queue.WriteSummary(writer) | ||||||
| 		fmt.Fprintf(writer, "Mail queue is empty\n") | 	if len(queue.Entries) != 0 { | ||||||
| 	} else { | 		fmt.Fprintf(writer, "\n") | ||||||
| 		fmt.Fprintf(writer, "%d entries total (%d active, %d deferred, %d on hold)\n\n", len(queue.Entries), queue.NumActive, queue.NumDeferred, queue.NumHold) |  | ||||||
| 		tabWriter := tabwriter.NewWriter(writer, 2, 2, 1, ' ', tabwriter.TabIndent) | 		tabWriter := tabwriter.NewWriter(writer, 2, 2, 1, ' ', tabwriter.TabIndent) | ||||||
| 		fmt.Fprintf(tabWriter, "| %s\t| %s\t| %s\t| %s\t| %s\t| %s\t| %s\t| %s\t| \n", "Date", "Id", "Status", "Size", "Sender", "#", "First Recipient", "Reason") | 		fmt.Fprintf(tabWriter, "| %s\t| %s\t| %s\t| %s\t| %s\t| %s\t| %s\t| %s\t| \n", "Date", "Id", "Status", "Size", "Sender", "#", "First Recipient", "Reason") | ||||||
| 		for _, entry := range queue.Entries { | 		for _, entry := range queue.Entries { | ||||||
| @ -54,6 +53,14 @@ func (queue MailQ) WriteHumanReadable(writer io.Writer) { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (queue MailQ) WriteSummary(writer io.Writer) { | ||||||
|  | 	if len(queue.Entries) == 0 { | ||||||
|  | 		fmt.Fprintf(writer, "Mail queue is empty\n") | ||||||
|  | 	} else { | ||||||
|  | 		fmt.Fprintf(writer, "%d entries total (%d active, %d deferred, %d on hold)\n", len(queue.Entries), queue.NumActive, queue.NumDeferred, queue.NumHold) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (queue MailQ) WriteJSON(writer io.Writer) { | func (queue MailQ) WriteJSON(writer io.Writer) { | ||||||
| 	bytes, err := json.Marshal(queue) | 	bytes, err := json.Marshal(queue) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | |||||||
							
								
								
									
										4
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								main.go
									
									
									
									
									
								
							| @ -54,6 +54,10 @@ func showQueue(sortConfig mailq.QEntrySortConfig) { | |||||||
| 		os.Exit(1) | 		os.Exit(1) | ||||||
| 	} | 	} | ||||||
| 	queue.Sort(sortConfig) | 	queue.Sort(sortConfig) | ||||||
|  | 	displayQueue(queue) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func displayQueue(queue mailq.MailQ) { | ||||||
| 	if settings["usePager"] == "true" { | 	if settings["usePager"] == "true" { | ||||||
| 		pagerReader, pagerWriter := io.Pipe() | 		pagerReader, pagerWriter := io.Pipe() | ||||||
| 		pagerDone := make(chan bool) | 		pagerDone := make(chan bool) | ||||||
|  | |||||||
							
								
								
									
										39
									
								
								shell.go
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								shell.go
									
									
									
									
									
								
							| @ -14,12 +14,37 @@ import ( | |||||||
| type shellState struct { | type shellState struct { | ||||||
| 	SortConfig mailq.QEntrySortConfig | 	SortConfig mailq.QEntrySortConfig | ||||||
| 	QuitShell  bool | 	QuitShell  bool | ||||||
|  | 	Queue      mailq.MailQ | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func initialShellState() shellState { | func initialShellState() shellState { | ||||||
| 	var state shellState = shellState{} | 	var state shellState = shellState{} | ||||||
| 	state.QuitShell = false | 	state.QuitShell = false | ||||||
| 	state.SortConfig = defaultSortConfig() | 	state.SortConfig = defaultSortConfig() | ||||||
|  | 	state = refreshQueue(state) | ||||||
|  | 	return state | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func refreshQueue(state shellState) shellState { | ||||||
|  | 	queue, err := fetchQueue() | ||||||
|  | 	if err != nil { | ||||||
|  | 		fmt.Printf("Error fetching queue: '%s'\n", err.Error()) | ||||||
|  | 	} | ||||||
|  | 	state.Queue = queue | ||||||
|  | 	return state | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func updateSortConfig(fields []string, state shellState) shellState { | ||||||
|  | 	sortConfig := mailq.NewSortConfig() | ||||||
|  | 	var err error | ||||||
|  | 	for _, field := range fields[1:] { | ||||||
|  | 		split := strings.Split(field, ":") | ||||||
|  | 		sortConfig, err = sortConfig.By(split[0], split[1]) | ||||||
|  | 		if err != nil { | ||||||
|  | 			fmt.Printf("Error applying sort config: '%s'\n", err.Error()) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	state.SortConfig = sortConfig | ||||||
| 	return state | 	return state | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -30,6 +55,7 @@ func interactiveShell(reader io.Reader, writer io.Writer) { | |||||||
| 	for { | 	for { | ||||||
| 		fmt.Fprint(writer, "> ") | 		fmt.Fprint(writer, "> ") | ||||||
| 		if !scanner.Scan() { | 		if !scanner.Scan() { | ||||||
|  | 			fmt.Println() | ||||||
| 			break | 			break | ||||||
| 		} | 		} | ||||||
| 		text := strings.Trim(scanner.Text(), " ") | 		text := strings.Trim(scanner.Text(), " ") | ||||||
| @ -38,15 +64,22 @@ func interactiveShell(reader io.Reader, writer io.Writer) { | |||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
| 		cmd := textFields[0] | 		cmd := textFields[0] | ||||||
| 		fmt.Fprintf(writer, "DEBUG - Read input: %q\n", textFields) |  | ||||||
| 
 |  | ||||||
| 		switch cmd { | 		switch cmd { | ||||||
| 		case "help", "?": | 		case "help", "?": | ||||||
| 			printHelp(writer) | 			printHelp(writer) | ||||||
| 		case "exit", "quit": | 		case "exit", "quit": | ||||||
| 			state.QuitShell = true | 			state.QuitShell = true | ||||||
| 		case "sort": | 		case "sort": | ||||||
| 			fmt.Println("TODO: Implement this!") | 			state = updateSortConfig(textFields, state) | ||||||
|  | 		case "show": | ||||||
|  | 			state.Queue.Sort(state.SortConfig) | ||||||
|  | 			displayQueue(state.Queue) | ||||||
|  | 		case "summary": | ||||||
|  | 			state.Queue.WriteSummary(writer) | ||||||
|  | 		case "reload": | ||||||
|  | 			state = refreshQueue(state) | ||||||
|  | 			fmt.Fprintln(writer, "Queue data reloaded") | ||||||
|  | 			state.Queue.WriteSummary(writer) | ||||||
| 		default: | 		default: | ||||||
| 			fmt.Fprintf(writer, "Unknown command '%s'\n", cmd) | 			fmt.Fprintf(writer, "Unknown command '%s'\n", cmd) | ||||||
| 			fmt.Fprintln(writer, "Use 'help' to display help command") | 			fmt.Fprintln(writer, "Use 'help' to display help command") | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user