mirror of
https://github.com/immich-app/immich.git
synced 2025-05-31 20:25:32 -04:00
fix option usage
This commit is contained in:
parent
aa8a8b4513
commit
e475653206
@ -163,10 +163,10 @@ class Album {
|
|||||||
dto.order == AssetOrder.asc ? SortOrder.asc : SortOrder.desc;
|
dto.order == AssetOrder.asc ? SortOrder.asc : SortOrder.desc;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dto.albumThumbnailAssetId != null) {
|
if (dto.albumThumbnailAssetId.unwrapOrNull() != null) {
|
||||||
a.thumbnail.value = await db.assets
|
a.thumbnail.value = await db.assets
|
||||||
.where()
|
.where()
|
||||||
.remoteIdEqualTo(dto.albumThumbnailAssetId)
|
.remoteIdEqualTo(dto.albumThumbnailAssetId.unwrap())
|
||||||
.findFirst();
|
.findFirst();
|
||||||
}
|
}
|
||||||
if (dto.albumUsers.isNotEmpty) {
|
if (dto.albumUsers.isNotEmpty) {
|
||||||
|
@ -27,9 +27,9 @@ class Asset {
|
|||||||
durationInSeconds = remote.duration.toDuration()?.inSeconds ?? 0,
|
durationInSeconds = remote.duration.toDuration()?.inSeconds ?? 0,
|
||||||
type = remote.type.toAssetType(),
|
type = remote.type.toAssetType(),
|
||||||
fileName = remote.originalFileName,
|
fileName = remote.originalFileName,
|
||||||
height = remote.exifInfo?.exifImageHeight?.toInt(),
|
height = remote.exifInfo?.exifImageHeight.unwrapOrNull()?.toInt(),
|
||||||
width = remote.exifInfo?.exifImageWidth?.toInt(),
|
width = remote.exifInfo?.exifImageWidth.unwrapOrNull()?.toInt(),
|
||||||
livePhotoVideoId = remote.livePhotoVideoId,
|
livePhotoVideoId = remote.livePhotoVideoId.unwrapOrNull(),
|
||||||
ownerId = fastHash(remote.ownerId),
|
ownerId = fastHash(remote.ownerId),
|
||||||
exifInfo = remote.exifInfo == null
|
exifInfo = remote.exifInfo == null
|
||||||
? null
|
? null
|
||||||
@ -40,12 +40,13 @@ class Asset {
|
|||||||
isOffline = remote.isOffline,
|
isOffline = remote.isOffline,
|
||||||
// workaround to nullify stackPrimaryAssetId for the parent asset until we refactor the mobile app
|
// workaround to nullify stackPrimaryAssetId for the parent asset until we refactor the mobile app
|
||||||
// stack handling to properly handle it
|
// stack handling to properly handle it
|
||||||
stackPrimaryAssetId = remote.stack?.primaryAssetId == remote.id
|
stackPrimaryAssetId =
|
||||||
? null
|
remote.stack.unwrapOrNull()?.primaryAssetId == remote.id
|
||||||
: remote.stack?.primaryAssetId,
|
? null
|
||||||
stackCount = remote.stack?.assetCount ?? 0,
|
: remote.stack.unwrapOrNull()?.primaryAssetId,
|
||||||
stackId = remote.stack?.id,
|
stackCount = remote.stack.unwrapOrNull()?.assetCount ?? 0,
|
||||||
thumbhash = remote.thumbhash;
|
stackId = remote.stack.unwrapOrNull()?.id,
|
||||||
|
thumbhash = remote.thumbhash.unwrapOrNull();
|
||||||
|
|
||||||
Asset({
|
Asset({
|
||||||
this.id = Isar.autoIncrement,
|
this.id = Isar.autoIncrement,
|
||||||
|
@ -5,24 +5,24 @@ import 'package:openapi/api.dart';
|
|||||||
abstract final class ExifDtoConverter {
|
abstract final class ExifDtoConverter {
|
||||||
static ExifInfo fromDto(ExifResponseDto dto) {
|
static ExifInfo fromDto(ExifResponseDto dto) {
|
||||||
return ExifInfo(
|
return ExifInfo(
|
||||||
fileSize: dto.fileSizeInByte,
|
fileSize: dto.fileSizeInByte.unwrapOrNull(),
|
||||||
description: dto.description,
|
description: dto.description.unwrapOrNull(),
|
||||||
orientation: dto.orientation,
|
orientation: dto.orientation.unwrapOrNull(),
|
||||||
timeZone: dto.timeZone,
|
timeZone: dto.timeZone.unwrapOrNull(),
|
||||||
dateTimeOriginal: dto.dateTimeOriginal,
|
dateTimeOriginal: dto.dateTimeOriginal.unwrapOrNull(),
|
||||||
isFlipped: isOrientationFlipped(dto.orientation),
|
isFlipped: isOrientationFlipped(dto.orientation.unwrapOrNull()),
|
||||||
latitude: dto.latitude?.toDouble(),
|
latitude: dto.latitude.unwrapOrNull()?.toDouble(),
|
||||||
longitude: dto.longitude?.toDouble(),
|
longitude: dto.longitude.unwrapOrNull()?.toDouble(),
|
||||||
city: dto.city,
|
city: dto.city.unwrapOrNull(),
|
||||||
state: dto.state,
|
state: dto.state.unwrapOrNull(),
|
||||||
country: dto.country,
|
country: dto.country.unwrapOrNull(),
|
||||||
make: dto.make,
|
make: dto.make.unwrapOrNull(),
|
||||||
model: dto.model,
|
model: dto.model.unwrapOrNull(),
|
||||||
lens: dto.lensModel,
|
lens: dto.lensModel.unwrapOrNull(),
|
||||||
f: dto.fNumber?.toDouble(),
|
f: dto.fNumber.unwrapOrNull()?.toDouble(),
|
||||||
mm: dto.focalLength?.toDouble(),
|
mm: dto.focalLength.unwrapOrNull()?.toDouble(),
|
||||||
iso: dto.iso?.toInt(),
|
iso: dto.iso.unwrapOrNull()?.toInt(),
|
||||||
exposureSeconds: _exposureTimeToSeconds(dto.exposureTime),
|
exposureSeconds: _exposureTimeToSeconds(dto.exposureTime.unwrapOrNull()),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,8 +31,8 @@ abstract final class UserConverter {
|
|||||||
inTimeline: false,
|
inTimeline: false,
|
||||||
isPartnerSharedBy: false,
|
isPartnerSharedBy: false,
|
||||||
isPartnerSharedWith: false,
|
isPartnerSharedWith: false,
|
||||||
quotaUsageInBytes: adminDto.quotaUsageInBytes ?? 0,
|
quotaUsageInBytes: adminDto.quotaUsageInBytes.unwrapOrNull() ?? 0,
|
||||||
quotaSizeInBytes: adminDto.quotaSizeInBytes ?? 0,
|
quotaSizeInBytes: adminDto.quotaSizeInBytes.unwrapOrNull() ?? 0,
|
||||||
);
|
);
|
||||||
|
|
||||||
static UserDto fromPartnerDto(PartnerResponseDto dto) => UserDto(
|
static UserDto fromPartnerDto(PartnerResponseDto dto) => UserDto(
|
||||||
|
@ -61,9 +61,9 @@ class SharedLink {
|
|||||||
: id = dto.id,
|
: id = dto.id,
|
||||||
allowDownload = dto.allowDownload,
|
allowDownload = dto.allowDownload,
|
||||||
allowUpload = dto.allowUpload,
|
allowUpload = dto.allowUpload,
|
||||||
description = dto.description,
|
description = dto.description.unwrapOrNull(),
|
||||||
password = dto.password,
|
password = dto.password.unwrapOrNull(),
|
||||||
expiresAt = dto.expiresAt,
|
expiresAt = dto.expiresAt.unwrapOrNull(),
|
||||||
key = dto.key,
|
key = dto.key,
|
||||||
showMetadata = dto.showMetadata,
|
showMetadata = dto.showMetadata,
|
||||||
type = dto.type == SharedLinkType.ALBUM
|
type = dto.type == SharedLinkType.ALBUM
|
||||||
@ -73,7 +73,7 @@ class SharedLink {
|
|||||||
? dto.album?.albumName.toUpperCase() ?? "UNKNOWN SHARE"
|
? dto.album?.albumName.toUpperCase() ?? "UNKNOWN SHARE"
|
||||||
: "INDIVIDUAL SHARE",
|
: "INDIVIDUAL SHARE",
|
||||||
thumbAssetId = dto.type == SharedLinkType.ALBUM
|
thumbAssetId = dto.type == SharedLinkType.ALBUM
|
||||||
? dto.album?.albumThumbnailAssetId
|
? dto.album?.albumThumbnailAssetId.unwrapOrNull()
|
||||||
: dto.assets.isNotEmpty
|
: dto.assets.isNotEmpty
|
||||||
? dto.assets[0].id
|
? dto.assets[0].id
|
||||||
: null;
|
: null;
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:immich_mobile/models/search/search_curated_content.model.dart';
|
import 'package:immich_mobile/models/search/search_curated_content.model.dart';
|
||||||
|
|
||||||
import 'package:immich_mobile/services/search.service.dart';
|
import 'package:immich_mobile/services/search.service.dart';
|
||||||
|
|
||||||
final getPreviewPlacesProvider =
|
final getPreviewPlacesProvider =
|
||||||
@ -41,7 +40,7 @@ final getAllPlacesProvider =
|
|||||||
final curatedContent = assetPlaces
|
final curatedContent = assetPlaces
|
||||||
.map(
|
.map(
|
||||||
(data) => SearchCuratedContent(
|
(data) => SearchCuratedContent(
|
||||||
label: data.exifInfo!.city!,
|
label: data.exifInfo!.city.unwrap(),
|
||||||
id: data.id,
|
id: data.id,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
@ -61,7 +61,7 @@ class ActivityApiRepository extends ApiRepository
|
|||||||
? ActivityType.comment
|
? ActivityType.comment
|
||||||
: ActivityType.like,
|
: ActivityType.like,
|
||||||
user: UserConverter.fromSimpleUserDto(dto.user),
|
user: UserConverter.fromSimpleUserDto(dto.user),
|
||||||
assetId: dto.assetId,
|
assetId: dto.assetId.unwrapOrNull(),
|
||||||
comment: dto.comment,
|
comment: dto.comment.unwrapOrNull(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -168,7 +168,7 @@ class AlbumApiRepository extends ApiRepository implements IAlbumApiRepository {
|
|||||||
album.remoteAssetCount = dto.assetCount;
|
album.remoteAssetCount = dto.assetCount;
|
||||||
album.owner.value =
|
album.owner.value =
|
||||||
entity.User.fromDto(UserConverter.fromSimpleUserDto(dto.owner));
|
entity.User.fromDto(UserConverter.fromSimpleUserDto(dto.owner));
|
||||||
album.remoteThumbnailAssetId = dto.albumThumbnailAssetId;
|
album.remoteThumbnailAssetId = dto.albumThumbnailAssetId.unwrapOrNull();
|
||||||
final users = dto.albumUsers
|
final users = dto.albumUsers
|
||||||
.map((albumUser) => UserConverter.fromSimpleUserDto(albumUser.user));
|
.map((albumUser) => UserConverter.fromSimpleUserDto(albumUser.user));
|
||||||
album.sharedUsers.addAll(users.map(entity.User.fromDto));
|
album.sharedUsers.addAll(users.map(entity.User.fromDto));
|
||||||
|
@ -43,7 +43,7 @@ class AssetApiRepository extends ApiRepository implements IAssetApiRepository {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
result.addAll(response.assets.items.map(Asset.remote));
|
result.addAll(response.assets.items.map(Asset.remote));
|
||||||
hasNext = response.assets.nextPage != null;
|
hasNext = response.assets.nextPage.unwrapOrNull() != null;
|
||||||
currentPage++;
|
currentPage++;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
@ -29,7 +29,7 @@ class PersonApiRepository extends ApiRepository
|
|||||||
}
|
}
|
||||||
|
|
||||||
static Person _toPerson(PersonResponseDto dto) => Person(
|
static Person _toPerson(PersonResponseDto dto) => Person(
|
||||||
birthDate: dto.birthDate,
|
birthDate: dto.birthDate.unwrapOrNull(),
|
||||||
id: dto.id,
|
id: dto.id,
|
||||||
isHidden: dto.isHidden,
|
isHidden: dto.isHidden,
|
||||||
name: dto.name,
|
name: dto.name,
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:immich_mobile/entities/asset.entity.dart';
|
||||||
import 'package:immich_mobile/extensions/string_extensions.dart';
|
import 'package:immich_mobile/extensions/string_extensions.dart';
|
||||||
import 'package:immich_mobile/interfaces/asset.interface.dart';
|
import 'package:immich_mobile/interfaces/asset.interface.dart';
|
||||||
import 'package:immich_mobile/models/search/search_filter.model.dart';
|
import 'package:immich_mobile/models/search/search_filter.model.dart';
|
||||||
import 'package:immich_mobile/entities/asset.entity.dart';
|
|
||||||
import 'package:immich_mobile/models/search/search_result.model.dart';
|
import 'package:immich_mobile/models/search/search_result.model.dart';
|
||||||
import 'package:immich_mobile/providers/api.provider.dart';
|
import 'package:immich_mobile/providers/api.provider.dart';
|
||||||
import 'package:immich_mobile/repositories/asset.repository.dart';
|
import 'package:immich_mobile/repositories/asset.repository.dart';
|
||||||
import 'package:immich_mobile/services/api.service.dart';
|
import 'package:immich_mobile/services/api.service.dart';
|
||||||
|
import 'package:immich_mobile/utils/option.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:openapi/api.dart';
|
import 'package:openapi/api.dart';
|
||||||
|
|
||||||
@ -61,11 +62,11 @@ class SearchService {
|
|||||||
SmartSearchDto(
|
SmartSearchDto(
|
||||||
query: filter.context!,
|
query: filter.context!,
|
||||||
language: filter.language,
|
language: filter.language,
|
||||||
country: filter.location.country,
|
country: Option.from(filter.location.country),
|
||||||
state: filter.location.state,
|
state: Option.from(filter.location.state),
|
||||||
city: filter.location.city,
|
city: Option.from(filter.location.city),
|
||||||
make: filter.camera.make,
|
make: filter.camera.make,
|
||||||
model: filter.camera.model,
|
model: Option.from(filter.camera.model),
|
||||||
takenAfter: filter.date.takenAfter,
|
takenAfter: filter.date.takenAfter,
|
||||||
takenBefore: filter.date.takenBefore,
|
takenBefore: filter.date.takenBefore,
|
||||||
visibility: filter.display.isArchive
|
visibility: filter.display.isArchive
|
||||||
@ -86,15 +87,15 @@ class SearchService {
|
|||||||
filter.filename != null && filter.filename!.isNotEmpty
|
filter.filename != null && filter.filename!.isNotEmpty
|
||||||
? filter.filename
|
? filter.filename
|
||||||
: null,
|
: null,
|
||||||
country: filter.location.country,
|
country: Option.from(filter.location.country),
|
||||||
description:
|
description:
|
||||||
filter.description != null && filter.description!.isNotEmpty
|
filter.description != null && filter.description!.isNotEmpty
|
||||||
? filter.description
|
? filter.description
|
||||||
: null,
|
: null,
|
||||||
state: filter.location.state,
|
state: Option.from(filter.location.state),
|
||||||
city: filter.location.city,
|
city: Option.from(filter.location.city),
|
||||||
make: filter.camera.make,
|
make: filter.camera.make,
|
||||||
model: filter.camera.model,
|
model: Option.from(filter.camera.model),
|
||||||
takenAfter: filter.date.takenAfter,
|
takenAfter: filter.date.takenAfter,
|
||||||
takenBefore: filter.date.takenBefore,
|
takenBefore: filter.date.takenBefore,
|
||||||
visibility: filter.display.isArchive
|
visibility: filter.display.isArchive
|
||||||
@ -118,7 +119,7 @@ class SearchService {
|
|||||||
assets: await _assetRepository.getAllByRemoteId(
|
assets: await _assetRepository.getAllByRemoteId(
|
||||||
response.assets.items.map((e) => e.id),
|
response.assets.items.map((e) => e.id),
|
||||||
),
|
),
|
||||||
nextPage: response.assets.nextPage?.toInt(),
|
nextPage: response.assets.nextPage.unwrapOrNull()?.toInt(),
|
||||||
);
|
);
|
||||||
} catch (error, stackTrace) {
|
} catch (error, stackTrace) {
|
||||||
_log.severe("Failed to search for assets", error, stackTrace);
|
_log.severe("Failed to search for assets", error, stackTrace);
|
||||||
|
@ -2,6 +2,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
|
|||||||
import 'package:immich_mobile/models/shared_link/shared_link.model.dart';
|
import 'package:immich_mobile/models/shared_link/shared_link.model.dart';
|
||||||
import 'package:immich_mobile/providers/api.provider.dart';
|
import 'package:immich_mobile/providers/api.provider.dart';
|
||||||
import 'package:immich_mobile/services/api.service.dart';
|
import 'package:immich_mobile/services/api.service.dart';
|
||||||
|
import 'package:immich_mobile/utils/option.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:openapi/api.dart';
|
import 'package:openapi/api.dart';
|
||||||
|
|
||||||
@ -56,7 +57,7 @@ class SharedLinkService {
|
|||||||
showMetadata: showMeta,
|
showMetadata: showMeta,
|
||||||
allowDownload: allowDownload,
|
allowDownload: allowDownload,
|
||||||
allowUpload: allowUpload,
|
allowUpload: allowUpload,
|
||||||
expiresAt: expiresAt,
|
expiresAt: Option.from(expiresAt),
|
||||||
description: description,
|
description: description,
|
||||||
password: password,
|
password: password,
|
||||||
);
|
);
|
||||||
@ -66,7 +67,7 @@ class SharedLinkService {
|
|||||||
showMetadata: showMeta,
|
showMetadata: showMeta,
|
||||||
allowDownload: allowDownload,
|
allowDownload: allowDownload,
|
||||||
allowUpload: allowUpload,
|
allowUpload: allowUpload,
|
||||||
expiresAt: expiresAt,
|
expiresAt: Option.from(expiresAt),
|
||||||
description: description,
|
description: description,
|
||||||
password: password,
|
password: password,
|
||||||
assetIds: assetIds,
|
assetIds: assetIds,
|
||||||
@ -103,7 +104,7 @@ class SharedLinkService {
|
|||||||
showMetadata: showMeta,
|
showMetadata: showMeta,
|
||||||
allowDownload: allowDownload,
|
allowDownload: allowDownload,
|
||||||
allowUpload: allowUpload,
|
allowUpload: allowUpload,
|
||||||
expiresAt: expiresAt,
|
expiresAt: Option.from(expiresAt),
|
||||||
description: description,
|
description: description,
|
||||||
password: password,
|
password: password,
|
||||||
changeExpiryTime: changeExpiry,
|
changeExpiryTime: changeExpiry,
|
||||||
|
@ -45,9 +45,9 @@ class PeopleInfo extends ConsumerWidget {
|
|||||||
(p) => SearchCuratedContent(
|
(p) => SearchCuratedContent(
|
||||||
id: p.id,
|
id: p.id,
|
||||||
label: p.name,
|
label: p.name,
|
||||||
subtitle: p.birthDate != null &&
|
subtitle: p.birthDate.unwrapOrNull() != null &&
|
||||||
p.birthDate!.isBefore(asset.fileCreatedAt)
|
p.birthDate.unwrap().isBefore(asset.fileCreatedAt)
|
||||||
? _formatAge(p.birthDate!, asset.fileCreatedAt)
|
? _formatAge(p.birthDate.unwrap(), asset.fileCreatedAt)
|
||||||
: null,
|
: null,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
5
mobile/test/fixtures/sync_stream.stub.dart
vendored
5
mobile/test/fixtures/sync_stream.stub.dart
vendored
@ -1,11 +1,12 @@
|
|||||||
import 'package:immich_mobile/domain/models/sync_event.model.dart';
|
import 'package:immich_mobile/domain/models/sync_event.model.dart';
|
||||||
|
import 'package:immich_mobile/utils/option.dart';
|
||||||
import 'package:openapi/api.dart';
|
import 'package:openapi/api.dart';
|
||||||
|
|
||||||
abstract final class SyncStreamStub {
|
abstract final class SyncStreamStub {
|
||||||
static final userV1Admin = SyncEvent(
|
static final userV1Admin = SyncEvent(
|
||||||
type: SyncEntityType.userV1,
|
type: SyncEntityType.userV1,
|
||||||
data: SyncUserV1(
|
data: SyncUserV1(
|
||||||
deletedAt: DateTime(2020),
|
deletedAt: Some(DateTime(2020)),
|
||||||
email: "admin@admin",
|
email: "admin@admin",
|
||||||
id: "1",
|
id: "1",
|
||||||
name: "Admin",
|
name: "Admin",
|
||||||
@ -15,7 +16,7 @@ abstract final class SyncStreamStub {
|
|||||||
static final userV1User = SyncEvent(
|
static final userV1User = SyncEvent(
|
||||||
type: SyncEntityType.userV1,
|
type: SyncEntityType.userV1,
|
||||||
data: SyncUserV1(
|
data: SyncUserV1(
|
||||||
deletedAt: DateTime(2021),
|
deletedAt: Some(DateTime(2021)),
|
||||||
email: "user@user",
|
email: "user@user",
|
||||||
id: "5",
|
id: "5",
|
||||||
name: "User",
|
name: "User",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user