|
@@ -50,11 +50,11 @@ function on_message(event)
|
50
|
50
|
local oldDominantSpeakerId = roomSpeakerStats['dominantSpeakerId'];
|
51
|
51
|
|
52
|
52
|
if oldDominantSpeakerId then
|
53
|
|
- roomSpeakerStats[oldDominantSpeakerId]:setIsDominantSpeaker(false);
|
|
53
|
+ roomSpeakerStats[oldDominantSpeakerId]:setDominantSpeaker(false);
|
54
|
54
|
end
|
55
|
55
|
|
56
|
56
|
if newDominantSpeaker then
|
57
|
|
- newDominantSpeaker:setIsDominantSpeaker(true);
|
|
57
|
+ newDominantSpeaker:setDominantSpeaker(true);
|
58
|
58
|
end
|
59
|
59
|
|
60
|
60
|
room.speakerStats['dominantSpeakerId'] = occupant.jid;
|
|
@@ -70,8 +70,7 @@ SpeakerStats.__index = SpeakerStats;
|
70
|
70
|
function new_SpeakerStats(nick)
|
71
|
71
|
return setmetatable({
|
72
|
72
|
totalDominantSpeakerTime = 0;
|
73
|
|
- _dominantSpeakerStart = nil;
|
74
|
|
- _isDominantSpeaker = false;
|
|
73
|
+ _dominantSpeakerStart = 0;
|
75
|
74
|
nick = nick;
|
76
|
75
|
displayName = nil;
|
77
|
76
|
}, SpeakerStats);
|
|
@@ -80,22 +79,25 @@ end
|
80
|
79
|
-- Changes the dominantSpeaker data for current occupant
|
81
|
80
|
-- saves start time if it is new dominat speaker
|
82
|
81
|
-- or calculates and accumulates time of speaking
|
83
|
|
-function SpeakerStats:setIsDominantSpeaker(isNowDominantSpeaker)
|
|
82
|
+function SpeakerStats:setDominantSpeaker(isNowDominantSpeaker)
|
84
|
83
|
log("debug",
|
85
|
84
|
"set isDominant %s for %s", tostring(isNowDominantSpeaker), self.nick);
|
86
|
85
|
|
87
|
|
- if not self._isDominantSpeaker and isNowDominantSpeaker then
|
|
86
|
+ if not self:isDominantSpeaker() and isNowDominantSpeaker then
|
88
|
87
|
self._dominantSpeakerStart = socket.gettime()*1000;
|
89
|
|
- elseif self._isDominantSpeaker and not isNowDominantSpeaker then
|
|
88
|
+ elseif self:isDominantSpeaker() and not isNowDominantSpeaker then
|
90
|
89
|
local now = socket.gettime()*1000;
|
91
|
|
- local timeElapsed = math.floor(now - (self._dominantSpeakerStart or 0));
|
|
90
|
+ local timeElapsed = math.floor(now - self._dominantSpeakerStart);
|
92
|
91
|
|
93
|
92
|
self.totalDominantSpeakerTime
|
94
|
93
|
= self.totalDominantSpeakerTime + timeElapsed;
|
95
|
|
- self._dominantSpeakerStart = nil;
|
|
94
|
+ self._dominantSpeakerStart = 0;
|
96
|
95
|
end
|
|
96
|
+end
|
97
|
97
|
|
98
|
|
- self._isDominantSpeaker = isNowDominantSpeaker;
|
|
98
|
+-- Returns true if the tracked user is currently a dominant speaker.
|
|
99
|
+function SpeakerStats:isDominantSpeaker()
|
|
100
|
+ return self._dominantSpeakerStart > 0;
|
99
|
101
|
end
|
100
|
102
|
--- End SpeakerStats
|
101
|
103
|
|
|
@@ -126,10 +128,9 @@ function occupant_joined(event)
|
126
|
128
|
|
127
|
129
|
-- before sending we need to calculate current dominant speaker
|
128
|
130
|
-- state
|
129
|
|
- if values._dominantSpeakerStart ~= nil then
|
|
131
|
+ if values:isDominantSpeaker() ~= nil then
|
130
|
132
|
local timeElapsed = math.floor(
|
131
|
|
- socket.gettime()*1000
|
132
|
|
- - (values._dominantSpeakerStart or 0));
|
|
133
|
+ socket.gettime()*1000 - values._dominantSpeakerStart);
|
133
|
134
|
totalDominantSpeakerTime = totalDominantSpeakerTime
|
134
|
135
|
+ timeElapsed;
|
135
|
136
|
end
|
|
@@ -166,7 +167,7 @@ function occupant_leaving(event)
|
166
|
167
|
|
167
|
168
|
local speakerStatsForOccupant = room.speakerStats[occupant.jid];
|
168
|
169
|
if speakerStatsForOccupant then
|
169
|
|
- speakerStatsForOccupant:setIsDominantSpeaker(false);
|
|
170
|
+ speakerStatsForOccupant:setDominantSpeaker(false);
|
170
|
171
|
|
171
|
172
|
-- set display name
|
172
|
173
|
local displayName = occupant:get_presence():get_child_text(
|