Add timeout for data fetching. [#34] MDI class fixes
This commit is contained in:
@ -13,6 +13,7 @@ class HassioDataModel {
|
||||
Completer _fetchCompleter;
|
||||
Completer _statesCompleter;
|
||||
Completer _servicesCompleter;
|
||||
Timer _fetchingTimer;
|
||||
|
||||
Map get entities => _entitiesData;
|
||||
Map get services => _servicesData;
|
||||
@ -27,10 +28,14 @@ class HassioDataModel {
|
||||
if ((_fetchCompleter != null) && (!_fetchCompleter.isCompleted)) {
|
||||
debugPrint("Previous fetch is not complited");
|
||||
} else {
|
||||
_fetchingTimer = new Timer(new Duration(seconds: 10), () {
|
||||
_fetchCompleter.completeError({"message": "Data fetching timeout."});
|
||||
});
|
||||
_fetchCompleter = new Completer();
|
||||
_reConnectSocket().then((r) {
|
||||
_getData();
|
||||
}).catchError((e) {
|
||||
_fetchingTimer.cancel();
|
||||
_fetchCompleter.completeError(e);
|
||||
});
|
||||
}
|
||||
@ -56,11 +61,14 @@ class HassioDataModel {
|
||||
_getData() {
|
||||
_getStates().then((result) {
|
||||
_getServices().then((result) {
|
||||
_fetchingTimer.cancel();
|
||||
_fetchCompleter.complete();
|
||||
}).catchError((e) {
|
||||
_fetchingTimer.cancel();
|
||||
_fetchCompleter.completeError(e);
|
||||
});
|
||||
}).catchError((e) {
|
||||
_fetchingTimer.cancel();
|
||||
_fetchCompleter.completeError(e);
|
||||
});
|
||||
}
|
||||
@ -133,8 +141,6 @@ class HassioDataModel {
|
||||
}).catchError((e){
|
||||
debugPrint("Unable to connect for sending =(");
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
void _parseServices(Map data) {
|
||||
@ -234,16 +240,16 @@ class HassioDataModel {
|
||||
|
||||
class MaterialDesignIcons {
|
||||
static Map _defaultIconsByDomains = {
|
||||
"light": 0xf335,
|
||||
"switch": 0xf241,
|
||||
"binary_sensor": 0xf130,
|
||||
"group": 0xf2b1,
|
||||
"sensor": 0xf208,
|
||||
"automation": 0xf411,
|
||||
"script": 0xf219,
|
||||
"input_boolean": 0xf1de,
|
||||
"input_datetime": 0xf953,
|
||||
"sun": 0xf5a8
|
||||
"light": "mdi:lightbulb",
|
||||
"switch": "mdi:flash",
|
||||
"binary_sensor": "mdi:checkbox-blank-circle-outline",
|
||||
"group": "mdi:google-circles-communities",
|
||||
"sensor": "mdi:eye",
|
||||
"automation": "mdi:playlist-play",
|
||||
"script": "mdi:file-document",
|
||||
"input_boolean": "mdi:drawing",
|
||||
"input_datetime": "mdi:clock",
|
||||
"sun": "mdi:white-balance-sunny"
|
||||
};
|
||||
static Map _iconsDataMap = {
|
||||
"mdi:access-point": 0xf002,
|
||||
|
@ -77,7 +77,7 @@ class _MainPageState extends State<MainPage> {
|
||||
setState(() {
|
||||
loading = true;
|
||||
});
|
||||
_dataModelErrorMessage = "";
|
||||
_dataModelErrorMessage = null;
|
||||
if (_dataModel != null) {
|
||||
await _dataModel.fetch().then((result) {
|
||||
setState(() {
|
||||
@ -189,7 +189,6 @@ class _MainPageState extends State<MainPage> {
|
||||
|
||||
List<Widget> buildSingleView(structure) {
|
||||
List<Widget> result = [];
|
||||
if (_dataModelErrorMessage.length == 0) {
|
||||
structure["standalone"].forEach((entityId) {
|
||||
result.add(_buildCard([entityId], ""));
|
||||
});
|
||||
@ -197,10 +196,7 @@ class _MainPageState extends State<MainPage> {
|
||||
result.add(_buildCard(
|
||||
group["children"], group["friendly_name"].toString()));
|
||||
});
|
||||
} else {
|
||||
//TODO
|
||||
//result.add(Text(_dataModelErrorMessage));
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -283,7 +279,7 @@ class _MainPageState extends State<MainPage> {
|
||||
title: _buildTitle()
|
||||
),
|
||||
drawer: _buildAppDrawer(),
|
||||
body: Text("Loading... or not...\n\nPlease, restart the app in case of three dots in header starts to freaking you out."),
|
||||
body: Text(_dataModelErrorMessage != null ? "Well... no. There was an error: $_dataModelErrorMessage" : "Loading... or not..."),
|
||||
floatingActionButton: new FloatingActionButton(
|
||||
onPressed: _refreshData,
|
||||
tooltip: 'Increment',
|
||||
|
Reference in New Issue
Block a user