feat(qmkasciigen): get info json from qmk repo
parent
63a9af7af0
commit
f27df1936b
3
Makefile
3
Makefile
|
@ -27,8 +27,7 @@ go:
|
|||
|
||||
draw:
|
||||
$(MAKE) go
|
||||
curl https://raw.githubusercontent.com/qmk/qmk_firmware/master/keyboards/dztech/dz60rgb_wkl/info.json --output dztech_dz60rgb_wkl/info.json
|
||||
go run ./cmd/qmkasciigen/*.go -debug -qmk-info dztech_dz60rgb_wkl/info.json -qmk-keymap=dztech_dz60rgb_wkl/keymaps_json/haunt98/keymap.json -out dztech_dz60rgb_wkl/asciiart/haunt98.txt
|
||||
go run ./cmd/qmkasciigen/*.go -debug -qmk-keyboard dztech/dz60rgb_wkl/v2_1 -qmk-keymap-file dztech_dz60rgb_wkl/keymaps_json/haunt98/keymap.json -out dztech_dz60rgb_wkl/asciiart/haunt98.txt
|
||||
|
||||
dztech_dz60rgb_wkl:
|
||||
# Copy
|
||||
|
|
|
@ -2,60 +2,82 @@ package main
|
|||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"flag"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const (
|
||||
qmkKeyboardInfoURL = "https://raw.githubusercontent.com/qmk/qmk_firmware/master/keyboards/%s/info.json"
|
||||
qmkKeymapURL = "https://raw.githubusercontent.com/qmk/qmk_firmware/master/keyboards/%s/keymaps/%s/keymap.json"
|
||||
)
|
||||
|
||||
var (
|
||||
flagDebug bool
|
||||
flagQMKInfo string
|
||||
flagQMKKeymap string
|
||||
flagOutput string
|
||||
ErrEmptyQMKInfo = errors.New("empty QMK info")
|
||||
|
||||
flagDebug bool
|
||||
flagQMKKeyboard string
|
||||
flagQMKInfoFle string
|
||||
flagQMKKeymapFile string
|
||||
flagOutput string
|
||||
)
|
||||
|
||||
func init() {
|
||||
flag.BoolVar(&flagDebug, "debug", false, "Debug mode, print eveyrthing")
|
||||
flag.StringVar(&flagQMKInfo, "qmk-info", "", "QMK info json file")
|
||||
flag.StringVar(&flagQMKKeymap, "qmk-keymap", "", "QMK keymap json file")
|
||||
flag.StringVar(&flagQMKKeyboard, "qmk-keyboard", "", "QMK keyboard name")
|
||||
flag.StringVar(&flagQMKInfoFle, "qmk-info-file", "", "QMK info json file")
|
||||
flag.StringVar(&flagQMKKeymapFile, "qmk-keymap-file", "", "QMK keymap json file")
|
||||
flag.StringVar(&flagOutput, "out", "", "Output file")
|
||||
}
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
|
||||
if flagQMKInfo == "" {
|
||||
log.Fatalln("Flag --qmk-info is empty")
|
||||
}
|
||||
|
||||
if flagQMKKeymap == "" {
|
||||
log.Fatalln("Flag --qmk-keymap is empty")
|
||||
}
|
||||
|
||||
if flagDebug {
|
||||
log.Printf("flagQMKInfo: [%s]\n", flagQMKInfo)
|
||||
log.Printf("flagQMKKeymap: [%s]\n", flagQMKKeymap)
|
||||
log.Printf("flagQMKInfo: [%s]\n", flagQMKInfoFle)
|
||||
log.Printf("flagQMKKeymap: [%s]\n", flagQMKKeymapFile)
|
||||
log.Printf("flagOutput: [%s]\n", flagOutput)
|
||||
}
|
||||
|
||||
bytesInfo, err := os.ReadFile(flagQMKInfo)
|
||||
if err != nil {
|
||||
log.Fatalln("Failed to read file", flagQMKInfo, err)
|
||||
}
|
||||
|
||||
qmkInfo := QMKInfo{}
|
||||
if err := json.Unmarshal(bytesInfo, &qmkInfo); err != nil {
|
||||
log.Fatalln("Failed to json unmarshal", flagQMKInfo, err)
|
||||
// -qmk-keyboard first, then fallback to -qmk-info-file
|
||||
if flagQMKKeyboard != "" {
|
||||
var err error
|
||||
qmkInfo, err = getQMKInfo(flagQMKKeyboard, flagDebug)
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to get QMK info [%s]: %s\n", flagQMKKeyboard, err)
|
||||
}
|
||||
} else {
|
||||
if flagQMKInfoFle == "" {
|
||||
log.Fatalln("Flag -qmk-info-file is empty")
|
||||
}
|
||||
|
||||
bytesInfo, err := os.ReadFile(flagQMKInfoFle)
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to read file [%s]: %s\n", flagQMKInfoFle, err)
|
||||
}
|
||||
|
||||
if err := json.Unmarshal(bytesInfo, &qmkInfo); err != nil {
|
||||
log.Fatalf("Failed to json unmarshal [%s]: %s\n", flagQMKInfoFle, err)
|
||||
}
|
||||
}
|
||||
|
||||
bytesKeymap, err := os.ReadFile(flagQMKKeymap)
|
||||
if flagQMKKeymapFile == "" {
|
||||
log.Fatalln("Flag -qmk-keymap is empty")
|
||||
}
|
||||
|
||||
bytesKeymap, err := os.ReadFile(flagQMKKeymapFile)
|
||||
if err != nil {
|
||||
log.Fatalln("Failed to read file", flagQMKKeymap, err)
|
||||
log.Fatalln("Failed to read file", flagQMKKeymapFile, err)
|
||||
}
|
||||
|
||||
qmkKeymap := QMKKeymap{}
|
||||
if err := json.Unmarshal(bytesKeymap, &qmkKeymap); err != nil {
|
||||
log.Fatalln("Failed to json unmarshal", flagQMKKeymap, err)
|
||||
log.Fatalln("Failed to json unmarshal", flagQMKKeymapFile, err)
|
||||
}
|
||||
|
||||
result := Draw(
|
||||
|
@ -73,3 +95,57 @@ func main() {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
func getQMKInfo(qmkKeyboard string, flagDebug bool) (QMKInfo, error) {
|
||||
qmkKeyboard = strings.TrimSpace(qmkKeyboard)
|
||||
if qmkKeyboard == "" {
|
||||
return QMKInfo{}, ErrEmptyQMKInfo
|
||||
}
|
||||
|
||||
kbParts := strings.Split(qmkKeyboard, "/")
|
||||
for i := 1; i <= len(kbParts); i++ {
|
||||
kb := strings.Join(kbParts[:i], "/")
|
||||
|
||||
url := fmt.Sprintf(qmkKeyboardInfoURL, kb)
|
||||
|
||||
// nolint:noctx,gosec
|
||||
httpRsp, err := http.Get(url)
|
||||
if err != nil {
|
||||
if flagDebug {
|
||||
log.Printf("Failed to http get [%s]: %s\n", url, err)
|
||||
}
|
||||
|
||||
continue
|
||||
}
|
||||
|
||||
data, err := io.ReadAll(httpRsp.Body)
|
||||
if err != nil {
|
||||
if flagDebug {
|
||||
log.Printf("Failed to read all body [%s]: %s\n", url, err)
|
||||
}
|
||||
|
||||
continue
|
||||
}
|
||||
|
||||
qmkInfo := QMKInfo{}
|
||||
if err := json.Unmarshal(data, &qmkInfo); err != nil {
|
||||
if flagDebug {
|
||||
log.Printf("Failed to json unmarshal [%s]: %s\n", url, err)
|
||||
}
|
||||
|
||||
continue
|
||||
}
|
||||
|
||||
if len(qmkInfo.Layouts) == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
if flagDebug {
|
||||
log.Printf("Found QMK info for [%s]\n", kb)
|
||||
}
|
||||
|
||||
return qmkInfo, nil
|
||||
}
|
||||
|
||||
return QMKInfo{}, ErrEmptyQMKInfo
|
||||
}
|
||||
|
|
|
@ -1,85 +0,0 @@
|
|||
{
|
||||
"keyboard_name": "DZ60RGB_WKL",
|
||||
"manufacturer": "DZTECH",
|
||||
"url": "",
|
||||
"maintainer": "dztech",
|
||||
"usb": {
|
||||
"vid": "0x445A"
|
||||
},
|
||||
"community_layouts": ["60_tsangan_hhkb"],
|
||||
"layout_aliases": {
|
||||
"LAYOUT_HHKB": "LAYOUT_60_tsangan_hhkb"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT_60_tsangan_hhkb": {
|
||||
"layout": [
|
||||
{"matrix": [0, 0], "x": 0, "y": 0},
|
||||
{"matrix": [0, 1], "x": 1, "y": 0},
|
||||
{"matrix": [0, 2], "x": 2, "y": 0},
|
||||
{"matrix": [0, 3], "x": 3, "y": 0},
|
||||
{"matrix": [0, 4], "x": 4, "y": 0},
|
||||
{"matrix": [0, 5], "x": 5, "y": 0},
|
||||
{"matrix": [0, 6], "x": 6, "y": 0},
|
||||
{"matrix": [0, 7], "x": 7, "y": 0},
|
||||
{"matrix": [0, 8], "x": 8, "y": 0},
|
||||
{"matrix": [0, 9], "x": 9, "y": 0},
|
||||
{"matrix": [0, 10], "x": 10, "y": 0},
|
||||
{"matrix": [0, 11], "x": 11, "y": 0},
|
||||
{"matrix": [0, 12], "x": 12, "y": 0},
|
||||
{"matrix": [0, 13], "x": 13, "y": 0},
|
||||
{"matrix": [2, 12], "x": 14, "y": 0},
|
||||
|
||||
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
|
||||
{"matrix": [1, 1], "x": 1.5, "y": 1},
|
||||
{"matrix": [1, 2], "x": 2.5, "y": 1},
|
||||
{"matrix": [1, 3], "x": 3.5, "y": 1},
|
||||
{"matrix": [1, 4], "x": 4.5, "y": 1},
|
||||
{"matrix": [1, 5], "x": 5.5, "y": 1},
|
||||
{"matrix": [1, 6], "x": 6.5, "y": 1},
|
||||
{"matrix": [1, 7], "x": 7.5, "y": 1},
|
||||
{"matrix": [1, 8], "x": 8.5, "y": 1},
|
||||
{"matrix": [1, 9], "x": 9.5, "y": 1},
|
||||
{"matrix": [1, 10], "x": 10.5, "y": 1},
|
||||
{"matrix": [1, 11], "x": 11.5, "y": 1},
|
||||
{"matrix": [1, 12], "x": 12.5, "y": 1},
|
||||
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
|
||||
|
||||
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
|
||||
{"matrix": [2, 1], "x": 1.75, "y": 2},
|
||||
{"matrix": [2, 2], "x": 2.75, "y": 2},
|
||||
{"matrix": [2, 3], "x": 3.75, "y": 2},
|
||||
{"matrix": [2, 4], "x": 4.75, "y": 2},
|
||||
{"matrix": [2, 5], "x": 5.75, "y": 2},
|
||||
{"matrix": [2, 6], "x": 6.75, "y": 2},
|
||||
{"matrix": [2, 7], "x": 7.75, "y": 2},
|
||||
{"matrix": [2, 8], "x": 8.75, "y": 2},
|
||||
{"matrix": [2, 9], "x": 9.75, "y": 2},
|
||||
{"matrix": [2, 10], "x": 10.75, "y": 2},
|
||||
{"matrix": [2, 11], "x": 11.75, "y": 2},
|
||||
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
|
||||
|
||||
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
|
||||
{"matrix": [3, 1], "x": 2.25, "y": 3},
|
||||
{"matrix": [3, 2], "x": 3.25, "y": 3},
|
||||
{"matrix": [3, 3], "x": 4.25, "y": 3},
|
||||
{"matrix": [3, 4], "x": 5.25, "y": 3},
|
||||
{"matrix": [3, 5], "x": 6.25, "y": 3},
|
||||
{"matrix": [3, 6], "x": 7.25, "y": 3},
|
||||
{"matrix": [3, 7], "x": 8.25, "y": 3},
|
||||
{"matrix": [3, 8], "x": 9.25, "y": 3},
|
||||
{"matrix": [3, 9], "x": 10.25, "y": 3},
|
||||
{"matrix": [3, 10], "x": 11.25, "y": 3},
|
||||
{"matrix": [3, 11], "x": 12.25, "y": 3, "w": 1.75},
|
||||
{"matrix": [3, 13], "x": 14, "y": 3},
|
||||
|
||||
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
|
||||
{"matrix": [4, 1], "x": 1.5, "y": 4},
|
||||
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
|
||||
{"matrix": [4, 5], "x": 4, "y": 4, "w": 7},
|
||||
{"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
|
||||
{"matrix": [4, 11], "x": 12.5, "y": 4},
|
||||
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue