basic importing works
This commit is contained in:
		@@ -5,6 +5,18 @@ import (
 | 
			
		||||
	"github.com/gdamore/tcell"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// error message
 | 
			
		||||
type EventError struct {
 | 
			
		||||
	tcell.EventTime
 | 
			
		||||
	err error
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewEventError(err error) *EventError {
 | 
			
		||||
	e := &EventError{err: err}
 | 
			
		||||
	e.SetEventNow()
 | 
			
		||||
	return e
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// save change to book
 | 
			
		||||
type EventBookUpdate struct {
 | 
			
		||||
	tcell.EventTime
 | 
			
		||||
@@ -66,6 +78,18 @@ func NewEventOpenImport() *EventOpenImport {
 | 
			
		||||
	return e
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// attempt to import given filename.csv
 | 
			
		||||
type EventAttemptImport struct {
 | 
			
		||||
	tcell.EventTime
 | 
			
		||||
	filename string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewEventAttemptImport(f string) *EventAttemptImport {
 | 
			
		||||
	e := &EventAttemptImport{filename: f}
 | 
			
		||||
	e.SetEventNow()
 | 
			
		||||
	return e
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// close import window
 | 
			
		||||
type EventCloseImport struct {
 | 
			
		||||
	tcell.EventTime
 | 
			
		||||
 
 | 
			
		||||
@@ -11,6 +11,7 @@ import (
 | 
			
		||||
	"git.yetaga.in/alazyreader/library/book"
 | 
			
		||||
	"git.yetaga.in/alazyreader/library/config"
 | 
			
		||||
	"git.yetaga.in/alazyreader/library/database"
 | 
			
		||||
	"git.yetaga.in/alazyreader/library/importer"
 | 
			
		||||
	"git.yetaga.in/alazyreader/library/ui"
 | 
			
		||||
	"github.com/gdamore/tcell"
 | 
			
		||||
	"github.com/kelseyhightower/envconfig"
 | 
			
		||||
@@ -119,9 +120,7 @@ func main() {
 | 
			
		||||
		ui.StyleActive,
 | 
			
		||||
		false,
 | 
			
		||||
	)
 | 
			
		||||
	book := ui.NewBookDetails(&book.Book{
 | 
			
		||||
		Title: "test title",
 | 
			
		||||
	})
 | 
			
		||||
	activeBookDetails := ui.NewBookDetails(&book.Book{})
 | 
			
		||||
 | 
			
		||||
	// book display (right column)
 | 
			
		||||
	activeBook := ui.NewBox(
 | 
			
		||||
@@ -129,7 +128,7 @@ func main() {
 | 
			
		||||
		[]string{"˄˅ select", "⏎ edit", "(esc) close"},
 | 
			
		||||
		ui.Contents{{
 | 
			
		||||
			Offsets:   ui.Offsets{Top: 1, Left: 2, Bottom: 0, Right: 0},
 | 
			
		||||
			Container: book,
 | 
			
		||||
			Container: activeBookDetails,
 | 
			
		||||
		}},
 | 
			
		||||
		ui.StyleInactive,
 | 
			
		||||
		false,
 | 
			
		||||
@@ -160,6 +159,19 @@ func main() {
 | 
			
		||||
	)
 | 
			
		||||
	popup.SetVisible(false)
 | 
			
		||||
 | 
			
		||||
	// error pop-up
 | 
			
		||||
	errorMessage := ui.NewEditableTextLine("")
 | 
			
		||||
	errorPopup := ui.NewBox(
 | 
			
		||||
		"error",
 | 
			
		||||
		[]string{"⏎ close"},
 | 
			
		||||
		ui.Contents{
 | 
			
		||||
			{Container: errorMessage, Offsets: ui.Offsets{Top: 1, Left: 1}},
 | 
			
		||||
		},
 | 
			
		||||
		ui.StyleActive.Bold(true).Foreground(tcell.ColorRed),
 | 
			
		||||
		false,
 | 
			
		||||
	)
 | 
			
		||||
	errorPopup.SetVisible(false)
 | 
			
		||||
 | 
			
		||||
	// init
 | 
			
		||||
	screen.Clear()
 | 
			
		||||
	w, h := screen.Size()
 | 
			
		||||
@@ -215,6 +227,8 @@ func main() {
 | 
			
		||||
 | 
			
		||||
				} else if v.Key() == tcell.KeyLeft {
 | 
			
		||||
					fileSelector.MoveCursor(-1)
 | 
			
		||||
				} else if v.Key() == tcell.KeyEnter {
 | 
			
		||||
					screen.PostEvent(NewEventAttemptImport(fileSelector.Text()))
 | 
			
		||||
				} else if v.Rune() != 0 {
 | 
			
		||||
					fileSelector.InsertAtCursor(v.Rune())
 | 
			
		||||
				}
 | 
			
		||||
@@ -233,16 +247,45 @@ func main() {
 | 
			
		||||
			activeBook.SetStyle(ui.StyleInactive)
 | 
			
		||||
			menu.SetStyle(ui.StyleActive)
 | 
			
		||||
		case *EventLoadBook:
 | 
			
		||||
			book.SetBook(GetBookByID(v.ID, books))
 | 
			
		||||
			activeBookDetails.SetBook(GetBookByID(v.ID, books))
 | 
			
		||||
		case *EventOpenImport:
 | 
			
		||||
			state.Set("ui_state", IN_IMPORT)
 | 
			
		||||
			menu.SetStyle(ui.StyleInactive)
 | 
			
		||||
			popup.SetVisible(true)
 | 
			
		||||
			popup.SetSize(6, 3, 5, 80)
 | 
			
		||||
		case *EventAttemptImport:
 | 
			
		||||
			// this will block other events, but it shouldn't take too long...
 | 
			
		||||
			f, err := os.Open(v.filename)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				screen.PostEvent(NewEventError(err))
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
			books, err := importer.CSVToBooks(f)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				screen.PostEvent(NewEventError(err))
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
			for b := range books {
 | 
			
		||||
				err = lib.AddBook(context.Background(), &books[b])
 | 
			
		||||
				if err != nil {
 | 
			
		||||
					screen.PostEvent(NewEventError(err))
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			screen.PostEvent(NewEventCloseImport())
 | 
			
		||||
			allbooks, err := lib.GetAllBooks(context.Background())
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				screen.PostEvent(NewEventError(err))
 | 
			
		||||
			}
 | 
			
		||||
			state.Set("library", allbooks)
 | 
			
		||||
			state.Set("ui_state", IN_MENU)
 | 
			
		||||
		case *EventCloseImport:
 | 
			
		||||
			state.Set("ui_state", IN_MENU)
 | 
			
		||||
			screen.HideCursor()
 | 
			
		||||
			menu.SetStyle(ui.StyleActive)
 | 
			
		||||
			popup.SetVisible(false)
 | 
			
		||||
		case *EventError:
 | 
			
		||||
			errorMessage.SetText(v.err.Error())
 | 
			
		||||
			errorPopup.SetVisible(true)
 | 
			
		||||
		case *EventQuit:
 | 
			
		||||
			screen.Fini()
 | 
			
		||||
			fmt.Printf("Thank you for playing Wing Commander!\n\n")
 | 
			
		||||
@@ -253,8 +296,10 @@ func main() {
 | 
			
		||||
		default:
 | 
			
		||||
		}
 | 
			
		||||
		// repaint
 | 
			
		||||
		l.SetMembers(Titles(state.Get("library").([]book.Book)))
 | 
			
		||||
		container.Draw(screen)
 | 
			
		||||
		popup.Draw(screen)
 | 
			
		||||
		errorPopup.Draw(screen)
 | 
			
		||||
		screen.Show()
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user