From badc92f192528ed2eea8ea73582657c4c4b1a84f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luka=20Marku=C5=A1i=C4=87?= Date: Mon, 9 May 2022 15:28:47 +0200 Subject: [PATCH] Add container pause functionality --- pkg/commands/container.go | 12 ++++++++++++ pkg/gui/containers_panel.go | 21 +++++++++++++++++++++ pkg/gui/keybindings.go | 7 +++++++ pkg/i18n/english.go | 4 ++++ 4 files changed, 44 insertions(+) diff --git a/pkg/commands/container.go b/pkg/commands/container.go index f664eba3..9b56664d 100644 --- a/pkg/commands/container.go +++ b/pkg/commands/container.go @@ -175,6 +175,18 @@ func (c *Container) Stop() error { return c.Client.ContainerStop(context.Background(), c.ID, nil) } +// Pause pauses the container +func (c *Container) Pause() error { + c.Log.Warn(fmt.Sprintf("pausing container %s", c.Name)) + return c.Client.ContainerPause(context.Background(), c.ID) +} + +// Unpause unpauses the container +func (c *Container) Unpause() error { + c.Log.Warn(fmt.Sprintf("unpausing container %s", c.Name)) + return c.Client.ContainerUnpause(context.Background(), c.ID) +} + // Restart restarts the container func (c *Container) Restart() error { c.Log.Warn(fmt.Sprintf("restarting container %s", c.Name)) diff --git a/pkg/gui/containers_panel.go b/pkg/gui/containers_panel.go index fe4715ea..961d073c 100644 --- a/pkg/gui/containers_panel.go +++ b/pkg/gui/containers_panel.go @@ -423,6 +423,27 @@ func (gui *Gui) handleContainersRemoveMenu(g *gocui.Gui, v *gocui.View) error { return gui.createMenu("", options, len(options), handleMenuPress) } +func (gui *Gui) handleContainerPause(g *gocui.Gui, v *gocui.View) error { + container, err := gui.getSelectedContainer() + if err != nil { + return nil + } + + return gui.WithWaitingStatus(gui.Tr.PausingStatus, func() error { + if container.Details.State.Paused { + err = container.Unpause() + } else { + err = container.Pause() + } + + if err != nil { + return gui.createErrorPanel(gui.g, err.Error()) + } + + return gui.refreshContainersAndServices() + }) +} + func (gui *Gui) handleContainerStop(g *gocui.Gui, v *gocui.View) error { container, err := gui.getSelectedContainer() if err != nil { diff --git a/pkg/gui/keybindings.go b/pkg/gui/keybindings.go index aabf1b3b..4ef3eb8d 100644 --- a/pkg/gui/keybindings.go +++ b/pkg/gui/keybindings.go @@ -220,6 +220,13 @@ func (gui *Gui) GetInitialKeybindings() []*Binding { Handler: gui.handleHideStoppedContainers, Description: gui.Tr.HideStopped, }, + { + ViewName: "containers", + Key: 'p', + Modifier: gocui.ModNone, + Handler: gui.handleContainerPause, + Description: gui.Tr.Pause, + }, { ViewName: "containers", Key: 's', diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go index 5dbfdb5c..cec206e0 100644 --- a/pkg/i18n/english.go +++ b/pkg/i18n/english.go @@ -42,11 +42,13 @@ type TranslationSet struct { RestartingStatus string StartingStatus string StoppingStatus string + PausingStatus string RemovingStatus string RunningCustomCommandStatus string RunningBulkCommandStatus string RemoveService string Stop string + Pause string Restart string Start string Rebuild string @@ -112,6 +114,7 @@ func englishSet() TranslationSet { RestartingStatus: "restarting", StartingStatus: "starting", StoppingStatus: "stopping", + PausingStatus: "pausing", RunningCustomCommandStatus: "running custom command", RunningBulkCommandStatus: "running bulk command", @@ -146,6 +149,7 @@ func englishSet() TranslationSet { RemoveWithVolumes: "remove with volumes", RemoveService: "remove containers", Stop: "stop", + Pause: "pause", Restart: "restart", Start: "start", Rebuild: "rebuild",