101 lines
2.7 KiB
Plaintext
101 lines
2.7 KiB
Plaintext
import 'package:flutter/material.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
import 'login';
|
|
import '../matrix/cs-r0.5.0';
|
|
import 'room';
|
|
|
|
class MyHomePage extends StatefulWidget {
|
|
MyHomePage({Key key, @required this.settings}) : super(key: key);
|
|
|
|
final SharedPreferences settings;
|
|
|
|
@override
|
|
_MyHomePageState createState() => _MyHomePageState();
|
|
}
|
|
|
|
class _MyHomePageState extends State<MyHomePage> {
|
|
Map<String, String> roomMap = Map<String, String>();
|
|
|
|
void _updateRooms() {
|
|
Matrix.joinedRooms(
|
|
widget.settings.getString("home_server"),
|
|
widget.settings.getString("access_token")
|
|
).then((r) {
|
|
for (String roomid in r) {
|
|
Matrix.roomAtribute(
|
|
widget.settings.getString("home_server"),
|
|
widget.settings.getString("access_token"),
|
|
roomid,
|
|
"name",
|
|
"name",
|
|
).then((roomname) {
|
|
setState(() {
|
|
roomMap[roomid] = roomname;
|
|
});
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
void _logout() {
|
|
var set = widget.settings;
|
|
set.setBool("logged_in", false);
|
|
// TODO Actually invalidate access_token
|
|
Matrix.logout(uri: Uri.parse(set.getString("home_server")) , accessToken: set.getString("access_token"));
|
|
set.setString("access_token", "");
|
|
Navigator.pushReplacement(
|
|
context, MaterialPageRoute(builder: (BuildContext context) => LoginPage(settings: widget.settings)));
|
|
}
|
|
|
|
void initState() {
|
|
_updateRooms();
|
|
print(Matrix.supportedVersions(widget.settings.getString("home_server")));
|
|
Matrix.sync(uri: Uri.parse(widget.settings.getString("home_server")), accessToken: widget.settings.getString("access_token"));
|
|
super.initState();
|
|
}
|
|
|
|
List<Widget> roomEntries(roomMap) {
|
|
List<Widget> newWidgets = new List<Widget>();
|
|
roomMap.forEach((roomid, roomname) {
|
|
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),
|
|
),
|
|
);
|
|
|
|
}
|
|
)
|
|
);
|
|
});
|
|
return newWidgets;
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
appBar: AppBar(
|
|
title: Text("Hermes"),
|
|
actions: <Widget>[
|
|
IconButton(
|
|
icon: Icon(Icons.link_off),
|
|
tooltip: "Logout",
|
|
onPressed: _logout,
|
|
),
|
|
],
|
|
),
|
|
body: Center(
|
|
child: ListView(
|
|
padding: EdgeInsets.all(8.0),
|
|
children: roomEntries(roomMap)
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|