From 0a142d211dd567d3148041fbd9073ccb1b65a72e Mon Sep 17 00:00:00 2001 From: Kijima Daigo Date: Sat, 21 Oct 2023 23:10:19 +0900 Subject: [PATCH 1/3] feat: progress animation --- cmd/animation.go | 26 ++++++++++++++++++++++++++ cmd/cmd.go | 5 +++++ 2 files changed, 31 insertions(+) create mode 100644 cmd/animation.go diff --git a/cmd/animation.go b/cmd/animation.go new file mode 100644 index 0000000..2be98c7 --- /dev/null +++ b/cmd/animation.go @@ -0,0 +1,26 @@ +package cmd + +import ( + "fmt" + "io" + "time" +) + +var marks = []string{"|", "/", "-", "\\"} + +func mark(i int) string { + return marks[i%4] +} + +func anim(w io.Writer) { + go func() { + i := 0 + for range time.Tick(100 * time.Millisecond) { + if i == len(marks) { + i = 0 + } + fmt.Fprintf(w, "\rwait... %s", mark(i)) + i++ + } + }() +} diff --git a/cmd/cmd.go b/cmd/cmd.go index 5f98a54..c66e5d2 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -42,10 +42,15 @@ uplはカレントディレクトリにある "upload.zip" という名前のフ return ArgumentCountError } baseurl := args[1] + + anim(cli.Out) + task := upl.NewTask(cli.Out, upl.TaskWithBaseurl(baseurl)) err := task.Exec() if err != nil { return err } + + fmt.Fprintln(cli.Out, "") return nil } From ef8fd198063e3b7d7ce499d705f988e1f88ad95a Mon Sep 17 00:00:00 2001 From: Kijima Daigo Date: Sat, 21 Oct 2023 23:30:07 +0900 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20=E3=82=A2=E3=83=83=E3=83=97?= =?UTF-8?q?=E3=83=AD=E3=83=BC=E3=83=89=E5=85=88=E3=83=87=E3=82=A3=E3=83=AC?= =?UTF-8?q?=E3=82=AF=E3=83=88=E3=83=AA=E3=82=92=E6=8C=87=E5=AE=9A=E3=81=A7?= =?UTF-8?q?=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 7 ++++--- cmd/cmd.go | 11 ++++++++--- pkg/upl.go | 10 +++++++++- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index f9f6dc8..251dee3 100644 --- a/README.md +++ b/README.md @@ -18,15 +18,16 @@ $ go install github.com/kijimaD/upl@main $ docker-compose up -d ``` -実行。カレントディレクトリにある `upload.zip` を、指定パスにある Tiny File Manager にアップロードする。 +実行。カレントディレクトリにある `upload.zip` を、指定パスにある Tiny File Manager の指定ディレクトリにアップロードする。`.`の場合は、Tiny File Manager のトップに設定されているディレクトリに`upload.zip`をアップロードする。 ``` -$ upl localhost:7777 +$ upl localhost:7777 . +upl [ベースパス] [アップロード先ディレクトリ] ``` ( http://localhost:7777 で Tiny File Managerにアクセスできているものとする。) ## docker run ``` -$ docker run -v "$PWD/":/work -w /work --rm -it ghcr.io/kijimad/upl:latest localhost:7777 +$ docker run -v "$PWD/":/work -w /work --rm -it ghcr.io/kijimad/upl:latest localhost:7777 . ``` diff --git a/cmd/cmd.go b/cmd/cmd.go index c66e5d2..6caf552 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -10,7 +10,7 @@ import ( ) var ( - ArgumentCountError = errors.New("引数の数が間違っている。expect: 1") + ArgumentCountError = errors.New("引数の数が間違っている。expect: 2") ) type CLI struct { @@ -38,14 +38,19 @@ uplはカレントディレクトリにある "upload.zip" という名前のフ return nil } - if len(args) != 2 { + if len(args) != 3 { return ArgumentCountError } baseurl := args[1] + destpath := args[2] anim(cli.Out) - task := upl.NewTask(cli.Out, upl.TaskWithBaseurl(baseurl)) + task := upl.NewTask( + cli.Out, + upl.TaskWithBaseurl(baseurl), + upl.TaskWithDestpath(destpath), + ) err := task.Exec() if err != nil { return err diff --git a/pkg/upl.go b/pkg/upl.go index 8ac59af..03999c1 100644 --- a/pkg/upl.go +++ b/pkg/upl.go @@ -34,6 +34,7 @@ type Task struct { baseurl string adminuser string pwd string + destpath string } func NewTask(w io.Writer, options ...TaskOption) *Task { @@ -43,6 +44,7 @@ func NewTask(w io.Writer, options ...TaskOption) *Task { baseurl: DEFAULT_BASEURL, adminuser: DEFAULT_ADMINUSER, pwd: DEFAULT_PWD, + destpath: ".", } for _, option := range options { option(&task) @@ -65,6 +67,12 @@ func TaskWithLoginUser(adminuser string, pwd string) TaskOption { } } +func TaskWithDestpath(destpath string) TaskOption { + return func(t *Task) { + t.destpath = destpath + } +} + func (t *Task) upload(cookie string) error { file, err := os.Open(UPLOAD_TARGET) if err != nil { @@ -78,7 +86,7 @@ func (t *Task) upload(cookie string) error { body := &bytes.Buffer{} writer := multipart.NewWriter(body) writer.SetBoundary(boundary) - writer.WriteField("p", "") + writer.WriteField("p", t.destpath) writer.WriteField("fullpath", UPLOAD_TARGET) partHeader := make(textproto.MIMEHeader) partHeader.Set("Content-Disposition", fmt.Sprintf(`form-data; name="file"; filename="%s"`, UPLOAD_TARGET)) From 4f2e42ac5ba1d4c61c896ee32b98070593e5ef4d Mon Sep 17 00:00:00 2001 From: Kijima Daigo Date: Sat, 21 Oct 2023 23:42:28 +0900 Subject: [PATCH 3/3] refactor: replace magicnumber --- cmd/animation.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cmd/animation.go b/cmd/animation.go index 2be98c7..96dae43 100644 --- a/cmd/animation.go +++ b/cmd/animation.go @@ -8,14 +8,16 @@ import ( var marks = []string{"|", "/", "-", "\\"} +const animLoopMilliseconds = 100 + func mark(i int) string { - return marks[i%4] + return marks[i%len(marks)] } func anim(w io.Writer) { go func() { i := 0 - for range time.Tick(100 * time.Millisecond) { + for range time.Tick(animLoopMilliseconds * time.Millisecond) { if i == len(marks) { i = 0 }