Add viewed history, diagnostics, tag chips and SWF viewer

This commit is contained in:
2026-05-24 11:35:43 +03:00
parent b02c776628
commit 361d0b3910
49 changed files with 4956 additions and 446 deletions
+38 -2
View File
@@ -3,12 +3,14 @@ import 'package:dio/dio.dart';
import '../../core/http/dio_client.dart';
import '../mappers/moebooru_mapper.dart';
import '../models/post.dart';
import '../models/post_comment.dart';
import '../models/provider_health.dart';
import '../models/tag_suggestion.dart';
import '../models/top_period_filter.dart';
import 'content_provider.dart';
class MoebooruProvider implements ContentProvider, TagSuggestionProvider {
class MoebooruProvider
implements ContentProvider, TagSuggestionProvider, CommentProvider {
MoebooruProvider({
required this.id,
required this.name,
@@ -38,7 +40,7 @@ class MoebooruProvider implements ContentProvider, TagSuggestionProvider {
final response = await _dio.get<dynamic>(
'/post.json',
queryParameters: {
'page': page <= 0 ? 1 : page,
'page': page + 1,
'limit': limit.clamp(1, 100),
'tags': [
...tags,
@@ -127,6 +129,40 @@ class MoebooruProvider implements ContentProvider, TagSuggestionProvider {
.toList();
}
@override
Future<List<PostComment>> getComments(String postId) async {
final response = await _dio.get<dynamic>(
'/comment.json',
queryParameters: {
'post_id': postId,
'limit': 50,
..._queryParameters,
},
);
final items = response.data is List ? response.data as List : const [];
return items
.whereType<Map>()
.map((item) {
final json = Map<String, dynamic>.from(item);
return PostComment(
id: (json['id'] ?? '').toString(),
postId: (json['post_id'] ?? postId).toString(),
providerId: id,
authorName:
(json['creator'] ?? json['author'] ?? json['user'] ?? 'user')
.toString(),
body: (json['body'] ?? json['comment'] ?? json['text'] ?? '')
.toString(),
createdAt: DateTime.tryParse(
(json['created_at'] ?? json['created_on'] ?? '').toString(),
) ??
DateTime.fromMillisecondsSinceEpoch(0),
);
})
.where((comment) => comment.body.trim().isNotEmpty)
.toList();
}
List<String> _topTags(TopPeriodFilter period) {
return switch (period) {
TopPeriodFilter.none => const [],