import 'package:encrypt_shared_preferences/provider.dart'; import 'package:get/get.dart'; import 'package:f0ckapp/models/item.dart'; import 'package:f0ckapp/models/feed.dart'; class ApiService extends GetConnect { final EncryptedSharedPreferencesAsync storage = EncryptedSharedPreferencesAsync.getInstance(); Future fetchItems({ int? older, int? newer, int type = 0, int mode = 0, int random = 0, String? tag, }) async { String? token = await storage.getString('token'); final params = { 'type': type.toString(), 'mode': mode.toString(), 'random': random.toString(), }; if (older != null) params['older'] = older.toString(); if (newer != null) params['newer'] = newer.toString(); if (tag != null) params['tag'] = tag; final Map headers = {}; if (token != null && token.isNotEmpty) { headers['Authorization'] = 'Bearer $token'; } final Response response = await get( 'https://api.f0ck.me/items_new/get', query: params, headers: headers, ); if (response.status.code == 200 && response.body is Map) { final Feed feed = Feed.fromJson(response.body as Map); feed.items.sort((a, b) => b.id.compareTo(a.id)); return feed; } else { if (Get.isSnackbarOpen == false) { Get.snackbar('Fehler', 'Fehler beim Laden der Items'); } throw Exception('Fehler beim Laden der Items'); } } Future?> toggleFavorite( MediaItem item, bool isFavorite, ) async { String? token = await storage.getString('token'); if (token == null || token.isEmpty) return null; final Map headers = { 'Authorization': 'Bearer $token', 'Content-Type': 'application/json', }; try { Response response; if (!isFavorite) { response = await put( 'https://api.f0ck.me/favorites/${item.id}', null, headers: headers, ); } else { response = await delete( 'https://api.f0ck.me/favorites/${item.id}', headers: headers, ); } if (response.status.code == 200 && response.body is List) { return (response.body as List) .map((json) => Favorite.fromJson(json)) .toList(); } else { return null; } } catch (e) { return null; } } }