diff --git a/lib/models/xtream_models.dart b/lib/models/xtream_models.dart index fa14308..bef4211 100644 --- a/lib/models/xtream_models.dart +++ b/lib/models/xtream_models.dart @@ -7,11 +7,18 @@ class XtreamCategory { factory XtreamCategory.fromJson(Map json) { return XtreamCategory( id: json['category_id']?.toString() ?? '', - name: json['category_name'] ?? '', + name: json['category_name']?.toString() ?? '', ); } } +int _parseInt(dynamic value) { + if (value == null) return 0; + if (value is int) return value; + if (value is String) return int.tryParse(value) ?? 0; + return 0; +} + class XtreamStream { final int streamId; final String name; @@ -33,12 +40,12 @@ class XtreamStream { factory XtreamStream.fromJson(Map json) { return XtreamStream( - streamId: json['stream_id'] ?? 0, - name: json['name'] ?? '', - streamIcon: json['stream_icon'], - plot: json['plot'], - rating: json['rating'], - containerExtension: json['container_extension'], + streamId: _parseInt(json['stream_id']), + name: json['name']?.toString() ?? '', + streamIcon: json['stream_icon']?.toString(), + plot: json['plot']?.toString(), + rating: json['rating']?.toString(), + containerExtension: json['container_extension']?.toString(), url: null, ); } @@ -75,11 +82,11 @@ class XtreamSeries { factory XtreamSeries.fromJson(Map json) { return XtreamSeries( - seriesId: json['series_id'] ?? 0, - name: json['name'] ?? '', - cover: json['cover'], - plot: json['plot'], - rating: json['rating'], + seriesId: _parseInt(json['series_id']), + name: json['name']?.toString() ?? '', + cover: json['cover']?.toString(), + plot: json['plot']?.toString(), + rating: json['rating']?.toString(), seasons: [], ); } @@ -113,12 +120,12 @@ class XtreamEpisode { factory XtreamEpisode.fromJson(Map json) { return XtreamEpisode( - episodeId: json['id'] ?? 0, - seasonNumber: json['season'] ?? 0, - episodeNumber: json['episode_num'] ?? 0, - title: json['title'] ?? '', - info: json['info'], - containerExtension: json['container_extension'], + episodeId: _parseInt(json['id']), + seasonNumber: _parseInt(json['season']), + episodeNumber: _parseInt(json['episode_num']), + title: json['title']?.toString() ?? '', + info: json['info']?.toString(), + containerExtension: json['container_extension']?.toString(), url: null, ); } @@ -146,13 +153,13 @@ class XtreamUserInfo { factory XtreamUserInfo.fromJson(Map json) { final userInfo = json['user_info'] ?? json; return XtreamUserInfo( - username: userInfo['username'] ?? '', - password: userInfo['password'] ?? '', - maxConnections: int.tryParse(userInfo['max_connections']?.toString() ?? '1') ?? 1, - activeCons: int.tryParse(userInfo['active_cons']?.toString() ?? '0') ?? 0, - isTrial: userInfo['is_trial'] == '1', - expDate: userInfo['exp_date'], - status: userInfo['status'] ?? '', + username: userInfo['username']?.toString() ?? '', + password: userInfo['password']?.toString() ?? '', + maxConnections: _parseInt(userInfo['max_connections']), + activeCons: _parseInt(userInfo['active_cons']), + isTrial: userInfo['is_trial']?.toString() == '1', + expDate: userInfo['exp_date'] != null ? _parseInt(userInfo['exp_date']) : null, + status: userInfo['status']?.toString() ?? '', ); } }