6 Commits

4 changed files with 11 additions and 5 deletions

View File

@@ -120,4 +120,5 @@ enum RichObjectStringObjectType {
@JsonValue('guest') guest, @JsonValue('guest') guest,
@JsonValue('highlight') highlight, @JsonValue('highlight') highlight,
@JsonValue('talk-poll') talkPoll, @JsonValue('talk-poll') talkPoll,
@JsonValue('geo-location') geoLocation,
} }

View File

@@ -113,4 +113,5 @@ const _$RichObjectStringObjectTypeEnumMap = {
RichObjectStringObjectType.guest: 'guest', RichObjectStringObjectType.guest: 'guest',
RichObjectStringObjectType.highlight: 'highlight', RichObjectStringObjectType.highlight: 'highlight',
RichObjectStringObjectType.talkPoll: 'talk-poll', RichObjectStringObjectType.talkPoll: 'talk-poll',
RichObjectStringObjectType.geoLocation: 'geo-location',
}; };

View File

@@ -19,7 +19,7 @@ abstract class WebuntisApi extends ApiRequest {
WebuntisApi(this.method, this.genericParam, {this.authenticatedResponse = true}); WebuntisApi(this.method, this.genericParam, {this.authenticatedResponse = true});
Future<String> query(WebuntisApi untis) async { Future<String> query(WebuntisApi untis, {bool retry = false}) async {
var query = '{"id":"ID","method":"$method","params":${untis._body()},"jsonrpc":"2.0"}'; var query = '{"id":"ID","method":"$method","params":${untis._body()},"jsonrpc":"2.0"}';
var sessionId = '0'; var sessionId = '0';
@@ -32,8 +32,9 @@ abstract class WebuntisApi extends ApiRequest {
dynamic jsonData = jsonDecode(data.body); dynamic jsonData = jsonDecode(data.body);
if(jsonData['error'] != null) { if(jsonData['error'] != null) {
if(jsonData['error']['code'] == -8520) { if(jsonData['error']['code'] == -8520) {
if(retry) throw WebuntisError('Authentication was tried (probably session timeout), but was not successful!', 1);
await Authenticate.createSession(); await Authenticate.createSession();
this.query(untis); return await this.query(untis, retry: true);
} else { } else {
throw WebuntisError(jsonData['error']['message'], jsonData['error']['code']); throw WebuntisError(jsonData['error']['message'], jsonData['error']['code']);
} }

View File

@@ -13,8 +13,11 @@ class ParticipantsListView extends StatelessWidget {
lastname(participant) => participant.displayName.toString().split(' ').last; lastname(participant) => participant.displayName.toString().split(' ').last;
final participants = participantsResponse.data final participants = participantsResponse.data
.sorted((a, b) => lastname(a).compareTo(lastname(b))) .sorted((a, b) {
.sorted((a, b) => a.participantType.index.compareTo(b.participantType.index)); final typeComparison = a.participantType.index.compareTo(b.participantType.index);
if (typeComparison != 0) return typeComparison;
return lastname(a).compareTo(lastname(b));
});
var groupedParticipants = participants.groupListsBy((participant) => participant.participantType); var groupedParticipants = participants.groupListsBy((participant) => participant.participantType);
return Scaffold( return Scaffold(
@@ -27,7 +30,7 @@ class ParticipantsListView extends StatelessWidget {
children: [ children: [
ListTile( ListTile(
title: Text(entry.key.prettyName), title: Text(entry.key.prettyName),
titleTextStyle: TextStyle(fontWeight: FontWeight.bold), titleTextStyle: Theme.of(context).textTheme.titleMedium
), ),
...entry.value.map((participant) => ListTile( ...entry.value.map((participant) => ListTile(
leading: UserAvatar(id: participant.actorId), leading: UserAvatar(id: participant.actorId),