diff --git a/src/ch/blinkenlights/android/medialibrary/MediaLibrary.java b/src/ch/blinkenlights/android/medialibrary/MediaLibrary.java index 4cb124ff..32a03d08 100644 --- a/src/ch/blinkenlights/android/medialibrary/MediaLibrary.java +++ b/src/ch/blinkenlights/android/medialibrary/MediaLibrary.java @@ -109,6 +109,7 @@ public class MediaLibrary { */ public static long createPlaylist(Context context, String name) { ContentValues v = new ContentValues(); + v.put(MediaLibrary.PlaylistColumns._ID, hash63(name)); v.put(MediaLibrary.PlaylistColumns.NAME, name); return getBackend(context).insert(MediaLibrary.TABLE_PLAYLISTS, null, v); } @@ -201,6 +202,24 @@ public class MediaLibrary { return MediaStore.Audio.keyFor(name); } + /** + * Simple 63 bit hash function for strings + * + * @param str the string to hash + * @return a positive long + */ + public static long hash63(String str) { + if (str == null) + return 0; + + long hash = 0; + int len = str.length(); + for (int i = 0; i < len ; i++) { + hash = 31*hash + str.charAt(i); + } + return (hash < 0 ? hash*-1 : hash); + } + // Columns of Song entries public interface SongColumns { /** diff --git a/src/ch/blinkenlights/android/medialibrary/MediaScanner.java b/src/ch/blinkenlights/android/medialibrary/MediaScanner.java index d89e4e1d..5795311c 100644 --- a/src/ch/blinkenlights/android/medialibrary/MediaScanner.java +++ b/src/ch/blinkenlights/android/medialibrary/MediaScanner.java @@ -103,7 +103,7 @@ public class MediaScanner implements Handler.Callback { private void scanFile(File file) { String path = file.getAbsolutePath(); - long songId = hash63(path); + long songId = MediaLibrary.hash63(path); HashMap tags = (new Bastp()).getTags(path); if (tags.containsKey("type") == false) @@ -140,9 +140,9 @@ Log.v("VanillaMusic", "> Found mime "+((String)tags.get("type"))); String songnum = data.extractMetadata(MediaMetadataRetriever.METADATA_KEY_CD_TRACK_NUMBER); String composer = data.extractMetadata(MediaMetadataRetriever.METADATA_KEY_COMPOSER); - long albumId = hash63(album); - long artistId = hash63(artist); - long composerId = hash63(composer); + long albumId = MediaLibrary.hash63(album); + long artistId = MediaLibrary.hash63(artist); + long composerId = MediaLibrary.hash63(composer); ContentValues v = new ContentValues(); v.put(MediaLibrary.SongColumns._ID, songId); @@ -190,7 +190,7 @@ Log.v("VanillaMusic", "> Found mime "+((String)tags.get("type"))); if (tags.containsKey("GENRE")) { Vector genres = (Vector)tags.get("GENRE"); for (String genre : genres) { - long genreId = hash63(genre); + long genreId = MediaLibrary.hash63(genre); v.clear(); v.put(MediaLibrary.GenreColumns._ID, genreId); v.put(MediaLibrary.GenreColumns._GENRE, genre); @@ -207,22 +207,5 @@ Log.v("VanillaMusic", "> Found mime "+((String)tags.get("type"))); Log.v("VanillaMusic", "MediaScanner: inserted "+path); } - - /** - * Simple 63 bit hash function for strings - */ - private long hash63(String str) { - if (str == null) - return 0; - - long hash = 0; - int len = str.length(); - for (int i = 0; i < len ; i++) { - hash = 31*hash + str.charAt(i); - } - return (hash < 0 ? hash*-1 : hash); - } - - }