package com.wm.remusic.provider; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import com.wm.remusic.info.Playlist; import java.util.ArrayList; /** * Created by wm on 2016/3/3. */ public class PlaylistInfo { private static PlaylistInfo sInstance = null; private MusicDB mMusicDatabase = null; public PlaylistInfo(final Context context) { mMusicDatabase = MusicDB.getInstance(context); } public static final synchronized PlaylistInfo getInstance(final Context context) { if (sInstance == null) { sInstance = new PlaylistInfo(context.getApplicationContext()); } return sInstance; } public void onCreate(final SQLiteDatabase db) { db.execSQL("CREATE TABLE IF NOT EXISTS " + PlaylistInfoColumns.NAME + " (" + PlaylistInfoColumns.PLAYLIST_ID + " LONG NOT NULL," + PlaylistInfoColumns.PLAYLIST_NAME + " CHAR NOT NULL," + PlaylistInfoColumns.SONG_COUNT + " INT NOT NULL, " + PlaylistInfoColumns.ALBUM_ART + " CHAR, " + PlaylistInfoColumns.AUTHOR + " CHAR );"); } public void onUpgrade(final SQLiteDatabase db, final int oldVersion, final int newVersion) { } public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + PlaylistInfoColumns.NAME); onCreate(db); } public synchronized void addPlaylist(long playlistid, String name, int count, String albumart, String author) { final SQLiteDatabase database = mMusicDatabase.getWritableDatabase(); database.beginTransaction(); try { ContentValues values = new ContentValues(5); values.put(PlaylistInfoColumns.PLAYLIST_ID, playlistid); values.put(PlaylistInfoColumns.PLAYLIST_NAME, name); values.put(PlaylistInfoColumns.SONG_COUNT, count); values.put(PlaylistInfoColumns.ALBUM_ART, albumart); values.put(PlaylistInfoColumns.AUTHOR, author); database.insert(PlaylistInfoColumns.NAME, null, values); database.setTransactionSuccessful(); } finally { database.endTransaction(); } } public synchronized void addPlaylist(ArrayList<Playlist> playlists) { final SQLiteDatabase database = mMusicDatabase.getWritableDatabase(); database.beginTransaction(); try { for (int i = 0; i < playlists.size(); i++) { ContentValues values = new ContentValues(5); values.put(PlaylistInfoColumns.PLAYLIST_ID, playlists.get(i).id); values.put(PlaylistInfoColumns.PLAYLIST_NAME, playlists.get(i).name); values.put(PlaylistInfoColumns.SONG_COUNT, playlists.get(i).songCount); values.put(PlaylistInfoColumns.ALBUM_ART, playlists.get(i).albumArt); values.put(PlaylistInfoColumns.AUTHOR, playlists.get(i).author); database.insert(PlaylistInfoColumns.NAME, null, values); } database.setTransactionSuccessful(); } finally { database.endTransaction(); } } public synchronized void updatePlaylist(long playlistid, int oldcount) { ArrayList<Playlist> results = getPlaylist(); int countt = 0; for (int i = 0; i < results.size(); i++) { if (results.get(i).id == playlistid) { countt = results.get(i).songCount; } } countt = countt + oldcount; update(playlistid, countt); } public synchronized void update(long playlistid, int count) { final SQLiteDatabase database = mMusicDatabase.getWritableDatabase(); database.beginTransaction(); try { ContentValues values = new ContentValues(2); values.put(PlaylistInfoColumns.PLAYLIST_ID, playlistid); //values.put(PlaylistInfoColumns.PLAYLIST_NAME, name); values.put(PlaylistInfoColumns.SONG_COUNT, count); database.update(PlaylistInfoColumns.NAME, values, PlaylistInfoColumns.PLAYLIST_ID + " = " + playlistid, null); database.setTransactionSuccessful(); } finally { database.endTransaction(); } } public synchronized void update(long playlistid, int count, String album) { final SQLiteDatabase database = mMusicDatabase.getWritableDatabase(); database.beginTransaction(); try { ContentValues values = new ContentValues(3); values.put(PlaylistInfoColumns.PLAYLIST_ID, playlistid); values.put(PlaylistInfoColumns.SONG_COUNT, count); values.put(PlaylistInfoColumns.ALBUM_ART, album); database.update(PlaylistInfoColumns.NAME, values, PlaylistInfoColumns.PLAYLIST_ID + " = " + playlistid, null); database.setTransactionSuccessful(); } finally { database.endTransaction(); } } //删除本地文件时更新播放列表歌曲数量信息 public void updatePlaylistMusicCount(long[] PlaylistId) { SQLiteDatabase database = null; final StringBuilder selection = new StringBuilder(); selection.append(PlaylistInfoColumns.PLAYLIST_ID + " IN ("); for (int i = 0; i < PlaylistId.length; i++) { selection.append(PlaylistId[i]); if (i < PlaylistId.length - 1) { selection.append(","); } } selection.append(")"); Cursor cursor = null; try { cursor = mMusicDatabase.getReadableDatabase().query(PlaylistInfoColumns.NAME, null, selection.toString(), null, null, null, null); if (cursor != null && cursor.moveToFirst()) { database = mMusicDatabase.getWritableDatabase(); database.beginTransaction(); do { int count = cursor.getInt(cursor.getColumnIndex(PlaylistInfoColumns.SONG_COUNT)) - 1; long playlistid = cursor.getLong(cursor.getColumnIndex(PlaylistInfoColumns.PLAYLIST_ID)); if (count == 0) { database.delete(PlaylistInfoColumns.NAME, PlaylistInfoColumns.PLAYLIST_ID + " = ?", new String[] {String.valueOf(playlistid)}); } else { ContentValues values = new ContentValues(2); values.put(PlaylistInfoColumns.PLAYLIST_ID, playlistid); values.put(PlaylistInfoColumns.SONG_COUNT, count); database.update(PlaylistInfoColumns.NAME, values, PlaylistInfoColumns.PLAYLIST_ID + " = " + playlistid, null); } // update(playlistid,count); } while (cursor.moveToNext()); database.setTransactionSuccessful(); } } finally { database.endTransaction(); if (cursor != null) { cursor.close(); cursor = null; } } } public void deletePlaylist(final long PlaylistId) { final SQLiteDatabase database = mMusicDatabase.getWritableDatabase(); database.delete(PlaylistInfoColumns.NAME, PlaylistInfoColumns.PLAYLIST_ID + " = ?", new String[] {String.valueOf(PlaylistId)}); } public synchronized boolean hasPlaylist(final long PlaylistId) { Cursor cursor = null; try { cursor = mMusicDatabase.getReadableDatabase().query(PlaylistInfoColumns.NAME, null, PlaylistInfoColumns.PLAYLIST_ID + " = ?", new String[] {String.valueOf(PlaylistId)}, null, null, null); if (cursor != null && cursor.moveToFirst()) { return true; } return false; } finally { if (cursor != null) { cursor.close(); cursor = null; } } } public synchronized void deletePlaylist(final long[] PlaylistId) { final StringBuilder selection = new StringBuilder(); selection.append(PlaylistInfoColumns.PLAYLIST_ID + " IN ("); for (int i = 0; i < PlaylistId.length; i++) { selection.append(PlaylistId[i]); if (i < PlaylistId.length - 1) { selection.append(","); } } selection.append(")"); final SQLiteDatabase database = mMusicDatabase.getWritableDatabase(); database.delete(PlaylistInfoColumns.NAME, selection.toString(), null); } public void deleteAll() { final SQLiteDatabase database = mMusicDatabase.getWritableDatabase(); database.delete(PlaylistInfoColumns.NAME, null, null); } public synchronized ArrayList<Playlist> getPlaylist() { ArrayList<Playlist> results = new ArrayList<>(); Cursor cursor = null; try { cursor = mMusicDatabase.getReadableDatabase().query(PlaylistInfoColumns.NAME, null, null, null, null, null, null); if (cursor != null && cursor.moveToFirst()) { results.ensureCapacity(cursor.getCount()); do { if (cursor.getString(4).equals("local")) results.add(new Playlist(cursor.getLong(0), cursor.getString(1), cursor.getInt(2), cursor.getString(3), cursor.getString(4))); } while (cursor.moveToNext()); } return results; } finally { if (cursor != null) { cursor.close(); cursor = null; } } } public synchronized ArrayList<Playlist> getNetPlaylist() { ArrayList<Playlist> results = new ArrayList<>(); Cursor cursor = null; try { cursor = mMusicDatabase.getReadableDatabase().query(PlaylistInfoColumns.NAME, null, null, null, null, null, null); if (cursor != null && cursor.moveToFirst()) { results.ensureCapacity(cursor.getCount()); do { if (!cursor.getString(4).equals("local")) results.add(new Playlist(cursor.getLong(0), cursor.getString(1), cursor.getInt(2), cursor.getString(3), cursor.getString(4))); } while (cursor.moveToNext()); } return results; } finally { if (cursor != null) { cursor.close(); cursor = null; } } } public interface PlaylistInfoColumns { /* Table name */ String NAME = "playlist_info"; /* Album IDs column */ String PLAYLIST_ID = "playlist_id"; /* Time played column */ String PLAYLIST_NAME = "playlist_name"; String SONG_COUNT = "count"; String ALBUM_ART = "album_art"; String AUTHOR = "author"; } }