diff --git a/lib/content_views/approach_area_page.dart b/lib/content_views/approach_area_page.dart index dbdc0a7..a9c7192 100644 --- a/lib/content_views/approach_area_page.dart +++ b/lib/content_views/approach_area_page.dart @@ -10,6 +10,7 @@ import 'package:stadtbote/popups/tasks_popups/zip_popup.dart'; import 'package:stadtbote/protocoll_messages/zip_message.dart'; import 'package:stadtbote/tools/constants.dart'; import 'package:stadtbote/tools/message_service.dart'; +import 'package:stadtbote/tools/messages/ranking_updated.dart'; import 'package:stadtbote/tools/mqtt_core.dart'; import '../tools/util.dart'; @@ -40,7 +41,7 @@ class ApproachAreaPage extends ContentViewWidget { } class _ApproachAreaPageState extends State { - late List? _ranking; + late Ranking? _ranking; late bool _initCompleted = false; @@ -49,12 +50,10 @@ class _ApproachAreaPageState extends State { super.initState(); Future.delayed(const Duration(seconds: 0), () async { - _ranking = await MyApp.isarInstance.ranks.where().findAll(); + _ranking = await MyApp.isarInstance.rankings.where().findFirst(); _initCompleted = true; - _sendZip(Rank(), "24893"); - setState(() {}); }); @@ -74,6 +73,8 @@ class _ApproachAreaPageState extends State { return Util.getWaitWidget(context); } + _fillColumns(); + return Padding( padding: const EdgeInsets.all(8.0), child: InteractiveViewer( @@ -93,8 +94,8 @@ class _ApproachAreaPageState extends State { List columns = []; if (_ranking != null) { - for (int i = 0; i < _ranking!.length; i++) { - var rank = _ranking![i]; + for (int i = 0; i < _ranking!.ranks.length; i++) { + var rank = _ranking!.ranks[i]; List entries = []; entries.add( @@ -196,10 +197,10 @@ class _ApproachAreaPageState extends State { } _initMessages() { - /*MessageService().subscribe(Constants.messageTopicRankingUpdated, this, (rankingUpdateMessage) async { + MessageService().subscribe(Constants.messageTopicRankingUpdated, this, (rankingUpdateMessage) async { _ranking = await MyApp.isarInstance.rankings.where().findFirst(); setState(() {}); - });*/ + }); } } \ No newline at end of file diff --git a/lib/content_views/messages_page.dart b/lib/content_views/messages_page.dart index 4b55d7d..b54731b 100644 --- a/lib/content_views/messages_page.dart +++ b/lib/content_views/messages_page.dart @@ -129,7 +129,7 @@ class _MessagesPageState extends State { author: message.from == _sid ? _user : _central, createdAt: DateTime.parse(message.time).toLocal().millisecondsSinceEpoch, id: message.id.toString(), - text: message.text, + text: message.subj + "\n" + message.text, )); _messages.sort((a, b) => b.createdAt! > a.createdAt! ? 1 : 0); diff --git a/lib/main.dart b/lib/main.dart index df294e9..db8c447 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -40,7 +40,7 @@ Future main() async { MessageSchema, EnqueuedMessageSchema, LogEntrySchema, - RankSchema + RankingSchema ], directory: dir.path); runZonedGuarded(() {}, (error, stackTrace) { diff --git a/lib/model/rank.dart b/lib/model/rank.dart index dfb76f2..05e247d 100644 --- a/lib/model/rank.dart +++ b/lib/model/rank.dart @@ -5,15 +5,29 @@ part 'rank.g.dart'; @collection @JsonSerializable() +class Ranking { + @JsonValue(0) + late Id? id = Isar.autoIncrement; + + @JsonKey(name: "ranking") + late List ranks; + + Ranking(); + + factory Ranking.fromJson(Map json) => _$RankingFromJson(json); + + Map toJson() => _$RankingToJson(this); +} + +@embedded +@JsonSerializable() class Rank { - late Id id; + late int id; late String zip; late String area; - late int time; - late List vehicles; Rank(); diff --git a/lib/model/rank.g.dart b/lib/model/rank.g.dart index 336ccad..096128a 100644 --- a/lib/model/rank.g.dart +++ b/lib/model/rank.g.dart @@ -9,11 +9,402 @@ part of 'rank.dart'; // coverage:ignore-file // ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types -extension GetRankCollection on Isar { - IsarCollection get ranks => this.collection(); +extension GetRankingCollection on Isar { + IsarCollection get rankings => this.collection(); } -const RankSchema = CollectionSchema( +const RankingSchema = CollectionSchema( + name: r'Ranking', + id: 923686411839286896, + properties: { + r'ranks': PropertySchema( + id: 0, + name: r'ranks', + type: IsarType.objectList, + target: r'Rank', + ) + }, + estimateSize: _rankingEstimateSize, + serialize: _rankingSerialize, + deserialize: _rankingDeserialize, + deserializeProp: _rankingDeserializeProp, + idName: r'id', + indexes: {}, + links: {}, + embeddedSchemas: {r'Rank': RankSchema, r'Vehicle': VehicleSchema}, + getId: _rankingGetId, + getLinks: _rankingGetLinks, + attach: _rankingAttach, + version: '3.1.0+1', +); + +int _rankingEstimateSize( + Ranking object, + List offsets, + Map> allOffsets, +) { + var bytesCount = offsets.last; + bytesCount += 3 + object.ranks.length * 3; + { + final offsets = allOffsets[Rank]!; + for (var i = 0; i < object.ranks.length; i++) { + final value = object.ranks[i]; + bytesCount += RankSchema.estimateSize(value, offsets, allOffsets); + } + } + return bytesCount; +} + +void _rankingSerialize( + Ranking object, + IsarWriter writer, + List offsets, + Map> allOffsets, +) { + writer.writeObjectList( + offsets[0], + allOffsets, + RankSchema.serialize, + object.ranks, + ); +} + +Ranking _rankingDeserialize( + Id id, + IsarReader reader, + List offsets, + Map> allOffsets, +) { + final object = Ranking(); + object.id = id; + object.ranks = reader.readObjectList( + offsets[0], + RankSchema.deserialize, + allOffsets, + Rank(), + ) ?? + []; + return object; +} + +P _rankingDeserializeProp

( + IsarReader reader, + int propertyId, + int offset, + Map> allOffsets, +) { + switch (propertyId) { + case 0: + return (reader.readObjectList( + offset, + RankSchema.deserialize, + allOffsets, + Rank(), + ) ?? + []) as P; + default: + throw IsarError('Unknown property with id $propertyId'); + } +} + +Id _rankingGetId(Ranking object) { + return object.id ?? Isar.autoIncrement; +} + +List> _rankingGetLinks(Ranking object) { + return []; +} + +void _rankingAttach(IsarCollection col, Id id, Ranking object) { + object.id = id; +} + +extension RankingQueryWhereSort on QueryBuilder { + QueryBuilder anyId() { + return QueryBuilder.apply(this, (query) { + return query.addWhereClause(const IdWhereClause.any()); + }); + } +} + +extension RankingQueryWhere on QueryBuilder { + QueryBuilder idEqualTo(Id id) { + return QueryBuilder.apply(this, (query) { + return query.addWhereClause(IdWhereClause.between( + lower: id, + upper: id, + )); + }); + } + + QueryBuilder idNotEqualTo(Id id) { + return QueryBuilder.apply(this, (query) { + if (query.whereSort == Sort.asc) { + return query + .addWhereClause( + IdWhereClause.lessThan(upper: id, includeUpper: false), + ) + .addWhereClause( + IdWhereClause.greaterThan(lower: id, includeLower: false), + ); + } else { + return query + .addWhereClause( + IdWhereClause.greaterThan(lower: id, includeLower: false), + ) + .addWhereClause( + IdWhereClause.lessThan(upper: id, includeUpper: false), + ); + } + }); + } + + QueryBuilder idGreaterThan(Id id, + {bool include = false}) { + return QueryBuilder.apply(this, (query) { + return query.addWhereClause( + IdWhereClause.greaterThan(lower: id, includeLower: include), + ); + }); + } + + QueryBuilder idLessThan(Id id, + {bool include = false}) { + return QueryBuilder.apply(this, (query) { + return query.addWhereClause( + IdWhereClause.lessThan(upper: id, includeUpper: include), + ); + }); + } + + QueryBuilder idBetween( + Id lowerId, + Id upperId, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addWhereClause(IdWhereClause.between( + lower: lowerId, + includeLower: includeLower, + upper: upperId, + includeUpper: includeUpper, + )); + }); + } +} + +extension RankingQueryFilter + on QueryBuilder { + QueryBuilder idIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'id', + )); + }); + } + + QueryBuilder idIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'id', + )); + }); + } + + QueryBuilder idEqualTo(Id? value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'id', + value: value, + )); + }); + } + + QueryBuilder idGreaterThan( + Id? value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'id', + value: value, + )); + }); + } + + QueryBuilder idLessThan( + Id? value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'id', + value: value, + )); + }); + } + + QueryBuilder idBetween( + Id? lower, + Id? upper, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'id', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + )); + }); + } + + QueryBuilder ranksLengthEqualTo( + int length) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'ranks', + length, + true, + length, + true, + ); + }); + } + + QueryBuilder ranksIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'ranks', + 0, + true, + 0, + true, + ); + }); + } + + QueryBuilder ranksIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'ranks', + 0, + false, + 999999, + true, + ); + }); + } + + QueryBuilder ranksLengthLessThan( + int length, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'ranks', + 0, + true, + length, + include, + ); + }); + } + + QueryBuilder ranksLengthGreaterThan( + int length, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'ranks', + length, + include, + 999999, + true, + ); + }); + } + + QueryBuilder ranksLengthBetween( + int lower, + int upper, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'ranks', + lower, + includeLower, + upper, + includeUpper, + ); + }); + } +} + +extension RankingQueryObject + on QueryBuilder { + QueryBuilder ranksElement( + FilterQuery q) { + return QueryBuilder.apply(this, (query) { + return query.object(q, r'ranks'); + }); + } +} + +extension RankingQueryLinks + on QueryBuilder {} + +extension RankingQuerySortBy on QueryBuilder {} + +extension RankingQuerySortThenBy + on QueryBuilder { + QueryBuilder thenById() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'id', Sort.asc); + }); + } + + QueryBuilder thenByIdDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'id', Sort.desc); + }); + } +} + +extension RankingQueryWhereDistinct + on QueryBuilder {} + +extension RankingQueryProperty + on QueryBuilder { + QueryBuilder idProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'id'); + }); + } + + QueryBuilder, QQueryOperations> ranksProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'ranks'); + }); + } +} + +// ************************************************************************** +// IsarEmbeddedGenerator +// ************************************************************************** + +// coverage:ignore-file +// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types + +const RankSchema = Schema( name: r'Rank', id: 4990427334210593033, properties: { @@ -22,9 +413,9 @@ const RankSchema = CollectionSchema( name: r'area', type: IsarType.string, ), - r'time': PropertySchema( + r'id': PropertySchema( id: 1, - name: r'time', + name: r'id', type: IsarType.long, ), r'vehicles': PropertySchema( @@ -43,14 +434,6 @@ const RankSchema = CollectionSchema( serialize: _rankSerialize, deserialize: _rankDeserialize, deserializeProp: _rankDeserializeProp, - idName: r'id', - indexes: {}, - links: {}, - embeddedSchemas: {r'Vehicle': VehicleSchema}, - getId: _rankGetId, - getLinks: _rankGetLinks, - attach: _rankAttach, - version: '3.1.0+1', ); int _rankEstimateSize( @@ -79,7 +462,7 @@ void _rankSerialize( Map> allOffsets, ) { writer.writeString(offsets[0], object.area); - writer.writeLong(offsets[1], object.time); + writer.writeLong(offsets[1], object.id); writer.writeObjectList( offsets[2], allOffsets, @@ -97,8 +480,7 @@ Rank _rankDeserialize( ) { final object = Rank(); object.area = reader.readString(offsets[0]); - object.id = id; - object.time = reader.readLong(offsets[1]); + object.id = reader.readLong(offsets[1]); object.vehicles = reader.readObjectList( offsets[2], VehicleSchema.deserialize, @@ -136,93 +518,6 @@ P _rankDeserializeProp

( } } -Id _rankGetId(Rank object) { - return object.id; -} - -List> _rankGetLinks(Rank object) { - return []; -} - -void _rankAttach(IsarCollection col, Id id, Rank object) { - object.id = id; -} - -extension RankQueryWhereSort on QueryBuilder { - QueryBuilder anyId() { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(const IdWhereClause.any()); - }); - } -} - -extension RankQueryWhere on QueryBuilder { - QueryBuilder idEqualTo(Id id) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: id, - upper: id, - )); - }); - } - - QueryBuilder idNotEqualTo(Id id) { - return QueryBuilder.apply(this, (query) { - if (query.whereSort == Sort.asc) { - return query - .addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: false), - ) - .addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: false), - ); - } else { - return query - .addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: false), - ) - .addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: false), - ); - } - }); - } - - QueryBuilder idGreaterThan(Id id, - {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: include), - ); - }); - } - - QueryBuilder idLessThan(Id id, - {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: include), - ); - }); - } - - QueryBuilder idBetween( - Id lowerId, - Id upperId, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: lowerId, - includeLower: includeLower, - upper: upperId, - includeUpper: includeUpper, - )); - }); - } -} - extension RankQueryFilter on QueryBuilder { QueryBuilder areaEqualTo( String value, { @@ -352,7 +647,7 @@ extension RankQueryFilter on QueryBuilder { }); } - QueryBuilder idEqualTo(Id value) { + QueryBuilder idEqualTo(int value) { return QueryBuilder.apply(this, (query) { return query.addFilterCondition(FilterCondition.equalTo( property: r'id', @@ -362,7 +657,7 @@ extension RankQueryFilter on QueryBuilder { } QueryBuilder idGreaterThan( - Id value, { + int value, { bool include = false, }) { return QueryBuilder.apply(this, (query) { @@ -375,7 +670,7 @@ extension RankQueryFilter on QueryBuilder { } QueryBuilder idLessThan( - Id value, { + int value, { bool include = false, }) { return QueryBuilder.apply(this, (query) { @@ -388,58 +683,6 @@ extension RankQueryFilter on QueryBuilder { } QueryBuilder idBetween( - Id lower, - Id upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'id', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); - }); - } - - QueryBuilder timeEqualTo(int value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'time', - value: value, - )); - }); - } - - QueryBuilder timeGreaterThan( - int value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'time', - value: value, - )); - }); - } - - QueryBuilder timeLessThan( - int value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'time', - value: value, - )); - }); - } - - QueryBuilder timeBetween( int lower, int upper, { bool includeLower = true, @@ -447,7 +690,7 @@ extension RankQueryFilter on QueryBuilder { }) { return QueryBuilder.apply(this, (query) { return query.addFilterCondition(FilterCondition.between( - property: r'time', + property: r'id', lower: lower, includeLower: includeLower, upper: upper, @@ -678,154 +921,6 @@ extension RankQueryObject on QueryBuilder { } } -extension RankQueryLinks on QueryBuilder {} - -extension RankQuerySortBy on QueryBuilder { - QueryBuilder sortByArea() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'area', Sort.asc); - }); - } - - QueryBuilder sortByAreaDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'area', Sort.desc); - }); - } - - QueryBuilder sortByTime() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'time', Sort.asc); - }); - } - - QueryBuilder sortByTimeDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'time', Sort.desc); - }); - } - - QueryBuilder sortByZip() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'zip', Sort.asc); - }); - } - - QueryBuilder sortByZipDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'zip', Sort.desc); - }); - } -} - -extension RankQuerySortThenBy on QueryBuilder { - QueryBuilder thenByArea() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'area', Sort.asc); - }); - } - - QueryBuilder thenByAreaDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'area', Sort.desc); - }); - } - - QueryBuilder thenById() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'id', Sort.asc); - }); - } - - QueryBuilder thenByIdDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'id', Sort.desc); - }); - } - - QueryBuilder thenByTime() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'time', Sort.asc); - }); - } - - QueryBuilder thenByTimeDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'time', Sort.desc); - }); - } - - QueryBuilder thenByZip() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'zip', Sort.asc); - }); - } - - QueryBuilder thenByZipDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'zip', Sort.desc); - }); - } -} - -extension RankQueryWhereDistinct on QueryBuilder { - QueryBuilder distinctByArea( - {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'area', caseSensitive: caseSensitive); - }); - } - - QueryBuilder distinctByTime() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'time'); - }); - } - - QueryBuilder distinctByZip( - {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'zip', caseSensitive: caseSensitive); - }); - } -} - -extension RankQueryProperty on QueryBuilder { - QueryBuilder idProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'id'); - }); - } - - QueryBuilder areaProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'area'); - }); - } - - QueryBuilder timeProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'time'); - }); - } - - QueryBuilder, QQueryOperations> vehiclesProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'vehicles'); - }); - } - - QueryBuilder zipProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'zip'); - }); - } -} - -// ************************************************************************** -// IsarEmbeddedGenerator -// ************************************************************************** - // coverage:ignore-file // ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types @@ -1046,11 +1141,21 @@ extension VehicleQueryObject // JsonSerializableGenerator // ************************************************************************** +Ranking _$RankingFromJson(Map json) => Ranking() + ..id = json['id'] as int? + ..ranks = (json['ranking'] as List) + .map((e) => Rank.fromJson(e as Map)) + .toList(); + +Map _$RankingToJson(Ranking instance) => { + 'id': instance.id, + 'ranking': instance.ranks, + }; + Rank _$RankFromJson(Map json) => Rank() ..id = json['id'] as int ..zip = json['zip'] as String ..area = json['area'] as String - ..time = json['time'] as int ..vehicles = (json['vehicles'] as List) .map((e) => Vehicle.fromJson(e as Map)) .toList(); @@ -1059,7 +1164,6 @@ Map _$RankToJson(Rank instance) => { 'id': instance.id, 'zip': instance.zip, 'area': instance.area, - 'time': instance.time, 'vehicles': instance.vehicles, }; diff --git a/lib/tools/mqtt_core.dart b/lib/tools/mqtt_core.dart index 70ac634..290ab19 100644 --- a/lib/tools/mqtt_core.dart +++ b/lib/tools/mqtt_core.dart @@ -13,6 +13,7 @@ import 'package:stadtbote/model/job.dart'; import 'package:stadtbote/model/log_entry.dart'; import 'package:stadtbote/model/message.dart'; import 'package:stadtbote/model/location_status.dart'; +import 'package:stadtbote/model/rank.dart'; import 'package:stadtbote/protocoll_messages/acknowledge_job.dart'; import 'package:stadtbote/protocoll_messages/bootstrap_request.dart'; import 'package:stadtbote/protocoll_messages/bootstrap_response_payload.dart'; @@ -27,6 +28,7 @@ import 'package:stadtbote/tools/message_service.dart'; import 'package:stadtbote/tools/messages/job_deleted_message.dart'; import 'package:stadtbote/tools/messages/job_received_message.dart'; import 'package:stadtbote/tools/messages/message_message.dart'; +import 'package:stadtbote/tools/messages/ranking_updated.dart'; import 'package:stadtbote/tools/messages/session_info_update.dart'; import 'package:stadtbote/tools/messages/status_info_update.dart'; // ignore: depend_on_referenced_packages @@ -246,16 +248,15 @@ class MqttCore { MessageService().publish(Constants.messageTopicLocationStatusUpdated, arguments: LocationStatusUpdate(status: locationStatus)); } - void _rankingMessageReceived(List payloadData) async { - /*Map rankingMap = {}; - rankingMap["ranks"] = payloadData; - var ranking = Ranking.fromJson(rankingMap); + void _rankingMessageReceived(payloadData) async { + var ranking = Ranking.fromJson(payloadData); await MyApp.isarInstance.writeTxn(() async { + await MyApp.isarInstance.rankings.clear(); await MyApp.isarInstance.rankings.put(ranking); }); - MessageService().publish(Constants.messageTopicRankingUpdated, arguments: RankingUpdated());*/ + MessageService().publish(Constants.messageTopicRankingUpdated, arguments: RankingUpdated()); } void _jobMessageReceived(payloadData) async { @@ -405,6 +406,8 @@ class MqttCore { _connectToBroker(); } catch (ex) { + Util.logException("bootstrap failed"); + _startBootstrapReconnectTimer(); } }