diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 2063023..578d575 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -26,7 +26,7 @@ on:
- main
env:
- VERSION_NUMBER: 'v1.3.1'
+ VERSION_NUMBER: 'v1.3.2'
DOCKERHUB_REGISTRY_NAME: 'digitalghostdev/poke-cli'
AWS_REGION: 'us-west-2'
diff --git a/.goreleaser.yaml b/.goreleaser.yaml
index 9261260..f73112f 100644
--- a/.goreleaser.yaml
+++ b/.goreleaser.yaml
@@ -14,7 +14,7 @@ builds:
- windows
- darwin
ldflags:
- - -s -w -X main.version=v1.3.1
+ - -s -w -X main.version=v1.3.2
archives:
- format: tar.gz
diff --git a/Dockerfile b/Dockerfile
index 58c5754..5b30230 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -8,7 +8,7 @@ RUN go mod download
COPY . .
-RUN go build -ldflags "-X main.version=v1.3.1" -o poke-cli .
+RUN go build -ldflags "-X main.version=v1.3.2" -o poke-cli .
# build 2
FROM --platform=$BUILDPLATFORM alpine:latest
diff --git a/README.md b/README.md
index d2aca96..e1fc1bd 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
Pokémon CLI
-
+
@@ -76,11 +76,11 @@ View future plans in the [Roadmap](#roadmap) section.
3. Choose how to interact with the container:
* Run a single command and exit:
```bash
- docker run --rm -it digitalghostdev/poke-cli:v1.3.1 [subcommand] flag]
+ docker run --rm -it digitalghostdev/poke-cli:v1.3.2 [subcommand] flag]
```
* Enter the container and use its shell:
```bash
- docker run --rm -it --name poke-cli --entrypoint /bin/sh digitalghostdev/poke-cli:v1.3.1 -c "cd /app && exec sh"
+ docker run --rm -it --name poke-cli --entrypoint /bin/sh digitalghostdev/poke-cli:v1.3.2 -c "cd /app && exec sh"
# placed into the /app directory, run the program with './poke-cli'
# example: ./poke-cli ability swift-swim
```
diff --git a/flags/pokemonflagset.go b/flags/pokemonflagset.go
index 45d17dc..8fb4dcf 100644
--- a/flags/pokemonflagset.go
+++ b/flags/pokemonflagset.go
@@ -20,6 +20,7 @@ import (
"sort"
"strconv"
"strings"
+ "sync"
)
func header(header string) string {
@@ -225,37 +226,72 @@ func MovesFlag(w io.Writer, endpoint string, pokemonName string) error {
var moves []MoveInfo
+ movesChan := make(chan MoveInfo)
+ errorsChan := make(chan error)
+
+ var wg sync.WaitGroup
+
+ // Count eligible moves for concurrency
+ eligibleMoves := 0
for _, pokeMove := range pokemonStruct.Moves {
for _, detail := range pokeMove.VersionGroupDetails {
if detail.VersionGroup.Name != "scarlet-violet" || detail.MoveLearnedMethod.Name != "level-up" {
continue
}
- moveName := pokeMove.Move.Name
- moveStruct, _, err := connections.MoveApiCall("move", moveName, baseURL)
- if err != nil {
- log.Printf("Error fetching move %s: %v", moveName, err)
+ eligibleMoves++
+ wg.Add(1)
+ go func(moveName string, level int) {
+ defer wg.Done()
+
+ moveStruct, _, err := connections.MoveApiCall("move", moveName, baseURL)
+ if err != nil {
+ errorsChan <- fmt.Errorf("error fetching move %s: %v", moveName, err)
+ return
+ }
+
+ capitalizedMove := cases.Title(language.English).String(strings.ReplaceAll(moveName, "-", " "))
+ capitalizedType := cases.Title(language.English).String(moveStruct.Type.Name)
+
+ movesChan <- MoveInfo{
+ Accuracy: moveStruct.Accuracy,
+ Level: level,
+ Name: capitalizedMove,
+ Power: moveStruct.Power,
+ Type: capitalizedType,
+ }
+ }(pokeMove.Move.Name, detail.LevelLearnedAt)
+ }
+ }
+
+ // Close channels when all goroutines are done
+ go func() {
+ wg.Wait()
+ close(movesChan)
+ close(errorsChan)
+ }()
+
+ // Collect results from channels
+ movesOpen, errorsOpen := true, true
+ for movesOpen || errorsOpen {
+ select {
+ case move, ok := <-movesChan:
+ if !ok {
+ movesOpen = false
continue
}
-
- capitalizedMove := cases.Title(language.English).String(strings.ReplaceAll(moveName, "-", " "))
- capitalizedType := cases.Title(language.English).String(moveStruct.Type.Name)
-
- moves = append(moves, MoveInfo{
- Accuracy: moveStruct.Accuracy,
- Level: detail.LevelLearnedAt,
- Name: capitalizedMove,
- Power: moveStruct.Power,
- Type: capitalizedType,
- })
+ moves = append(moves, move)
+ case err, ok := <-errorsChan:
+ if !ok {
+ errorsOpen = false
+ continue
+ }
+ log.Println(err)
}
}
if len(moves) == 0 {
- _, err := fmt.Fprintln(w, "No level-up moves found for Scarlet & Violet.")
- if err != nil {
- return err
- }
+ fmt.Fprintln(w, "No level-up moves found for Scarlet & Violet.")
return nil
}