4
4
"context"
5
5
"encoding/json"
6
6
"errors"
7
+ "fmt"
7
8
"net/http"
9
+ "sort"
8
10
"strings"
9
11
"time"
10
12
@@ -23,30 +25,57 @@ type Asset struct {
23
25
24
26
func (a Asset ) FilterValue () string { return a .Name }
25
27
26
- func Nerds () ([]* Asset , error ) {
28
+ func Fonts () ([]* Asset , error ) {
29
+ assets , err := fetchFontAssets ("ryanoasis/nerd-fonts" )
30
+ if err != nil {
31
+ return nil , err
32
+ }
33
+
34
+ cascadiaCode , err := fetchFontAssets ("microsoft/cascadia-code" )
35
+ if err != nil {
36
+ return assets , nil
37
+ }
38
+
39
+ assets = append (assets , cascadiaCode ... )
40
+ sort .Slice (assets , func (i , j int ) bool { return assets [i ].Name < assets [j ].Name })
41
+
42
+ return assets , nil
43
+ }
44
+
45
+ func CascadiaCode () ([]* Asset , error ) {
46
+ return fetchFontAssets ("microsoft/cascadia-code" )
47
+ }
48
+
49
+ func fetchFontAssets (repo string ) ([]* Asset , error ) {
27
50
ctx , cancelF := context .WithTimeout (context .Background (), time .Second * time .Duration (20 ))
28
51
defer cancelF ()
29
- req , err := http .NewRequestWithContext (ctx , "GET" , "https://api.github.com/repos/ryanoasis/nerd-fonts/releases/latest" , nil )
52
+
53
+ repoURL := "https://api.github.com/repos/" + repo + "/releases/latest"
54
+ req , err := http .NewRequestWithContext (ctx , "GET" , repoURL , nil )
30
55
if err != nil {
31
56
return nil , err
32
57
}
58
+
33
59
req .Header .Add ("Accept" , "application/vnd.github.v3+json" )
34
60
response , err := platform .Client .Do (req )
35
61
if err != nil || response .StatusCode != http .StatusOK {
36
- return nil , errors . New ("failed to get nerd fonts release" )
62
+ return nil , fmt . Errorf ("failed to get %s release" , repo )
37
63
}
64
+
38
65
defer response .Body .Close ()
39
66
var release release
40
67
err = json .NewDecoder (response .Body ).Decode (& release )
41
68
if err != nil {
42
69
return nil , errors .New ("failed to parse nerd fonts release" )
43
70
}
44
- var nerdFonts []* Asset
71
+
72
+ var fonts []* Asset
45
73
for _ , asset := range release .Assets {
46
74
if asset .State == "uploaded" && strings .HasSuffix (asset .Name , ".zip" ) {
47
75
asset .Name = strings .TrimSuffix (asset .Name , ".zip" )
48
- nerdFonts = append (nerdFonts , asset )
76
+ fonts = append (fonts , asset )
49
77
}
50
78
}
51
- return nerdFonts , nil
79
+
80
+ return fonts , nil
52
81
}
0 commit comments