|
DBus-1-TQt
1.0
|
00001 /* qdbuserror.cpp TQT_DBusError object 00002 * 00003 * Copyright (C) 2005 Harald Fernengel <harry@kdevelop.org> 00004 * Copyright (C) 2005-2007 Kevin Krammer <kevin.krammer@gmx.at> 00005 * 00006 * Licensed under the Academic Free License version 2.1 00007 * 00008 * This program is free software; you can redistribute it and/or modify 00009 * it under the terms of the GNU General Public License as published by 00010 * the Free Software Foundation; either version 2 of the License, or 00011 * (at your option) any later version. 00012 * 00013 * This program is distributed in the hope that it will be useful, 00014 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00016 * GNU General Public License for more details. 00017 * 00018 * You should have received a copy of the GNU General Public License 00019 * along with this program; if not, write to the Free Software 00020 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 00021 * USA. 00022 * 00023 */ 00024 00025 #include "tqdbuserror.h" 00026 00027 #include <dbus/dbus.h> 00028 00029 #include <tqmap.h> 00030 00031 typedef TQMap<TQString, TQT_DBusError::ErrorType> ErrorNameMap; 00032 static ErrorNameMap errorTypesByName; 00033 00034 static TQString qDBusErrorNameForType(TQT_DBusError::ErrorType type) 00035 { 00036 switch (type) 00037 { 00038 case TQT_DBusError::InvalidError: 00039 Q_ASSERT(false); 00040 return TQString(); 00041 00042 case TQT_DBusError::Failed: 00043 return TQString::fromUtf8(DBUS_ERROR_FAILED); 00044 case TQT_DBusError:: NoMemory: 00045 return TQString::fromUtf8(DBUS_ERROR_NO_MEMORY); 00046 case TQT_DBusError:: ServiceUnknown: 00047 return TQString::fromUtf8(DBUS_ERROR_SERVICE_UNKNOWN); 00048 case TQT_DBusError:: NameHasNoOwner: 00049 return TQString::fromUtf8(DBUS_ERROR_NAME_HAS_NO_OWNER); 00050 case TQT_DBusError:: NoReply: 00051 return TQString::fromUtf8(DBUS_ERROR_NO_REPLY); 00052 case TQT_DBusError:: IOError: 00053 return TQString::fromUtf8(DBUS_ERROR_IO_ERROR); 00054 case TQT_DBusError:: BadAddress: 00055 return TQString::fromUtf8(DBUS_ERROR_BAD_ADDRESS); 00056 case TQT_DBusError:: NotSupported: 00057 return TQString::fromUtf8(DBUS_ERROR_NOT_SUPPORTED); 00058 case TQT_DBusError:: LimitsExceeded: 00059 return TQString::fromUtf8(DBUS_ERROR_LIMITS_EXCEEDED); 00060 case TQT_DBusError:: AccessDenied: 00061 return TQString::fromUtf8(DBUS_ERROR_ACCESS_DENIED); 00062 case TQT_DBusError:: AuthFailed: 00063 return TQString::fromUtf8(DBUS_ERROR_AUTH_FAILED); 00064 case TQT_DBusError:: NoServer: 00065 return TQString::fromUtf8(DBUS_ERROR_NO_SERVER); 00066 case TQT_DBusError:: Timeout: 00067 return TQString::fromUtf8(DBUS_ERROR_TIMEOUT); 00068 case TQT_DBusError:: NoNetwork: 00069 return TQString::fromUtf8(DBUS_ERROR_NO_NETWORK); 00070 case TQT_DBusError:: Disconnected: 00071 return TQString::fromUtf8(DBUS_ERROR_DISCONNECTED); 00072 case TQT_DBusError:: InvalidArgs: 00073 return TQString::fromUtf8(DBUS_ERROR_INVALID_ARGS); 00074 case TQT_DBusError:: FileNotFound: 00075 return TQString::fromUtf8(DBUS_ERROR_FILE_NOT_FOUND); 00076 case TQT_DBusError:: FileExists: 00077 return TQString::fromUtf8(DBUS_ERROR_FILE_EXISTS); 00078 case TQT_DBusError:: UnknownMethod: 00079 return TQString::fromUtf8(DBUS_ERROR_UNKNOWN_METHOD); 00080 case TQT_DBusError:: TimedOut: 00081 return TQString::fromUtf8(DBUS_ERROR_TIMED_OUT); 00082 case TQT_DBusError:: InvalidSignature: 00083 return TQString::fromUtf8(DBUS_ERROR_INVALID_SIGNATURE); 00084 00085 case TQT_DBusError::UserDefined: 00086 Q_ASSERT(false); 00087 return TQString(); 00088 } 00089 00090 Q_ASSERT(false); 00091 return TQString(); 00092 } 00093 00094 static void qDBusErrorSetupNameMapping() 00095 { 00096 for (int i = TQT_DBusError::InvalidError + 1; i < TQT_DBusError::UserDefined; ++i) 00097 { 00098 TQT_DBusError::ErrorType type = static_cast<TQT_DBusError::ErrorType>(i); 00099 errorTypesByName[qDBusErrorNameForType(type)] = type; 00100 } 00101 } 00102 00103 static TQT_DBusError::ErrorType qDBusErrorTypeForName(const TQString& name) 00104 { 00105 if (name.isEmpty()) return TQT_DBusError::InvalidError; 00106 00107 if (errorTypesByName.isEmpty()) 00108 qDBusErrorSetupNameMapping(); 00109 00110 ErrorNameMap::const_iterator it = errorTypesByName.find(name); 00111 if (it != errorTypesByName.end()) return it.data(); 00112 00113 return TQT_DBusError::UserDefined; 00114 } 00115 00116 TQT_DBusError::TQT_DBusError() : errorType(InvalidError), m_dbusErrorSet(false) 00117 { 00118 } 00119 00120 TQT_DBusError::TQT_DBusError(const DBusError *error) : errorType(InvalidError), m_dbusErrorSet(false) 00121 { 00122 if (!error || !dbus_error_is_set(error)) 00123 return; 00124 00125 nm = TQString::fromUtf8(error->name); 00126 msg = TQString::fromUtf8(error->message); 00127 00128 errorType = qDBusErrorTypeForName(nm); 00129 } 00130 00131 TQT_DBusError::TQT_DBusError(const TQString& error, const TQString& message) 00132 : errorType(UserDefined), m_dbusErrorSet(false), nm(error), msg(message) 00133 { 00134 errorType = qDBusErrorTypeForName(nm); 00135 } 00136 00137 bool TQT_DBusError::isValid() const 00138 { 00139 return errorType != InvalidError && !nm.isEmpty() && !msg.isEmpty(); 00140 } 00141 00142 TQT_DBusError::TQT_DBusError(ErrorType type, const TQString& message) 00143 : errorType(type), m_dbusErrorSet(false), msg(message) 00144 { 00145 nm = qDBusErrorNameForType(type); 00146 } 00147 00148 TQT_DBusError TQT_DBusError::stdFailed(const TQString& message) 00149 { 00150 return TQT_DBusError(TQT_DBusError::Failed, message); 00151 } 00152 00153 TQT_DBusError TQT_DBusError::stdNoMemory(const TQString& message) 00154 { 00155 return TQT_DBusError(TQT_DBusError::NoMemory, message); 00156 } 00157 00158 TQT_DBusError TQT_DBusError::stdNoReply(const TQString& message) 00159 { 00160 return TQT_DBusError(TQT_DBusError::NoReply, message); 00161 } 00162 00163 TQT_DBusError TQT_DBusError::stdIOError(const TQString& message) 00164 { 00165 return TQT_DBusError(TQT_DBusError::IOError, message); 00166 } 00167 00168 TQT_DBusError TQT_DBusError::stdNotSupported(const TQString& message) 00169 { 00170 return TQT_DBusError(TQT_DBusError::NotSupported, message); 00171 } 00172 00173 TQT_DBusError TQT_DBusError::stdLimitsExceeded(const TQString& message) 00174 { 00175 return TQT_DBusError(TQT_DBusError::LimitsExceeded, message); 00176 } 00177 00178 TQT_DBusError TQT_DBusError::stdAccessDenied(const TQString& message) 00179 { 00180 return TQT_DBusError(TQT_DBusError::AccessDenied, message); 00181 } 00182 00183 TQT_DBusError TQT_DBusError::stdAuthFailed(const TQString& message) 00184 { 00185 return TQT_DBusError(TQT_DBusError::AuthFailed, message); 00186 } 00187 00188 TQT_DBusError TQT_DBusError::stdTimeout(const TQString& message) 00189 { 00190 return TQT_DBusError(TQT_DBusError::Timeout, message); 00191 } 00192 00193 TQT_DBusError TQT_DBusError::stdInvalidArgs(const TQString& message) 00194 { 00195 return TQT_DBusError(TQT_DBusError::InvalidArgs, message); 00196 } 00197 00198 TQT_DBusError TQT_DBusError::stdFileNotFound(const TQString& message) 00199 { 00200 return TQT_DBusError(TQT_DBusError::FileNotFound, message); 00201 } 00202 00203 TQT_DBusError TQT_DBusError::stdFileExists(const TQString& message) 00204 { 00205 return TQT_DBusError(TQT_DBusError::FileExists, message); 00206 } 00207 00208 TQT_DBusError TQT_DBusError::stdUnknownMethod(const TQString& message) 00209 { 00210 return TQT_DBusError(TQT_DBusError::UnknownMethod, message); 00211 } 00212 00213 TQT_DBusError TQT_DBusError::stdInvalidSignature(const TQString& message) 00214 { 00215 return TQT_DBusError(TQT_DBusError::InvalidSignature, message); 00216 }