diff --git a/internal/view/v1/api.go b/internal/view/v1/api.go index d993652..f39ac08 100644 --- a/internal/view/v1/api.go +++ b/internal/view/v1/api.go @@ -14,6 +14,7 @@ import ( "strings" ) +//nolint:tagliatelle type cond struct { ChanceOfRain string `json:"chanceofrain"` FeelsLikeC int `json:",string"` @@ -49,6 +50,7 @@ type loc struct { Type string `json:"type"` } +//nolint:tagliatelle type resp struct { Data struct { Cur []cond `json:"current_condition"` diff --git a/internal/view/v1/format.go b/internal/view/v1/format.go index d44978e..035acf5 100644 --- a/internal/view/v1/format.go +++ b/internal/view/v1/format.go @@ -274,7 +274,7 @@ func formatRain(c cond) string { func formatCond(cur []string, c cond, current bool) (ret []string) { var icon []string if i, ok := codes[c.WeatherCode]; !ok { - icon = iconUnknown + icon = getIcon("iconUnknown") } else { icon = i } diff --git a/internal/view/v1/icons.go b/internal/view/v1/icons.go index 08017fe..0fef24c 100644 --- a/internal/view/v1/icons.go +++ b/internal/view/v1/icons.go @@ -1,206 +1,210 @@ package v1 -var ( - iconUnknown = []string{ - " .-. ", - " __) ", - " ( ", - " `-’ ", - " • ", - } - - iconSunny = []string{ - "\033[38;5;226m \\ / \033[0m", - "\033[38;5;226m .-. \033[0m", - "\033[38;5;226m ― ( ) ― \033[0m", - "\033[38;5;226m `-’ \033[0m", - "\033[38;5;226m / \\ \033[0m", - } - - iconPartlyCloudy = []string{ - "\033[38;5;226m \\ /\033[0m ", - "\033[38;5;226m _ /\"\"\033[38;5;250m.-. \033[0m", - "\033[38;5;226m \\_\033[38;5;250m( ). \033[0m", - "\033[38;5;226m /\033[38;5;250m(___(__) \033[0m", - " ", - } - - iconCloudy = []string{ - " ", - "\033[38;5;250m .--. \033[0m", - "\033[38;5;250m .-( ). \033[0m", - "\033[38;5;250m (___.__)__) \033[0m", - " ", - } - - iconVeryCloudy = []string{ - " ", - "\033[38;5;240;1m .--. \033[0m", - "\033[38;5;240;1m .-( ). \033[0m", - "\033[38;5;240;1m (___.__)__) \033[0m", - " ", - } - - iconLightShowers = []string{ - "\033[38;5;226m _`/\"\"\033[38;5;250m.-. \033[0m", - "\033[38;5;226m ,\\_\033[38;5;250m( ). \033[0m", - "\033[38;5;226m /\033[38;5;250m(___(__) \033[0m", - "\033[38;5;111m ‘ ‘ ‘ ‘ \033[0m", - "\033[38;5;111m ‘ ‘ ‘ ‘ \033[0m", - } - - iconHeavyShowers = []string{ - "\033[38;5;226m _`/\"\"\033[38;5;240;1m.-. \033[0m", - "\033[38;5;226m ,\\_\033[38;5;240;1m( ). \033[0m", - "\033[38;5;226m /\033[38;5;240;1m(___(__) \033[0m", - "\033[38;5;21;1m ‚‘‚‘‚‘‚‘ \033[0m", - "\033[38;5;21;1m ‚’‚’‚’‚’ \033[0m", - } - - iconLightSnowShowers = []string{ - "\033[38;5;226m _`/\"\"\033[38;5;250m.-. \033[0m", - "\033[38;5;226m ,\\_\033[38;5;250m( ). \033[0m", - "\033[38;5;226m /\033[38;5;250m(___(__) \033[0m", - "\033[38;5;255m * * * \033[0m", - "\033[38;5;255m * * * \033[0m", - } - - iconHeavySnowShowers = []string{ - "\033[38;5;226m _`/\"\"\033[38;5;240;1m.-. \033[0m", - "\033[38;5;226m ,\\_\033[38;5;240;1m( ). \033[0m", - "\033[38;5;226m /\033[38;5;240;1m(___(__) \033[0m", - "\033[38;5;255;1m * * * * \033[0m", - "\033[38;5;255;1m * * * * \033[0m", - } - - iconLightSleetShowers = []string{ - "\033[38;5;226m _`/\"\"\033[38;5;250m.-. \033[0m", - "\033[38;5;226m ,\\_\033[38;5;250m( ). \033[0m", - "\033[38;5;226m /\033[38;5;250m(___(__) \033[0m", - "\033[38;5;111m ‘ \033[38;5;255m*\033[38;5;111m ‘ \033[38;5;255m* \033[0m", - "\033[38;5;255m *\033[38;5;111m ‘ \033[38;5;255m*\033[38;5;111m ‘ \033[0m", - } - - iconThunderyShowers = []string{ - "\033[38;5;226m _`/\"\"\033[38;5;250m.-. \033[0m", - "\033[38;5;226m ,\\_\033[38;5;250m( ). \033[0m", - "\033[38;5;226m /\033[38;5;250m(___(__) \033[0m", - "\033[38;5;228;5m ⚡\033[38;5;111;25m‘‘\033[38;5;228;5m⚡\033[38;5;111;25m‘‘ \033[0m", - "\033[38;5;111m ‘ ‘ ‘ ‘ \033[0m", - } - - iconThunderyHeavyRain = []string{ - "\033[38;5;240;1m .-. \033[0m", - "\033[38;5;240;1m ( ). \033[0m", - "\033[38;5;240;1m (___(__) \033[0m", - "\033[38;5;21;1m ‚‘\033[38;5;228;5m⚡\033[38;5;21;25m‘‚\033[38;5;228;5m⚡\033[38;5;21;25m‚‘ \033[0m", - "\033[38;5;21;1m ‚’‚’\033[38;5;228;5m⚡\033[38;5;21;25m’‚’ \033[0m", - } - - iconThunderySnowShowers = []string{ - "\033[38;5;226m _`/\"\"\033[38;5;250m.-. \033[0m", - "\033[38;5;226m ,\\_\033[38;5;250m( ). \033[0m", - "\033[38;5;226m /\033[38;5;250m(___(__) \033[0m", - "\033[38;5;255m *\033[38;5;228;5m⚡\033[38;5;255;25m*\033[38;5;228;5m⚡\033[38;5;255;25m* \033[0m", - "\033[38;5;255m * * * \033[0m", - } - - iconLightRain = []string{ - "\033[38;5;250m .-. \033[0m", - "\033[38;5;250m ( ). \033[0m", - "\033[38;5;250m (___(__) \033[0m", - "\033[38;5;111m ‘ ‘ ‘ ‘ \033[0m", - "\033[38;5;111m ‘ ‘ ‘ ‘ \033[0m", - } - - iconHeavyRain = []string{ - "\033[38;5;240;1m .-. \033[0m", - "\033[38;5;240;1m ( ). \033[0m", - "\033[38;5;240;1m (___(__) \033[0m", - "\033[38;5;21;1m ‚‘‚‘‚‘‚‘ \033[0m", - "\033[38;5;21;1m ‚’‚’‚’‚’ \033[0m", - } - - iconLightSnow = []string{ - "\033[38;5;250m .-. \033[0m", - "\033[38;5;250m ( ). \033[0m", - "\033[38;5;250m (___(__) \033[0m", - "\033[38;5;255m * * * \033[0m", - "\033[38;5;255m * * * \033[0m", - } - - iconHeavySnow = []string{ - "\033[38;5;240;1m .-. \033[0m", - "\033[38;5;240;1m ( ). \033[0m", - "\033[38;5;240;1m (___(__) \033[0m", - "\033[38;5;255;1m * * * * \033[0m", - "\033[38;5;255;1m * * * * \033[0m", - } - - iconLightSleet = []string{ - "\033[38;5;250m .-. \033[0m", - "\033[38;5;250m ( ). \033[0m", - "\033[38;5;250m (___(__) \033[0m", - "\033[38;5;111m ‘ \033[38;5;255m*\033[38;5;111m ‘ \033[38;5;255m* \033[0m", - "\033[38;5;255m *\033[38;5;111m ‘ \033[38;5;255m*\033[38;5;111m ‘ \033[0m", - } - - iconFog = []string{ - " ", - "\033[38;5;251m _ - _ - _ - \033[0m", - "\033[38;5;251m _ - _ - _ \033[0m", - "\033[38;5;251m _ - _ - _ - \033[0m", - " ", - } - - codes = map[int][]string{ - 113: iconSunny, - 116: iconPartlyCloudy, - 119: iconCloudy, - 122: iconVeryCloudy, - 143: iconFog, - 176: iconLightShowers, - 179: iconLightSleetShowers, - 182: iconLightSleet, - 185: iconLightSleet, - 200: iconThunderyShowers, - 227: iconLightSnow, - 230: iconHeavySnow, - 248: iconFog, - 260: iconFog, - 263: iconLightShowers, - 266: iconLightRain, - 281: iconLightSleet, - 284: iconLightSleet, - 293: iconLightRain, - 296: iconLightRain, - 299: iconHeavyShowers, - 302: iconHeavyRain, - 305: iconHeavyShowers, - 308: iconHeavyRain, - 311: iconLightSleet, - 314: iconLightSleet, - 317: iconLightSleet, - 320: iconLightSnow, - 323: iconLightSnowShowers, - 326: iconLightSnowShowers, - 329: iconHeavySnow, - 332: iconHeavySnow, - 335: iconHeavySnowShowers, - 338: iconHeavySnow, - 350: iconLightSleet, - 353: iconLightShowers, - 356: iconHeavyShowers, - 359: iconHeavyRain, - 362: iconLightSleetShowers, - 365: iconLightSleetShowers, - 368: iconLightSnowShowers, - 371: iconHeavySnowShowers, - 374: iconLightSleetShowers, - 377: iconLightSleet, - 386: iconThunderyShowers, - 389: iconThunderyHeavyRain, - 392: iconThunderySnowShowers, - 395: iconHeavySnowShowers, - } -) +func getIcon(name string) []string { + icon := map[string][]string{ + "iconUnknown": { + " .-. ", + " __) ", + " ( ", + " `-’ ", + " • ", + }, + + "iconSunny": { + "\033[38;5;226m \\ / \033[0m", + "\033[38;5;226m .-. \033[0m", + "\033[38;5;226m ― ( ) ― \033[0m", + "\033[38;5;226m `-’ \033[0m", + "\033[38;5;226m / \\ \033[0m", + }, + + "iconPartlyCloudy": { + "\033[38;5;226m \\ /\033[0m ", + "\033[38;5;226m _ /\"\"\033[38;5;250m.-. \033[0m", + "\033[38;5;226m \\_\033[38;5;250m( ). \033[0m", + "\033[38;5;226m /\033[38;5;250m(___(__) \033[0m", + " ", + }, + + "iconCloudy": { + " ", + "\033[38;5;250m .--. \033[0m", + "\033[38;5;250m .-( ). \033[0m", + "\033[38;5;250m (___.__)__) \033[0m", + " ", + }, + + "iconVeryCloudy": { + " ", + "\033[38;5;240;1m .--. \033[0m", + "\033[38;5;240;1m .-( ). \033[0m", + "\033[38;5;240;1m (___.__)__) \033[0m", + " ", + }, + + "iconLightShowers": { + "\033[38;5;226m _`/\"\"\033[38;5;250m.-. \033[0m", + "\033[38;5;226m ,\\_\033[38;5;250m( ). \033[0m", + "\033[38;5;226m /\033[38;5;250m(___(__) \033[0m", + "\033[38;5;111m ‘ ‘ ‘ ‘ \033[0m", + "\033[38;5;111m ‘ ‘ ‘ ‘ \033[0m", + }, + + "iconHeavyShowers": { + "\033[38;5;226m _`/\"\"\033[38;5;240;1m.-. \033[0m", + "\033[38;5;226m ,\\_\033[38;5;240;1m( ). \033[0m", + "\033[38;5;226m /\033[38;5;240;1m(___(__) \033[0m", + "\033[38;5;21;1m ‚‘‚‘‚‘‚‘ \033[0m", + "\033[38;5;21;1m ‚’‚’‚’‚’ \033[0m", + }, + + "iconLightSnowShowers": { + "\033[38;5;226m _`/\"\"\033[38;5;250m.-. \033[0m", + "\033[38;5;226m ,\\_\033[38;5;250m( ). \033[0m", + "\033[38;5;226m /\033[38;5;250m(___(__) \033[0m", + "\033[38;5;255m * * * \033[0m", + "\033[38;5;255m * * * \033[0m", + }, + + "iconHeavySnowShowers": { + "\033[38;5;226m _`/\"\"\033[38;5;240;1m.-. \033[0m", + "\033[38;5;226m ,\\_\033[38;5;240;1m( ). \033[0m", + "\033[38;5;226m /\033[38;5;240;1m(___(__) \033[0m", + "\033[38;5;255;1m * * * * \033[0m", + "\033[38;5;255;1m * * * * \033[0m", + }, + + "iconLightSleetShowers": { + "\033[38;5;226m _`/\"\"\033[38;5;250m.-. \033[0m", + "\033[38;5;226m ,\\_\033[38;5;250m( ). \033[0m", + "\033[38;5;226m /\033[38;5;250m(___(__) \033[0m", + "\033[38;5;111m ‘ \033[38;5;255m*\033[38;5;111m ‘ \033[38;5;255m* \033[0m", + "\033[38;5;255m *\033[38;5;111m ‘ \033[38;5;255m*\033[38;5;111m ‘ \033[0m", + }, + + "iconThunderyShowers": { + "\033[38;5;226m _`/\"\"\033[38;5;250m.-. \033[0m", + "\033[38;5;226m ,\\_\033[38;5;250m( ). \033[0m", + "\033[38;5;226m /\033[38;5;250m(___(__) \033[0m", + "\033[38;5;228;5m ⚡\033[38;5;111;25m‘‘\033[38;5;228;5m⚡\033[38;5;111;25m‘‘ \033[0m", + "\033[38;5;111m ‘ ‘ ‘ ‘ \033[0m", + }, + + "iconThunderyHeavyRain": { + "\033[38;5;240;1m .-. \033[0m", + "\033[38;5;240;1m ( ). \033[0m", + "\033[38;5;240;1m (___(__) \033[0m", + "\033[38;5;21;1m ‚‘\033[38;5;228;5m⚡\033[38;5;21;25m‘‚\033[38;5;228;5m⚡\033[38;5;21;25m‚‘ \033[0m", + "\033[38;5;21;1m ‚’‚’\033[38;5;228;5m⚡\033[38;5;21;25m’‚’ \033[0m", + }, + + "iconThunderySnowShowers": { + "\033[38;5;226m _`/\"\"\033[38;5;250m.-. \033[0m", + "\033[38;5;226m ,\\_\033[38;5;250m( ). \033[0m", + "\033[38;5;226m /\033[38;5;250m(___(__) \033[0m", + "\033[38;5;255m *\033[38;5;228;5m⚡\033[38;5;255;25m*\033[38;5;228;5m⚡\033[38;5;255;25m* \033[0m", + "\033[38;5;255m * * * \033[0m", + }, + + "iconLightRain": { + "\033[38;5;250m .-. \033[0m", + "\033[38;5;250m ( ). \033[0m", + "\033[38;5;250m (___(__) \033[0m", + "\033[38;5;111m ‘ ‘ ‘ ‘ \033[0m", + "\033[38;5;111m ‘ ‘ ‘ ‘ \033[0m", + }, + + "iconHeavyRain": { + "\033[38;5;240;1m .-. \033[0m", + "\033[38;5;240;1m ( ). \033[0m", + "\033[38;5;240;1m (___(__) \033[0m", + "\033[38;5;21;1m ‚‘‚‘‚‘‚‘ \033[0m", + "\033[38;5;21;1m ‚’‚’‚’‚’ \033[0m", + }, + + "iconLightSnow": { + "\033[38;5;250m .-. \033[0m", + "\033[38;5;250m ( ). \033[0m", + "\033[38;5;250m (___(__) \033[0m", + "\033[38;5;255m * * * \033[0m", + "\033[38;5;255m * * * \033[0m", + }, + + "iconHeavySnow": { + "\033[38;5;240;1m .-. \033[0m", + "\033[38;5;240;1m ( ). \033[0m", + "\033[38;5;240;1m (___(__) \033[0m", + "\033[38;5;255;1m * * * * \033[0m", + "\033[38;5;255;1m * * * * \033[0m", + }, + + "iconLightSleet": { + "\033[38;5;250m .-. \033[0m", + "\033[38;5;250m ( ). \033[0m", + "\033[38;5;250m (___(__) \033[0m", + "\033[38;5;111m ‘ \033[38;5;255m*\033[38;5;111m ‘ \033[38;5;255m* \033[0m", + "\033[38;5;255m *\033[38;5;111m ‘ \033[38;5;255m*\033[38;5;111m ‘ \033[0m", + }, + + "iconFog": { + " ", + "\033[38;5;251m _ - _ - _ - \033[0m", + "\033[38;5;251m _ - _ - _ \033[0m", + "\033[38;5;251m _ - _ - _ - \033[0m", + " ", + }, + } + + return icon[name] +} + +var codes = map[int][]string{ + 113: getIcon("iconSunny"), + 116: getIcon("iconPartlyCloudy"), + 119: getIcon("iconCloudy"), + 122: getIcon("iconVeryCloudy"), + 143: getIcon("iconFog"), + 176: getIcon("iconLightShowers"), + 179: getIcon("iconLightSleetShowers"), + 182: getIcon("iconLightSleet"), + 185: getIcon("iconLightSleet"), + 200: getIcon("iconThunderyShowers"), + 227: getIcon("iconLightSnow"), + 230: getIcon("iconHeavySnow"), + 248: getIcon("iconFog"), + 260: getIcon("iconFog"), + 263: getIcon("iconLightShowers"), + 266: getIcon("iconLightRain"), + 281: getIcon("iconLightSleet"), + 284: getIcon("iconLightSleet"), + 293: getIcon("iconLightRain"), + 296: getIcon("iconLightRain"), + 299: getIcon("iconHeavyShowers"), + 302: getIcon("iconHeavyRain"), + 305: getIcon("iconHeavyShowers"), + 308: getIcon("iconHeavyRain"), + 311: getIcon("iconLightSleet"), + 314: getIcon("iconLightSleet"), + 317: getIcon("iconLightSleet"), + 320: getIcon("iconLightSnow"), + 323: getIcon("iconLightSnowShowers"), + 326: getIcon("iconLightSnowShowers"), + 329: getIcon("iconHeavySnow"), + 332: getIcon("iconHeavySnow"), + 335: getIcon("iconHeavySnowShowers"), + 338: getIcon("iconHeavySnow"), + 350: getIcon("iconLightSleet"), + 353: getIcon("iconLightShowers"), + 356: getIcon("iconHeavyShowers"), + 359: getIcon("iconHeavyRain"), + 362: getIcon("iconLightSleetShowers"), + 365: getIcon("iconLightSleetShowers"), + 368: getIcon("iconLightSnowShowers"), + 371: getIcon("iconHeavySnowShowers"), + 374: getIcon("iconLightSleetShowers"), + 377: getIcon("iconLightSleet"), + 386: getIcon("iconThunderyShowers"), + 389: getIcon("iconThunderyHeavyRain"), + 392: getIcon("iconThunderySnowShowers"), + 395: getIcon("iconHeavySnowShowers"), +}