Skip to content

Commit 6d9df67

Browse files
committed
feat: refactoring progress
1 parent d5848b1 commit 6d9df67

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+1414
-1368
lines changed

.editorconfig

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
1-
# http://editorconfig.org
2-
3-
root = true
4-
5-
[*]
6-
charset = utf-8
7-
end_of_line = lf
8-
indent_style = space
9-
indent_size = 2
10-
insert_final_newline = true
11-
trim_trailing_whitespace = true
12-
13-
[{*.go,go.mod}]
14-
indent_style = tab
15-
indent_size = 4
16-
17-
[*.md]
18-
trim_trailing_whitespace = false
19-
indent_size = 4
20-
21-
[Makefile]
22-
indent_style = tab
23-
indent_size = 8
1+
# EditorConfig is awesome: https://EditorConfig.org
2+
3+
root = true
4+
5+
[*]
6+
charset = utf-8
7+
end_of_line = lf
8+
indent_style = space
9+
indent_size = 2
10+
insert_final_newline = true
11+
trim_trailing_whitespace = true
12+
13+
[{*.go,go.mod}]
14+
indent_style = tab
15+
indent_size = 4
16+
17+
[*.md]
18+
trim_trailing_whitespace = false
19+
indent_size = 4
20+
21+
[Makefile]
22+
indent_style = tab
23+
indent_size = 8

LICENSE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
The MIT License (MIT)
22

3-
Copyright (c) 2017-2019 Leonid Boykov
3+
Copyright (c) 2017-2021 Leonid Boykov
44

55
Permission is hereby granted, free of charge, to any person obtaining a copy of
66
this software and associated documentation files (the "Software"), to deal in

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,3 +63,11 @@ Custom boorus are not available yet.
6363
## License
6464

6565
`getmoe` is a free software licensed under the [MIT](LICENSE) license.
66+
67+
68+
# TODO
69+
70+
* Re-implement old sankaku (for idol.sankakucomplex.com)
71+
* Gelbooru
72+
* Danbooru
73+
* Shimmie 2

board.go

Lines changed: 14 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,78 +1,33 @@
11
package getmoe
22

3-
import (
4-
"fmt"
5-
"io/ioutil"
6-
"net/http"
7-
"time"
8-
)
9-
103
// Board holds data for API access.
114
type Board struct {
12-
Provider Provider
13-
httpClient *http.Client
5+
name string
6+
provider Provider
147
}
158

16-
// NewBoard creates a new board with provided configuration.
17-
func NewBoard(providerName string, config BoardConfiguration) (*Board, error) {
18-
providersMu.RLock()
19-
provider, ok := providers[providerName]
20-
providersMu.RUnlock()
21-
if !ok {
22-
return nil, fmt.Errorf("getmoe: unknown provider %s", providerName)
9+
// NewBoard creates a new Board.
10+
func NewBoard(name string, config BoardConfiguration) (Board, error) {
11+
if err := applySettings(config.Settings, &config.Provider); err != nil {
12+
return Board{}, err
2313
}
2414

25-
provider.New(config.Provider)
26-
return &Board{
27-
Provider: provider,
28-
httpClient: &http.Client{
29-
Timeout: 10 * time.Second,
30-
},
31-
}, nil
32-
}
33-
34-
// NewBoardWithProvider creates a new board with provided configuration.
35-
func NewBoardWithProvider(provider Provider) *Board {
36-
return &Board{
37-
Provider: provider,
38-
httpClient: &http.Client{
39-
Timeout: 10 * time.Second,
40-
},
41-
}
42-
}
43-
44-
// Request gets images by tags.
45-
func (b *Board) Request() ([]Post, error) {
46-
req, err := b.Provider.PageRequest()
15+
provider, err := NewProvider(config.Provider.Name, config.Provider)
4716
if err != nil {
48-
return nil, err
17+
return Board{}, err
4918
}
5019

51-
resp, err := b.httpClient.Do(req)
52-
if err != nil {
53-
return nil, err
54-
}
55-
defer resp.Body.Close()
56-
57-
body, err := ioutil.ReadAll(resp.Body)
58-
if err != nil {
59-
return nil, err
60-
}
61-
62-
page, err := b.Provider.Parse(body)
63-
if err != nil {
64-
return nil, err
65-
}
66-
67-
return page, nil
20+
return Board{
21+
name: name,
22+
provider: provider,
23+
}, nil
6824
}
6925

70-
// RequestAll checks all pages.
7126
func (b *Board) RequestAll() ([]Post, error) {
7227
var pages []Post
28+
currentPage := 1
7329
for {
74-
b.Provider.NextPage()
75-
page, err := b.Request()
30+
page, err := b.provider.RequestPage([]string{"test"}, currentPage)
7631
if err != nil {
7732
return pages, err
7833
}

boardmanager.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package getmoe
2+
3+
import "fmt"
4+
5+
type BoardManager struct {
6+
Boards []Board
7+
}
8+
9+
func LoadBoards(config map[string]BoardConfiguration) (BoardManager, error) {
10+
m := BoardManager{}
11+
12+
for name, board := range config {
13+
b, err := NewBoard(name, board)
14+
if err != nil {
15+
return BoardManager{}, fmt.Errorf("getmoe: unable to create board '%s': %s", name, err)
16+
}
17+
m.Boards = append(m.Boards, b)
18+
}
19+
20+
return m, nil
21+
}

boards.yaml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
yande.re:
2+
provider: moebooru
3+
url: https://yande.re
4+
password_salt: choujin-steiner--%s--
5+
konachan.com:
6+
provider: moebooru
7+
url: https://konachan.com
8+
password_salt: So-I-Heard-You-Like-Mupkids-?--%s--
9+
10+
chan.sankakucomplex.com:
11+
provider: sankaku2
12+
url: https://capi-v2.sankakucomplex.com
13+
idol.sankakucomplex.com:
14+
provider: sankaku
15+
url: https://iapi.sankakucomplex.com

cmd/getmoe/get.go

Lines changed: 8 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -1,86 +1,8 @@
1-
package main
2-
3-
import (
4-
"fmt"
5-
"os"
6-
7-
"github.com/urfave/cli"
8-
9-
"github.com/leonidboykov/getmoe"
10-
"github.com/leonidboykov/getmoe/internal/helper"
11-
"github.com/leonidboykov/getmoe/provider"
12-
)
13-
14-
var getCommand = cli.Command{
15-
Name: "get",
16-
Usage: "get data from booru",
17-
Action: getAction,
18-
Flags: []cli.Flag{
19-
cli.StringFlag{
20-
Name: "from",
21-
Usage: "source booru (config file is not implemented yet)",
22-
},
23-
cli.StringFlag{
24-
Name: "to",
25-
Usage: "destination folder",
26-
},
27-
cli.StringSliceFlag{
28-
Name: "tags",
29-
Usage: "Tags",
30-
},
31-
cli.StringFlag{
32-
Name: "login, l",
33-
Usage: "login for booru",
34-
},
35-
cli.StringFlag{
36-
Name: "password, p",
37-
Usage: "password for booru",
38-
},
39-
},
40-
}
41-
42-
func getAction(ctx *cli.Context) error {
43-
srcFlag := ctx.String("from")
44-
dstFlag := ctx.String("to")
45-
tagFlag := ctx.StringSlice("tags")
46-
loginFlag := ctx.String("login")
47-
passwordFlag := ctx.String("password")
48-
quietFlag := ctx.GlobalBool("quiet")
49-
50-
board, ok := provider.AvailableBoards[srcFlag]
51-
if !ok {
52-
fmt.Printf("There is no %s source specified\n", srcFlag)
53-
os.Exit(1)
54-
}
55-
56-
board.Provider.Auth(getmoe.AuthConfiguration{
57-
Login: loginFlag,
58-
Password: passwordFlag,
59-
})
60-
61-
board.Provider.BuildRequest(getmoe.RequestConfiguration{
62-
Tags: tagFlag,
63-
})
64-
65-
posts, err := board.RequestAll()
66-
if err != nil {
67-
fmt.Println(err)
68-
}
69-
70-
return saveImage(posts, dstFlag, quietFlag)
71-
}
72-
73-
func saveImage(posts []getmoe.Post, saveDir string, quiet bool) error {
74-
for _, p := range posts {
75-
os.MkdirAll(saveDir, os.ModePerm)
76-
if err := p.Save(saveDir); err != nil {
77-
return err
78-
}
79-
80-
if !quiet {
81-
fName, _ := helper.FileURLUnescape(p.FileURL)
82-
fmt.Println("Getting", fName[:32], "...")
83-
}
84-
}
85-
return nil
86-
}
1+
package main
2+
3+
import "github.com/urfave/cli/v2"
4+
5+
var getCommand = cli.Command{
6+
Name: "get",
7+
Usage: "get data from booru",
8+
}

cmd/getmoe/main.go

Lines changed: 10 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,36 +4,23 @@ import (
44
"fmt"
55
"os"
66

7-
"github.com/urfave/cli"
8-
)
9-
10-
var (
11-
version = "master"
12-
commit = "none"
13-
date = "unknown"
7+
"github.com/urfave/cli/v2"
148
)
159

1610
func main() {
17-
app := cli.NewApp()
18-
app.Name = "getmoe"
19-
app.Usage = "cli tool for boorus"
20-
app.Version = version
21-
app.Authors = []cli.Author{{
22-
Name: "Leonid Boykov",
23-
24-
}}
25-
app.Flags = []cli.Flag{
26-
cli.BoolFlag{
27-
Name: "quiet, q",
28-
Usage: "disable progress bar",
11+
app := &cli.App{
12+
Name: "getmoe",
13+
Usage: `cli tool for boorus`,
14+
Version: version,
15+
Commands: []*cli.Command{
16+
&getCommand,
2917
},
30-
}
31-
app.Commands = []cli.Command{
32-
getCommand,
18+
Flags: rootFlags,
19+
Action: rootAction,
3320
}
3421

3522
if err := app.Run(os.Args); err != nil {
36-
fmt.Println(err)
23+
fmt.Fprintln(os.Stderr, err)
3724
os.Exit(1)
3825
}
3926
}

cmd/getmoe/root.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
6+
"github.com/urfave/cli/v2"
7+
8+
"github.com/leonidboykov/getmoe"
9+
_ "github.com/leonidboykov/getmoe/provider/danbooru"
10+
_ "github.com/leonidboykov/getmoe/provider/gelbooru"
11+
_ "github.com/leonidboykov/getmoe/provider/moebooru"
12+
_ "github.com/leonidboykov/getmoe/provider/sankaku"
13+
)
14+
15+
var rootFlags = []cli.Flag{
16+
&cli.StringFlag{
17+
Name: "config",
18+
Aliases: []string{"c"},
19+
Usage: "override config file name",
20+
Value: "getmoe.yaml",
21+
},
22+
}
23+
24+
func rootAction(ctx *cli.Context) error {
25+
configFlag := ctx.String("config")
26+
config, err := getmoe.ReadConfiguraton(configFlag)
27+
if err != nil {
28+
return err
29+
}
30+
31+
for boardName, board := range config.Boards {
32+
fmt.Println(boardName, board.Provider.Name)
33+
}
34+
35+
boards, err := getmoe.LoadBoards(config.Boards)
36+
_ = boards
37+
38+
return nil
39+
}

cmd/getmoe/version.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package main
2+
3+
var (
4+
version = "master"
5+
commit = "none"
6+
data = "unknown"
7+
)
8+
9+
// TODO: Add `version` command.

0 commit comments

Comments
 (0)