File indexing completed on 2025-03-23 05:22:06

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_ABSTRACTFILESYSTEMSYNCWITHREMOTEJOB_P_HPP
0010 #define KASTEN_ABSTRACTFILESYSTEMSYNCWITHREMOTEJOB_P_HPP
0011 
0012 // library
0013 #include "abstractfilesystemsyncwithremotejob.hpp"
0014 #include <abstractsyncwithremotejob_p.hpp>
0015 
0016 #include <QUrl>
0017 
0018 namespace Kasten {
0019 
0020 class AbstractFileSystemSyncWithRemoteJobPrivate : public AbstractSyncWithRemoteJobPrivate
0021 {
0022 public:
0023     AbstractFileSystemSyncWithRemoteJobPrivate(AbstractFileSystemSyncWithRemoteJob* parent,
0024                                                AbstractModelFileSystemSynchronizer* synchronizer,
0025                                                const QUrl& url, AbstractModelSynchronizer::ConnectOption option);
0026 
0027     ~AbstractFileSystemSyncWithRemoteJobPrivate() override;
0028 
0029 public: // KJob API
0030     void start();
0031 
0032 protected:
0033     AbstractModelFileSystemSynchronizer* synchronizer() const;
0034     QFile* file() const;
0035 
0036 protected:
0037     void completeSync(bool success);
0038 
0039 protected: // slots
0040     void syncWithRemote();
0041 
0042 protected:
0043     AbstractModelFileSystemSynchronizer* const mSynchronizer;
0044     const QUrl mUrl;
0045     const AbstractModelSynchronizer::ConnectOption mOption;
0046     QFile* mFile = nullptr;
0047     QString mWorkFilePath;
0048     QString mTempFilePath;
0049 
0050 private:
0051     Q_DECLARE_PUBLIC(AbstractFileSystemSyncWithRemoteJob)
0052 };
0053 
0054 inline AbstractFileSystemSyncWithRemoteJobPrivate::AbstractFileSystemSyncWithRemoteJobPrivate(AbstractFileSystemSyncWithRemoteJob* parent,
0055                                                                                               AbstractModelFileSystemSynchronizer* synchronizer,
0056                                                                                               const QUrl& url, AbstractModelSynchronizer::ConnectOption option)
0057     : AbstractSyncWithRemoteJobPrivate(parent)
0058     , mSynchronizer(synchronizer)
0059     , mUrl(url)
0060     , mOption(option)
0061 {}
0062 
0063 inline AbstractFileSystemSyncWithRemoteJobPrivate::~AbstractFileSystemSyncWithRemoteJobPrivate() = default;
0064 
0065 inline QFile* AbstractFileSystemSyncWithRemoteJobPrivate::file()     const { return mFile; }
0066 // TODO: setup a notification system
0067 inline AbstractModelFileSystemSynchronizer* AbstractFileSystemSyncWithRemoteJobPrivate::synchronizer() const
0068 {
0069     return mSynchronizer;
0070 }
0071 
0072 inline void AbstractFileSystemSyncWithRemoteJobPrivate::start()
0073 {
0074     Q_Q(AbstractFileSystemSyncWithRemoteJob);
0075 
0076     QMetaObject::invokeMethod(q, "syncWithRemote", Qt::QueuedConnection);
0077 }
0078 
0079 }
0080 
0081 #endif