import 'dart:convert'; import 'package:http/http.dart' as http; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:f0ckapp/models/mediaitem_model.dart'; import 'package:f0ckapp/models/suggestion_model.dart'; final FlutterSecureStorage storage = FlutterSecureStorage(); Future> fetchMedia({ int? older, String? type, int? mode, bool? random, String? tag, }) async { final Uri url = Uri.parse('https://api.f0ck.me/items/get').replace( queryParameters: { 'type': type ?? 'image', 'mode': (mode ?? 0).toString(), 'random': (random! ? 1 : 0).toString(), if (tag != null) 'tag': tag, if (older != null) 'older': older.toString(), }, ); final response = await http.get(url); if (response.statusCode == 200) { final List jsonList = jsonDecode(response.body); return jsonList.map((item) => MediaItem.fromJson(item)).toList(); } else { throw Exception('Fehler beim Abrufen der Medien: ${response.statusCode}'); } } Future fetchMediaDetail(int itemId) async { final Uri url = Uri.parse('https://api.f0ck.me/item/${itemId.toString()}'); final response = await http.get(url); if (response.statusCode == 200) { final Map jsonResponse = jsonDecode(response.body); return MediaItem.fromJson(jsonResponse); } else { throw Exception( 'Fehler beim Abrufen der Media-Details: ${response.statusCode}', ); } } Future> fetchSuggestions(String query) async { final Uri uri = Uri.parse( 'https://f0ck.me/api/v2/admin/tags/suggest?q=$query', ); // wip: new route in pyapi final response = await http.get(uri); if (response.statusCode == 200) { final Map decoded = jsonDecode(response.body); if (decoded['success'] == true && decoded.containsKey('suggestions')) { final List suggestionsList = decoded['suggestions']; return suggestionsList .map( (dynamic jsonItem) => Suggestion.fromJson(jsonItem as Map), ) .toList() ..sort( (Suggestion a, Suggestion b) => (b.score * b.tagged).compareTo(a.score * a.tagged), ); } else { throw Exception('Nichts gefunden.'); } } else { throw Exception( 'Fehler beim Abrufen der Vorschläge: ${response.statusCode}', ); } } Future login(String username, String password) async { final Uri url = Uri.parse('https://api.f0ck.me/login'); final response = await http.post( url, body: {'username': username, 'password': password}, ); if (response.statusCode == 200) { final dynamic data = jsonDecode(response.body); final dynamic token = data['token']; await storage.write(key: "token", value: token); return true; } else { return false; } }