feat(qmkasciigen): get remote keymap
parent
f27df1936b
commit
fabcc31a47
2
Makefile
2
Makefile
|
@ -27,7 +27,7 @@ go:
|
|||
|
||||
draw:
|
||||
$(MAKE) go
|
||||
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
|
||||
go run ./cmd/qmkasciigen/*.go -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
|
||||
|
|
|
@ -18,11 +18,15 @@ const (
|
|||
)
|
||||
|
||||
var (
|
||||
ErrEmptyQMKInfo = errors.New("empty QMK info")
|
||||
ErrEmptyQMKInfo = errors.New("empty QMK info")
|
||||
ErrEmptyQMKKeymap = errors.New("empty QMK keymap")
|
||||
ErrEmptyQMKInfoFile = errors.New("empty QMK info file")
|
||||
ErrEmptyQMKKeymapFile = errors.New("empty QMK keymap file")
|
||||
|
||||
flagDebug bool
|
||||
flagQMKKeyboard string
|
||||
flagQMKInfoFle string
|
||||
flagQMKKeymap string
|
||||
flagQMKInfoFile string
|
||||
flagQMKKeymapFile string
|
||||
flagOutput string
|
||||
)
|
||||
|
@ -30,7 +34,8 @@ var (
|
|||
func init() {
|
||||
flag.BoolVar(&flagDebug, "debug", false, "Debug mode, print eveyrthing")
|
||||
flag.StringVar(&flagQMKKeyboard, "qmk-keyboard", "", "QMK keyboard name")
|
||||
flag.StringVar(&flagQMKInfoFle, "qmk-info-file", "", "QMK info json file")
|
||||
flag.StringVar(&flagQMKKeymap, "qmk-keymap", "default", "QMK keymap name")
|
||||
flag.StringVar(&flagQMKInfoFile, "qmk-info-file", "", "QMK info json file")
|
||||
flag.StringVar(&flagQMKKeymapFile, "qmk-keymap-file", "", "QMK keymap json file")
|
||||
flag.StringVar(&flagOutput, "out", "", "Output file")
|
||||
}
|
||||
|
@ -38,46 +43,21 @@ func init() {
|
|||
func main() {
|
||||
flag.Parse()
|
||||
if flagDebug {
|
||||
log.Printf("flagQMKInfo: [%s]\n", flagQMKInfoFle)
|
||||
log.Printf("flagQMKKeymap: [%s]\n", flagQMKKeymapFile)
|
||||
log.Printf("flagQMKKeyboard: [%s]\n", flagQMKKeyboard)
|
||||
log.Printf("flagQMKKeymap: [%s]\n", flagQMKKeymap)
|
||||
log.Printf("flagQMKInfoFile: [%s]\n", flagQMKInfoFile)
|
||||
log.Printf("flagQMKKeymapFile: [%s]\n", flagQMKKeymapFile)
|
||||
log.Printf("flagOutput: [%s]\n", flagOutput)
|
||||
}
|
||||
|
||||
qmkInfo := QMKInfo{}
|
||||
// -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)
|
||||
}
|
||||
}
|
||||
|
||||
if flagQMKKeymapFile == "" {
|
||||
log.Fatalln("Flag -qmk-keymap is empty")
|
||||
}
|
||||
|
||||
bytesKeymap, err := os.ReadFile(flagQMKKeymapFile)
|
||||
qmkInfo, err := wrapGetQMKInfo(flagQMKKeyboard, flagQMKInfoFile, flagDebug)
|
||||
if err != nil {
|
||||
log.Fatalln("Failed to read file", flagQMKKeymapFile, err)
|
||||
log.Fatalln("Failed to get QMK info", err)
|
||||
}
|
||||
|
||||
qmkKeymap := QMKKeymap{}
|
||||
if err := json.Unmarshal(bytesKeymap, &qmkKeymap); err != nil {
|
||||
log.Fatalln("Failed to json unmarshal", flagQMKKeymapFile, err)
|
||||
qmkKeymap, err := wrapGetQMKKeymap(flagQMKKeyboard, flagQMKKeymap, flagQMKKeymapFile, flagDebug)
|
||||
if err != nil {
|
||||
log.Fatalln("Failed to get QMK keymap", err)
|
||||
}
|
||||
|
||||
result := Draw(
|
||||
|
@ -96,7 +76,37 @@ func main() {
|
|||
}
|
||||
}
|
||||
|
||||
func getQMKInfo(qmkKeyboard string, flagDebug bool) (QMKInfo, error) {
|
||||
// Remote first, fallback local later
|
||||
func wrapGetQMKInfo(qmkKeyboardStr, qmkInfoFile string, debug bool) (QMKInfo, error) {
|
||||
if qmkKeyboardStr != "" {
|
||||
qmkInfo, err := getQMKInfo(qmkKeyboardStr, debug)
|
||||
if err != nil {
|
||||
if debug {
|
||||
log.Printf("Failed to get QMK info [%s]: %s\n", qmkKeyboardStr, err)
|
||||
}
|
||||
} else {
|
||||
return qmkInfo, nil
|
||||
}
|
||||
}
|
||||
|
||||
if qmkInfoFile == "" {
|
||||
return QMKInfo{}, ErrEmptyQMKInfoFile
|
||||
}
|
||||
|
||||
bytesInfo, err := os.ReadFile(qmkInfoFile)
|
||||
if err != nil {
|
||||
return QMKInfo{}, fmt.Errorf("os: failed to read file [%s]: %w", qmkInfoFile, err)
|
||||
}
|
||||
|
||||
qmkInfo := QMKInfo{}
|
||||
if err := json.Unmarshal(bytesInfo, &qmkInfo); err != nil {
|
||||
return QMKInfo{}, fmt.Errorf("json: failed to unmarshal [%s]: %w", qmkInfoFile, err)
|
||||
}
|
||||
|
||||
return qmkInfo, nil
|
||||
}
|
||||
|
||||
func getQMKInfo(qmkKeyboard string, debug bool) (QMKInfo, error) {
|
||||
qmkKeyboard = strings.TrimSpace(qmkKeyboard)
|
||||
if qmkKeyboard == "" {
|
||||
return QMKInfo{}, ErrEmptyQMKInfo
|
||||
|
@ -111,7 +121,7 @@ func getQMKInfo(qmkKeyboard string, flagDebug bool) (QMKInfo, error) {
|
|||
// nolint:noctx,gosec
|
||||
httpRsp, err := http.Get(url)
|
||||
if err != nil {
|
||||
if flagDebug {
|
||||
if debug {
|
||||
log.Printf("Failed to http get [%s]: %s\n", url, err)
|
||||
}
|
||||
|
||||
|
@ -120,7 +130,7 @@ func getQMKInfo(qmkKeyboard string, flagDebug bool) (QMKInfo, error) {
|
|||
|
||||
data, err := io.ReadAll(httpRsp.Body)
|
||||
if err != nil {
|
||||
if flagDebug {
|
||||
if debug {
|
||||
log.Printf("Failed to read all body [%s]: %s\n", url, err)
|
||||
}
|
||||
|
||||
|
@ -129,7 +139,7 @@ func getQMKInfo(qmkKeyboard string, flagDebug bool) (QMKInfo, error) {
|
|||
|
||||
qmkInfo := QMKInfo{}
|
||||
if err := json.Unmarshal(data, &qmkInfo); err != nil {
|
||||
if flagDebug {
|
||||
if debug {
|
||||
log.Printf("Failed to json unmarshal [%s]: %s\n", url, err)
|
||||
}
|
||||
|
||||
|
@ -140,8 +150,8 @@ func getQMKInfo(qmkKeyboard string, flagDebug bool) (QMKInfo, error) {
|
|||
continue
|
||||
}
|
||||
|
||||
if flagDebug {
|
||||
log.Printf("Found QMK info for [%s]\n", kb)
|
||||
if debug {
|
||||
log.Printf("Found QMK info [%s]\n", url)
|
||||
}
|
||||
|
||||
return qmkInfo, nil
|
||||
|
@ -149,3 +159,88 @@ func getQMKInfo(qmkKeyboard string, flagDebug bool) (QMKInfo, error) {
|
|||
|
||||
return QMKInfo{}, ErrEmptyQMKInfo
|
||||
}
|
||||
|
||||
// Remote first, fallback local later
|
||||
func wrapGetQMKKeymap(qmkKeyboardStr, qmkKeymapStr, qmkKeymapFile string, debug bool) (QMKKeymap, error) {
|
||||
if qmkKeyboardStr != "" && qmkKeymapStr != "" {
|
||||
qmkKeymap, err := getQMKKeymap(qmkKeyboardStr, qmkKeymapStr, debug)
|
||||
if err != nil {
|
||||
if debug {
|
||||
log.Printf("Failed to get QMK keymap [%s] [%s]: %s\n", qmkKeyboardStr, qmkKeymapStr, err)
|
||||
}
|
||||
} else {
|
||||
return qmkKeymap, nil
|
||||
}
|
||||
}
|
||||
|
||||
if qmkKeymapFile == "" {
|
||||
return QMKKeymap{}, ErrEmptyQMKKeymapFile
|
||||
}
|
||||
|
||||
bytesKeymap, err := os.ReadFile(qmkKeymapFile)
|
||||
if err != nil {
|
||||
return QMKKeymap{}, fmt.Errorf("os: failed to read file [%s]: %w", qmkKeymapFile, err)
|
||||
}
|
||||
|
||||
qmkKeymap := QMKKeymap{}
|
||||
if err := json.Unmarshal(bytesKeymap, &qmkKeymap); err != nil {
|
||||
return QMKKeymap{}, fmt.Errorf("json: failed to unmarshal [%s]: %w", qmkKeymapFile, err)
|
||||
}
|
||||
|
||||
return qmkKeymap, nil
|
||||
}
|
||||
|
||||
func getQMKKeymap(qmkKeyboard, qmkKeymap string, debug bool) (QMKKeymap, error) {
|
||||
qmkKeyboard = strings.TrimSpace(qmkKeyboard)
|
||||
qmkKeymap = strings.TrimSpace(qmkKeymap)
|
||||
if qmkKeyboard == "" || qmkKeymap == "" {
|
||||
return QMKKeymap{}, ErrEmptyQMKKeymap
|
||||
}
|
||||
|
||||
kbParts := strings.Split(qmkKeyboard, "/")
|
||||
for i := 1; i <= len(kbParts); i++ {
|
||||
kb := strings.Join(kbParts[:i], "/")
|
||||
|
||||
url := fmt.Sprintf(qmkKeymapURL, kb, qmkKeymap)
|
||||
|
||||
// nolint:noctx,gosec
|
||||
httpRsp, err := http.Get(url)
|
||||
if err != nil {
|
||||
if debug {
|
||||
log.Printf("Failed to http get [%s]: %s\n", url, err)
|
||||
}
|
||||
|
||||
continue
|
||||
}
|
||||
|
||||
data, err := io.ReadAll(httpRsp.Body)
|
||||
if err != nil {
|
||||
if debug {
|
||||
log.Printf("Failed to read all body [%s]: %s\n", url, err)
|
||||
}
|
||||
|
||||
continue
|
||||
}
|
||||
|
||||
qmkKeymap := QMKKeymap{}
|
||||
if err := json.Unmarshal(data, &qmkKeymap); err != nil {
|
||||
if debug {
|
||||
log.Printf("Failed to json unmarshal [%s]: %s\n", url, err)
|
||||
}
|
||||
|
||||
continue
|
||||
}
|
||||
|
||||
if len(qmkKeymap.Layers) == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
if debug {
|
||||
log.Printf("Found QMK keymap [%s]\n", url)
|
||||
}
|
||||
|
||||
return qmkKeymap, nil
|
||||
}
|
||||
|
||||
return QMKKeymap{}, ErrEmptyQMKKeymap
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue