File indexing completed on 2023-09-24 04:08:45
0001 /* 0002 SPDX-License-Identifier: LGPL-2.0-or-later 0003 SPDX-FileCopyrightText: 2000 Waldo Bastian <bastian@kde.org> 0004 SPDX-FileCopyrightText: 2000 David Faure <faure@kde.org> 0005 SPDX-FileCopyrightText: 2000 Stephan Kulow <coolo@kde.org> 0006 SPDX-FileCopyrightText: 2007 Thiago Macieira <thiago@kde.org> 0007 SPDX-FileCopyrightText: 2019-2022 Harald Sitter <sitter@kde.org> 0008 */ 0009 0010 #include "workerbase.h" 0011 #include "workerbase_p.h" 0012 0013 #include <commands_p.h> 0014 0015 namespace KIO 0016 { 0017 0018 WorkerBase::WorkerBase(const QByteArray &protocol, const QByteArray &poolSocket, const QByteArray &appSocket) 0019 : d(new WorkerBasePrivate(protocol, poolSocket, appSocket, this)) 0020 { 0021 } 0022 0023 WorkerBase::~WorkerBase() = default; 0024 0025 void WorkerBase::dispatchLoop() 0026 { 0027 d->bridge.dispatchLoop(); 0028 } 0029 0030 void WorkerBase::connectWorker(const QString &address) 0031 { 0032 d->bridge.connectSlave(address); 0033 } 0034 0035 void WorkerBase::disconnectWorker() 0036 { 0037 d->bridge.disconnectSlave(); 0038 } 0039 0040 void WorkerBase::setMetaData(const QString &key, const QString &value) 0041 { 0042 d->bridge.setMetaData(key, value); 0043 } 0044 0045 QString WorkerBase::metaData(const QString &key) const 0046 { 0047 return d->bridge.metaData(key); 0048 } 0049 0050 MetaData WorkerBase::allMetaData() const 0051 { 0052 return d->bridge.allMetaData(); 0053 } 0054 0055 bool WorkerBase::hasMetaData(const QString &key) const 0056 { 0057 return d->bridge.hasMetaData(key); 0058 } 0059 0060 QMap<QString, QVariant> WorkerBase::mapConfig() const 0061 { 0062 return d->bridge.mapConfig(); 0063 } 0064 0065 bool WorkerBase::configValue(const QString &key, bool defaultValue) const 0066 { 0067 return d->bridge.configValue(key, defaultValue); 0068 } 0069 0070 int WorkerBase::configValue(const QString &key, int defaultValue) const 0071 { 0072 return d->bridge.configValue(key, defaultValue); 0073 } 0074 0075 QString WorkerBase::configValue(const QString &key, const QString &defaultValue) const 0076 { 0077 return d->bridge.configValue(key, defaultValue); 0078 } 0079 0080 KConfigGroup *WorkerBase::config() 0081 { 0082 return d->bridge.config(); 0083 } 0084 0085 void WorkerBase::sendMetaData() 0086 { 0087 d->bridge.sendMetaData(); 0088 } 0089 0090 void WorkerBase::sendAndKeepMetaData() 0091 { 0092 d->bridge.sendAndKeepMetaData(); 0093 } 0094 0095 KRemoteEncoding *WorkerBase::remoteEncoding() 0096 { 0097 return d->bridge.remoteEncoding(); 0098 } 0099 0100 void WorkerBase::data(const QByteArray &data) 0101 { 0102 d->bridge.data(data); 0103 } 0104 0105 void WorkerBase::dataReq() 0106 { 0107 d->bridge.dataReq(); 0108 } 0109 0110 #if KIOCORE_BUILD_DEPRECATED_SINCE(5, 103) 0111 void WorkerBase::needSubUrlData() 0112 { 0113 d->bridge.needSubUrlData(); 0114 } 0115 #endif 0116 0117 void WorkerBase::workerStatus(const QString &host, bool connected) 0118 { 0119 d->bridge.slaveStatus(host, connected); 0120 } 0121 0122 void WorkerBase::canResume() 0123 { 0124 d->bridge.canResume(); 0125 } 0126 0127 void WorkerBase::totalSize(KIO::filesize_t _bytes) 0128 { 0129 d->bridge.totalSize(_bytes); 0130 } 0131 0132 void WorkerBase::processedSize(KIO::filesize_t _bytes) 0133 { 0134 d->bridge.processedSize(_bytes); 0135 } 0136 0137 void WorkerBase::written(KIO::filesize_t _bytes) 0138 { 0139 d->bridge.written(_bytes); 0140 } 0141 0142 void WorkerBase::position(KIO::filesize_t _pos) 0143 { 0144 d->bridge.position(_pos); 0145 } 0146 0147 void WorkerBase::truncated(KIO::filesize_t _length) 0148 { 0149 d->bridge.truncated(_length); 0150 } 0151 0152 void WorkerBase::speed(unsigned long _bytes_per_second) 0153 { 0154 d->bridge.speed(_bytes_per_second); 0155 } 0156 0157 void WorkerBase::redirection(const QUrl &_url) 0158 { 0159 d->bridge.redirection(_url); 0160 } 0161 0162 void WorkerBase::errorPage() 0163 { 0164 d->bridge.errorPage(); 0165 } 0166 0167 void WorkerBase::mimeType(const QString &_type) 0168 { 0169 d->bridge.mimeType(_type); 0170 } 0171 0172 void WorkerBase::exit() 0173 { 0174 d->bridge.exit(); 0175 } 0176 0177 void WorkerBase::warning(const QString &_msg) 0178 { 0179 d->bridge.warning(_msg); 0180 } 0181 0182 void WorkerBase::infoMessage(const QString &_msg) 0183 { 0184 d->bridge.infoMessage(_msg); 0185 } 0186 0187 void WorkerBase::statEntry(const UDSEntry &entry) 0188 { 0189 d->bridge.statEntry(entry); 0190 } 0191 0192 void WorkerBase::listEntry(const UDSEntry &entry) 0193 { 0194 d->bridge.listEntry(entry); 0195 } 0196 0197 void WorkerBase::listEntries(const UDSEntryList &list) 0198 { 0199 d->bridge.listEntries(list); 0200 } 0201 0202 void WorkerBase::appConnectionMade() 0203 { 0204 } // No response! 0205 0206 void WorkerBase::setHost(QString const &, quint16, QString const &, QString const &) 0207 { 0208 } // No response! 0209 0210 WorkerResult WorkerBase::openConnection() 0211 { 0212 return WorkerResult::fail(ERR_UNSUPPORTED_ACTION, unsupportedActionErrorString(d->protocolName(), CMD_CONNECT)); 0213 } 0214 0215 void WorkerBase::closeConnection() 0216 { 0217 } // No response! 0218 0219 WorkerResult WorkerBase::stat(QUrl const &) 0220 { 0221 return WorkerResult::fail(ERR_UNSUPPORTED_ACTION, unsupportedActionErrorString(d->protocolName(), CMD_STAT)); 0222 } 0223 0224 WorkerResult WorkerBase::put(QUrl const &, int, JobFlags) 0225 { 0226 return WorkerResult::fail(ERR_UNSUPPORTED_ACTION, unsupportedActionErrorString(d->protocolName(), CMD_PUT)); 0227 } 0228 0229 WorkerResult WorkerBase::special(const QByteArray &) 0230 { 0231 return WorkerResult::fail(ERR_UNSUPPORTED_ACTION, unsupportedActionErrorString(d->protocolName(), CMD_SPECIAL)); 0232 } 0233 0234 WorkerResult WorkerBase::listDir(QUrl const &) 0235 { 0236 return WorkerResult::fail(ERR_UNSUPPORTED_ACTION, unsupportedActionErrorString(d->protocolName(), CMD_LISTDIR)); 0237 } 0238 0239 WorkerResult WorkerBase::get(QUrl const &) 0240 { 0241 return WorkerResult::fail(ERR_UNSUPPORTED_ACTION, unsupportedActionErrorString(d->protocolName(), CMD_GET)); 0242 } 0243 0244 WorkerResult WorkerBase::open(QUrl const &, QIODevice::OpenMode) 0245 { 0246 return WorkerResult::fail(ERR_UNSUPPORTED_ACTION, unsupportedActionErrorString(d->protocolName(), CMD_OPEN)); 0247 } 0248 0249 WorkerResult WorkerBase::read(KIO::filesize_t) 0250 { 0251 return WorkerResult::fail(ERR_UNSUPPORTED_ACTION, unsupportedActionErrorString(d->protocolName(), CMD_READ)); 0252 } 0253 0254 WorkerResult WorkerBase::write(const QByteArray &) 0255 { 0256 return WorkerResult::fail(ERR_UNSUPPORTED_ACTION, unsupportedActionErrorString(d->protocolName(), CMD_WRITE)); 0257 } 0258 0259 WorkerResult WorkerBase::seek(KIO::filesize_t) 0260 { 0261 return WorkerResult::fail(ERR_UNSUPPORTED_ACTION, unsupportedActionErrorString(d->protocolName(), CMD_SEEK)); 0262 } 0263 0264 WorkerResult WorkerBase::truncate(KIO::filesize_t) 0265 { 0266 return WorkerResult::fail(ERR_UNSUPPORTED_ACTION, unsupportedActionErrorString(d->protocolName(), CMD_TRUNCATE)); 0267 } 0268 0269 WorkerResult WorkerBase::close() 0270 { 0271 return WorkerResult::fail(ERR_UNSUPPORTED_ACTION, unsupportedActionErrorString(d->protocolName(), CMD_CLOSE)); 0272 } 0273 0274 WorkerResult WorkerBase::mimetype(QUrl const &url) 0275 { 0276 return get(url); 0277 } 0278 0279 WorkerResult WorkerBase::rename(QUrl const &, QUrl const &, JobFlags) 0280 { 0281 return WorkerResult::fail(ERR_UNSUPPORTED_ACTION, unsupportedActionErrorString(d->protocolName(), CMD_RENAME)); 0282 } 0283 0284 WorkerResult WorkerBase::symlink(QString const &, QUrl const &, JobFlags) 0285 { 0286 return WorkerResult::fail(ERR_UNSUPPORTED_ACTION, unsupportedActionErrorString(d->protocolName(), CMD_SYMLINK)); 0287 } 0288 0289 WorkerResult WorkerBase::copy(QUrl const &, QUrl const &, int, JobFlags) 0290 { 0291 return WorkerResult::fail(ERR_UNSUPPORTED_ACTION, unsupportedActionErrorString(d->protocolName(), CMD_COPY)); 0292 } 0293 0294 WorkerResult WorkerBase::del(QUrl const &, bool) 0295 { 0296 return WorkerResult::fail(ERR_UNSUPPORTED_ACTION, unsupportedActionErrorString(d->protocolName(), CMD_DEL)); 0297 } 0298 0299 WorkerResult WorkerBase::mkdir(QUrl const &, int) 0300 { 0301 return WorkerResult::fail(ERR_UNSUPPORTED_ACTION, unsupportedActionErrorString(d->protocolName(), CMD_MKDIR)); 0302 } 0303 0304 WorkerResult WorkerBase::chmod(QUrl const &, int) 0305 { 0306 return WorkerResult::fail(ERR_UNSUPPORTED_ACTION, unsupportedActionErrorString(d->protocolName(), CMD_CHMOD)); 0307 } 0308 0309 WorkerResult WorkerBase::setModificationTime(QUrl const &, const QDateTime &) 0310 { 0311 return WorkerResult::fail(ERR_UNSUPPORTED_ACTION, unsupportedActionErrorString(d->protocolName(), CMD_SETMODIFICATIONTIME)); 0312 } 0313 0314 WorkerResult WorkerBase::chown(QUrl const &, const QString &, const QString &) 0315 { 0316 return WorkerResult::fail(ERR_UNSUPPORTED_ACTION, unsupportedActionErrorString(d->protocolName(), CMD_CHOWN)); 0317 } 0318 0319 WorkerResult WorkerBase::multiGet(const QByteArray &) 0320 { 0321 return WorkerResult::fail(ERR_UNSUPPORTED_ACTION, unsupportedActionErrorString(d->protocolName(), CMD_MULTI_GET)); 0322 } 0323 0324 WorkerResult WorkerBase::fileSystemFreeSpace(const QUrl &) 0325 { 0326 return WorkerResult::fail(ERR_UNSUPPORTED_ACTION, unsupportedActionErrorString(d->protocolName(), CMD_FILESYSTEMFREESPACE)); 0327 } 0328 0329 void WorkerBase::worker_status() 0330 { 0331 workerStatus(QString(), false); 0332 } 0333 0334 void WorkerBase::reparseConfiguration() 0335 { 0336 // base implementation called by bridge 0337 } 0338 0339 int WorkerBase::openPasswordDialog(AuthInfo &info, const QString &errorMsg) 0340 { 0341 return d->bridge.openPasswordDialogV2(info, errorMsg); 0342 } 0343 0344 int WorkerBase::messageBox(MessageBoxType type, const QString &text, const QString &title, const QString &primaryActionText, const QString &secondaryActionText) 0345 { 0346 return messageBox(text, type, title, primaryActionText, secondaryActionText, QString()); 0347 } 0348 0349 int WorkerBase::messageBox(const QString &text, 0350 MessageBoxType type, 0351 const QString &title, 0352 const QString &primaryActionText, 0353 const QString &secondaryActionText, 0354 const QString &dontAskAgainName) 0355 { 0356 return d->bridge.messageBox(text, static_cast<SlaveBase::MessageBoxType>(type), title, primaryActionText, secondaryActionText, dontAskAgainName); 0357 } 0358 0359 bool WorkerBase::canResume(KIO::filesize_t offset) 0360 { 0361 return d->bridge.canResume(offset); 0362 } 0363 0364 int WorkerBase::waitForAnswer(int expected1, int expected2, QByteArray &data, int *pCmd) 0365 { 0366 return d->bridge.waitForAnswer(expected1, expected2, data, pCmd); 0367 } 0368 0369 int WorkerBase::readData(QByteArray &buffer) 0370 { 0371 return d->bridge.readData(buffer); 0372 } 0373 0374 void WorkerBase::setTimeoutSpecialCommand(int timeout, const QByteArray &data) 0375 { 0376 d->bridge.setTimeoutSpecialCommand(timeout, data); 0377 } 0378 0379 bool WorkerBase::checkCachedAuthentication(AuthInfo &info) 0380 { 0381 return d->bridge.checkCachedAuthentication(info); 0382 } 0383 0384 bool WorkerBase::cacheAuthentication(const AuthInfo &info) 0385 { 0386 return d->bridge.cacheAuthentication(info); 0387 } 0388 0389 int WorkerBase::connectTimeout() 0390 { 0391 return d->bridge.connectTimeout(); 0392 } 0393 0394 int WorkerBase::proxyConnectTimeout() 0395 { 0396 return d->bridge.proxyConnectTimeout(); 0397 } 0398 0399 int WorkerBase::responseTimeout() 0400 { 0401 return d->bridge.responseTimeout(); 0402 } 0403 0404 int WorkerBase::readTimeout() 0405 { 0406 return d->bridge.readTimeout(); 0407 } 0408 0409 bool WorkerBase::wasKilled() const 0410 { 0411 return d->bridge.wasKilled(); 0412 } 0413 0414 void WorkerBase::lookupHost(const QString &host) 0415 { 0416 return d->bridge.lookupHost(host); 0417 } 0418 0419 int WorkerBase::waitForHostInfo(QHostInfo &info) 0420 { 0421 return d->bridge.waitForHostInfo(info); 0422 } 0423 0424 PrivilegeOperationStatus WorkerBase::requestPrivilegeOperation(const QString &operationDetails) 0425 { 0426 return d->bridge.requestPrivilegeOperation(operationDetails); 0427 } 0428 0429 void WorkerBase::addTemporaryAuthorization(const QString &action) 0430 { 0431 d->bridge.addTemporaryAuthorization(action); 0432 } 0433 0434 class WorkerResultPrivate 0435 { 0436 public: 0437 bool success; 0438 int error; 0439 QString errorString; 0440 }; 0441 0442 WorkerResult::~WorkerResult() = default; 0443 0444 WorkerResult::WorkerResult(const WorkerResult &rhs) 0445 : d(std::make_unique<WorkerResultPrivate>(*rhs.d)) 0446 { 0447 } 0448 0449 WorkerResult &WorkerResult::operator=(const WorkerResult &rhs) 0450 { 0451 if (this == &rhs) { 0452 return *this; 0453 } 0454 d = std::make_unique<WorkerResultPrivate>(*rhs.d); 0455 return *this; 0456 } 0457 0458 WorkerResult::WorkerResult(WorkerResult &&) noexcept = default; 0459 WorkerResult &WorkerResult::operator=(WorkerResult &&) noexcept = default; 0460 0461 bool WorkerResult::success() const 0462 { 0463 return d->success; 0464 } 0465 0466 int WorkerResult::error() const 0467 { 0468 return d->error; 0469 } 0470 0471 QString WorkerResult::errorString() const 0472 { 0473 return d->errorString; 0474 } 0475 0476 Q_REQUIRED_RESULT WorkerResult WorkerResult::fail(int _error, const QString &_errorString) 0477 { 0478 return WorkerResult(std::make_unique<WorkerResultPrivate>(WorkerResultPrivate{false, _error, _errorString})); 0479 } 0480 0481 Q_REQUIRED_RESULT WorkerResult WorkerResult::pass() 0482 { 0483 return WorkerResult(std::make_unique<WorkerResultPrivate>(WorkerResultPrivate{true, 0, QString()})); 0484 } 0485 0486 WorkerResult::WorkerResult(std::unique_ptr<WorkerResultPrivate> &&dptr) 0487 : d(std::move(dptr)) 0488 { 0489 } 0490 0491 void WorkerBase::setIncomingMetaData(const KIO::MetaData &metaData) 0492 { 0493 d->bridge.setIncomingMetaData(metaData); 0494 } 0495 } // namespace KIO