File indexing completed on 2025-02-02 05:43:14

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