Initial commit: monorepo Match Live TV.
Rails API, app Flutter, infrastruttura Docker/MediaMTX, sito marketing e documentazione di deploy. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
96
mobile/lib/shared/models/team.dart
Normal file
96
mobile/lib/shared/models/team.dart
Normal file
@@ -0,0 +1,96 @@
|
||||
class Team {
|
||||
const Team({
|
||||
required this.id,
|
||||
required this.name,
|
||||
required this.sport,
|
||||
this.logoUrl,
|
||||
this.youtubeConnected = false,
|
||||
this.planSlug = 'free',
|
||||
this.planName = 'Free',
|
||||
this.premiumActive = false,
|
||||
this.premiumFull = false,
|
||||
this.billingUrl,
|
||||
this.staffManageUrl,
|
||||
this.maxStaff = 2,
|
||||
this.staffUsed = 0,
|
||||
this.maxStaffTransmission,
|
||||
this.maxStaffRegia,
|
||||
this.staffTransmissionUsed = 0,
|
||||
this.staffRegiaUsed = 0,
|
||||
this.concurrentStreamsUsed = 0,
|
||||
this.concurrentStreamsLimit,
|
||||
this.recordingsEnabled = false,
|
||||
this.phoneDownloadEnabled = false,
|
||||
this.youtubeEnabled = false,
|
||||
this.youtubeMode,
|
||||
});
|
||||
|
||||
final String id;
|
||||
final String name;
|
||||
final String sport;
|
||||
final String? logoUrl;
|
||||
final bool youtubeConnected;
|
||||
final String planSlug;
|
||||
final String planName;
|
||||
final bool premiumActive;
|
||||
final bool premiumFull;
|
||||
final String? billingUrl;
|
||||
final String? staffManageUrl;
|
||||
final int maxStaff;
|
||||
final int staffUsed;
|
||||
final int? maxStaffTransmission;
|
||||
final int? maxStaffRegia;
|
||||
final int staffTransmissionUsed;
|
||||
final int staffRegiaUsed;
|
||||
final int concurrentStreamsUsed;
|
||||
final int? concurrentStreamsLimit;
|
||||
final bool recordingsEnabled;
|
||||
final bool phoneDownloadEnabled;
|
||||
final bool youtubeEnabled;
|
||||
final String? youtubeMode;
|
||||
|
||||
bool get canUseYoutube => premiumFull && youtubeEnabled;
|
||||
bool get canUseRecordings => recordingsEnabled;
|
||||
bool get canDownloadOnPhone => phoneDownloadEnabled;
|
||||
|
||||
String get staffLimitLabel {
|
||||
if (maxStaffTransmission == null && maxStaffRegia == null) {
|
||||
return 'illimitato';
|
||||
}
|
||||
final tx = maxStaffTransmission == null
|
||||
? 'tx ∞'
|
||||
: 'tx $staffTransmissionUsed/$maxStaffTransmission';
|
||||
final rg = maxStaffRegia == null
|
||||
? 'rg ∞'
|
||||
: 'rg $staffRegiaUsed/$maxStaffRegia';
|
||||
return '$tx · $rg';
|
||||
}
|
||||
|
||||
factory Team.fromJson(Map<String, dynamic> json) {
|
||||
return Team(
|
||||
id: json['id'] as String,
|
||||
name: json['name'] as String,
|
||||
sport: json['sport'] as String? ?? 'volleyball',
|
||||
logoUrl: json['logo_url'] as String?,
|
||||
youtubeConnected: json['youtube_connected'] as bool? ?? false,
|
||||
planSlug: json['plan_slug'] as String? ?? 'free',
|
||||
planName: json['plan_name'] as String? ?? 'Free',
|
||||
premiumActive: json['premium_active'] as bool? ?? false,
|
||||
premiumFull: json['premium_full'] as bool? ?? false,
|
||||
billingUrl: json['billing_url'] as String?,
|
||||
staffManageUrl: json['staff_manage_url'] as String?,
|
||||
maxStaff: json['max_staff'] as int? ?? 2,
|
||||
staffUsed: json['staff_used'] as int? ?? 0,
|
||||
maxStaffTransmission: json['max_staff_transmission'] as int?,
|
||||
maxStaffRegia: json['max_staff_regia'] as int?,
|
||||
staffTransmissionUsed: json['staff_transmission_used'] as int? ?? 0,
|
||||
staffRegiaUsed: json['staff_regia_used'] as int? ?? 0,
|
||||
concurrentStreamsUsed: json['concurrent_streams_used'] as int? ?? 0,
|
||||
concurrentStreamsLimit: json['concurrent_streams_limit'] as int?,
|
||||
recordingsEnabled: json['recordings_enabled'] as bool? ?? false,
|
||||
phoneDownloadEnabled: json['phone_download_enabled'] as bool? ?? false,
|
||||
youtubeEnabled: json['youtube_enabled'] as bool? ?? false,
|
||||
youtubeMode: json['youtube_mode'] as String?,
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user