All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.tencent.ads.ProgressResponseBody Maven / Gradle / Ivy

There is a newer version: 1.1.85
Show newest version
/*
 * Marketing API
 * Marketing API
 *
 * OpenAPI spec version: 3.0
 *
 *
 * NOTE: This class is auto generated by the swagger code generator program.
 * https://github.com/swagger-api/swagger-codegen.git
 * Do not edit the class manually.
 */

package com.tencent.ads;

import com.squareup.okhttp.MediaType;
import com.squareup.okhttp.ResponseBody;
import java.io.IOException;
import okio.Buffer;
import okio.BufferedSource;
import okio.ForwardingSource;
import okio.Okio;
import okio.Source;

public class ProgressResponseBody extends ResponseBody {

  public interface ProgressListener {
    void update(long bytesRead, long contentLength, boolean done);
  }

  private final ResponseBody responseBody;
  private final ProgressListener progressListener;
  private BufferedSource bufferedSource;

  public ProgressResponseBody(ResponseBody responseBody, ProgressListener progressListener) {
    this.responseBody = responseBody;
    this.progressListener = progressListener;
  }

  @Override
  public MediaType contentType() {
    return responseBody.contentType();
  }

  @Override
  public long contentLength() throws IOException {
    return responseBody.contentLength();
  }

  @Override
  public BufferedSource source() throws IOException {
    if (bufferedSource == null) {
      bufferedSource = Okio.buffer(source(responseBody.source()));
    }
    return bufferedSource;
  }

  private Source source(Source source) {
    return new ForwardingSource(source) {
      long totalBytesRead = 0L;

      @Override
      public long read(Buffer sink, long byteCount) throws IOException {
        long bytesRead = super.read(sink, byteCount);
        // read() returns the number of bytes read, or -1 if this source is exhausted.
        totalBytesRead += bytesRead != -1 ? bytesRead : 0;
        progressListener.update(totalBytesRead, responseBody.contentLength(), bytesRead == -1);
        return bytesRead;
      }
    };
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy