diff options
Diffstat (limited to 'pkg/gui')
| -rw-r--r-- | pkg/gui/gui-util.go | 18 | ||||
| -rw-r--r-- | pkg/gui/gui.go | 17 | ||||
| -rw-r--r-- | pkg/gui/keybindings.go | 8 | ||||
| -rw-r--r-- | pkg/gui/remotebranchview.go | 20 |
4 files changed, 49 insertions, 14 deletions
diff --git a/pkg/gui/gui-util.go b/pkg/gui/gui-util.go index a0780bd..f9bba41 100644 --- a/pkg/gui/gui-util.go +++ b/pkg/gui/gui-util.go @@ -80,15 +80,15 @@ func (gui *Gui) previousViewOfGroup(g *gocui.Gui, v *gocui.View, group []viewFea // siwtch the app mode // TODO: switching can be made with conventional iteration func (gui *Gui) switchMode(g *gocui.Gui, v *gocui.View) error { - switch mode := gui.State.Mode.ModeID; mode { - case FetchMode: - gui.State.Mode = pullMode - case PullMode: - gui.State.Mode = mergeMode - case MergeMode: - gui.State.Mode = fetchMode - default: - gui.State.Mode = fetchMode + for i, mode := range modes { + if mode == gui.State.Mode { + if i == len(modes)-1 { + gui.State.Mode = modes[0] + break + } + gui.State.Mode = modes[i+1] + break + } } gui.updateKeyBindingsView(g, mainViewFeature.Name) return nil diff --git a/pkg/gui/gui.go b/pkg/gui/gui.go index 5c32bc0..7fb3019 100644 --- a/pkg/gui/gui.go +++ b/pkg/gui/gui.go @@ -41,15 +41,15 @@ type mode struct { } // ModeID is the mode indicator for the gui -type ModeID int8 +type ModeID string const ( // FetchMode puts the gui in fetch state - FetchMode ModeID = 0 + FetchMode ModeID = "fetch" // PullMode puts the gui in pull state - PullMode ModeID = 1 + PullMode ModeID = "pull" // MergeMode puts the gui in merge state - MergeMode ModeID = 2 + MergeMode ModeID = "merge" ) var ( @@ -70,10 +70,11 @@ var ( mergeMode = mode{ModeID: MergeMode, DisplayString: "Merge", CommandString: "merge"} mainViews = []viewFeature{mainViewFeature, remoteViewFeature, remoteBranchViewFeature, branchViewFeature, commitViewFeature} + modes = []mode{fetchMode, pullMode, mergeMode} ) // NewGui creates a Gui opject and fill it's state related entites -func NewGui(directoies []string) (*Gui, error) { +func NewGui(mode string, directoies []string) (*Gui, error) { initialState := guiState{ Directories: directoies, Mode: fetchMode, @@ -82,6 +83,12 @@ func NewGui(directoies []string) (*Gui, error) { gui := &Gui{ State: initialState, } + for _, m := range modes { + if string(m.ModeID) == mode { + gui.State.Mode = m + break + } + } return gui, nil } diff --git a/pkg/gui/keybindings.go b/pkg/gui/keybindings.go index e808959..c6e1814 100644 --- a/pkg/gui/keybindings.go +++ b/pkg/gui/keybindings.go @@ -420,6 +420,14 @@ func (gui *Gui) generateKeybindings() error { Display: "k", Description: "Up", Vital: false, + }, { + View: remoteBranchViewFeature.Name, + Key: 's', + Modifier: gocui.ModNone, + Handler: gui.syncRemoteBranch, + Display: "s", + Description: "Synch with Remote", + Vital: true, }, // Commit View Controls { diff --git a/pkg/gui/remotebranchview.go b/pkg/gui/remotebranchview.go index eb65d55..ce44e2c 100644 --- a/pkg/gui/remotebranchview.go +++ b/pkg/gui/remotebranchview.go @@ -38,6 +38,26 @@ func (gui *Gui) updateRemoteBranches(g *gocui.Gui, entity *git.RepoEntity) error } // iteration handler for the remotebranchview +func (gui *Gui) syncRemoteBranch(g *gocui.Gui, v *gocui.View) error { + var err error + entity := gui.getSelectedRepository() + if err = git.Fetch(entity, git.FetchOptions{ + RemoteName: entity.Remote.Name, + Prune: true, + }); err != nil { + return err + } + // have no idea why this works.. + // some time need to fix, movement aint bad huh? + gui.nextRemote(g,v) + gui.previousRemote(g,v) + if err = gui.updateRemoteBranches(g, entity); err != nil { + return err + } + return nil +} + +// iteration handler for the remotebranchview func (gui *Gui) nextRemoteBranch(g *gocui.Gui, v *gocui.View) error { var err error entity := gui.getSelectedRepository() |
