Skip to content

Commit cbd5911

Browse files
committed
improve memory footprint
Signed-off-by: alperozturk96 <alper_ozturk@proton.me>
1 parent c35b519 commit cbd5911

3 files changed

Lines changed: 23 additions & 11 deletions

File tree

library/src/main/java/com/owncloud/android/lib/resources/files/ReadFileVersionsRemoteOperation.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.apache.commons.httpclient.HttpStatus;
1919
import org.apache.jackrabbit.webdav.DavConstants;
2020
import org.apache.jackrabbit.webdav.MultiStatus;
21+
import org.apache.jackrabbit.webdav.MultiStatusResponse;
2122
import org.apache.jackrabbit.webdav.client.methods.PropFindMethod;
2223
import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
2324

@@ -112,16 +113,17 @@ protected RemoteOperationResult<ArrayList<FileVersion>> run(OwnCloudClient clien
112113
* @param client Client instance to the remote server where the data were retrieved.
113114
*/
114115
private void readData(MultiStatus remoteData, OwnCloudClient client) {
115-
versions = new ArrayList<>();
116+
MultiStatusResponse[] responses = remoteData.getResponses();
117+
versions = new ArrayList<>(responses.length);
116118

117119
// parse data from remote folder
118120
String splitElement = client.getDavUri().getPath();
119121

120122
// loop to update every child
121-
for (int i = 1; i < remoteData.getResponses().length; ++i) {
123+
for (int i = 1; i < responses.length; ++i) {
122124
versions.add(new FileVersion(
123125
localId,
124-
new WebdavEntry(remoteData.getResponses()[i], splitElement))
126+
new WebdavEntry(responses[i], splitElement))
125127
);
126128
}
127129
}

library/src/main/java/com/owncloud/android/lib/resources/files/ReadFolderRemoteOperation.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.apache.commons.httpclient.HttpStatus;
1818
import org.apache.jackrabbit.webdav.DavConstants;
1919
import org.apache.jackrabbit.webdav.MultiStatus;
20+
import org.apache.jackrabbit.webdav.MultiStatusResponse;
2021
import org.apache.jackrabbit.webdav.client.methods.PropFindMethod;
2122

2223
import java.util.ArrayList;
@@ -80,6 +81,10 @@ protected RemoteOperationResult run(OwnCloudClient client) {
8081
client.exhaustResponse(query.getResponseBodyAsStream());
8182
result = new RemoteOperationResult(false, query);
8283
}
84+
} catch (OutOfMemoryError e) {
85+
mFolderAndFiles = null;
86+
result = new RemoteOperationResult(
87+
new Exception("Not enough memory to read the contents of " + mRemotePath, e));
8388
} catch (Exception e) {
8489
result = new RemoteOperationResult(e);
8590
} finally {
@@ -120,17 +125,20 @@ public boolean isMultiStatus(int status) {
120125
* @return
121126
*/
122127
private void readData(MultiStatus remoteData, OwnCloudClient client) {
123-
mFolderAndFiles = new ArrayList<>();
128+
MultiStatusResponse[] responses = remoteData.getResponses();
129+
String davUriPath = client.getFilesDavUri().getEncodedPath();
124130

125-
// parse data from remote folder
126-
WebdavEntry we = new WebdavEntry(remoteData.getResponses()[0], client.getFilesDavUri().getEncodedPath());
131+
mFolderAndFiles = new ArrayList<>(responses.length);
132+
133+
// parse data from remote folder
134+
WebdavEntry we = new WebdavEntry(responses[0], davUriPath);
127135
mFolderAndFiles.add(new RemoteFile(we));
128136

129137
// loop to update every child
130138
RemoteFile remoteFile;
131-
for (int i = 1; i < remoteData.getResponses().length; ++i) {
139+
for (int i = 1; i < responses.length; ++i) {
132140
/// new OCFile instance with the data from the server
133-
we = new WebdavEntry(remoteData.getResponses()[i], client.getFilesDavUri().getEncodedPath());
141+
we = new WebdavEntry(responses[i], davUriPath);
134142
remoteFile = new RemoteFile(we);
135143
mFolderAndFiles.add(remoteFile);
136144
}

library/src/main/java/com/owncloud/android/lib/resources/trashbin/ReadTrashbinFolderRemoteOperation.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.apache.commons.httpclient.HttpStatus;
1919
import org.apache.jackrabbit.webdav.DavConstants;
2020
import org.apache.jackrabbit.webdav.MultiStatus;
21+
import org.apache.jackrabbit.webdav.MultiStatusResponse;
2122
import org.apache.jackrabbit.webdav.client.methods.PropFindMethod;
2223
import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
2324

@@ -113,15 +114,16 @@ public RemoteOperationResult<List<TrashbinFile>> run(OwnCloudClient client) {
113114
* @param client Client instance to the remote server where the data were retrieved.
114115
*/
115116
private void readData(MultiStatus remoteData, OwnCloudClient client) {
116-
folderAndFiles = new ArrayList<>();
117+
MultiStatusResponse[] responses = remoteData.getResponses();
118+
folderAndFiles = new ArrayList<>(responses.length);
117119

118120
// parse data from remote folder
119121
WebdavEntry we;
120122
String splitElement = client.getDavUri().getPath();
121123

122124
// loop to update every child
123-
for (int i = 1; i < remoteData.getResponses().length; ++i) {
124-
we = new WebdavEntry(remoteData.getResponses()[i], splitElement);
125+
for (int i = 1; i < responses.length; ++i) {
126+
we = new WebdavEntry(responses[i], splitElement);
125127
folderAndFiles.add(new TrashbinFile(we, client.getUserId()));
126128
}
127129
}

0 commit comments

Comments
 (0)