change thumbhash to List<byte> from String

This commit is contained in:
Luke McCarthy 2023-06-27 09:26:53 -04:00
parent 115fd62878
commit 8f8b083a56
4 changed files with 101 additions and 110 deletions

View file

@ -84,6 +84,7 @@ class _$AppRouter extends RootStackRouter {
onVideoEnded: args.onVideoEnded,
onPlaying: args.onPlaying,
onPaused: args.onPaused,
placeholder: args.placeholder,
),
);
},
@ -673,6 +674,7 @@ class VideoViewerRoute extends PageRouteInfo<VideoViewerRouteArgs> {
required dynamic onVideoEnded,
dynamic onPlaying,
dynamic onPaused,
Widget? placeholder,
}) : super(
VideoViewerRoute.name,
path: '/video-viewer-page',
@ -683,6 +685,7 @@ class VideoViewerRoute extends PageRouteInfo<VideoViewerRouteArgs> {
onVideoEnded: onVideoEnded,
onPlaying: onPlaying,
onPaused: onPaused,
placeholder: placeholder,
),
);
@ -697,6 +700,7 @@ class VideoViewerRouteArgs {
required this.onVideoEnded,
this.onPlaying,
this.onPaused,
this.placeholder,
});
final Key? key;
@ -711,9 +715,11 @@ class VideoViewerRouteArgs {
final dynamic onPaused;
final Widget? placeholder;
@override
String toString() {
return 'VideoViewerRouteArgs{key: $key, asset: $asset, isMotionVideo: $isMotionVideo, onVideoEnded: $onVideoEnded, onPlaying: $onPlaying, onPaused: $onPaused}';
return 'VideoViewerRouteArgs{key: $key, asset: $asset, isMotionVideo: $isMotionVideo, onVideoEnded: $onVideoEnded, onPlaying: $onPlaying, onPaused: $onPaused, placeholder: $placeholder}';
}
}

View file

@ -1,4 +1,6 @@
import 'dart:convert';
import 'dart:ffi';
import 'dart:typed_data';
import 'package:immich_mobile/shared/models/exif_info.dart';
import 'package:immich_mobile/shared/models/store.dart';
@ -31,7 +33,8 @@ class Asset {
remote.exifInfo != null ? ExifInfo.fromDto(remote.exifInfo!) : null,
isFavorite = remote.isFavorite,
isArchived = remote.isArchived,
thumbhash = remote.thumbhash;
thumbhash =
remote.thumbhash != null ? base64.decode(remote.thumbhash!) : null;
Asset.local(AssetEntity local, List<int> hash)
: localId = local.id,
@ -110,7 +113,7 @@ class Asset {
)
String checksum;
String? thumbhash;
List<byte>? thumbhash;
@Index(unique: false, replace: false, type: IndexType.hash)
String? remoteId;
@ -301,7 +304,7 @@ class Asset {
Asset _copyWith({
Id? id,
String? checksum,
String? thumbhash,
List<byte>? thumbhash,
String? remoteId,
String? localId,
int? ownerId,

View file

@ -80,7 +80,7 @@ const AssetSchema = CollectionSchema(
r'thumbhash': PropertySchema(
id: 12,
name: r'thumbhash',
type: IsarType.string,
type: IsarType.byteList,
),
r'type': PropertySchema(
id: 13,
@ -187,7 +187,7 @@ int _assetEstimateSize(
{
final value = object.thumbhash;
if (value != null) {
bytesCount += 3 + value.length * 3;
bytesCount += 3 + value.length;
}
}
return bytesCount;
@ -211,7 +211,7 @@ void _assetSerialize(
writer.writeString(offsets[9], object.localId);
writer.writeLong(offsets[10], object.ownerId);
writer.writeString(offsets[11], object.remoteId);
writer.writeString(offsets[12], object.thumbhash);
writer.writeByteList(offsets[12], object.thumbhash);
writer.writeByte(offsets[13], object.type.index);
writer.writeDateTime(offsets[14], object.updatedAt);
writer.writeInt(offsets[15], object.width);
@ -237,7 +237,7 @@ Asset _assetDeserialize(
localId: reader.readStringOrNull(offsets[9]),
ownerId: reader.readLong(offsets[10]),
remoteId: reader.readStringOrNull(offsets[11]),
thumbhash: reader.readStringOrNull(offsets[12]),
thumbhash: reader.readByteList(offsets[12]),
type: _AssettypeValueEnumMap[reader.readByteOrNull(offsets[13])] ??
AssetType.other,
updatedAt: reader.readDateTime(offsets[14]),
@ -278,7 +278,7 @@ P _assetDeserializeProp<P>(
case 11:
return (reader.readStringOrNull(offset)) as P;
case 12:
return (reader.readStringOrNull(offset)) as P;
return (reader.readByteList(offset)) as P;
case 13:
return (_AssettypeValueEnumMap[reader.readByteOrNull(offset)] ??
AssetType.other) as P;
@ -1817,55 +1817,47 @@ extension AssetQueryFilter on QueryBuilder<Asset, Asset, QFilterCondition> {
});
}
QueryBuilder<Asset, Asset, QAfterFilterCondition> thumbhashEqualTo(
String? value, {
bool caseSensitive = true,
}) {
QueryBuilder<Asset, Asset, QAfterFilterCondition> thumbhashElementEqualTo(
int value) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.equalTo(
property: r'thumbhash',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Asset, Asset, QAfterFilterCondition> thumbhashGreaterThan(
String? value, {
QueryBuilder<Asset, Asset, QAfterFilterCondition> thumbhashElementGreaterThan(
int value, {
bool include = false,
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.greaterThan(
include: include,
property: r'thumbhash',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Asset, Asset, QAfterFilterCondition> thumbhashLessThan(
String? value, {
QueryBuilder<Asset, Asset, QAfterFilterCondition> thumbhashElementLessThan(
int value, {
bool include = false,
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.lessThan(
include: include,
property: r'thumbhash',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Asset, Asset, QAfterFilterCondition> thumbhashBetween(
String? lower,
String? upper, {
QueryBuilder<Asset, Asset, QAfterFilterCondition> thumbhashElementBetween(
int lower,
int upper, {
bool includeLower = true,
bool includeUpper = true,
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.between(
@ -1874,76 +1866,91 @@ extension AssetQueryFilter on QueryBuilder<Asset, Asset, QFilterCondition> {
includeLower: includeLower,
upper: upper,
includeUpper: includeUpper,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Asset, Asset, QAfterFilterCondition> thumbhashStartsWith(
String value, {
bool caseSensitive = true,
}) {
QueryBuilder<Asset, Asset, QAfterFilterCondition> thumbhashLengthEqualTo(
int length) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.startsWith(
property: r'thumbhash',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Asset, Asset, QAfterFilterCondition> thumbhashEndsWith(
String value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.endsWith(
property: r'thumbhash',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Asset, Asset, QAfterFilterCondition> thumbhashContains(
String value,
{bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.contains(
property: r'thumbhash',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Asset, Asset, QAfterFilterCondition> thumbhashMatches(
String pattern,
{bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.matches(
property: r'thumbhash',
wildcard: pattern,
caseSensitive: caseSensitive,
));
return query.listLength(
r'thumbhash',
length,
true,
length,
true,
);
});
}
QueryBuilder<Asset, Asset, QAfterFilterCondition> thumbhashIsEmpty() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.equalTo(
property: r'thumbhash',
value: '',
));
return query.listLength(
r'thumbhash',
0,
true,
0,
true,
);
});
}
QueryBuilder<Asset, Asset, QAfterFilterCondition> thumbhashIsNotEmpty() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.greaterThan(
property: r'thumbhash',
value: '',
));
return query.listLength(
r'thumbhash',
0,
false,
999999,
true,
);
});
}
QueryBuilder<Asset, Asset, QAfterFilterCondition> thumbhashLengthLessThan(
int length, {
bool include = false,
}) {
return QueryBuilder.apply(this, (query) {
return query.listLength(
r'thumbhash',
0,
true,
length,
include,
);
});
}
QueryBuilder<Asset, Asset, QAfterFilterCondition> thumbhashLengthGreaterThan(
int length, {
bool include = false,
}) {
return QueryBuilder.apply(this, (query) {
return query.listLength(
r'thumbhash',
length,
include,
999999,
true,
);
});
}
QueryBuilder<Asset, Asset, QAfterFilterCondition> thumbhashLengthBetween(
int lower,
int upper, {
bool includeLower = true,
bool includeUpper = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.listLength(
r'thumbhash',
lower,
includeLower,
upper,
includeUpper,
);
});
}
@ -2271,18 +2278,6 @@ extension AssetQuerySortBy on QueryBuilder<Asset, Asset, QSortBy> {
});
}
QueryBuilder<Asset, Asset, QAfterSortBy> sortByThumbhash() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'thumbhash', Sort.asc);
});
}
QueryBuilder<Asset, Asset, QAfterSortBy> sortByThumbhashDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'thumbhash', Sort.desc);
});
}
QueryBuilder<Asset, Asset, QAfterSortBy> sortByType() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'type', Sort.asc);
@ -2477,18 +2472,6 @@ extension AssetQuerySortThenBy on QueryBuilder<Asset, Asset, QSortThenBy> {
});
}
QueryBuilder<Asset, Asset, QAfterSortBy> thenByThumbhash() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'thumbhash', Sort.asc);
});
}
QueryBuilder<Asset, Asset, QAfterSortBy> thenByThumbhashDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'thumbhash', Sort.desc);
});
}
QueryBuilder<Asset, Asset, QAfterSortBy> thenByType() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'type', Sort.asc);
@ -2605,10 +2588,9 @@ extension AssetQueryWhereDistinct on QueryBuilder<Asset, Asset, QDistinct> {
});
}
QueryBuilder<Asset, Asset, QDistinct> distinctByThumbhash(
{bool caseSensitive = true}) {
QueryBuilder<Asset, Asset, QDistinct> distinctByThumbhash() {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'thumbhash', caseSensitive: caseSensitive);
return query.addDistinctBy(r'thumbhash');
});
}
@ -2710,7 +2692,7 @@ extension AssetQueryProperty on QueryBuilder<Asset, Asset, QQueryProperty> {
});
}
QueryBuilder<Asset, String?, QQueryOperations> thumbhashProperty() {
QueryBuilder<Asset, List<int>?, QQueryOperations> thumbhashProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'thumbhash');
});

View file

@ -104,7 +104,7 @@ class ImmichImage extends StatelessWidget {
return FittedBox(
fit: BoxFit.fill,
child: Image(
image: ThumbHash.fromBase64(asset.thumbhash!).toImage(),
image: ThumbHash.fromIntList(asset.thumbhash!).toImage(),
),
);
} else if (useGrayBoxPlaceholder) {