File indexing completed on 2024-04-28 08:49:46
0001 /* 0002 * SPDX-FileCopyrightText: 2022 Kai Uwe Broulik <kde@broulik.de> 0003 * SPDX-License-Identifier: GPL-2.0-or-later 0004 */ 0005 0006 #include "afcutils.h" 0007 0008 #include "afc_debug.h" 0009 0010 #include <KLocalizedString> 0011 0012 using namespace KIO; 0013 0014 WorkerResult AfcUtils::Result::from(const afc_error_t afcError, const QString &errorText) 0015 { 0016 switch (afcError) { 0017 case AFC_E_SUCCESS: 0018 case AFC_E_END_OF_DATA: 0019 return WorkerResult::pass(); 0020 0021 case AFC_E_UNKNOWN_ERROR: 0022 return WorkerResult::fail(ERR_UNKNOWN, errorText); 0023 0024 case AFC_E_NO_RESOURCES: 0025 case AFC_E_NO_MEM: 0026 return WorkerResult::fail(ERR_OUT_OF_MEMORY, errorText); 0027 0028 case AFC_E_READ_ERROR: 0029 return WorkerResult::fail(ERR_CANNOT_READ, errorText); 0030 case AFC_E_WRITE_ERROR: 0031 return WorkerResult::fail(ERR_CANNOT_WRITE, errorText); 0032 case AFC_E_OBJECT_NOT_FOUND: 0033 return WorkerResult::fail(ERR_DOES_NOT_EXIST, errorText); 0034 case AFC_E_OBJECT_IS_DIR: 0035 return WorkerResult::fail(ERR_IS_DIRECTORY, errorText); 0036 case AFC_E_PERM_DENIED: 0037 return WorkerResult::fail(ERR_ACCESS_DENIED, errorText); 0038 case AFC_E_SERVICE_NOT_CONNECTED: 0039 return WorkerResult::fail(ERR_CONNECTION_BROKEN, errorText); 0040 case AFC_E_OP_TIMEOUT: 0041 return WorkerResult::fail(ERR_SERVER_TIMEOUT, errorText); 0042 case AFC_E_OP_NOT_SUPPORTED: 0043 return WorkerResult::fail(ERR_UNSUPPORTED_ACTION, errorText); 0044 case AFC_E_OBJECT_EXISTS: 0045 return WorkerResult::fail(ERR_FILE_ALREADY_EXIST, errorText); 0046 case AFC_E_NO_SPACE_LEFT: 0047 return WorkerResult::fail(ERR_DISK_FULL, errorText); 0048 case AFC_E_IO_ERROR: 0049 return WorkerResult::fail(ERR_CONNECTION_BROKEN, errorText); 0050 case AFC_E_INTERNAL_ERROR: 0051 return WorkerResult::fail(ERR_INTERNAL_SERVER, errorText); 0052 case AFC_E_DIR_NOT_EMPTY: 0053 return WorkerResult::fail(ERR_CANNOT_RMDIR, errorText); 0054 case AFC_E_MUX_ERROR: 0055 return WorkerResult::fail(ERR_CANNOT_CONNECT, errorText); 0056 // case AFC_E_NOT_ENOUGH_DATA: 0057 // return WorkerResult::fail(ERR_UNKNOWN_INTERRUPT, errorText); 0058 default: 0059 qCWarning(KIO_AFC_LOG) << "Unhandled afc_error_t" << afcError; 0060 return WorkerResult::fail(ERR_INTERNAL, i18n("Unhandled AFC error code '%1'", afcError)); 0061 } 0062 } 0063 0064 WorkerResult AfcUtils::Result::from(const house_arrest_error_t houseArrestError, const QString &errorText) 0065 { 0066 switch (houseArrestError) { 0067 case HOUSE_ARREST_E_SUCCESS: 0068 return WorkerResult::pass(); 0069 case HOUSE_ARREST_E_CONN_FAILED: 0070 return WorkerResult::fail(ERR_CANNOT_CONNECT, errorText); 0071 default: 0072 qCWarning(KIO_AFC_LOG) << "Unhandled house_arrest_error_t" << houseArrestError; 0073 return WorkerResult::fail(ERR_INTERNAL, i18n("Unhandled housearrest error code '%1'", houseArrestError)); 0074 } 0075 } 0076 0077 WorkerResult AfcUtils::Result::from(const instproxy_error_t instProxyError, const QString &errorText) 0078 { 0079 switch (instProxyError) { 0080 case INSTPROXY_E_SUCCESS: 0081 return WorkerResult::pass(); 0082 case INSTPROXY_E_CONN_FAILED: 0083 return WorkerResult::fail(ERR_CANNOT_CONNECT, errorText); 0084 case INSTPROXY_E_RECEIVE_TIMEOUT: 0085 return WorkerResult::fail(ERR_SERVER_TIMEOUT, errorText); 0086 // We don't actually manage any apps (yet?), so most error codes don't apply to us 0087 default: 0088 qCWarning(KIO_AFC_LOG) << "Unhandled instproxy_error_t" << instProxyError; 0089 return WorkerResult::fail(ERR_INTERNAL, i18n("Unhandled instproxy error code '%1'", instProxyError)); 0090 } 0091 } 0092 0093 WorkerResult AfcUtils::Result::from(const lockdownd_error_t lockdownError, const QString &errorText) 0094 { 0095 switch (lockdownError) { 0096 case LOCKDOWN_E_SUCCESS: 0097 return WorkerResult::pass(); 0098 case LOCKDOWN_E_RECEIVE_TIMEOUT: 0099 return WorkerResult::fail(ERR_SERVER_TIMEOUT, errorText); 0100 case LOCKDOWN_E_MUX_ERROR: 0101 return WorkerResult::fail(ERR_CANNOT_CONNECT, errorText); 0102 case LOCKDOWN_E_PASSWORD_PROTECTED: { 0103 QString text = errorText; 0104 if (text.isEmpty()) { 0105 text = i18n("The device is locked. Please enter the passcode on the device and try again."); 0106 } 0107 return WorkerResult::fail(ERR_WORKER_DEFINED, text); 0108 } 0109 case LOCKDOWN_E_USER_DENIED_PAIRING: { 0110 QString text = errorText; 0111 if (text.isEmpty()) { 0112 text = i18n("You have denied this computer access to the device."); 0113 } 0114 return WorkerResult::fail(ERR_WORKER_DEFINED, text); 0115 } 0116 case LOCKDOWN_E_PAIRING_DIALOG_RESPONSE_PENDING: { 0117 QString text = errorText; 0118 if (text.isEmpty()) { 0119 text = i18n("You need to allow this computer to access the device. Please accept the prompt on the device and try again."); 0120 } 0121 return WorkerResult::fail(ERR_WORKER_DEFINED, text); 0122 } 0123 // lockdownd_client_new_with_handshake returns this when pairing failed rather than any of the errors above 0124 case LOCKDOWN_E_INVALID_HOST_ID: { 0125 QString text = errorText; 0126 if (text.isEmpty()) { 0127 text = i18n("Cannot access the device. Make sure it is unlocked and allows this computer to access it."); 0128 } 0129 return WorkerResult::fail(ERR_WORKER_DEFINED, text); 0130 } 0131 // TODO LOCKDOWN_E_SESSION_INACTIVE 0132 default: 0133 qCWarning(KIO_AFC_LOG) << "Unhandled lockdownd_error_t" << lockdownError; 0134 return WorkerResult::fail(ERR_INTERNAL, i18n("Unhandled lockdownd code '%1'", lockdownError)); 0135 } 0136 } 0137 0138 WorkerResult AfcUtils::Result::from(const sbservices_error_t springBoardError, const QString &errorText) 0139 { 0140 switch (springBoardError) { 0141 case SBSERVICES_E_SUCCESS: 0142 return WorkerResult::pass(); 0143 case SBSERVICES_E_CONN_FAILED: 0144 return WorkerResult::fail(ERR_CANNOT_CONNECT, errorText); 0145 default: 0146 qCWarning(KIO_AFC_LOG) << "Unhandled sbservices_error_t" << springBoardError; 0147 return WorkerResult::fail(ERR_INTERNAL, i18n("Unhandled sbservices code '%1'", springBoardError)); 0148 } 0149 }