summaryrefslogtreecommitdiff
path: root/player-android/lib/models/share.dart
diff options
context:
space:
mode:
Diffstat (limited to 'player-android/lib/models/share.dart')
-rw-r--r--player-android/lib/models/share.dart48
1 files changed, 45 insertions, 3 deletions
diff --git a/player-android/lib/models/share.dart b/player-android/lib/models/share.dart
index 210ac90..d3727f9 100644
--- a/player-android/lib/models/share.dart
+++ b/player-android/lib/models/share.dart
@@ -1,5 +1,10 @@
import 'json_helpers.dart';
+/// Represents a share link created by the authenticated user.
+///
+/// The [fileName] and [mediaType] fields are only populated by the
+/// `GET /api/v1/shares` (listMyShares) endpoint; per-media share endpoints
+/// omit them. They are nullable so the model can be used for both shapes.
class Share {
final String token;
final int mediaId;
@@ -9,9 +14,46 @@ class Share {
final int? maxUses;
final int usedCount;
- const Share({required this.token, required this.mediaId, required this.createdBy, this.createdAt, this.expiresAt, this.maxUses, required this.usedCount});
+ /// Human-readable filename returned by [listMyShares]; null when not present.
+ final String? fileName;
- factory Share.fromJson(Map<String, dynamic> json) => Share(token: json['token'] as String? ?? '', mediaId: json['media_id'] as int? ?? 0, createdBy: json['created_by'] as int? ?? 0, createdAt: dateTimeFromJson(json['created_at']), expiresAt: dateTimeFromJson(json['expires_at']), maxUses: json['max_uses'] as int?, usedCount: json['used_count'] as int? ?? 0);
+ /// Media type (e.g. "video", "audio") returned by [listMyShares]; null when
+ /// not present.
+ final String? mediaType;
- Map<String, dynamic> toJson() => {'token': token, 'media_id': mediaId, 'created_by': createdBy, 'created_at': dateTimeToJson(createdAt), 'expires_at': dateTimeToJson(expiresAt), 'max_uses': maxUses, 'used_count': usedCount};
+ const Share({
+ required this.token,
+ required this.mediaId,
+ required this.createdBy,
+ this.createdAt,
+ this.expiresAt,
+ this.maxUses,
+ required this.usedCount,
+ this.fileName,
+ this.mediaType,
+ });
+
+ factory Share.fromJson(Map<String, dynamic> json) => Share(
+ token: json['token'] as String? ?? '',
+ mediaId: json['media_id'] as int? ?? 0,
+ createdBy: json['created_by'] as int? ?? 0,
+ createdAt: dateTimeFromJson(json['created_at']),
+ expiresAt: dateTimeFromJson(json['expires_at']),
+ maxUses: json['max_uses'] as int?,
+ usedCount: json['used_count'] as int? ?? 0,
+ fileName: json['file_name'] as String?,
+ mediaType: json['media_type'] as String?,
+ );
+
+ Map<String, dynamic> toJson() => {
+ 'token': token,
+ 'media_id': mediaId,
+ 'created_by': createdBy,
+ 'created_at': dateTimeToJson(createdAt),
+ 'expires_at': dateTimeToJson(expiresAt),
+ 'max_uses': maxUses,
+ 'used_count': usedCount,
+ if (fileName != null) 'file_name': fileName,
+ if (mediaType != null) 'media_type': mediaType,
+ };
}