File indexing completed on 2024-04-21 05:40:57

0001 /*
0002     SPDX-FileCopyrightText: 2014 Emmanuel Pescosta <emmanuelpescosta099@gmail.com>
0003     SPDX-FileCopyrightText: 2012 Sergei Stolyarov <sergei@regolit.com>
0004     SPDX-FileCopyrightText: 2010 Thomas Richard <thomas.richard@proan.be>
0005     SPDX-FileCopyrightText: 2009-2010 Peter Penz <peter.penz19@gmail.com>
0006 
0007     SPDX-License-Identifier: GPL-2.0-or-later
0008 */
0009 
0010 #ifndef FILEVIEWDROPBOXPLUGIN_H
0011 #define FILEVIEWDROPBOXPLUGIN_H
0012 
0013 #include <Dolphin/KVersionControlPlugin>
0014 
0015 #include <QMap>
0016 
0017 class QLocalSocket;
0018 
0019 //The dropbox protocol info can be found in the dropboxd-protocol file
0020 //it can be found here https://build.opensuse.org/package/view_file/home:faco84/dolphin-box-plugin/dropboxd-protocol
0021 //Thanks Steffen Schuldenzucker!
0022 
0023 /**
0024  * @brief Dropbox implementation for the KVersionControlPlugin interface.
0025  */
0026 class FileViewDropboxPlugin : public KVersionControlPlugin
0027 {
0028     Q_OBJECT
0029 
0030 private:
0031     enum SendCommandMode
0032     {
0033         WaitForReply,
0034         SendCommandOnly
0035     };
0036 
0037     enum SendCommandTimeout
0038     {
0039         ShortTimeout,
0040         LongTimeout
0041     };
0042 
0043 public:
0044     FileViewDropboxPlugin(QObject* parent, const QVariantList& args);
0045     ~FileViewDropboxPlugin() override;
0046 
0047     QString fileName() const override;
0048 
0049     bool beginRetrieval(const QString& directory) override;
0050     KVersionControlPlugin::ItemVersion itemVersion(const KFileItem& item) const override;
0051     void endRetrieval() override;
0052 
0053     QList<QAction*> versionControlActions(const KFileItemList& items) const override;
0054     QList<QAction*> outOfVersionControlActions(const KFileItemList& items) const override;
0055 
0056 private Q_SLOTS:
0057     void handleContextAction(QAction* action);
0058 
0059 private:
0060     QStringList sendCommand(const QString& command,
0061                             const QStringList& paths,
0062                             const QPointer<QLocalSocket>& socket,
0063                             SendCommandMode mode = SendCommandOnly,
0064                             SendCommandTimeout timeout = ShortTimeout) const;
0065 
0066     bool connectWithDropbox(const QPointer<QLocalSocket>& socket, SendCommandTimeout timeout) const;
0067 
0068 private:
0069     class Private;
0070     Private* const d;
0071 
0072     static QMap<QString, KVersionControlPlugin::ItemVersion> m_itemVersions;
0073 };
0074 
0075 #endif // FILEVIEWDROPBOXPLUGIN_H
0076