package com.example.ipcplayer.provider;
import com.example.ipcplayer.application.IPCApplication;
import com.example.ipcplayer.utils.LogUtil;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.provider.MediaStore;
public class MusicDBManager {
private static final boolean DEBUG = false;
private static String TAG = "MusicDBManager ";
private MusicDBHelper mDBHelper ;
private SQLiteDatabase mDB = null;
private Context mContext;
private static MusicDBManager mInstance;
private MusicDBManager(Context context){
mContext = context;
mDBHelper = MusicDBHelper.getInstance(context);
mDB = mDBHelper.getWritableDatabase();
}
public static MusicDBManager getInstance(Context context){
if(mInstance == null){
mInstance = new MusicDBManager(context);
}
return mInstance;
}
public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy){
LogUtil.d(TAG + " query()");
Cursor c = null ;
if(isDBOpen()){
c = mDB.query(table, columns, selection, selectionArgs, groupBy, having, orderBy);
}else {
LogUtil.d(TAG + " db is close ");
}
return c ;
}
public long insert(String table, String nullColumnHack, ContentValues values ){
LogUtil.d(TAG + " insert()");
long rowId = -1;
mDB.beginTransaction();
try{
rowId = mDB.insert(table, nullColumnHack, values);
mDB.setTransactionSuccessful();
}catch(Exception e){
LogUtil.d(TAG + " insert db error ");
e.printStackTrace();
}
finally{
mDB.endTransaction();
}
return rowId;
}
public int delete(String table, String whereClause, String[] whereArgs){
LogUtil.d(TAG + " delete()");
return mDB.delete(table, whereClause, whereArgs);
}
public int update(String table, ContentValues values, String whereClause, String[] whereArgs){
LogUtil.d(TAG + " update()");
return mDB.update(table, values, whereClause, whereArgs);
}
public boolean isDBOpen(){
return mDB.isOpen();
}
public void insertLocalData(){
Cursor cursor = getCursorFromMediaStore();
if(cursor == null && cursor.getCount() == 0){
LogUtil.d(TAG+"cursor is null! try find reason ");
return ;
}
// int _IDIndex = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID);
int DISPLAY_NAMEIndex = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME);
int ARTISTIndex = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST);
int ALBUMIndex = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM);
int SIEZIndex = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE);
int DURATIONIndex = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION);
int DATA = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA);
cursor.moveToFirst();
if (mDB != null && mDB.isOpen()) {
mDB.beginTransaction();
do {
// long _Id = cursor.getLong(_IDIndex);
String displayName = cursor.getString(DISPLAY_NAMEIndex);
String artist = cursor.getString(ARTISTIndex);
String albumn = cursor.getString(ALBUMIndex);
long size = cursor.getLong(SIEZIndex);
long duration = cursor.getLong(DURATIONIndex);
String data = cursor.getString(DATA);
StringBuilder sb = new StringBuilder();
sb.append("insert into ");
sb.append(MusicDBHelper.TABLE_MUSICINFO);
sb.append("(size,musicname,artistname,albumnname,_data)");
sb.append("values('");
// sb.append(_Id);
// sb.append("','");
sb.append(size);
sb.append("','");
sb.append(displayName);
sb.append("','");
sb.append(artist);
sb.append("','");
sb.append(albumn);
sb.append("','");
sb.append(data);
sb.append("')");
try{
if (DEBUG) {
LogUtil.d(TAG + "sb.toString = " + sb.toString());
}
mDB.execSQL(sb.toString());
}catch(Exception e){
// LogUtil.e(TAG+"insert to db error! ");
// e.printStackTrace();
}
} while (cursor.moveToNext());
if(cursor != null || cursor.getCount() != 0){
LogUtil.d(TAG+"close cursor it's great");
cursor.close();
cursor = null ;
}
mDB.setTransactionSuccessful();
LogUtil.d(TAG+"wow insert db successful !");
mDB.endTransaction();
}
}
public Cursor getCursorFromMediaStore(){
String[] projection = {
MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.ALBUM,
MediaStore.Audio.Media.SIZE,
MediaStore.Audio.Media.DURATION,
MediaStore.Audio.Media.DATA
};
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String sortOrder = MediaStore.Audio.Media._ID;
Cursor cursor = null;
try{
ContentResolver resolver = mContext.getContentResolver();
cursor = resolver.query(uri, projection, null, null, sortOrder);
}catch(Exception e){
LogUtil.e(TAG+"query mediastore error! " );
e.printStackTrace();
return cursor = null;
}
return cursor;
}
}