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:
parent
3ced7bbb27
commit
548c2b18e0
28
interface.c
28
interface.c
@ -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) {
|
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) {
|
if (S->online > 0) {
|
||||||
mprintf (ev, "online (was online ");
|
mprintf (ev, "online (was online ");
|
||||||
print_date_full (ev, S->when);
|
print_date_full (ev, S->when);
|
||||||
@ -2561,16 +2561,26 @@ void user_status_upd (struct tgl_state *TLS, struct tgl_user *U) {
|
|||||||
if (disable_output && !notify_ev) { return; }
|
if (disable_output && !notify_ev) { return; }
|
||||||
if (!binlog_read) { return; }
|
if (!binlog_read) { return; }
|
||||||
if (log_level < 3) { return; }
|
if (log_level < 3) { return; }
|
||||||
if (enable_json) { return; }
|
|
||||||
struct in_ev *ev = notify_ev;
|
struct in_ev *ev = notify_ev;
|
||||||
mprint_start (ev);
|
mprint_start (ev);
|
||||||
mpush_color (ev, COLOR_YELLOW);
|
if (!enable_json)
|
||||||
mprintf (ev, "User ");
|
{
|
||||||
print_user_name (ev, U->id, (void *)U);
|
mpush_color (ev, COLOR_YELLOW);
|
||||||
mprintf (ev, " ");
|
mprintf (ev, "User ");
|
||||||
print_user_status (&U->status, ev);
|
print_user_name(ev, U->id, (void *) U);
|
||||||
mprintf (ev, "\n");
|
mprintf (ev, " ");
|
||||||
mpop_color (ev);
|
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);
|
mprint_end (ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
30
json-tg.c
30
json-tg.c
@ -6,6 +6,8 @@
|
|||||||
#include <tgl/tgl.h>
|
#include <tgl/tgl.h>
|
||||||
#include <tgl/tgl-layout.h>
|
#include <tgl/tgl-layout.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
//format time:
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
#ifndef json_boolean
|
#ifndef json_boolean
|
||||||
#define json_boolean(val) ((val) ? json_true() : json_false())
|
#define json_boolean(val) ((val) ? json_true() : json_false())
|
||||||
@ -381,4 +383,32 @@ json_t *json_pack_read (struct tgl_message *M) {
|
|||||||
return res;
|
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
|
#endif
|
||||||
|
@ -3,11 +3,12 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
#ifdef USE_JSON
|
#ifdef USE_JSON
|
||||||
#include <jansson.h>
|
#include <jansson.h>
|
||||||
#include <tgl.h>
|
#include <tgl/tgl.h>
|
||||||
#include <tgl-layout.h>
|
#include <tgl/tgl-layout.h>
|
||||||
json_t *json_pack_message (struct tgl_message *M);
|
json_t *json_pack_message (struct tgl_message *M);
|
||||||
json_t *json_pack_updates (unsigned flags);
|
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_peer (tgl_peer_id_t id, tgl_peer_t *P);
|
||||||
json_t *json_pack_read (struct tgl_message *M);
|
json_t *json_pack_read (struct tgl_message *M);
|
||||||
|
json_t *json_pack_user_status (struct tgl_user_status *S);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user