diff --git a/cyberwow/lib/state.dart b/cyberwow/lib/state.dart
index a8695a7..aaf6a80 100644
--- a/cyberwow/lib/state.dart
+++ b/cyberwow/lib/state.dart
@@ -19,402 +19,13 @@ along with CyberWOW. If not, see .
*/
-import 'package:flutter/material.dart';
-import 'dart:io';
-import 'dart:developer';
-import 'dart:async';
-import 'dart:convert';
-import 'dart:collection';
-import 'dart:typed_data';
-import 'package:flutter/services.dart';
-import 'package:path_provider/path_provider.dart';
+export 'state/prototype.dart';
+export 'state/blank.dart';
+export 'state/loading.dart';
+export 'state/syncing.dart';
+export 'state/synced.dart';
+export 'state/resyncing.dart';
+export 'state/exiting.dart';
-import 'controller/helper.dart';
-import 'controller/rpc/rpc.dart' as rpc;
-import 'controller/rpc/rpc2.dart' as rpc;
-import 'controller/daemon.dart' as daemon;
-import 'controller/refresh.dart' as refresh;
-import 'config.dart' as config;
-import 'logging.dart';
-import 'helper.dart';
-import 'controller/rpc/rpcView.dart' as rpcView;
-import 'controller/rpc/rpc2View.dart' as rpc2View;
-typedef SetStateFunc = void Function(AppState);
-typedef GetNotificationFunc = AppLifecycleState Function();
-typedef IsExitingFunc = bool Function();
-class AppHook {
- final SetStateFunc setState;
- final GetNotificationFunc getNotification;
- final IsExitingFunc isExiting;
- AppHook(this.setState, this.getNotification, this.isExiting);
-}
-
-class AppState {
- final AppHook appHook;
- AppState(this.appHook);
-
- syncState() {
- appHook.setState(this);
- }
-
- AppState moveState(AppState _next) {
- appHook.setState(_next);
- return _next;
- }
-}
-
-class BlankState extends AppState {
- BlankState(appHook) : super (appHook);
-
- Future next(String status) async {
- LoadingState _next = LoadingState(appHook, status);
- return moveState(_next);
- }
-}
-
-class LoadingState extends AppState {
- final String banner;
- String status = '';
-
- LoadingState(appHook, this.banner) : super (appHook);
-
- void append(final String msg) {
- this.status += msg;
- syncState();
- }
-
-
- Future next(Stream loadingProgress, String status) async {
- Future showBanner() async {
- var chars = [];
- banner.runes.forEach((int rune) {
- final c = String.fromCharCode(rune);
- chars.add(c);
- });
-
- for (String char in chars) {
- append(char);
- await Future.delayed(Duration(milliseconds: config.c.splashDelay), () => "1");
- }
-
- await Future.delayed(const Duration(seconds: 2), () => "1");
- }
-
- Future load() async {
- log.fine("Loading next");
- await for (final line in loadingProgress) {
- // append(line);
- log.info(line);
- }
- }
-
- final outputBinExists = await binaryExists(config.c.outputBin);
- if (outputBinExists) {
- await load();
- }
- else {
- await Future.wait([load(), showBanner()]);
- }
-
- SyncingState _next = SyncingState(appHook);
- return moveState(_next);
- }
-}
-
-class SyncingState extends AppState {
- final Queue stdout = Queue.from(['']);
-
- bool synced = false;
-
- SyncingState(appHook) : super (appHook);
-
- void append(final String msg) {
- stdout.addLast(msg);
- while (stdout.length > config.stdoutLineBufferSize) {
- stdout.removeFirst();
- }
- syncState();
- }
-
- Future next
- (
- StreamSink processInput, Stream processOutput
- ) async {
- log.fine("Syncing next");
-
- Future printStdout() async {
- await for (final line in processOutput) {
- if (synced) break;
- log.finest('syncing: print stdout loop');
-
- append(line);
- log.info(line);
- }
- }
-
- Future checkSync() async {
- await for (final _null in refresh.pull(appHook.getNotification, 'syncingState')) {
- log.finer('SyncingState: checkSync loop');
-
- if (appHook.isExiting()) {
- log.fine('Syncing state detected exiting');
- break;
- }
-
- // here doc is wrong, targetHeight could match height when synced
- // potential bug, targetHeight could be smaller then height
- final _isConnected = await daemon.isConnected();
- final _isSynced = await daemon.isSynced();
-
- if (_isConnected && _isSynced) {
- synced = true;
- break;
- }
- }
- }
-
- printStdout();
- await checkSync();
-
- if (appHook.isExiting()) {
- ExitingState _next = ExitingState
- (
- appHook, stdout, processOutput
- );
- return moveState(_next);
- }
-
- log.fine('syncing: loop exit');
-
- // processInput.add('exit');
-
- final _height = await rpc.height();
- SyncedState _next = SyncedState
- (
- appHook, stdout, processInput, processOutput, 1,
- );
- _next.height = _height;
- return moveState(_next);
- }
-}
-
-class SyncedState extends AppState {
- final Queue stdout;
- final StreamSink processInput;
- final Stream processOutput;
- final TextEditingController textController = TextEditingController();
-
- int height;
- bool synced = true;
- bool userExit = false;
- bool connected = true;
- Map getInfo = {};
- List