From d6f9e415375f53eba7c5e147c7ff30c03a6db731 Mon Sep 17 00:00:00 2001 From: Jacobo Aragunde Pérez Date: Tue, 27 Jan 2015 12:44:42 +0000 Subject: Android: download documents from ownCloud. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Documents are downloaded to the private cache directory of the app, and opened from there. That directory is cleared and created again every time the application starts up. Change-Id: I5c05c8ae750b6ced3b419c67d84063e8ee3d84aa Reviewed-on: https://gerrit.libreoffice.org/16192 Reviewed-by: Jacobo Aragunde Pérez Tested-by: Jacobo Aragunde Pérez --- .../libreoffice/storage/owncloud/OwnCloudFile.java | 11 ++++++-- .../storage/owncloud/OwnCloudProvider.java | 32 ++++++++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) (limited to 'android') diff --git a/android/source/src/java/org/libreoffice/storage/owncloud/OwnCloudFile.java b/android/source/src/java/org/libreoffice/storage/owncloud/OwnCloudFile.java index 8e6d6cf136ff..a8d1a06e3092 100644 --- a/android/source/src/java/org/libreoffice/storage/owncloud/OwnCloudFile.java +++ b/android/source/src/java/org/libreoffice/storage/owncloud/OwnCloudFile.java @@ -10,6 +10,7 @@ import java.util.List; import org.libreoffice.storage.IFile; import com.owncloud.android.lib.common.operations.RemoteOperationResult; +import com.owncloud.android.lib.resources.files.DownloadRemoteFileOperation; import com.owncloud.android.lib.resources.files.ReadRemoteFolderOperation; import com.owncloud.android.lib.resources.files.RemoteFile; @@ -97,8 +98,14 @@ public class OwnCloudFile implements IFile { @Override public File getDocument() { - // TODO Auto-generated method stub - return null; + if (isDirectory()) { + return null; + } + File downFolder = provider.getCacheDir(); + DownloadRemoteFileOperation operation = new DownloadRemoteFileOperation( + file.getRemotePath(), downFolder.getAbsolutePath()); + operation.execute(provider.getClient()); + return new File(downFolder.getAbsolutePath() + file.getRemotePath()); } @Override diff --git a/android/source/src/java/org/libreoffice/storage/owncloud/OwnCloudProvider.java b/android/source/src/java/org/libreoffice/storage/owncloud/OwnCloudProvider.java index 7bd78e3550e5..db2b69825c6a 100644 --- a/android/source/src/java/org/libreoffice/storage/owncloud/OwnCloudProvider.java +++ b/android/source/src/java/org/libreoffice/storage/owncloud/OwnCloudProvider.java @@ -1,5 +1,6 @@ package org.libreoffice.storage.owncloud; +import java.io.File; import java.net.URI; import org.libreoffice.R; @@ -23,6 +24,7 @@ import com.owncloud.android.lib.resources.files.RemoteFile; public class OwnCloudProvider implements IDocumentProvider { private OwnCloudClient client; + private File cacheDir; // TODO: these must be configurable final private String serverUrl = "http://10.0.2.2/owncloud"; //emulator host machine @@ -36,6 +38,13 @@ public class OwnCloudProvider implements IDocumentProvider { client.setCredentials(OwnCloudCredentialsFactory.newBasicCredentials( userName, password)); + // make sure cache directory exists, and clear it + // TODO: probably we should do smarter cache management + cacheDir = new File(context.getCacheDir(), "ownCloud"); + if (cacheDir.exists()) { + deleteRecursive(cacheDir); + } + cacheDir.mkdirs(); } @Override @@ -73,4 +82,27 @@ public class OwnCloudProvider implements IDocumentProvider { return client; } + /** + * Used by OwnCloudFiles to get the cache directory they should download + * files to. + * + * @return cache directory. + */ + protected File getCacheDir() { + return cacheDir; + } + + /** + * Deletes files and recursively deletes directories. + * + * @param file + * File or directory to be deleted. + */ + private void deleteRecursive(File file) { + if (file.isDirectory()) { + for (File child : file.listFiles()) + deleteRecursive(child); + } + file.delete(); + } } -- cgit