feat(font): display font families

resolves #4168
This commit is contained in:
Jan De Dobbeleer 2023-08-27 11:01:17 +02:00 committed by Jan De Dobbeleer
parent b2f3a43d19
commit cac268bcca
2 changed files with 38 additions and 16 deletions

View file

@ -29,7 +29,7 @@ type loadMsg []*Asset
type zipMsg []byte
type successMsg int
type successMsg []string
type errMsg error
@ -69,12 +69,13 @@ const (
)
type main struct {
spinner spinner.Model
list *list.Model
system bool
font string
state state
err error
spinner spinner.Model
list *list.Model
system bool
font string
state state
err error
families []string
}
func (m *main) buildFontList(nerdFonts []*Asset) {
@ -124,12 +125,12 @@ func installLocalFontZIP(zipFile string, user bool) {
}
func installFontZIP(zipFile []byte, user bool) {
err := InstallZIP(zipFile, user)
families, err := InstallZIP(zipFile, user)
if err != nil {
program.Send(errMsg(err))
return
}
program.Send(successMsg(0))
program.Send(successMsg(families))
}
func (m *main) Init() tea.Cmd {
@ -216,6 +217,7 @@ func (m *main) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
case successMsg:
m.state = done
m.families = msg
return m, tea.Quit
case errMsg:
@ -251,7 +253,13 @@ func (m *main) View() string {
case quit:
return textStyle.Render("No need to install a new font? That's cool.")
case done:
return textStyle.Render(fmt.Sprintf("Successfully installed %s 🚀", m.font))
var builder strings.Builder
builder.WriteString(fmt.Sprintf("Successfully installed %s 🚀\n\n", m.font))
builder.WriteString("The following font families are now available for configuration:\n")
for _, family := range m.families {
builder.WriteString(fmt.Sprintf(" • %s\n", family))
}
return textStyle.Render(builder.String())
}
return ""
}

View file

@ -10,12 +10,22 @@ import (
"strings"
)
func InstallZIP(data []byte, user bool) error {
func contains[S ~[]E, E comparable](s S, e E) bool {
for _, a := range s {
if a == e {
return true
}
}
return false
}
func InstallZIP(data []byte, user bool) ([]string, error) {
var families []string
bytesReader := bytes.NewReader(data)
zipReader, err := zip.NewReader(bytesReader, int64(bytesReader.Len()))
if err != nil {
return err
return families, err
}
fonts := make(map[string]*Font)
@ -23,13 +33,13 @@ func InstallZIP(data []byte, user bool) error {
for _, zf := range zipReader.File {
rc, err := zf.Open()
if err != nil {
return err
return families, err
}
defer rc.Close()
data, err := io.ReadAll(rc)
if err != nil {
return err
return families, err
}
fontData, err := newFont(zf.Name, data)
@ -51,9 +61,13 @@ func InstallZIP(data []byte, user bool) error {
for _, font := range fonts {
if err = install(font, user); err != nil {
return err
return families, err
}
if !contains(families, font.Family) {
families = append(families, font.Family)
}
}
return nil
return families, nil
}