added "online-status" event.

E.g. ```{"event": "online-status", "online": true, "when": "2015-05-20 00:16:40", "state": 1}```
This commit is contained in:
luckydonald 2015-05-20 00:13:39 +02:00
parent 3ced7bbb27
commit 548c2b18e0
3 changed files with 52 additions and 11 deletions

View File

@ -1970,7 +1970,7 @@ void print_chat_info_gw (struct tgl_state *TLSR, void *extra, int success, struc
}
void print_user_status (struct tgl_user_status *S, struct in_ev *ev) {
if (enable_json) { return; }
assert(!enable_json); //calling functions print_user_info_gw() and user_status_upd() already check.
if (S->online > 0) {
mprintf (ev, "online (was online ");
print_date_full (ev, S->when);
@ -2561,9 +2561,10 @@ void user_status_upd (struct tgl_state *TLS, struct tgl_user *U) {
if (disable_output && !notify_ev) { return; }
if (!binlog_read) { return; }
if (log_level < 3) { return; }
if (enable_json) { return; }
struct in_ev *ev = notify_ev;
mprint_start (ev);
if (!enable_json)
{
mpush_color (ev, COLOR_YELLOW);
mprintf (ev, "User ");
print_user_name(ev, U->id, (void *) U);
@ -2571,6 +2572,15 @@ void user_status_upd (struct tgl_state *TLS, struct tgl_user *U) {
print_user_status(&U->status, ev);
mprintf (ev, "\n");
mpop_color (ev);
} else {
#ifdef USE_JSON
json_t *res = json_pack_user_status(&U->status);
char *s = json_dumps (res, 0);
mprintf (ev, "%s\n", s);
json_decref (res);
free (s);
#endif
}
mprint_end (ev);
}

View File

@ -6,6 +6,8 @@
#include <tgl/tgl.h>
#include <tgl/tgl-layout.h>
#include <assert.h>
//format time:
#include <time.h>
#ifndef json_boolean
#define json_boolean(val) ((val) ? json_true() : json_false())
@ -381,4 +383,32 @@ json_t *json_pack_read (struct tgl_message *M) {
return res;
}
int str_format_time(long when, char* string)
{
struct tm *tm = localtime ((void *)&when);
return sprintf (string, "%04d-%02d-%02d %02d:%02d:%02d", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec);
}
json_t *json_pack_user_status (struct tgl_user_status *S) {
json_t *res = json_object ();
assert (json_object_set (res, "online", json_boolean (S->online == 1)) >= 0);
assert (json_object_set (res, "state", json_integer (S->online)) >= 0);
if (S->online > 0 || S->online == -1) {
static char s[20];
str_format_time(S->when, s);
assert (json_object_set (res, "when", json_string (s)) >= 0);
} else if (S->online == 0) {
assert (json_object_set(res, "when", json_string("long time ago")) >= 0);
} else if (S->online == -2) {
assert (json_object_set(res, "when", json_string("recently")) >= 0);
} else if (S->online == -3) {
assert (json_object_set(res, "when", json_string("last week")) >= 0);
} else if (S->online == -4) {
assert (json_object_set (res, "when", json_string ("last month")) >= 0);
}
assert (json_object_set (res, "event", json_string ("online-status")) >= 0);
//this will overwrite "event":"message" to "event":"read".
return res;
}
#endif

View File

@ -3,11 +3,12 @@
#include "config.h"
#ifdef USE_JSON
#include <jansson.h>
#include <tgl.h>
#include <tgl-layout.h>
#include <tgl/tgl.h>
#include <tgl/tgl-layout.h>
json_t *json_pack_message (struct tgl_message *M);
json_t *json_pack_updates (unsigned flags);
json_t *json_pack_peer (tgl_peer_id_t id, tgl_peer_t *P);
json_t *json_pack_read (struct tgl_message *M);
json_t *json_pack_user_status (struct tgl_user_status *S);
#endif
#endif