Files
puzzles/kaios/manifest.pl
Ben Harris 2a4abce8a8 kaios: Provide a populated "locales" field in the manifest
The documentation says it's only needed to override values in the main
manifest, but it's apparently required even if you only support one
locale.
2023-01-19 20:34:48 +00:00

61 lines
1.9 KiB
Perl
Executable File

#!/usr/bin/perl
use strict;
use warnings;
use JSON::PP;
@ARGV == 4 or
die "usage: manifest.pl <name> <displayname> <description> <objective>";
my ($name, $displayname, $description, $objective) = @ARGV;
# This can be overridden by the build script.
my $version = "Unidentified build";
# Limits from
# https://developer.kaiostech.com/docs/getting-started/main-concepts/manifest
length($displayname) <= 20 or die "Name too long: $displayname";
length($description) <= 40 or die "Subtitle too long: $description";
$objective .= " Part of Simon Tatham's Portable Puzzle Collection.";
# https://developer.kaiostech.com/docs/distribution/submission-guideline
length($objective) <= 220 or die "Description too long: $objective";
my $decvers;
if ($version =~ /^20(\d\d)(\d\d)(\d\d)\./) {
# Fabricate a dotted-decimal version number as required by KaiOS.
# The precise requirements are unclear and violating them leads to
# messes in the KaiStore that can only be resolved by Developer
# Support. Specifically, uploading a bad version number as the
# first upload of an app can make it impossible to upload a new
# version. I hope that three components of two digits each will
# be acceptable.
$decvers = join('.', $1+0, $2+0, $3+0);
}
print encode_json({
name => $displayname,
subtitle => $description,
description => $objective,
launch_path => "/${name}.html",
icons => {
"56" => "/${name}-56kai.png",
"112" => "/${name}-112kai.png",
},
developer => {
name => "Ben Harris",
url => "https://bjh21.me.uk",
},
default_locale => "en-GB",
locales => [
"en-GB" => {
name => $displayname,
subtitle => $description,
description => $objective,
},
],
categories => ["games"],
type => "web",
cursor => JSON::PP::false,
$decvers ? (version => $decvers) : (),
})