content: package com.wm.remusic.provider;
  
  import android.content.ContentValues;
  import android.content.Context;
  import android.database.Cursor;
  import android.database.sqlite.SQLiteDatabase;
  import android.util.Log;
  
  import com.wm.remusic.downmusic.DownloadDBEntity;
  import com.wm.remusic.downmusic.DownloadStatus;
  
  import java.util.ArrayList;
  
  /**
   * Created by wm on 2016/4/12.
   */
  public class DownFileStore {
  
      private static DownFileStore sInstance = null;
  
      private MusicDB mMusicDatabase = null;
  
      public DownFileStore(final Context context) {
          mMusicDatabase = MusicDB.getInstance(context);
      }
  
      public static synchronized DownFileStore getInstance(final Context context) {
          if (sInstance == null) {
              sInstance = new DownFileStore(context.getApplicationContext());
          }
  
          return sInstance;
      }
  
      public void onCreate(final SQLiteDatabase db) {
          db.execSQL("CREATE TABLE IF NOT EXISTS " + DownFileStoreColumns.NAME + " ("
                  + DownFileStoreColumns.ID + " TEXT NOT NULL PRIMARY KEY," + DownFileStoreColumns.TOOL_SIZE + " INT NOT NULL,"
                  + DownFileStoreColumns.FILE_LENGTH + " INT NOT NULL, " + DownFileStoreColumns.URL + " TEXT NOT NULL,"
                  + DownFileStoreColumns.DIR + " TEXT NOT NULL," + DownFileStoreColumns.FILE_NAME + " TEXT NOT NULL,"
                  + DownFileStoreColumns.ARTIST_NAME + " TEXT NOT NULL,"
                  + DownFileStoreColumns.DOWNSTATUS + " INT NOT NULL);");
      }
  
      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 " + DownFileStoreColumns.NAME);
          onCreate(db);
      }
  
      public synchronized void insert(DownloadDBEntity entity) {
          Log.e("dataen", " id = " + entity.getDownloadId());
          final SQLiteDatabase database = mMusicDatabase.getWritableDatabase();
          database.beginTransaction();
          try {
              ContentValues values = new ContentValues(8);
              values.put(DownFileStoreColumns.ID, entity.getDownloadId());
              values.put(DownFileStoreColumns.TOOL_SIZE, entity.getTotalSize());
              values.put(DownFileStoreColumns.FILE_LENGTH, entity.getCompletedSize());
              values.put(DownFileStoreColumns.URL, entity.getUrl());
              values.put(DownFileStoreColumns.DIR, entity.getSaveDirPath());
              values.put(DownFileStoreColumns.FILE_NAME, entity.getFileName());
              values.put(DownFileStoreColumns.ARTIST_NAME, entity.getArtist());
              values.put(DownFileStoreColumns.DOWNSTATUS, entity.getDownloadStatus());
              database.replace(DownFileStoreColumns.NAME, null, values);
              database.setTransactionSuccessful();
          } finally {
              database.endTransaction();
          }
      }
  
      public synchronized void update(DownloadDBEntity entity) {
  
          final SQLiteDatabase database = mMusicDatabase.getWritableDatabase();
          database.beginTransaction();
          try {
              ContentValues values = new ContentValues(6);
              values.put(DownFileStoreColumns.TOOL_SIZE, entity.getTotalSize());
              values.put(DownFileStoreColumns.FILE_LENGTH, entity.getCompletedSize());
              values.put(DownFileStoreColumns.URL, entity.getUrl());
              values.put(DownFileStoreColumns.DIR, entity.getSaveDirPath());
              values.put(DownFileStoreColumns.FILE_NAME, entity.getFileName());
              values.put(DownFileStoreColumns.DOWNSTATUS, entity.getDownloadStatus());
              database.update(DownFileStoreColumns.NAME, values, DownFileStoreColumns.ID + " = ?",
                      new String[]{entity.getDownloadId()});
              database.setTransactionSuccessful();
          } finally {
              database.endTransaction();
          }
      }
  
      public void deleteTask(String Id) {
          final SQLiteDatabase database = mMusicDatabase.getWritableDatabase();
          database.delete(DownFileStoreColumns.NAME, DownFileStoreColumns.ID + " = ?", new String[]
                  {String.valueOf(Id)});
      }
  
      public void deleteTask(String[] Id) {
          final SQLiteDatabase database = mMusicDatabase.getWritableDatabase();
          database.delete(DownFileStoreColumns.NAME, DownFileStoreColumns.ID + " = ?", Id);
      }
  
      public void deleteDowningTasks() {
          ArrayList<String> results = new ArrayList<>();
          final SQLiteDatabase database = mMusicDatabase.getWritableDatabase();
          Cursor cursor = null;
          try {
              cursor = database.query(DownFileStoreColumns.NAME, null,
                      null, null, null, null, null);
  
              if (cursor != null && cursor.moveToFirst()) {
                  results.ensureCapacity(cursor.getCount());
  
                  do {
                      if (cursor.getInt(7) != DownloadStatus.DOWNLOAD_STATUS_COMPLETED)
                          results.add(cursor.getString(0));
  
                  } while (cursor.moveToNext());
              }
              String[] t = new String[results.size()];
              for (int i = 0; i < results.size(); i++) {
                  t[i] = results.get(i);
              }
              final StringBuilder selection = new StringBuilder();
              selection.append(DownFileStoreColumns.ID + " IN (");
              for (int i = 0; i < t.length; i++) {
                  selection.append(t[i]);
                  if (i < t.length - 1) {
                      selection.append(",");
                  }
              }
              selection.append(")");
              database.delete(DownFileStoreColumns.NAME, selection.toString(), null);
          } finally {
              if (cursor != null) {
                  cursor.close();
                  cursor = null;
              }
          }
  
  
      }
  
      public synchronized void deleteAll() {
          final SQLiteDatabase database = mMusicDatabase.getWritableDatabase();
          database.delete(DownFileStoreColumns.NAME, null, null);
      }
  
      public synchronized DownloadDBEntity getDownLoadedList(String Id) {
          Cursor cursor = null;
          DownloadDBEntity entity = null;
          try {
              cursor = mMusicDatabase.getReadableDatabase().query(DownFileStoreColumns.NAME, null,
                      DownFileStoreColumns.ID + " = ?", new String[]{String.valueOf(Id)}, null, null, null);
              if (cursor == null) {
                  return null;
              }
  
              if (cursor.moveToFirst()) {
  
                  do {
                      entity = new DownloadDBEntity(cursor.getString(0), cursor.getLong(1), cursor.getLong(2),
                              cursor.getString(3), cursor.getString(4), cursor.getString(5), cursor.getString(6), cursor.getInt(7));
                  } while (cursor.moveToNext());
                  return entity;
              } else return null;
  
          } finally {
              if (cursor != null) {
                  cursor.close();
                  cursor = null;
              }
          }
      }
  
      public synchronized ArrayList<DownloadDBEntity> getDownLoadedListAllDowning() {
          ArrayList<DownloadDBEntity> results = new ArrayList<>();
  
          Cursor cursor = null;
          try {
              cursor = mMusicDatabase.getReadableDatabase().query(DownFileStoreColumns.NAME, null,
                      null, null, null, null, null);
  
              if (cursor != null && cursor.moveToFirst()) {
                  results.ensureCapacity(cursor.getCount());
  
                  do {
                      if (cursor.getInt(7) != DownloadStatus.DOWNLOAD_STATUS_COMPLETED)
                          results.add(new DownloadDBEntity(cursor.getString(0), cursor.getLong(1), cursor.getLong(2),
                                  cursor.getString(3), cursor.getString(4), cursor.getString(5), cursor.getString(6), cursor.getInt(7)));
                  } while (cursor.moveToNext());
              }
  
              return results;
          } finally {
              if (cursor != null) {
                  cursor.close();
                  cursor = null;
              }
          }
      }
  
      public synchronized String[] getDownLoadedListAllDowningIds() {
          ArrayList<String> results = new ArrayList<>();
  
          Cursor cursor = null;
          try {
              cursor = mMusicDatabase.getReadableDatabase().query(DownFileStoreColumns.NAME, null,
                      null, null, null, null, null);
  
              if (cursor != null && cursor.moveToFirst()) {
                  results.ensureCapacity(cursor.getCount());
  
                  do {
                      if (cursor.getInt(7) != DownloadStatus.DOWNLOAD_STATUS_COMPLETED)
                          results.add(cursor.getString(0));
  
                  } while (cursor.moveToNext());
              }
              String[] t = new String[results.size()];
              for (int i = 0; i < results.size(); i++) {
                  t[i] = results.get(i);
              }
              return t;
          } finally {
              if (cursor != null) {
                  cursor.close();
                  cursor = null;
              }
          }
      }
  
      public synchronized ArrayList<DownloadDBEntity> getDownLoadedListAll() {
          ArrayList<DownloadDBEntity> results = new ArrayList<>();
  
          Cursor cursor = null;
          try {
              cursor = mMusicDatabase.getReadableDatabase().query(DownFileStoreColumns.NAME, null,
                      null, null, null, null, null);
  
              if (cursor != null && cursor.moveToFirst()) {
                  results.ensureCapacity(cursor.getCount());
  
                  do {
  
                      results.add(new DownloadDBEntity(cursor.getString(0), cursor.getLong(1), cursor.getLong(2),
                              cursor.getString(3), cursor.getString(4), cursor.getString(5), cursor.getString(6), cursor.getInt(7)));
                  } while (cursor.moveToNext());
              }
  
              return results;
          } finally {
              if (cursor != null) {
                  cursor.close();
                  cursor = null;
              }
          }
      }
  
  
      public interface DownFileStoreColumns {
          /* Table name */
          String NAME = "downfile_info";
  
          /* Album IDs column */
          String ID = "id";
  
          /* Time played column */
          String TOOL_SIZE = "totalsize";
  
          String FILE_LENGTH = "complete_length";
  
          String URL = "url";
  
          String DIR = "dir";
          String FILE_NAME = "file_name";
          String ARTIST_NAME = "artist";
          String DOWNSTATUS = "notification_type";
      }
  
  }
  