mirror of
				https://github.com/immich-app/immich.git
				synced 2025-11-03 19:29:32 -05:00 
			
		
		
		
	fix(mobile): shows asset datetime with original timezone (#4774)
This commit is contained in:
		
							parent
							
								
									81792a5342
								
							
						
					
					
						commit
						33ce2b7bba
					
				@ -7,6 +7,7 @@ import 'package:flutter/material.dart';
 | 
				
			|||||||
import 'package:flutter/services.dart';
 | 
					import 'package:flutter/services.dart';
 | 
				
			||||||
import 'package:flutter_displaymode/flutter_displaymode.dart';
 | 
					import 'package:flutter_displaymode/flutter_displaymode.dart';
 | 
				
			||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
 | 
					import 'package:hooks_riverpod/hooks_riverpod.dart';
 | 
				
			||||||
 | 
					import 'package:timezone/data/latest.dart';
 | 
				
			||||||
import 'package:immich_mobile/constants/locales.dart';
 | 
					import 'package:immich_mobile/constants/locales.dart';
 | 
				
			||||||
import 'package:immich_mobile/modules/backup/background_service/background.service.dart';
 | 
					import 'package:immich_mobile/modules/backup/background_service/background.service.dart';
 | 
				
			||||||
import 'package:immich_mobile/modules/backup/models/backup_album.model.dart';
 | 
					import 'package:immich_mobile/modules/backup/models/backup_album.model.dart';
 | 
				
			||||||
@ -77,6 +78,8 @@ Future<void> initApp() async {
 | 
				
			|||||||
    log.severe('Catch all error: ${error.toString()} - $error', error, stack);
 | 
					    log.severe('Catch all error: ${error.toString()} - $error', error, stack);
 | 
				
			||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  initializeTimeZones();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Future<Isar> loadDb() async {
 | 
					Future<Isar> loadDb() async {
 | 
				
			||||||
 | 
				
			|||||||
@ -4,6 +4,7 @@ import 'package:easy_localization/easy_localization.dart';
 | 
				
			|||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
import 'package:flutter_map/flutter_map.dart';
 | 
					import 'package:flutter_map/flutter_map.dart';
 | 
				
			||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
 | 
					import 'package:hooks_riverpod/hooks_riverpod.dart';
 | 
				
			||||||
 | 
					import 'package:timezone/timezone.dart';
 | 
				
			||||||
import 'package:immich_mobile/modules/asset_viewer/ui/description_input.dart';
 | 
					import 'package:immich_mobile/modules/asset_viewer/ui/description_input.dart';
 | 
				
			||||||
import 'package:immich_mobile/modules/map/ui/map_thumbnail.dart';
 | 
					import 'package:immich_mobile/modules/map/ui/map_thumbnail.dart';
 | 
				
			||||||
import 'package:immich_mobile/shared/models/asset.dart';
 | 
					import 'package:immich_mobile/shared/models/asset.dart';
 | 
				
			||||||
@ -26,12 +27,36 @@ class ExifBottomSheet extends HookConsumerWidget {
 | 
				
			|||||||
      exifInfo.latitude != 0 &&
 | 
					      exifInfo.latitude != 0 &&
 | 
				
			||||||
      exifInfo.longitude != 0;
 | 
					      exifInfo.longitude != 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  String get formattedDateTime {
 | 
					  String formatTimeZone(Duration d) =>
 | 
				
			||||||
    final fileCreatedAt = asset.fileCreatedAt.toLocal();
 | 
					      "GMT${d.isNegative ? '-': '+'}${d.inHours.abs().toString().padLeft(2, '0')}:${d.inMinutes.abs().remainder(60).toString().padLeft(2, '0')}";
 | 
				
			||||||
    final date = DateFormat.yMMMEd().format(fileCreatedAt);
 | 
					 | 
				
			||||||
    final time = DateFormat.jm().format(fileCreatedAt);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return '$date • $time';
 | 
					  String get formattedDateTime {
 | 
				
			||||||
 | 
					    DateTime dt = asset.fileCreatedAt.toLocal();
 | 
				
			||||||
 | 
					    String? timeZone;
 | 
				
			||||||
 | 
					    if (asset.exifInfo?.dateTimeOriginal != null) {
 | 
				
			||||||
 | 
					      dt = asset.exifInfo!.dateTimeOriginal!;
 | 
				
			||||||
 | 
					      if (asset.exifInfo?.timeZone != null) {
 | 
				
			||||||
 | 
					        dt = dt.toUtc();
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					          final location = getLocation(asset.exifInfo!.timeZone!);
 | 
				
			||||||
 | 
					          dt = TZDateTime.from(dt, location);
 | 
				
			||||||
 | 
					        } on LocationNotFoundException {
 | 
				
			||||||
 | 
					          RegExp re = RegExp(r'^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$', caseSensitive: false);
 | 
				
			||||||
 | 
					          final m = re.firstMatch(asset.exifInfo!.timeZone!);
 | 
				
			||||||
 | 
					          if (m != null) {
 | 
				
			||||||
 | 
					            final duration = Duration(hours: int.parse(m.group(1) ?? '0'), minutes: int.parse(m.group(2) ?? '0'));
 | 
				
			||||||
 | 
					            dt = dt.add(duration);
 | 
				
			||||||
 | 
					            timeZone = formatTimeZone(duration);
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    final date = DateFormat.yMMMEd().format(dt);
 | 
				
			||||||
 | 
					    final time = DateFormat.jm().format(dt);
 | 
				
			||||||
 | 
					    timeZone ??= formatTimeZone(dt.timeZoneOffset);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return '$date • $time $timeZone';
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Future<Uri?> _createCoordinatesUri(ExifInfo? exifInfo) async {
 | 
					  Future<Uri?> _createCoordinatesUri(ExifInfo? exifInfo) async {
 | 
				
			||||||
 | 
				
			|||||||
@ -8,6 +8,8 @@ part 'exif_info.g.dart';
 | 
				
			|||||||
class ExifInfo {
 | 
					class ExifInfo {
 | 
				
			||||||
  Id? id;
 | 
					  Id? id;
 | 
				
			||||||
  int? fileSize;
 | 
					  int? fileSize;
 | 
				
			||||||
 | 
					  DateTime? dateTimeOriginal;
 | 
				
			||||||
 | 
					  String? timeZone;
 | 
				
			||||||
  String? make;
 | 
					  String? make;
 | 
				
			||||||
  String? model;
 | 
					  String? model;
 | 
				
			||||||
  String? lens;
 | 
					  String? lens;
 | 
				
			||||||
@ -47,6 +49,8 @@ class ExifInfo {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  ExifInfo.fromDto(ExifResponseDto dto)
 | 
					  ExifInfo.fromDto(ExifResponseDto dto)
 | 
				
			||||||
      : fileSize = dto.fileSizeInByte,
 | 
					      : fileSize = dto.fileSizeInByte,
 | 
				
			||||||
 | 
					        dateTimeOriginal = dto.dateTimeOriginal,
 | 
				
			||||||
 | 
					        timeZone = dto.timeZone,
 | 
				
			||||||
        make = dto.make,
 | 
					        make = dto.make,
 | 
				
			||||||
        model = dto.model,
 | 
					        model = dto.model,
 | 
				
			||||||
        lens = dto.lensModel,
 | 
					        lens = dto.lensModel,
 | 
				
			||||||
@ -64,6 +68,8 @@ class ExifInfo {
 | 
				
			|||||||
  ExifInfo({
 | 
					  ExifInfo({
 | 
				
			||||||
    this.id,
 | 
					    this.id,
 | 
				
			||||||
    this.fileSize,
 | 
					    this.fileSize,
 | 
				
			||||||
 | 
					    this.dateTimeOriginal,
 | 
				
			||||||
 | 
					    this.timeZone,
 | 
				
			||||||
    this.make,
 | 
					    this.make,
 | 
				
			||||||
    this.model,
 | 
					    this.model,
 | 
				
			||||||
    this.lens,
 | 
					    this.lens,
 | 
				
			||||||
@ -82,6 +88,8 @@ class ExifInfo {
 | 
				
			|||||||
  ExifInfo copyWith({
 | 
					  ExifInfo copyWith({
 | 
				
			||||||
    Id? id,
 | 
					    Id? id,
 | 
				
			||||||
    int? fileSize,
 | 
					    int? fileSize,
 | 
				
			||||||
 | 
					    DateTime? dateTimeOriginal,
 | 
				
			||||||
 | 
					    String? timeZone,
 | 
				
			||||||
    String? make,
 | 
					    String? make,
 | 
				
			||||||
    String? model,
 | 
					    String? model,
 | 
				
			||||||
    String? lens,
 | 
					    String? lens,
 | 
				
			||||||
@ -99,6 +107,8 @@ class ExifInfo {
 | 
				
			|||||||
      ExifInfo(
 | 
					      ExifInfo(
 | 
				
			||||||
        id: id ?? this.id,
 | 
					        id: id ?? this.id,
 | 
				
			||||||
        fileSize: fileSize ?? this.fileSize,
 | 
					        fileSize: fileSize ?? this.fileSize,
 | 
				
			||||||
 | 
					        dateTimeOriginal: dateTimeOriginal ?? this.dateTimeOriginal,
 | 
				
			||||||
 | 
					        timeZone: timeZone ?? this.timeZone,
 | 
				
			||||||
        make: make ?? this.make,
 | 
					        make: make ?? this.make,
 | 
				
			||||||
        model: model ?? this.model,
 | 
					        model: model ?? this.model,
 | 
				
			||||||
        lens: lens ?? this.lens,
 | 
					        lens: lens ?? this.lens,
 | 
				
			||||||
@ -119,6 +129,8 @@ class ExifInfo {
 | 
				
			|||||||
    if (other is! ExifInfo) return false;
 | 
					    if (other is! ExifInfo) return false;
 | 
				
			||||||
    return id == other.id &&
 | 
					    return id == other.id &&
 | 
				
			||||||
        fileSize == other.fileSize &&
 | 
					        fileSize == other.fileSize &&
 | 
				
			||||||
 | 
					        dateTimeOriginal == other.dateTimeOriginal &&
 | 
				
			||||||
 | 
					        timeZone == other.timeZone &&
 | 
				
			||||||
        make == other.make &&
 | 
					        make == other.make &&
 | 
				
			||||||
        model == other.model &&
 | 
					        model == other.model &&
 | 
				
			||||||
        lens == other.lens &&
 | 
					        lens == other.lens &&
 | 
				
			||||||
@ -139,6 +151,8 @@ class ExifInfo {
 | 
				
			|||||||
  int get hashCode =>
 | 
					  int get hashCode =>
 | 
				
			||||||
      id.hashCode ^
 | 
					      id.hashCode ^
 | 
				
			||||||
      fileSize.hashCode ^
 | 
					      fileSize.hashCode ^
 | 
				
			||||||
 | 
					      dateTimeOriginal.hashCode ^
 | 
				
			||||||
 | 
					      timeZone.hashCode ^
 | 
				
			||||||
      make.hashCode ^
 | 
					      make.hashCode ^
 | 
				
			||||||
      model.hashCode ^
 | 
					      model.hashCode ^
 | 
				
			||||||
      lens.hashCode ^
 | 
					      lens.hashCode ^
 | 
				
			||||||
 | 
				
			|||||||
@ -27,65 +27,75 @@ const ExifInfoSchema = CollectionSchema(
 | 
				
			|||||||
      name: r'country',
 | 
					      name: r'country',
 | 
				
			||||||
      type: IsarType.string,
 | 
					      type: IsarType.string,
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
    r'description': PropertySchema(
 | 
					    r'dateTimeOriginal': PropertySchema(
 | 
				
			||||||
      id: 2,
 | 
					      id: 2,
 | 
				
			||||||
 | 
					      name: r'dateTimeOriginal',
 | 
				
			||||||
 | 
					      type: IsarType.dateTime,
 | 
				
			||||||
 | 
					    ),
 | 
				
			||||||
 | 
					    r'description': PropertySchema(
 | 
				
			||||||
 | 
					      id: 3,
 | 
				
			||||||
      name: r'description',
 | 
					      name: r'description',
 | 
				
			||||||
      type: IsarType.string,
 | 
					      type: IsarType.string,
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
    r'exposureSeconds': PropertySchema(
 | 
					    r'exposureSeconds': PropertySchema(
 | 
				
			||||||
      id: 3,
 | 
					      id: 4,
 | 
				
			||||||
      name: r'exposureSeconds',
 | 
					      name: r'exposureSeconds',
 | 
				
			||||||
      type: IsarType.float,
 | 
					      type: IsarType.float,
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
    r'f': PropertySchema(
 | 
					    r'f': PropertySchema(
 | 
				
			||||||
      id: 4,
 | 
					      id: 5,
 | 
				
			||||||
      name: r'f',
 | 
					      name: r'f',
 | 
				
			||||||
      type: IsarType.float,
 | 
					      type: IsarType.float,
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
    r'fileSize': PropertySchema(
 | 
					    r'fileSize': PropertySchema(
 | 
				
			||||||
      id: 5,
 | 
					      id: 6,
 | 
				
			||||||
      name: r'fileSize',
 | 
					      name: r'fileSize',
 | 
				
			||||||
      type: IsarType.long,
 | 
					      type: IsarType.long,
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
    r'iso': PropertySchema(
 | 
					    r'iso': PropertySchema(
 | 
				
			||||||
      id: 6,
 | 
					      id: 7,
 | 
				
			||||||
      name: r'iso',
 | 
					      name: r'iso',
 | 
				
			||||||
      type: IsarType.int,
 | 
					      type: IsarType.int,
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
    r'lat': PropertySchema(
 | 
					    r'lat': PropertySchema(
 | 
				
			||||||
      id: 7,
 | 
					      id: 8,
 | 
				
			||||||
      name: r'lat',
 | 
					      name: r'lat',
 | 
				
			||||||
      type: IsarType.float,
 | 
					      type: IsarType.float,
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
    r'lens': PropertySchema(
 | 
					    r'lens': PropertySchema(
 | 
				
			||||||
      id: 8,
 | 
					      id: 9,
 | 
				
			||||||
      name: r'lens',
 | 
					      name: r'lens',
 | 
				
			||||||
      type: IsarType.string,
 | 
					      type: IsarType.string,
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
    r'long': PropertySchema(
 | 
					    r'long': PropertySchema(
 | 
				
			||||||
      id: 9,
 | 
					      id: 10,
 | 
				
			||||||
      name: r'long',
 | 
					      name: r'long',
 | 
				
			||||||
      type: IsarType.float,
 | 
					      type: IsarType.float,
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
    r'make': PropertySchema(
 | 
					    r'make': PropertySchema(
 | 
				
			||||||
      id: 10,
 | 
					      id: 11,
 | 
				
			||||||
      name: r'make',
 | 
					      name: r'make',
 | 
				
			||||||
      type: IsarType.string,
 | 
					      type: IsarType.string,
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
    r'mm': PropertySchema(
 | 
					    r'mm': PropertySchema(
 | 
				
			||||||
      id: 11,
 | 
					      id: 12,
 | 
				
			||||||
      name: r'mm',
 | 
					      name: r'mm',
 | 
				
			||||||
      type: IsarType.float,
 | 
					      type: IsarType.float,
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
    r'model': PropertySchema(
 | 
					    r'model': PropertySchema(
 | 
				
			||||||
      id: 12,
 | 
					      id: 13,
 | 
				
			||||||
      name: r'model',
 | 
					      name: r'model',
 | 
				
			||||||
      type: IsarType.string,
 | 
					      type: IsarType.string,
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
    r'state': PropertySchema(
 | 
					    r'state': PropertySchema(
 | 
				
			||||||
      id: 13,
 | 
					      id: 14,
 | 
				
			||||||
      name: r'state',
 | 
					      name: r'state',
 | 
				
			||||||
      type: IsarType.string,
 | 
					      type: IsarType.string,
 | 
				
			||||||
 | 
					    ),
 | 
				
			||||||
 | 
					    r'timeZone': PropertySchema(
 | 
				
			||||||
 | 
					      id: 15,
 | 
				
			||||||
 | 
					      name: r'timeZone',
 | 
				
			||||||
 | 
					      type: IsarType.string,
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  estimateSize: _exifInfoEstimateSize,
 | 
					  estimateSize: _exifInfoEstimateSize,
 | 
				
			||||||
@ -150,6 +160,12 @@ int _exifInfoEstimateSize(
 | 
				
			|||||||
      bytesCount += 3 + value.length * 3;
 | 
					      bytesCount += 3 + value.length * 3;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    final value = object.timeZone;
 | 
				
			||||||
 | 
					    if (value != null) {
 | 
				
			||||||
 | 
					      bytesCount += 3 + value.length * 3;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
  return bytesCount;
 | 
					  return bytesCount;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -161,18 +177,20 @@ void _exifInfoSerialize(
 | 
				
			|||||||
) {
 | 
					) {
 | 
				
			||||||
  writer.writeString(offsets[0], object.city);
 | 
					  writer.writeString(offsets[0], object.city);
 | 
				
			||||||
  writer.writeString(offsets[1], object.country);
 | 
					  writer.writeString(offsets[1], object.country);
 | 
				
			||||||
  writer.writeString(offsets[2], object.description);
 | 
					  writer.writeDateTime(offsets[2], object.dateTimeOriginal);
 | 
				
			||||||
  writer.writeFloat(offsets[3], object.exposureSeconds);
 | 
					  writer.writeString(offsets[3], object.description);
 | 
				
			||||||
  writer.writeFloat(offsets[4], object.f);
 | 
					  writer.writeFloat(offsets[4], object.exposureSeconds);
 | 
				
			||||||
  writer.writeLong(offsets[5], object.fileSize);
 | 
					  writer.writeFloat(offsets[5], object.f);
 | 
				
			||||||
  writer.writeInt(offsets[6], object.iso);
 | 
					  writer.writeLong(offsets[6], object.fileSize);
 | 
				
			||||||
  writer.writeFloat(offsets[7], object.lat);
 | 
					  writer.writeInt(offsets[7], object.iso);
 | 
				
			||||||
  writer.writeString(offsets[8], object.lens);
 | 
					  writer.writeFloat(offsets[8], object.lat);
 | 
				
			||||||
  writer.writeFloat(offsets[9], object.long);
 | 
					  writer.writeString(offsets[9], object.lens);
 | 
				
			||||||
  writer.writeString(offsets[10], object.make);
 | 
					  writer.writeFloat(offsets[10], object.long);
 | 
				
			||||||
  writer.writeFloat(offsets[11], object.mm);
 | 
					  writer.writeString(offsets[11], object.make);
 | 
				
			||||||
  writer.writeString(offsets[12], object.model);
 | 
					  writer.writeFloat(offsets[12], object.mm);
 | 
				
			||||||
  writer.writeString(offsets[13], object.state);
 | 
					  writer.writeString(offsets[13], object.model);
 | 
				
			||||||
 | 
					  writer.writeString(offsets[14], object.state);
 | 
				
			||||||
 | 
					  writer.writeString(offsets[15], object.timeZone);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ExifInfo _exifInfoDeserialize(
 | 
					ExifInfo _exifInfoDeserialize(
 | 
				
			||||||
@ -184,19 +202,21 @@ ExifInfo _exifInfoDeserialize(
 | 
				
			|||||||
  final object = ExifInfo(
 | 
					  final object = ExifInfo(
 | 
				
			||||||
    city: reader.readStringOrNull(offsets[0]),
 | 
					    city: reader.readStringOrNull(offsets[0]),
 | 
				
			||||||
    country: reader.readStringOrNull(offsets[1]),
 | 
					    country: reader.readStringOrNull(offsets[1]),
 | 
				
			||||||
    description: reader.readStringOrNull(offsets[2]),
 | 
					    dateTimeOriginal: reader.readDateTimeOrNull(offsets[2]),
 | 
				
			||||||
    exposureSeconds: reader.readFloatOrNull(offsets[3]),
 | 
					    description: reader.readStringOrNull(offsets[3]),
 | 
				
			||||||
    f: reader.readFloatOrNull(offsets[4]),
 | 
					    exposureSeconds: reader.readFloatOrNull(offsets[4]),
 | 
				
			||||||
    fileSize: reader.readLongOrNull(offsets[5]),
 | 
					    f: reader.readFloatOrNull(offsets[5]),
 | 
				
			||||||
 | 
					    fileSize: reader.readLongOrNull(offsets[6]),
 | 
				
			||||||
    id: id,
 | 
					    id: id,
 | 
				
			||||||
    iso: reader.readIntOrNull(offsets[6]),
 | 
					    iso: reader.readIntOrNull(offsets[7]),
 | 
				
			||||||
    lat: reader.readFloatOrNull(offsets[7]),
 | 
					    lat: reader.readFloatOrNull(offsets[8]),
 | 
				
			||||||
    lens: reader.readStringOrNull(offsets[8]),
 | 
					    lens: reader.readStringOrNull(offsets[9]),
 | 
				
			||||||
    long: reader.readFloatOrNull(offsets[9]),
 | 
					    long: reader.readFloatOrNull(offsets[10]),
 | 
				
			||||||
    make: reader.readStringOrNull(offsets[10]),
 | 
					    make: reader.readStringOrNull(offsets[11]),
 | 
				
			||||||
    mm: reader.readFloatOrNull(offsets[11]),
 | 
					    mm: reader.readFloatOrNull(offsets[12]),
 | 
				
			||||||
    model: reader.readStringOrNull(offsets[12]),
 | 
					    model: reader.readStringOrNull(offsets[13]),
 | 
				
			||||||
    state: reader.readStringOrNull(offsets[13]),
 | 
					    state: reader.readStringOrNull(offsets[14]),
 | 
				
			||||||
 | 
					    timeZone: reader.readStringOrNull(offsets[15]),
 | 
				
			||||||
  );
 | 
					  );
 | 
				
			||||||
  return object;
 | 
					  return object;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -213,29 +233,33 @@ P _exifInfoDeserializeProp<P>(
 | 
				
			|||||||
    case 1:
 | 
					    case 1:
 | 
				
			||||||
      return (reader.readStringOrNull(offset)) as P;
 | 
					      return (reader.readStringOrNull(offset)) as P;
 | 
				
			||||||
    case 2:
 | 
					    case 2:
 | 
				
			||||||
      return (reader.readStringOrNull(offset)) as P;
 | 
					      return (reader.readDateTimeOrNull(offset)) as P;
 | 
				
			||||||
    case 3:
 | 
					    case 3:
 | 
				
			||||||
      return (reader.readFloatOrNull(offset)) as P;
 | 
					      return (reader.readStringOrNull(offset)) as P;
 | 
				
			||||||
    case 4:
 | 
					    case 4:
 | 
				
			||||||
      return (reader.readFloatOrNull(offset)) as P;
 | 
					      return (reader.readFloatOrNull(offset)) as P;
 | 
				
			||||||
    case 5:
 | 
					    case 5:
 | 
				
			||||||
      return (reader.readLongOrNull(offset)) as P;
 | 
					      return (reader.readFloatOrNull(offset)) as P;
 | 
				
			||||||
    case 6:
 | 
					    case 6:
 | 
				
			||||||
      return (reader.readIntOrNull(offset)) as P;
 | 
					      return (reader.readLongOrNull(offset)) as P;
 | 
				
			||||||
    case 7:
 | 
					    case 7:
 | 
				
			||||||
      return (reader.readFloatOrNull(offset)) as P;
 | 
					      return (reader.readIntOrNull(offset)) as P;
 | 
				
			||||||
    case 8:
 | 
					    case 8:
 | 
				
			||||||
      return (reader.readStringOrNull(offset)) as P;
 | 
					      return (reader.readFloatOrNull(offset)) as P;
 | 
				
			||||||
    case 9:
 | 
					    case 9:
 | 
				
			||||||
      return (reader.readFloatOrNull(offset)) as P;
 | 
					      return (reader.readStringOrNull(offset)) as P;
 | 
				
			||||||
    case 10:
 | 
					    case 10:
 | 
				
			||||||
      return (reader.readStringOrNull(offset)) as P;
 | 
					 | 
				
			||||||
    case 11:
 | 
					 | 
				
			||||||
      return (reader.readFloatOrNull(offset)) as P;
 | 
					      return (reader.readFloatOrNull(offset)) as P;
 | 
				
			||||||
    case 12:
 | 
					    case 11:
 | 
				
			||||||
      return (reader.readStringOrNull(offset)) as P;
 | 
					      return (reader.readStringOrNull(offset)) as P;
 | 
				
			||||||
 | 
					    case 12:
 | 
				
			||||||
 | 
					      return (reader.readFloatOrNull(offset)) as P;
 | 
				
			||||||
    case 13:
 | 
					    case 13:
 | 
				
			||||||
      return (reader.readStringOrNull(offset)) as P;
 | 
					      return (reader.readStringOrNull(offset)) as P;
 | 
				
			||||||
 | 
					    case 14:
 | 
				
			||||||
 | 
					      return (reader.readStringOrNull(offset)) as P;
 | 
				
			||||||
 | 
					    case 15:
 | 
				
			||||||
 | 
					      return (reader.readStringOrNull(offset)) as P;
 | 
				
			||||||
    default:
 | 
					    default:
 | 
				
			||||||
      throw IsarError('Unknown property with id $propertyId');
 | 
					      throw IsarError('Unknown property with id $propertyId');
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@ -622,6 +646,80 @@ extension ExifInfoQueryFilter
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  QueryBuilder<ExifInfo, ExifInfo, QAfterFilterCondition>
 | 
				
			||||||
 | 
					      dateTimeOriginalIsNull() {
 | 
				
			||||||
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
 | 
					      return query.addFilterCondition(const FilterCondition.isNull(
 | 
				
			||||||
 | 
					        property: r'dateTimeOriginal',
 | 
				
			||||||
 | 
					      ));
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  QueryBuilder<ExifInfo, ExifInfo, QAfterFilterCondition>
 | 
				
			||||||
 | 
					      dateTimeOriginalIsNotNull() {
 | 
				
			||||||
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
 | 
					      return query.addFilterCondition(const FilterCondition.isNotNull(
 | 
				
			||||||
 | 
					        property: r'dateTimeOriginal',
 | 
				
			||||||
 | 
					      ));
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  QueryBuilder<ExifInfo, ExifInfo, QAfterFilterCondition>
 | 
				
			||||||
 | 
					      dateTimeOriginalEqualTo(DateTime? value) {
 | 
				
			||||||
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
 | 
					      return query.addFilterCondition(FilterCondition.equalTo(
 | 
				
			||||||
 | 
					        property: r'dateTimeOriginal',
 | 
				
			||||||
 | 
					        value: value,
 | 
				
			||||||
 | 
					      ));
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  QueryBuilder<ExifInfo, ExifInfo, QAfterFilterCondition>
 | 
				
			||||||
 | 
					      dateTimeOriginalGreaterThan(
 | 
				
			||||||
 | 
					    DateTime? value, {
 | 
				
			||||||
 | 
					    bool include = false,
 | 
				
			||||||
 | 
					  }) {
 | 
				
			||||||
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
 | 
					      return query.addFilterCondition(FilterCondition.greaterThan(
 | 
				
			||||||
 | 
					        include: include,
 | 
				
			||||||
 | 
					        property: r'dateTimeOriginal',
 | 
				
			||||||
 | 
					        value: value,
 | 
				
			||||||
 | 
					      ));
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  QueryBuilder<ExifInfo, ExifInfo, QAfterFilterCondition>
 | 
				
			||||||
 | 
					      dateTimeOriginalLessThan(
 | 
				
			||||||
 | 
					    DateTime? value, {
 | 
				
			||||||
 | 
					    bool include = false,
 | 
				
			||||||
 | 
					  }) {
 | 
				
			||||||
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
 | 
					      return query.addFilterCondition(FilterCondition.lessThan(
 | 
				
			||||||
 | 
					        include: include,
 | 
				
			||||||
 | 
					        property: r'dateTimeOriginal',
 | 
				
			||||||
 | 
					        value: value,
 | 
				
			||||||
 | 
					      ));
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  QueryBuilder<ExifInfo, ExifInfo, QAfterFilterCondition>
 | 
				
			||||||
 | 
					      dateTimeOriginalBetween(
 | 
				
			||||||
 | 
					    DateTime? lower,
 | 
				
			||||||
 | 
					    DateTime? upper, {
 | 
				
			||||||
 | 
					    bool includeLower = true,
 | 
				
			||||||
 | 
					    bool includeUpper = true,
 | 
				
			||||||
 | 
					  }) {
 | 
				
			||||||
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
 | 
					      return query.addFilterCondition(FilterCondition.between(
 | 
				
			||||||
 | 
					        property: r'dateTimeOriginal',
 | 
				
			||||||
 | 
					        lower: lower,
 | 
				
			||||||
 | 
					        includeLower: includeLower,
 | 
				
			||||||
 | 
					        upper: upper,
 | 
				
			||||||
 | 
					        includeUpper: includeUpper,
 | 
				
			||||||
 | 
					      ));
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  QueryBuilder<ExifInfo, ExifInfo, QAfterFilterCondition> descriptionIsNull() {
 | 
					  QueryBuilder<ExifInfo, ExifInfo, QAfterFilterCondition> descriptionIsNull() {
 | 
				
			||||||
    return QueryBuilder.apply(this, (query) {
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
      return query.addFilterCondition(const FilterCondition.isNull(
 | 
					      return query.addFilterCondition(const FilterCondition.isNull(
 | 
				
			||||||
@ -1956,6 +2054,152 @@ extension ExifInfoQueryFilter
 | 
				
			|||||||
      ));
 | 
					      ));
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  QueryBuilder<ExifInfo, ExifInfo, QAfterFilterCondition> timeZoneIsNull() {
 | 
				
			||||||
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
 | 
					      return query.addFilterCondition(const FilterCondition.isNull(
 | 
				
			||||||
 | 
					        property: r'timeZone',
 | 
				
			||||||
 | 
					      ));
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  QueryBuilder<ExifInfo, ExifInfo, QAfterFilterCondition> timeZoneIsNotNull() {
 | 
				
			||||||
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
 | 
					      return query.addFilterCondition(const FilterCondition.isNotNull(
 | 
				
			||||||
 | 
					        property: r'timeZone',
 | 
				
			||||||
 | 
					      ));
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  QueryBuilder<ExifInfo, ExifInfo, QAfterFilterCondition> timeZoneEqualTo(
 | 
				
			||||||
 | 
					    String? value, {
 | 
				
			||||||
 | 
					    bool caseSensitive = true,
 | 
				
			||||||
 | 
					  }) {
 | 
				
			||||||
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
 | 
					      return query.addFilterCondition(FilterCondition.equalTo(
 | 
				
			||||||
 | 
					        property: r'timeZone',
 | 
				
			||||||
 | 
					        value: value,
 | 
				
			||||||
 | 
					        caseSensitive: caseSensitive,
 | 
				
			||||||
 | 
					      ));
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  QueryBuilder<ExifInfo, ExifInfo, QAfterFilterCondition> timeZoneGreaterThan(
 | 
				
			||||||
 | 
					    String? value, {
 | 
				
			||||||
 | 
					    bool include = false,
 | 
				
			||||||
 | 
					    bool caseSensitive = true,
 | 
				
			||||||
 | 
					  }) {
 | 
				
			||||||
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
 | 
					      return query.addFilterCondition(FilterCondition.greaterThan(
 | 
				
			||||||
 | 
					        include: include,
 | 
				
			||||||
 | 
					        property: r'timeZone',
 | 
				
			||||||
 | 
					        value: value,
 | 
				
			||||||
 | 
					        caseSensitive: caseSensitive,
 | 
				
			||||||
 | 
					      ));
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  QueryBuilder<ExifInfo, ExifInfo, QAfterFilterCondition> timeZoneLessThan(
 | 
				
			||||||
 | 
					    String? value, {
 | 
				
			||||||
 | 
					    bool include = false,
 | 
				
			||||||
 | 
					    bool caseSensitive = true,
 | 
				
			||||||
 | 
					  }) {
 | 
				
			||||||
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
 | 
					      return query.addFilterCondition(FilterCondition.lessThan(
 | 
				
			||||||
 | 
					        include: include,
 | 
				
			||||||
 | 
					        property: r'timeZone',
 | 
				
			||||||
 | 
					        value: value,
 | 
				
			||||||
 | 
					        caseSensitive: caseSensitive,
 | 
				
			||||||
 | 
					      ));
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  QueryBuilder<ExifInfo, ExifInfo, QAfterFilterCondition> timeZoneBetween(
 | 
				
			||||||
 | 
					    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'timeZone',
 | 
				
			||||||
 | 
					        lower: lower,
 | 
				
			||||||
 | 
					        includeLower: includeLower,
 | 
				
			||||||
 | 
					        upper: upper,
 | 
				
			||||||
 | 
					        includeUpper: includeUpper,
 | 
				
			||||||
 | 
					        caseSensitive: caseSensitive,
 | 
				
			||||||
 | 
					      ));
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  QueryBuilder<ExifInfo, ExifInfo, QAfterFilterCondition> timeZoneStartsWith(
 | 
				
			||||||
 | 
					    String value, {
 | 
				
			||||||
 | 
					    bool caseSensitive = true,
 | 
				
			||||||
 | 
					  }) {
 | 
				
			||||||
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
 | 
					      return query.addFilterCondition(FilterCondition.startsWith(
 | 
				
			||||||
 | 
					        property: r'timeZone',
 | 
				
			||||||
 | 
					        value: value,
 | 
				
			||||||
 | 
					        caseSensitive: caseSensitive,
 | 
				
			||||||
 | 
					      ));
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  QueryBuilder<ExifInfo, ExifInfo, QAfterFilterCondition> timeZoneEndsWith(
 | 
				
			||||||
 | 
					    String value, {
 | 
				
			||||||
 | 
					    bool caseSensitive = true,
 | 
				
			||||||
 | 
					  }) {
 | 
				
			||||||
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
 | 
					      return query.addFilterCondition(FilterCondition.endsWith(
 | 
				
			||||||
 | 
					        property: r'timeZone',
 | 
				
			||||||
 | 
					        value: value,
 | 
				
			||||||
 | 
					        caseSensitive: caseSensitive,
 | 
				
			||||||
 | 
					      ));
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  QueryBuilder<ExifInfo, ExifInfo, QAfterFilterCondition> timeZoneContains(
 | 
				
			||||||
 | 
					      String value,
 | 
				
			||||||
 | 
					      {bool caseSensitive = true}) {
 | 
				
			||||||
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
 | 
					      return query.addFilterCondition(FilterCondition.contains(
 | 
				
			||||||
 | 
					        property: r'timeZone',
 | 
				
			||||||
 | 
					        value: value,
 | 
				
			||||||
 | 
					        caseSensitive: caseSensitive,
 | 
				
			||||||
 | 
					      ));
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  QueryBuilder<ExifInfo, ExifInfo, QAfterFilterCondition> timeZoneMatches(
 | 
				
			||||||
 | 
					      String pattern,
 | 
				
			||||||
 | 
					      {bool caseSensitive = true}) {
 | 
				
			||||||
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
 | 
					      return query.addFilterCondition(FilterCondition.matches(
 | 
				
			||||||
 | 
					        property: r'timeZone',
 | 
				
			||||||
 | 
					        wildcard: pattern,
 | 
				
			||||||
 | 
					        caseSensitive: caseSensitive,
 | 
				
			||||||
 | 
					      ));
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  QueryBuilder<ExifInfo, ExifInfo, QAfterFilterCondition> timeZoneIsEmpty() {
 | 
				
			||||||
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
 | 
					      return query.addFilterCondition(FilterCondition.equalTo(
 | 
				
			||||||
 | 
					        property: r'timeZone',
 | 
				
			||||||
 | 
					        value: '',
 | 
				
			||||||
 | 
					      ));
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  QueryBuilder<ExifInfo, ExifInfo, QAfterFilterCondition> timeZoneIsNotEmpty() {
 | 
				
			||||||
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
 | 
					      return query.addFilterCondition(FilterCondition.greaterThan(
 | 
				
			||||||
 | 
					        property: r'timeZone',
 | 
				
			||||||
 | 
					        value: '',
 | 
				
			||||||
 | 
					      ));
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extension ExifInfoQueryObject
 | 
					extension ExifInfoQueryObject
 | 
				
			||||||
@ -1989,6 +2233,18 @@ extension ExifInfoQuerySortBy on QueryBuilder<ExifInfo, ExifInfo, QSortBy> {
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  QueryBuilder<ExifInfo, ExifInfo, QAfterSortBy> sortByDateTimeOriginal() {
 | 
				
			||||||
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
 | 
					      return query.addSortBy(r'dateTimeOriginal', Sort.asc);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  QueryBuilder<ExifInfo, ExifInfo, QAfterSortBy> sortByDateTimeOriginalDesc() {
 | 
				
			||||||
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
 | 
					      return query.addSortBy(r'dateTimeOriginal', Sort.desc);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  QueryBuilder<ExifInfo, ExifInfo, QAfterSortBy> sortByDescription() {
 | 
					  QueryBuilder<ExifInfo, ExifInfo, QAfterSortBy> sortByDescription() {
 | 
				
			||||||
    return QueryBuilder.apply(this, (query) {
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
      return query.addSortBy(r'description', Sort.asc);
 | 
					      return query.addSortBy(r'description', Sort.asc);
 | 
				
			||||||
@ -2132,6 +2388,18 @@ extension ExifInfoQuerySortBy on QueryBuilder<ExifInfo, ExifInfo, QSortBy> {
 | 
				
			|||||||
      return query.addSortBy(r'state', Sort.desc);
 | 
					      return query.addSortBy(r'state', Sort.desc);
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  QueryBuilder<ExifInfo, ExifInfo, QAfterSortBy> sortByTimeZone() {
 | 
				
			||||||
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
 | 
					      return query.addSortBy(r'timeZone', Sort.asc);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  QueryBuilder<ExifInfo, ExifInfo, QAfterSortBy> sortByTimeZoneDesc() {
 | 
				
			||||||
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
 | 
					      return query.addSortBy(r'timeZone', Sort.desc);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extension ExifInfoQuerySortThenBy
 | 
					extension ExifInfoQuerySortThenBy
 | 
				
			||||||
@ -2160,6 +2428,18 @@ extension ExifInfoQuerySortThenBy
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  QueryBuilder<ExifInfo, ExifInfo, QAfterSortBy> thenByDateTimeOriginal() {
 | 
				
			||||||
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
 | 
					      return query.addSortBy(r'dateTimeOriginal', Sort.asc);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  QueryBuilder<ExifInfo, ExifInfo, QAfterSortBy> thenByDateTimeOriginalDesc() {
 | 
				
			||||||
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
 | 
					      return query.addSortBy(r'dateTimeOriginal', Sort.desc);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  QueryBuilder<ExifInfo, ExifInfo, QAfterSortBy> thenByDescription() {
 | 
					  QueryBuilder<ExifInfo, ExifInfo, QAfterSortBy> thenByDescription() {
 | 
				
			||||||
    return QueryBuilder.apply(this, (query) {
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
      return query.addSortBy(r'description', Sort.asc);
 | 
					      return query.addSortBy(r'description', Sort.asc);
 | 
				
			||||||
@ -2315,6 +2595,18 @@ extension ExifInfoQuerySortThenBy
 | 
				
			|||||||
      return query.addSortBy(r'state', Sort.desc);
 | 
					      return query.addSortBy(r'state', Sort.desc);
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  QueryBuilder<ExifInfo, ExifInfo, QAfterSortBy> thenByTimeZone() {
 | 
				
			||||||
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
 | 
					      return query.addSortBy(r'timeZone', Sort.asc);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  QueryBuilder<ExifInfo, ExifInfo, QAfterSortBy> thenByTimeZoneDesc() {
 | 
				
			||||||
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
 | 
					      return query.addSortBy(r'timeZone', Sort.desc);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extension ExifInfoQueryWhereDistinct
 | 
					extension ExifInfoQueryWhereDistinct
 | 
				
			||||||
@ -2333,6 +2625,12 @@ extension ExifInfoQueryWhereDistinct
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  QueryBuilder<ExifInfo, ExifInfo, QDistinct> distinctByDateTimeOriginal() {
 | 
				
			||||||
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
 | 
					      return query.addDistinctBy(r'dateTimeOriginal');
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  QueryBuilder<ExifInfo, ExifInfo, QDistinct> distinctByDescription(
 | 
					  QueryBuilder<ExifInfo, ExifInfo, QDistinct> distinctByDescription(
 | 
				
			||||||
      {bool caseSensitive = true}) {
 | 
					      {bool caseSensitive = true}) {
 | 
				
			||||||
    return QueryBuilder.apply(this, (query) {
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
@ -2409,6 +2707,13 @@ extension ExifInfoQueryWhereDistinct
 | 
				
			|||||||
      return query.addDistinctBy(r'state', caseSensitive: caseSensitive);
 | 
					      return query.addDistinctBy(r'state', caseSensitive: caseSensitive);
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  QueryBuilder<ExifInfo, ExifInfo, QDistinct> distinctByTimeZone(
 | 
				
			||||||
 | 
					      {bool caseSensitive = true}) {
 | 
				
			||||||
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
 | 
					      return query.addDistinctBy(r'timeZone', caseSensitive: caseSensitive);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extension ExifInfoQueryProperty
 | 
					extension ExifInfoQueryProperty
 | 
				
			||||||
@ -2431,6 +2736,13 @@ extension ExifInfoQueryProperty
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  QueryBuilder<ExifInfo, DateTime?, QQueryOperations>
 | 
				
			||||||
 | 
					      dateTimeOriginalProperty() {
 | 
				
			||||||
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
 | 
					      return query.addPropertyName(r'dateTimeOriginal');
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  QueryBuilder<ExifInfo, String?, QQueryOperations> descriptionProperty() {
 | 
					  QueryBuilder<ExifInfo, String?, QQueryOperations> descriptionProperty() {
 | 
				
			||||||
    return QueryBuilder.apply(this, (query) {
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
      return query.addPropertyName(r'description');
 | 
					      return query.addPropertyName(r'description');
 | 
				
			||||||
@ -2502,4 +2814,10 @@ extension ExifInfoQueryProperty
 | 
				
			|||||||
      return query.addPropertyName(r'state');
 | 
					      return query.addPropertyName(r'state');
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  QueryBuilder<ExifInfo, String?, QQueryOperations> timeZoneProperty() {
 | 
				
			||||||
 | 
					    return QueryBuilder.apply(this, (query) {
 | 
				
			||||||
 | 
					      return query.addPropertyName(r'timeZone');
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1401,7 +1401,7 @@ packages:
 | 
				
			|||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "2.1.3"
 | 
					    version: "2.1.3"
 | 
				
			||||||
  timezone:
 | 
					  timezone:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: "direct main"
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: timezone
 | 
					      name: timezone
 | 
				
			||||||
      sha256: "1cfd8ddc2d1cfd836bc93e67b9be88c3adaeca6f40a00ca999104c30693cdca0"
 | 
					      sha256: "1cfd8ddc2d1cfd836bc93e67b9be88c3adaeca6f40a00ca999104c30693cdca0"
 | 
				
			||||||
 | 
				
			|||||||
@ -52,6 +52,7 @@ dependencies:
 | 
				
			|||||||
  crypto: ^3.0.3 # TODO remove once native crypto is used on iOS
 | 
					  crypto: ^3.0.3 # TODO remove once native crypto is used on iOS
 | 
				
			||||||
  wakelock_plus: ^1.1.1
 | 
					  wakelock_plus: ^1.1.1
 | 
				
			||||||
  flutter_local_notifications: ^15.1.0+1
 | 
					  flutter_local_notifications: ^15.1.0+1
 | 
				
			||||||
 | 
					  timezone: ^0.9.2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  openapi:
 | 
					  openapi:
 | 
				
			||||||
    path: openapi
 | 
					    path: openapi
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user