diff --git a/lib/main.dart b/lib/main.dart index 56997fb..d8d681e 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -77,8 +77,6 @@ class MyApp extends StatelessWidget { Geolocator.getPositionStream(locationSettings: locationSettings).listen((Position? position) { MyApp.currentPosition = position; - - Util.logInfo(position == null ? 'Unknown' : '${position.latitude.toString()}, ${position.longitude.toString()}'); }); } } diff --git a/lib/model/job.g.dart b/lib/model/job.g.dart index 675b7fc..ce273f6 100644 --- a/lib/model/job.g.dart +++ b/lib/model/job.g.dart @@ -74,7 +74,8 @@ const JobSchema = CollectionSchema( embeddedSchemas: { r'JobTour': JobTourSchema, r'TourPosition': TourPositionSchema, - r'TourTask': TourTaskSchema + r'TourTask': TourTaskSchema, + r'TourEntry': TourEntrySchema }, getId: _jobGetId, getLinks: _jobGetLinks, diff --git a/lib/model/tour_task.dart b/lib/model/tour_task.dart index 101b703..b6d3937 100644 --- a/lib/model/tour_task.dart +++ b/lib/model/tour_task.dart @@ -23,11 +23,28 @@ class TourTask { late int? taskArrival; @JsonKey(name: 'task_fin_work') late int? taskFinWork; - late List? entries; + late List? entries; TourTask(); factory TourTask.fromJson(Map json) => _$TourTaskFromJson(json); Map toJson() => _$TourTaskToJson(this); +} + +@embedded +@JsonSerializable() +class TourEntry { + late int code; + + late String text; + + @JsonKey(name: 'query_remark') + late bool queryRemark; + + TourEntry(); + + factory TourEntry.fromJson(Map json) => _$TourEntryFromJson(json); + + Map toJson() => _$TourEntryToJson(this); } \ No newline at end of file diff --git a/lib/model/tour_task.g.dart b/lib/model/tour_task.g.dart index bfbcbb9..0dd8ed5 100644 --- a/lib/model/tour_task.g.dart +++ b/lib/model/tour_task.g.dart @@ -16,7 +16,8 @@ const TourTaskSchema = Schema( r'entries': PropertySchema( id: 0, name: r'entries', - type: IsarType.stringList, + type: IsarType.objectList, + target: r'TourEntry', ), r'max': PropertySchema( id: 1, @@ -101,9 +102,11 @@ int _tourTaskEstimateSize( if (list != null) { bytesCount += 3 + list.length * 3; { + final offsets = allOffsets[TourEntry]!; for (var i = 0; i < list.length; i++) { final value = list[i]; - bytesCount += value.length * 3; + bytesCount += + TourEntrySchema.estimateSize(value, offsets, allOffsets); } } } @@ -130,7 +133,12 @@ void _tourTaskSerialize( List offsets, Map> allOffsets, ) { - writer.writeStringList(offsets[0], object.entries); + writer.writeObjectList( + offsets[0], + allOffsets, + TourEntrySchema.serialize, + object.entries, + ); writer.writeLong(offsets[1], object.max); writer.writeLong(offsets[2], object.maxLen); writer.writeLong(offsets[3], object.min); @@ -153,7 +161,12 @@ TourTask _tourTaskDeserialize( Map> allOffsets, ) { final object = TourTask(); - object.entries = reader.readStringList(offsets[0]); + object.entries = reader.readObjectList( + offsets[0], + TourEntrySchema.deserialize, + allOffsets, + TourEntry(), + ); object.max = reader.readLongOrNull(offsets[1]); object.maxLen = reader.readLongOrNull(offsets[2]); object.min = reader.readLongOrNull(offsets[3]); @@ -178,7 +191,12 @@ P _tourTaskDeserializeProp

( ) { switch (propertyId) { case 0: - return (reader.readStringList(offset)) as P; + return (reader.readObjectList( + offset, + TourEntrySchema.deserialize, + allOffsets, + TourEntry(), + )) as P; case 1: return (reader.readLongOrNull(offset)) as P; case 2: @@ -228,141 +246,6 @@ extension TourTaskQueryFilter }); } - QueryBuilder entriesElementEqualTo( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'entries', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - entriesElementGreaterThan( - String value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'entries', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - entriesElementLessThan( - String value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'entries', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder entriesElementBetween( - String lower, - String upper, { - bool includeLower = true, - bool includeUpper = true, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'entries', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - entriesElementStartsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.startsWith( - property: r'entries', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - entriesElementEndsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.endsWith( - property: r'entries', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - entriesElementContains(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.contains( - property: r'entries', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder entriesElementMatches( - String pattern, - {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.matches( - property: r'entries', - wildcard: pattern, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - entriesElementIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'entries', - value: '', - )); - }); - } - - QueryBuilder - entriesElementIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - property: r'entries', - value: '', - )); - }); - } - QueryBuilder entriesLengthEqualTo( int length) { return QueryBuilder.apply(this, (query) { @@ -1370,7 +1253,294 @@ extension TourTaskQueryFilter } extension TourTaskQueryObject - on QueryBuilder {} + on QueryBuilder { + QueryBuilder entriesElement( + FilterQuery q) { + return QueryBuilder.apply(this, (query) { + return query.object(q, r'entries'); + }); + } +} + +// 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 TourEntrySchema = Schema( + name: r'TourEntry', + id: 5357864103781579158, + properties: { + r'code': PropertySchema( + id: 0, + name: r'code', + type: IsarType.long, + ), + r'queryRemark': PropertySchema( + id: 1, + name: r'queryRemark', + type: IsarType.bool, + ), + r'text': PropertySchema( + id: 2, + name: r'text', + type: IsarType.string, + ) + }, + estimateSize: _tourEntryEstimateSize, + serialize: _tourEntrySerialize, + deserialize: _tourEntryDeserialize, + deserializeProp: _tourEntryDeserializeProp, +); + +int _tourEntryEstimateSize( + TourEntry object, + List offsets, + Map> allOffsets, +) { + var bytesCount = offsets.last; + bytesCount += 3 + object.text.length * 3; + return bytesCount; +} + +void _tourEntrySerialize( + TourEntry object, + IsarWriter writer, + List offsets, + Map> allOffsets, +) { + writer.writeLong(offsets[0], object.code); + writer.writeBool(offsets[1], object.queryRemark); + writer.writeString(offsets[2], object.text); +} + +TourEntry _tourEntryDeserialize( + Id id, + IsarReader reader, + List offsets, + Map> allOffsets, +) { + final object = TourEntry(); + object.code = reader.readLong(offsets[0]); + object.queryRemark = reader.readBool(offsets[1]); + object.text = reader.readString(offsets[2]); + return object; +} + +P _tourEntryDeserializeProp

( + IsarReader reader, + int propertyId, + int offset, + Map> allOffsets, +) { + switch (propertyId) { + case 0: + return (reader.readLong(offset)) as P; + case 1: + return (reader.readBool(offset)) as P; + case 2: + return (reader.readString(offset)) as P; + default: + throw IsarError('Unknown property with id $propertyId'); + } +} + +extension TourEntryQueryFilter + on QueryBuilder { + QueryBuilder codeEqualTo( + int value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'code', + value: value, + )); + }); + } + + QueryBuilder codeGreaterThan( + int value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'code', + value: value, + )); + }); + } + + QueryBuilder codeLessThan( + int value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'code', + value: value, + )); + }); + } + + QueryBuilder codeBetween( + int lower, + int upper, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'code', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + )); + }); + } + + QueryBuilder queryRemarkEqualTo( + bool value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'queryRemark', + value: value, + )); + }); + } + + QueryBuilder textEqualTo( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'text', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder textGreaterThan( + String value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'text', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder textLessThan( + String value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'text', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder textBetween( + String lower, + String upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'text', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder textStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'text', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder textEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'text', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder textContains( + String value, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'text', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder textMatches( + String pattern, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'text', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder textIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'text', + value: '', + )); + }); + } + + QueryBuilder textIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'text', + value: '', + )); + }); + } +} + +extension TourEntryQueryObject + on QueryBuilder {} // ************************************************************************** // JsonSerializableGenerator @@ -1390,8 +1560,9 @@ TourTask _$TourTaskFromJson(Map json) => TourTask() ..txt = (json['txt'] as List?)?.map((e) => e as String).toList() ..taskArrival = json['task_arrival'] as int? ..taskFinWork = json['task_fin_work'] as int? - ..entries = - (json['entries'] as List?)?.map((e) => e as String).toList(); + ..entries = (json['entries'] as List?) + ?.map((e) => TourEntry.fromJson(e as Map)) + .toList(); Map _$TourTaskToJson(TourTask instance) => { 's_id': instance.sId, @@ -1409,3 +1580,14 @@ Map _$TourTaskToJson(TourTask instance) => { 'task_fin_work': instance.taskFinWork, 'entries': instance.entries, }; + +TourEntry _$TourEntryFromJson(Map json) => TourEntry() + ..code = json['code'] as int + ..text = json['text'] as String + ..queryRemark = json['query_remark'] as bool; + +Map _$TourEntryToJson(TourEntry instance) => { + 'code': instance.code, + 'text': instance.text, + 'query_remark': instance.queryRemark, + };