forked from Cutehacks/qml-pusher
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Channel.qml
98 lines (81 loc) · 2.22 KB
/
Channel.qml
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
// Copyright 2015 Cutehacks AS. All rights reserved.
// License can be found in the LICENSE file.
import QtQuick 2.0
import "pusher.js" as Pusher
Item {
id: channel
default property alias bindings: bindings.children
property string name: ""
property bool active: true
readonly property alias subscribed: channel._subscribed
property bool _authenticated: false
property string _oldName: name
property bool _connected: parent.state == "connected"
property bool _subscribed: false
function _handleEvent(event) {
if (event.event == "pusher_internal:subscription_succeeded") {
_subscribed = true;
_oldName = name;
}
bindings.dispatchEvent(event);
}
function _updateAuthStatus(err, response) {
if (err) {
var errEvent = {
data: {
code: response,
message: "Forbidden"
}
}
parent.handleError(errEvent);
_subscribed = false;
_authenticated = false;
return;
}
if (response.auth) {
_authenticated = true;
var data = {
auth: response.auth
};
_subscribe(data);
}
}
function _subscribe(data) {
var validName = (name != "" && name != "private-");
if (_connected && active && validName) {
if (Pusher.requiresAuth(name) && !_authenticated) {
parent.authorize(name, _updateAuthStatus);
} else {
parent.subscribe(name, _handleEvent, data);
}
}
}
function _unsubscribe() {
if (subscribed) {
parent.unsubscribe(_oldName);
_subscribed = false;
_authenticated = false;
}
}
onNameChanged: {
_unsubscribe();
_subscribe();
}
onActiveChanged: {
if (active) {
_subscribe();
} else {
_unsubscribe();
}
}
on_ConnectedChanged: {
if (active && _connected) {
_subscribe();
} else {
_unsubscribe();
}
}
BindingList {
id: bindings
}
}