import 'package:localstore/localstore.dart'; import './resolve_url.dart'; class User { const User( {required this.username, required this.password, required this.server}); final String username; final String password; final OutbagServer server; Future toDisk() async { final db = Localstore.instance; await db .collection('meta') .doc('auth') .set({'username': username, 'password': password}); await server.toDisk(); } static Future fromDisk() async { final db = Localstore.instance; final data = await db.collection('meta').doc('auth').get(); final server = await OutbagServer.fromDisk(); return User( username: data?['username'], password: data?['password'], server: server, ); } static Future removeDisk() async { final db = Localstore.instance; await db.collection('meta').doc('auth').delete(); return; } static listen(Function(Map) cb) async { final db = Localstore.instance; final stream = db.collection('meta').stream; stream.listen(cb); } String get humanReadable { return '$username@${server.tag}'; } } class AccountMeta { final int permissions; final String username; final bool discoverable; final int maxRoomCount; final int maxRoomSize; final int maxRoomMemberCount; const AccountMeta( {required this.permissions, required this.username, required this.maxRoomSize, required this.maxRoomCount, required this.maxRoomMemberCount, required this.discoverable}); factory AccountMeta.fromJSON(dynamic json) { return AccountMeta( permissions: json['rights'], username: json['name'], maxRoomSize: json['maxRoomSize'], maxRoomCount: json['maxRooms'], maxRoomMemberCount: json['maxUsersPerRoom'], discoverable: json['viewable'] == 1); } }