diff --git a/lib/features/library_browser/view/filtered_library_items_page.dart b/lib/features/library_browser/view/filtered_library_items_page.dart index 9296e38..936f659 100644 --- a/lib/features/library_browser/view/filtered_library_items_page.dart +++ b/lib/features/library_browser/view/filtered_library_items_page.dart @@ -113,24 +113,81 @@ class LibraryItemListTile extends ConsumerWidget { String? subtitle; String? authorName; - if (media is MediaBook) { - final metadata = media.metadata; - if (metadata is BookMetadata) { - title = metadata.title ?? 'Unknown'; - subtitle = metadata.subtitle; - authorName = metadata.authorName; - } else if (metadata is BookMetadataMinified) { - title = metadata.title ?? 'Unknown'; - authorName = metadata.authorName; - } else if (metadata is BookMetadataExpanded) { - title = metadata.title ?? 'Unknown'; - subtitle = metadata.subtitle; - final authors = metadata.authors; - if (authors != null && authors.isNotEmpty) { - authorName = authors.map((a) => a.name).join(', '); - } - } - } + // Use map to handle Media variants + media.mapOrNull( + book: (book) { + final metadata = book.metadata; + metadata.mapOrNull( + book: (m) { + title = m.title ?? 'Unknown'; + subtitle = m.subtitle; + if (m.authors.isNotEmpty) { + authorName = m.authors.map((a) => a.name).join(', '); + } + }, + bookMinified: (m) { + title = m.title ?? 'Unknown'; + subtitle = m.subtitle; + authorName = m.authorName; + }, + bookExpanded: (m) { + title = m.title ?? 'Unknown'; + subtitle = m.subtitle; + if (m.authors.isNotEmpty) { + authorName = m.authors.map((a) => a.name).join(', '); + } + }, + ); + }, + bookMinified: (book) { + final metadata = book.metadata; + metadata.mapOrNull( + book: (m) { + title = m.title ?? 'Unknown'; + subtitle = m.subtitle; + if (m.authors.isNotEmpty) { + authorName = m.authors.map((a) => a.name).join(', '); + } + }, + bookMinified: (m) { + title = m.title ?? 'Unknown'; + subtitle = m.subtitle; + authorName = m.authorName; + }, + bookExpanded: (m) { + title = m.title ?? 'Unknown'; + subtitle = m.subtitle; + if (m.authors.isNotEmpty) { + authorName = m.authors.map((a) => a.name).join(', '); + } + }, + ); + }, + bookExpanded: (book) { + final metadata = book.metadata; + metadata.mapOrNull( + book: (m) { + title = m.title ?? 'Unknown'; + subtitle = m.subtitle; + if (m.authors.isNotEmpty) { + authorName = m.authors.map((a) => a.name).join(', '); + } + }, + bookMinified: (m) { + title = m.title ?? 'Unknown'; + subtitle = m.subtitle; + authorName = m.authorName; + }, + bookExpanded: (m) { + title = m.title ?? 'Unknown'; + subtitle = m.subtitle; + if (m.authors.isNotEmpty) { + authorName = m.authors.map((a) => a.name).join(', '); + } + }, + ); + }, + ); final imageUrl = apiSettings.activeServer != null ? '${apiSettings.activeServer!.serverUrl}/api/items/${item.id}/cover' diff --git a/lib/router/router.dart b/lib/router/router.dart index dbea576..8212385 100644 --- a/lib/router/router.dart +++ b/lib/router/router.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; +import 'package:shelfsdk/audiobookshelf_api.dart'; import 'package:vaani/features/downloads/view/downloads_page.dart'; import 'package:vaani/features/explore/view/explore_page.dart'; import 'package:vaani/features/explore/view/search_result_page.dart';