2023-05-01 16:00:56 -04:00
|
|
|
class Session {
|
|
|
|
final String id;
|
|
|
|
final String name;
|
|
|
|
final List<SessionUser> sessionUsers;
|
|
|
|
final String thumbnail;
|
|
|
|
final int maxUsers;
|
|
|
|
final bool hasEnded;
|
|
|
|
final bool isValid;
|
|
|
|
final String description;
|
|
|
|
final List<String> tags;
|
|
|
|
final bool headlessHost;
|
2023-05-02 16:50:35 -04:00
|
|
|
final String hostUsername;
|
2023-05-04 15:54:51 -04:00
|
|
|
final SessionAccessLevel accessLevel;
|
2023-05-01 16:00:56 -04:00
|
|
|
|
|
|
|
Session({required this.id, required this.name, required this.sessionUsers, required this.thumbnail,
|
|
|
|
required this.maxUsers, required this.hasEnded, required this.isValid, required this.description,
|
2023-05-04 15:54:51 -04:00
|
|
|
required this.tags, required this.headlessHost, required this.hostUsername, required this.accessLevel,
|
2023-05-01 16:00:56 -04:00
|
|
|
});
|
|
|
|
|
|
|
|
factory Session.fromMap(Map map) {
|
|
|
|
return Session(
|
|
|
|
id: map["sessionId"],
|
|
|
|
name: map["name"],
|
|
|
|
sessionUsers: (map["sessionUsers"] as List? ?? []).map((entry) => SessionUser.fromMap(entry)).toList(),
|
|
|
|
thumbnail: map["thumbnail"] ?? "",
|
2023-05-02 16:50:35 -04:00
|
|
|
maxUsers: map["maxUsers"] ?? 0,
|
|
|
|
hasEnded: map["hasEnded"] ?? false,
|
|
|
|
isValid: map["isValid"] ?? true,
|
2023-05-01 16:00:56 -04:00
|
|
|
description: map["description"] ?? "",
|
|
|
|
tags: ((map["tags"] as List?) ?? []).map((e) => e.toString()).toList(),
|
2023-05-02 16:50:35 -04:00
|
|
|
headlessHost: map["headlessHost"] ?? false,
|
|
|
|
hostUsername: map["hostUsername"] ?? "",
|
2023-05-04 15:54:51 -04:00
|
|
|
accessLevel: SessionAccessLevel.fromName(map["accessLevel"]),
|
2023-05-01 16:00:56 -04:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2023-05-04 14:57:16 -04:00
|
|
|
Map toMap({bool shallow=false}) {
|
|
|
|
return {
|
|
|
|
"sessionId": id,
|
|
|
|
"name": name,
|
|
|
|
"sessionUsers": shallow ? [] : throw UnimplementedError(),
|
|
|
|
"thumbnail": thumbnail,
|
|
|
|
"maxUsers": maxUsers,
|
|
|
|
"hasEnded": hasEnded,
|
|
|
|
"isValid": isValid,
|
|
|
|
"description": description,
|
|
|
|
"tags": shallow ? [] : throw UnimplementedError(),
|
|
|
|
"headlessHost": headlessHost,
|
|
|
|
"hostUsername": hostUsername,
|
2023-05-04 15:54:51 -04:00
|
|
|
"accessLevel": accessLevel.name, // This probably wont work, the API usually expects integers.
|
2023-05-04 14:57:16 -04:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2023-05-01 16:00:56 -04:00
|
|
|
bool get isLive => !hasEnded && isValid;
|
|
|
|
}
|
|
|
|
|
2023-05-04 15:54:51 -04:00
|
|
|
enum SessionAccessLevel {
|
|
|
|
unknown,
|
|
|
|
private,
|
|
|
|
friends,
|
|
|
|
friendsOfFriends,
|
|
|
|
anyone;
|
|
|
|
|
|
|
|
static const _readableNamesMap = {
|
|
|
|
SessionAccessLevel.unknown: "Unknown",
|
|
|
|
SessionAccessLevel.private: "Private",
|
|
|
|
SessionAccessLevel.friends: "Contacts",
|
|
|
|
SessionAccessLevel.friendsOfFriends: "Contacts+",
|
|
|
|
SessionAccessLevel.anyone: "Anyone",
|
|
|
|
};
|
|
|
|
|
|
|
|
factory SessionAccessLevel.fromName(String? name) {
|
|
|
|
return SessionAccessLevel.values.firstWhere((element) => element.name.toLowerCase() == name?.toLowerCase(),
|
|
|
|
orElse: () => SessionAccessLevel.unknown,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
String toReadableString() {
|
|
|
|
return SessionAccessLevel._readableNamesMap[this] ?? "Unknown";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-05-01 16:00:56 -04:00
|
|
|
class SessionUser {
|
|
|
|
final String id;
|
|
|
|
final String username;
|
|
|
|
final bool isPresent;
|
|
|
|
final int outputDevice;
|
|
|
|
|
|
|
|
SessionUser({required this.id, required this.username, required this.isPresent, required this.outputDevice});
|
|
|
|
|
|
|
|
factory SessionUser.fromMap(Map map) {
|
|
|
|
return SessionUser(
|
2023-05-04 15:54:51 -04:00
|
|
|
id: map["userID"] ?? "",
|
|
|
|
username: map["username"] ?? "Unknown",
|
|
|
|
isPresent: map["isPresent"] ?? false,
|
|
|
|
outputDevice: map["outputDevice"] ?? 0,
|
2023-05-01 16:00:56 -04:00
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|