diff --git a/lib/serverlist.dart b/lib/serverlist.dart index d7b1a9f..64d289e 100644 --- a/lib/serverlist.dart +++ b/lib/serverlist.dart @@ -145,9 +145,50 @@ class _ServerListState extends State { } void _settings() {} + final _formKey = GlobalKey(); void _addServer() { - print('poop'); + TextEditingController servername = TextEditingController(); + TextEditingController uri = TextEditingController(); + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + title: Text('Adding a server'), + content: SingleChildScrollView(child: Form( + key: _formKey, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + TextFormField( + controller: uri, + ), + TextFormField( + decoration: InputDecoration( + labelText: 'Custom Name', hintText: 'Optional'), + controller: servername, + ), + Padding( + padding: const EdgeInsets.all(8.0), + child: RaisedButton( + child: Text("Add"), + onPressed: () { + if (_formKey.currentState.validate()&&uri.text.isNotEmpty) { + _formKey.currentState.save(); + Server server = Server(uri.text, uri.text); + servers.add(server); + _updateServerStatus(server); + Navigator.of(context).pop(); + } + }, + ), + ) + ], + ), + ), + ),); + }, + ); } List _createChildren() { @@ -179,7 +220,7 @@ class _ServerListState extends State { decoration: BoxDecoration( border: Border(top: BorderSide(color: Colors.grey))), ), - Text('Ping: 1111'), + Text(servers[index].uri,textAlign: TextAlign.left,), ], ); } @@ -247,7 +288,8 @@ class _ServerListState extends State { return await _checkResponse(parsedUri, iterations); } catch (ArgumentError) /* Host is a DNS name */ { try { - var v4recs = await DnsUtils.lookupRecord(parsedUri.host, RRecordType.A); + var v4recs = + await DnsUtils.lookupRecord(parsedUri.host, RRecordType.A); var v6recs = await DnsUtils.lookupRecord(parsedUri.host, RRecordType.AAAA); var v4 = await _getDNS(v4recs, RRecordType.A); @@ -333,10 +375,17 @@ class _ServerListState extends State { var location = uri.path; for (int i = 0; i < 5; i++) { - Response response = await HttpUtils.getForFullResponse( - scheme + "://" + host, - headers: {"Location": location}) - .timeout(new Duration(seconds: 3)); + Response response; + try { + response = await HttpUtils.getForFullResponse( + scheme + "://" + host, + headers: {"Location": location}) + .timeout(new Duration(seconds: 3)); + } catch (error){ + if (error == TimeoutException) + return ServerStatus.timeout; + throw error; + } if (response.statusCode > 199 && response.statusCode < 300) { return ServerStatus.ok; } else if (response.statusCode == HttpStatus.movedPermanently ||