immich/mobile/lib/models/shared_link/shared_link.model.dart
2026-08-05 12:07:04 -07:00

46 lines
1.4 KiB
Dart

import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:openapi/api.dart';
part 'shared_link.model.freezed.dart';
enum SharedLinkSource { album, individual }
@freezed
abstract class SharedLink with _$SharedLink {
const factory SharedLink({
required String id,
required String title,
required bool allowDownload,
required bool allowUpload,
required String? thumbAssetId,
required String? description,
required String? password,
required DateTime? expiresAt,
required String key,
required bool showMetadata,
required SharedLinkSource type,
required String? slug,
}) = _SharedLink;
factory SharedLink.fromDto(SharedLinkResponseDto dto) {
final isAlbum = dto.type == SharedLinkType.ALBUM;
return SharedLink(
id: dto.id,
allowDownload: dto.allowDownload,
allowUpload: dto.allowUpload,
description: dto.description,
password: dto.password,
expiresAt: dto.expiresAt,
key: dto.key,
showMetadata: dto.showMetadata,
slug: dto.slug,
type: isAlbum ? SharedLinkSource.album : SharedLinkSource.individual,
title: isAlbum ? dto.album.orElse(null)?.albumName.toUpperCase() ?? "UNKNOWN SHARE" : "INDIVIDUAL SHARE",
thumbAssetId: isAlbum
? dto.album.orElse(null)?.albumThumbnailAssetId
: dto.assets.isNotEmpty
? dto.assets[0].id
: null,
);
}
}