diff options
| author | Ibrahim Serdar Acikgoz <serdaracikgoz86@gmail.com> | 2018-12-19 00:05:39 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-12-19 00:05:39 +0300 |
| commit | 68bcd82ca27198c31bfe06858e3ae85e48648dab (patch) | |
| tree | 3747cb46200821616a89b77a1fc142aaaff7606f /pkg/gui/mainview.go | |
| parent | Merge pull request #35 from isacikgoz/develop (diff) | |
| parent | minor code style imrovements and code reduction (diff) | |
| download | gitbatch-68bcd82ca27198c31bfe06858e3ae85e48648dab.tar.gz | |
Merge pull request #36 from isacikgoz/develop
Develop
Diffstat (limited to 'pkg/gui/mainview.go')
| -rw-r--r-- | pkg/gui/mainview.go | 104 |
1 files changed, 59 insertions, 45 deletions
diff --git a/pkg/gui/mainview.go b/pkg/gui/mainview.go index 389d66d..e4c0159 100644 --- a/pkg/gui/mainview.go +++ b/pkg/gui/mainview.go @@ -6,6 +6,7 @@ import ( "github.com/isacikgoz/gitbatch/pkg/git" "github.com/jroimartin/gocui" + log "github.com/sirupsen/logrus" ) // this is the initial function for filling the values for the main view. the @@ -16,9 +17,7 @@ func (gui *Gui) fillMain(g *gocui.Gui) error { if err != nil { return err } - for _, r := range gui.State.Repositories { - fmt.Fprintln(v, gui.displayString(r)) - } + // if there is still a loading screen we better get rid of it err = g.DeleteView(loadingViewFeature.Name) if err != nil { return err @@ -26,26 +25,39 @@ func (gui *Gui) fillMain(g *gocui.Gui) error { if _, err = gui.setCurrentViewOnTop(g, mainViewFeature.Name); err != nil { return err } + // Sort by name is default behavior as expected, so it handles initial + // rendering of the main view if err = gui.sortByName(g, v); err != nil { return err } - entity := gui.getSelectedRepository() - gui.refreshViews(g, entity) return nil }) return nil } // refresh the main view and re-render the repository representations -func (gui *Gui) refreshMain(g *gocui.Gui) error { - mainView, err := g.View(mainViewFeature.Name) +func (gui *Gui) renderMain() error { + gui.mutex.Lock() + defer gui.mutex.Unlock() + + mainView, err := gui.g.View(mainViewFeature.Name) if err != nil { return err } mainView.Clear() for _, r := range gui.State.Repositories { - fmt.Fprintln(mainView, gui.displayString(r)) + fmt.Fprintln(mainView, gui.repositoryLabel(r)) } + // while refreshing, refresh sideViews for selected entity, something may + // be changed? + return gui.renderSideViews(gui.getSelectedRepository()) +} + +// listens the event -> "repository.updated" +func (gui *Gui) repositoryUpdated(event *git.RepositoryEvent) error { + gui.g.Update(func(g *gocui.Gui) error { + return gui.renderMain() + }) return nil } @@ -62,18 +74,12 @@ func (gui *Gui) cursorDown(g *gocui.Gui, v *gocui.View) error { return nil } if err := v.SetCursor(cx, cy+1); err != nil { - if err := v.SetOrigin(ox, oy+1); err != nil { return err } } - entity := gui.getSelectedRepository() - if err := gui.refreshMain(g); err != nil { - return err - } - gui.refreshViews(g, entity) } - return nil + return gui.renderMain() } // moves the cursor upwards for the main view @@ -86,13 +92,8 @@ func (gui *Gui) cursorUp(g *gocui.Gui, v *gocui.View) error { return err } } - entity := gui.getSelectedRepository() - if err := gui.refreshMain(g); err != nil { - return err - } - gui.refreshViews(g, entity) } - return nil + return gui.renderMain() } // returns the entity at cursors position by taking its position in the gui's @@ -103,9 +104,6 @@ func (gui *Gui) getSelectedRepository() *git.RepoEntity { v, _ := gui.g.View(mainViewFeature.Name) _, oy := v.Origin() _, cy := v.Cursor() - // if _, err := v.Line(cy); err != nil { - // return r, err - // } return gui.State.Repositories[cy+oy] } @@ -129,7 +127,7 @@ func (gui *Gui) addToQueue(entity *git.RepoEntity) error { if err != nil { return err } - entity.State = git.Queued + entity.SetState(git.Queued) return nil } @@ -139,7 +137,36 @@ func (gui *Gui) removeFromQueue(entity *git.RepoEntity) error { if err != nil { return err } - entity.State = git.Available + entity.SetState(git.Available) + return nil +} + +// this function starts the queue and updates the gui with the result of an +// operation +func (gui *Gui) startQueue(g *gocui.Gui, v *gocui.View) error { + go func(gui_go *Gui, g_go *gocui.Gui) { + for { + job, finished, err := gui_go.State.Queue.StartNext() + + if err != nil { + if err == git.ErrAuthenticationRequired { + // pause the job, so it will be indicated to being blocking + job.Entity.SetState(git.Paused) + err := gui_go.openAuthenticationView(g, gui_go.State.Queue, job, v.Name()) + if err != nil { + log.Warn(err.Error()) + return + } + } + return + // with not returning here, we simply ignore and continue + } + // if queue is finished simply return from this goroutine + if finished { + return + } + } + }(gui, g) return nil } @@ -148,18 +175,15 @@ func (gui *Gui) removeFromQueue(entity *git.RepoEntity) error { func (gui *Gui) markRepository(g *gocui.Gui, v *gocui.View) error { r := gui.getSelectedRepository() // maybe, failed entities may be added to queue again - if r.State == git.Available || r.State == git.Success || r.State == git.Paused { + if r.State().Ready { if err := gui.addToQueue(r); err != nil { return err } - } else if r.State == git.Queued { + } else if r.State() == git.Queued { if err := gui.removeFromQueue(r); err != nil { return err } - } else { - return nil } - gui.refreshMain(g) return nil } @@ -167,7 +191,7 @@ func (gui *Gui) markRepository(g *gocui.Gui, v *gocui.View) error { // current state into account before adding it func (gui *Gui) markAllRepositories(g *gocui.Gui, v *gocui.View) error { for _, r := range gui.State.Repositories { - if r.State == git.Available || r.State == git.Success { + if r.State().Ready { if err := gui.addToQueue(r); err != nil { return err } @@ -175,7 +199,6 @@ func (gui *Gui) markAllRepositories(g *gocui.Gui, v *gocui.View) error { continue } } - gui.refreshMain(g) return nil } @@ -183,7 +206,7 @@ func (gui *Gui) markAllRepositories(g *gocui.Gui, v *gocui.View) error { // current state into account before removing it func (gui *Gui) unmarkAllRepositories(g *gocui.Gui, v *gocui.View) error { for _, r := range gui.State.Repositories { - if r.State == git.Queued { + if r.State() == git.Queued { if err := gui.removeFromQueue(r); err != nil { return err } @@ -191,14 +214,13 @@ func (gui *Gui) unmarkAllRepositories(g *gocui.Gui, v *gocui.View) error { continue } } - gui.refreshMain(g) return nil } // sortByName sorts the repositories by A to Z order func (gui *Gui) sortByName(g *gocui.Gui, v *gocui.View) error { sort.Sort(git.Alphabetical(gui.State.Repositories)) - gui.refreshAfterSort(g) + gui.renderMain() return nil } @@ -206,14 +228,6 @@ func (gui *Gui) sortByName(g *gocui.Gui, v *gocui.View) error { // the top element will be the last modified func (gui *Gui) sortByMod(g *gocui.Gui, v *gocui.View) error { sort.Sort(git.LastModified(gui.State.Repositories)) - gui.refreshAfterSort(g) - return nil -} - -// utility function that refreshes main and side views after that -func (gui *Gui) refreshAfterSort(g *gocui.Gui) error { - gui.refreshMain(g) - entity := gui.getSelectedRepository() - gui.refreshViews(g, entity) + gui.renderMain() return nil } |
