spotube/lib/extensions/page.dart
Kingkor Roy Tirtho bdd70984e6 fix(playbutton_card): play and add to queue needs 2 clicks work
feat: add disk caching to liked tracks and categories query
2023-03-02 13:20:07 +06:00

62 lines
1.4 KiB
Dart

import 'package:spotify/spotify.dart';
extension CursorPageJson<T> on CursorPage<T> {
static CursorPage<T> fromJson<T>(
Map<String, dynamic> json,
T Function(dynamic json) itemFromJson,
) {
final metadata = Paging.fromJson(json["metadata"]);
final paging = CursorPaging<T>();
paging.cursors = Cursor.fromJson(json["metadata"])..after = json["after"];
paging.href = metadata.href;
paging.itemsNative = paging.itemsNative;
paging.limit = metadata.limit;
paging.next = metadata.next;
return CursorPage<T>(
paging,
itemFromJson,
);
}
Map<String, dynamic> toJson() {
return {
"after": after,
"metadata": metadata.toJson(),
};
}
}
extension PagingToJson<T> on Paging<T> {
Map<String, dynamic> toJson() {
return {
"items": itemsNative,
"total": total,
"next": next,
"previous": previous,
"limit": limit,
"offset": offset,
"href": href,
};
}
}
extension PageJson<T> on Page<T> {
static Page<T> fromJson<T>(
Map<String, dynamic> json,
T Function(dynamic json) itemFromJson,
) {
return Page<T>(
Paging<T>.fromJson(
Map.castFrom<dynamic, dynamic, String, dynamic>(json["metadata"]),
),
itemFromJson,
);
}
Map<String, dynamic> toJson() {
return {
"metadata": metadata.toJson(),
};
}
}