Skip to content

Commit 0ec6678

Browse files
author
Justin McPherson
committed
Support for Network Information component
1 parent 9df5d9c commit 0ec6678

5 files changed

Lines changed: 127 additions & 0 deletions

File tree

Libraries/Network/NetInfo.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,12 @@ type ConnectivityStateAndroid = $Enum<{
5454
UNKNOWN: string;
5555
}>;
5656

57+
type NetworkAccessibility = $Enum<{
58+
UnknownAccessibility: string;
59+
NotAccessible: string;
60+
Accessible: string;
61+
}>;
62+
5763

5864
const _subscriptions = new Map();
5965

@@ -70,6 +76,12 @@ if (Platform.OS === 'ios') {
7076
): bool {
7177
return connectionType !== 'NONE' && connectionType !== 'UNKNOWN';
7278
};
79+
} else if (Platform.OS === 'ubuntu') {
80+
_isConnected = function(
81+
networkAccessibility: NetworkAccessibility
82+
): bool {
83+
return networkAccessibility === 'Accessible';
84+
}
7385
}
7486

7587
const _isConnectedSubscriptions = new Map();

ReactUbuntu/runtime/src/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ set(
4141
reactnetexecutor.cpp
4242
reactpipeexecutor.cpp
4343
reactnetworking.cpp
44+
reactnetinfo.cpp
4445
reacttiming.cpp
4546
reactappstate.cpp
4647
reactasynclocalstorage.cpp

ReactUbuntu/runtime/src/reactbridge.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
#include "reacteventdispatcher.h"
2020
#include "reactnetworking.h"
21+
#include "reactnetinfo.h"
2122
#include "reacttiming.h"
2223
#include "reactappstate.h"
2324
#include "reactasynclocalstorage.h"
@@ -57,6 +58,7 @@ class ReactBridgePrivate
5758
new ReactAppState,
5859
new ReactAsyncLocalStorage,
5960
new ReactNetworking,
61+
new ReactNetInfo,
6062
new ReactViewManager,
6163
new ReactRawTextManager,
6264
new ReactTextManager,
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
2+
#include <QNetworkAccessManager>
3+
4+
#include "reactnetinfo.h"
5+
#include "reactbridge.h"
6+
#include "reacteventdispatcher.h"
7+
8+
9+
namespace {
10+
static QMap<QNetworkAccessManager::NetworkAccessibility, QString> accessibleName{
11+
{ QNetworkAccessManager::UnknownAccessibility, "UnknownAccessibility" },
12+
{ QNetworkAccessManager::NotAccessible, "NotAccessible" },
13+
{ QNetworkAccessManager::Accessible, "Accessible" }
14+
};
15+
}
16+
17+
class ReactNetInfoPrivate {
18+
public:
19+
void monitorNetworkAccess() {
20+
qDebug() << __PRETTY_FUNCTION__;
21+
QObject::connect(bridge->networkAccessManager(), &QNetworkAccessManager::networkAccessibleChanged, [=](QNetworkAccessManager::NetworkAccessibility accessible) {
22+
qDebug() << __PRETTY_FUNCTION__ << accessible;
23+
bridge->eventDispatcher()->sendDeviceEvent("networkStatusDidChange", QVariantList{
24+
QVariantMap{{"network_info", accessibleName.value(accessible)}}
25+
});
26+
});
27+
}
28+
29+
ReactBridge* bridge = nullptr;
30+
};
31+
32+
33+
void ReactNetInfo::getCurrentConnectivity(
34+
const ReactModuleInterface::ListArgumentBlock& resolve,
35+
const ReactModuleInterface::ListArgumentBlock& reject
36+
) {
37+
Q_UNUSED(reject);
38+
Q_D(ReactNetInfo);
39+
qDebug() << __PRETTY_FUNCTION__ << accessibleName.value(d->bridge->networkAccessManager()->networkAccessible());
40+
resolve(d->bridge, QVariantList{
41+
QVariantMap{{"network_info",
42+
accessibleName.value(d->bridge->networkAccessManager()->networkAccessible())}}
43+
});
44+
}
45+
46+
ReactNetInfo::ReactNetInfo(QObject* parent)
47+
: QObject(parent)
48+
, d_ptr(new ReactNetInfoPrivate)
49+
{
50+
}
51+
52+
ReactNetInfo::~ReactNetInfo()
53+
{
54+
}
55+
56+
void ReactNetInfo::setBridge(ReactBridge* bridge)
57+
{
58+
Q_D(ReactNetInfo);
59+
d->bridge = bridge;
60+
d->monitorNetworkAccess();
61+
}
62+
63+
QString ReactNetInfo::moduleName()
64+
{
65+
return "RCTNetInfo";
66+
}
67+
68+
QList<ReactModuleMethod*> ReactNetInfo::methodsToExport()
69+
{
70+
return QList<ReactModuleMethod*>{};
71+
}
72+
73+
QVariantMap ReactNetInfo::constantsToExport()
74+
{
75+
return QVariantMap{};
76+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#ifndef REACTNETINFO_H
2+
#define REACTNETINFO_H
3+
4+
#include "reactmoduleinterface.h"
5+
6+
7+
class ReactNetInfoPrivate;
8+
class ReactNetInfo
9+
: public QObject
10+
, public ReactModuleInterface
11+
{
12+
Q_OBJECT
13+
Q_INTERFACES(ReactModuleInterface)
14+
15+
Q_INVOKABLE REACT_PROMISE
16+
void getCurrentConnectivity(
17+
const ReactModuleInterface::ListArgumentBlock& resolve,
18+
const ReactModuleInterface::ListArgumentBlock& reject);
19+
20+
Q_DECLARE_PRIVATE(ReactNetInfo)
21+
22+
public:
23+
ReactNetInfo(QObject* parent = 0);
24+
~ReactNetInfo();
25+
26+
void setBridge(ReactBridge* bridge) override;
27+
28+
QString moduleName() override;
29+
QList<ReactModuleMethod*> methodsToExport() override;
30+
QVariantMap constantsToExport() override;
31+
32+
private:
33+
QScopedPointer<ReactNetInfoPrivate> d_ptr;
34+
};
35+
36+
#endif // REACTNETINFO_H

0 commit comments

Comments
 (0)