Files
PinePods-nix/PinePods-0.8.2/mobile/lib/entities/user_stats.dart
2026-03-03 10:57:43 -05:00

91 lines
2.5 KiB
Dart

class UserStats {
final String userCreated;
final int podcastsPlayed;
final int timeListened;
final int podcastsAdded;
final int episodesSaved;
final int episodesDownloaded;
final String gpodderUrl;
final String podSyncType;
UserStats({
required this.userCreated,
required this.podcastsPlayed,
required this.timeListened,
required this.podcastsAdded,
required this.episodesSaved,
required this.episodesDownloaded,
required this.gpodderUrl,
required this.podSyncType,
});
factory UserStats.fromJson(Map<String, dynamic> json) {
return UserStats(
userCreated: json['UserCreated'] ?? '',
podcastsPlayed: json['PodcastsPlayed'] ?? 0,
timeListened: json['TimeListened'] ?? 0,
podcastsAdded: json['PodcastsAdded'] ?? 0,
episodesSaved: json['EpisodesSaved'] ?? 0,
episodesDownloaded: json['EpisodesDownloaded'] ?? 0,
gpodderUrl: json['GpodderUrl'] ?? '',
podSyncType: json['Pod_Sync_Type'] ?? '',
);
}
Map<String, dynamic> toJson() {
return {
'UserCreated': userCreated,
'PodcastsPlayed': podcastsPlayed,
'TimeListened': timeListened,
'PodcastsAdded': podcastsAdded,
'EpisodesSaved': episodesSaved,
'EpisodesDownloaded': episodesDownloaded,
'GpodderUrl': gpodderUrl,
'Pod_Sync_Type': podSyncType,
};
}
// Format time listened from minutes to human readable
String get formattedTimeListened {
if (timeListened <= 0) return '0 minutes';
final hours = timeListened ~/ 60;
final minutes = timeListened % 60;
if (hours == 0) {
return '$minutes minute${minutes != 1 ? 's' : ''}';
} else if (minutes == 0) {
return '$hours hour${hours != 1 ? 's' : ''}';
} else {
return '$hours hour${hours != 1 ? 's' : ''} $minutes minute${minutes != 1 ? 's' : ''}';
}
}
// Format user created date
String get formattedUserCreated {
try {
final date = DateTime.parse(userCreated);
return '${date.day}/${date.month}/${date.year}';
} catch (e) {
return userCreated;
}
}
// Get sync status description
String get syncStatusDescription {
switch (podSyncType.toLowerCase()) {
case 'none':
return 'Not Syncing';
case 'gpodder':
if (gpodderUrl == 'http://localhost:8042') {
return 'Internal gpodder';
} else {
return 'External gpodder';
}
case 'nextcloud':
return 'Nextcloud';
default:
return 'Unknown sync type';
}
}
}