65 lines
1.8 KiB
Dart
65 lines
1.8 KiB
Dart
import 'dart:convert';
|
|
|
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
|
import 'package:island/models/embed.dart';
|
|
|
|
part 'webfeed.freezed.dart';
|
|
part 'webfeed.g.dart';
|
|
|
|
@freezed
|
|
sealed class SnWebFeedConfig with _$SnWebFeedConfig {
|
|
const factory SnWebFeedConfig({@Default(false) bool scrapPage}) =
|
|
_SnWebFeedConfig;
|
|
|
|
factory SnWebFeedConfig.fromJson(Map<String, dynamic> json) =>
|
|
_$SnWebFeedConfigFromJson(json);
|
|
}
|
|
|
|
@freezed
|
|
sealed class SnWebFeed with _$SnWebFeed {
|
|
const factory SnWebFeed({
|
|
required String id,
|
|
required String url,
|
|
required String title,
|
|
String? description,
|
|
SnScrappedLink? preview,
|
|
@Default(SnWebFeedConfig()) SnWebFeedConfig config,
|
|
required String publisherId,
|
|
@Default([]) List<SnWebArticle> articles,
|
|
required DateTime createdAt,
|
|
required DateTime updatedAt,
|
|
DateTime? deletedAt,
|
|
}) = _SnWebFeed;
|
|
|
|
factory SnWebFeed.fromJson(Map<String, dynamic> json) =>
|
|
_$SnWebFeedFromJson(json);
|
|
|
|
factory SnWebFeed.fromJsonString(String jsonString) =>
|
|
SnWebFeed.fromJson(jsonDecode(jsonString) as Map<String, dynamic>);
|
|
}
|
|
|
|
@freezed
|
|
sealed class SnWebArticle with _$SnWebArticle {
|
|
const factory SnWebArticle({
|
|
required String id,
|
|
required String title,
|
|
required String url,
|
|
String? author,
|
|
Map<String, dynamic>? meta,
|
|
SnScrappedLink? preview,
|
|
SnWebFeed? feed,
|
|
String? content,
|
|
DateTime? publishedAt,
|
|
required String feedId,
|
|
required DateTime createdAt,
|
|
required DateTime updatedAt,
|
|
DateTime? deletedAt,
|
|
}) = _SnWebArticle;
|
|
|
|
factory SnWebArticle.fromJson(Map<String, dynamic> json) =>
|
|
_$SnWebArticleFromJson(json);
|
|
|
|
factory SnWebArticle.fromJsonString(String jsonString) =>
|
|
SnWebArticle.fromJson(jsonDecode(jsonString) as Map<String, dynamic>);
|
|
}
|