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

com.yodlee.sdk.client.ProgressResponseBody Maven / Gradle / Ivy

There is a newer version: 1.0.29.beta1
Show newest version
/**
 * Copyright (c) 2019 Yodlee, Inc. All Rights Reserved.
 *
 * Licensed under the MIT License. See LICENSE file in the project root for license information.
 */
/*
 * Yodlee Core APIs This file describes the Yodlee Platform APIs, using the swagger notation. You can use this swagger
 * file to generate client side SDKs to the Yodlee Platform APIs for many different programming languages. You can
 * generate a client SDK for Python, Java, javascript, PHP or other languages according to your development needs. For
 * more details about our APIs themselves, please refer to https://developer.yodlee.com/Yodlee_API/.
 *
 * OpenAPI spec version: 1.1.0 Contact: [email protected]
 *
 * 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.yodlee.sdk.client;

import java.io.IOException;
import okhttp3.MediaType;
import okhttp3.ResponseBody;
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() {
		return responseBody.contentLength();
	}

	@Override
	public BufferedSource source() {
		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 - 2025 Weber Informatics LLC | Privacy Policy