Skip to content

Commit 5a439b7

Browse files
committed
CTRL+T in log window shows stats
1 parent 78c292d commit 5a439b7

3 files changed

Lines changed: 55 additions & 23 deletions

File tree

remmina/src/remmina_log.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,10 @@ static gboolean remmina_log_on_keypress(GtkWidget *widget, GdkEvent *event, gpoi
8282
if (!log_window)
8383
return FALSE;
8484

85-
if ((e->state & GDK_CONTROL_MASK) == GDK_CONTROL_MASK && e->keyval == GDK_KEY_s && remmina_stat_sender_can_send()) {
86-
remmina_stats_sender_send();
85+
if ((e->state & GDK_CONTROL_MASK) == GDK_CONTROL_MASK) {
86+
if ((e->keyval == GDK_KEY_s || e->keyval == GDK_KEY_t) && remmina_stat_sender_can_send()) {
87+
remmina_stats_sender_send(e->keyval != GDK_KEY_s);
88+
}
8789
return TRUE;
8890
}
8991

@@ -140,8 +142,9 @@ void remmina_log_start(void)
140142
}
141143
remmina_log_print("Welcome to the remmina log window\n");
142144
if (remmina_stat_sender_can_send())
143-
remmina_log_print("Shortcut keys:\n"
144-
"\tCTRL+S: send stats\n");
145+
remmina_log_print("Shortcut keys for stats:\n"
146+
"\tCTRL+S: collect, show and send stats\n"
147+
"\tCTRL+T: collect and show stats\n");
145148
}
146149

147150
gboolean remmina_log_running(void)

remmina/src/remmina_stats_sender.c

Lines changed: 47 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,11 @@ static char *remmina_RSA_PubKey_v1 =
7171
"PwIDAQAB\n"
7272
"-----END PUBLIC KEY-----\n";
7373

74+
typedef struct {
75+
gboolean show_only;
76+
JsonNode *statsroot;
77+
} sc_tdata;
78+
7479
static void soup_callback(SoupSession *session, SoupMessage *msg, gpointer user_data)
7580
{
7681
TRACE_CALL(__func__);
@@ -167,13 +172,22 @@ static gboolean remmina_stats_collector_done(gpointer data)
167172
RSA *pubkey;
168173
int pksize;
169174
gchar *uid;
175+
sc_tdata *sctdata;
176+
177+
sctdata = (sc_tdata *)data;
178+
if (sctdata == NULL)
179+
return G_SOURCE_REMOVE;
170180

171-
n = (JsonNode*)data;
172-
if (n == NULL)
181+
n = sctdata->statsroot;
182+
if (n == NULL) {
183+
g_free(data);
173184
return G_SOURCE_REMOVE;
185+
}
174186

175-
if ((o = json_node_get_object(n)) == NULL)
187+
if ((o = json_node_get_object(n)) == NULL) {
188+
g_free(data);
176189
return G_SOURCE_REMOVE;
190+
}
177191

178192
uid = g_strdup(json_object_get_string_member(o, "UID"));
179193

@@ -197,6 +211,7 @@ static gboolean remmina_stats_collector_done(gpointer data)
197211
BIO_free(pkbio);
198212
g_free(unenc_s);
199213
ERR_free_strings();
214+
g_free(data);
200215
return G_SOURCE_REMOVE;
201216
}
202217

@@ -224,20 +239,25 @@ static gboolean remmina_stats_collector_done(gpointer data)
224239
g_free(uid);
225240
g_free(enc_s);
226241

227-
g = json_generator_new();
228-
json_generator_set_root(g, n);
229-
enc_s = json_generator_to_data(g, NULL); // unenc_s=serialized stats
230-
g_object_unref(g);
231-
json_node_unref(n);
242+
if (!sctdata->show_only) {
243+
244+
g = json_generator_new();
245+
json_generator_set_root(g, n);
246+
enc_s = json_generator_to_data(g, NULL); // unenc_s=serialized stats
247+
g_object_unref(g);
248+
json_node_unref(n);
232249

233250

234-
ss = soup_session_new();
235-
msg = soup_message_new("POST", PERIODIC_UPLOAD_URL);
236-
soup_message_set_request(msg, "application/json",
237-
SOUP_MEMORY_COPY, enc_s, strlen(enc_s));
238-
soup_session_queue_message(ss, msg, soup_callback, enc_s);
251+
ss = soup_session_new();
252+
msg = soup_message_new("POST", PERIODIC_UPLOAD_URL);
253+
soup_message_set_request(msg, "application/json",
254+
SOUP_MEMORY_COPY, enc_s, strlen(enc_s));
255+
soup_session_queue_message(ss, msg, soup_callback, enc_s);
256+
257+
remmina_log_printf("STATS upload: Starting upload to url %s\n", PERIODIC_UPLOAD_URL);
258+
}
239259

240-
remmina_log_printf("STATS upload: Starting upload to url %s\n", PERIODIC_UPLOAD_URL);
260+
g_free(data);
241261

242262
return G_SOURCE_REMOVE;
243263
}
@@ -247,20 +267,29 @@ static gpointer remmina_stats_collector(gpointer data)
247267
{
248268
TRACE_CALL(__func__);
249269
JsonNode *n;
270+
sc_tdata *sctdata;
271+
272+
sctdata = (sc_tdata *)data;
250273
n = remmina_stats_get_all();
251274

252275
/* stats collecting is done. Notify main thread calling
253276
* remmina_stats_collector_done() */
254-
g_idle_add(remmina_stats_collector_done, n);
277+
sctdata->statsroot = n;
278+
g_idle_add(remmina_stats_collector_done, sctdata);
255279

256280
return NULL;
257281
}
258282

259-
void remmina_stats_sender_send()
283+
void remmina_stats_sender_send(gboolean show_only)
260284
{
261285
TRACE_CALL(__func__);
262286

263-
g_thread_new("stats_collector", remmina_stats_collector, NULL);
287+
sc_tdata *sctdata;
288+
289+
sctdata = g_malloc(sizeof(sc_tdata));
290+
sctdata->show_only = show_only;
291+
292+
g_thread_new("stats_collector", remmina_stats_collector, (gpointer)sctdata);
264293

265294

266295
}
@@ -287,7 +316,7 @@ static gboolean remmina_stats_sender_periodic_check(gpointer user_data)
287316
g_get_current_time(&t);
288317
/* If current time is after "next" or clock is going back (but > 1/1/2018), then do send stats */
289318
if (t.tv_sec > next || (t.tv_sec < remmina_pref.periodic_usage_stats_last_sent && t.tv_sec > 1514764800)) {
290-
remmina_stats_sender_send();
319+
remmina_stats_sender_send(FALSE);
291320
}
292321

293322
periodic_check_counter++;

remmina/src/remmina_stats_sender.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ void remmina_stats_sender_schedule(void);
4040
gboolean remmina_stat_sender_can_send(void);
4141

4242
/* This is only for testing purposes: force a SEND */
43-
void remmina_stats_sender_send(void);
43+
void remmina_stats_sender_send(gboolean show_only);
4444

4545
G_END_DECLS
4646

0 commit comments

Comments
 (0)