File indexing completed on 2024-05-19 08:50:29
0001 /* 0002 * Main implementation for KIO-MTP 0003 * SPDX-FileCopyrightText: 2012 Philipp Schmidt <philschmidt@gmx.net> 0004 * SPDX-FileCopyrightText: 2018 Andreas Krutzler <andreas.krutzler@gmx.net> 0005 * SPDX-FileCopyrightText: 2022 Harald Sitter <sitter@kde.org> 0006 * 0007 * SPDX-License-Identifier: GPL-2.0-or-later 0008 */ 0009 0010 #pragma once 0011 0012 #include <KIO/Global> 0013 #include <KIO/WorkerBase> 0014 #include <KLocalizedString> 0015 0016 #include <errno.h> 0017 #include <stdlib.h> 0018 #include <sys/stat.h> 0019 #include <time.h> 0020 0021 // #include <QCache> 0022 0023 #include <QUrl> 0024 0025 #define MAX_XFER_BUF_SIZE 16348 0026 #define KIO_MTP 7000 0027 #include <kmtpdinterface.h> 0028 0029 class KMTPDeviceInterface; 0030 class KMTPStorageInterface; 0031 class KMTPFile; 0032 0033 using namespace KIO; 0034 0035 class MTPWorker : public QObject, public KIO::WorkerBase 0036 { 0037 Q_OBJECT 0038 0039 enum class Url { 0040 Invalid = -1, 0041 Valid = 0, 0042 Redirected = 1, 0043 NotFound = 2, 0044 }; 0045 0046 public: 0047 /* 0048 * Overwritten KIO-functions, see "kio_mtp.cpp" 0049 */ 0050 MTPWorker(const QByteArray &pool, const QByteArray &app); 0051 ~MTPWorker() override; 0052 0053 WorkerResult listDir(const QUrl &url) override; 0054 WorkerResult stat(const QUrl &url) override; 0055 WorkerResult mimetype(const QUrl &url) override; 0056 WorkerResult get(const QUrl &url) override; 0057 WorkerResult put(const QUrl &url, int, JobFlags flags) override; 0058 WorkerResult copy(const QUrl &src, const QUrl &dest, int, JobFlags flags) override; 0059 WorkerResult mkdir(const QUrl &url, int) override; 0060 WorkerResult del(const QUrl &url, bool) override; 0061 WorkerResult rename(const QUrl &src, const QUrl &dest, JobFlags flags) override; 0062 WorkerResult fileSystemFreeSpace(const QUrl &url) override; 0063 WorkerResult chmod(const QUrl &url, int permissions) override; 0064 WorkerResult chown(const QUrl &url, const QString &owner, const QString &group) override; 0065 0066 private: 0067 /** 0068 * Check if it is a valid url or an udi. 0069 * 0070 * @param url The url to checkUrl 0071 * @return enum MTPWorker::Url 0072 */ 0073 enum MTPWorker::Url checkUrl(const QUrl &url); 0074 0075 /** 0076 * @brief Waits for a pending copy operation to finish while updating its progress. 0077 * @param storage 0078 * @return The result of the operation, usually 0 if valid 0079 */ 0080 int waitForCopyOperation(const KMTPStorageInterface *storage); 0081 0082 KMTPDInterface m_kmtpDaemon; 0083 };