Fix up app metadata - spaces/uppercase in tags meant these apps wouldn't have appeared in some searches

master
Gordon Williams 2025-02-04 12:38:56 +00:00
parent 0208268bf2
commit 9b224171e1
36 changed files with 47 additions and 47 deletions

View File

@ -271,7 +271,7 @@ and which gives information about the app for the Launcher.
// 'locale' - provides 'locale' library for language-specific date/distance/etc // 'locale' - provides 'locale' library for language-specific date/distance/etc
// (a version of 'locale' is included in the firmware) // (a version of 'locale' is included in the firmware)
// 'defaultconfig' - a set of apps that will can be installed and will wipe out all previously installed apps // 'defaultconfig' - a set of apps that will can be installed and will wipe out all previously installed apps
"tags": "", // comma separated tag list for searching "tags": "", // comma separated tag list for searching (don't include uppercase or spaces)
// common types are: // common types are:
// 'clock' - it's a clock // 'clock' - it's a clock
// 'widget' - it is (or provides) a widget // 'widget' - it is (or provides) a widget

View File

@ -5,7 +5,7 @@
"version": "0.02", "version": "0.02",
"description": "A UI/UX for espruino smartwatches, displays dinamically calc. x,y coordinates.", "description": "A UI/UX for espruino smartwatches, displays dinamically calc. x,y coordinates.",
"icon": "app.png", "icon": "app.png",
"tags": "Color,input,buttons,touch,UI", "tags": "color,input,buttons,touch,ui",
"supports": ["BANGLEJS"], "supports": ["BANGLEJS"],
"readme": "README.md", "readme": "README.md",
"screenshots": [{"url":"UI4swatch_icon.png"},{"url":"UI4swatch_s1.png"}], "screenshots": [{"url":"UI4swatch_icon.png"},{"url":"UI4swatch_s1.png"}],

View File

@ -4,8 +4,8 @@
"version": "0.04", "version": "0.04",
"description": "Wrist mounted ukulele chords", "description": "Wrist mounted ukulele chords",
"icon": "app.png", "icon": "app.png",
"tags": "uke, chords", "tags": "uke,chords",
"supports" : ["BANGLEJS2"], "supports" : ["BANGLEJS2"],
"readme": "README.md", "readme": "README.md",
"storage": [ "storage": [
{"name":"Uke.app.js","url":"app.js"}, {"name":"Uke.app.js","url":"app.js"},

View File

@ -6,7 +6,7 @@
"description": "A fully featured watch face with a playable game on the side.", "description": "A fully featured watch face with a playable game on the side.",
"readme":"README.md", "readme":"README.md",
"type": "clock", "type": "clock",
"tags": "clock, game", "tags": "clock,game",
"supports" : ["BANGLEJS2"], "supports" : ["BANGLEJS2"],
"storage": [ "storage": [
{"name":"bblobface.app.js","url":"app.js"}, {"name":"bblobface.app.js","url":"app.js"},

View File

@ -5,7 +5,7 @@
"version": "0.01", "version": "0.01",
"description": "Aerobic fitness test created by Léger & Lambert", "description": "Aerobic fitness test created by Léger & Lambert",
"icon": "beeptest.png", "icon": "beeptest.png",
"tags": "Health", "tags": "health",
"supports": ["BANGLEJS2"], "supports": ["BANGLEJS2"],
"readme": "README.md", "readme": "README.md",
"storage": [ "storage": [

View File

@ -6,7 +6,7 @@
"description": "Bangle version of a popular word search game", "description": "Bangle version of a popular word search game",
"supports" : ["BANGLEJS2"], "supports" : ["BANGLEJS2"],
"readme": "README.md", "readme": "README.md",
"tags": "game, text", "tags": "game,text",
"storage": [ "storage": [
{"name":"bordle.app.js","url":"bordle.app.js"}, {"name":"bordle.app.js","url":"bordle.app.js"},
{"name":"wordlencr.txt","url":"wordlencr.txt"}, {"name":"wordlencr.txt","url":"wordlencr.txt"},

View File

@ -6,7 +6,7 @@
"description": "Show the current and upcoming events synchronized from Gadgetbridge", "description": "Show the current and upcoming events synchronized from Gadgetbridge",
"icon": "calclock.png", "icon": "calclock.png",
"type": "clock", "type": "clock",
"tags": "clock agenda", "tags": "clock,agenda",
"supports": ["BANGLEJS2"], "supports": ["BANGLEJS2"],
"readme": "README.md", "readme": "README.md",
"storage": [ "storage": [

View File

@ -6,7 +6,7 @@
"icon": "app.png", "icon": "app.png",
"version": "0.13", "version": "0.13",
"type": "clock", "type": "clock",
"tags": "clock, weather, cassio, retro", "tags": "clock,weather,cassio,retro",
"supports": ["BANGLEJS2"], "supports": ["BANGLEJS2"],
"allow_emulator": true, "allow_emulator": true,
"readme": "README.md", "readme": "README.md",

View File

@ -3,7 +3,7 @@
"version":"0.01", "version":"0.01",
"description": "Record time active on a task, course, work or anything really.", "description": "Record time active on a task, course, work or anything really.",
"icon": "app.png", "icon": "app.png",
"tags": "logging, record, work, tasks", "tags": "logging,record,work,tasks",
"supports" : ["BANGLEJS2"], "supports" : ["BANGLEJS2"],
"readme": "README.md", "readme": "README.md",
"screenshots" : [ { "url":"dump.png"}, { "url":"dump1.png" }, { "url":"dump2.png" }, { "url":"dump3.png" }, { "url":"dump4.png" }, { "url":"dump5.png" }, { "url":"dump6.png" } ], "screenshots" : [ { "url":"dump.png"}, { "url":"dump1.png" }, { "url":"dump2.png" }, { "url":"dump3.png" }, { "url":"dump4.png" }, { "url":"dump5.png" }, { "url":"dump6.png" } ],

View File

@ -5,7 +5,7 @@
"version": "0.03", "version": "0.03",
"description": "Displays RGB565 and RGB888 colors, its name and code in screen.", "description": "Displays RGB565 and RGB888 colors, its name and code in screen.",
"icon": "app.png", "icon": "app.png",
"tags": "Color,input,buttons,touch,UI", "tags": "color,input,buttons,touch,ui",
"supports": ["BANGLEJS"], "supports": ["BANGLEJS"],
"readme": "README.md", "readme": "README.md",
"storage": [ "storage": [

View File

@ -3,7 +3,7 @@
"version":"0.01", "version":"0.01",
"description": "Delay the locking of the screen to 5 seconds after the backlight turns off.", "description": "Delay the locking of the screen to 5 seconds after the backlight turns off.",
"icon": "app.png", "icon": "app.png",
"tags": "settings, configuration, backlight, touchscreen, screen", "tags": "settings,configuration,backlight,touchscreen,screen",
"type": "bootloader", "type": "bootloader",
"supports" : ["BANGLEJS2"], "supports" : ["BANGLEJS2"],
"readme": "README.md", "readme": "README.md",

View File

@ -6,7 +6,7 @@
"icon": "app.png", "icon": "app.png",
"version": "0.01", "version": "0.01",
"type": "clock", "type": "clock",
"tags": "clock, weather, dino, trex, chrome", "tags": "clock,weather,dino,trex,chrome",
"supports": ["BANGLEJS2"], "supports": ["BANGLEJS2"],
"allow_emulator": true, "allow_emulator": true,
"readme": "README.md", "readme": "README.md",

View File

@ -6,7 +6,7 @@
"version": "0.02", "version": "0.02",
"description": "Follow The Recipe (FTR) is a bangle.js app to follow a recipe step by step", "description": "Follow The Recipe (FTR) is a bangle.js app to follow a recipe step by step",
"type": "app", "type": "app",
"tags": "tool, tools, cook", "tags": "tool,tools,cook",
"supports": [ "supports": [
"BANGLEJS2" "BANGLEJS2"
], ],

View File

@ -5,7 +5,7 @@
"description": "A simple way to initiate Google Assistant on Android. Intents must be enabled in Gadgetbridge.", "description": "A simple way to initiate Google Assistant on Android. Intents must be enabled in Gadgetbridge.",
"icon": "app.png", "icon": "app.png",
"type": "app", "type": "app",
"tags": "tool, voice, tasker", "tags": "tool,voice,tasker",
"supports": ["BANGLEJS","BANGLEJS2"], "supports": ["BANGLEJS","BANGLEJS2"],
"allow_emulator": false, "allow_emulator": false,
"storage": [ "storage": [

View File

@ -4,7 +4,7 @@
"version":"0.01", "version":"0.01",
"description": "Disconnect from your android device by running this app. The app will forward you to your clock face immediately after triggering the command. (Gadgetbridge nightly required until version 82 is released)", "description": "Disconnect from your android device by running this app. The app will forward you to your clock face immediately after triggering the command. (Gadgetbridge nightly required until version 82 is released)",
"icon": "app.png", "icon": "app.png",
"tags": "android, gadgetbridge, bluetooth, bt", "tags": "android,gadgetbridge,bluetooth,bt",
"supports" : ["BANGLEJS", "BANGLEJS2"], "supports" : ["BANGLEJS", "BANGLEJS2"],
"storage": [ "storage": [
{"name":"gbdiscon.app.js","url":"app.js"}, {"name":"gbdiscon.app.js","url":"app.js"},

View File

@ -3,9 +3,9 @@
"version": "0.03", "version": "0.03",
"description": "This app will provide you with on course data to support your golf game!", "description": "This app will provide you with on course data to support your golf game!",
"icon": "golfview.png", "icon": "golfview.png",
"tags": "outdoors, gps", "tags": "outdoors,gps",
"allow_emulator": true, "allow_emulator": true,
"supports" : ["BANGLEJS2"], "supports" : ["BANGLEJS2"],
"readme": "README.md", "readme": "README.md",
"custom": "custom.html", "custom": "custom.html",
"storage": [ "storage": [

View File

@ -4,8 +4,8 @@
"version": "0.03", "version": "0.03",
"description": "Wrist mounted guitar chords", "description": "Wrist mounted guitar chords",
"icon": "app.png", "icon": "app.png",
"tags": "guitar, chords", "tags": "guitar,chords",
"supports" : ["BANGLEJS2"], "supports" : ["BANGLEJS2"],
"readme": "README.md", "readme": "README.md",
"storage": [ "storage": [
{"name":"guitar.app.js","url":"app.js"}, {"name":"guitar.app.js","url":"app.js"},

View File

@ -5,7 +5,7 @@
"description": "Songs lyrics and guitar chords", "description": "Songs lyrics and guitar chords",
"icon": "app.png", "icon": "app.png",
"screenshots": [{"url": "screenshot.png"}], "screenshots": [{"url": "screenshot.png"}],
"tags": "guitar, song, lyrics, chords", "tags": "guitar,song,lyrics,chords",
"supports" : ["BANGLEJS2"], "supports" : ["BANGLEJS2"],
"interface": "manage_songs.html", "interface": "manage_songs.html",
"readme": "README.md", "readme": "README.md",

View File

@ -5,7 +5,7 @@
"icon": "app.png", "icon": "app.png",
"version":"0.01", "version":"0.01",
"description": "Interval Timer for workouts, HIIT, or whatever else.", "description": "Interval Timer for workouts, HIIT, or whatever else.",
"tags": "timer, interval, hiit, workout", "tags": "timer,interval,hiit,workout",
"readme":"README.md", "readme":"README.md",
"supports":["BANGLEJS2"], "supports":["BANGLEJS2"],
"storage": [ "storage": [

View File

@ -1,23 +1,23 @@
{ {
"id": "kanagsec", "id": "kanagsec",
"name": "Kanagawa clock", "name": "Kanagawa clock",
"shortName":"kanagawa", "shortName":"kanagawa",
"version": "0.04", "version": "0.04",
"description": "A clock that displays the great wave of kanagawa (image from wikipedia) with seconds in active mode.", "description": "A clock that displays the great wave of kanagawa (image from wikipedia) with seconds in active mode.",
"icon": "app.png", "icon": "app.png",
"tags": "clock, kanagawa, wave", "tags": "clock,kanagawa,wave",
"type": "clock", "type": "clock",
"supports" : ["BANGLEJS2"], "supports" : ["BANGLEJS2"],
"readme": "README.md", "readme": "README.md",
"allow_emulator":true, "allow_emulator":true,
"storage": "storage":
[ [
{"name":"kanagsec.app.js","url":"app.js"}, {"name":"kanagsec.app.js","url":"app.js"},
{"name":"kanagsec.img","url":"app-icon.js","evaluate":true} {"name":"kanagsec.img","url":"app-icon.js","evaluate":true}
], ],
"screenshots" : "screenshots" :
[ [
{ "url":"screenshot.png" }, { "url":"screenshot.png" },
{ "url":"screenshot2.png" } { "url":"screenshot2.png" }
] ]
} }

View File

@ -6,7 +6,7 @@
"description": "A smart and simple calculator for Ohm's Law calculations, designed specifically for Bangle.js 2 smartwatches. Handles voltage, current, resistance, and power calculations with smart logic to prevent invalid inputs.", "description": "A smart and simple calculator for Ohm's Law calculations, designed specifically for Bangle.js 2 smartwatches. Handles voltage, current, resistance, and power calculations with smart logic to prevent invalid inputs.",
"icon": "app.png", "icon": "app.png",
"type": "app", "type": "app",
"tags": "calculator, utilities, electric", "tags": "calculator,utilities,electric",
"supports": ["BANGLEJS2"], "supports": ["BANGLEJS2"],
"readme": "README.md", "readme": "README.md",
"allow_emulator": true, "allow_emulator": true,

View File

@ -8,7 +8,7 @@
"dependencies": {"mylocation":"app","weather":"app"}, "dependencies": {"mylocation":"app","weather":"app"},
"screenshots": [{"url":"screenshot_pastel.png"}, {"url":"weather_icons.png"}], "screenshots": [{"url":"screenshot_pastel.png"}, {"url":"weather_icons.png"}],
"type": "clock", "type": "clock",
"tags": "clock, weather, tool", "tags": "clock,weather,tool",
"supports": ["BANGLEJS","BANGLEJS2"], "supports": ["BANGLEJS","BANGLEJS2"],
"readme": "README.md", "readme": "README.md",
"storage": [ "storage": [

View File

@ -4,7 +4,7 @@
"version": "0.05", "version": "0.05",
"description": "Simple app to power off your Bangle.js", "description": "Simple app to power off your Bangle.js",
"icon": "app.png", "icon": "app.png",
"tags": "tool, poweroff, shutdown", "tags": "tool,poweroff,shutdown",
"supports" : ["BANGLEJS", "BANGLEJS2"], "supports" : ["BANGLEJS", "BANGLEJS2"],
"readme": "README.md", "readme": "README.md",
"allow_emulator": true, "allow_emulator": true,

View File

@ -5,7 +5,7 @@
"version": "0.16", "version": "0.16",
"description": "Tap or swipe left/right/up/down on your clock face to launch up to five apps of your choice. Configurations can be accessed through Settings->Apps.", "description": "Tap or swipe left/right/up/down on your clock face to launch up to five apps of your choice. Configurations can be accessed through Settings->Apps.",
"type": "bootloader", "type": "bootloader",
"tags": "tools, system", "tags": "tools,system",
"readme": "README.md", "readme": "README.md",
"supports": ["BANGLEJS2"], "supports": ["BANGLEJS2"],
"storage": [ "storage": [

View File

@ -10,7 +10,7 @@
{"url": "screenshot-2.png"} {"url": "screenshot-2.png"}
], ],
"description": "An intuitive, easy-to-use app that aids in the interpretation of resistor color codes and calculation of resistance values.", "description": "An intuitive, easy-to-use app that aids in the interpretation of resistor color codes and calculation of resistance values.",
"tags": "app, tool, electricity, ohms, converter", "tags": "app,tool,electricity,ohms,converter",
"supports": ["BANGLEJS2"], "supports": ["BANGLEJS2"],
"readme": "README.md", "readme": "README.md",
"allow_emulator": true, "allow_emulator": true,

View File

@ -6,7 +6,7 @@
"description": "A keyboard on your wrist! Swipe right for space, left for delete.", "description": "A keyboard on your wrist! Swipe right for space, left for delete.",
"icon": "app.png", "icon": "app.png",
"allow_emulator": true, "allow_emulator": true,
"tags": "tools, keyboard, text, scribble", "tags": "tools,keyboard,text,scribble",
"supports" : ["BANGLEJS2"], "supports" : ["BANGLEJS2"],
"readme": "README.md", "readme": "README.md",
"storage": [ "storage": [

View File

@ -5,7 +5,7 @@
"description": "A basic implementation of the famous consice workout", "description": "A basic implementation of the famous consice workout",
"icon": "icon.png", "icon": "icon.png",
"type":"app", "type":"app",
"tags": "Training, Workout", "tags": "training,workout",
"supports": ["BANGLEJS2"], "supports": ["BANGLEJS2"],
"readme": "README.md", "readme": "README.md",
"allow_emulator":true, "allow_emulator":true,

View File

@ -5,8 +5,8 @@
"description": "Watch face in the style of Casio Prototype Space Resist", "description": "Watch face in the style of Casio Prototype Space Resist",
"icon": "app-icon.png", "icon": "app-icon.png",
"type": "clock", "type": "clock",
"tags": "clock, casio, retro", "tags": "clock,casio,retro",
"supports" : ["BANGLEJS2"], "supports" : ["BANGLEJS2"],
"readme": "README.md", "readme": "README.md",
"storage": [ "storage": [
{"name":"spaceclock.app.js","url":"app.js"}, {"name":"spaceclock.app.js","url":"app.js"},

View File

@ -5,7 +5,7 @@
"description": "Navigate between clock and launcher with Swipe action", "description": "Navigate between clock and launcher with Swipe action",
"icon": "swiperclocklaunch.png", "icon": "swiperclocklaunch.png",
"type": "bootloader", "type": "bootloader",
"tags": "tools, system", "tags": "tools,system",
"supports": ["BANGLEJS", "BANGLEJS2"], "supports": ["BANGLEJS", "BANGLEJS2"],
"storage": [ "storage": [
{"name":"swiperclocklaunch.boot.js","url":"boot.js"}, {"name":"swiperclocklaunch.boot.js","url":"boot.js"},

View File

@ -7,7 +7,7 @@
"description": "Tamagotchi WatchApp", "description": "Tamagotchi WatchApp",
"icon": "app.png", "icon": "app.png",
"allow_emulator": true, "allow_emulator": true,
"tags": "clock, watch, virtual pet", "tags": "clock,watch,virtualpet",
"supports": [ "supports": [
"BANGLEJS2" "BANGLEJS2"
], ],

View File

@ -5,7 +5,7 @@
"version": "0.08", "version": "0.08",
"description": "App to test the bangle.js input interface. It displays the user action in text, circle buttons or on/off switch UI elements.", "description": "App to test the bangle.js input interface. It displays the user action in text, circle buttons or on/off switch UI elements.",
"icon": "app.png", "icon": "app.png",
"tags": "input,interface,buttons,touch,UI", "tags": "input,interface,buttons,touch,ui",
"supports": ["BANGLEJS"], "supports": ["BANGLEJS"],
"readme": "README.md", "readme": "README.md",
"storage": [ "storage": [

View File

@ -7,7 +7,7 @@
"description": "Conveniently record a series of date/time stamps", "description": "Conveniently record a series of date/time stamps",
"screenshots": [ {"url": "screenshot.png" } ], "screenshots": [ {"url": "screenshot.png" } ],
"readme": "README.md", "readme": "README.md",
"tags": "timestamp, log", "tags": "timestamp,log",
"supports": ["BANGLEJS2"], "supports": ["BANGLEJS2"],
"interface": "interface.html", "interface": "interface.html",
"storage": [ "storage": [

View File

@ -6,7 +6,7 @@
"description": "Draw stuff in your wrist", "description": "Draw stuff in your wrist",
"icon": "app.png", "icon": "app.png",
"allow_emulator": true, "allow_emulator": true,
"tags": "tools, keyboard, text, scribble", "tags": "tools,keyboard,text,scribble",
"supports" : ["BANGLEJS2"], "supports" : ["BANGLEJS2"],
"readme": "README.md", "readme": "README.md",
"storage": [ "storage": [

View File

@ -8,7 +8,7 @@
"dependencies": {"weather":"app"}, "dependencies": {"weather":"app"},
"screenshots": [{"url":"screens/screen1.png"}], "screenshots": [{"url":"screens/screen1.png"}],
"type": "clock", "type": "clock",
"tags": "clock, weather", "tags": "clock,weather",
"supports": ["BANGLEJS","BANGLEJS2"], "supports": ["BANGLEJS","BANGLEJS2"],
"allow_emulator": true, "allow_emulator": true,
"readme": "README.md", "readme": "README.md",

View File

@ -3,9 +3,9 @@
"shortName":"Screenlock", "shortName":"Screenlock",
"version":"0.03", "version":"0.03",
"description": "Lock a Bangle 2 screen by tapping a widget.", "description": "Lock a Bangle 2 screen by tapping a widget.",
"icon": "widget.png", "icon": "widget.png",
"type": "widget", "type": "widget",
"tags": "widget, screenlock", "tags": "widget,screenlock",
"supports" : ["BANGLEJS2"], "supports" : ["BANGLEJS2"],
"readme": "README.md", "readme": "README.md",
"storage": [ "storage": [

View File

@ -207,10 +207,10 @@ apps.forEach((app,appIdx) => {
if (!app.name) ERROR(`App ${app.id} has no name`, {file:metadataFile}); if (!app.name) ERROR(`App ${app.id} has no name`, {file:metadataFile});
var isApp = !app.type || app.type=="app"; var isApp = !app.type || app.type=="app";
var appTags = app.tags ? app.tags.split(",") : []; var appTags = app.tags ? app.tags.split(",") : [];
/*if (appTags.some(tag => tag!=tag.trim())) if (appTags.some(tag => tag!=tag.trim()))
WARN(`App ${app.id} 'tag' list contains whitespace ("${app.tags}")`, {file:metadataFile}); WARN(`App ${app.id} 'tag' list contains whitespace ("${app.tags}")`, {file:metadataFile});
if (appTags.some(tag => tag!=tag.toLowerCase())) if (appTags.some(tag => tag!=tag.toLowerCase()))
WARN(`App ${app.id} 'tag' list contains uppercase ("${app.tags}")`, {file:metadataFile});*/ WARN(`App ${app.id} 'tag' list contains uppercase ("${app.tags}")`, {file:metadataFile});
if (app.name.length>20 && !app.shortName && isApp) ERROR(`App ${app.id} has a long name, but no shortName`, {file:metadataFile}); if (app.name.length>20 && !app.shortName && isApp) ERROR(`App ${app.id} has a long name, but no shortName`, {file:metadataFile});
if (app.type && !METADATA_TYPES.includes(app.type)) if (app.type && !METADATA_TYPES.includes(app.type))
ERROR(`App ${app.id} 'type' is one one of `+METADATA_TYPES, {file:metadataFile}); ERROR(`App ${app.id} 'type' is one one of `+METADATA_TYPES, {file:metadataFile});