diff --git a/lib/content_views/approach_area_page.dart b/lib/content_views/approach_area_page.dart index d5dec0e..5e7f233 100644 --- a/lib/content_views/approach_area_page.dart +++ b/lib/content_views/approach_area_page.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:isar/isar.dart'; import 'package:stadtbote/content_views/utils/content_view_widget.dart'; import 'package:stadtbote/content_views/utils/header_info.dart'; -import 'package:stadtbote/model/ranking.dart'; +import 'package:stadtbote/model/rank.dart'; import 'package:stadtbote/popups/tasks_popups/zip_popup.dart'; import 'package:stadtbote/protocoll_messages/zip_message.dart'; import 'package:stadtbote/tools/mqtt_core.dart'; @@ -41,14 +41,14 @@ class ApproachAreaPage extends ContentViewWidget { } class _ApproachAreaPageState extends State { - late Ranking? _ranking; + late List? _rankings; late bool _initCompleted = false; @override void initState() { Future.delayed(const Duration(seconds: 0), () async { - _ranking = await MyApp.isarInstance.rankings.where().findFirst(); + _rankings = await MyApp.isarInstance.ranks.where().findAll(); _initCompleted = true; @@ -82,9 +82,9 @@ class _ApproachAreaPageState extends State { List _fillColumns() { List columns = []; - if (_ranking != null) { - for (int i = 0; i < _ranking!.ranks.length; i++) { - var rank = _ranking!.ranks[i]; + if (_rankings != null) { + for (int i = 0; i < _rankings!.length; i++) { + var rank = _rankings![i]; List entries = []; entries.add( diff --git a/lib/main.dart b/lib/main.dart index a3f74ad..b43686a 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -6,7 +6,7 @@ import 'package:isar/isar.dart'; import 'package:path_provider/path_provider.dart'; import 'package:stadtbote/messages/pop_content_view_message.dart'; import 'package:stadtbote/model/message.dart'; -import 'package:stadtbote/model/ranking.dart'; +import 'package:stadtbote/model/rank.dart'; import 'package:stadtbote/model/status.dart'; import 'package:stadtbote/model/task_info.dart'; import 'package:stadtbote/popups/accept_jobs_popup.dart'; @@ -34,7 +34,7 @@ Future main() async { JobSchema, TaskInfoSchema, MessageSchema, - RankingSchema + RankSchema ], directory: dir.path); runZonedGuarded(() {}, (error, stackTrace) { diff --git a/lib/model/ranking.dart b/lib/model/rank.dart similarity index 65% rename from lib/model/ranking.dart rename to lib/model/rank.dart index c278171..dfb76f2 100644 --- a/lib/model/ranking.dart +++ b/lib/model/rank.dart @@ -1,33 +1,18 @@ import 'package:isar/isar.dart'; import 'package:json_annotation/json_annotation.dart'; -part 'ranking.g.dart'; +part 'rank.g.dart'; @collection @JsonSerializable() -class Ranking { - @JsonKey(name: 'id', defaultValue: 0) - late Id id = 0; - - late List ranks; - - Ranking(); - - factory Ranking.fromJson(Map json) => _$RankingFromJson(json); - - Map toJson() => _$RankingToJson(this); -} - -@embedded -@JsonSerializable() class Rank { - late int id; + late Id id; late String zip; late String area; - late String time; + late int time; late List vehicles; diff --git a/lib/model/ranking.g.dart b/lib/model/rank.g.dart similarity index 72% rename from lib/model/ranking.g.dart rename to lib/model/rank.g.dart index f64bc10..336ccad 100644 --- a/lib/model/ranking.g.dart +++ b/lib/model/rank.g.dart @@ -1,6 +1,6 @@ // GENERATED CODE - DO NOT MODIFY BY HAND -part of 'ranking.dart'; +part of 'rank.dart'; // ************************************************************************** // IsarCollectionGenerator @@ -9,85 +9,108 @@ part of 'ranking.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 GetRankingCollection on Isar { - IsarCollection get rankings => this.collection(); +extension GetRankCollection on Isar { + IsarCollection get ranks => this.collection(); } -const RankingSchema = CollectionSchema( - name: r'Ranking', - id: 923686411839286896, +const RankSchema = CollectionSchema( + name: r'Rank', + id: 4990427334210593033, properties: { - r'ranks': PropertySchema( + r'area': PropertySchema( id: 0, - name: r'ranks', + name: r'area', + type: IsarType.string, + ), + r'time': PropertySchema( + id: 1, + name: r'time', + type: IsarType.long, + ), + r'vehicles': PropertySchema( + id: 2, + name: r'vehicles', type: IsarType.objectList, - target: r'Rank', + target: r'Vehicle', + ), + r'zip': PropertySchema( + id: 3, + name: r'zip', + type: IsarType.string, ) }, - estimateSize: _rankingEstimateSize, - serialize: _rankingSerialize, - deserialize: _rankingDeserialize, - deserializeProp: _rankingDeserializeProp, + estimateSize: _rankEstimateSize, + serialize: _rankSerialize, + deserialize: _rankDeserialize, + deserializeProp: _rankDeserializeProp, idName: r'id', indexes: {}, links: {}, - embeddedSchemas: {r'Rank': RankSchema, r'Vehicle': VehicleSchema}, - getId: _rankingGetId, - getLinks: _rankingGetLinks, - attach: _rankingAttach, + embeddedSchemas: {r'Vehicle': VehicleSchema}, + getId: _rankGetId, + getLinks: _rankGetLinks, + attach: _rankAttach, version: '3.1.0+1', ); -int _rankingEstimateSize( - Ranking object, +int _rankEstimateSize( + Rank object, List offsets, Map> allOffsets, ) { var bytesCount = offsets.last; - bytesCount += 3 + object.ranks.length * 3; + bytesCount += 3 + object.area.length * 3; + bytesCount += 3 + object.vehicles.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); + final offsets = allOffsets[Vehicle]!; + for (var i = 0; i < object.vehicles.length; i++) { + final value = object.vehicles[i]; + bytesCount += VehicleSchema.estimateSize(value, offsets, allOffsets); } } + bytesCount += 3 + object.zip.length * 3; return bytesCount; } -void _rankingSerialize( - Ranking object, +void _rankSerialize( + Rank object, IsarWriter writer, List offsets, Map> allOffsets, ) { - writer.writeObjectList( - offsets[0], + writer.writeString(offsets[0], object.area); + writer.writeLong(offsets[1], object.time); + writer.writeObjectList( + offsets[2], allOffsets, - RankSchema.serialize, - object.ranks, + VehicleSchema.serialize, + object.vehicles, ); + writer.writeString(offsets[3], object.zip); } -Ranking _rankingDeserialize( +Rank _rankDeserialize( Id id, IsarReader reader, List offsets, Map> allOffsets, ) { - final object = Ranking(); + final object = Rank(); + object.area = reader.readString(offsets[0]); object.id = id; - object.ranks = reader.readObjectList( - offsets[0], - RankSchema.deserialize, + object.time = reader.readLong(offsets[1]); + object.vehicles = reader.readObjectList( + offsets[2], + VehicleSchema.deserialize, allOffsets, - Rank(), + Vehicle(), ) ?? []; + object.zip = reader.readString(offsets[3]); return object; } -P _rankingDeserializeProp

( +P _rankDeserializeProp

( IsarReader reader, int propertyId, int offset, @@ -95,40 +118,46 @@ P _rankingDeserializeProp

( ) { switch (propertyId) { case 0: - return (reader.readObjectList( + return (reader.readString(offset)) as P; + case 1: + return (reader.readLong(offset)) as P; + case 2: + return (reader.readObjectList( offset, - RankSchema.deserialize, + VehicleSchema.deserialize, allOffsets, - Rank(), + Vehicle(), ) ?? []) as P; + case 3: + return (reader.readString(offset)) as P; default: throw IsarError('Unknown property with id $propertyId'); } } -Id _rankingGetId(Ranking object) { +Id _rankGetId(Rank object) { return object.id; } -List> _rankingGetLinks(Ranking object) { +List> _rankGetLinks(Rank object) { return []; } -void _rankingAttach(IsarCollection col, Id id, Ranking object) { +void _rankAttach(IsarCollection col, Id id, Rank object) { object.id = id; } -extension RankingQueryWhereSort on QueryBuilder { - QueryBuilder anyId() { +extension RankQueryWhereSort on QueryBuilder { + QueryBuilder anyId() { return QueryBuilder.apply(this, (query) { return query.addWhereClause(const IdWhereClause.any()); }); } } -extension RankingQueryWhere on QueryBuilder { - QueryBuilder idEqualTo(Id id) { +extension RankQueryWhere on QueryBuilder { + QueryBuilder idEqualTo(Id id) { return QueryBuilder.apply(this, (query) { return query.addWhereClause(IdWhereClause.between( lower: id, @@ -137,7 +166,7 @@ extension RankingQueryWhere on QueryBuilder { }); } - QueryBuilder idNotEqualTo(Id id) { + QueryBuilder idNotEqualTo(Id id) { return QueryBuilder.apply(this, (query) { if (query.whereSort == Sort.asc) { return query @@ -159,7 +188,7 @@ extension RankingQueryWhere on QueryBuilder { }); } - QueryBuilder idGreaterThan(Id id, + QueryBuilder idGreaterThan(Id id, {bool include = false}) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( @@ -168,7 +197,7 @@ extension RankingQueryWhere on QueryBuilder { }); } - QueryBuilder idLessThan(Id id, + QueryBuilder idLessThan(Id id, {bool include = false}) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( @@ -177,7 +206,7 @@ extension RankingQueryWhere on QueryBuilder { }); } - QueryBuilder idBetween( + QueryBuilder idBetween( Id lowerId, Id upperId, { bool includeLower = true, @@ -194,324 +223,6 @@ extension RankingQueryWhere on QueryBuilder { } } -extension RankingQueryFilter - on QueryBuilder { - 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: { - r'area': PropertySchema( - id: 0, - name: r'area', - type: IsarType.string, - ), - r'id': PropertySchema( - id: 1, - name: r'id', - type: IsarType.long, - ), - r'time': PropertySchema( - id: 2, - name: r'time', - type: IsarType.string, - ), - r'vehicles': PropertySchema( - id: 3, - name: r'vehicles', - type: IsarType.objectList, - target: r'Vehicle', - ), - r'zip': PropertySchema( - id: 4, - name: r'zip', - type: IsarType.string, - ) - }, - estimateSize: _rankEstimateSize, - serialize: _rankSerialize, - deserialize: _rankDeserialize, - deserializeProp: _rankDeserializeProp, -); - -int _rankEstimateSize( - Rank object, - List offsets, - Map> allOffsets, -) { - var bytesCount = offsets.last; - bytesCount += 3 + object.area.length * 3; - bytesCount += 3 + object.time.length * 3; - bytesCount += 3 + object.vehicles.length * 3; - { - final offsets = allOffsets[Vehicle]!; - for (var i = 0; i < object.vehicles.length; i++) { - final value = object.vehicles[i]; - bytesCount += VehicleSchema.estimateSize(value, offsets, allOffsets); - } - } - bytesCount += 3 + object.zip.length * 3; - return bytesCount; -} - -void _rankSerialize( - Rank object, - IsarWriter writer, - List offsets, - Map> allOffsets, -) { - writer.writeString(offsets[0], object.area); - writer.writeLong(offsets[1], object.id); - writer.writeString(offsets[2], object.time); - writer.writeObjectList( - offsets[3], - allOffsets, - VehicleSchema.serialize, - object.vehicles, - ); - writer.writeString(offsets[4], object.zip); -} - -Rank _rankDeserialize( - Id id, - IsarReader reader, - List offsets, - Map> allOffsets, -) { - final object = Rank(); - object.area = reader.readString(offsets[0]); - object.id = reader.readLong(offsets[1]); - object.time = reader.readString(offsets[2]); - object.vehicles = reader.readObjectList( - offsets[3], - VehicleSchema.deserialize, - allOffsets, - Vehicle(), - ) ?? - []; - object.zip = reader.readString(offsets[4]); - return object; -} - -P _rankDeserializeProp

( - IsarReader reader, - int propertyId, - int offset, - Map> allOffsets, -) { - switch (propertyId) { - case 0: - return (reader.readString(offset)) as P; - case 1: - return (reader.readLong(offset)) as P; - case 2: - return (reader.readString(offset)) as P; - case 3: - return (reader.readObjectList( - offset, - VehicleSchema.deserialize, - allOffsets, - Vehicle(), - ) ?? - []) as P; - case 4: - return (reader.readString(offset)) as P; - default: - throw IsarError('Unknown property with id $propertyId'); - } -} - extension RankQueryFilter on QueryBuilder { QueryBuilder areaEqualTo( String value, { @@ -641,7 +352,7 @@ extension RankQueryFilter on QueryBuilder { }); } - QueryBuilder idEqualTo(int value) { + QueryBuilder idEqualTo(Id value) { return QueryBuilder.apply(this, (query) { return query.addFilterCondition(FilterCondition.equalTo( property: r'id', @@ -651,7 +362,7 @@ extension RankQueryFilter on QueryBuilder { } QueryBuilder idGreaterThan( - int value, { + Id value, { bool include = false, }) { return QueryBuilder.apply(this, (query) { @@ -664,7 +375,7 @@ extension RankQueryFilter on QueryBuilder { } QueryBuilder idLessThan( - int value, { + Id value, { bool include = false, }) { return QueryBuilder.apply(this, (query) { @@ -677,8 +388,8 @@ extension RankQueryFilter on QueryBuilder { } QueryBuilder idBetween( - int lower, - int upper, { + Id lower, + Id upper, { bool includeLower = true, bool includeUpper = true, }) { @@ -693,55 +404,46 @@ extension RankQueryFilter on QueryBuilder { }); } - QueryBuilder timeEqualTo( - String value, { - bool caseSensitive = true, - }) { + QueryBuilder timeEqualTo(int value) { return QueryBuilder.apply(this, (query) { return query.addFilterCondition(FilterCondition.equalTo( property: r'time', value: value, - caseSensitive: caseSensitive, )); }); } QueryBuilder timeGreaterThan( - String value, { + int value, { bool include = false, - bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { return query.addFilterCondition(FilterCondition.greaterThan( include: include, property: r'time', value: value, - caseSensitive: caseSensitive, )); }); } QueryBuilder timeLessThan( - String value, { + int value, { bool include = false, - bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { return query.addFilterCondition(FilterCondition.lessThan( include: include, property: r'time', value: value, - caseSensitive: caseSensitive, )); }); } QueryBuilder timeBetween( - String lower, - String upper, { + int lower, + int upper, { bool includeLower = true, bool includeUpper = true, - bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { return query.addFilterCondition(FilterCondition.between( @@ -750,73 +452,6 @@ extension RankQueryFilter on QueryBuilder { includeLower: includeLower, upper: upper, includeUpper: includeUpper, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder timeStartsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.startsWith( - property: r'time', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder timeEndsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.endsWith( - property: r'time', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder timeContains(String value, - {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.contains( - property: r'time', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder timeMatches(String pattern, - {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.matches( - property: r'time', - wildcard: pattern, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder timeIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'time', - value: '', - )); - }); - } - - QueryBuilder timeIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - property: r'time', - value: '', )); }); } @@ -1043,6 +678,154 @@ 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 @@ -1263,22 +1046,11 @@ extension VehicleQueryObject // JsonSerializableGenerator // ************************************************************************** -Ranking _$RankingFromJson(Map json) => Ranking() - ..id = json['id'] as int? ?? 0 - ..ranks = (json['ranks'] as List) - .map((e) => Rank.fromJson(e as Map)) - .toList(); - -Map _$RankingToJson(Ranking instance) => { - 'id': instance.id, - 'ranks': 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 String + ..time = json['time'] as int ..vehicles = (json['vehicles'] as List) .map((e) => Vehicle.fromJson(e as Map)) .toList(); diff --git a/lib/tools/mqtt_core.dart b/lib/tools/mqtt_core.dart index 84aa423..5a37202 100644 --- a/lib/tools/mqtt_core.dart +++ b/lib/tools/mqtt_core.dart @@ -6,7 +6,7 @@ import 'package:flutter/services.dart'; import 'package:isar/isar.dart'; import 'package:mqtt_client/mqtt_client.dart'; import 'package:mqtt_client/mqtt_server_client.dart'; -import 'package:stadtbote/model/ranking.dart'; +import 'package:stadtbote/model/rank.dart'; import 'package:stadtbote/model/status.dart'; import 'package:stadtbote/protocoll_messages/bootstrap_response_payload.dart'; import 'package:stadtbote/model/job.dart'; @@ -172,31 +172,29 @@ class MqttCore { var topicArray = topic!.split('/'); var messageType = topicArray[topicArray.length - 1]; - Map messageData = jsonDecode(payload); - switch(messageType) { case 'session': - _sessionMessageReceived(messageData); + _sessionMessageReceived(jsonDecode(payload)); break; case 'status': - _statusMessageReceived(messageData); + _statusMessageReceived(jsonDecode(payload)); break; - case 'ranks': - //_rankingMessageReceived(payloadData); + case 'ranking': + _rankingMessageReceived(jsonDecode(payload)); break; case 'job': - _jobMessageReceived(messageData); + _jobMessageReceived(jsonDecode(payload)); break; case 'job_del': - _jobDeleteReceived(messageData); + _jobDeleteReceived(jsonDecode(payload)); break; case 'sync_request': - _syncRequestReceived(messageData); + _syncRequestReceived(jsonDecode(payload)); break; case "mssg": @@ -216,6 +214,7 @@ class MqttCore { _mqttClient.subscribe(_fromServerTopic + "/status", MqttQos.exactlyOnce); _mqttClient.subscribe(_fromServerTopic + "/job", MqttQos.exactlyOnce); _mqttClient.subscribe(_fromServerTopic + "/job_del", MqttQos.exactlyOnce); + _mqttClient.subscribe(_fromServerTopic + "/ranking", MqttQos.exactlyOnce); Util.logInfo('subscribed to topic: $_fromServerTopic'); MessageService().publish(Constants.messageTopicConnectionStatusChanged, arguments: ConnectionStatus(status: ConnectionStatusEnum.connected)); @@ -250,13 +249,14 @@ class MqttCore { } void _rankingMessageReceived(List payloadData) async { - Map rankingMap = {}; - rankingMap["ranks"] = payloadData; - var ranking = Ranking.fromJson(rankingMap); + for (var entry in payloadData) { + var rank = Rank.fromJson(entry); + + await MyApp.isarInstance.writeTxn(() async { + await MyApp.isarInstance.ranks.put(rank); + }); + } - await MyApp.isarInstance.writeTxn(() async { - await MyApp.isarInstance.rankings.put(ranking); - }); MessageService().publish(Constants.messageTopicRankingUpdated, arguments: RankingUpdated()); }