Skip to content

Commit

Permalink
chore: move loader to separate file
Browse files Browse the repository at this point in the history
  • Loading branch information
rvagg committed Jun 20, 2023
1 parent 65e5171 commit 7243df8
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 77 deletions.
83 changes: 83 additions & 0 deletions cmd/frisbii/loader.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package main

import (
"fmt"
"io"
"os"
"runtime"
"sync"
"time"
)

type Loader struct {
writer io.Writer
ticker *time.Ticker
isRunning bool
tickDuration time.Duration
wg sync.WaitGroup
lk sync.Mutex
status string
}

func NewLoader(w io.Writer, tickDuration ...time.Duration) *Loader {
duration := 50 * time.Millisecond
if len(tickDuration) > 0 && tickDuration[0] > 0 {
duration = tickDuration[0]
}
return &Loader{
writer: w,
tickDuration: duration,
}
}

var winTerm = runtime.GOOS == "windows" && len(os.Getenv("WT_SESSION")) > 0

func (l *Loader) Start() {
if !winTerm {
fmt.Fprint(l.writer, "\033[?25l") // hide cursor
}
l.isRunning = true
l.ticker = time.NewTicker(l.tickDuration)
l.wg.Add(1)
go func() {
defer l.wg.Done()
spinnerChars := []string{
// "▒▒▒▒▒▒▒▒▒▒", "█▒▒▒▒▒▒▒▒▒", "██▒▒▒▒▒▒▒▒", "███▒▒▒▒▒▒▒", "████▒▒▒▒▒▒", "████▒▒▒▒▒▒", "█████▒▒▒▒▒", "██████▒▒▒▒", "███████▒▒▒", "████████▒▒", "█████████▒",
// "██████████", "▒█████████", "▒▒████████", "▒▒▒███████", "▒▒▒▒██████", "▒▒▒▒██████", "▒▒▒▒▒█████", "▒▒▒▒▒▒████", "▒▒▒▒▒▒▒███", "▒▒▒▒▒▒▒▒██", "▒▒▒▒▒▒▒▒▒█",
"🌑", "🌘", "🌗", "🌖", "🌕", "🌔", "🌓", "🌒",
}
i := 0
for range l.ticker.C {
if l.isRunning {
l.lk.Lock()
i = i % len(spinnerChars)
fmt.Fprintf(l.writer, "\r\033[K %s Preparing to throw Frisbii — %s", spinnerChars[i], l.status)
i++
l.lk.Unlock()
} else {
l.ticker.Stop()
break
}
}
}()
}

func (l *Loader) SetStatus(status string) {
l.lk.Lock()
defer l.lk.Unlock()
l.status = status
}

func (l *Loader) Stop() {
if l.isRunning {
l.isRunning = false
l.wg.Wait()
if !winTerm {
fmt.Fprint(l.writer, "\r\033[K\033[?25h") // show cursor
}
}
}

func (l *Loader) IsRunning() bool {
return l.isRunning
}
77 changes: 0 additions & 77 deletions cmd/frisbii/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,9 @@ package main
import (
"context"
"fmt"
"io"
"os"
"os/signal"
"runtime"
"sync"
"syscall"
"time"

"github.com/ipfs/go-log/v2"
"github.com/ipfs/go-unixfsnode"
Expand Down Expand Up @@ -188,76 +184,3 @@ func action(c *cli.Context) error {
}
return nil
}

type Loader struct {
writer io.Writer
ticker *time.Ticker
isRunning bool
tickDuration time.Duration
wg sync.WaitGroup
lk sync.Mutex
status string
}

func NewLoader(w io.Writer, tickDuration ...time.Duration) *Loader {
duration := 50 * time.Millisecond
if len(tickDuration) > 0 && tickDuration[0] > 0 {
duration = tickDuration[0]
}
return &Loader{
writer: w,
tickDuration: duration,
}
}

var winTerm = runtime.GOOS == "windows" && len(os.Getenv("WT_SESSION")) > 0

func (l *Loader) Start() {
if !winTerm {
fmt.Fprint(l.writer, "\033[?25l") // hide cursor
}
l.isRunning = true
l.ticker = time.NewTicker(l.tickDuration)
l.wg.Add(1)
go func() {
defer l.wg.Done()
spinnerChars := []string{
// "▒▒▒▒▒▒▒▒▒▒", "█▒▒▒▒▒▒▒▒▒", "██▒▒▒▒▒▒▒▒", "███▒▒▒▒▒▒▒", "████▒▒▒▒▒▒", "████▒▒▒▒▒▒", "█████▒▒▒▒▒", "██████▒▒▒▒", "███████▒▒▒", "████████▒▒", "█████████▒",
// "██████████", "▒█████████", "▒▒████████", "▒▒▒███████", "▒▒▒▒██████", "▒▒▒▒██████", "▒▒▒▒▒█████", "▒▒▒▒▒▒████", "▒▒▒▒▒▒▒███", "▒▒▒▒▒▒▒▒██", "▒▒▒▒▒▒▒▒▒█",
"🌑", "🌘", "🌗", "🌖", "🌕", "🌔", "🌓", "🌒",
}
i := 0
for range l.ticker.C {
if l.isRunning {
l.lk.Lock()
i = i % len(spinnerChars)
fmt.Fprintf(l.writer, "\r\033[K %s Preparing to throw Frisbii — %s", spinnerChars[i], l.status)
i++
l.lk.Unlock()
} else {
l.ticker.Stop()
break
}
}
}()
}

func (l *Loader) SetStatus(status string) {
l.lk.Lock()
defer l.lk.Unlock()
l.status = status
}

func (l *Loader) Stop() {
if l.isRunning {
l.isRunning = false
l.wg.Wait()
if !winTerm {
fmt.Fprint(l.writer, "\r\033[K\033[?25h") // show cursor
}
}
}

func (l *Loader) IsRunning() bool {
return l.isRunning
}

0 comments on commit 7243df8

Please sign in to comment.