summaryrefslogtreecommitdiff
path: root/pkg/gui
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/gui')
-rw-r--r--pkg/gui/gui-util.go18
-rw-r--r--pkg/gui/gui.go17
-rw-r--r--pkg/gui/keybindings.go8
-rw-r--r--pkg/gui/remotebranchview.go20
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()