diff options
| author | 2011-09-21 08:48:46 -0700 | |
|---|---|---|
| committer | 2011-09-21 08:48:46 -0700 | |
| commit | 28b9a063ad359d186cf69b235c5592eb308d2ac4 (patch) | |
| tree | d7ddd735760c7c8722d3579cb4f72acec3b649cf | |
| parent | f888f3ffa06ea8f67dcf417e9ce446c183238b99 (diff) | |
| parent | 7d92a22d9dec42a45cd55fd77d0a86b4b9c6e9df (diff) | |
Merge "MediaScanner: To query row ids of music files when handling playlists."
| -rw-r--r-- | media/java/android/media/MediaScanner.java | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/media/java/android/media/MediaScanner.java b/media/java/android/media/MediaScanner.java index 336d87427655..2d927ad9c583 100644 --- a/media/java/android/media/MediaScanner.java +++ b/media/java/android/media/MediaScanner.java @@ -314,14 +314,14 @@ public class MediaScanner // WARNING: Bulk inserts sounded like a great idea and gave us a good performance improvement, // but unfortunately it also introduced a number of bugs. Many of those bugs were fixed, - // but (at least) two problems are still outstanding: + // but (at least) one problem is still outstanding: // - // 1) Bulk inserts broke the code that sets the default ringtones on first boot - // 2) Bulk inserts broke file based playlists in the case where the playlist is processed - // at the same time the files in the playlist are inserted in the database + // - Bulk inserts broke the code that sets the default ringtones, notifications, and alarms + // on first boot // - // These problems might be solvable by moving the logic to the media provider instead, - // but for now we are disabling bulk inserts until we have solid fixes for these problems. + // This problem might be solvable by moving the logic to the media provider or disabling bulk + // inserts only for those cases. For now, we are disabling bulk inserts until we have a solid + // fix for this problem. private static final boolean ENABLE_BULK_INSERTS = false; // used when scanning the image database so we know whether we have to prune @@ -1464,7 +1464,22 @@ public class MediaScanner } try { - // OK, now we need to add this to the database + // check rowid is set. Rowid may be missing if it is inserted by bulkInsert(). + if (bestMatch.mRowId == 0) { + Cursor c = mMediaProvider.query(mAudioUri, ID_PROJECTION, + MediaStore.Files.FileColumns.DATA + "=?", + new String[] { bestMatch.mPath }, null); + if (c != null) { + if (c.moveToNext()) { + bestMatch.mRowId = c.getLong(0); + } + c.close(); + } + if (bestMatch.mRowId == 0) { + return false; + } + } + // OK, now we are ready to add this to the database values.clear(); values.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, Integer.valueOf(index)); values.put(MediaStore.Audio.Playlists.Members.AUDIO_ID, Long.valueOf(bestMatch.mRowId)); |