@@ -163,8 +163,12 @@ void UserInformation::update(const MumbleProto::UserStats &msg) {
163
163
qlTCPVar->setText (QString::number (msg.tcp_ping_var () > 0 .0f ? sqrtf (msg.tcp_ping_var ()) : 0 .0f , ' f' , 2 ));
164
164
qlUDPVar->setText (QString::number (msg.udp_ping_var () > 0 .0f ? sqrtf (msg.udp_ping_var ()) : 0 .0f , ' f' , 2 ));
165
165
166
- if (msg.has_from_client () && msg.has_from_server ()) {
167
- qgbUDP->setVisible (true );
166
+ bool hasTotalStats = msg.has_from_client () && msg.has_from_server ();
167
+ bool hasRollingStats = msg.has_rolling_time () && msg.has_rolling_from_client () && msg.has_rolling_from_server ();
168
+
169
+ qgbUDP->setVisible (hasTotalStats || hasRollingStats);
170
+
171
+ if (hasTotalStats) {
168
172
const MumbleProto::UserStats_Stats &from = msg.from_client ();
169
173
qlFromGood->setText (QString::number (from.good ()));
170
174
qlFromLate->setText (QString::number (from.late ()));
@@ -179,17 +183,65 @@ void UserInformation::update(const MumbleProto::UserStats &msg) {
179
183
180
184
quint32 allFromPackets = from.good () + from.late () + from.lost ();
181
185
qlFromLatePercent->setText (
182
- QString::number (allFromPackets > 0 ? from.late () * 100.0 / allFromPackets : 0 ., ' f' , 2 ));
186
+ QString::number (allFromPackets > 0 ? from.late () * 100.0 / allFromPackets : 0 ., ' f' , 1 ));
183
187
qlFromLostPercent->setText (
184
- QString::number (allFromPackets > 0 ? from.lost () * 100.0 / allFromPackets : 0 ., ' f' , 2 ));
188
+ QString::number (allFromPackets > 0 ? from.lost () * 100.0 / allFromPackets : 0 ., ' f' , 1 ));
185
189
186
190
quint32 allToPackets = to.good () + to.late () + to.lost ();
187
- qlToLatePercent->setText (QString::number (allToPackets > 0 ? to.late () * 100.0 / allToPackets : 0 ., ' f' , 2 ));
188
- qlToLostPercent->setText (QString::number (allToPackets > 0 ? to.lost () * 100.0 / allToPackets : 0 ., ' f' , 2 ));
189
- } else {
190
- qgbUDP->setVisible (false );
191
+ qlToLatePercent->setText (QString::number (allToPackets > 0 ? to.late () * 100.0 / allToPackets : 0 ., ' f' , 1 ));
192
+ qlToLostPercent->setText (QString::number (allToPackets > 0 ? to.lost () * 100.0 / allToPackets : 0 ., ' f' , 1 ));
191
193
}
192
194
195
+ if (hasRollingStats) {
196
+ const MumbleProto::UserStats_Stats &from = msg.rolling_from_client ();
197
+ qlFromGoodRolling->setText (QString::number (from.good ()));
198
+ qlFromLateRolling->setText (QString::number (from.late ()));
199
+ qlFromLostRolling->setText (QString::number (from.lost ()));
200
+ qlFromResyncRolling->setText (QString::number (from.resync ()));
201
+
202
+ const MumbleProto::UserStats_Stats &to = msg.rolling_from_server ();
203
+ qlToGoodRolling->setText (QString::number (to.good ()));
204
+ qlToLateRolling->setText (QString::number (to.late ()));
205
+ qlToLostRolling->setText (QString::number (to.lost ()));
206
+ qlToResyncRolling->setText (QString::number (to.resync ()));
207
+
208
+ quint32 allFromPackets = from.good () + from.late () + from.lost ();
209
+ qlFromLatePercentRolling->setText (
210
+ QString::number (allFromPackets > 0 ? from.late () * 100.0 / allFromPackets : 0 ., ' f' , 1 ));
211
+ qlFromLostPercentRolling->setText (
212
+ QString::number (allFromPackets > 0 ? from.lost () * 100.0 / allFromPackets : 0 ., ' f' , 1 ));
213
+
214
+ quint32 allToPackets = to.good () + to.late () + to.lost ();
215
+ qlToLatePercentRolling->setText (
216
+ QString::number (allToPackets > 0 ? to.late () * 100.0 / allToPackets : 0 ., ' f' , 1 ));
217
+ qlToLostPercentRolling->setText (
218
+ QString::number (allToPackets > 0 ? to.lost () * 100.0 / allToPackets : 0 ., ' f' , 1 ));
219
+
220
+ uint32_t rollingSeconds = msg.rolling_time ();
221
+ QString rollingText = tr (" Last %1 %2:" );
222
+ if (rollingSeconds < 120 ) {
223
+ qliRolling->setText (rollingText.arg (QString::number (rollingSeconds)).arg (tr (" seconds" )));
224
+ } else {
225
+ qliRolling->setText (rollingText.arg (QString::number (rollingSeconds / 60 )).arg (tr (" minutes" )));
226
+ }
227
+ }
228
+
229
+ qlFromGoodRolling->setVisible (hasRollingStats);
230
+ qlFromLateRolling->setVisible (hasRollingStats);
231
+ qlFromLostRolling->setVisible (hasRollingStats);
232
+ qlFromResyncRolling->setVisible (hasRollingStats);
233
+ qlToGoodRolling->setVisible (hasRollingStats);
234
+ qlToLateRolling->setVisible (hasRollingStats);
235
+ qlToLostRolling->setVisible (hasRollingStats);
236
+ qlToResyncRolling->setVisible (hasRollingStats);
237
+ qlFromLatePercentRolling->setVisible (hasRollingStats);
238
+ qlFromLostPercentRolling->setVisible (hasRollingStats);
239
+ qlToLatePercentRolling->setVisible (hasRollingStats);
240
+ qlToLostPercentRolling->setVisible (hasRollingStats);
241
+ qliRolling->setVisible (hasRollingStats);
242
+ qliRollingFrom->setVisible (hasRollingStats);
243
+ qliRollingTo->setVisible (hasRollingStats);
244
+
193
245
if (msg.has_onlinesecs ()) {
194
246
if (msg.has_idlesecs ())
195
247
qlTime->setText (
0 commit comments