File indexing completed on 2024-05-05 04:59:38

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 };