feat(qmkasciigen): get info json from qmk repo

main
sudo pacman -Syu 2023-07-28 18:11:30 +07:00
parent 63a9af7af0
commit f27df1936b
3 changed files with 104 additions and 114 deletions

View File

@ -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

View File

@ -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
}

View File

@ -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}
]
}
}
}