90 lines
2.4 KiB
Dart
90 lines
2.4 KiB
Dart
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<Feed> 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 = <String, String>{
|
|
'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<String, String> headers = <String, String>{};
|
|
if (token != null && token.isNotEmpty) {
|
|
headers['Authorization'] = 'Bearer $token';
|
|
}
|
|
|
|
final Response<dynamic> response = await get(
|
|
'https://api.f0ck.me/items_new/get',
|
|
query: params,
|
|
headers: headers,
|
|
);
|
|
|
|
if (response.status.code == 200 && response.body is Map<String, dynamic>) {
|
|
final Feed feed = Feed.fromJson(response.body as Map<String, dynamic>);
|
|
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<List<Favorite>?> toggleFavorite(
|
|
MediaItem item,
|
|
bool isFavorite,
|
|
) async {
|
|
String? token = await storage.getString('token');
|
|
if (token == null || token.isEmpty) return null;
|
|
|
|
final Map<String, String> 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;
|
|
}
|
|
}
|
|
}
|