Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Upgrade from 1.0.10: test gaps in the first import over a legacy library

Open
#1,025 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
35/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Active
Tech stack
android, kotlin

Research direction

Start with TaglibMediaProvider.remapLegacySongs, which the existing LegacySafSongsImportTest bypasses by calling LegacySafSongs.remaps directly, and with SavedQueue.kt line 150 for the unguarded toLong. Read LegacyReleaseUpgradeTest for the migration fixtures and DeleteGuard for the mass-delete protection. Done means one test per numbered gap, with item 4 pinning the current delete behavior. Item 1 first needs a maintainer answer on whether declined-permission SAF songs are kept or deleted.

Written by the indexing model from the issue text.

Description

impact:U2 next-release P3 reach:R2 size:M

Found while auditing the upgrade from 1.0.10 (Play production) to the rewrite. The database migrations (schema 40 → 57) are covered by LegacyReleaseUpgradeTest, and the SAF path remap by LegacySafSongsImportTest. These parts of the first import after the upgrade are not tested:

  1. The real TaglibMediaProvider.remapLegacySongs. The test's fake calls LegacySafSongs.remaps directly, so the production path is untested for: the folder filter, the include trees, and the case where READ_MEDIA_AUDIO / READ_EXTERNAL_STORAGE isn't granted (1.0.10 SAF users never granted it; the rewrite asks once on first launch, #379). What happens to legacy SAF songs if the user declines: kept for the next import, or deleted with their playlist entries?
  2. Remote reimport over legacy rows. No test imports Jellyfin/Emby/Plex over songs saved by 1.0.10 (jellyfin://item/…, emby://item/…, plex://… paths) to show they keep their ids, play counts and playlist entries.
  3. Saved queue. SavedQueue restores queue_ids by song id with an unguarded toLong (SavedQueue.kt:150); the restore after the first import over a 1.0.10 queue is untested.
  4. By design, worth a test that pins it: a legacy SAF song the remap can't match is deleted with its playlist entries on the first import; only DeleteGuard protects the library from a mass delete.

The play-history orphaning from the same remap is #1023.

Dominant language
Kotlin
Stars
231
Forks
28
PR merge metrics
No merged PRs in 30d

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from timusus/Shuttle2

All issues in timusus/Shuttle2

Similar issues

More Kotlin issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.