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>
66 lines
2.9 KiB
Dart
66 lines
2.9 KiB
Dart
import 'dart:io';
|
|
|
|
import 'package:flutter/services.dart';
|
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
|
import 'package:halkyon_app/halkyon_app.dart';
|
|
import 'package:halkyon_learn_flutter/src/app/app_icon_license.dart';
|
|
import 'package:halkyon_learn_flutter/src/app/learn_frame.dart';
|
|
import 'package:halkyon_learn_flutter/src/app/learn_sessions.dart';
|
|
import 'package:halkyon_learn_flutter/src/core/bloc/app_bloc_observer.dart';
|
|
import 'package:halkyon_learn_flutter/src/core/dependencies/dependencies.dart';
|
|
import 'package:halkyon_learn_flutter/src/core/device_settings/widget/device_settings_scope.dart';
|
|
import 'package:halkyon_learn_flutter/src/core/theme/cjk_fonts.dart';
|
|
import 'package:halkyon_learn_flutter/src/feature/dictionary/data/mecab_license.dart';
|
|
import 'package:halkyon_learn_flutter/src/feature/geo_map/data/cldr_license.dart';
|
|
import 'package:halkyon_learn_flutter/src/feature/kanji/data/kanjivg_license.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();
|
|
Bloc.observer = const AppBlocObserver();
|
|
registerFontLicenses();
|
|
registerCjkFontLicenses();
|
|
registerKanjiVgLicense();
|
|
// The flags' notice and Unicode CLDR's for the subdivisions' names.
|
|
registerHalkyonAppLicenses();
|
|
// Unicode CLDR's for the world map's country names, as that copy gives it.
|
|
registerWorldMapCldrLicense();
|
|
registerMecabLicenses();
|
|
registerAppIconLicense();
|
|
// The instance the build names (`--dart-define=SERVER_URL=…`, or
|
|
// `assets/config.json`): the first offered, and the one installs from
|
|
// before the choice go on with.
|
|
final builtIn = Instance.parse(await getServerUrl())!;
|
|
final device = await DeviceParts.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.version,
|
|
),
|
|
// An instance chosen before: the app ran on this device already.
|
|
usedBefore: instances.current != null,
|
|
child: InstanceGate(
|
|
frame: learnFrame,
|
|
choice: instances,
|
|
// Only an instance of Halkyon Learn: one of another Halkyon app's
|
|
// answers too, but holds nothing of this app's.
|
|
checker: ServerpodInstanceChecker(app: 'learn'),
|
|
open: (instance) => Dependencies.create(instance, device),
|
|
readLook: () async => (await device.deviceSettingsStore.read()).look,
|
|
app: const LearnSessions(),
|
|
),
|
|
),
|
|
);
|
|
}
|