summaryrefslogtreecommitdiff
path: root/player-android/lib/models
diff options
context:
space:
mode:
Diffstat (limited to 'player-android/lib/models')
-rw-r--r--player-android/lib/models/json_helpers.dart4
-rw-r--r--player-android/lib/models/media.dart16
-rw-r--r--player-android/lib/models/media_set.dart16
-rw-r--r--player-android/lib/models/models.dart9
-rw-r--r--player-android/lib/models/note.dart16
-rw-r--r--player-android/lib/models/playback_hint.dart14
-rw-r--r--player-android/lib/models/podcast_episode.dart17
-rw-r--r--player-android/lib/models/podcast_feed.dart14
-rw-r--r--player-android/lib/models/share.dart17
-rw-r--r--player-android/lib/models/tag.dart11
-rw-r--r--player-android/lib/models/user.dart14
11 files changed, 148 insertions, 0 deletions
diff --git a/player-android/lib/models/json_helpers.dart b/player-android/lib/models/json_helpers.dart
new file mode 100644
index 0000000..c966476
--- /dev/null
+++ b/player-android/lib/models/json_helpers.dart
@@ -0,0 +1,4 @@
+DateTime? dateTimeFromJson(Object? value) =>
+ value is String && value.isNotEmpty ? DateTime.parse(value) : null;
+
+String? dateTimeToJson(DateTime? value) => value?.toIso8601String();
diff --git a/player-android/lib/models/media.dart b/player-android/lib/models/media.dart
new file mode 100644
index 0000000..7330bca
--- /dev/null
+++ b/player-android/lib/models/media.dart
@@ -0,0 +1,16 @@
+import 'json_helpers.dart';
+
+class Media {
+ final int id, setId, bitrate, fileSizeBytes, width, height, playCount;
+ final String relPath, fileName, absPath, type, codec, resolution, thumbnailPath;
+ final double duration;
+ final bool favorite;
+ final List<String> tags;
+ final DateTime? deletedAt, createdAt;
+
+ const Media({required this.id, required this.setId, required this.relPath, required this.fileName, required this.absPath, required this.type, required this.duration, required this.codec, required this.resolution, required this.bitrate, required this.fileSizeBytes, required this.width, required this.height, required this.thumbnailPath, required this.playCount, this.favorite = false, this.tags = const [], this.deletedAt, this.createdAt});
+
+ factory Media.fromJson(Map<String, dynamic> json) => Media(id: json['id'] as int? ?? 0, setId: json['set_id'] as int? ?? 0, relPath: json['rel_path'] as String? ?? '', fileName: json['file_name'] as String? ?? '', absPath: json['abs_path'] as String? ?? '', type: json['type'] as String? ?? '', duration: (json['duration'] as num?)?.toDouble() ?? 0, codec: json['codec'] as String? ?? '', resolution: json['resolution'] as String? ?? '', bitrate: json['bitrate'] as int? ?? 0, fileSizeBytes: json['file_size_bytes'] as int? ?? 0, width: json['width'] as int? ?? 0, height: json['height'] as int? ?? 0, thumbnailPath: json['thumbnail_path'] as String? ?? '', playCount: json['play_count'] as int? ?? 0, favorite: json['favorite'] as bool? ?? false, tags: (json['tags'] as List<dynamic>? ?? const []).cast<String>(), deletedAt: dateTimeFromJson(json['deleted_at']), createdAt: dateTimeFromJson(json['created_at']));
+
+ Map<String, dynamic> toJson() => {'id': id, 'set_id': setId, 'rel_path': relPath, 'file_name': fileName, 'abs_path': absPath, 'type': type, 'duration': duration, 'codec': codec, 'resolution': resolution, 'bitrate': bitrate, 'file_size_bytes': fileSizeBytes, 'width': width, 'height': height, 'thumbnail_path': thumbnailPath, 'play_count': playCount, 'favorite': favorite, 'tags': tags, 'deleted_at': dateTimeToJson(deletedAt), 'created_at': dateTimeToJson(createdAt)};
+}
diff --git a/player-android/lib/models/media_set.dart b/player-android/lib/models/media_set.dart
new file mode 100644
index 0000000..1e809cb
--- /dev/null
+++ b/player-android/lib/models/media_set.dart
@@ -0,0 +1,16 @@
+import 'json_helpers.dart';
+
+class MediaSet {
+ final int id;
+ final String name;
+ final String rootPath;
+ final String coverThumbnailPath;
+ final bool isPodcast;
+ final DateTime? createdAt;
+
+ const MediaSet({required this.id, required this.name, required this.rootPath, required this.coverThumbnailPath, required this.isPodcast, this.createdAt});
+
+ factory MediaSet.fromJson(Map<String, dynamic> json) => MediaSet(id: json['id'] as int? ?? 0, name: json['name'] as String? ?? '', rootPath: json['root_path'] as String? ?? '', coverThumbnailPath: json['cover_thumbnail_path'] as String? ?? '', isPodcast: json['is_podcast'] as bool? ?? false, createdAt: dateTimeFromJson(json['created_at']));
+
+ Map<String, dynamic> toJson() => {'id': id, 'name': name, 'root_path': rootPath, 'cover_thumbnail_path': coverThumbnailPath, 'is_podcast': isPodcast, 'created_at': dateTimeToJson(createdAt)};
+}
diff --git a/player-android/lib/models/models.dart b/player-android/lib/models/models.dart
new file mode 100644
index 0000000..2b11901
--- /dev/null
+++ b/player-android/lib/models/models.dart
@@ -0,0 +1,9 @@
+export 'media.dart';
+export 'media_set.dart';
+export 'note.dart';
+export 'playback_hint.dart';
+export 'podcast_episode.dart';
+export 'podcast_feed.dart';
+export 'share.dart';
+export 'tag.dart';
+export 'user.dart';
diff --git a/player-android/lib/models/note.dart b/player-android/lib/models/note.dart
new file mode 100644
index 0000000..381008d
--- /dev/null
+++ b/player-android/lib/models/note.dart
@@ -0,0 +1,16 @@
+import 'json_helpers.dart';
+
+class Note {
+ final int id;
+ final int mediaId;
+ final int userId;
+ final String content;
+ final DateTime? createdAt;
+ final DateTime? updatedAt;
+
+ const Note({required this.id, required this.mediaId, required this.userId, required this.content, this.createdAt, this.updatedAt});
+
+ factory Note.fromJson(Map<String, dynamic> json) => Note(id: json['id'] as int? ?? 0, mediaId: json['media_id'] as int? ?? 0, userId: json['user_id'] as int? ?? 0, content: json['content'] as String? ?? '', createdAt: dateTimeFromJson(json['created_at']), updatedAt: dateTimeFromJson(json['updated_at']));
+
+ Map<String, dynamic> toJson() => {'id': id, 'media_id': mediaId, 'user_id': userId, 'content': content, 'created_at': dateTimeToJson(createdAt), 'updated_at': dateTimeToJson(updatedAt)};
+}
diff --git a/player-android/lib/models/playback_hint.dart b/player-android/lib/models/playback_hint.dart
new file mode 100644
index 0000000..076fd4d
--- /dev/null
+++ b/player-android/lib/models/playback_hint.dart
@@ -0,0 +1,14 @@
+import 'json_helpers.dart';
+
+class PlaybackHint {
+ final int mediaId;
+ final double positionSeconds;
+ final bool finished;
+ final DateTime? updatedAt;
+
+ const PlaybackHint({required this.mediaId, required this.positionSeconds, required this.finished, this.updatedAt});
+
+ factory PlaybackHint.fromJson(Map<String, dynamic> json) => PlaybackHint(mediaId: json['media_id'] as int? ?? 0, positionSeconds: (json['position_seconds'] as num?)?.toDouble() ?? 0, finished: json['finished'] as bool? ?? false, updatedAt: dateTimeFromJson(json['updated_at']));
+
+ Map<String, dynamic> toJson() => {'media_id': mediaId, 'position_seconds': positionSeconds, 'finished': finished, 'updated_at': dateTimeToJson(updatedAt)};
+}
diff --git a/player-android/lib/models/podcast_episode.dart b/player-android/lib/models/podcast_episode.dart
new file mode 100644
index 0000000..5720e5f
--- /dev/null
+++ b/player-android/lib/models/podcast_episode.dart
@@ -0,0 +1,17 @@
+import 'json_helpers.dart';
+
+class PodcastEpisode {
+ final int id, feedId;
+ final int? mediaId, fileSize;
+ final String guid, title, description, episodeUrl, fileName;
+ final double? durationSeconds;
+ final bool isDownloaded, isCompleted;
+ final double positionSeconds;
+ final DateTime? publishedAt, createdAt;
+
+ const PodcastEpisode({required this.id, required this.feedId, this.mediaId, required this.guid, required this.title, required this.description, this.publishedAt, required this.episodeUrl, this.durationSeconds, this.fileSize, required this.fileName, required this.isDownloaded, this.isCompleted = false, this.positionSeconds = 0, this.createdAt});
+
+ factory PodcastEpisode.fromJson(Map<String, dynamic> json) => PodcastEpisode(id: json['id'] as int? ?? 0, feedId: json['feed_id'] as int? ?? 0, mediaId: json['media_id'] as int?, guid: json['guid'] as String? ?? '', title: json['title'] as String? ?? '', description: json['description'] as String? ?? '', publishedAt: dateTimeFromJson(json['published_at']), episodeUrl: json['episode_url'] as String? ?? '', durationSeconds: (json['duration_seconds'] as num?)?.toDouble(), fileSize: json['file_size'] as int?, fileName: json['file_name'] as String? ?? '', isDownloaded: json['is_downloaded'] as bool? ?? false, isCompleted: json['is_completed'] as bool? ?? false, positionSeconds: (json['position_seconds'] as num?)?.toDouble() ?? 0, createdAt: dateTimeFromJson(json['created_at']));
+
+ Map<String, dynamic> toJson() => {'id': id, 'feed_id': feedId, 'media_id': mediaId, 'guid': guid, 'title': title, 'description': description, 'published_at': dateTimeToJson(publishedAt), 'episode_url': episodeUrl, 'duration_seconds': durationSeconds, 'file_size': fileSize, 'file_name': fileName, 'is_downloaded': isDownloaded, 'is_completed': isCompleted, 'position_seconds': positionSeconds, 'created_at': dateTimeToJson(createdAt)};
+}
diff --git a/player-android/lib/models/podcast_feed.dart b/player-android/lib/models/podcast_feed.dart
new file mode 100644
index 0000000..641b6db
--- /dev/null
+++ b/player-android/lib/models/podcast_feed.dart
@@ -0,0 +1,14 @@
+import 'json_helpers.dart';
+
+class PodcastFeed {
+ final int id, setId, checkIntervalMinutes, consecutiveFailures;
+ final String feedUrl, title, description, imageUrl, lastETag;
+ final bool autoDownload;
+ final DateTime? lastCheckedAt, nextCheckAt, createdAt;
+
+ const PodcastFeed({required this.id, required this.setId, required this.feedUrl, required this.title, required this.description, required this.imageUrl, this.lastCheckedAt, required this.lastETag, required this.checkIntervalMinutes, required this.autoDownload, required this.consecutiveFailures, this.nextCheckAt, this.createdAt});
+
+ factory PodcastFeed.fromJson(Map<String, dynamic> json) => PodcastFeed(id: json['id'] as int? ?? 0, setId: json['set_id'] as int? ?? 0, feedUrl: json['feed_url'] as String? ?? '', title: json['title'] as String? ?? '', description: json['description'] as String? ?? '', imageUrl: json['image_url'] as String? ?? '', lastCheckedAt: dateTimeFromJson(json['last_checked_at']), lastETag: json['last_etag'] as String? ?? '', checkIntervalMinutes: json['check_interval_minutes'] as int? ?? 0, autoDownload: json['auto_download'] as bool? ?? false, consecutiveFailures: json['consecutive_failures'] as int? ?? 0, nextCheckAt: dateTimeFromJson(json['next_check_at']), createdAt: dateTimeFromJson(json['created_at']));
+
+ Map<String, dynamic> toJson() => {'id': id, 'set_id': setId, 'feed_url': feedUrl, 'title': title, 'description': description, 'image_url': imageUrl, 'last_checked_at': dateTimeToJson(lastCheckedAt), 'last_etag': lastETag, 'check_interval_minutes': checkIntervalMinutes, 'auto_download': autoDownload, 'consecutive_failures': consecutiveFailures, 'next_check_at': dateTimeToJson(nextCheckAt), 'created_at': dateTimeToJson(createdAt)};
+}
diff --git a/player-android/lib/models/share.dart b/player-android/lib/models/share.dart
new file mode 100644
index 0000000..210ac90
--- /dev/null
+++ b/player-android/lib/models/share.dart
@@ -0,0 +1,17 @@
+import 'json_helpers.dart';
+
+class Share {
+ final String token;
+ final int mediaId;
+ final int createdBy;
+ final DateTime? createdAt;
+ final DateTime? expiresAt;
+ 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});
+
+ 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);
+
+ 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};
+}
diff --git a/player-android/lib/models/tag.dart b/player-android/lib/models/tag.dart
new file mode 100644
index 0000000..ed03406
--- /dev/null
+++ b/player-android/lib/models/tag.dart
@@ -0,0 +1,11 @@
+class Tag {
+ final int id;
+ final String name;
+
+ const Tag({required this.id, required this.name});
+
+ factory Tag.fromJson(Map<String, dynamic> json) =>
+ Tag(id: json['id'] as int? ?? 0, name: json['name'] as String? ?? '');
+
+ Map<String, dynamic> toJson() => {'id': id, 'name': name};
+}
diff --git a/player-android/lib/models/user.dart b/player-android/lib/models/user.dart
new file mode 100644
index 0000000..a75832f
--- /dev/null
+++ b/player-android/lib/models/user.dart
@@ -0,0 +1,14 @@
+import 'json_helpers.dart';
+
+class User {
+ final int id;
+ final String username;
+ final bool isAdmin;
+ final DateTime? createdAt;
+
+ const User({required this.id, required this.username, required this.isAdmin, this.createdAt});
+
+ factory User.fromJson(Map<String, dynamic> json) => User(id: json['id'] as int? ?? 0, username: json['username'] as String? ?? '', isAdmin: json['is_admin'] as bool? ?? false, createdAt: dateTimeFromJson(json['created_at']));
+
+ Map<String, dynamic> toJson() => {'id': id, 'username': username, 'is_admin': isAdmin, 'created_at': dateTimeToJson(createdAt)};
+}