175 lines
4.6 KiB
Dart
175 lines
4.6 KiB
Dart
import 'package:flutter/foundation.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
import '../services/xtream_api.dart';
|
|
import '../models/xtream_models.dart';
|
|
|
|
enum ContentType { live, movies, series }
|
|
|
|
class IPTVProvider extends ChangeNotifier {
|
|
final XtreamApiService _api = XtreamApiService();
|
|
|
|
bool _isLoading = false;
|
|
String? _error;
|
|
XtreamUserInfo? _userInfo;
|
|
|
|
List<XtreamCategory> _liveCategories = [];
|
|
List<XtreamCategory> _vodCategories = [];
|
|
List<XtreamCategory> _seriesCategories = [];
|
|
|
|
List<XtreamStream> _liveStreams = [];
|
|
List<XtreamStream> _vodStreams = [];
|
|
List<XtreamSeries> _seriesList = [];
|
|
List<XtreamEpisode> _seriesEpisodes = [];
|
|
|
|
String _selectedLiveCategory = '';
|
|
String _selectedVodCategory = '';
|
|
XtreamSeries? _selectedSeries;
|
|
|
|
bool get isLoading => _isLoading;
|
|
String? get error => _error;
|
|
XtreamUserInfo? get userInfo => _userInfo;
|
|
XtreamApiService get api => _api;
|
|
|
|
List<XtreamCategory> get liveCategories => _liveCategories;
|
|
List<XtreamCategory> get vodCategories => _vodCategories;
|
|
List<XtreamCategory> get seriesCategories => _seriesCategories;
|
|
|
|
List<XtreamStream> get liveStreams => _liveStreams;
|
|
List<XtreamStream> get vodStreams => _vodStreams;
|
|
List<XtreamSeries> get seriesList => _seriesList;
|
|
List<XtreamEpisode> get seriesEpisodes => _seriesEpisodes;
|
|
|
|
String get selectedLiveCategory => _selectedLiveCategory;
|
|
String get selectedVodCategory => _selectedVodCategory;
|
|
XtreamSeries? get selectedSeries => _selectedSeries;
|
|
|
|
Future<void> login(String server, String username, String password) async {
|
|
_isLoading = true;
|
|
_error = null;
|
|
notifyListeners();
|
|
|
|
try {
|
|
_api.setCredentials(server, username, password);
|
|
_userInfo = await _api.getUserInfo();
|
|
|
|
await _loadCategories();
|
|
await _saveCredentials(server, username, password);
|
|
} catch (e) {
|
|
_error = e.toString();
|
|
}
|
|
|
|
_isLoading = false;
|
|
notifyListeners();
|
|
}
|
|
|
|
Future<void> _loadCategories() async {
|
|
try {
|
|
_liveCategories = await _api.getLiveCategories();
|
|
_vodCategories = await _api.getVodCategories();
|
|
_seriesCategories = await _api.getSeriesCategories();
|
|
} catch (e) {
|
|
_error = e.toString();
|
|
}
|
|
}
|
|
|
|
Future<void> loadLiveStreams([String categoryId = '']) async {
|
|
_isLoading = true;
|
|
notifyListeners();
|
|
|
|
try {
|
|
_liveStreams = await _api.getLiveStreams(categoryId);
|
|
_selectedLiveCategory = categoryId;
|
|
} catch (e) {
|
|
_error = e.toString();
|
|
}
|
|
|
|
_isLoading = false;
|
|
notifyListeners();
|
|
}
|
|
|
|
Future<void> loadVodStreams([String categoryId = '']) async {
|
|
_isLoading = true;
|
|
notifyListeners();
|
|
|
|
try {
|
|
_vodStreams = await _api.getVodStreams(categoryId);
|
|
_selectedVodCategory = categoryId;
|
|
} catch (e) {
|
|
_error = e.toString();
|
|
}
|
|
|
|
_isLoading = false;
|
|
notifyListeners();
|
|
}
|
|
|
|
Future<void> loadSeries() async {
|
|
_isLoading = true;
|
|
notifyListeners();
|
|
|
|
try {
|
|
_seriesList = await _api.getSeries();
|
|
} catch (e) {
|
|
_error = e.toString();
|
|
}
|
|
|
|
_isLoading = false;
|
|
notifyListeners();
|
|
}
|
|
|
|
Future<void> loadSeriesEpisodes(XtreamSeries series) async {
|
|
_isLoading = true;
|
|
notifyListeners();
|
|
|
|
try {
|
|
_selectedSeries = series;
|
|
_seriesEpisodes = await _api.getSeriesEpisodes(series.seriesId);
|
|
} catch (e) {
|
|
_error = e.toString();
|
|
}
|
|
|
|
_isLoading = false;
|
|
notifyListeners();
|
|
}
|
|
|
|
void clearError() {
|
|
_error = null;
|
|
notifyListeners();
|
|
}
|
|
|
|
Future<void> _saveCredentials(String server, String username, String password) async {
|
|
final prefs = await SharedPreferences.getInstance();
|
|
await prefs.setString('server', server);
|
|
await prefs.setString('username', username);
|
|
await prefs.setString('password', password);
|
|
}
|
|
|
|
Future<bool> loadSavedCredentials() async {
|
|
final prefs = await SharedPreferences.getInstance();
|
|
final server = prefs.getString('server');
|
|
final username = prefs.getString('username');
|
|
final password = prefs.getString('password');
|
|
|
|
if (server != null && username != null && password != null) {
|
|
await login(server, username, password);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
Future<void> logout() async {
|
|
final prefs = await SharedPreferences.getInstance();
|
|
await prefs.remove('server');
|
|
await prefs.remove('username');
|
|
await prefs.remove('password');
|
|
|
|
_userInfo = null;
|
|
_liveCategories = [];
|
|
_vodCategories = [];
|
|
_seriesCategories = [];
|
|
_liveStreams = [];
|
|
_vodStreams = [];
|
|
_seriesList = [];
|
|
notifyListeners();
|
|
}
|
|
}
|