mirror of
https://github.com/immich-app/immich.git
synced 2025-01-01 08:31:59 +00:00
fix(mobile): stack count reset when navigating to library (#4647)
Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
This commit is contained in:
parent
cb0e37e76e
commit
b49b10141e
9 changed files with 21 additions and 12 deletions
2
cli/src/api/open-api/api.ts
generated
2
cli/src/api/open-api/api.ts
generated
|
@ -771,7 +771,7 @@ export interface AssetResponseDto {
|
||||||
* @type {number}
|
* @type {number}
|
||||||
* @memberof AssetResponseDto
|
* @memberof AssetResponseDto
|
||||||
*/
|
*/
|
||||||
'stackCount': number;
|
'stackCount': number | null;
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @type {string}
|
* @type {string}
|
||||||
|
|
|
@ -83,7 +83,7 @@ class GalleryViewerPage extends HookConsumerWidget {
|
||||||
navStack.length > 2 &&
|
navStack.length > 2 &&
|
||||||
navStack.elementAt(navStack.length - 2).name == TrashRoute.name;
|
navStack.elementAt(navStack.length - 2).name == TrashRoute.name;
|
||||||
final stackIndex = useState(-1);
|
final stackIndex = useState(-1);
|
||||||
final stack = showStack && currentAsset.stackCount > 0
|
final stack = showStack && currentAsset.stackChildrenCount > 0
|
||||||
? ref.watch(assetStackStateProvider(currentAsset))
|
? ref.watch(assetStackStateProvider(currentAsset))
|
||||||
: <Asset>[];
|
: <Asset>[];
|
||||||
final stackElements = showStack ? [currentAsset, ...stack] : <Asset>[];
|
final stackElements = showStack ? [currentAsset, ...stack] : <Asset>[];
|
||||||
|
|
|
@ -104,16 +104,16 @@ class ThumbnailImage extends StatelessWidget {
|
||||||
right: 5,
|
right: 5,
|
||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
if (asset.stackCount > 1)
|
if (asset.stackChildrenCount > 1)
|
||||||
Text(
|
Text(
|
||||||
"${asset.stackCount}",
|
"${asset.stackChildrenCount}",
|
||||||
style: const TextStyle(
|
style: const TextStyle(
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
fontSize: 10,
|
fontSize: 10,
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
if (asset.stackCount > 1)
|
if (asset.stackChildrenCount > 1)
|
||||||
const SizedBox(
|
const SizedBox(
|
||||||
width: 3,
|
width: 3,
|
||||||
),
|
),
|
||||||
|
@ -233,7 +233,7 @@ class ThumbnailImage extends StatelessWidget {
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
if (!asset.isImage) buildVideoIcon(),
|
if (!asset.isImage) buildVideoIcon(),
|
||||||
if (asset.isImage && asset.stackCount > 0) buildStackIcon(),
|
if (asset.isImage && asset.stackChildrenCount > 0) buildStackIcon(),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
@ -153,7 +153,10 @@ class Asset {
|
||||||
|
|
||||||
String? stackParentId;
|
String? stackParentId;
|
||||||
|
|
||||||
int stackCount;
|
@ignore
|
||||||
|
int get stackChildrenCount => stackCount ?? 0;
|
||||||
|
|
||||||
|
int? stackCount;
|
||||||
|
|
||||||
/// `true` if this [Asset] is present on the device
|
/// `true` if this [Asset] is present on the device
|
||||||
@ignore
|
@ignore
|
||||||
|
@ -253,7 +256,11 @@ class Asset {
|
||||||
isFavorite != a.isFavorite ||
|
isFavorite != a.isFavorite ||
|
||||||
isArchived != a.isArchived ||
|
isArchived != a.isArchived ||
|
||||||
isTrashed != a.isTrashed ||
|
isTrashed != a.isTrashed ||
|
||||||
stackCount != a.stackCount;
|
// no local stack count or different count from remote
|
||||||
|
((stackCount == null && a.stackCount != null) ||
|
||||||
|
(stackCount != null &&
|
||||||
|
a.stackCount != null &&
|
||||||
|
stackCount != a.stackCount));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns a new [Asset] with values from this and merged & updated with [a]
|
/// Returns a new [Asset] with values from this and merged & updated with [a]
|
||||||
|
@ -269,6 +276,7 @@ class Asset {
|
||||||
width: a.width ?? width,
|
width: a.width ?? width,
|
||||||
height: a.height ?? height,
|
height: a.height ?? height,
|
||||||
exifInfo: a.exifInfo?.copyWith(id: id) ?? exifInfo,
|
exifInfo: a.exifInfo?.copyWith(id: id) ?? exifInfo,
|
||||||
|
stackCount: a.stackCount ?? stackCount,
|
||||||
);
|
);
|
||||||
} else if (isRemote) {
|
} else if (isRemote) {
|
||||||
return _copyWith(
|
return _copyWith(
|
||||||
|
@ -299,7 +307,7 @@ class Asset {
|
||||||
height: a.height,
|
height: a.height,
|
||||||
livePhotoVideoId: a.livePhotoVideoId,
|
livePhotoVideoId: a.livePhotoVideoId,
|
||||||
stackParentId: a.stackParentId,
|
stackParentId: a.stackParentId,
|
||||||
stackCount: a.stackCount,
|
stackCount: a.stackCount ?? stackCount,
|
||||||
// isFavorite + isArchived are not set by device-only assets
|
// isFavorite + isArchived are not set by device-only assets
|
||||||
isFavorite: a.isFavorite,
|
isFavorite: a.isFavorite,
|
||||||
isArchived: a.isArchived,
|
isArchived: a.isArchived,
|
||||||
|
|
Binary file not shown.
BIN
mobile/openapi/lib/model/asset_response_dto.dart
generated
BIN
mobile/openapi/lib/model/asset_response_dto.dart
generated
Binary file not shown.
|
@ -6009,6 +6009,7 @@
|
||||||
"type": "array"
|
"type": "array"
|
||||||
},
|
},
|
||||||
"stackCount": {
|
"stackCount": {
|
||||||
|
"nullable": true,
|
||||||
"type": "integer"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
"stackParentId": {
|
"stackParentId": {
|
||||||
|
|
|
@ -45,7 +45,7 @@ export class AssetResponseDto extends SanitizedAssetResponseDto {
|
||||||
stackParentId?: string | null;
|
stackParentId?: string | null;
|
||||||
stack?: AssetResponseDto[];
|
stack?: AssetResponseDto[];
|
||||||
@ApiProperty({ type: 'integer' })
|
@ApiProperty({ type: 'integer' })
|
||||||
stackCount!: number;
|
stackCount!: number | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type AssetMapOptions = {
|
export type AssetMapOptions = {
|
||||||
|
@ -102,7 +102,7 @@ export function mapAsset(entity: AssetEntity, options: AssetMapOptions = {}): As
|
||||||
checksum: entity.checksum.toString('base64'),
|
checksum: entity.checksum.toString('base64'),
|
||||||
stackParentId: entity.stackParentId,
|
stackParentId: entity.stackParentId,
|
||||||
stack: withStack ? entity.stack?.map((a) => mapAsset(a, { stripMetadata })) ?? undefined : undefined,
|
stack: withStack ? entity.stack?.map((a) => mapAsset(a, { stripMetadata })) ?? undefined : undefined,
|
||||||
stackCount: entity.stack?.length ?? 0,
|
stackCount: entity.stack?.length ?? null,
|
||||||
isExternal: entity.isExternal,
|
isExternal: entity.isExternal,
|
||||||
isOffline: entity.isOffline,
|
isOffline: entity.isOffline,
|
||||||
isReadOnly: entity.isReadOnly,
|
isReadOnly: entity.isReadOnly,
|
||||||
|
|
2
web/src/api/open-api/api.ts
generated
2
web/src/api/open-api/api.ts
generated
|
@ -771,7 +771,7 @@ export interface AssetResponseDto {
|
||||||
* @type {number}
|
* @type {number}
|
||||||
* @memberof AssetResponseDto
|
* @memberof AssetResponseDto
|
||||||
*/
|
*/
|
||||||
'stackCount': number;
|
'stackCount': number | null;
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @type {string}
|
* @type {string}
|
||||||
|
|
Loading…
Reference in a new issue