configurable image resolution by user
parent
0db716e080
commit
e2a948c6fa
4
image.go
4
image.go
|
|
@ -13,7 +13,7 @@ import (
|
||||||
"github.com/nfnt/resize"
|
"github.com/nfnt/resize"
|
||||||
)
|
)
|
||||||
|
|
||||||
func View(w io.Writer, p string) {
|
func ViewAt(w io.Writer, p string, resolution int) {
|
||||||
in, err := os.Open(p)
|
in, err := os.Open(p)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
|
|
@ -32,7 +32,7 @@ func View(w io.Writer, p string) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
printImage(w, 40, src)
|
printImage(w, resolution, src)
|
||||||
fmt.Fprintln(w, "")
|
fmt.Fprintln(w, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,8 +9,8 @@ func TestView(t *testing.T) {
|
||||||
if os.Getenv("INTEGRATION") == "" {
|
if os.Getenv("INTEGRATION") == "" {
|
||||||
t.SkipNow()
|
t.SkipNow()
|
||||||
}
|
}
|
||||||
View(os.Stderr, "./testdata/tofugu.d/a-hiragana-0.png")
|
ViewAt(os.Stderr, "./testdata/tofugu.d/a-hiragana-0.png", 20)
|
||||||
View(os.Stderr, "./testdata/tofugu.d/a-hiragana-0.sm.png")
|
ViewAt(os.Stderr, "./testdata/tofugu.d/a-hiragana-0.sm.png", 20)
|
||||||
View(os.Stderr, "./testdata/tofugu.d/a-hiragana-1.png")
|
ViewAt(os.Stderr, "./testdata/tofugu.d/a-hiragana-1.png", 20)
|
||||||
View(os.Stderr, "./testdata/tofugu.d/a-hiragana-2.png")
|
ViewAt(os.Stderr, "./testdata/tofugu.d/a-hiragana-2.png", 20)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
9
main.go
9
main.go
|
|
@ -17,6 +17,7 @@ type (
|
||||||
LastAnswer(IDU, IDQ) (IDA, Answer)
|
LastAnswer(IDU, IDQ) (IDA, Answer)
|
||||||
Answer(IDA) Answer
|
Answer(IDA) Answer
|
||||||
PushAnswer(IDU, IDQ, Renderable, bool) error
|
PushAnswer(IDU, IDQ, Renderable, bool) error
|
||||||
|
UserResolution(IDU) int
|
||||||
Close()
|
Close()
|
||||||
}
|
}
|
||||||
Question struct {
|
Question struct {
|
||||||
|
|
@ -107,7 +108,7 @@ func Review(db DB, user IDU) ([]IDQ, error) {
|
||||||
|
|
||||||
func ReviewQ(db DB, user IDU, q IDQ) (string, string, error) {
|
func ReviewQ(db DB, user IDU, q IDQ) (string, string, error) {
|
||||||
question := db.Question(q)
|
question := db.Question(q)
|
||||||
fmt.Printf("> Q: %s\n", question.Q)
|
fmt.Printf("> Q: %s\n", question.Q.ToString(db.UserResolution(user)))
|
||||||
fmt.Printf("\n")
|
fmt.Printf("\n")
|
||||||
fmt.Printf("> %+v\n", question.Tags)
|
fmt.Printf("> %+v\n", question.Tags)
|
||||||
var response string
|
var response string
|
||||||
|
|
@ -121,7 +122,7 @@ func ReviewQ(db DB, user IDU, q IDQ) (string, string, error) {
|
||||||
default:
|
default:
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
fmt.Printf("> %s", question.Clues[i])
|
fmt.Printf("> %s", question.Clues[i].ToString(db.UserResolution(user)))
|
||||||
if i+1 < len(question.Clues) {
|
if i+1 < len(question.Clues) {
|
||||||
fmt.Printf(" | /clue for another clue")
|
fmt.Printf(" | /clue for another clue")
|
||||||
}
|
}
|
||||||
|
|
@ -171,12 +172,12 @@ func (q Question) Tagged(tag IDT) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (renderable Renderable) String() string {
|
func (renderable Renderable) ToString(resolution int) string {
|
||||||
s := string(renderable)
|
s := string(renderable)
|
||||||
if !strings.HasPrefix(s, "img:") {
|
if !strings.HasPrefix(s, "img:") {
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
buff := bytes.NewBuffer(nil)
|
buff := bytes.NewBuffer(nil)
|
||||||
View(buff, s[4:])
|
ViewAt(buff, s[4:], resolution)
|
||||||
return string(buff.Bytes())
|
return string(buff.Bytes())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -93,6 +93,7 @@ knowledge:
|
||||||
yu-katakana: {"q":"img:./testdata/tofugu.d/yu-katakana-0.png", "clues":["img:./testdata/tofugu.d/yu-katakana-1.png"], "tags": ["katakana"]}
|
yu-katakana: {"q":"img:./testdata/tofugu.d/yu-katakana-0.png", "clues":["img:./testdata/tofugu.d/yu-katakana-1.png"], "tags": ["katakana"]}
|
||||||
users:
|
users:
|
||||||
breel:
|
breel:
|
||||||
|
resolution: 60
|
||||||
tags:
|
tags:
|
||||||
assignments:
|
assignments:
|
||||||
- hiragana
|
- hiragana
|
||||||
|
|
|
||||||
13
yamldb.go
13
yamldb.go
|
|
@ -20,8 +20,9 @@ type (
|
||||||
Answers map[IDA]Answer
|
Answers map[IDA]Answer
|
||||||
}
|
}
|
||||||
user struct {
|
user struct {
|
||||||
Tags tags
|
Tags tags
|
||||||
Cadence duration
|
Cadence duration
|
||||||
|
Resolution int
|
||||||
}
|
}
|
||||||
tags struct {
|
tags struct {
|
||||||
Assignments []IDT
|
Assignments []IDT
|
||||||
|
|
@ -98,6 +99,14 @@ func (db yamlDB) Next(user IDU, q IDQ) time.Time {
|
||||||
return SM2Next(last, log, db.cadence(user))
|
return SM2Next(last, log, db.cadence(user))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (db yamlDB) UserResolution(user IDU) int {
|
||||||
|
u := db.Users[user]
|
||||||
|
if u.Resolution == 0 {
|
||||||
|
return 40
|
||||||
|
}
|
||||||
|
return u.Resolution
|
||||||
|
}
|
||||||
|
|
||||||
func (db yamlDB) cadence(user IDU) time.Duration {
|
func (db yamlDB) cadence(user IDU) time.Duration {
|
||||||
u := db.Users[user]
|
u := db.Users[user]
|
||||||
if u.Cadence == 0 {
|
if u.Cadence == 0 {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue