~blue-shell/blue-shell/kfilebox

« back to all changes in this revision

Viewing changes to src/dropboxclient.h

  • Committer: Rohan Garg
  • Date: 2013-05-26 22:06:21 UTC
  • Revision ID: git-v1:6e6eb20d5f7cd2ff0c235088c364c0e4575efccf
Tags: 0.4.9
Initial import

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#ifndef DROPBOXCLIENT_H
 
2
#define DROPBOXCLIENT_H
 
3
 
 
4
#include <QDir>
 
5
#include <QLocalSocket>
 
6
#include <QMap>
 
7
#include <QObject>
 
8
#include <QProcess>
 
9
#include <QString>
 
10
#include <QStringList>
 
11
#include <QTimer>
 
12
 
 
13
#include "notification.h"
 
14
#include "configuration.h"
 
15
#include "configurationdbdriver.h"
 
16
 
 
17
class SynchronousDropboxConnection;
 
18
 
 
19
enum DropboxStatus {DropboxUnkown, DropboxIdle, DropboxBussy, DropboxError, DropboxUploading, DropboxDownloading,
 
20
                    DropboxSaving, DropboxIndexing, DropboxStopped, DropboxDisconnected};
 
21
class DropboxClient : public QObject
 
22
{
 
23
    Q_OBJECT
 
24
    Q_ENUMS(DropboxStatus)
 
25
public:
 
26
    explicit DropboxClient(QObject* parent = 0);
 
27
    ~DropboxClient();
 
28
 
 
29
    void updateSharedFolders(const QString& to);
 
30
    QStringList getSharedFolders();
 
31
 
 
32
    //! This functions not strongly related to this class..
 
33
        bool isRunning();
 
34
        void hideGtkUi(bool hide);
 
35
    bool static isInstalled();
 
36
        QString getVersion();
 
37
 
 
38
    inline QString getAuthUrl() const {return m_authUrl;}
 
39
        QStringList getRecentlyChangedFiles();
 
40
 
 
41
private:
 
42
    QTimer* m_timer;
 
43
    QProcess* m_ps;
 
44
        QString m_message;
 
45
        QString m_authUrl;
 
46
        QString m_dropboxDir; // from kfilebox config
 
47
    DropboxStatus prev_status;
 
48
        QStringList recently_changed;
 
49
 
 
50
    SynchronousDropboxConnection* dc;
 
51
        ConfigurationDBDriver* dropbox_db;
 
52
 
 
53
        QString fixUnicodeChars(const QString &value);
 
54
        QString resolveFileName(const QString& filename);
 
55
        void updateRecentlyChangedFiles();
 
56
 
 
57
public slots:
 
58
    void start();
 
59
    void stop();
 
60
 
 
61
    QString sendCommand(const QString& command);
 
62
 
 
63
        QString getPublicLink(const QString& file) {
 
64
        return sendCommand(QString("get_public_link\npath\t%1").arg(file)).remove("link\t");
 
65
    }
 
66
 
 
67
        QString getFolderTag(const QString& command) {
 
68
                return sendCommand(QString("get_folder_tag\npath\t%1").arg(command)).remove("tag\t");
 
69
        }
 
70
 
 
71
    DropboxStatus getStatus() const {return prev_status;}
 
72
 
 
73
        QString getStatusMessage() const {return m_message;}
 
74
 
 
75
private slots:
 
76
    void readDaemonOutput();
 
77
    void getDropboxStatus();
 
78
 
 
79
signals:
 
80
    void updateStatus(DropboxStatus status, const QString& message);
 
81
        void newFileAdded(const QString filename);
 
82
 
 
83
};
 
84
 
 
85
class SynchronousDropboxConnection : public QObject
 
86
{
 
87
    Q_OBJECT
 
88
public:
 
89
    explicit SynchronousDropboxConnection(QObject* parent = 0) :
 
90
        QObject(parent),
 
91
        m_socket(new QLocalSocket(this))
 
92
    {
 
93
        m_socketpath = QDir::toNativeSeparators(QDir::homePath().append("/.dropbox/command_socket"));
 
94
        m_socket->connectToServer(m_socketpath);
 
95
    }
 
96
    virtual ~SynchronousDropboxConnection() {}
 
97
 
 
98
    //Re-entrant
 
99
    QString sendCommand(const QString& command)
 
100
    {
 
101
        int waitTime = 100;
 
102
 
 
103
        if(!m_socket->isOpen())
 
104
        {
 
105
            m_socket->connectToServer(m_socketpath);
 
106
            if(!m_socket->waitForConnected(waitTime))
 
107
                return QString();
 
108
        }
 
109
 
 
110
        m_socket->write(command.toUtf8());
 
111
        m_socket->write(QString("\ndone\n").toUtf8());
 
112
        m_socket->flush();
 
113
 
 
114
        QString reply;
 
115
        while(true)
 
116
        {
 
117
            if(!m_socket->waitForReadyRead(waitTime))
 
118
            {
 
119
                //If we have to wait this long, the m_socket probably isn't open anymore (dropbox died or closed)
 
120
                m_socket->close();
 
121
                return QString();
 
122
            }
 
123
 
 
124
            reply.append(m_socket->readAll());
 
125
 
 
126
            if(reply.endsWith("done\n")) break;
 
127
        }
 
128
 
 
129
        //! @todo if(reply.stripTONotEmptyStrings().count()==3) {reply.stripped().remove(1) AND remove(3)}
 
130
        //Strip out \ndone\n and ok\n
 
131
        reply = reply.remove("\ndone\n");
 
132
        reply = reply.remove("notok\n");
 
133
        reply = reply.remove("ok\n");
 
134
 
 
135
        if (reply == "status")
 
136
            reply = "Idle";
 
137
        else if (reply.startsWith("status"))
 
138
            reply = reply.mid(7);
 
139
 
 
140
        return reply;
 
141
    }
 
142
 
 
143
private:
 
144
    QLocalSocket* m_socket;
 
145
    QString m_socketpath;
 
146
 
 
147
};
 
148
 
 
149
#endif //DROPBOXCLIENT_H