content: /*
   * Selling Partner API for Listings Items
   * The Selling Partner API for Listings Items (Listings Items API) provides programmatic access to selling partner listings on Amazon. Use this API in collaboration with the Selling Partner API for Product Type Definitions, which you use to retrieve the information about Amazon product types needed to use the Listings Items API.  For more information, see the [Listings Items API Use Case Guide](doc:listings-items-api-v2021-08-01-use-case-guide).
   *
   * OpenAPI spec version: 2021-08-01
   * 
   *
   * 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 io.swagger.client;
  
  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;
              }
          };
      }
  }
  
  
  