You've already forked immich
mirror of
https://github.com/immich-app/immich.git
synced 2025-07-06 06:07:29 +02:00
* 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>
115 lines
5.2 KiB
Dart
Generated
115 lines
5.2 KiB
Dart
Generated
// dart format width=80
|
|
// ignore_for_file: type=lint
|
|
import 'package:drift/drift.dart' as i0;
|
|
import 'package:drift/internal/modular.dart' as i1;
|
|
import 'package:immich_mobile/domain/models/asset/base_asset.model.dart' as i2;
|
|
import 'package:immich_mobile/infrastructure/entities/remote_asset.entity.drift.dart'
|
|
as i3;
|
|
import 'package:immich_mobile/infrastructure/entities/local_asset.entity.drift.dart'
|
|
as i4;
|
|
|
|
class MergedAssetDrift extends i1.ModularAccessor {
|
|
MergedAssetDrift(i0.GeneratedDatabase db) : super(db);
|
|
i0.Selectable<MergedAssetResult> mergedAsset(List<String> var1,
|
|
{required i0.Limit limit}) {
|
|
var $arrayStartIndex = 1;
|
|
final expandedvar1 = $expandVar($arrayStartIndex, var1.length);
|
|
$arrayStartIndex += var1.length;
|
|
final generatedlimit = $write(limit, startIndex: $arrayStartIndex);
|
|
$arrayStartIndex += generatedlimit.amountOfVariables;
|
|
return customSelect(
|
|
'SELECT * FROM (SELECT rae.id AS remote_id, lae.id AS local_id, rae.name, rae.type, rae.created_at, rae.updated_at, rae.width, rae.height, rae.duration_in_seconds, rae.is_favorite, rae.thumb_hash, rae.checksum, rae.owner_id FROM remote_asset_entity AS rae LEFT JOIN local_asset_entity AS lae ON rae.checksum = lae.checksum WHERE rae.deleted_at IS NULL AND rae.visibility = 0 AND rae.owner_id IN ($expandedvar1) UNION ALL SELECT NULL AS remote_id, lae.id AS local_id, lae.name, lae.type, lae.created_at, lae.updated_at, lae.width, lae.height, lae.duration_in_seconds, lae.is_favorite, NULL AS thumb_hash, lae.checksum, NULL AS owner_id FROM local_asset_entity AS lae LEFT JOIN remote_asset_entity AS rae ON rae.checksum = lae.checksum WHERE rae.id IS NULL) ORDER BY created_at DESC ${generatedlimit.sql}',
|
|
variables: [
|
|
for (var $ in var1) i0.Variable<String>($),
|
|
...generatedlimit.introducedVariables
|
|
],
|
|
readsFrom: {
|
|
remoteAssetEntity,
|
|
localAssetEntity,
|
|
...generatedlimit.watchedTables,
|
|
}).map((i0.QueryRow row) => MergedAssetResult(
|
|
remoteId: row.readNullable<String>('remote_id'),
|
|
localId: row.readNullable<String>('local_id'),
|
|
name: row.read<String>('name'),
|
|
type: i3.$RemoteAssetEntityTable.$convertertype
|
|
.fromSql(row.read<int>('type')),
|
|
createdAt: row.read<DateTime>('created_at'),
|
|
updatedAt: row.read<DateTime>('updated_at'),
|
|
width: row.readNullable<int>('width'),
|
|
height: row.readNullable<int>('height'),
|
|
durationInSeconds: row.readNullable<int>('duration_in_seconds'),
|
|
isFavorite: row.read<bool>('is_favorite'),
|
|
thumbHash: row.readNullable<String>('thumb_hash'),
|
|
checksum: row.readNullable<String>('checksum'),
|
|
ownerId: row.readNullable<String>('owner_id'),
|
|
));
|
|
}
|
|
|
|
i0.Selectable<MergedBucketResult> mergedBucket(List<String> var2,
|
|
{required int groupBy}) {
|
|
var $arrayStartIndex = 2;
|
|
final expandedvar2 = $expandVar($arrayStartIndex, var2.length);
|
|
$arrayStartIndex += var2.length;
|
|
return customSelect(
|
|
'SELECT COUNT(*) AS asset_count, CASE WHEN ?1 = 0 THEN STRFTIME(\'%Y-%m-%d\', created_at, \'localtime\') WHEN ?1 = 1 THEN STRFTIME(\'%Y-%m\', created_at, \'localtime\') END AS bucket_date FROM (SELECT rae.name, rae.created_at FROM remote_asset_entity AS rae LEFT JOIN local_asset_entity AS lae ON rae.checksum = lae.checksum WHERE rae.deleted_at IS NULL AND rae.visibility = 0 AND rae.owner_id IN ($expandedvar2) UNION ALL SELECT lae.name, lae.created_at FROM local_asset_entity AS lae LEFT JOIN remote_asset_entity AS rae ON rae.checksum = lae.checksum WHERE rae.id IS NULL) GROUP BY bucket_date ORDER BY bucket_date DESC',
|
|
variables: [
|
|
i0.Variable<int>(groupBy),
|
|
for (var $ in var2) i0.Variable<String>($)
|
|
],
|
|
readsFrom: {
|
|
remoteAssetEntity,
|
|
localAssetEntity,
|
|
}).map((i0.QueryRow row) => MergedBucketResult(
|
|
assetCount: row.read<int>('asset_count'),
|
|
bucketDate: row.read<String>('bucket_date'),
|
|
));
|
|
}
|
|
|
|
i3.$RemoteAssetEntityTable get remoteAssetEntity =>
|
|
i1.ReadDatabaseContainer(attachedDatabase)
|
|
.resultSet<i3.$RemoteAssetEntityTable>('remote_asset_entity');
|
|
i4.$LocalAssetEntityTable get localAssetEntity =>
|
|
i1.ReadDatabaseContainer(attachedDatabase)
|
|
.resultSet<i4.$LocalAssetEntityTable>('local_asset_entity');
|
|
}
|
|
|
|
class MergedAssetResult {
|
|
final String? remoteId;
|
|
final String? localId;
|
|
final String name;
|
|
final i2.AssetType type;
|
|
final DateTime createdAt;
|
|
final DateTime updatedAt;
|
|
final int? width;
|
|
final int? height;
|
|
final int? durationInSeconds;
|
|
final bool isFavorite;
|
|
final String? thumbHash;
|
|
final String? checksum;
|
|
final String? ownerId;
|
|
MergedAssetResult({
|
|
this.remoteId,
|
|
this.localId,
|
|
required this.name,
|
|
required this.type,
|
|
required this.createdAt,
|
|
required this.updatedAt,
|
|
this.width,
|
|
this.height,
|
|
this.durationInSeconds,
|
|
required this.isFavorite,
|
|
this.thumbHash,
|
|
this.checksum,
|
|
this.ownerId,
|
|
});
|
|
}
|
|
|
|
class MergedBucketResult {
|
|
final int assetCount;
|
|
final String bucketDate;
|
|
MergedBucketResult({
|
|
required this.assetCount,
|
|
required this.bucketDate,
|
|
});
|
|
}
|