This repository has been archived on 2020-05-24. You can view files and clone it, but cannot push or open issues or pull requests.
hermes/lib/page/roomlist

101 lines
2.7 KiB
Plaintext
Raw Permalink Normal View History

2019-01-30 13:11:35 +00:00
import 'package:flutter/material.dart';
2019-01-30 18:36:10 +00:00
import 'package:shared_preferences/shared_preferences.dart';
2019-07-30 11:28:52 +00:00
import 'login';
import '../matrix/cs-r0.5.0';
import 'room';
2019-01-30 13:11:35 +00:00
class MyHomePage extends StatefulWidget {
2019-04-24 12:57:24 +00:00
MyHomePage({Key key, @required this.settings}) : super(key: key);
2019-01-30 13:11:35 +00:00
2019-01-30 18:36:10 +00:00
final SharedPreferences settings;
2019-01-30 13:11:35 +00:00
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
2019-04-24 12:57:24 +00:00
Map<String, String> roomMap = Map<String, String>();
2019-01-30 13:11:35 +00:00
2019-01-30 18:36:10 +00:00
void _updateRooms() {
2019-04-24 12:57:24 +00:00
Matrix.joinedRooms(
2019-01-30 18:36:10 +00:00
widget.settings.getString("home_server"),
widget.settings.getString("access_token")
).then((r) {
2019-04-16 02:47:19 +00:00
for (String roomid in r) {
2019-04-24 12:57:24 +00:00
Matrix.roomAtribute(
2019-04-16 02:47:19 +00:00
widget.settings.getString("home_server"),
widget.settings.getString("access_token"),
roomid,
"name",
"name",
).then((roomname) {
setState(() {
2019-04-24 12:57:24 +00:00
roomMap[roomid] = roomname;
2019-04-16 02:47:19 +00:00
});
2019-01-30 18:36:10 +00:00
});
2019-04-16 02:47:19 +00:00
}
2019-01-30 13:11:35 +00:00
});
}
2019-04-24 12:57:24 +00:00
void _logout() {
var set = widget.settings;
set.setBool("logged_in", false);
// TODO Actually invalidate access_token
2019-07-30 12:53:18 +00:00
Matrix.logout(uri: Uri.parse(set.getString("home_server")) , accessToken: set.getString("access_token"));
2019-04-24 12:57:24 +00:00
set.setString("access_token", "");
2019-07-30 12:53:18 +00:00
Navigator.pushReplacement(
context, MaterialPageRoute(builder: (BuildContext context) => LoginPage(settings: widget.settings)));
2019-04-24 12:57:24 +00:00
}
2019-01-30 18:36:10 +00:00
void initState() {
_updateRooms();
2019-04-24 12:57:24 +00:00
print(Matrix.supportedVersions(widget.settings.getString("home_server")));
2019-11-04 11:32:40 +00:00
Matrix.sync(uri: Uri.parse(widget.settings.getString("home_server")), accessToken: widget.settings.getString("access_token"));
2019-01-30 18:36:10 +00:00
super.initState();
}
2019-04-24 12:57:24 +00:00
List<Widget> roomEntries(roomMap) {
List<Widget> newWidgets = new List<Widget>();
roomMap.forEach((roomid, roomname) {
2019-07-30 12:53:18 +00:00
if (roomname == null || roomname == "") { roomname = roomid; }
newWidgets.add(
ListTile(
title: Text((roomname)),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => RoomPage(settings: widget.settings, roomid: roomid, roomname: roomname),
),
);
2019-04-21 20:47:32 +00:00
2019-07-30 12:53:18 +00:00
}
)
);
2019-04-16 02:47:19 +00:00
});
2019-04-24 12:57:24 +00:00
return newWidgets;
2019-04-16 02:47:19 +00:00
}
2019-04-24 12:57:24 +00:00
2019-01-30 13:11:35 +00:00
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
2019-01-30 18:36:10 +00:00
title: Text("Hermes"),
2019-04-24 12:57:24 +00:00
actions: <Widget>[
IconButton(
icon: Icon(Icons.link_off),
tooltip: "Logout",
onPressed: _logout,
),
],
2019-01-30 13:11:35 +00:00
),
body: Center(
2019-01-30 18:36:10 +00:00
child: ListView(
padding: EdgeInsets.all(8.0),
2019-04-24 12:57:24 +00:00
children: roomEntries(roomMap)
2019-01-30 13:11:35 +00:00
),
),
);
}
}