File: syncthingdev.h

package info (click to toggle)
syncthingtray 1.7.5-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 6,804 kB
  • sloc: cpp: 31,085; xml: 1,694; java: 570; sh: 81; javascript: 53; makefile: 25
file content (100 lines) | stat: -rw-r--r-- 3,183 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#ifndef DATA_SYNCTHINGDEV_H
#define DATA_SYNCTHINGDEV_H

#include "./qstringhash.h"
#include "./syncthingcompletion.h"

#include <c++utilities/chrono/datetime.h>

#include <QMetaType>
#include <QString>
#include <QStringList>

#include <cstdlib>
#include <unordered_map>
#include <vector>

namespace Data {

/// \brief The SyncthingDevStatus enum represents a Syncthing device status.
/// \remarks The device status is not directly provided by Syncthing and instead deduced by this library from
///          other information and events.
enum class SyncthingDevStatus {
    Unknown, /**< device status is unknown */
    Disconnected, /**< device is disconnected */
    ThisDevice, /**< device is the own device; the own device will always have this status assigned */
    Idle, /**< device is connected and all shared directories are up-to-date on its end */
    Synchronizing, /**< device is connected but not all shared directories are up-to-date on its end */
    OutOfSync, /**< device is connected but not all shared directories are up-to-date on its end due to an error (never set so far; seems not possible to determine) */
    Rejected, /**< device is rejected */
};

QString statusString(SyncthingDevStatus status);

struct LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingDev {
    explicit SyncthingDev(const QString &id = QString(), const QString &name = QString());
    QString statusString() const;
    bool isConnected() const;
    SyncthingDevStatus computeConnectedStateAccordingToCompletion() const;
    SyncthingDevStatus setConnectedStateAccordingToCompletion();
    const QString &displayName() const;

    QString id;
    QString name;
    QStringList addresses;
    QString compression;
    QString certName;
    SyncthingDevStatus status = SyncthingDevStatus::Unknown;
    std::uint64_t totalIncomingTraffic = 0;
    std::uint64_t totalOutgoingTraffic = 0;
    QString connectionAddress;
    QString connectionType;
    QString clientVersion;
    QString disconnectReason;
    CppUtilities::DateTime lastSeen;
    std::unordered_map<QString, SyncthingCompletion> completionByDir;
    SyncthingCompletion overallCompletion;
    bool introducer = false;
    bool paused = false;
    bool connectionLocal = false;
};

inline SyncthingDev::SyncthingDev(const QString &id, const QString &name)
    : id(id)
    , name(name)
{
}

inline bool SyncthingDev::isConnected() const
{
    switch (status) {
    case SyncthingDevStatus::Unknown:
    case SyncthingDevStatus::Disconnected:
    case SyncthingDevStatus::ThisDevice:
    case SyncthingDevStatus::Rejected:
        return false;
    default:
        return true;
    }
}

inline SyncthingDevStatus SyncthingDev::computeConnectedStateAccordingToCompletion() const
{
    return overallCompletion.needed.isNull() ? SyncthingDevStatus::Idle : SyncthingDevStatus::Synchronizing;
}

inline SyncthingDevStatus SyncthingDev::setConnectedStateAccordingToCompletion()
{
    return status = computeConnectedStateAccordingToCompletion();
}

inline const QString &SyncthingDev::displayName() const
{
    return name.isEmpty() ? id : name;
}

} // namespace Data

Q_DECLARE_METATYPE(Data::SyncthingDev)

#endif // DATA_SYNCTHINGDEV_H