public static boolean isBreakpointAvailable(
      final int id, final FileDownloadModel model, final String path) {
    boolean result = false;

    do {
      if (path == null) {
        if (FileDownloadLog.NEED_LOG) {
          FileDownloadLog.d(FileDownloadMgr.class, "can't continue %d path = null", id);
        }
        break;
      }

      File file = new File(path);
      final boolean isExists = file.exists();
      final boolean isDirectory = file.isDirectory();

      if (!isExists || isDirectory) {
        if (FileDownloadLog.NEED_LOG) {
          FileDownloadLog.d(
              FileDownloadMgr.class,
              "can't continue %d file not suit, exists[%B], directory[%B]",
              id,
              isExists,
              isDirectory);
        }
        break;
      }

      final long fileLength = file.length();

      if (model.getSoFar() == 0) {
        if (FileDownloadLog.NEED_LOG) {
          FileDownloadLog.d(
              FileDownloadMgr.class, "can't continue %d the downloaded-record is zero.", id);
        }
        break;
      }

      if (fileLength < model.getSoFar()
          || (model.getTotal() != -1 // not chunk transfer encoding data
              && (fileLength > model.getTotal() || model.getSoFar() >= model.getTotal()))) {
        // dirty data.
        if (FileDownloadLog.NEED_LOG) {
          FileDownloadLog.d(
              FileDownloadMgr.class,
              "can't continue %d dirty data" + " fileLength[%d] sofar[%d] total[%d]",
              id,
              fileLength,
              model.getSoFar(),
              model.getTotal());
        }
        break;
      }

      result = true;
    } while (false);

    return result;
  }
  public long getSoFar(final int id) {
    final FileDownloadModel model = mHelper.find(id);
    if (model == null) {
      return 0;
    }

    return model.getSoFar();
  }