mirror of
https://github.com/immich-app/immich
synced 2025-10-17 18:19:27 +00:00
feat(mobile): sqlite asset viewer (#19552)
* add full image provider and refactor thumb providers * photo_view updates * wip: asset-viewer * fix controller dispose on page change * wip: bottom sheet * fix interactions * more bottomsheet changes * generate schema * PR feedback * refactor asset viewer * never rotate and fix background on page change * use photoview as the loading builder * precache after delay * claude: optimizing rebuild of image provider * claude: optimizing image decoding and caching * use proper cache for new full size image providers * chore: load local HEIC fullsize for iOS * make controller callbacks nullable * remove imageprovider cache * do not handle drag gestures when zoomed * use loadOriginal setting for HEIC / larger images * preload assets outside timer * never use same controllers in photo-view gallery * fix: cannot scroll down once swipe with bottom sheet --------- Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com> Co-authored-by: Alex <alex.tran1502@gmail.com>
This commit is contained in:
parent
ec603a008c
commit
7855974a29
47 changed files with 1867 additions and 490 deletions
|
|
@ -27,6 +27,7 @@ typedef $$RemoteExifEntityTableCreateCompanionBuilder
|
|||
i0.Value<int?> iso,
|
||||
i0.Value<String?> make,
|
||||
i0.Value<String?> model,
|
||||
i0.Value<String?> lens,
|
||||
i0.Value<String?> orientation,
|
||||
i0.Value<String?> timeZone,
|
||||
i0.Value<int?> rating,
|
||||
|
|
@ -51,6 +52,7 @@ typedef $$RemoteExifEntityTableUpdateCompanionBuilder
|
|||
i0.Value<int?> iso,
|
||||
i0.Value<String?> make,
|
||||
i0.Value<String?> model,
|
||||
i0.Value<String?> lens,
|
||||
i0.Value<String?> orientation,
|
||||
i0.Value<String?> timeZone,
|
||||
i0.Value<int?> rating,
|
||||
|
|
@ -150,6 +152,9 @@ class $$RemoteExifEntityTableFilterComposer
|
|||
i0.ColumnFilters<String> get model => $composableBuilder(
|
||||
column: $table.model, builder: (column) => i0.ColumnFilters(column));
|
||||
|
||||
i0.ColumnFilters<String> get lens => $composableBuilder(
|
||||
column: $table.lens, builder: (column) => i0.ColumnFilters(column));
|
||||
|
||||
i0.ColumnFilters<String> get orientation => $composableBuilder(
|
||||
column: $table.orientation,
|
||||
builder: (column) => i0.ColumnFilters(column));
|
||||
|
|
@ -249,6 +254,9 @@ class $$RemoteExifEntityTableOrderingComposer
|
|||
i0.ColumnOrderings<String> get model => $composableBuilder(
|
||||
column: $table.model, builder: (column) => i0.ColumnOrderings(column));
|
||||
|
||||
i0.ColumnOrderings<String> get lens => $composableBuilder(
|
||||
column: $table.lens, builder: (column) => i0.ColumnOrderings(column));
|
||||
|
||||
i0.ColumnOrderings<String> get orientation => $composableBuilder(
|
||||
column: $table.orientation,
|
||||
builder: (column) => i0.ColumnOrderings(column));
|
||||
|
|
@ -345,6 +353,9 @@ class $$RemoteExifEntityTableAnnotationComposer
|
|||
i0.GeneratedColumn<String> get model =>
|
||||
$composableBuilder(column: $table.model, builder: (column) => column);
|
||||
|
||||
i0.GeneratedColumn<String> get lens =>
|
||||
$composableBuilder(column: $table.lens, builder: (column) => column);
|
||||
|
||||
i0.GeneratedColumn<String> get orientation => $composableBuilder(
|
||||
column: $table.orientation, builder: (column) => column);
|
||||
|
||||
|
|
@ -424,6 +435,7 @@ class $$RemoteExifEntityTableTableManager extends i0.RootTableManager<
|
|||
i0.Value<int?> iso = const i0.Value.absent(),
|
||||
i0.Value<String?> make = const i0.Value.absent(),
|
||||
i0.Value<String?> model = const i0.Value.absent(),
|
||||
i0.Value<String?> lens = const i0.Value.absent(),
|
||||
i0.Value<String?> orientation = const i0.Value.absent(),
|
||||
i0.Value<String?> timeZone = const i0.Value.absent(),
|
||||
i0.Value<int?> rating = const i0.Value.absent(),
|
||||
|
|
@ -447,6 +459,7 @@ class $$RemoteExifEntityTableTableManager extends i0.RootTableManager<
|
|||
iso: iso,
|
||||
make: make,
|
||||
model: model,
|
||||
lens: lens,
|
||||
orientation: orientation,
|
||||
timeZone: timeZone,
|
||||
rating: rating,
|
||||
|
|
@ -470,6 +483,7 @@ class $$RemoteExifEntityTableTableManager extends i0.RootTableManager<
|
|||
i0.Value<int?> iso = const i0.Value.absent(),
|
||||
i0.Value<String?> make = const i0.Value.absent(),
|
||||
i0.Value<String?> model = const i0.Value.absent(),
|
||||
i0.Value<String?> lens = const i0.Value.absent(),
|
||||
i0.Value<String?> orientation = const i0.Value.absent(),
|
||||
i0.Value<String?> timeZone = const i0.Value.absent(),
|
||||
i0.Value<int?> rating = const i0.Value.absent(),
|
||||
|
|
@ -493,6 +507,7 @@ class $$RemoteExifEntityTableTableManager extends i0.RootTableManager<
|
|||
iso: iso,
|
||||
make: make,
|
||||
model: model,
|
||||
lens: lens,
|
||||
orientation: orientation,
|
||||
timeZone: timeZone,
|
||||
rating: rating,
|
||||
|
|
@ -666,6 +681,12 @@ class $RemoteExifEntityTable extends i2.RemoteExifEntity
|
|||
late final i0.GeneratedColumn<String> model = i0.GeneratedColumn<String>(
|
||||
'model', aliasedName, true,
|
||||
type: i0.DriftSqlType.string, requiredDuringInsert: false);
|
||||
static const i0.VerificationMeta _lensMeta =
|
||||
const i0.VerificationMeta('lens');
|
||||
@override
|
||||
late final i0.GeneratedColumn<String> lens = i0.GeneratedColumn<String>(
|
||||
'lens', aliasedName, true,
|
||||
type: i0.DriftSqlType.string, requiredDuringInsert: false);
|
||||
static const i0.VerificationMeta _orientationMeta =
|
||||
const i0.VerificationMeta('orientation');
|
||||
@override
|
||||
|
|
@ -709,6 +730,7 @@ class $RemoteExifEntityTable extends i2.RemoteExifEntity
|
|||
iso,
|
||||
make,
|
||||
model,
|
||||
lens,
|
||||
orientation,
|
||||
timeZone,
|
||||
rating,
|
||||
|
|
@ -803,6 +825,10 @@ class $RemoteExifEntityTable extends i2.RemoteExifEntity
|
|||
context.handle(
|
||||
_modelMeta, model.isAcceptableOrUnknown(data['model']!, _modelMeta));
|
||||
}
|
||||
if (data.containsKey('lens')) {
|
||||
context.handle(
|
||||
_lensMeta, lens.isAcceptableOrUnknown(data['lens']!, _lensMeta));
|
||||
}
|
||||
if (data.containsKey('orientation')) {
|
||||
context.handle(
|
||||
_orientationMeta,
|
||||
|
|
@ -868,6 +894,8 @@ class $RemoteExifEntityTable extends i2.RemoteExifEntity
|
|||
.read(i0.DriftSqlType.string, data['${effectivePrefix}make']),
|
||||
model: attachedDatabase.typeMapping
|
||||
.read(i0.DriftSqlType.string, data['${effectivePrefix}model']),
|
||||
lens: attachedDatabase.typeMapping
|
||||
.read(i0.DriftSqlType.string, data['${effectivePrefix}lens']),
|
||||
orientation: attachedDatabase.typeMapping
|
||||
.read(i0.DriftSqlType.string, data['${effectivePrefix}orientation']),
|
||||
timeZone: attachedDatabase.typeMapping
|
||||
|
|
@ -909,6 +937,7 @@ class RemoteExifEntityData extends i0.DataClass
|
|||
final int? iso;
|
||||
final String? make;
|
||||
final String? model;
|
||||
final String? lens;
|
||||
final String? orientation;
|
||||
final String? timeZone;
|
||||
final int? rating;
|
||||
|
|
@ -931,6 +960,7 @@ class RemoteExifEntityData extends i0.DataClass
|
|||
this.iso,
|
||||
this.make,
|
||||
this.model,
|
||||
this.lens,
|
||||
this.orientation,
|
||||
this.timeZone,
|
||||
this.rating,
|
||||
|
|
@ -987,6 +1017,9 @@ class RemoteExifEntityData extends i0.DataClass
|
|||
if (!nullToAbsent || model != null) {
|
||||
map['model'] = i0.Variable<String>(model);
|
||||
}
|
||||
if (!nullToAbsent || lens != null) {
|
||||
map['lens'] = i0.Variable<String>(lens);
|
||||
}
|
||||
if (!nullToAbsent || orientation != null) {
|
||||
map['orientation'] = i0.Variable<String>(orientation);
|
||||
}
|
||||
|
|
@ -1024,6 +1057,7 @@ class RemoteExifEntityData extends i0.DataClass
|
|||
iso: serializer.fromJson<int?>(json['iso']),
|
||||
make: serializer.fromJson<String?>(json['make']),
|
||||
model: serializer.fromJson<String?>(json['model']),
|
||||
lens: serializer.fromJson<String?>(json['lens']),
|
||||
orientation: serializer.fromJson<String?>(json['orientation']),
|
||||
timeZone: serializer.fromJson<String?>(json['timeZone']),
|
||||
rating: serializer.fromJson<int?>(json['rating']),
|
||||
|
|
@ -1051,6 +1085,7 @@ class RemoteExifEntityData extends i0.DataClass
|
|||
'iso': serializer.toJson<int?>(iso),
|
||||
'make': serializer.toJson<String?>(make),
|
||||
'model': serializer.toJson<String?>(model),
|
||||
'lens': serializer.toJson<String?>(lens),
|
||||
'orientation': serializer.toJson<String?>(orientation),
|
||||
'timeZone': serializer.toJson<String?>(timeZone),
|
||||
'rating': serializer.toJson<int?>(rating),
|
||||
|
|
@ -1076,6 +1111,7 @@ class RemoteExifEntityData extends i0.DataClass
|
|||
i0.Value<int?> iso = const i0.Value.absent(),
|
||||
i0.Value<String?> make = const i0.Value.absent(),
|
||||
i0.Value<String?> model = const i0.Value.absent(),
|
||||
i0.Value<String?> lens = const i0.Value.absent(),
|
||||
i0.Value<String?> orientation = const i0.Value.absent(),
|
||||
i0.Value<String?> timeZone = const i0.Value.absent(),
|
||||
i0.Value<int?> rating = const i0.Value.absent(),
|
||||
|
|
@ -1101,6 +1137,7 @@ class RemoteExifEntityData extends i0.DataClass
|
|||
iso: iso.present ? iso.value : this.iso,
|
||||
make: make.present ? make.value : this.make,
|
||||
model: model.present ? model.value : this.model,
|
||||
lens: lens.present ? lens.value : this.lens,
|
||||
orientation: orientation.present ? orientation.value : this.orientation,
|
||||
timeZone: timeZone.present ? timeZone.value : this.timeZone,
|
||||
rating: rating.present ? rating.value : this.rating,
|
||||
|
|
@ -1132,6 +1169,7 @@ class RemoteExifEntityData extends i0.DataClass
|
|||
iso: data.iso.present ? data.iso.value : this.iso,
|
||||
make: data.make.present ? data.make.value : this.make,
|
||||
model: data.model.present ? data.model.value : this.model,
|
||||
lens: data.lens.present ? data.lens.value : this.lens,
|
||||
orientation:
|
||||
data.orientation.present ? data.orientation.value : this.orientation,
|
||||
timeZone: data.timeZone.present ? data.timeZone.value : this.timeZone,
|
||||
|
|
@ -1162,6 +1200,7 @@ class RemoteExifEntityData extends i0.DataClass
|
|||
..write('iso: $iso, ')
|
||||
..write('make: $make, ')
|
||||
..write('model: $model, ')
|
||||
..write('lens: $lens, ')
|
||||
..write('orientation: $orientation, ')
|
||||
..write('timeZone: $timeZone, ')
|
||||
..write('rating: $rating, ')
|
||||
|
|
@ -1189,6 +1228,7 @@ class RemoteExifEntityData extends i0.DataClass
|
|||
iso,
|
||||
make,
|
||||
model,
|
||||
lens,
|
||||
orientation,
|
||||
timeZone,
|
||||
rating,
|
||||
|
|
@ -1215,6 +1255,7 @@ class RemoteExifEntityData extends i0.DataClass
|
|||
other.iso == this.iso &&
|
||||
other.make == this.make &&
|
||||
other.model == this.model &&
|
||||
other.lens == this.lens &&
|
||||
other.orientation == this.orientation &&
|
||||
other.timeZone == this.timeZone &&
|
||||
other.rating == this.rating &&
|
||||
|
|
@ -1240,6 +1281,7 @@ class RemoteExifEntityCompanion
|
|||
final i0.Value<int?> iso;
|
||||
final i0.Value<String?> make;
|
||||
final i0.Value<String?> model;
|
||||
final i0.Value<String?> lens;
|
||||
final i0.Value<String?> orientation;
|
||||
final i0.Value<String?> timeZone;
|
||||
final i0.Value<int?> rating;
|
||||
|
|
@ -1262,6 +1304,7 @@ class RemoteExifEntityCompanion
|
|||
this.iso = const i0.Value.absent(),
|
||||
this.make = const i0.Value.absent(),
|
||||
this.model = const i0.Value.absent(),
|
||||
this.lens = const i0.Value.absent(),
|
||||
this.orientation = const i0.Value.absent(),
|
||||
this.timeZone = const i0.Value.absent(),
|
||||
this.rating = const i0.Value.absent(),
|
||||
|
|
@ -1285,6 +1328,7 @@ class RemoteExifEntityCompanion
|
|||
this.iso = const i0.Value.absent(),
|
||||
this.make = const i0.Value.absent(),
|
||||
this.model = const i0.Value.absent(),
|
||||
this.lens = const i0.Value.absent(),
|
||||
this.orientation = const i0.Value.absent(),
|
||||
this.timeZone = const i0.Value.absent(),
|
||||
this.rating = const i0.Value.absent(),
|
||||
|
|
@ -1308,6 +1352,7 @@ class RemoteExifEntityCompanion
|
|||
i0.Expression<int>? iso,
|
||||
i0.Expression<String>? make,
|
||||
i0.Expression<String>? model,
|
||||
i0.Expression<String>? lens,
|
||||
i0.Expression<String>? orientation,
|
||||
i0.Expression<String>? timeZone,
|
||||
i0.Expression<int>? rating,
|
||||
|
|
@ -1331,6 +1376,7 @@ class RemoteExifEntityCompanion
|
|||
if (iso != null) 'iso': iso,
|
||||
if (make != null) 'make': make,
|
||||
if (model != null) 'model': model,
|
||||
if (lens != null) 'lens': lens,
|
||||
if (orientation != null) 'orientation': orientation,
|
||||
if (timeZone != null) 'time_zone': timeZone,
|
||||
if (rating != null) 'rating': rating,
|
||||
|
|
@ -1356,6 +1402,7 @@ class RemoteExifEntityCompanion
|
|||
i0.Value<int?>? iso,
|
||||
i0.Value<String?>? make,
|
||||
i0.Value<String?>? model,
|
||||
i0.Value<String?>? lens,
|
||||
i0.Value<String?>? orientation,
|
||||
i0.Value<String?>? timeZone,
|
||||
i0.Value<int?>? rating,
|
||||
|
|
@ -1378,6 +1425,7 @@ class RemoteExifEntityCompanion
|
|||
iso: iso ?? this.iso,
|
||||
make: make ?? this.make,
|
||||
model: model ?? this.model,
|
||||
lens: lens ?? this.lens,
|
||||
orientation: orientation ?? this.orientation,
|
||||
timeZone: timeZone ?? this.timeZone,
|
||||
rating: rating ?? this.rating,
|
||||
|
|
@ -1439,6 +1487,9 @@ class RemoteExifEntityCompanion
|
|||
if (model.present) {
|
||||
map['model'] = i0.Variable<String>(model.value);
|
||||
}
|
||||
if (lens.present) {
|
||||
map['lens'] = i0.Variable<String>(lens.value);
|
||||
}
|
||||
if (orientation.present) {
|
||||
map['orientation'] = i0.Variable<String>(orientation.value);
|
||||
}
|
||||
|
|
@ -1474,6 +1525,7 @@ class RemoteExifEntityCompanion
|
|||
..write('iso: $iso, ')
|
||||
..write('make: $make, ')
|
||||
..write('model: $model, ')
|
||||
..write('lens: $lens, ')
|
||||
..write('orientation: $orientation, ')
|
||||
..write('timeZone: $timeZone, ')
|
||||
..write('rating: $rating, ')
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue