1
0
mirror of https://github.com/owncloud/android-library.git synced 2025-06-09 08:56:22 +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.BufferedInputStream;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.ArrayList; import java.util.ArrayList;
@ -73,6 +74,8 @@ public class GetRemoteUserAvatarOperation extends RemoteOperation {
RemoteOperationResult result = null; RemoteOperationResult result = null;
GetMethod get = null; GetMethod get = null;
InputStream inputStream = null; InputStream inputStream = null;
BufferedInputStream bis = null;
ByteArrayOutputStream bos = null;
try { try {
String uri = String uri =
@ -81,9 +84,19 @@ public class GetRemoteUserAvatarOperation extends RemoteOperation {
; ;
Log_OC.d(TAG, "avatar URI: " + uri); Log_OC.d(TAG, "avatar URI: " + uri);
get = new GetMethod(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) { if (mCurrentEtag != null && mCurrentEtag.length() > 0) {
get.addRequestHeader(IF_NONE_MATCH_HEADER, "\"" + mCurrentEtag + "\""); get.addRequestHeader(IF_NONE_MATCH_HEADER, "\"" + mCurrentEtag + "\"");
} }
*/
//get.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE); //get.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE);
int status = client.executeMethod(get); int status = client.executeMethod(get);
if (isSuccess(status)) { if (isSuccess(status)) {
@ -111,8 +124,8 @@ public class GetRemoteUserAvatarOperation extends RemoteOperation {
/// download will be performed to a buffer /// download will be performed to a buffer
inputStream = get.getResponseBodyAsStream(); inputStream = get.getResponseBodyAsStream();
BufferedInputStream bis = new BufferedInputStream(inputStream); bis = new BufferedInputStream(inputStream);
ByteArrayOutputStream bos = new ByteArrayOutputStream(totalToTransfer); bos = new ByteArrayOutputStream(totalToTransfer);
long transferred = 0; long transferred = 0;
byte[] bytes = new byte[4096]; byte[] bytes = new byte[4096];
@ -147,8 +160,24 @@ public class GetRemoteUserAvatarOperation extends RemoteOperation {
} finally { } finally {
if (get != null) { if (get != null) {
if (inputStream != null) { try {
client.exhaustResponse(inputStream); 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(); get.releaseConnection();
} }

View File

@ -68,7 +68,11 @@ public class GetUserAvatarTest extends RemoteTest {
/** /**
* Test get user avatar only if changed, but wasn't changed * 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() { public void testGetUserAvatarOnlyIfChangedAfterUnchanged() {
RemoteOperationResult result = mActivity.getUserAvatar(AVATAR_DIMENSION, null); RemoteOperationResult result = mActivity.getUserAvatar(AVATAR_DIMENSION, null);
ResultData userAvatar = (ResultData) result.getData().get(0); ResultData userAvatar = (ResultData) result.getData().get(0);
@ -79,6 +83,7 @@ public class GetUserAvatarTest extends RemoteTest {
assertFalse(result.isSuccess()); assertFalse(result.isSuccess());
assertTrue(result.getHttpCode() == HttpStatus.SC_NOT_MODIFIED); assertTrue(result.getHttpCode() == HttpStatus.SC_NOT_MODIFIED);
} }
*/
/** /**
* Test get user avatar only if changed, and was changed * Test get user avatar only if changed, and was changed