summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIbrahim Serdar Acikgoz <serdaracikgoz86@gmail.com>2018-12-05 01:47:24 +0300
committerIbrahim Serdar Acikgoz <serdaracikgoz86@gmail.com>2018-12-05 01:47:24 +0300
commit9ccbe66ac26b90e636aa97623a48aca4c27d7fb3 (patch)
tree46a28bb6910648b9d8696e481e17868a3dda0cb7
parentadded sorting (diff)
downloadgitbatch-9ccbe66ac26b90e636aa97623a48aca4c27d7fb3.tar.gz
select all feature added
-rw-r--r--pkg/gui/keybindings.go16
-rw-r--r--pkg/gui/mainview.go90
2 files changed, 85 insertions, 21 deletions
diff --git a/pkg/gui/keybindings.go b/pkg/gui/keybindings.go
index 3a96221..5905f2f 100644
--- a/pkg/gui/keybindings.go
+++ b/pkg/gui/keybindings.go
@@ -151,6 +151,22 @@ func (gui *Gui) generateKeybindings() error {
Vital: true,
}, {
View: mainViewFeature.Name,
+ Key: gocui.KeyCtrlSpace,
+ Modifier: gocui.ModNone,
+ Handler: gui.markAllRepositories,
+ Display: "ctrl + space",
+ Description: "Add all to queue",
+ Vital: false,
+ }, {
+ View: mainViewFeature.Name,
+ Key: gocui.KeyBackspace2,
+ Modifier: gocui.ModNone,
+ Handler: gui.unmarkAllRepositories,
+ Display: "backspace",
+ Description: "Remove all from queue",
+ Vital: false,
+ }, {
+ View: mainViewFeature.Name,
Key: 'n',
Modifier: gocui.ModNone,
Handler: gui.sortByName,
diff --git a/pkg/gui/mainview.go b/pkg/gui/mainview.go
index 6911c69..36f5825 100644
--- a/pkg/gui/mainview.go
+++ b/pkg/gui/mainview.go
@@ -93,36 +93,52 @@ func (gui *Gui) getSelectedRepository() *git.RepoEntity {
return gui.State.Repositories[cy+oy]
}
+// adds given entity to job queue
+func (gui *Gui) addToQueue(entity *git.RepoEntity) error {
+ var jt queue.JobType
+ switch mode := gui.State.Mode.ModeID; mode {
+ case FetchMode:
+ jt = queue.Fetch
+ case PullMode:
+ jt = queue.Pull
+ case MergeMode:
+ jt = queue.Merge
+ default:
+ return nil
+ }
+ err := gui.State.Queue.AddJob(&queue.Job{
+ JobType: jt,
+ Entity: entity,
+ })
+ if err != nil {
+ return err
+ }
+ entity.State = git.Queued
+ return nil
+}
+
+// removes given entity from job queue
+func (gui *Gui) removeFromQueue(entity *git.RepoEntity) error {
+ err := gui.State.Queue.RemoveFromQueue(entity)
+ if err != nil {
+ return err
+ }
+ entity.State = git.Available
+ return nil
+}
+
// marking repository is simply adding the repostirory into the queue. the
// function does take its current state into account before adding it
func (gui *Gui) markRepository(g *gocui.Gui, v *gocui.View) error {
r := gui.getSelectedRepository()
if r.State == git.Available || r.State == git.Success {
- var jt queue.JobType
- switch mode := gui.State.Mode.ModeID; mode {
- case FetchMode:
- jt = queue.Fetch
- case PullMode:
- jt = queue.Pull
- case MergeMode:
- jt = queue.Merge
- default:
- return nil
- }
- err := gui.State.Queue.AddJob(&queue.Job{
- JobType: jt,
- Entity: r,
- })
- if err != nil {
+ if err := gui.addToQueue(r); err !=nil {
return err
}
- r.State = git.Queued
} else if r.State == git.Queued {
- err := gui.State.Queue.RemoveFromQueue(r)
- if err != nil {
- return err
+ if err := gui.removeFromQueue(r); err !=nil {
+ return err
}
- r.State = git.Available
} else {
return nil
}
@@ -130,6 +146,38 @@ func (gui *Gui) markRepository(g *gocui.Gui, v *gocui.View) error {
return nil
}
+// add all remaining repositories into the queue. the function does take its
+// 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 err := gui.addToQueue(r); err !=nil {
+ return err
+ }
+ } else {
+ continue
+ }
+ }
+ gui.refreshMain(g)
+ return nil
+}
+
+// remove all repositories from the queue. the function does take its
+// 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 err := gui.removeFromQueue(r); err !=nil {
+ return err
+ }
+ } else {
+ continue
+ }
+ }
+ gui.refreshMain(g)
+ 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)