diff --git a/sample_client/src/com/owncloud/android/lib/sampleclient/MainActivity.java b/sample_client/src/com/owncloud/android/lib/sampleclient/MainActivity.java index bfb23acf..c3954760 100644 --- a/sample_client/src/com/owncloud/android/lib/sampleclient/MainActivity.java +++ b/sample_client/src/com/owncloud/android/lib/sampleclient/MainActivity.java @@ -24,31 +24,6 @@ package com.owncloud.android.lib.sampleclient; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import com.owncloud.android.lib.common.network.OnDatatransferProgressListener; -import com.owncloud.android.lib.common.OwnCloudClientFactory; -import com.owncloud.android.lib.common.OwnCloudClient; -import com.owncloud.android.lib.refactor.OCContext; -import com.owncloud.android.lib.refactor.account.OCAccount; -import com.owncloud.android.lib.refactor.authentication.credentials.OwnCloudCredentialsFactory; -import com.owncloud.android.lib.common.operations.OnRemoteOperationListener; -import com.owncloud.android.lib.refactor.operations.PropfindOperation; -import com.owncloud.android.lib.resources.files.RemoteFile; -import com.owncloud.android.lib.common.operations.RemoteOperation; -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.RemoveRemoteFileOperation; -import com.owncloud.android.lib.refactor.operations.UploadRemoteFileOperation; -import com.owncloud.android.lib.resources.files.FileUtils; - import android.app.Activity; import android.content.res.AssetManager; import android.graphics.drawable.BitmapDrawable; @@ -61,6 +36,31 @@ import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; +import com.owncloud.android.lib.common.OwnCloudClient; +import com.owncloud.android.lib.common.OwnCloudClientFactory; +import com.owncloud.android.lib.common.network.OnDatatransferProgressListener; +import com.owncloud.android.lib.common.operations.OnRemoteOperationListener; +import com.owncloud.android.lib.common.operations.RemoteOperation; +import com.owncloud.android.lib.common.operations.RemoteOperationResult; +import com.owncloud.android.lib.refactor.OCContext; +import com.owncloud.android.lib.refactor.account.OCAccount; +import com.owncloud.android.lib.refactor.authentication.credentials.OwnCloudCredentialsFactory; +import com.owncloud.android.lib.refactor.resources.files.DownloadRemoteFileOperation; +import com.owncloud.android.lib.refactor.resources.files.PropfindOperation; +import com.owncloud.android.lib.refactor.resources.files.UploadRemoteFileOperation; +import com.owncloud.android.lib.resources.files.FileUtils; +import com.owncloud.android.lib.resources.files.ReadRemoteFolderOperation; +import com.owncloud.android.lib.resources.files.RemoteFile; +import com.owncloud.android.lib.resources.files.RemoveRemoteFileOperation; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + import at.bitfire.dav4android.DavResource; public class MainActivity extends Activity implements OnRemoteOperationListener, OnDatatransferProgressListener { @@ -223,9 +223,29 @@ public class MainActivity extends Activity implements OnRemoteOperationListener, File upFolder = new File(getCacheDir(), getString(R.string.upload_folder_path)); File fileToUpload = upFolder.listFiles()[0]; String remotePath = FileUtils.PATH_SEPARATOR + fileToUpload.getName(); - DownloadRemoteFileOperation downloadOperation = new DownloadRemoteFileOperation(remotePath, downFolder.getAbsolutePath()); - downloadOperation.addDatatransferProgressListener(this); - downloadOperation.execute(mClient, this, mHandler); + + final DownloadRemoteFileOperation downloadRemoteFileOperation = new DownloadRemoteFileOperation( + mOCContext, + remotePath, + downFolder.getAbsolutePath() + ); + final Handler handler = new Handler(); + + new Thread(() -> { + final DownloadRemoteFileOperation.Result result = downloadRemoteFileOperation.exec(); + if (!result.isSuccess()) { + handler.post(() -> + Toast.makeText(this, result.getLogMessage(), Toast.LENGTH_LONG).show()); + return; + } + handler.post(() -> + Toast.makeText(this, "Download successful, pending file creation", + Toast.LENGTH_LONG).show()); + }).start(); + +// DownloadRemoteFileOperation downloadOperation = new DownloadRemoteFileOperation(remotePath, downFolder.getAbsolutePath()); +// downloadOperation.addDatatransferProgressListener(this); +// downloadOperation.execute(mClient, this, mHandler); } @SuppressWarnings("deprecation") @@ -255,8 +275,8 @@ public class MainActivity extends Activity implements OnRemoteOperationListener, } else if (operation instanceof RemoveRemoteFileOperation ) { onSuccessfulRemoteDeletion((RemoveRemoteFileOperation)operation, result); - } else if (operation instanceof DownloadRemoteFileOperation ) { - onSuccessfulDownload((DownloadRemoteFileOperation)operation, result); +// } else if (operation instanceof DownloadRemoteFileOperation ) { +// onSuccessfulDownload((DownloadRemoteFileOperation)operation, result); } else { Toast.makeText(this, R.string.todo_operation_finished_in_success, Toast.LENGTH_SHORT).show(); diff --git a/src/com/owncloud/android/lib/refactor/account/AccountUtils.java b/src/com/owncloud/android/lib/refactor/account/AccountUtils.java index c1568c2e..2abe32c4 100644 --- a/src/com/owncloud/android/lib/refactor/account/AccountUtils.java +++ b/src/com/owncloud/android/lib/refactor/account/AccountUtils.java @@ -34,8 +34,7 @@ import android.content.Context; import android.net.Uri; import com.owncloud.android.lib.refactor.Log_OC; -import com.owncloud.android.lib.refactor.OCContext; -import com.owncloud.android.lib.refactor.RemoteOperation; +import com.owncloud.android.lib.refactor.operations.RemoteOperation; import com.owncloud.android.lib.refactor.authentication.credentials.OCBasicCredentials; import com.owncloud.android.lib.refactor.authentication.credentials.OCBearerCredentials; import com.owncloud.android.lib.refactor.authentication.credentials.OCCredentials; diff --git a/src/com/owncloud/android/lib/refactor/authentication/oauth/OAuth2RequestBuilder.java b/src/com/owncloud/android/lib/refactor/authentication/oauth/OAuth2RequestBuilder.java index 018280f8..dc49b525 100644 --- a/src/com/owncloud/android/lib/refactor/authentication/oauth/OAuth2RequestBuilder.java +++ b/src/com/owncloud/android/lib/refactor/authentication/oauth/OAuth2RequestBuilder.java @@ -26,7 +26,7 @@ package com.owncloud.android.lib.refactor.authentication.oauth; -import com.owncloud.android.lib.refactor.RemoteOperation; +import com.owncloud.android.lib.refactor.operations.RemoteOperation; public interface OAuth2RequestBuilder { diff --git a/src/com/owncloud/android/lib/refactor/authentication/oauth/OwnCloudOAuth2RequestBuilder.java b/src/com/owncloud/android/lib/refactor/authentication/oauth/OwnCloudOAuth2RequestBuilder.java index e646a7d6..6a458149 100644 --- a/src/com/owncloud/android/lib/refactor/authentication/oauth/OwnCloudOAuth2RequestBuilder.java +++ b/src/com/owncloud/android/lib/refactor/authentication/oauth/OwnCloudOAuth2RequestBuilder.java @@ -29,7 +29,7 @@ package com.owncloud.android.lib.refactor.authentication.oauth; import android.net.Uri; import com.owncloud.android.lib.refactor.OCContext; -import com.owncloud.android.lib.refactor.RemoteOperation; +import com.owncloud.android.lib.refactor.operations.RemoteOperation; import com.owncloud.android.lib.refactor.authentication.oauth.operations.OAuth2GetAccessTokenOperation; import com.owncloud.android.lib.refactor.authentication.oauth.operations.OAuth2RefreshAccessTokenOperation; diff --git a/src/com/owncloud/android/lib/refactor/authentication/oauth/operations/OAuth2GetAccessTokenOperation.java b/src/com/owncloud/android/lib/refactor/authentication/oauth/operations/OAuth2GetAccessTokenOperation.java index f137e70b..0edaeacb 100644 --- a/src/com/owncloud/android/lib/refactor/authentication/oauth/operations/OAuth2GetAccessTokenOperation.java +++ b/src/com/owncloud/android/lib/refactor/authentication/oauth/operations/OAuth2GetAccessTokenOperation.java @@ -26,18 +26,15 @@ package com.owncloud.android.lib.refactor.authentication.oauth.operations; -import android.net.Uri; - import com.owncloud.android.lib.refactor.OCContext; -import com.owncloud.android.lib.refactor.RemoteOperationResult; +import com.owncloud.android.lib.refactor.operations.RemoteOperationResult; import com.owncloud.android.lib.refactor.authentication.oauth.OAuth2Constants; import com.owncloud.android.lib.refactor.authentication.oauth.OAuth2ResponseParser; import com.owncloud.android.lib.refactor.authentication.oauth.OwnCloudOAuth2Provider; -import com.owncloud.android.lib.refactor.RemoteOperation; +import com.owncloud.android.lib.refactor.operations.RemoteOperation; import org.json.JSONObject; -import java.util.ArrayList; import java.util.Map; import okhttp3.MultipartBody; diff --git a/src/com/owncloud/android/lib/refactor/authentication/oauth/operations/OAuth2RefreshAccessTokenOperation.java b/src/com/owncloud/android/lib/refactor/authentication/oauth/operations/OAuth2RefreshAccessTokenOperation.java index 5594ff6b..9453f613 100644 --- a/src/com/owncloud/android/lib/refactor/authentication/oauth/operations/OAuth2RefreshAccessTokenOperation.java +++ b/src/com/owncloud/android/lib/refactor/authentication/oauth/operations/OAuth2RefreshAccessTokenOperation.java @@ -22,9 +22,9 @@ package com.owncloud.android.lib.refactor.authentication.oauth.operations; import com.owncloud.android.lib.refactor.OCContext; -import com.owncloud.android.lib.refactor.RemoteOperationResult; +import com.owncloud.android.lib.refactor.operations.RemoteOperationResult; import com.owncloud.android.lib.refactor.Log_OC; -import com.owncloud.android.lib.refactor.RemoteOperation; +import com.owncloud.android.lib.refactor.operations.RemoteOperation; import com.owncloud.android.lib.refactor.authentication.oauth.OAuth2Constants; import com.owncloud.android.lib.refactor.authentication.oauth.OAuth2GrantType; import com.owncloud.android.lib.refactor.authentication.oauth.OAuth2ResponseParser; @@ -32,7 +32,6 @@ import com.owncloud.android.lib.refactor.authentication.oauth.OwnCloudOAuth2Prov import org.json.JSONObject; -import java.util.ArrayList; import java.util.Map; import okhttp3.MultipartBody; diff --git a/src/com/owncloud/android/lib/refactor/RemoteOperation.java b/src/com/owncloud/android/lib/refactor/operations/RemoteOperation.java similarity index 97% rename from src/com/owncloud/android/lib/refactor/RemoteOperation.java rename to src/com/owncloud/android/lib/refactor/operations/RemoteOperation.java index 862ca8d3..dd1e355d 100644 --- a/src/com/owncloud/android/lib/refactor/RemoteOperation.java +++ b/src/com/owncloud/android/lib/refactor/operations/RemoteOperation.java @@ -1,6 +1,8 @@ -package com.owncloud.android.lib.refactor; +package com.owncloud.android.lib.refactor.operations; import android.net.Uri; +import com.owncloud.android.lib.refactor.OCContext; + import java.io.IOException; import java.util.Map; diff --git a/src/com/owncloud/android/lib/refactor/RemoteOperationResult.java b/src/com/owncloud/android/lib/refactor/operations/RemoteOperationResult.java similarity index 99% rename from src/com/owncloud/android/lib/refactor/RemoteOperationResult.java rename to src/com/owncloud/android/lib/refactor/operations/RemoteOperationResult.java index deef482c..87570a90 100644 --- a/src/com/owncloud/android/lib/refactor/RemoteOperationResult.java +++ b/src/com/owncloud/android/lib/refactor/operations/RemoteOperationResult.java @@ -22,11 +22,12 @@ * */ -package com.owncloud.android.lib.refactor; +package com.owncloud.android.lib.refactor.operations; import android.accounts.Account; import android.accounts.AccountsException; +import com.owncloud.android.lib.refactor.Log_OC; import com.owncloud.android.lib.refactor.exceptions.AccountNotFoundException; import com.owncloud.android.lib.refactor.exceptions.CertificateCombinedException; import com.owncloud.android.lib.refactor.exceptions.OperationCancelledException; @@ -50,7 +51,6 @@ import java.util.Map; import javax.net.ssl.SSLException; -import at.bitfire.dav4android.DavResource; import at.bitfire.dav4android.exception.ConflictException; import at.bitfire.dav4android.exception.DavException; import at.bitfire.dav4android.exception.HttpException; diff --git a/src/com/owncloud/android/lib/refactor/resources/files/DownloadRemoteFileOperation.java b/src/com/owncloud/android/lib/refactor/resources/files/DownloadRemoteFileOperation.java new file mode 100644 index 00000000..1b664e33 --- /dev/null +++ b/src/com/owncloud/android/lib/refactor/resources/files/DownloadRemoteFileOperation.java @@ -0,0 +1,63 @@ +/* ownCloud Android Library is available under MIT license + * Copyright (C) 2018 ownCloud GmbH. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package com.owncloud.android.lib.refactor.resources.files; + +import com.owncloud.android.lib.refactor.OCContext; +import com.owncloud.android.lib.refactor.operations.RemoteOperation; +import at.bitfire.dav4android.DavOCResource; +import static com.owncloud.android.lib.refactor.operations.RemoteOperationResult.ResultCode.OK; + +/** + * @author David González Verdugo + */ +public class DownloadRemoteFileOperation extends RemoteOperation { + + private String mRemotePath; + private String mLocalFolderPath; + + public DownloadRemoteFileOperation(OCContext ocContext, String remotePath, String localFolderPath) { + super(ocContext); + mRemotePath = remotePath.replaceAll("^/+", ""); + mLocalFolderPath = localFolderPath; + } + + @Override + public Result exec() { + + try { + DavOCResource davOCResource = new DavOCResource( + getClient(), + getWebDavHttpUrl(mRemotePath) + ); + davOCResource.get("*/*"); + + //TODO Create local file from the downloaded one + + return new Result(OK); + + } catch (Exception e) { + return new Result(e); + } + } +} \ No newline at end of file diff --git a/src/com/owncloud/android/lib/refactor/operations/PropfindOperation.java b/src/com/owncloud/android/lib/refactor/resources/files/PropfindOperation.java similarity index 86% rename from src/com/owncloud/android/lib/refactor/operations/PropfindOperation.java rename to src/com/owncloud/android/lib/refactor/resources/files/PropfindOperation.java index 18c49f21..85d2192f 100644 --- a/src/com/owncloud/android/lib/refactor/operations/PropfindOperation.java +++ b/src/com/owncloud/android/lib/refactor/resources/files/PropfindOperation.java @@ -22,24 +22,24 @@ * */ -package com.owncloud.android.lib.refactor.operations; +package com.owncloud.android.lib.refactor.resources.files; import com.owncloud.android.lib.refactor.OCContext; -import com.owncloud.android.lib.refactor.RemoteOperation; +import com.owncloud.android.lib.refactor.operations.RemoteOperation; import at.bitfire.dav4android.DavOCResource; import at.bitfire.dav4android.DavResource; import at.bitfire.dav4android.PropertyUtils; import okhttp3.HttpUrl; -import static com.owncloud.android.lib.refactor.RemoteOperationResult.ResultCode.OK; +import static com.owncloud.android.lib.refactor.operations.RemoteOperationResult.ResultCode.OK; public class PropfindOperation extends RemoteOperation { private String mRemotePath; - public PropfindOperation(OCContext context, String remotePath) { - super(context); + public PropfindOperation(OCContext ocContext, String remotePath) { + super(ocContext); mRemotePath = remotePath; } diff --git a/src/com/owncloud/android/lib/refactor/operations/UploadRemoteFileOperation.java b/src/com/owncloud/android/lib/refactor/resources/files/UploadRemoteFileOperation.java similarity index 87% rename from src/com/owncloud/android/lib/refactor/operations/UploadRemoteFileOperation.java rename to src/com/owncloud/android/lib/refactor/resources/files/UploadRemoteFileOperation.java index 8c019c8b..8f6b1c2c 100644 --- a/src/com/owncloud/android/lib/refactor/operations/UploadRemoteFileOperation.java +++ b/src/com/owncloud/android/lib/refactor/resources/files/UploadRemoteFileOperation.java @@ -19,21 +19,18 @@ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. - * */ -package com.owncloud.android.lib.refactor.operations; +package com.owncloud.android.lib.refactor.resources.files; import com.owncloud.android.lib.refactor.OCContext; -import com.owncloud.android.lib.refactor.RemoteOperation; - +import com.owncloud.android.lib.refactor.operations.RemoteOperation; import java.io.File; - import at.bitfire.dav4android.DavOCResource; import okhttp3.MediaType; import okhttp3.RequestBody; -import static com.owncloud.android.lib.refactor.RemoteOperationResult.ResultCode.OK; +import static com.owncloud.android.lib.refactor.operations.RemoteOperationResult.ResultCode.OK; /** * @author David González Verdugo @@ -46,9 +43,9 @@ public class UploadRemoteFileOperation extends RemoteOperation { private String mFileLastModifTimestamp; - public UploadRemoteFileOperation(OCContext context, String localPath, String remotePath, String mimetype, + public UploadRemoteFileOperation(OCContext ocContext, String localPath, String remotePath, String mimetype, String fileLastModifTimestamp) { - super(context); + super(ocContext); mFileToUpload = new File(localPath); mRemotePath = remotePath.replaceAll("^/+", ""); //Delete leading slashes @@ -78,10 +75,10 @@ public class UploadRemoteFileOperation extends RemoteOperation { mFileLastModifTimestamp ); + return new Result(OK); + } catch (Exception e) { return new Result(e); } - - return new Result(OK); } } \ No newline at end of file diff --git a/src/com/owncloud/android/lib/resources/files/UploadRemoteFileOperation.java b/src/com/owncloud/android/lib/resources/files/UploadRemoteFileOperation.java index 74dbdab7..9f7c7c19 100644 --- a/src/com/owncloud/android/lib/resources/files/UploadRemoteFileOperation.java +++ b/src/com/owncloud/android/lib/resources/files/UploadRemoteFileOperation.java @@ -1,5 +1,5 @@ /* ownCloud Android Library is available under MIT license - * Copyright (C) 2016 ownCloud GmbH. + * Copyright (C) 2018 ownCloud GmbH. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -24,13 +24,14 @@ package com.owncloud.android.lib.resources.files; -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.util.HashSet; -import java.util.Set; -import java.util.concurrent.atomic.AtomicBoolean; +import com.owncloud.android.lib.common.OwnCloudClient; +import com.owncloud.android.lib.common.network.FileRequestEntity; +import com.owncloud.android.lib.common.network.OnDatatransferProgressListener; +import com.owncloud.android.lib.common.network.ProgressiveDataTransferer; +import com.owncloud.android.lib.common.network.WebdavUtils; +import com.owncloud.android.lib.common.operations.OperationCancelledException; +import com.owncloud.android.lib.common.operations.RemoteOperation; +import com.owncloud.android.lib.common.operations.RemoteOperationResult; import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; import org.apache.commons.httpclient.HttpStatus; @@ -38,22 +39,18 @@ import org.apache.commons.httpclient.methods.PutMethod; import org.apache.commons.httpclient.methods.RequestEntity; import org.apache.commons.httpclient.params.HttpMethodParams; -import com.owncloud.android.lib.common.OwnCloudClient; -import com.owncloud.android.lib.common.network.FileRequestEntity; -import com.owncloud.android.lib.common.network.OnDatatransferProgressListener; -import com.owncloud.android.lib.common.network.ProgressiveDataTransferer; -import com.owncloud.android.lib.common.network.WebdavUtils; -import com.owncloud.android.lib.common.operations.InvalidCharacterExceptionParser; -import com.owncloud.android.lib.common.operations.OperationCancelledException; -import com.owncloud.android.lib.common.operations.RemoteOperation; -import com.owncloud.android.lib.common.operations.RemoteOperationResult; -import com.owncloud.android.lib.common.utils.Log_OC; +import java.io.File; +import java.io.IOException; +import java.util.HashSet; +import java.util.Set; +import java.util.concurrent.atomic.AtomicBoolean; /** * Remote operation performing the upload of a remote file to the ownCloud server. * * @author David A. Velasco * @author masensio + * @author David González Verdugo */ public class UploadRemoteFileOperation extends RemoteOperation {