Exemple #1
0
  @Override
  public List<DownloadJob> getAllDownloads() {
    List<DownloadJob> all = new ArrayList<DownloadJob>();
    if (mDb != null) {
      Cursor query = mDb.query(DOWNLOAD_TABLE, null, null, null, null, null, null);
      DownloadJob job = null;
      try {
        for (query.moveToFirst(); !query.isAfterLast(); query.moveToNext()) {
          String aid = query.getString(query.getColumnIndex(COLUMN_AID));
          String vid = query.getString(query.getColumnIndex(COLUMN_VID));
          // 是否同一个part
          if (job == null
              || !job.getEntry().aid.equals(aid)
              || !job.getEntry().part.vid.equals(vid)) {
            job = buildJob(query);
            all.add(job);
          }
          VideoSegment s = new VideoSegment();
          s.num = query.getInt(query.getColumnIndex(COLUMN_NUM));
          s.size = query.getLong(query.getColumnIndex(COLUMN_TOTAL));
          s.stream = query.getString(query.getColumnIndex(COLUMN_URL));
          s.etag = query.getString(query.getColumnIndex(COLUMN_ETAG));
          s.fileName = query.getString(query.getColumnIndex(COLUMN_DATA));
          s.duration = query.getLong(query.getColumnIndex(COLUMN_DURATION));
          job.getEntry().part.segments.add(s);
          if (AcApp.isExternalStorageAvailable()) {
            if (!TextUtils.isEmpty(job.getEntry().destination) && !TextUtils.isEmpty(s.fileName)) {
              // 设置segment的播放路径为本地文件uri
              // 实现边下边播的功能

              File file = new File(job.getEntry().destination, s.fileName);
              if (file.exists()) {
                s.url = Uri.fromFile(file).toString();
              } else s.url = s.stream;
              int downloadedSize = (int) file.length();
              job.addDownloadedSize(downloadedSize);
              if (query.getInt(query.getColumnIndex(COLUMN_CURRENT)) != downloadedSize) {
                // 数据库中的数据有误!
                // 写入正确的数据
                // XXX: 也许根本就不需要current_bytes这个字段...

                ContentValues values = new ContentValues();
                values.put(COLUMN_CURRENT, downloadedSize);
                updateDownload(job.getEntry().part.vid, s.num, values);
              }
            }
          }

          // 真实的下载进度由file.length来确定比较好。
          // @see downloadTask.setupDestinationFile()
          // int downloadedSize = query.getInt(query.getColumnIndex(COLUMN_CURRENT));
          // job.addDownloadedSize(downloadedSize);

          int totalSize = query.getInt(query.getColumnIndex(COLUMN_TOTAL));
          if (totalSize != -1) job.addTotalSize(totalSize);
        }
      } catch (Exception e) {
      } finally {
        query.close();
      }
    }
    return all;
  }