private RemoteOperationResult createResult(GetMethod get, byte[] avatarData, String mimeType) throws IOException { // find out etag String etag = WebdavUtils.getEtagFromResponse(get); if (etag.length() == 0) { Log_OC.w(TAG, "Could not read Etag from avatar"); } RemoteOperationResult result = new RemoteOperationResult(true, get); ResultData resultData = new ResultData(avatarData, mimeType, etag); ArrayList<Object> data = new ArrayList<>(); data.add(resultData); result.setData(data); return result; }
protected RemoteOperationResult<? extends Object> uploadFile(OwnCloudClient client) throws Exception { File fileToUpload = new File(mLocalPath); MediaType mediaType = MediaType.parse(mMimeType); mFileRequestBody = new FileRequestBody(fileToUpload, mediaType); synchronized (mDataTransferListeners) { mFileRequestBody.addDatatransferProgressListeners(mDataTransferListeners); } if (mRequiredEtag != null && mRequiredEtag.length() > 0) { mPutMethod.addRequestHeader(HttpConstants.IF_MATCH_HEADER, mRequiredEtag); } mPutMethod.addRequestHeader(HttpConstants.OC_TOTAL_LENGTH_HEADER, String.valueOf(fileToUpload.length())); mPutMethod.addRequestHeader(HttpConstants.OC_X_OC_MTIME_HEADER, mFileLastModifTimestamp); mPutMethod.setRequestBody(mFileRequestBody); int status = client.executeHttpMethod(mPutMethod); if (isSuccess(status)) { return new RemoteOperationResult<>(OK); } else { // synchronization failed return new RemoteOperationResult<>(mPutMethod); } }
/** * Run operation for asynchronous or synchronous 'onExecute' method. * * Considers and performs silent refresh of account credentials if possible, and if * {@link RemoteOperation#setSilentRefreshOfAccountCredentials(boolean)} was called with * parameter 'true' before the execution. * * @return Remote operation result */ private RemoteOperationResult<T> runOperation() { RemoteOperationResult<T> result; try { grantOwnCloudClient(); result = run(mClient); } catch (AccountsException | IOException e) { Log_OC.e(TAG, "Error while trying to access to " + mAccount.name, e); result = new RemoteOperationResult<>(e); } return result; }
/** * Performs the operation. * * @param client Client object to communicate with the remote Nextcloud server. */ @Override protected RemoteOperationResult run(OwnCloudClient client) { RemoteOperationResult result; try { DeleteMethod delete = new DeleteMethod(client.getNewWebdavUri() + "/trashbin/" + userId + "/trash"); int status = client.executeMethod(delete, RESTORE_READ_TIMEOUT, RESTORE_CONNECTION_TIMEOUT); result = new RemoteOperationResult(isSuccess(status), delete); client.exhaustResponse(delete.getResponseBodyAsStream()); } catch (IOException e) { result = new RemoteOperationResult(e); Log.e(TAG, "Empty trashbin failed: " + result.getLogMessage(), e); } return result; }
@Override protected RemoteOperationResult run(OwnCloudClient client) { RemoteOperationResult result = null; /// download will be performed to a temporal file, then moved to the final location File tmpFile = new File(getTmpPath()); /// perform the download try { tmpFile.getParentFile().mkdirs(); int status = downloadFile(client, tmpFile); result = new RemoteOperationResult(isSuccess(status), mGet); Log_OC.i(TAG, "Download of " + mRemotePath + " to " + getTmpPath() + ": " + result.getLogMessage()); } catch (Exception e) { result = new RemoteOperationResult(e); Log_OC.e(TAG, "Download of " + mRemotePath + " to " + getTmpPath() + ": " + result.getLogMessage(), e); } return result; }
/** * Performs the rename operation. * * @param client Client object to communicate with the remote ownCloud server. */ @Override protected RemoteOperationResult run(OwnCloudClient client) { RemoteOperationResult result; try { Uri srcWebDavUri = removeChunksFolder ? client.getUploadsWebDavUri() : client.getUserFilesWebDavUri(); DeleteMethod deleteMethod = new DeleteMethod( new URL(srcWebDavUri + WebdavUtils.encodePath(mRemotePath))); int status = client.executeHttpMethod(deleteMethod); result = isSuccess(status) ? new RemoteOperationResult<>(OK) : new RemoteOperationResult<>(deleteMethod); Log_OC.i(TAG, "Remove " + mRemotePath + ": " + result.getLogMessage()); } catch (Exception e) { result = new RemoteOperationResult<>(e); Log_OC.e(TAG, "Remove " + mRemotePath + ": " + result.getLogMessage(), e); } return result; }
@Override protected RemoteOperationResult run(OwnCloudClient client) { if (!isOnline()) { return new RemoteOperationResult(RemoteOperationResult.ResultCode.NO_NETWORK_CONNECTION); } String baseUriStr = client.getBaseUri().toString(); if (baseUriStr.startsWith(PROTOCOL_HTTP) || baseUriStr.startsWith(PROTOCOL_HTTPS)) { tryConnection(client); } else { client.setBaseUri(Uri.parse(PROTOCOL_HTTPS + baseUriStr)); boolean httpsSuccess = tryConnection(client); if (!httpsSuccess && !mLatestResult.isSslRecoverableException()) { Log_OC.d(TAG, "establishing secure connection failed, trying non secure connection"); client.setBaseUri(Uri.parse(PROTOCOL_HTTP + baseUriStr)); tryConnection(client); } } return mLatestResult; }
@Override protected RemoteOperationResult<OwnCloudVersion> run(OwnCloudClient client) { if (!isOnline()) { return new RemoteOperationResult<>(RemoteOperationResult.ResultCode.NO_NETWORK_CONNECTION); } String baseUriStr = client.getBaseUri().toString(); if (baseUriStr.startsWith(HTTP_PREFIX) || baseUriStr.startsWith(HTTPS_PREFIX)) { tryConnection(client); } else { client.setBaseUri(Uri.parse(HTTPS_PREFIX + baseUriStr)); boolean httpsSuccess = tryConnection(client); if (!httpsSuccess && !mLatestResult.isSslRecoverableException()) { Log_OC.d(TAG, "establishing secure connection failed, trying non secure connection"); client.setBaseUri(Uri.parse(HTTP_PREFIX + baseUriStr)); tryConnection(client); } } return mLatestResult; }
private RemoteOperationResult createFolder(OwnCloudClient client) { RemoteOperationResult result; try { Uri webDavUri = createChunksFolder ? client.getUploadsWebDavUri() : client.getUserFilesWebDavUri(); final MkColMethod mkcol = new MkColMethod(new URL(webDavUri + WebdavUtils.encodePath(mRemotePath))); mkcol.setReadTimeout(READ_TIMEOUT, TimeUnit.SECONDS); mkcol.setConnectionTimeout(CONNECTION_TIMEOUT, TimeUnit.SECONDS); final int status = client.executeHttpMethod(mkcol); result = (status == HttpConstants.HTTP_CREATED) ? new RemoteOperationResult<>(ResultCode.OK) : new RemoteOperationResult<>(mkcol); Log_OC.d(TAG, "Create directory " + mRemotePath + ": " + result.getLogMessage()); client.exhaustResponse(mkcol.getResponseBodyAsStream()); } catch (Exception e) { result = new RemoteOperationResult<>(e); Log_OC.e(TAG, "Create directory " + mRemotePath + ": " + result.getLogMessage(), e); } return result; }
@Override protected RemoteOperationResult run(OwnCloudClient client) { RemoteOperationResult result; /// download will be performed to a temporal file, then moved to the final location File tmpFile = new File(getTmpPath()); /// perform the download try { tmpFile.getParentFile().mkdirs(); result = downloadFile(client, tmpFile); Log_OC.i(TAG, "Download of " + mRemotePath + " to " + getTmpPath() + ": " + result.getLogMessage()); } catch (Exception e) { result = new RemoteOperationResult<>(e); Log_OC.e(TAG, "Download of " + mRemotePath + " to " + getTmpPath() + ": " + result.getLogMessage(), e); } return result; }
/** * Performs the operation. * * @param client Client object to communicate with the remote ownCloud server. */ @Override protected RemoteOperationResult run(OwnCloudClient client) { RemoteOperationResult result; try { String source = client.getNewWebdavUri() + "/versions/" + userId + "/versions/" + fileId + "/" + fileName; String target = client.getNewWebdavUri() + "/versions/" + userId + "/restore/" + fileId; MoveMethod move = new MoveMethod(source, target, true); int status = client.executeMethod(move, RESTORE_READ_TIMEOUT, RESTORE_CONNECTION_TIMEOUT); result = new RemoteOperationResult(isSuccess(status), move); client.exhaustResponse(move.getResponseBodyAsStream()); } catch (IOException e) { result = new RemoteOperationResult(e); Log.e(TAG, "Restore file version with id " + fileId + " failed: " + result.getLogMessage(), e); } return result; }
/** * Performs the operation. * * @param client Client object to communicate with the remote ownCloud server. */ @Override protected RemoteOperationResult run(OwnCloudClient client) { RemoteOperationResult result; try { String source = client.getNewWebdavUri() + WebdavUtils.encodePath(sourcePath); String target = client.getNewWebdavUri() + "/trashbin/" + userId + "/restore/" + fileName; MoveMethod move = new MoveMethod(source, target, true); int status = client.executeMethod(move, RESTORE_READ_TIMEOUT, RESTORE_CONNECTION_TIMEOUT); result = new RemoteOperationResult(isSuccess(status), move); client.exhaustResponse(move.getResponseBodyAsStream()); } catch (IOException e) { result = new RemoteOperationResult(e); Log.e(TAG, "Restore trashbin file " + sourcePath + " failed: " + result.getLogMessage(), e); } return result; }
@Override protected RemoteOperationResult run(OwnCloudClient client) { RemoteOperationResult result = null; int status = -1; DeleteMethod delete = null; try { // Post Method delete = new DeleteMethod(client.getBaseUri() + OCS_ROUTE); delete.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE); status = client.executeMethod(delete); String response = delete.getResponseBodyAsString(); if(isSuccess(status)) { result = new RemoteOperationResult(true, status, delete.getResponseHeaders()); Log_OC.d(TAG, "Successful response: " + response); } else { result = new RemoteOperationResult(false, status, delete.getResponseHeaders()); } } catch (Exception e) { result = new RemoteOperationResult(e); Log_OC.e(TAG, "Exception while registering device for notifications", e); } finally { if (delete != null) { delete.releaseConnection(); } } return result; }
protected RemoteOperationResult uploadFile(OwnCloudClient client) throws IOException { int status; RemoteOperationResult result; try { File f = new File(localPath); entity = new FileRequestEntity(f, mimeType); synchronized (dataTransferListeners) { ((ProgressiveDataTransfer) entity) .addDataTransferProgressListeners(dataTransferListeners); } if (requiredEtag != null && requiredEtag.length() > 0) { putMethod.addRequestHeader(IF_MATCH_HEADER, "\"" + requiredEtag + "\""); } putMethod.addRequestHeader(OC_TOTAL_LENGTH_HEADER, String.valueOf(f.length())); putMethod.addRequestHeader(OC_X_OC_MTIME_HEADER, lastModificationTimestamp); putMethod.setRequestEntity(entity); status = client.executeMethod(putMethod); result = new RemoteOperationResult(isSuccess(status), putMethod); client.exhaustResponse(putMethod.getResponseBodyAsStream()); } finally { putMethod.releaseConnection(); // let the connection available for other methods } return result; }
@Override protected RemoteOperationResult run(OwnCloudClient client) { RemoteOperationResult<ShareParserResult> result; try { Uri requestUri = client.getBaseUri(); Uri.Builder uriBuilder = requestUri.buildUpon(); uriBuilder.appendEncodedPath(ShareUtils.SHARING_API_PATH); uriBuilder.appendEncodedPath(Long.toString(mRemoteId)); GetMethod getMethod = new GetMethod(new URL(uriBuilder.build().toString())); getMethod.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE); int status = client.executeHttpMethod(getMethod); if (isSuccess(status)) { // Parse xml response and obtain the list of shares ShareToRemoteOperationResultParser parser = new ShareToRemoteOperationResultParser( new ShareXMLParser() ); parser.setOneOrMoreSharesRequired(true); parser.setOwnCloudVersion(client.getOwnCloudVersion()); parser.setServerBaseUri(client.getBaseUri()); result = parser.parse(getMethod.getResponseBodyAsString()); } else { result = new RemoteOperationResult<>(getMethod); } } catch (Exception e) { result = new RemoteOperationResult<>(e); Log_OC.e(TAG, "Exception while getting remote shares ", e); } return result; }
private RemoteOperationResult createFolder(OwnCloudClient client) { RemoteOperationResult result; MkColMethod mkCol = null; try { mkCol = new MkColMethod(client.getWebdavUri() + WebdavUtils.encodePath(mRemotePath)); client.setUseNextcloudUserAgent(true); client.executeMethod(mkCol, READ_TIMEOUT, CONNECTION_TIMEOUT); if (HttpStatus.SC_METHOD_NOT_ALLOWED == mkCol.getStatusCode()) { result = new RemoteOperationResult(RemoteOperationResult.ResultCode.FOLDER_ALREADY_EXISTS); } else { result = new RemoteOperationResult(mkCol.succeeded(), mkCol); } Log_OC.d(TAG, "Create directory " + mRemotePath + ": " + result.getLogMessage()); client.exhaustResponse(mkCol.getResponseBodyAsStream()); } catch (Exception e) { result = new RemoteOperationResult(e); Log_OC.e(TAG, "Create directory " + mRemotePath + ": " + result.getLogMessage(), e); } finally { if (mkCol != null) mkCol.releaseConnection(); } return result; }
/** * @param client Client object */ @Override protected RemoteOperationResult run(OwnCloudClient client) { DeleteMethod postMethod = null; RemoteOperationResult result; try { // remote request postMethod = new DeleteMethod(client.getBaseUri() + PUBLIC_KEY_URL); postMethod.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE); int status = client.executeMethod(postMethod, SYNC_READ_TIMEOUT, SYNC_CONNECTION_TIMEOUT); result = new RemoteOperationResult(status == HttpStatus.SC_OK, postMethod); client.exhaustResponse(postMethod.getResponseBodyAsStream()); } catch (Exception e) { result = new RemoteOperationResult(e); Log_OC.e(TAG, "Deletion of public key failed: " + result.getLogMessage(), result.getException()); } finally { if (postMethod != null) postMethod.releaseConnection(); } return result; }
/** * Performs the remove operation. * * @param client Client object to communicate with the remote ownCloud server. */ @Override protected RemoteOperationResult run(OwnCloudClient client) { RemoteOperationResult result; DeleteMethod delete = null; try { delete = new DeleteMethod(client.getNewWebdavUri() + WebdavUtils.encodePath(remotePath)); int status = client.executeMethod(delete, REMOVE_READ_TIMEOUT, REMOVE_CONNECTION_TIMEOUT); delete.getResponseBodyAsString(); // exhaust the response, although not interesting result = new RemoteOperationResult((delete.succeeded() || status == HttpStatus.SC_NOT_FOUND), delete); Log_OC.i(TAG, "Remove " + remotePath + ": " + result.getLogMessage()); } catch (Exception e) { result = new RemoteOperationResult(e); Log_OC.e(TAG, "Remove " + remotePath + ": " + result.getLogMessage(), e); } finally { if (delete != null) delete.releaseConnection(); } return result; } }
@Override protected RemoteOperationResult run(OwnCloudClient client) { RemoteOperationResult result = null; int status = -1; DeleteMethod delete = null; try { String id = "/" + String.valueOf(mRemoteShareId); delete = new DeleteMethod(client.getBaseUri() + ShareUtils.SHARING_API_PATH + id); delete.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE); status = client.executeMethod(delete); if (isSuccess(status)) { String response = delete.getResponseBodyAsString(); // Parse xml response and obtain the list of shares ShareToRemoteOperationResultParser parser = new ShareToRemoteOperationResultParser( new ShareXMLParser() ); result = parser.parse(response); Log_OC.d(TAG, "Unshare " + id + ": " + result.getLogMessage()); } else { result = new RemoteOperationResult(false, delete); } } catch (Exception e) { result = new RemoteOperationResult(e); Log_OC.e(TAG, "Unshare Link Exception " + result.getLogMessage(), e); } finally { if (delete != null) delete.releaseConnection(); } return result; }
/** * Performs the operation * * @param client Client object to communicate with the remote ownCloud server. */ @Override protected RemoteOperationResult run(OwnCloudClient client) { RemoteOperationResult result; OwnCloudVersion version = client.getOwnCloudVersion(); boolean versionWithForbiddenChars = (version != null && version.isVersionWithForbiddenCharacters()); boolean noInvalidChars = FileUtils.isValidPath(mRemotePath, versionWithForbiddenChars); if (noInvalidChars) { result = createFolder(client); if (!result.isSuccess() && mCreateFullPath && RemoteOperationResult.ResultCode.CONFLICT == result.getCode()) { result = createParentFolder(FileUtils.getParentPath(mRemotePath), client); if (result.isSuccess()) { result = createFolder(client); // second (and last) try } } } else { result = new RemoteOperationResult<>(ResultCode.INVALID_CHARACTER_IN_NAME); } return result; }