-
Notifications
You must be signed in to change notification settings - Fork 12
/
MMM-Gestures.js
124 lines (87 loc) · 3.42 KB
/
MMM-Gestures.js
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/*
* MMM-Gestures is a third party Magic Mirror 2 Module
*
* By Thomas Bachmann (https://github.com/thobach)
*
* License: MIT
*
* The module consists of two roles:
* 1) Server role, written in Node.js (gestures.js)
* 2) Client role, written in Javascript (this file)
*
* The communication between the two roles happens via WebSocket protocol.
*
* Other modules can receive gestures via Magic Mirror 2's notification mechanism using
* the notificationReceived() function.
*/
Module.register('MMM-Gestures', {
// init connection to server role and setup compliment module hiding/showing upon
// events
start: function (){
Log.info('MMM-Gestures start invoked.');
// notifications are only received once the client (this file) sends the first message to the server (node_helper.js)
this.sendSocketNotification('INIT');
},
// hide compliment module by default, until PRESENT gesture is received
notificationReceived: function(notification, payload, sender) {
// hide compliment module by default after all modules were loaded
if (notification == 'ALL_MODULES_STARTED'){
var complimentModules = MM.getModules().withClass('compliments');
if(complimentModules && complimentModules.length == 1){
Log.info('Hiding compliment module since all modules were loaded.');
var compliment = complimentModules[0];
compliment.hide();
}
}
},
// Override socket notification handler.
// On message received from gesture server forward message to other modules
// and hide / show compliment module
socketNotificationReceived: function(notification, payload) {
Log.info('Received message from gesture server: ' + notification + ' - ' + payload);
// forward gesture to other modules
this.sendNotification('GESTURE', {gesture:payload});
// interact with compliments module upon PRESENT and AWAY gesture
var complimentModules = MM.getModules().withClass('compliments');
if(complimentModules && complimentModules.length == 1){
var compliment = complimentModules[0];
if(payload == 'PRESENT'){
Log.info('Showing compliment after having received PRESENT gesture.');
compliment.show();
} else if(payload == 'AWAY'){
Log.info('Hiding compliment after having received AWAY gesture.');
compliment.hide();
} else if(payload == 'FAR'){
Log.info('Reloading page after having received FAR gesture.');
location.reload();
} else if(payload == 'NEAR'){
Log.info('Showing next page after having received NEAR gesture.');
this.sendNotification("PAGE_INCREMENT");
} else {
Log.info('Not handling received gesture in this module directly:');
Log.info(payload);
}
}
// interact with newsfeed module upon UP, DOWN, LEFT, RIGHT gesture
var newsfeedModules = MM.getModules().withClass('newsfeed');
if(newsfeedModules){
var notification = "UNKNOWN";
// reverting orders since sensor is usually built in upside down
if(payload == 'LEFT'){
notification = "ARTICLE_NEXT";
} else if(payload == 'RIGHT'){
notification = "ARTICLE_PREVIOUS";
} else if(payload == 'UP'){
notification = "ARTICLE_LESS_DETAILS";
} else if(payload == 'DOWN'){
notification = "ARTICLE_MORE_DETAILS";
} else {
Log.info('Not handling received gesture in this module directly:');
Log.info(payload);
}
// forward gesture to other modules
Log.info('Sending notification: ' + notification + '.');
this.sendNotification(notification);
}
},
});