Compare commits

...

6 Commits

Author SHA1 Message Date
b8619306e9
remove escaping for quote
not required anymore
2024-03-03 17:46:30 +01:00
7969ec305f
change upload stats report 2024-03-03 17:15:38 +01:00
2df5388b4c
add goterminal and colortext 2024-03-03 17:07:08 +01:00
d571801ebc
fix login 2024-03-03 16:07:10 +01:00
4a351d5523
remove useless anonymous func 2024-03-03 16:07:04 +01:00
d716a4cfbd
fix category listing 2024-03-03 15:55:58 +01:00
8 changed files with 96 additions and 57 deletions

View File

@ -33,7 +33,7 @@ func (c *ImageDetailsCommand) Execute([]string) error {
return err
}
categories, err := p.Categories()
categories, err := p.CategoryFromId()
if err != nil {
return err
}

View File

@ -50,7 +50,7 @@ func ArgsToForm(args []string) (*url.Values, error) {
if len(r) != 2 {
return nil, errors.New("args should be key=value")
}
params.Add(r[0], strings.ReplaceAll(r[1], "'", `\'`))
params.Add(r[0], r[1])
}
return params, nil
}

2
go.mod
View File

@ -4,7 +4,9 @@ go 1.22
require (
github.com/AlecAivazis/survey/v2 v2.3.7
github.com/apoorvam/goterminal v0.0.0-20180523175556-614d345c47e5
github.com/barasher/go-exiftool v1.10.0
github.com/daviddengcn/go-colortext v1.0.0
github.com/grokify/html-strip-tags-go v0.1.0
github.com/jedib0t/go-pretty/v6 v6.5.4
github.com/jessevdk/go-flags v1.5.0

9
go.sum
View File

@ -2,6 +2,8 @@ github.com/AlecAivazis/survey/v2 v2.3.7 h1:6I/u8FvytdGsgonrYsVn2t8t4QiRnh6QSTqkk
github.com/AlecAivazis/survey/v2 v2.3.7/go.mod h1:xUTIdE4KCOIjsBAE1JYsUPoCqYdZ1reCfTwbto0Fduo=
github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63nhn5WAunQHLTznkw5W8b1Xc0dNjp83s=
github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w=
github.com/apoorvam/goterminal v0.0.0-20180523175556-614d345c47e5 h1:VYqcjykqpcq262cDxBAkAelSdg6HETkxgwzQRTS40Aw=
github.com/apoorvam/goterminal v0.0.0-20180523175556-614d345c47e5/go.mod h1:E7x8aDc3AQzDKjEoIZCt+XYheHk2OkP+p2UgeNjecH8=
github.com/barasher/go-exiftool v1.10.0 h1:f5JY5jc42M7tzR6tbL9508S2IXdIcG9QyieEXNMpIhs=
github.com/barasher/go-exiftool v1.10.0/go.mod h1:F9s/a3uHSM8YniVfwF+sbQUtP8Gmh9nyzigNF+8vsWo=
github.com/creack/pty v1.1.17 h1:QeVUsEDNrLBW4tMgZHvxy18sKtr6VI492kBhUfhDJNI=
@ -9,6 +11,13 @@ github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/daviddengcn/go-colortext v1.0.0 h1:ANqDyC0ys6qCSvuEK7l3g5RaehL/Xck9EX8ATG8oKsE=
github.com/daviddengcn/go-colortext v1.0.0/go.mod h1:zDqEI5NVUop5QPpVJUxE9UO10hRnmkD5G4Pmri9+m4c=
github.com/golangplus/bytes v0.0.0-20160111154220-45c989fe5450/go.mod h1:Bk6SMAONeMXrxql8uvOKuAZSu8aM5RUGv+1C6IJaEho=
github.com/golangplus/bytes v1.0.0/go.mod h1:AdRaCFwmc/00ZzELMWb01soso6W1R/++O1XL80yAn+A=
github.com/golangplus/fmt v1.0.0/go.mod h1:zpM0OfbMCjPtd2qkTD/jX2MgiFCqklhSUFyDW44gVQE=
github.com/golangplus/testing v1.0.0 h1:+ZeeiKZENNOMkTTELoSySazi+XaEhVO0mb+eanrSEUQ=
github.com/golangplus/testing v1.0.0/go.mod h1:ZDreixUV3YzhoVraIDyOzHrr76p6NUh6k/pPg/Q3gYA=
github.com/grokify/html-strip-tags-go v0.1.0 h1:03UrQLjAny8xci+R+qjCce/MYnpNXCtgzltlQbOBae4=
github.com/grokify/html-strip-tags-go v0.1.0/go.mod h1:ZdzgfHEzAfz9X6Xe5eBLVblWIxXfYSQ40S/VKrAOGpc=
github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec h1:qv2VnGeEQHchGaZ/u7lxST/RaJw+cv273q79D81Xbog=

View File

@ -5,7 +5,6 @@ import (
"net/url"
"os"
"path/filepath"
"strings"
"sync"
"github.com/celogeek/piwigo-cli/internal/piwigo/piwigotools"
@ -176,7 +175,7 @@ func (p *Piwigo) ScanTree(
category = &piwigotools.Category{}
p.mu.Lock()
err = p.Post("pwg.categories.add", &url.Values{
"name": []string{strings.ReplaceAll(dirname, "'", `\'`)},
"name": []string{dirname},
"parent": []string{fmt.Sprint(parentCategoryId)},
}, &category)
p.mu.Unlock()

View File

@ -23,19 +23,17 @@ func (p *Piwigo) GetStatus() (*StatusResponse, error) {
resp := &StatusResponse{}
err := p.Post("pwg.session.getStatus", nil, resp)
if err != nil {
if err := p.Post("pwg.session.getStatus", nil, resp); err != nil {
return nil, err
} else if resp.User != p.Username {
return nil, errors.New("you are a guest")
}
if err := p.Post("pwg.plugins.getList", nil, &resp.Plugins); err != nil {
return nil, err
}
if resp.User == p.Username {
return resp, nil
}
return nil, errors.New("you are a guest")
return resp, nil
}
func (p *Piwigo) Login() (*StatusResponse, error) {

View File

@ -2,43 +2,73 @@ package piwigotools
import (
"fmt"
"github.com/apoorvam/goterminal"
ct "github.com/daviddengcn/go-colortext"
"os"
"strings"
"sync"
"time"
)
"github.com/schollz/progressbar/v3"
const (
megabytes = 1 << 20
kilobytes = 1 << 10
)
type FileToUploadStat struct {
Checked int64
Total int64
TotalBytes int64
Uploaded int64
Checked uint32
Total uint32
Uploaded uint32
Skipped uint32
Failed uint32
UploadedBytes int64
Skipped int64
Failed int64
Progress *progressbar.ProgressBar
mu sync.Mutex
TotalBytes int64
progress *goterminal.Writer
mu sync.Mutex
lastRefresh time.Time
}
func NewFileToUploadStat() *FileToUploadStat {
bar := progressbar.DefaultBytes(1, "...")
progressbar.OptionOnCompletion(func() { _, _ = os.Stderr.WriteString("\n") })(bar)
return &FileToUploadStat{
Progress: bar,
progress: goterminal.New(os.Stdout),
}
}
func (s *FileToUploadStat) Refresh() {
s.Progress.Describe(fmt.Sprintf(
"%d / %d - check:%d, upload:%d, skip:%d, fail:%d",
s.Uploaded+s.Skipped+s.Failed,
s.Total,
s.Checked,
s.Uploaded,
s.Skipped,
s.Failed,
),
func (s *FileToUploadStat) formatBytes(b int64) string {
if b > megabytes {
return fmt.Sprintf("%.2fMB", float64(b)/(1<<20))
} else if b > kilobytes {
return fmt.Sprintf("%.2fKB", float64(b)/(1<<10))
} else {
return fmt.Sprintf("%dB", b)
}
}
func (s *FileToUploadStat) refreshIfNeeded() {
if time.Since(s.lastRefresh) > 200*time.Millisecond {
s.refresh()
}
}
func (s *FileToUploadStat) refresh() {
s.progress.Clear()
_, _ = s.progress.Write([]byte("Statistics:\n"))
_, _ = fmt.Fprintf(
s.progress,
strings.Repeat("%20s: %d\n", 5)+strings.Repeat("%20s: %s\n", 2),
"Checked", s.Checked,
"Uploaded", s.Uploaded,
"Skipped", s.Skipped,
"Failed", s.Failed,
"Total", s.Total,
"Uploaded Bytes", s.formatBytes(s.UploadedBytes),
"Total Bytes", s.formatBytes(s.TotalBytes),
)
_ = s.progress.Print()
s.lastRefresh = time.Now()
}
func (s *FileToUploadStat) Check() {
@ -46,16 +76,7 @@ func (s *FileToUploadStat) Check() {
defer s.mu.Unlock()
s.Checked++
s.Refresh()
}
func (s *FileToUploadStat) AddBytes(filesize int64) {
s.mu.Lock()
defer s.mu.Unlock()
s.TotalBytes += filesize
s.Progress.ChangeMax64(s.TotalBytes + 1)
s.Refresh()
s.refreshIfNeeded()
}
func (s *FileToUploadStat) Add() {
@ -63,7 +84,15 @@ func (s *FileToUploadStat) Add() {
defer s.mu.Unlock()
s.Total++
s.Refresh()
s.refreshIfNeeded()
}
func (s *FileToUploadStat) AddBytes(filesize int64) {
s.mu.Lock()
defer s.mu.Unlock()
s.TotalBytes += filesize
s.refreshIfNeeded()
}
func (s *FileToUploadStat) Commit(fileread int64) {
@ -71,7 +100,7 @@ func (s *FileToUploadStat) Commit(fileread int64) {
defer s.mu.Unlock()
s.UploadedBytes += fileread
_ = s.Progress.Set64(s.UploadedBytes)
s.refreshIfNeeded()
}
func (s *FileToUploadStat) Done() {
@ -79,11 +108,7 @@ func (s *FileToUploadStat) Done() {
defer s.mu.Unlock()
s.Uploaded++
s.Refresh()
}
func (s *FileToUploadStat) Close() {
_ = s.Progress.Close()
s.refreshIfNeeded()
}
func (s *FileToUploadStat) Fail() {
@ -91,7 +116,7 @@ func (s *FileToUploadStat) Fail() {
defer s.mu.Unlock()
s.Failed++
s.Refresh()
s.refreshIfNeeded()
}
func (s *FileToUploadStat) Skip() {
@ -99,14 +124,23 @@ func (s *FileToUploadStat) Skip() {
defer s.mu.Unlock()
s.Skipped++
s.Refresh()
s.refreshIfNeeded()
}
func (s *FileToUploadStat) Error(origin string, filename string, err error) {
s.mu.Lock()
defer s.mu.Unlock()
_ = s.Progress.Clear()
fmt.Printf("[%s] %s: %s\n", origin, filename, err)
_ = s.Progress.RenderBlank()
s.progress.Clear()
ct.Foreground(ct.Red, false)
_, _ = fmt.Fprintf(s.progress, "[%s] %s: %s\n", origin, filename, err)
_ = s.progress.Print()
ct.ResetColor()
s.progress.Reset()
s.refreshIfNeeded()
}
func (s *FileToUploadStat) Close() {
s.refresh()
}

View File

@ -57,9 +57,6 @@ func (p *Piwigo) Post(method string, form *url.Values, resp interface{}) error {
time.Sleep(time.Second) // wait 1 sec before retry
}
func() {
}()
req, err := http.NewRequest("POST", Url, strings.NewReader(encodedForm))
if err != nil {
return err