Skip to content

feat(app): studio search, IGDB stop-word fallback, collection links - #443

Merged
hacan359 merged 10 commits into
mainfrom
release/0.44
Sep 16, 2026
Merged

hacan359 merged 10 commits into
mainfrom
release/0.44

Conversation

@hacan359

@hacan359 hacan359 commented Sep 3, 2026

Copy link
Copy Markdown
Owner
  • Studio filter on the AniList anime tab, picked from live suggestions
  • The studio filter is exclusive: other filters and the search text stay off
  • A studio on an anime card or a search result sheet opens that search
  • IGDB retries an empty search as a name filter, so "Until Then" is found
  • A collection name on All items opens that collection
  • Shimmer placeholders stop marking themselves dirty mid-build

- Studio filter on the AniList anime tab, picked from live suggestions
- The studio filter is exclusive: other filters and the search text stay off
- A studio on an anime card or a search result sheet opens that search
- IGDB retries an empty search as a name filter, so "Until Then" is found
- A collection name on All items opens that collection
- Shimmer placeholders stop marking themselves dirty mid-build
@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown

Coverage after merging release/0.44 into main will be

56.36%

Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
lib
   app.dart83.33%100%100%83.33%35–36, 69–70, 90
   main.dart1.96%100%100%1.96%105–108, 112, 114–121, 124, 23–26, 28–29, 31–35, 40, 44, 48, 50–51, 55, 57–59, 64–65, 69–72, 75, 77–79, 81, 92, 94–95, 98–99
lib/core/api
   anilist_api.dart74.42%100%100%74.42%115, 126–127, 148–149, 151–152, 154, 159, 165, 170
   api_dio.dart28.57%100%100%28.57%28–29, 32, 40, 44–45, 47, 49–51
   api_error_detail.dart100%100%100%100%
   api_error_extract.dart100%100%100%100%
   comicvine_api.dart90.82%100%100%90.82%140, 194, 225, 227, 229–230, 232, 31–32
   fantlab_api.dart100%100%100%100%
   google_books_api.dart89.55%100%100%89.55%141, 161, 163–164, 166, 30–31
   hardcover_api.dart84.85%100%100%84.85%20–21, 44, 61–62
   host_rate_limiter.dart80.95%100%100%80.95%66, 70, 72–73
   igdb_api.dart80.95%100%100%80.95%135, 147, 160, 20–23, 44
   kitsu_api.dart92.86%100%100%92.86%106, 66
   kodi_api.dart89.34%100%100%89.34%234, 236, 287, 293–294, 321, 331, 46–51
   listenbrainz_api.dart0%100%100%0%101, 103, 111, 113, 115, 117–123, 126–129, 13, 134, 139, 142–145, 33–34, 36–44, 51, 53, 61, 65, 68, 70, 72, 74, 78–84, 88, 95
   mangabaka_api.dart91.67%100%100%91.67%50
   mangadex_api.dart91.67%100%100%91.67%55
   musicbrainz_api.dart0%100%100%0%14–15, 21, 32, 44–45, 47, 51, 53–54, 56–57, 59, 63, 65, 68–71
   openlibrary_api.dart77.78%100%100%77.78%47–48
   podcast_index_api.dart79.10%100%100%79.10%110–111, 132–133, 138, 140, 142, 20–21, 41–42, 46, 78–79
   proxy_rewrite_interceptor.dart100%100%100%100%
   ra_api.dart66.67%100%100%66.67%17, 33, 52, 56, 58, 62, 64–65, 67
   screenscraper_api.dart91.30%100%100%91.30%11–12, 203, 207, 210–213
   simkl_api.dart96.55%100%100%96.55%88
   steam_api.dart93.48%100%100%93.48%69, 8–9
   steamgriddb_api.dart95.65%100%100%95.65%17
   tmdb_api.dart93.98%100%100%93.98%150, 155, 24, 85, 90
   tvdb_api.dart75%100%100%75%100–101, 109, 118, 71, 78–79, 93
   tvmaze_api.dart90.91%100%100%90.91%30
   vndb_api.dart85.71%100%100%85.71%10–11
lib/core/api/anilist
   anilist_graphql_client.dart82%100%100%82%121–124, 129–130, 132–134
   anilist_mal_lookup_api.dart1.52%100%100%1.52%101, 104, 110, 112–116, 120–122, 125–127, 134–135, 137, 140–142, 146–147, 149, 152–154, 158–159, 16, 161, 165, 169, 172, 175–176, 178, 180, 20–24, 29–33, 40, 45, 47, 54, 59, 61, 68, 75–76, 78–79, 82, 85–86, 93, 95, 97–98
   anilist_media_api.dart79.82%100%100%79.82%161–162, 197, 205–207, 242–244, 285–286, 291–292, 295–296, 317, 320, 48–49, 52, 83–84, 87
   anilist_media_parser.dart96.97%100%100%96.97%135, 8
   anilist_queries.dart93.75%100%100%93.75%14
   anilist_types.dart100%100%100%100%
   anilist_user_list_api.dart98.36%100%100%98.36%127
lib/core/api/episode_source
   kitsu_episode_source.dart94.83%100%100%94.83%104–106
   tmdb_episode_source.dart100%100%100%100%
   tv_episode_source.dart100%100%100%100%
   tvdb_episode_source.dart100%100%100%100%
   tvmaze_episode_source.dart82.35%100%100%82.35%39–41
lib/core/api/fantlab
   fantlab_editions.dart100%100%100%100%
   fantlab_http_client.dart71.43%100%100%71.43%15, 19, 45, 61–62, 64
   fantlab_search_api.dart96.88%100%100%96.88%72
   fantlab_types.dart100%100%100%100%
   fantlab_works_api.dart89.29%100%100%89.29%25, 39, 65
lib/core/api/hardcover
   hardcover_graphql_client.dart80%100%100%80%119–120, 122, 126, 129–130, 37, 63, 65
   hardcover_search_api.dart100%100%100%100%
   hardcover_types.dart94.87%100%100%94.87%10–11
   hardcover_user_library_api.dart100%100%100%100%
lib/core/api/igdb
   igdb_games_api.dart71.51%100%100%71.51%157, 159, 204, 217, 219, 266, 268, 276–277, 307–308, 340, 342, 384, 396, 400, 402–403, 405–406, 408–409, 412, 416, 418–420, 424, 426–428, 432–437, 440–442, 54–55, 57–58, 61, 65, 67–69, 73, 75–77
   igdb_genres_api.dart8.33%100%100%8.33%11–12, 15, 20–21, 23, 27, 29–32
   igdb_http_client.dart100%100%100%100%
   igdb_platforms_api.dart97.06%100%100%97.06%44
   igdb_types.dart100%100%100%100%
lib/core/api/kitsu
   kitsu_anime_api.dart65.96%100%100%65.96%25–27, 47–48, 73–74, 80, 82, 84–90
   kitsu_episode_api.dart97.73%100%100%97.73%29
   kitsu_http_client.dart90.91%100%100%90.91%73–74
   kitsu_manga_api.dart83.33%100%100%83.33%25–27, 61–63
   kitsu_mapping_api.dart96.23%100%100%96.23%102–103
   kitsu_types.dart100%100%100%100%
lib/core/api/mangabaka
   mangabaka_http_client.dart80%100%100%80%12, 60–61
   mangabaka_manga_api.dart88.89%100%100%88.89%26–29, 31, 33
   mangabaka_tags_api.dart100%100%100%100%
   mangabaka_types.dart100%100%100%100%
lib/core/api/mangadex
   mangadex_http_client.dart80%100%100%80%12, 58–59
   mangadex_manga_api.dart91.57%100%100%91.57%102, 51–54, 59–60
   mangadex_tags_api.dart80%100%100%80%30–31
   mangadex_types.dart66.67%100%100%66.67%18–19
lib/core/api/musicbrainz
   musicbrainz_http_client.dart88.89%100%100%88.89%13, 54, 83
   musicbrainz_release_group_api.dart53.19%100%100%53.19%111–112, 134, 139–141, 146, 148, 150–153, 155–158, 16, 166–168, 27, 36,

The light example showed five of the nine media types, the allowed source
values were nowhere, and the string-to-int id conversion was only implied by
the native_id row, so an external writer could not target the format without
reading the app's source.
@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown

Coverage after merging release/0.44 into main will be

56.36%

Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
lib
   app.dart83.33%100%100%83.33%35–36, 69–70, 90
   main.dart1.96%100%100%1.96%105–108, 112, 114–121, 124, 23–26, 28–29, 31–35, 40, 44, 48, 50–51, 55, 57–59, 64–65, 69–72, 75, 77–79, 81, 92, 94–95, 98–99
lib/core/api
   anilist_api.dart74.42%100%100%74.42%115, 126–127, 148–149, 151–152, 154, 159, 165, 170
   api_dio.dart28.57%100%100%28.57%28–29, 32, 40, 44–45, 47, 49–51
   api_error_detail.dart100%100%100%100%
   api_error_extract.dart100%100%100%100%
   comicvine_api.dart90.82%100%100%90.82%140, 194, 225, 227, 229–230, 232, 31–32
   fantlab_api.dart100%100%100%100%
   google_books_api.dart89.55%100%100%89.55%141, 161, 163–164, 166, 30–31
   hardcover_api.dart84.85%100%100%84.85%20–21, 44, 61–62
   host_rate_limiter.dart80.95%100%100%80.95%66, 70, 72–73
   igdb_api.dart80.95%100%100%80.95%135, 147, 160, 20–23, 44
   kitsu_api.dart92.86%100%100%92.86%106, 66
   kodi_api.dart89.34%100%100%89.34%234, 236, 287, 293–294, 321, 331, 46–51
   listenbrainz_api.dart0%100%100%0%101, 103, 111, 113, 115, 117–123, 126–129, 13, 134, 139, 142–145, 33–34, 36–44, 51, 53, 61, 65, 68, 70, 72, 74, 78–84, 88, 95
   mangabaka_api.dart91.67%100%100%91.67%50
   mangadex_api.dart91.67%100%100%91.67%55
   musicbrainz_api.dart0%100%100%0%14–15, 21, 32, 44–45, 47, 51, 53–54, 56–57, 59, 63, 65, 68–71
   openlibrary_api.dart77.78%100%100%77.78%47–48
   podcast_index_api.dart79.10%100%100%79.10%110–111, 132–133, 138, 140, 142, 20–21, 41–42, 46, 78–79
   proxy_rewrite_interceptor.dart100%100%100%100%
   ra_api.dart66.67%100%100%66.67%17, 33, 52, 56, 58, 62, 64–65, 67
   screenscraper_api.dart91.30%100%100%91.30%11–12, 203, 207, 210–213
   simkl_api.dart96.55%100%100%96.55%88
   steam_api.dart93.48%100%100%93.48%69, 8–9
   steamgriddb_api.dart95.65%100%100%95.65%17
   tmdb_api.dart93.98%100%100%93.98%150, 155, 24, 85, 90
   tvdb_api.dart75%100%100%75%100–101, 109, 118, 71, 78–79, 93
   tvmaze_api.dart90.91%100%100%90.91%30
   vndb_api.dart85.71%100%100%85.71%10–11
lib/core/api/anilist
   anilist_graphql_client.dart82%100%100%82%121–124, 129–130, 132–134
   anilist_mal_lookup_api.dart1.52%100%100%1.52%101, 104, 110, 112–116, 120–122, 125–127, 134–135, 137, 140–142, 146–147, 149, 152–154, 158–159, 16, 161, 165, 169, 172, 175–176, 178, 180, 20–24, 29–33, 40, 45, 47, 54, 59, 61, 68, 75–76, 78–79, 82, 85–86, 93, 95, 97–98
   anilist_media_api.dart79.82%100%100%79.82%161–162, 197, 205–207, 242–244, 285–286, 291–292, 295–296, 317, 320, 48–49, 52, 83–84, 87
   anilist_media_parser.dart96.97%100%100%96.97%135, 8
   anilist_queries.dart93.75%100%100%93.75%14
   anilist_types.dart100%100%100%100%
   anilist_user_list_api.dart98.36%100%100%98.36%127
lib/core/api/episode_source
   kitsu_episode_source.dart94.83%100%100%94.83%104–106
   tmdb_episode_source.dart100%100%100%100%
   tv_episode_source.dart100%100%100%100%
   tvdb_episode_source.dart100%100%100%100%
   tvmaze_episode_source.dart82.35%100%100%82.35%39–41
lib/core/api/fantlab
   fantlab_editions.dart100%100%100%100%
   fantlab_http_client.dart71.43%100%100%71.43%15, 19, 45, 61–62, 64
   fantlab_search_api.dart96.88%100%100%96.88%72
   fantlab_types.dart100%100%100%100%
   fantlab_works_api.dart89.29%100%100%89.29%25, 39, 65
lib/core/api/hardcover
   hardcover_graphql_client.dart80%100%100%80%119–120, 122, 126, 129–130, 37, 63, 65
   hardcover_search_api.dart100%100%100%100%
   hardcover_types.dart94.87%100%100%94.87%10–11
   hardcover_user_library_api.dart100%100%100%100%
lib/core/api/igdb
   igdb_games_api.dart71.51%100%100%71.51%157, 159, 204, 217, 219, 266, 268, 276–277, 307–308, 340, 342, 384, 396, 400, 402–403, 405–406, 408–409, 412, 416, 418–420, 424, 426–428, 432–437, 440–442, 54–55, 57–58, 61, 65, 67–69, 73, 75–77
   igdb_genres_api.dart8.33%100%100%8.33%11–12, 15, 20–21, 23, 27, 29–32
   igdb_http_client.dart100%100%100%100%
   igdb_platforms_api.dart97.06%100%100%97.06%44
   igdb_types.dart100%100%100%100%
lib/core/api/kitsu
   kitsu_anime_api.dart65.96%100%100%65.96%25–27, 47–48, 73–74, 80, 82, 84–90
   kitsu_episode_api.dart97.73%100%100%97.73%29
   kitsu_http_client.dart90.91%100%100%90.91%73–74
   kitsu_manga_api.dart83.33%100%100%83.33%25–27, 61–63
   kitsu_mapping_api.dart96.23%100%100%96.23%102–103
   kitsu_types.dart100%100%100%100%
lib/core/api/mangabaka
   mangabaka_http_client.dart80%100%100%80%12, 60–61
   mangabaka_manga_api.dart88.89%100%100%88.89%26–29, 31, 33
   mangabaka_tags_api.dart100%100%100%100%
   mangabaka_types.dart100%100%100%100%
lib/core/api/mangadex
   mangadex_http_client.dart80%100%100%80%12, 58–59
   mangadex_manga_api.dart91.57%100%100%91.57%102, 51–54, 59–60
   mangadex_tags_api.dart80%100%100%80%30–31
   mangadex_types.dart66.67%100%100%66.67%18–19
lib/core/api/musicbrainz
   musicbrainz_http_client.dart88.89%100%100%88.89%13, 54, 83
   musicbrainz_release_group_api.dart53.19%100%100%53.19%111–112, 134, 139–141, 146, 148, 150–153, 155–158, 16, 166–168, 27, 36,

- Search field on Home and Collections gets a "By details" mode that
  matches genres, tags, studios, authors, labels, platforms and years;
  comma joins with AND, slash with OR.
- Genre, tag, author, label and platform chips on the item card run a
  details search on the screen underneath.
- Text size slider in Settings, multiplied onto the system text scale.
- One ItemSearch matcher for the collection and All items screens, so
  album artists and book authors match in both.
- AniList tag picker header scrolls with the list on a small sheet.
@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown

Coverage after merging release/0.44 into main will be

56.45%

Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
lib
   app.dart75%100%100%75%136, 138, 140, 142–144, 146–147, 35–36, 69–70, 92
   main.dart1.96%100%100%1.96%105–108, 112, 114–121, 124, 23–26, 28–29, 31–35, 40, 44, 48, 50–51, 55, 57–59, 64–65, 69–72, 75, 77–79, 81, 92, 94–95, 98–99
lib/core/api
   anilist_api.dart74.42%100%100%74.42%115, 126–127, 148–149, 151–152, 154, 159, 165, 170
   api_dio.dart28.57%100%100%28.57%28–29, 32, 40, 44–45, 47, 49–51
   api_error_detail.dart100%100%100%100%
   api_error_extract.dart100%100%100%100%
   comicvine_api.dart90.82%100%100%90.82%140, 194, 225, 227, 229–230, 232, 31–32
   fantlab_api.dart100%100%100%100%
   google_books_api.dart89.55%100%100%89.55%141, 161, 163–164, 166, 30–31
   hardcover_api.dart84.85%100%100%84.85%20–21, 44, 61–62
   host_rate_limiter.dart80.95%100%100%80.95%66, 70, 72–73
   igdb_api.dart80.95%100%100%80.95%135, 147, 160, 20–23, 44
   kitsu_api.dart92.86%100%100%92.86%106, 66
   kodi_api.dart89.34%100%100%89.34%234, 236, 287, 293–294, 321, 331, 46–51
   listenbrainz_api.dart0%100%100%0%101, 103, 111, 113, 115, 117–123, 126–129, 13, 134, 139, 142–145, 33–34, 36–44, 51, 53, 61, 65, 68, 70, 72, 74, 78–84, 88, 95
   mangabaka_api.dart91.67%100%100%91.67%50
   mangadex_api.dart91.67%100%100%91.67%55
   musicbrainz_api.dart0%100%100%0%14–15, 21, 32, 44–45, 47, 51, 53–54, 56–57, 59, 63, 65, 68–71
   openlibrary_api.dart77.78%100%100%77.78%47–48
   podcast_index_api.dart79.10%100%100%79.10%110–111, 132–133, 138, 140, 142, 20–21, 41–42, 46, 78–79
   proxy_rewrite_interceptor.dart100%100%100%100%
   ra_api.dart66.67%100%100%66.67%17, 33, 52, 56, 58, 62, 64–65, 67
   screenscraper_api.dart91.30%100%100%91.30%11–12, 203, 207, 210–213
   simkl_api.dart96.55%100%100%96.55%88
   steam_api.dart93.48%100%100%93.48%69, 8–9
   steamgriddb_api.dart95.65%100%100%95.65%17
   tmdb_api.dart93.98%100%100%93.98%150, 155, 24, 85, 90
   tvdb_api.dart75%100%100%75%100–101, 109, 118, 71, 78–79, 93
   tvmaze_api.dart90.91%100%100%90.91%30
   vndb_api.dart85.71%100%100%85.71%10–11
lib/core/api/anilist
   anilist_graphql_client.dart82%100%100%82%121–124, 129–130, 132–134
   anilist_mal_lookup_api.dart1.52%100%100%1.52%101, 104, 110, 112–116, 120–122, 125–127, 134–135, 137, 140–142, 146–147, 149, 152–154, 158–159, 16, 161, 165, 169, 172, 175–176, 178, 180, 20–24, 29–33, 40, 45, 47, 54, 59, 61, 68, 75–76, 78–79, 82, 85–86, 93, 95, 97–98
   anilist_media_api.dart79.82%100%100%79.82%161–162, 197, 205–207, 242–244, 285–286, 291–292, 295–296, 317, 320, 48–49, 52, 83–84, 87
   anilist_media_parser.dart96.97%100%100%96.97%135, 8
   anilist_queries.dart93.75%100%100%93.75%14
   anilist_types.dart100%100%100%100%
   anilist_user_list_api.dart98.36%100%100%98.36%127
lib/core/api/episode_source
   kitsu_episode_source.dart94.83%100%100%94.83%104–106
   tmdb_episode_source.dart100%100%100%100%
   tv_episode_source.dart100%100%100%100%
   tvdb_episode_source.dart100%100%100%100%
   tvmaze_episode_source.dart82.35%100%100%82.35%39–41
lib/core/api/fantlab
   fantlab_editions.dart100%100%100%100%
   fantlab_http_client.dart71.43%100%100%71.43%15, 19, 45, 61–62, 64
   fantlab_search_api.dart96.88%100%100%96.88%72
   fantlab_types.dart100%100%100%100%
   fantlab_works_api.dart89.29%100%100%89.29%25, 39, 65
lib/core/api/hardcover
   hardcover_graphql_client.dart80%100%100%80%119–120, 122, 126, 129–130, 37, 63, 65
   hardcover_search_api.dart100%100%100%100%
   hardcover_types.dart94.87%100%100%94.87%10–11
   hardcover_user_library_api.dart100%100%100%100%
lib/core/api/igdb
   igdb_games_api.dart71.51%100%100%71.51%157, 159, 204, 217, 219, 266, 268, 276–277, 307–308, 340, 342, 384, 396, 400, 402–403, 405–406, 408–409, 412, 416, 418–420, 424, 426–428, 432–437, 440–442, 54–55, 57–58, 61, 65, 67–69, 73, 75–77
   igdb_genres_api.dart8.33%100%100%8.33%11–12, 15, 20–21, 23, 27, 29–32
   igdb_http_client.dart100%100%100%100%
   igdb_platforms_api.dart97.06%100%100%97.06%44
   igdb_types.dart100%100%100%100%
lib/core/api/kitsu
   kitsu_anime_api.dart65.96%100%100%65.96%25–27, 47–48, 73–74, 80, 82, 84–90
   kitsu_episode_api.dart97.73%100%100%97.73%29
   kitsu_http_client.dart90.91%100%100%90.91%73–74
   kitsu_manga_api.dart83.33%100%100%83.33%25–27, 61–63
   kitsu_mapping_api.dart96.23%100%100%96.23%102–103
   kitsu_types.dart100%100%100%100%
lib/core/api/mangabaka
   mangabaka_http_client.dart80%100%100%80%12, 60–61
   mangabaka_manga_api.dart88.89%100%100%88.89%26–29, 31, 33
   mangabaka_tags_api.dart100%100%100%100%
   mangabaka_types.dart100%100%100%100%
lib/core/api/mangadex
   mangadex_http_client.dart80%100%100%80%12, 58–59
   mangadex_manga_api.dart91.57%100%100%91.57%102, 51–54, 59–60
   mangadex_tags_api.dart80%100%100%80%30–31
   mangadex_types.dart66.67%100%100%66.67%18–19
lib/core/api/musicbrainz
   musicbrainz_http_client.dart88.89%100%100%88.89%13, 54, 83
   musicbrainz_release_group_api.dart53.19%100%100%53.19%111–112, 134, 139–141, 146, 148, 150–153, 155–158,

Add a "Likes & notes" section to the personalization hub: every liked or
noted unit in the library grouped by title, with cached episode and track
names joined in by ItemMarkDao.getAllMarks (protocol v3). Heart and note
toggles plus media-type chips filter in memory; the top-bar search field
serves the page while it is open.

Rework the hub into a landing page of section cards with live previews;
sections open over it in the hub's own navigator, the genre cloud moves to
the statistics header.
@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown

Coverage after merging release/0.44 into main will be

56.61%

Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
lib
   app.dart75%100%100%75%136, 138, 140, 142–144, 146–147, 35–36, 69–70, 92
   main.dart1.96%100%100%1.96%105–108, 112, 114–121, 124, 23–26, 28–29, 31–35, 40, 44, 48, 50–51, 55, 57–59, 64–65, 69–72, 75, 77–79, 81, 92, 94–95, 98–99
lib/core/api
   anilist_api.dart74.42%100%100%74.42%115, 126–127, 148–149, 151–152, 154, 159, 165, 170
   api_dio.dart28.57%100%100%28.57%28–29, 32, 40, 44–45, 47, 49–51
   api_error_detail.dart100%100%100%100%
   api_error_extract.dart100%100%100%100%
   comicvine_api.dart90.82%100%100%90.82%140, 194, 225, 227, 229–230, 232, 31–32
   fantlab_api.dart100%100%100%100%
   google_books_api.dart89.55%100%100%89.55%141, 161, 163–164, 166, 30–31
   hardcover_api.dart84.85%100%100%84.85%20–21, 44, 61–62
   host_rate_limiter.dart80.95%100%100%80.95%66, 70, 72–73
   igdb_api.dart80.95%100%100%80.95%135, 147, 160, 20–23, 44
   kitsu_api.dart92.86%100%100%92.86%106, 66
   kodi_api.dart89.34%100%100%89.34%234, 236, 287, 293–294, 321, 331, 46–51
   listenbrainz_api.dart0%100%100%0%101, 103, 111, 113, 115, 117–123, 126–129, 13, 134, 139, 142–145, 33–34, 36–44, 51, 53, 61, 65, 68, 70, 72, 74, 78–84, 88, 95
   mangabaka_api.dart91.67%100%100%91.67%50
   mangadex_api.dart91.67%100%100%91.67%55
   musicbrainz_api.dart0%100%100%0%14–15, 21, 32, 44–45, 47, 51, 53–54, 56–57, 59, 63, 65, 68–71
   openlibrary_api.dart77.78%100%100%77.78%47–48
   podcast_index_api.dart79.10%100%100%79.10%110–111, 132–133, 138, 140, 142, 20–21, 41–42, 46, 78–79
   proxy_rewrite_interceptor.dart100%100%100%100%
   ra_api.dart66.67%100%100%66.67%17, 33, 52, 56, 58, 62, 64–65, 67
   screenscraper_api.dart91.30%100%100%91.30%11–12, 203, 207, 210–213
   simkl_api.dart96.55%100%100%96.55%88
   steam_api.dart93.48%100%100%93.48%69, 8–9
   steamgriddb_api.dart95.65%100%100%95.65%17
   tmdb_api.dart93.98%100%100%93.98%150, 155, 24, 85, 90
   tvdb_api.dart75%100%100%75%100–101, 109, 118, 71, 78–79, 93
   tvmaze_api.dart90.91%100%100%90.91%30
   vndb_api.dart85.71%100%100%85.71%10–11
lib/core/api/anilist
   anilist_graphql_client.dart82%100%100%82%121–124, 129–130, 132–134
   anilist_mal_lookup_api.dart1.52%100%100%1.52%101, 104, 110, 112–116, 120–122, 125–127, 134–135, 137, 140–142, 146–147, 149, 152–154, 158–159, 16, 161, 165, 169, 172, 175–176, 178, 180, 20–24, 29–33, 40, 45, 47, 54, 59, 61, 68, 75–76, 78–79, 82, 85–86, 93, 95, 97–98
   anilist_media_api.dart79.82%100%100%79.82%161–162, 197, 205–207, 242–244, 285–286, 291–292, 295–296, 317, 320, 48–49, 52, 83–84, 87
   anilist_media_parser.dart96.97%100%100%96.97%135, 8
   anilist_queries.dart93.75%100%100%93.75%14
   anilist_types.dart100%100%100%100%
   anilist_user_list_api.dart98.36%100%100%98.36%127
lib/core/api/episode_source
   kitsu_episode_source.dart94.83%100%100%94.83%104–106
   tmdb_episode_source.dart100%100%100%100%
   tv_episode_source.dart100%100%100%100%
   tvdb_episode_source.dart100%100%100%100%
   tvmaze_episode_source.dart82.35%100%100%82.35%39–41
lib/core/api/fantlab
   fantlab_editions.dart100%100%100%100%
   fantlab_http_client.dart71.43%100%100%71.43%15, 19, 45, 61–62, 64
   fantlab_search_api.dart96.88%100%100%96.88%72
   fantlab_types.dart100%100%100%100%
   fantlab_works_api.dart89.29%100%100%89.29%25, 39, 65
lib/core/api/hardcover
   hardcover_graphql_client.dart80%100%100%80%119–120, 122, 126, 129–130, 37, 63, 65
   hardcover_search_api.dart100%100%100%100%
   hardcover_types.dart94.87%100%100%94.87%10–11
   hardcover_user_library_api.dart100%100%100%100%
lib/core/api/igdb
   igdb_games_api.dart71.51%100%100%71.51%157, 159, 204, 217, 219, 266, 268, 276–277, 307–308, 340, 342, 384, 396, 400, 402–403, 405–406, 408–409, 412, 416, 418–420, 424, 426–428, 432–437, 440–442, 54–55, 57–58, 61, 65, 67–69, 73, 75–77
   igdb_genres_api.dart8.33%100%100%8.33%11–12, 15, 20–21, 23, 27, 29–32
   igdb_http_client.dart100%100%100%100%
   igdb_platforms_api.dart97.06%100%100%97.06%44
   igdb_types.dart100%100%100%100%
lib/core/api/kitsu
   kitsu_anime_api.dart65.96%100%100%65.96%25–27, 47–48, 73–74, 80, 82, 84–90
   kitsu_episode_api.dart97.73%100%100%97.73%29
   kitsu_http_client.dart90.91%100%100%90.91%73–74
   kitsu_manga_api.dart83.33%100%100%83.33%25–27, 61–63
   kitsu_mapping_api.dart96.23%100%100%96.23%102–103
   kitsu_types.dart100%100%100%100%
lib/core/api/mangabaka
   mangabaka_http_client.dart80%100%100%80%12, 60–61
   mangabaka_manga_api.dart88.89%100%100%88.89%26–29, 31, 33
   mangabaka_tags_api.dart100%100%100%100%
   mangabaka_types.dart100%100%100%100%
lib/core/api/mangadex
   mangadex_http_client.dart80%100%100%80%12, 58–59
   mangadex_manga_api.dart91.57%100%100%91.57%102, 51–54, 59–60
   mangadex_tags_api.dart80%100%100%80%30–31
   mangadex_types.dart66.67%100%100%66.67%18–19
lib/core/api/musicbrainz
   musicbrainz_http_client.dart88.89%100%100%88.89%13, 54, 83
   musicbrainz_release_group_api.dart53.19%100%100%53.19%111–112, 134, 139–141, 146, 148, 150–153, 155–158,

Ten boards in two blocks take over from the Discover feed in search. "Out
now" counts down to the next episode, premiere or release; "Popular" keeps
the trending lists. Search now shows one empty state for every media type.

AniList queries take a season and return the airing timestamp, IGDB serves
the most anticipated upcoming releases, TMDB returns release dates with the
theatre feeds, the next episode of a show and an air-date window.
@github-actions

Copy link
Copy Markdown

Coverage after merging release/0.44 into main will be

57.21%

Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
lib
   app.dart75%100%100%75%136, 138, 140, 142–144, 146–147, 35–36, 69–70, 92
   main.dart1.96%100%100%1.96%105–108, 112, 114–121, 124, 23–26, 28–29, 31–35, 40, 44, 48, 50–51, 55, 57–59, 64–65, 69–72, 75, 77–79, 81, 92, 94–95, 98–99
lib/core/api
   anilist_api.dart74.42%100%100%74.42%119, 130–131, 152–153, 155–156, 158, 163, 169, 174
   api_dio.dart28.57%100%100%28.57%28–29, 32, 40, 44–45, 47, 49–51
   api_error_detail.dart100%100%100%100%
   api_error_extract.dart100%100%100%100%
   comicvine_api.dart90.82%100%100%90.82%140, 194, 225, 227, 229–230, 232, 31–32
   fantlab_api.dart100%100%100%100%
   google_books_api.dart89.55%100%100%89.55%141, 161, 163–164, 166, 30–31
   hardcover_api.dart84.85%100%100%84.85%20–21, 44, 61–62
   host_rate_limiter.dart80.95%100%100%80.95%66, 70, 72–73
   igdb_api.dart80%100%100%80%137, 149, 165, 20–23, 44, 49
   kitsu_api.dart92.86%100%100%92.86%106, 66
   kodi_api.dart89.34%100%100%89.34%234, 236, 287, 293–294, 321, 331, 46–51
   listenbrainz_api.dart0%100%100%0%101, 103, 111, 113, 115, 117–123, 126–129, 13, 134, 139, 142–145, 33–34, 36–44, 51, 53, 61, 65, 68, 70, 72, 74, 78–84, 88, 95
   mangabaka_api.dart91.67%100%100%91.67%50
   mangadex_api.dart91.67%100%100%91.67%55
   musicbrainz_api.dart0%100%100%0%14–15, 21, 32, 44–45, 47, 51, 53–54, 56–57, 59, 63, 65, 68–71
   openlibrary_api.dart77.78%100%100%77.78%47–48
   podcast_index_api.dart79.10%100%100%79.10%110–111, 132–133, 138, 140, 142, 20–21, 41–42, 46, 78–79
   proxy_rewrite_interceptor.dart100%100%100%100%
   ra_api.dart66.67%100%100%66.67%17, 33, 52, 56, 58, 62, 64–65, 67
   screenscraper_api.dart91.30%100%100%91.30%11–12, 203, 207, 210–213
   simkl_api.dart96.55%100%100%96.55%88
   steam_api.dart93.48%100%100%93.48%69, 8–9
   steamgriddb_api.dart95.65%100%100%95.65%17
   tmdb_api.dart92.68%100%100%92.68%158, 163, 24, 59, 87, 92
   tvdb_api.dart75%100%100%75%100–101, 109, 118, 71, 78–79, 93
   tvmaze_api.dart90.91%100%100%90.91%30
   vndb_api.dart85.71%100%100%85.71%10–11
lib/core/api/anilist
   anilist_graphql_client.dart82%100%100%82%121–124, 129–130, 132–134
   anilist_mal_lookup_api.dart1.52%100%100%1.52%101, 104, 110, 112–116, 120–122, 125–127, 134–135, 137, 140–142, 146–147, 149, 152–154, 158–159, 16, 161, 165, 169, 172, 175–176, 178, 180, 20–24, 29–33, 40, 45, 47, 54, 59, 61, 68, 75–76, 78–79, 82, 85–86, 93, 95, 97–98
   anilist_media_api.dart80.17%100%100%80.17%165–166, 201, 209–211, 246–248, 289–290, 295–296, 299–300, 321, 324, 48–49, 52, 85–86, 89
   anilist_media_parser.dart96.97%100%100%96.97%135, 8
   anilist_queries.dart93.75%100%100%93.75%14
   anilist_types.dart100%100%100%100%
   anilist_user_list_api.dart98.36%100%100%98.36%127
lib/core/api/episode_source
   kitsu_episode_source.dart94.83%100%100%94.83%104–106
   tmdb_episode_source.dart100%100%100%100%
   tv_episode_source.dart100%100%100%100%
   tvdb_episode_source.dart100%100%100%100%
   tvmaze_episode_source.dart82.35%100%100%82.35%39–41
lib/core/api/fantlab
   fantlab_editions.dart100%100%100%100%
   fantlab_http_client.dart71.43%100%100%71.43%15, 19, 45, 61–62, 64
   fantlab_search_api.dart96.88%100%100%96.88%72
   fantlab_types.dart100%100%100%100%
   fantlab_works_api.dart89.29%100%100%89.29%25, 39, 65
lib/core/api/hardcover
   hardcover_graphql_client.dart80%100%100%80%119–120, 122, 126, 129–130, 37, 63, 65
   hardcover_search_api.dart100%100%100%100%
   hardcover_types.dart94.87%100%100%94.87%10–11
   hardcover_user_library_api.dart100%100%100%100%
lib/core/api/igdb
   igdb_games_api.dart71.79%100%100%71.79%157, 159, 204, 217, 219, 266, 268, 276–277, 307–308, 340, 342, 384, 396, 400, 402–403, 405–406, 408–409, 412, 416, 418–420, 424, 426–428, 432–437, 440–442, 467–468, 54–55, 57–58, 61, 65, 67–69, 73, 75–77
   igdb_genres_api.dart8.33%100%100%8.33%11–12, 15, 20–21, 23, 27, 29–32
   igdb_http_client.dart98.65%100%100%98.65%35
   igdb_platforms_api.dart97.06%100%100%97.06%44
   igdb_types.dart100%100%100%100%
lib/core/api/kitsu
   kitsu_anime_api.dart65.96%100%100%65.96%25–27, 47–48, 73–74, 80, 82, 84–90
   kitsu_episode_api.dart97.73%100%100%97.73%29
   kitsu_http_client.dart90.91%100%100%90.91%73–74
   kitsu_manga_api.dart83.33%100%100%83.33%25–27, 61–63
   kitsu_mapping_api.dart96.23%100%100%96.23%102–103
   kitsu_types.dart100%100%100%100%
lib/core/api/mangabaka
   mangabaka_http_client.dart80%100%100%80%12, 60–61
   mangabaka_manga_api.dart88.89%100%100%88.89%26–29, 31, 33
   mangabaka_tags_api.dart100%100%100%100%
   mangabaka_types.dart100%100%100%100%
lib/core/api/mangadex
   mangadex_http_client.dart80%100%100%80%12, 58–59
   mangadex_manga_api.dart91.57%100%100%91.57%102, 51–54, 59–60
   mangadex_tags_api.dart80%100%100%80%30–31
   mangadex_types.dart66.67%100%100%66.67%18–19
lib/core/api/musicbrainz
   musicbrainz_http_client.dart88.89%100%100%88.89%13, 54, 83
   musicbrainz_release_group_api.dart53.19%100%100%53.19%111–112, 134, 139–141, 146,

hcan359 added 3 commits September 14, 2026 20:18
Only the Windows and Android jobs defined SIMKL_CLIENT_ID, so both
desktop builds shipped without the client id and every Simkl call
failed at authorization.

Linux also leaves the experimental tier: the release artifact drops the
-experimental suffix and the README documents what the bundle needs
from the distribution.
A GTK header bar is GNOME's own chrome and reads as a foreign titlebar
under any other desktop. The X11 probe cannot answer on Wayland, so the
environment decides first.
A dated board offers four views instead of the day toggle: a plain
list, a weekday bucket that folds a whole season onto its air day, a
single-day bucket and a week range. Anime this season and new episodes
this week open by weekday, anime next season by week.

Rows widen to fifty cards, AniList's page cap, and the grid picks its
column count from the pane width instead of a maximum card width. The
TV episodes row stays at twenty, where every card costs a details call.
@github-actions

Copy link
Copy Markdown

Coverage after merging release/0.44 into main will be

57.23%

Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
lib
   app.dart75%100%100%75%136, 138, 140, 142–144, 146–147, 35–36, 69–70, 92
   main.dart1.96%100%100%1.96%105–108, 112, 114–121, 124, 23–26, 28–29, 31–35, 40, 44, 48, 50–51, 55, 57–59, 64–65, 69–72, 75, 77–79, 81, 92, 94–95, 98–99
lib/core/api
   anilist_api.dart74.42%100%100%74.42%119, 130–131, 152–153, 155–156, 158, 163, 169, 174
   api_dio.dart28.57%100%100%28.57%28–29, 32, 40, 44–45, 47, 49–51
   api_error_detail.dart100%100%100%100%
   api_error_extract.dart100%100%100%100%
   comicvine_api.dart90.82%100%100%90.82%140, 194, 225, 227, 229–230, 232, 31–32
   fantlab_api.dart100%100%100%100%
   google_books_api.dart89.55%100%100%89.55%141, 161, 163–164, 166, 30–31
   hardcover_api.dart84.85%100%100%84.85%20–21, 44, 61–62
   host_rate_limiter.dart80.95%100%100%80.95%66, 70, 72–73
   igdb_api.dart80%100%100%80%137, 149, 165, 20–23, 44, 49
   kitsu_api.dart92.86%100%100%92.86%106, 66
   kodi_api.dart89.34%100%100%89.34%234, 236, 287, 293–294, 321, 331, 46–51
   listenbrainz_api.dart0%100%100%0%101, 103, 111, 113, 115, 117–123, 126–129, 13, 134, 139, 142–145, 33–34, 36–44, 51, 53, 61, 65, 68, 70, 72, 74, 78–84, 88, 95
   mangabaka_api.dart91.67%100%100%91.67%50
   mangadex_api.dart91.67%100%100%91.67%55
   musicbrainz_api.dart0%100%100%0%14–15, 21, 32, 44–45, 47, 51, 53–54, 56–57, 59, 63, 65, 68–71
   openlibrary_api.dart77.78%100%100%77.78%47–48
   podcast_index_api.dart79.10%100%100%79.10%110–111, 132–133, 138, 140, 142, 20–21, 41–42, 46, 78–79
   proxy_rewrite_interceptor.dart100%100%100%100%
   ra_api.dart66.67%100%100%66.67%17, 33, 52, 56, 58, 62, 64–65, 67
   screenscraper_api.dart91.30%100%100%91.30%11–12, 203, 207, 210–213
   simkl_api.dart96.55%100%100%96.55%88
   steam_api.dart93.48%100%100%93.48%69, 8–9
   steamgriddb_api.dart95.65%100%100%95.65%17
   tmdb_api.dart92.68%100%100%92.68%158, 163, 24, 59, 87, 92
   tvdb_api.dart75%100%100%75%100–101, 109, 118, 71, 78–79, 93
   tvmaze_api.dart90.91%100%100%90.91%30
   vndb_api.dart85.71%100%100%85.71%10–11
lib/core/api/anilist
   anilist_graphql_client.dart82%100%100%82%121–124, 129–130, 132–134
   anilist_mal_lookup_api.dart1.52%100%100%1.52%101, 104, 110, 112–116, 120–122, 125–127, 134–135, 137, 140–142, 146–147, 149, 152–154, 158–159, 16, 161, 165, 169, 172, 175–176, 178, 180, 20–24, 29–33, 40, 45, 47, 54, 59, 61, 68, 75–76, 78–79, 82, 85–86, 93, 95, 97–98
   anilist_media_api.dart80.17%100%100%80.17%165–166, 201, 209–211, 246–248, 289–290, 295–296, 299–300, 321, 324, 48–49, 52, 85–86, 89
   anilist_media_parser.dart96.97%100%100%96.97%135, 8
   anilist_queries.dart93.75%100%100%93.75%14
   anilist_types.dart100%100%100%100%
   anilist_user_list_api.dart98.36%100%100%98.36%127
lib/core/api/episode_source
   kitsu_episode_source.dart94.83%100%100%94.83%104–106
   tmdb_episode_source.dart100%100%100%100%
   tv_episode_source.dart100%100%100%100%
   tvdb_episode_source.dart100%100%100%100%
   tvmaze_episode_source.dart82.35%100%100%82.35%39–41
lib/core/api/fantlab
   fantlab_editions.dart100%100%100%100%
   fantlab_http_client.dart71.43%100%100%71.43%15, 19, 45, 61–62, 64
   fantlab_search_api.dart96.88%100%100%96.88%72
   fantlab_types.dart100%100%100%100%
   fantlab_works_api.dart89.29%100%100%89.29%25, 39, 65
lib/core/api/hardcover
   hardcover_graphql_client.dart80%100%100%80%119–120, 122, 126, 129–130, 37, 63, 65
   hardcover_search_api.dart100%100%100%100%
   hardcover_types.dart94.87%100%100%94.87%10–11
   hardcover_user_library_api.dart100%100%100%100%
lib/core/api/igdb
   igdb_games_api.dart71.79%100%100%71.79%157, 159, 204, 217, 219, 266, 268, 276–277, 307–308, 340, 342, 384, 396, 400, 402–403, 405–406, 408–409, 412, 416, 418–420, 424, 426–428, 432–437, 440–442, 467–468, 54–55, 57–58, 61, 65, 67–69, 73, 75–77
   igdb_genres_api.dart8.33%100%100%8.33%11–12, 15, 20–21, 23, 27, 29–32
   igdb_http_client.dart98.65%100%100%98.65%35
   igdb_platforms_api.dart97.06%100%100%97.06%44
   igdb_types.dart100%100%100%100%
lib/core/api/kitsu
   kitsu_anime_api.dart65.96%100%100%65.96%25–27, 47–48, 73–74, 80, 82, 84–90
   kitsu_episode_api.dart97.73%100%100%97.73%29
   kitsu_http_client.dart90.91%100%100%90.91%73–74
   kitsu_manga_api.dart83.33%100%100%83.33%25–27, 61–63
   kitsu_mapping_api.dart96.23%100%100%96.23%102–103
   kitsu_types.dart100%100%100%100%
lib/core/api/mangabaka
   mangabaka_http_client.dart80%100%100%80%12, 60–61
   mangabaka_manga_api.dart88.89%100%100%88.89%26–29, 31, 33
   mangabaka_tags_api.dart100%100%100%100%
   mangabaka_types.dart100%100%100%100%
lib/core/api/mangadex
   mangadex_http_client.dart80%100%100%80%12, 58–59
   mangadex_manga_api.dart91.57%100%100%91.57%102, 51–54, 59–60
   mangadex_tags_api.dart80%100%100%80%30–31
   mangadex_types.dart66.67%100%100%66.67%18–19
lib/core/api/musicbrainz
   musicbrainz_http_client.dart88.89%100%100%88.89%13, 54, 83
   musicbrainz_release_group_api.dart53.19%100%100%53.19%111–112, 134, 139–141, 146,

Titles with a replay count join the likes page under their own heading and
a third kind toggle; the hub preview counts them too. The activity date
dialog gets a "started and finished this day" action that writes both
dates in one update. What's new covers the showcase and both changes.
@github-actions

Copy link
Copy Markdown

Coverage after merging release/0.44 into main will be

57.32%

Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
lib
   app.dart75%100%100%75%136, 138, 140, 142–144, 146–147, 35–36, 69–70, 92
   main.dart1.96%100%100%1.96%105–108, 112, 114–121, 124, 23–26, 28–29, 31–35, 40, 44, 48, 50–51, 55, 57–59, 64–65, 69–72, 75, 77–79, 81, 92, 94–95, 98–99
lib/core/api
   anilist_api.dart74.42%100%100%74.42%119, 130–131, 152–153, 155–156, 158, 163, 169, 174
   api_dio.dart28.57%100%100%28.57%28–29, 32, 40, 44–45, 47, 49–51
   api_error_detail.dart100%100%100%100%
   api_error_extract.dart100%100%100%100%
   comicvine_api.dart90.82%100%100%90.82%140, 194, 225, 227, 229–230, 232, 31–32
   fantlab_api.dart100%100%100%100%
   google_books_api.dart89.55%100%100%89.55%141, 161, 163–164, 166, 30–31
   hardcover_api.dart84.85%100%100%84.85%20–21, 44, 61–62
   host_rate_limiter.dart80.95%100%100%80.95%66, 70, 72–73
   igdb_api.dart80%100%100%80%137, 149, 165, 20–23, 44, 49
   kitsu_api.dart92.86%100%100%92.86%106, 66
   kodi_api.dart89.34%100%100%89.34%234, 236, 287, 293–294, 321, 331, 46–51
   listenbrainz_api.dart0%100%100%0%101, 103, 111, 113, 115, 117–123, 126–129, 13, 134, 139, 142–145, 33–34, 36–44, 51, 53, 61, 65, 68, 70, 72, 74, 78–84, 88, 95
   mangabaka_api.dart91.67%100%100%91.67%50
   mangadex_api.dart91.67%100%100%91.67%55
   musicbrainz_api.dart0%100%100%0%14–15, 21, 32, 44–45, 47, 51, 53–54, 56–57, 59, 63, 65, 68–71
   openlibrary_api.dart77.78%100%100%77.78%47–48
   podcast_index_api.dart79.10%100%100%79.10%110–111, 132–133, 138, 140, 142, 20–21, 41–42, 46, 78–79
   proxy_rewrite_interceptor.dart100%100%100%100%
   ra_api.dart66.67%100%100%66.67%17, 33, 52, 56, 58, 62, 64–65, 67
   screenscraper_api.dart91.30%100%100%91.30%11–12, 203, 207, 210–213
   simkl_api.dart96.55%100%100%96.55%88
   steam_api.dart93.48%100%100%93.48%69, 8–9
   steamgriddb_api.dart95.65%100%100%95.65%17
   tmdb_api.dart92.68%100%100%92.68%158, 163, 24, 59, 87, 92
   tvdb_api.dart75%100%100%75%100–101, 109, 118, 71, 78–79, 93
   tvmaze_api.dart90.91%100%100%90.91%30
   vndb_api.dart85.71%100%100%85.71%10–11
lib/core/api/anilist
   anilist_graphql_client.dart82%100%100%82%121–124, 129–130, 132–134
   anilist_mal_lookup_api.dart1.52%100%100%1.52%101, 104, 110, 112–116, 120–122, 125–127, 134–135, 137, 140–142, 146–147, 149, 152–154, 158–159, 16, 161, 165, 169, 172, 175–176, 178, 180, 20–24, 29–33, 40, 45, 47, 54, 59, 61, 68, 75–76, 78–79, 82, 85–86, 93, 95, 97–98
   anilist_media_api.dart80.17%100%100%80.17%165–166, 201, 209–211, 246–248, 289–290, 295–296, 299–300, 321, 324, 48–49, 52, 85–86, 89
   anilist_media_parser.dart96.97%100%100%96.97%135, 8
   anilist_queries.dart93.75%100%100%93.75%14
   anilist_types.dart100%100%100%100%
   anilist_user_list_api.dart98.36%100%100%98.36%127
lib/core/api/episode_source
   kitsu_episode_source.dart94.83%100%100%94.83%104–106
   tmdb_episode_source.dart100%100%100%100%
   tv_episode_source.dart100%100%100%100%
   tvdb_episode_source.dart100%100%100%100%
   tvmaze_episode_source.dart82.35%100%100%82.35%39–41
lib/core/api/fantlab
   fantlab_editions.dart100%100%100%100%
   fantlab_http_client.dart71.43%100%100%71.43%15, 19, 45, 61–62, 64
   fantlab_search_api.dart96.88%100%100%96.88%72
   fantlab_types.dart100%100%100%100%
   fantlab_works_api.dart89.29%100%100%89.29%25, 39, 65
lib/core/api/hardcover
   hardcover_graphql_client.dart80%100%100%80%119–120, 122, 126, 129–130, 37, 63, 65
   hardcover_search_api.dart100%100%100%100%
   hardcover_types.dart94.87%100%100%94.87%10–11
   hardcover_user_library_api.dart100%100%100%100%
lib/core/api/igdb
   igdb_games_api.dart71.79%100%100%71.79%157, 159, 204, 217, 219, 266, 268, 276–277, 307–308, 340, 342, 384, 396, 400, 402–403, 405–406, 408–409, 412, 416, 418–420, 424, 426–428, 432–437, 440–442, 467–468, 54–55, 57–58, 61, 65, 67–69, 73, 75–77
   igdb_genres_api.dart8.33%100%100%8.33%11–12, 15, 20–21, 23, 27, 29–32
   igdb_http_client.dart98.65%100%100%98.65%35
   igdb_platforms_api.dart97.06%100%100%97.06%44
   igdb_types.dart100%100%100%100%
lib/core/api/kitsu
   kitsu_anime_api.dart65.96%100%100%65.96%25–27, 47–48, 73–74, 80, 82, 84–90
   kitsu_episode_api.dart97.73%100%100%97.73%29
   kitsu_http_client.dart90.91%100%100%90.91%73–74
   kitsu_manga_api.dart83.33%100%100%83.33%25–27, 61–63
   kitsu_mapping_api.dart96.23%100%100%96.23%102–103
   kitsu_types.dart100%100%100%100%
lib/core/api/mangabaka
   mangabaka_http_client.dart80%100%100%80%12, 60–61
   mangabaka_manga_api.dart88.89%100%100%88.89%26–29, 31, 33
   mangabaka_tags_api.dart100%100%100%100%
   mangabaka_types.dart100%100%100%100%
lib/core/api/mangadex
   mangadex_http_client.dart80%100%100%80%12, 58–59
   mangadex_manga_api.dart91.57%100%100%91.57%102, 51–54, 59–60
   mangadex_tags_api.dart80%100%100%80%30–31
   mangadex_types.dart66.67%100%100%66.67%18–19
lib/core/api/musicbrainz
   musicbrainz_http_client.dart88.89%100%100%88.89%13, 54, 83
   musicbrainz_release_group_api.dart53.19%100%100%53.19%111–112, 134, 139–141, 146,

…d-safe layout

Keep the previous list under an all-items reload so the showcase, hub
and Home stop flashing when a title is added. Showcase settings are
stored per profile and seeded from the old Discover keys. Search and
Home share one ItemSearch matcher. Release cards draw the same
in-collection badge as poster cards. The sidebar row, Search and Home
scroll instead of overflowing on a landscape phone with the keyboard
up; the date dialog follows the space the keyboard leaves. Whole-day
countdowns use UTC dates so a DST switch does not lose a day.
@github-actions

Copy link
Copy Markdown

Coverage after merging release/0.44 into main will be

57.33%

Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
lib
   app.dart75%100%100%75%136, 138, 140, 142–144, 146–147, 35–36, 69–70, 92
   main.dart1.96%100%100%1.96%105–108, 112, 114–121, 124, 23–26, 28–29, 31–35, 40, 44, 48, 50–51, 55, 57–59, 64–65, 69–72, 75, 77–79, 81, 92, 94–95, 98–99
lib/core/api
   anilist_api.dart74.42%100%100%74.42%119, 130–131, 152–153, 155–156, 158, 163, 169, 174
   api_dio.dart28.57%100%100%28.57%28–29, 32, 40, 44–45, 47, 49–51
   api_error_detail.dart100%100%100%100%
   api_error_extract.dart100%100%100%100%
   comicvine_api.dart90.82%100%100%90.82%140, 194, 225, 227, 229–230, 232, 31–32
   fantlab_api.dart100%100%100%100%
   google_books_api.dart89.55%100%100%89.55%141, 161, 163–164, 166, 30–31
   hardcover_api.dart84.85%100%100%84.85%20–21, 44, 61–62
   host_rate_limiter.dart80.95%100%100%80.95%66, 70, 72–73
   igdb_api.dart80%100%100%80%137, 149, 165, 20–23, 44, 49
   kitsu_api.dart92.86%100%100%92.86%106, 66
   kodi_api.dart89.34%100%100%89.34%234, 236, 287, 293–294, 321, 331, 46–51
   listenbrainz_api.dart0%100%100%0%101, 103, 111, 113, 115, 117–123, 126–129, 13, 134, 139, 142–145, 33–34, 36–44, 51, 53, 61, 65, 68, 70, 72, 74, 78–84, 88, 95
   mangabaka_api.dart91.67%100%100%91.67%50
   mangadex_api.dart91.67%100%100%91.67%55
   musicbrainz_api.dart0%100%100%0%14–15, 21, 32, 44–45, 47, 51, 53–54, 56–57, 59, 63, 65, 68–71
   openlibrary_api.dart77.78%100%100%77.78%47–48
   podcast_index_api.dart79.10%100%100%79.10%110–111, 132–133, 138, 140, 142, 20–21, 41–42, 46, 78–79
   proxy_rewrite_interceptor.dart100%100%100%100%
   ra_api.dart66.67%100%100%66.67%17, 33, 52, 56, 58, 62, 64–65, 67
   screenscraper_api.dart91.30%100%100%91.30%11–12, 203, 207, 210–213
   simkl_api.dart96.55%100%100%96.55%88
   steam_api.dart93.48%100%100%93.48%69, 8–9
   steamgriddb_api.dart95.65%100%100%95.65%17
   tmdb_api.dart92.68%100%100%92.68%158, 163, 24, 59, 87, 92
   tvdb_api.dart75%100%100%75%100–101, 109, 118, 71, 78–79, 93
   tvmaze_api.dart90.91%100%100%90.91%30
   vndb_api.dart85.71%100%100%85.71%10–11
lib/core/api/anilist
   anilist_graphql_client.dart82%100%100%82%121–124, 129–130, 132–134
   anilist_mal_lookup_api.dart1.52%100%100%1.52%101, 104, 110, 112–116, 120–122, 125–127, 134–135, 137, 140–142, 146–147, 149, 152–154, 158–159, 16, 161, 165, 169, 172, 175–176, 178, 180, 20–24, 29–33, 40, 45, 47, 54, 59, 61, 68, 75–76, 78–79, 82, 85–86, 93, 95, 97–98
   anilist_media_api.dart80.17%100%100%80.17%165–166, 201, 209–211, 246–248, 289–290, 295–296, 299–300, 321, 324, 48–49, 52, 85–86, 89
   anilist_media_parser.dart96.97%100%100%96.97%135, 8
   anilist_queries.dart93.75%100%100%93.75%14
   anilist_types.dart100%100%100%100%
   anilist_user_list_api.dart98.36%100%100%98.36%127
lib/core/api/episode_source
   kitsu_episode_source.dart94.83%100%100%94.83%104–106
   tmdb_episode_source.dart100%100%100%100%
   tv_episode_source.dart100%100%100%100%
   tvdb_episode_source.dart100%100%100%100%
   tvmaze_episode_source.dart82.35%100%100%82.35%39–41
lib/core/api/fantlab
   fantlab_editions.dart100%100%100%100%
   fantlab_http_client.dart71.43%100%100%71.43%15, 19, 45, 61–62, 64
   fantlab_search_api.dart96.88%100%100%96.88%72
   fantlab_types.dart100%100%100%100%
   fantlab_works_api.dart89.29%100%100%89.29%25, 39, 65
lib/core/api/hardcover
   hardcover_graphql_client.dart80%100%100%80%119–120, 122, 126, 129–130, 37, 63, 65
   hardcover_search_api.dart100%100%100%100%
   hardcover_types.dart94.87%100%100%94.87%10–11
   hardcover_user_library_api.dart100%100%100%100%
lib/core/api/igdb
   igdb_games_api.dart71.79%100%100%71.79%157, 159, 204, 217, 219, 266, 268, 276–277, 307–308, 340, 342, 384, 396, 400, 402–403, 405–406, 408–409, 412, 416, 418–420, 424, 426–428, 432–437, 440–442, 467–468, 54–55, 57–58, 61, 65, 67–69, 73, 75–77
   igdb_genres_api.dart8.33%100%100%8.33%11–12, 15, 20–21, 23, 27, 29–32
   igdb_http_client.dart98.65%100%100%98.65%35
   igdb_platforms_api.dart97.06%100%100%97.06%44
   igdb_types.dart100%100%100%100%
lib/core/api/kitsu
   kitsu_anime_api.dart65.96%100%100%65.96%25–27, 47–48, 73–74, 80, 82, 84–90
   kitsu_episode_api.dart97.73%100%100%97.73%29
   kitsu_http_client.dart90.91%100%100%90.91%73–74
   kitsu_manga_api.dart83.33%100%100%83.33%25–27, 61–63
   kitsu_mapping_api.dart96.23%100%100%96.23%102–103
   kitsu_types.dart100%100%100%100%
lib/core/api/mangabaka
   mangabaka_http_client.dart80%100%100%80%12, 60–61
   mangabaka_manga_api.dart88.89%100%100%88.89%26–29, 31, 33
   mangabaka_tags_api.dart100%100%100%100%
   mangabaka_types.dart100%100%100%100%
lib/core/api/mangadex
   mangadex_http_client.dart80%100%100%80%12, 58–59
   mangadex_manga_api.dart91.57%100%100%91.57%102, 51–54, 59–60
   mangadex_tags_api.dart80%100%100%80%30–31
   mangadex_types.dart66.67%100%100%66.67%18–19
lib/core/api/musicbrainz
   musicbrainz_http_client.dart88.89%100%100%88.89%13, 54, 83
   musicbrainz_release_group_api.dart53.19%100%100%53.19%111–112, 134, 139–141, 146,

@hacan359
hacan359 merged commit 1b2d59b into main Sep 16, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant