From aec2a29d74698ae1300ae5fccb864c55d976145d Mon Sep 17 00:00:00 2001 From: Sven Carstensen Date: Tue, 7 May 2024 11:24:22 +0200 Subject: [PATCH] Fehlerkorrekturen --- lib/content_views/task_list_page.dart | 33 +- lib/main.dart | 4 +- lib/model/pictures.dart | 20 + lib/model/pictures.g.dart | 623 ++++++++++++++++++++++++++ 4 files changed, 668 insertions(+), 12 deletions(-) create mode 100644 lib/model/pictures.dart create mode 100644 lib/model/pictures.g.dart diff --git a/lib/content_views/task_list_page.dart b/lib/content_views/task_list_page.dart index 8e5d1e3..fefed87 100644 --- a/lib/content_views/task_list_page.dart +++ b/lib/content_views/task_list_page.dart @@ -9,6 +9,7 @@ import 'package:stadtbote/content_views/utils/header_info.dart'; import 'package:stadtbote/messages/pop_content_view_message.dart'; import 'package:stadtbote/model/job.dart'; import 'package:stadtbote/model/job_tour.dart'; +import 'package:stadtbote/model/pictures.dart'; import 'package:stadtbote/popups/tasks_popups/arrived_popup.dart'; import 'package:stadtbote/popups/tasks_popups/commision_number_popup.dart'; import 'package:stadtbote/popups/tasks_popups/pickup_delivery_status_popup.dart'; @@ -65,8 +66,6 @@ class _TaskListPageState extends State { late List _taskList; - List _photos = []; - late String _commisionNumber; @override @@ -319,9 +318,21 @@ class _TaskListPageState extends State { } _processTakePhotos(TaskInfo taskInfo) { - showTakePhotosPopup(context, taskInfo, (List? photos) { + showTakePhotosPopup(context, taskInfo, (List? photos) async { if (photos != null) { - _photos = photos; + await MyApp.isarInstance.writeTxn(() async { + await MyApp.isarInstance.pictures.filter().tourIdEqualTo(widget.tour.id).deleteAll(); + + for (int i = 0; i < photos.length; i++) { + var pictureData = photos[i]; + + var picture = Picture(); + picture.number = i; + picture.tourId = widget.tour.id; + picture.data = base64Encode(pictureData); + await MyApp.isarInstance.pictures.put(picture); + } + }); taskInfo.additionalText = "Fotos aufgenommen"; taskInfo.completed = true; @@ -512,16 +523,16 @@ class _TaskListPageState extends State { } _sendImages() { - Future.delayed(const Duration(seconds: 1), () { - if (_photos.isNotEmpty) { - int photoIndex = 0; + Future.delayed(const Duration(seconds: 1), () async { + var pictures = await MyApp.isarInstance.pictures.where().filter().tourIdEqualTo(widget.tour.id).findAll(); - for (var photoData in _photos) { + if (pictures.isNotEmpty) { + for (var picture in pictures) { var message = PicData(); - message.trId = widget.tour.id; - message.num = photoIndex; + message.trId = picture.tourId; + message.num = picture.number; message.time = DateTime.now().millisecondsSinceEpoch; - message.data = base64Encode(photoData); + message.data = picture.data; MessageService().publish(Constants.messageTopicPublishPayload, arguments: PublishPayloadMessage(topic: "pic", message: message.toJson())); } diff --git a/lib/main.dart b/lib/main.dart index 2d56d7f..122ef16 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -8,6 +8,7 @@ import 'package:stadtbote/messages/pop_content_view_message.dart'; import 'package:stadtbote/model/enqueued_message.dart'; import 'package:stadtbote/model/log_entry.dart'; import 'package:stadtbote/model/message.dart'; +import 'package:stadtbote/model/pictures.dart'; import 'package:stadtbote/model/rank.dart'; import 'package:stadtbote/model/location_status.dart'; import 'package:stadtbote/model/task_info.dart'; @@ -39,7 +40,8 @@ Future main() async { MessageSchema, EnqueuedMessageSchema, LogEntrySchema, - RankingSchema + RankingSchema, + PictureSchema ], directory: dir.path); runZonedGuarded(() {}, (error, stackTrace) { diff --git a/lib/model/pictures.dart b/lib/model/pictures.dart new file mode 100644 index 0000000..6007d2e --- /dev/null +++ b/lib/model/pictures.dart @@ -0,0 +1,20 @@ +import 'package:flutter/foundation.dart'; +import 'package:isar/isar.dart'; + +part 'pictures.g.dart'; + +@collection +class Picture { + late Id id; + + late int tourId; + + late int number; + + late String data; + + Picture() { + id = Isar.autoIncrement; + } +} + diff --git a/lib/model/pictures.g.dart b/lib/model/pictures.g.dart new file mode 100644 index 0000000..0164216 --- /dev/null +++ b/lib/model/pictures.g.dart @@ -0,0 +1,623 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'pictures.dart'; + +// ************************************************************************** +// IsarCollectionGenerator +// ************************************************************************** + +// 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 GetPictureCollection on Isar { + IsarCollection get pictures => this.collection(); +} + +const PictureSchema = CollectionSchema( + name: r'Picture', + id: 985668904418580614, + properties: { + r'data': PropertySchema( + id: 0, + name: r'data', + type: IsarType.string, + ), + r'number': PropertySchema( + id: 1, + name: r'number', + type: IsarType.long, + ), + r'tourId': PropertySchema( + id: 2, + name: r'tourId', + type: IsarType.long, + ) + }, + estimateSize: _pictureEstimateSize, + serialize: _pictureSerialize, + deserialize: _pictureDeserialize, + deserializeProp: _pictureDeserializeProp, + idName: r'id', + indexes: {}, + links: {}, + embeddedSchemas: {}, + getId: _pictureGetId, + getLinks: _pictureGetLinks, + attach: _pictureAttach, + version: '3.1.0+1', +); + +int _pictureEstimateSize( + Picture object, + List offsets, + Map> allOffsets, +) { + var bytesCount = offsets.last; + bytesCount += 3 + object.data.length * 3; + return bytesCount; +} + +void _pictureSerialize( + Picture object, + IsarWriter writer, + List offsets, + Map> allOffsets, +) { + writer.writeString(offsets[0], object.data); + writer.writeLong(offsets[1], object.number); + writer.writeLong(offsets[2], object.tourId); +} + +Picture _pictureDeserialize( + Id id, + IsarReader reader, + List offsets, + Map> allOffsets, +) { + final object = Picture(); + object.data = reader.readString(offsets[0]); + object.id = id; + object.number = reader.readLong(offsets[1]); + object.tourId = reader.readLong(offsets[2]); + return object; +} + +P _pictureDeserializeProp

( + 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.readLong(offset)) as P; + default: + throw IsarError('Unknown property with id $propertyId'); + } +} + +Id _pictureGetId(Picture object) { + return object.id; +} + +List> _pictureGetLinks(Picture object) { + return []; +} + +void _pictureAttach(IsarCollection col, Id id, Picture object) { + object.id = id; +} + +extension PictureQueryWhereSort on QueryBuilder { + QueryBuilder anyId() { + return QueryBuilder.apply(this, (query) { + return query.addWhereClause(const IdWhereClause.any()); + }); + } +} + +extension PictureQueryWhere 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 PictureQueryFilter + on QueryBuilder { + QueryBuilder dataEqualTo( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'data', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder dataGreaterThan( + String value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'data', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder dataLessThan( + String value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'data', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder dataBetween( + 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'data', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder dataStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'data', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder dataEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'data', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder dataContains( + String value, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'data', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder dataMatches( + String pattern, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'data', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder dataIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'data', + value: '', + )); + }); + } + + QueryBuilder dataIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'data', + value: '', + )); + }); + } + + 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 numberEqualTo( + int value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'number', + value: value, + )); + }); + } + + QueryBuilder numberGreaterThan( + int value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'number', + value: value, + )); + }); + } + + QueryBuilder numberLessThan( + int value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'number', + value: value, + )); + }); + } + + QueryBuilder numberBetween( + int lower, + int upper, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'number', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + )); + }); + } + + QueryBuilder tourIdEqualTo( + int value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'tourId', + value: value, + )); + }); + } + + QueryBuilder tourIdGreaterThan( + int value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'tourId', + value: value, + )); + }); + } + + QueryBuilder tourIdLessThan( + int value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'tourId', + value: value, + )); + }); + } + + QueryBuilder tourIdBetween( + int lower, + int upper, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'tourId', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + )); + }); + } +} + +extension PictureQueryObject + on QueryBuilder {} + +extension PictureQueryLinks + on QueryBuilder {} + +extension PictureQuerySortBy on QueryBuilder { + QueryBuilder sortByData() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'data', Sort.asc); + }); + } + + QueryBuilder sortByDataDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'data', Sort.desc); + }); + } + + QueryBuilder sortByNumber() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'number', Sort.asc); + }); + } + + QueryBuilder sortByNumberDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'number', Sort.desc); + }); + } + + QueryBuilder sortByTourId() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'tourId', Sort.asc); + }); + } + + QueryBuilder sortByTourIdDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'tourId', Sort.desc); + }); + } +} + +extension PictureQuerySortThenBy + on QueryBuilder { + QueryBuilder thenByData() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'data', Sort.asc); + }); + } + + QueryBuilder thenByDataDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'data', 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 thenByNumber() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'number', Sort.asc); + }); + } + + QueryBuilder thenByNumberDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'number', Sort.desc); + }); + } + + QueryBuilder thenByTourId() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'tourId', Sort.asc); + }); + } + + QueryBuilder thenByTourIdDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'tourId', Sort.desc); + }); + } +} + +extension PictureQueryWhereDistinct + on QueryBuilder { + QueryBuilder distinctByData( + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addDistinctBy(r'data', caseSensitive: caseSensitive); + }); + } + + QueryBuilder distinctByNumber() { + return QueryBuilder.apply(this, (query) { + return query.addDistinctBy(r'number'); + }); + } + + QueryBuilder distinctByTourId() { + return QueryBuilder.apply(this, (query) { + return query.addDistinctBy(r'tourId'); + }); + } +} + +extension PictureQueryProperty + on QueryBuilder { + QueryBuilder idProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'id'); + }); + } + + QueryBuilder dataProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'data'); + }); + } + + QueryBuilder numberProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'number'); + }); + } + + QueryBuilder tourIdProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'tourId'); + }); + } +}