import 'dart:convert'; import 'package:drift/drift.dart'; import 'package:fast_immutable_collections/fast_immutable_collections.dart'; import '../models/query.dart'; import '../models/settings.dart'; class DurationSecondsConverter extends TypeConverter { const DurationSecondsConverter(); @override Duration fromSql(int fromDb) => Duration(seconds: fromDb); @override int toSql(Duration value) => value.inSeconds; } class UriConverter extends TypeConverter { const UriConverter(); @override Uri fromSql(String fromDb) => Uri.parse(fromDb); @override String toSql(Uri value) => value.toString(); } class ListQueryConverter extends TypeConverter { const ListQueryConverter(); @override ListQuery fromSql(String fromDb) => ListQuery.fromJson(jsonDecode(fromDb)); @override String toSql(ListQuery value) => jsonEncode(value.toJson()); } class SubsonicFeatureListConverter extends TypeConverter, String> { const SubsonicFeatureListConverter(); @override IList fromSql(String fromDb) { return IList.fromJson( jsonDecode(fromDb), (item) => SubsonicFeature.values.byName(item as String), ); } @override String toSql(IList value) { return jsonEncode(value.toJson((e) => e.toString())); } } class IListIntConverter extends TypeConverter, String> { const IListIntConverter(); @override IList fromSql(String fromDb) { return IList.fromJson( jsonDecode(fromDb), (item) => int.parse(item as String), ); } @override String toSql(IList value) { return jsonEncode(value.toJson((e) => jsonEncode(e))); } }