Skip to content

Commit

Permalink
fix: IsNotExist is insufficient for proceeding (#21)
Browse files Browse the repository at this point in the history
* fix: IsNotExist is insufficient for proceeding

* fix: adjusted import paths and added fallback v6 support on imagemagick
  • Loading branch information
madhuravius authored Jul 22, 2022
1 parent a5d3ba6 commit 5bc8d7f
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 25 deletions.
3 changes: 1 addition & 2 deletions cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import (

"clingy/internal"
"clingy/internal/images"
"clingy/lib"
"github.com/spf13/cobra"
)

Expand Down Expand Up @@ -98,7 +97,7 @@ func RootCmd(c *RootConfig) *cobra.Command {
func Execute() {
rootConfig := &RootConfig{
ExitTools: internal.NewExitToolsClient(),
ImageTools: lib.GetClingyImageCapture(),
ImageTools: images.GetClingyImageCapture(),
}
if err := RootCmd(rootConfig).Execute(); err != nil {
logger.Println("Error when trying to execute", err)
Expand Down
30 changes: 28 additions & 2 deletions internal/images/common.go
Original file line number Diff line number Diff line change
@@ -1,15 +1,36 @@
package images

import (
"fmt"
"log"
"os/exec"
"runtime"

"clingy/lib"
)

func GetClingyImageCapture() ImageProcessingImpl {
switch runtime.GOOS {
case "darwin":
return NewMacScreenshotClient()
case "linux":
return NewMagickClient()
default:
fmt.Println("WARNING - Operating system not supported, trying to use imagemagick client.")
return NewMagickClient()
}
}

// addLabelToImage - adds a label to an image with imagemagick
func addLabelToImage(logger *log.Logger, imagePath, label string) error {
// magick 0.jpg -font "FreeMono" -gravity South -pointsize 30 -fill "yellow" -annotate +0+100 'Caption' 0.jpg
magickBinary, err := lib.GetMagickBinary()
if err != nil {
logger.Println("Unable to find magick binary in adding label to image", err)
return err
}
imageCommand := exec.Command(
"magick",
magickBinary,
imagePath,
"-font",
"FreeMono",
Expand Down Expand Up @@ -37,8 +58,13 @@ func addLabelToImage(logger *log.Logger, imagePath, label string) error {
// addDescriptionToImage
func addDescriptionToImage(logger *log.Logger, imagePath, description string) error {
// magick 0.jpg -font "FreeMono" -gravity South -pointsize 16 -fill "yellow" -annotate +0+60 'Description text. ' 0.jpg
magickBinary, err := lib.GetMagickBinary()
if err != nil {
logger.Println("Unable to find magick binary in adding label to image", err)
return err
}
imageCommand := exec.Command(
"magick",
magickBinary,
imagePath,
"-font",
"FreeMono",
Expand Down
10 changes: 9 additions & 1 deletion internal/images/magick.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import (
"log"
"os"
"os/exec"

"clingy/lib"
)

// magickClient - simple struct mainly that scopes methods to imagemagick for linux users
Expand All @@ -27,8 +29,14 @@ func (m magickClient) CaptureWindow(
expectedPath := fmt.Sprintf("%s/%s%s", buildDirectory, screenshotName, screenshotExtension)
logger.Println("Saving to path", expectedPath)

magickBinary, err := lib.GetMagickBinary()
if err != nil {
logger.Println("Unable to find magick binary in adding label to image", err)
return "", err
}

imageCommand := exec.Command(
"magick",
magickBinary,
"import",
"-window",
os.Getenv("WINDOWID"),
Expand Down
32 changes: 12 additions & 20 deletions lib/utils.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package lib

import (
"clingy/internal/images"
"errors"
"fmt"
"log"
Expand All @@ -17,36 +16,29 @@ var (
NoStepsError = errors.New("error: unable to process template, no steps")
)

// CheckMagickBinary - check if imagemagick binary found in path
func CheckMagickBinary() error {
if _, err := exec.LookPath("magick"); os.IsNotExist(err) {
return errors.New("error: magick binary not found")
// GetMagickBinary - check if imagemagick binary found in path
func GetMagickBinary() (string, error) {
magickPath := "magick"
if _, magickErr := exec.LookPath(magickPath); magickErr != nil {
// fall back to import and see if that exists
magickPath = "import"
if _, err := exec.LookPath(magickPath); err != nil {
return "", errors.New("error: magick or fallback binary (import) not found")
}
}
return nil
return magickPath, nil
}

func CheckScreenshotBinary() error {
if _, err := exec.LookPath("screenshot"); os.IsNotExist(err) {
if _, err := exec.LookPath("screenshot"); err != nil {
return errors.New("error: screenshot python3 bin not found")
}
return nil
}

func GetClingyImageCapture() images.ImageProcessingImpl {
switch runtime.GOOS {
case "darwin":
return images.NewMacScreenshotClient()
case "linux":
return images.NewMagickClient()
default:
fmt.Println("WARNING - Operating system not supported, trying to use imagemagick client.")
return images.NewMagickClient()
}
}

// ClingyCanRun - catch-all for ensuring clingy can actually run
func ClingyCanRun() error {
if err := CheckMagickBinary(); err != nil {
if _, err := GetMagickBinary(); err != nil {
return err
}

Expand Down

0 comments on commit 5bc8d7f

Please sign in to comment.