halkyon_app's WhatsNew reads what each release changed from the app's assets/whats_new/ (<version>.<language>.txt, English and German, a change a line): after an update a sheet lists every release since the one the device showed last, newest first, once; Settings shows the running version's again, above About. Nothing on a fresh install. tool/release.dart drafts the missing texts from the commits that count after "Go on?" (German marked TRANSLATE:), opens them in the editor until they fit (no mark left, F-Droid's 500 characters) and commits them with the version. The English is the Forgejo notes' What's new, each language F-Droid's changelog of the build, written at publishing and copied in by tool/fdroid_repo.sh. Learn and Train bundle their texts, Learn's 0.22.0 and Train's 0.1.0 written to start. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
53 lines
2 KiB
Dart
53 lines
2 KiB
Dart
import 'dart:io';
|
|
|
|
import 'package:flutter/services.dart';
|
|
import 'package:halkyon_app/halkyon_app.dart';
|
|
import 'package:halkyon_train_flutter/src/app/licences.dart';
|
|
import 'package:halkyon_train_flutter/src/app/train_app.dart';
|
|
import 'package:halkyon_train_flutter/src/app/train_dependencies.dart';
|
|
import 'package:halkyon_ui/halkyon_ui.dart';
|
|
import 'package:material_ui/material_ui.dart';
|
|
import 'package:path/path.dart' as p;
|
|
import 'package:serverpod_flutter/serverpod_flutter.dart';
|
|
|
|
Future<void> main() async {
|
|
WidgetsFlutterBinding.ensureInitialized();
|
|
// Noto Sans' notice (halkyon_ui), the flags' and Unicode CLDR's
|
|
// (halkyon_app), Lucide's for the app's icon, and Polar's where its SDK
|
|
// is linked, on Android.
|
|
registerFontLicenses();
|
|
registerHalkyonAppLicenses();
|
|
registerLucideLicense();
|
|
if (Platform.isAndroid) {
|
|
registerPolarLicense();
|
|
}
|
|
// The instance the build names (`--dart-define=SERVER_URL=…`, or
|
|
// `assets/config.json`): the first offered at the first start.
|
|
final builtIn = Instance.parse(await getServerUrl())!;
|
|
final device = await TrainDevice.create(builtIn: builtIn);
|
|
final instances = InstanceChoice(
|
|
FileInstanceStore(File(p.join(device.support, 'instances.json'))),
|
|
builtIn: builtIn,
|
|
forget: device.storage.forget,
|
|
sharesStorage: device.storage.sharesWith,
|
|
);
|
|
await instances.load(usedBefore: device.storage.usedBefore());
|
|
runApp(
|
|
WhatsNewScope(
|
|
whatsNew: WhatsNew(
|
|
AssetWhatsNewSource(rootBundle),
|
|
FileWhatsNewStore(File(p.join(device.support, 'whats_new.json'))),
|
|
version: device.appVersion,
|
|
),
|
|
// An instance chosen before: the app ran on this device already.
|
|
usedBefore: instances.current != null,
|
|
child: TrainApp(
|
|
choice: instances,
|
|
// Only an instance of Halkyon Train: one of another Halkyon app's
|
|
// answers too, but holds nothing of this app's.
|
|
checker: ServerpodInstanceChecker(app: 'train'),
|
|
open: (instance) => TrainDependencies.create(instance, device),
|
|
),
|
|
),
|
|
);
|
|
}
|