File indexing completed on 2025-02-09 07:11:24

0001 /*
0002     This file is part of the Kasten Framework, made within the KDE community.
0003 
0004     SPDX-FileCopyrightText: 2008-2009, 2011 Friedrich W. H. Kossebau <kossebau@kde.org>
0005 
0006     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0007 */
0008 
0009 #ifndef KASTEN_ABSTRACTFILESYSTEMCONNECTJOB_P_HPP
0010 #define KASTEN_ABSTRACTFILESYSTEMCONNECTJOB_P_HPP
0011 
0012 // library
0013 #include "abstractfilesystemconnectjob.hpp"
0014 #include <abstractconnectjob_p.hpp>
0015 // Qt
0016 #include <QUrl>
0017 #include <QTemporaryFile>
0018 
0019 namespace Kasten {
0020 
0021 class AbstractFileSystemConnectJobPrivate : public AbstractConnectJobPrivate
0022 {
0023 public:
0024     AbstractFileSystemConnectJobPrivate(AbstractFileSystemConnectJob* parent,
0025                                         AbstractModelFileSystemSynchronizer* synchronizer, AbstractDocument* document,
0026                                         const QUrl& url, AbstractModelSynchronizer::ConnectOption option);
0027 
0028     ~AbstractFileSystemConnectJobPrivate() override;
0029 
0030 public: // KJob API
0031     void start();
0032 
0033 public:
0034     void complete(bool success);
0035 
0036 public:
0037     AbstractModelFileSystemSynchronizer* synchronizer() const;
0038     AbstractDocument* document() const;
0039     QFile* file() const;
0040 
0041 public:
0042     void connectWithFile();
0043 
0044 protected:
0045     AbstractModelFileSystemSynchronizer* const mSynchronizer;
0046     AbstractDocument* const mDocument;
0047     const QUrl mUrl;
0048     const AbstractModelSynchronizer::ConnectOption mOption;
0049     QFile* mFile = nullptr;
0050     QString mWorkFilePath;
0051     QString mTempFilePath;
0052 
0053 private:
0054     Q_DECLARE_PUBLIC(AbstractFileSystemConnectJob)
0055 };
0056 
0057 inline AbstractFileSystemConnectJobPrivate::AbstractFileSystemConnectJobPrivate(AbstractFileSystemConnectJob* parent,
0058                                                                                 AbstractModelFileSystemSynchronizer* synchronizer, AbstractDocument* document,
0059                                                                                 const QUrl& url, AbstractModelSynchronizer::ConnectOption option)
0060     : AbstractConnectJobPrivate(parent)
0061     , mSynchronizer(synchronizer)
0062     , mDocument(document)
0063     , mUrl(url)
0064     , mOption(option)
0065 {}
0066 
0067 inline AbstractFileSystemConnectJobPrivate::~AbstractFileSystemConnectJobPrivate() = default;
0068 
0069 inline AbstractModelFileSystemSynchronizer* AbstractFileSystemConnectJobPrivate::synchronizer() const
0070 {
0071     return mSynchronizer;
0072 }
0073 inline AbstractDocument* AbstractFileSystemConnectJobPrivate::document()   const { return mDocument; }
0074 inline QFile* AbstractFileSystemConnectJobPrivate::file()                  const { return mFile; }
0075 // TODO: setup a notification system
0076 
0077 inline void AbstractFileSystemConnectJobPrivate::start()
0078 {
0079     Q_Q(AbstractFileSystemConnectJob);
0080 
0081     QMetaObject::invokeMethod(q, "connectWithFile", Qt::QueuedConnection);
0082 }
0083 
0084 }
0085 
0086 #endif