summaryrefslogtreecommitdiffstats
path: root/lib/config.dart
blob: cda553b68dd35e7a8c93b356de644d53c7b2b116 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
// SPDX-License-Identifier: Apache-2.0

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_navigation/kuksa/intial-connection.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:yaml/yaml.dart';


class GetConfig extends ConsumerStatefulWidget {
  const GetConfig({Key? key, required this.client}) : super(key: key);
  final HttpClient client;

  @override
  ConsumerState<GetConfig> createState() => _GetConfigState();
}

class _GetConfigState extends ConsumerState<GetConfig> {
  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
      final configStateProvider = ref.read(ConfigStateprovider.notifier);

      String configFilePath = '/etc/xdg/AGL/nav_config.yaml';
      String mapboxFilePath = '/etc/default/mapboxkey';

      String keyContent = "";

      final mapboxKeyFile = File(mapboxFilePath);

      final configFile = File(configFilePath);
      configFile.readAsString().then((content) {
        final dynamic yamlMap = loadYaml(content);
        configStateProvider.update(
          hostname: yamlMap['hostname'],
          port: yamlMap['port'],
          kuksaAuthToken: yamlMap['kuskaAuthToken'],
        );
      });
      mapboxKeyFile.readAsString().then((content) {
        keyContent = content.split(':')[1].trim();
        if (keyContent.isNotEmpty && keyContent != 'YOU_NEED_TO_SET_IT_IN_LOCAL_CONF') {
          configStateProvider.update(mapboxAccessToken: keyContent);
        } else {
          print("WARNING: Mapbox API Key not found !");
        }
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    final config = ref.watch(ConfigStateprovider);
    if (config.hostname == "" ||
        config.port == 0 ||
        config.kuksaAuthToken == "" ||
        config.mapboxAccessToken == "") {
      return Scaffold(
        body: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              crossAxisAlignment: CrossAxisAlignment.center,
              children: const [
                Text("ERROR",
                    style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold)),
                Text(
                    "Something Wrong with config file! Check config.yaml file and restart"),
              ],
            )),
      );
    }
    return InitialScreen(client: widget.client);
  }
}

class Config {
  Config({
    required this.hostname,
    required this.port,
    required this.kuksaAuthToken,
    required this.mapboxAccessToken,

  });
  final String hostname;
  final int port;
  final String kuksaAuthToken;
  final String mapboxAccessToken;

  Config copywith({
    String? hostname,
    int? port,
    String? kuksaAuthToken,
    String? mapboxAccessToken,
  }) =>
      Config(
        hostname: hostname ?? this.hostname,
        port: port ?? this.port,
        kuksaAuthToken: kuksaAuthToken ?? this.kuksaAuthToken,
        mapboxAccessToken: mapboxAccessToken ?? this.mapboxAccessToken,
      );
}

final ConfigStateprovider =
StateNotifierProvider<ConfigStateNotifier, Config>(
        (ref) => ConfigStateNotifier());

class ConfigStateNotifier extends StateNotifier<Config> {
  ConfigStateNotifier() : super(_initialValue);
  static final Config _initialValue = Config(
    hostname: "",
    port: 0,
    kuksaAuthToken: "",
    mapboxAccessToken: "",
  );
  void update({
    String? hostname,
    int? port,
    String? kuksaAuthToken,
    String? mapboxAccessToken,
  }) {
    state = state.copywith(
      hostname: hostname,
      port: port,
      kuksaAuthToken: kuksaAuthToken,
      mapboxAccessToken: mapboxAccessToken,
    );
  }
}