import 'dart:convert'; import 'package:http/http.dart' as http; import '../settings.dart' as settings; import '../../global.dart' as global; class TimelinePartModel { late List threads; late int minId; late int maxId; } enum Visibility { public, unlisted, private, direct } class PostModel { late String id; late String uri; late String content; late Visibility visibility; late bool sensitive; late String spoilerText; late bool favourited; late bool reblogged; PostModel.fromJson(Map json) { id = json["id"] as String; uri = json["uri"] as String; content = json["content"] as String; visibility = Visibility.values.firstWhere( // ignore: prefer_interpolation_to_compose_strings (element) => element.toString() == "Visibility." + json["visibility"]); sensitive = json["sensitive"] as bool; spoilerText = json["spoiler_text"] as String; favourited = json["favourited"] as bool; reblogged = json["reblogged"] as bool; } Future getThread() async { final token = await settings.loadToken(); final baseUrl = await settings.loadInstanceUrl(); Map headers = {"Authorization": "Bearer $token"}; headers.addAll(global.defaultHeaders); final url = Uri( scheme: "https", host: baseUrl, path: "/api/v1/statuses/$id/context", ); final response = await http.get(url, headers: headers); if (response.statusCode != 200) { return ThreadModel([this]); } final json = jsonDecode(response.body); final List ancestorsJson = json["ancestors"]; List posts = [this]; int i = 0; while (i < ancestorsJson.length) { posts.add(PostModel.fromJson(ancestorsJson[i])); i++; } return ThreadModel(posts); } } class ThreadModel { late List posts; ThreadModel(List allPosts) { posts = allPosts; } } Future getTimelineFromServer() async { final token = await settings.loadToken(); final baseUrl = await settings.loadInstanceUrl(); final url = Uri( scheme: "https", host: baseUrl, path: "/api/v1/timelines/home", queryParameters: {"limit": 1.toString()}, ); Map headers = {"Authorization": "Bearer $token"}; headers.addAll(global.defaultHeaders); final response = await http.get(url, headers: headers); final List json = jsonDecode(response.body); List ids = []; ids.add(json[0]["id"]); final post = PostModel.fromJson(json[0]); return await post.getThread(); }