108 lines
2.9 KiB
Dart
108 lines
2.9 KiB
Dart
import 'package:encrypt_shared_preferences/provider.dart';
|
|
import 'package:get/get.dart';
|
|
|
|
import 'package:f0ckapp/models/media_item.dart';
|
|
|
|
const List<String> mediaTypes = ["alles", "image", "video", "audio"];
|
|
const List<String> mediaModes = ["sfw", "nsfw", "untagged", "all"];
|
|
|
|
class MediaService extends GetConnect {
|
|
final EncryptedSharedPreferencesAsync storage =
|
|
EncryptedSharedPreferencesAsync.getInstance();
|
|
|
|
Future<List<MediaItem>> fetchMediaItems({
|
|
required int type,
|
|
required int mode,
|
|
required int random,
|
|
String? tag,
|
|
int? older,
|
|
}) async {
|
|
final String? token = await storage.getString('token');
|
|
final Map<String, String> headers = token != null
|
|
? {'Authorization': 'Bearer $token'}
|
|
: {};
|
|
|
|
final queryParameters = {
|
|
'type': type.toString(),
|
|
'mode': mode.toString(),
|
|
'random': random.toString(),
|
|
if (tag != null) 'tag': tag,
|
|
if (older != null) 'older': older.toString(),
|
|
};
|
|
|
|
try {
|
|
final Response<dynamic> response = await get(
|
|
'https://api.f0ck.me/items/get',
|
|
query: queryParameters,
|
|
headers: headers,
|
|
);
|
|
if (response.status.code == 200 && response.body is List) {
|
|
final data = response.body as List<dynamic>;
|
|
return data.map((json) => MediaItem.fromJson(json)).toList();
|
|
} else {
|
|
return Future.error('Fehler beim Laden der Daten: ${response.body}');
|
|
}
|
|
} catch (e) {
|
|
return Future.error('Netzwerkfehler: ${e.toString()}');
|
|
}
|
|
}
|
|
|
|
Future<List<Favorite>?> toggleFavorite(
|
|
MediaItem item,
|
|
bool isFavorite,
|
|
) async {
|
|
final String? token = await storage.getString('token');
|
|
if (token == null) return null;
|
|
|
|
final 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;
|
|
}
|
|
}
|
|
|
|
Future<MediaItem?> fetchItem(int itemId) async {
|
|
final String? token = await storage.getString('token');
|
|
final Map<String, String> headers = token != null
|
|
? {'Authorization': 'Bearer $token'}
|
|
: {};
|
|
|
|
try {
|
|
final Response<dynamic> response = await get(
|
|
'https://api.f0ck.me/item/$itemId',
|
|
headers: headers,
|
|
);
|
|
if (response.status.code == 200 && response.body is Map) {
|
|
return MediaItem.fromJson(response.body);
|
|
}
|
|
return null;
|
|
} catch (e) {
|
|
return null;
|
|
}
|
|
}
|
|
}
|