v1.3.3+59
All checks were successful
Flutter Schmutter / build (push) Successful in 3m47s

This commit is contained in:
2025-06-17 19:03:40 +02:00
parent 089fe1f8df
commit ee2db04a36
19 changed files with 667 additions and 136 deletions

View File

@ -1,3 +1,4 @@
import 'package:encrypt_shared_preferences/provider.dart';
import 'package:get/get.dart';
import 'package:f0ckapp/models/media_item.dart';
@ -6,6 +7,9 @@ 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,
@ -13,6 +17,11 @@ class MediaService extends GetConnect {
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(),
@ -22,9 +31,10 @@ class MediaService extends GetConnect {
};
try {
final response = await get(
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>;
@ -36,4 +46,62 @@ class MediaService extends GetConnect {
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;
}
}
}