123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317 |
- /**
- * ownCloud Android client application
- *
- * @author masensio
- * Copyright (C) 2014 ownCloud Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- package com.owncloud.android.utils;
- import android.content.res.Resources;
- import com.owncloud.android.R;
- import com.owncloud.android.lib.common.operations.RemoteOperation;
- import com.owncloud.android.lib.common.operations.RemoteOperationResult;
- import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
- import com.owncloud.android.operations.CopyFileOperation;
- import com.owncloud.android.operations.CreateFolderOperation;
- import com.owncloud.android.operations.CreateShareViaLinkOperation;
- import com.owncloud.android.operations.CreateShareWithShareeOperation;
- import com.owncloud.android.operations.DownloadFileOperation;
- import com.owncloud.android.operations.MoveFileOperation;
- import com.owncloud.android.operations.RemoveFileOperation;
- import com.owncloud.android.operations.RenameFileOperation;
- import com.owncloud.android.operations.SynchronizeFileOperation;
- import com.owncloud.android.operations.SynchronizeFolderOperation;
- import com.owncloud.android.operations.UnshareOperation;
- import com.owncloud.android.operations.UpdateSharePermissionsOperation;
- import com.owncloud.android.operations.UpdateShareViaLinkOperation;
- import com.owncloud.android.operations.UploadFileOperation;
- import org.apache.commons.httpclient.ConnectTimeoutException;
- import java.io.File;
- import java.net.SocketTimeoutException;
- /**
- * Class to choose proper error messages to show to the user depending on the results of operations,
- * always following the same policy.
- */
- public class ErrorMessageAdapter {
- public static String getErrorCauseMessage(RemoteOperationResult result,
- RemoteOperation operation, Resources res) {
- String message = null;
- if (!result.isSuccess() && isCommonError(result.getCode())) {
- message = getCommonErrorMessage(result, res);
- } else if (operation instanceof UploadFileOperation) {
- if (result.isSuccess()) {
- message = String.format(
- res.getString(R.string.uploader_upload_succeeded_content_single),
- ((UploadFileOperation) operation).getFileName());
- } else {
- if (result.getCode() == ResultCode.LOCAL_STORAGE_FULL
- || result.getCode() == ResultCode.LOCAL_STORAGE_NOT_COPIED) {
- message = String.format(
- res.getString(R.string.error__upload__local_file_not_copied),
- ((UploadFileOperation) operation).getFileName(),
- res.getString(R.string.app_name));
- /*
- } else if (result.getCode() == ResultCode.QUOTA_EXCEEDED) {
- message = res.getString(R.string.failed_upload_quota_exceeded_text);
- */
- } else if (result.getCode() == ResultCode.FORBIDDEN) {
- message = String.format(res.getString(R.string.forbidden_permissions),
- res.getString(R.string.uploader_upload_forbidden_permissions));
- } else if (result.getCode() == ResultCode.INVALID_CHARACTER_DETECT_IN_SERVER) {
- message = res.getString(R.string.filename_forbidden_charaters_from_server);
- } else {
- message = String.format(
- res.getString(R.string.uploader_upload_failed_content_single),
- ((UploadFileOperation) operation).getFileName());
- }
- }
- } else if (operation instanceof DownloadFileOperation) {
- if (result.isSuccess()) {
- message = String.format(
- res.getString(R.string.downloader_download_succeeded_content),
- new File(((DownloadFileOperation) operation).getSavePath()).getName());
- } else {
- if (result.getCode() == ResultCode.FILE_NOT_FOUND) {
- message = res.getString(R.string.downloader_download_file_not_found);
- } else {
- message = String.format(
- res.getString(R.string.downloader_download_failed_content), new File(
- ((DownloadFileOperation) operation).getSavePath()).getName());
- }
- }
- } else if (operation instanceof RemoveFileOperation) {
- if (result.isSuccess()) {
- message = res.getString(R.string.remove_success_msg);
- } else {
- if (result.getCode().equals(ResultCode.FORBIDDEN)) {
- // Error --> No permissions
- message = String.format(res.getString(R.string.forbidden_permissions),
- res.getString(R.string.forbidden_permissions_delete));
- } else {
- message = res.getString(R.string.remove_fail_msg);
- }
- }
- } else if (operation instanceof RenameFileOperation) {
- if (result.getCode().equals(ResultCode.INVALID_LOCAL_FILE_NAME)) {
- message = res.getString(R.string.rename_local_fail_msg);
- } else if (result.getCode().equals(ResultCode.FORBIDDEN)) {
- // Error --> No permissions
- message = String.format(res.getString(R.string.forbidden_permissions),
- res.getString(R.string.forbidden_permissions_rename));
- } else if (result.getCode().equals(ResultCode.INVALID_CHARACTER_IN_NAME)) {
- message = res.getString(R.string.filename_forbidden_characters);
- } else if (result.getCode() == ResultCode.INVALID_CHARACTER_DETECT_IN_SERVER) {
- message = res.getString(R.string.filename_forbidden_charaters_from_server);
- } else {
- message = res.getString(R.string.rename_server_fail_msg);
- }
- } else if (operation instanceof SynchronizeFileOperation) {
- if (!((SynchronizeFileOperation) operation).transferWasRequested()) {
- message = res.getString(R.string.sync_file_nothing_to_do_msg);
- }
- } else if (operation instanceof CreateFolderOperation) {
- if (result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME) {
- message = res.getString(R.string.filename_forbidden_characters);
- } else if (result.getCode().equals(ResultCode.FORBIDDEN)) {
- message = String.format(res.getString(R.string.forbidden_permissions),
- res.getString(R.string.forbidden_permissions_create));
- } else if (result.getCode() == ResultCode.INVALID_CHARACTER_DETECT_IN_SERVER) {
- message = res.getString(R.string.filename_forbidden_charaters_from_server);
- } else {
- message = res.getString(R.string.create_dir_fail_msg);
- }
- } else if (operation instanceof CreateShareViaLinkOperation ||
- operation instanceof CreateShareWithShareeOperation) {
- if (result.getData() != null && result.getData().size() > 0) {
- message = (String) result.getData().get(0); // share API sends its own error messages
- } else if (result.getCode() == ResultCode.SHARE_NOT_FOUND) {
- message = res.getString(R.string.share_link_file_no_exist);
- } else if (result.getCode() == ResultCode.SHARE_FORBIDDEN) {
- // Error --> No permissions
- message = String.format(res.getString(R.string.forbidden_permissions),
- res.getString(R.string.share_link_forbidden_permissions));
- } else { // Generic error
- // Show a Message, operation finished without success
- message = res.getString(R.string.share_link_file_error);
- }
- } else if (operation instanceof UnshareOperation) {
- if (result.getData() != null && result.getData().size() > 0) {
- message = (String) result.getData().get(0); // share API sends its own error messages
- } else if (result.getCode() == ResultCode.SHARE_NOT_FOUND) {
- message = res.getString(R.string.unshare_link_file_no_exist);
- } else if (result.getCode() == ResultCode.SHARE_FORBIDDEN) {
- // Error --> No permissions
- message = String.format(res.getString(R.string.forbidden_permissions),
- res.getString(R.string.unshare_link_forbidden_permissions));
- } else { // Generic error
- // Show a Message, operation finished without success
- message = res.getString(R.string.unshare_link_file_error);
- }
- } else if (operation instanceof UpdateShareViaLinkOperation ||
- operation instanceof UpdateSharePermissionsOperation) {
- if (result.getData() != null && result.getData().size() > 0) {
- message = (String) result.getData().get(0); // share API sends its own error messages
- } else if (result.getCode() == ResultCode.SHARE_NOT_FOUND) {
- message = res.getString(R.string.update_link_file_no_exist);
- } else if (result.getCode() == ResultCode.SHARE_FORBIDDEN) {
- // Error --> No permissions
- message = String.format(res.getString(R.string.forbidden_permissions),
- res.getString(R.string.update_link_forbidden_permissions));
- } else { // Generic error
- // Show a Message, operation finished without success
- message = res.getString(R.string.update_link_file_error);
- }
- } else if (operation instanceof MoveFileOperation) {
- if (result.getCode() == ResultCode.FILE_NOT_FOUND) {
- message = res.getString(R.string.move_file_not_found);
- } else if (result.getCode() == ResultCode.INVALID_MOVE_INTO_DESCENDANT) {
- message = res.getString(R.string.move_file_invalid_into_descendent);
- } else if (result.getCode() == ResultCode.INVALID_OVERWRITE) {
- message = res.getString(R.string.move_file_invalid_overwrite);
- } else if (result.getCode() == ResultCode.FORBIDDEN) {
- message = String.format(res.getString(R.string.forbidden_permissions),
- res.getString(R.string.forbidden_permissions_move));
- } else if (result.getCode() == ResultCode.INVALID_CHARACTER_DETECT_IN_SERVER) {
- message = res.getString(R.string.filename_forbidden_charaters_from_server);
- } else { // Generic error
- // Show a Message, operation finished without success
- message = res.getString(R.string.move_file_error);
- }
- } else if (operation instanceof SynchronizeFolderOperation) {
- if (!result.isSuccess()) {
- String folderPathName = new File(
- ((SynchronizeFolderOperation) operation).getFolderPath()).getName();
- if (result.getCode() == ResultCode.FILE_NOT_FOUND) {
- message = String.format(res.getString(R.string.sync_current_folder_was_removed),
- folderPathName);
- } else { // Generic error
- // Show a Message, operation finished without success
- message = String.format(res.getString(R.string.sync_folder_failed_content),
- folderPathName);
- }
- }
- } else if (operation instanceof CopyFileOperation) {
- if (result.getCode() == ResultCode.FILE_NOT_FOUND) {
- message = res.getString(R.string.copy_file_not_found);
- } else if (result.getCode() == ResultCode.INVALID_COPY_INTO_DESCENDANT) {
- message = res.getString(R.string.copy_file_invalid_into_descendent);
- } else if (result.getCode() == ResultCode.INVALID_OVERWRITE) {
- message = res.getString(R.string.copy_file_invalid_overwrite);
- } else if (result.getCode() == ResultCode.FORBIDDEN) {
- message = String.format(res.getString(R.string.forbidden_permissions),
- res.getString(R.string.forbidden_permissions_copy));
- } else { // Generic error
- // Show a Message, operation finished without success
- message = res.getString(R.string.copy_file_error);
- }
- }
- return message;
- }
- private static String getCommonErrorMessage(RemoteOperationResult result, Resources res) {
- String message = null;
- if (!result.isSuccess()) {
- if (result.getCode() == ResultCode.WRONG_CONNECTION) {
- message = res.getString(R.string.network_error_socket_exception);
- } else if (result.getCode() == ResultCode.TIMEOUT) {
- message = res.getString(R.string.network_error_socket_exception);
- if (result.getException() instanceof SocketTimeoutException) {
- message = res.getString(R.string.network_error_socket_timeout_exception);
- } else if (result.getException() instanceof ConnectTimeoutException) {
- message = res.getString(R.string.network_error_connect_timeout_exception);
- }
- } else if (result.getCode() == ResultCode.HOST_NOT_AVAILABLE) {
- message = res.getString(R.string.network_host_not_available);
- } else if (result.getCode() == ResultCode.MAINTENANCE_MODE) {
- message = res.getString(R.string.maintenance_mode);
- }
- }
- return message;
- }
- private static boolean isCommonError(RemoteOperationResult.ResultCode code) {
- return code == ResultCode.WRONG_CONNECTION ||
- code == ResultCode.TIMEOUT ||
- code == ResultCode.HOST_NOT_AVAILABLE ||
- code == ResultCode.MAINTENANCE_MODE;
- }
- }
|