//package com.wm.remusic.downmusic; // //import android.content.Context; //import android.util.Log; //import android.util.SparseArray; // //import com.squareup.okhttp.OkHttpClient; //import com.wm.remusic.provider.DownFileStore; // //import java.util.ArrayList; //import java.util.HashMap; //import java.util.List; //import java.util.Map; //import java.util.concurrent.ExecutorService; //import java.util.concurrent.Executors; //import java.util.concurrent.Future; // ///** // * Created by dzc on 15/11/21. // */ //public class DownloadManager implements DownloadTaskListener{ // private static final String TAG = "DownloadManager"; // private Context context; // private static DownloadManager downloadManager; // private static DownFileStore downFileStore; // private int mPoolSize = 1; // private ExecutorService executorService; // private Map<String, Future> futureMap; // private OkHttpClient client; // private List<DownloadDBEntity> allTaskEntity = new ArrayList<>(); // private ArrayList<DownloadTask> prepareTaskList = new ArrayList<>(); // private DownloadTask currentTask; // // public Map<String, DownloadTask> getCurrentTaskList() { // return currentTaskList; // } // // private Map<String, DownloadTask> currentTaskList = new HashMap<>(); // // public void init() { // executorService = Executors.newFixedThreadPool(mPoolSize); // futureMap = new HashMap<>(); // downFileStore = DownFileStore.getInstance(context); // client = new OkHttpClient(); // allTaskEntity = loadAllDownloadEntityFromDB(); // } // // private DownloadManager() { // init(); // } // // private DownloadManager(Context context) { // this.context = context; // init(); // } // // public static DownloadManager getInstance(Context context) { // if (downloadManager == null) { // downloadManager = new DownloadManager(context); // } // return downloadManager; // } // // public synchronized void addDownloadTask(DownloadTask task, DownloadTaskListener listener) { // if (null != currentTaskList.get(task.getId()) && task.getDownloadStatus() != DownloadStatus.DOWNLOAD_STATUS_INIT) { // Log.d(TAG, "task already exist"); // return; // } // DownloadDBEntity dbEntity = new DownloadDBEntity(task.getId(), task.getTotalSize(), // task.getCompletedSize(), task.getUrl(), task.getSaveDirPath(), task.getFileName(),task.getArtistName(), task.getDownloadStatus()); // downFileStore.insert(dbEntity); // task.setPreparingDown(true); // allTaskEntity.add(dbEntity); // prepareTaskList.add(task); // currentTaskList.put(task.getId(), task); // if(currentTask != null){ // return; // } // // task.setDownloadStatus(DownloadStatus.DOWNLOAD_STATUS_PREPARE); // task.setdownFileStore(downFileStore); // task.setHttpClient(client); // task.addDownloadListener(this); // if (listener != null) { // task.addDownloadListener(listener); // } // Future future = executorService.submit(task); // futureMap.put(task.getId(), future); // currentTask = task; // // } // // // public void startTask(){ // if(prepareTaskList.size() > 0){ // DownloadTask downloadTask = prepareTaskList.get(0); // if (downloadTask.getDownloadStatus() != DownloadStatus.DOWNLOAD_STATUS_COMPLETED) { // downloadTask.setDownloadStatus(DownloadStatus.DOWNLOAD_STATUS_PREPARE); // downloadTask.setdownFileStore(downFileStore); // downloadTask.setHttpClient(client); // Future future = executorService.submit(downloadTask); // futureMap.put(downloadTask.getId(), future); // } // } // } // // /** // * if return null,the task does not exist // * // * @param taskId // * @return // */ // public void resume(String taskId) { // DownloadTask downloadTask = getCurrentTaskById(taskId); // if(downloadTask == null){ // downloadTask = getDBTaskById(taskId); // } // prepareTaskList.add(downloadTask); // if(currentTask == null){ // startTask(); // } // //// if (downloadTask != null) { //// if (downloadTask.getDownloadStatus() != DownloadStatus.DOWNLOAD_STATUS_COMPLETED) { //// downloadTask.setDownloadStatus(DownloadStatus.DOWNLOAD_STATUS_PREPARE); //// downloadTask.setdownFileStore(downFileStore); //// downloadTask.setHttpClient(client); //// Future future = executorService.submit(downloadTask); //// futureMap.put(downloadTask.getId(), future); //// } //// //// } else { //// downloadTask = getDBTaskById(taskId); //// if (downloadTask != null) { //// currentTaskList.put(taskId, downloadTask); //// downloadTask.setDownloadStatus(DownloadStatus.DOWNLOAD_STATUS_PREPARE); //// downloadTask.setdownFileStore(downFileStore); //// downloadTask.setHttpClient(client); //// Future future = executorService.submit(downloadTask); //// futureMap.put(downloadTask.getId(), future); //// } //// } //// return downloadTask; // } // // //// /** //// * if return null,the task does not exist //// * @param taskId //// * @return //// */ //// public void resume(String taskId){ ////// Log.e("taskid",taskId); ////// DownloadTask downloadTask = getCurrentTaskId(taskId); ////// if(downloadTask!=null){ ////// Log.e("taskid","is exits in current"); ////// Log.e("task status",downloadTask.getDownloadStatus() + ""); ////// if(downloadTask.getDownloadStatus()!=DownloadStatus.DOWNLOAD_STATUS_COMPLETED){ ////// Log.e("taskid","to run"); ////// Future future = executorService.submit(downloadTask); ////// Log.e("taskid","run"); ////// futureMap.put(downloadTask.getId(),future); ////// } ////// ////// }else{ //// //// DownloadTask downloadTask = getDBTaskById(taskId); //// //// if(downloadTask!=null){ //// currentTaskList.put(taskId,downloadTask); //// Future future = executorService.submit(downloadTask); //// futureMap.put(downloadTask.getId(),future); //// } //// // } //// // return downloadTask; //// } // // // public void addDownloadListener(DownloadTask task, DownloadTaskListener listener) { // task.addDownloadListener(listener); // } // // public void removeDownloadListener(DownloadTask task, DownloadTaskListener listener) { // task.removeDownloadListener(listener); // } // // public void addDownloadTask(DownloadTask task) { // addDownloadTask(task, null); // } // // public void cancel(DownloadTask task) { // task.cancel(); // currentTaskList.remove(task.getId()); // prepareTaskList.remove(task); // futureMap.remove(task.getId()); // task.setDownloadStatus(DownloadStatus.DOWNLOAD_STATUS_CANCEL); // downFileStore.deleteTask(task.getId()); // } // // public void cancel(String taskId) { // DownloadTask task = getTaskById(taskId); // if (task != null) { // cancel(task); // } // } // // public void pause(DownloadTask task) { // task.pause(); // currentTaskList.remove(task.getId()); // futureMap.remove(task.getId()); // } // // public void pause(String taskId) { // DownloadTask task = getTaskById(taskId); // if (task != null) { // pause(task); // } // } // // // private List<DownloadDBEntity> loadAllDownloadEntityFromDB() { // return downFileStore.getDownLoadedListAll(); // } // // public List<DownloadTask> loadAllDownloadTaskFromDB() { // List<DownloadDBEntity> list = loadAllDownloadEntityFromDB(); // List<DownloadTask> downloadTaskList = null; // if (list != null && !list.isEmpty()) { // downloadTaskList = new ArrayList<>(); // for (DownloadDBEntity entity : list) { // downloadTaskList.add(DownloadTask.parse(entity, context)); // } // } // return downloadTaskList; // } // // public List<DownloadTask> loadDownloadingTaskFromDB() { // List<DownloadDBEntity> list = loadAllDownloadEntityFromDB(); // List<DownloadTask> downloadTaskList = null; // if (list != null && !list.isEmpty()) { // downloadTaskList = new ArrayList<>(); // for (DownloadDBEntity entity : list) { // if (entity.getCompletedSize().equals(entity.getTotalSize())) { // continue; // } // // downloadTaskList.add(DownloadTask.parse(entity, context)); // } // } // return downloadTaskList; // } // // public List<DownloadTask> loadDownloadCompletedTaskFromDB() { // List<DownloadDBEntity> list = loadAllDownloadEntityFromDB(); // List<DownloadTask> downloadTaskList = null; // if (list != null && !list.isEmpty()) { // downloadTaskList = new ArrayList<>(); // for (DownloadDBEntity entity : list) { // if (entity.getCompletedSize().equals(entity.getTotalSize())) // downloadTaskList.add(DownloadTask.parse(entity, context)); // } // } // return downloadTaskList; // } // // public DownloadTask getCurrentTaskById(String taskId) { // for(int i = 0 ; i< prepareTaskList.size(); i++){ // if(prepareTaskList.get(i).getId() == taskId){ // return prepareTaskList.get(i); // } // } // return null; // // return currentTaskList.get(taskId); // } // // public boolean isCurrentTask(String taskId) { // DownloadTask task = null; // task = getCurrentTaskById(taskId); // if (task != null) { // return true; // } // return false; // } // // public DownloadTask getTaskById(String taskId) { // DownloadTask task = null; // task = getCurrentTaskById(taskId); // if (task != null) { // return task; // } // return getDBTaskById(taskId); // } // // public DownloadTask getDBTaskById(String taskId) { // DownloadDBEntity entity = downFileStore.getDownLoadedList(taskId); // if (entity != null) { // return DownloadTask.parse(entity, context); // } // return null; // } // // @Override // public void onPrepare(DownloadTask downloadTask) { // // } // // @Override // public void onStart(DownloadTask downloadTask) { // // } // // @Override // public void onDownloading(DownloadTask downloadTask) { // // } // // @Override // public void onPause(DownloadTask downloadTask) { // if(prepareTaskList.size() > 0){ // prepareTaskList.remove(currentTask); // } // currentTask = null; // startTask(); // } // // @Override // public void onCancel(DownloadTask downloadTask) { // if(prepareTaskList.size() > 0){ // prepareTaskList.remove(currentTask); // } // currentTask = null; // startTask(); // } // // @Override // public void onCompleted(DownloadTask downloadTask) { // if(prepareTaskList.size() > 0){ // prepareTaskList.remove(currentTask); // } // currentTask = null; // startTask(); // // } // // @Override // public void onError(DownloadTask downloadTask, int errorCode) { // startTask(); // } // // //}