1
0
mirror of https://github.com/owncloud/android-library.git synced 2025-06-09 00:46:15 +00:00

Merge pull request #139 from owncloud/available_offline_folder

Close streams in GetRemoteUserAvatarOperation
This commit is contained in:
David A. Velasco 2016-12-09 12:32:04 +01:00 committed by GitHub
commit fd9067ef4a
2 changed files with 38 additions and 4 deletions

View File

@ -28,6 +28,7 @@ package com.owncloud.android.lib.resources.users;
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
@ -73,6 +74,8 @@ public class GetRemoteUserAvatarOperation extends RemoteOperation {
RemoteOperationResult result = null;
GetMethod get = null;
InputStream inputStream = null;
BufferedInputStream bis = null;
ByteArrayOutputStream bos = null;
try {
String uri =
@ -81,9 +84,19 @@ public class GetRemoteUserAvatarOperation extends RemoteOperation {
;
Log_OC.d(TAG, "avatar URI: " + uri);
get = new GetMethod(uri);
/* Conditioned call is corrupting the input stream of the connection.
Seems that response with 304 is also including the avatar in the response body,
though it's forbidden by HTTPS specification. Besides, HTTPClient library
assumes there is nothing in the response body, but the bytes are read
by the next request, resulting in an exception due to a corrupt status line
Maybe when we have a real API we can enable this again.
if (mCurrentEtag != null && mCurrentEtag.length() > 0) {
get.addRequestHeader(IF_NONE_MATCH_HEADER, "\"" + mCurrentEtag + "\"");
}
*/
//get.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE);
int status = client.executeMethod(get);
if (isSuccess(status)) {
@ -111,8 +124,8 @@ public class GetRemoteUserAvatarOperation extends RemoteOperation {
/// download will be performed to a buffer
inputStream = get.getResponseBodyAsStream();
BufferedInputStream bis = new BufferedInputStream(inputStream);
ByteArrayOutputStream bos = new ByteArrayOutputStream(totalToTransfer);
bis = new BufferedInputStream(inputStream);
bos = new ByteArrayOutputStream(totalToTransfer);
long transferred = 0;
byte[] bytes = new byte[4096];
@ -147,8 +160,24 @@ public class GetRemoteUserAvatarOperation extends RemoteOperation {
} finally {
if (get != null) {
try {
if (inputStream != null) {
client.exhaustResponse(inputStream);
if (bis != null) {
bis.close();
} else {
inputStream.close();
}
}
} catch (IOException i) {
Log_OC.e(TAG, "Unexpected exception closing input stream ", i);
}
try {
if (bos != null) {
bos.close();
}
} catch (IOException o) {
Log_OC.e(TAG, "Unexpected exception closing output stream ", o);
}
get.releaseConnection();
}

View File

@ -68,7 +68,11 @@ public class GetUserAvatarTest extends RemoteTest {
/**
* Test get user avatar only if changed, but wasn't changed
*
* DISABLED: conditioned call has been disabled due to problems with the network stack;
* see comment in src/com/owncloud/android/lib/resources/users/GetRemoteUserAvatarOperation.java#87
*/
/*
public void testGetUserAvatarOnlyIfChangedAfterUnchanged() {
RemoteOperationResult result = mActivity.getUserAvatar(AVATAR_DIMENSION, null);
ResultData userAvatar = (ResultData) result.getData().get(0);
@ -79,6 +83,7 @@ public class GetUserAvatarTest extends RemoteTest {
assertFalse(result.isSuccess());
assertTrue(result.getHttpCode() == HttpStatus.SC_NOT_MODIFIED);
}
*/
/**
* Test get user avatar only if changed, and was changed