9 #include "journal-reader.h"
11 #include "nlproc-stat.h"
13 static Eina_Hash *stored_appids;
14 static Eina_Hash *event_handlers;
16 static enum logd_db_query load_apps_cb(int id, const char *app, void *user_data)
20 if (!eina_hash_find(stored_appids, app)) {
23 _E("strdup failed: %s", strerror(errno));
24 return LOGD_DB_QUERY_CONTINUE;
27 if (eina_hash_add(stored_appids, tmp, (void*)id) == EINA_FALSE) {
28 _E("eina_hash_set failed: %s", eina_error_msg_get(eina_error_get()));
32 return LOGD_DB_QUERY_CONTINUE;
35 int init_event_handlers(void)
39 event_handlers = eina_hash_int32_new(NULL);
40 if (!event_handlers) {
41 _E("eina_hash_int32_new failed");
45 /* LOGD_DISPLAY | LOGD_CHANGED */
46 key = LOGD_DISPLAY | LOGD_SHIFT_ACTION(LOGD_CHANGED);
47 if (eina_hash_add(event_handlers,
48 &key, brightness_change_event_handler) == EINA_FALSE) {
49 _E("eina_hash_add failed: %s", eina_error_msg_get(eina_error_get()));
53 /* LOGD_DISPLAY | LOGD_ON */
54 key = LOGD_DISPLAY | LOGD_SHIFT_ACTION(LOGD_ON);
55 if (eina_hash_add(event_handlers,
56 &key, display_on_off_event_handler) == EINA_FALSE) {
57 _E("eina_hash_add failed: %s", eina_error_msg_get(eina_error_get()));
61 /* LOGD_DISPLAY | LOGD_OFF */
62 key = LOGD_DISPLAY | LOGD_SHIFT_ACTION(LOGD_OFF);
63 if (eina_hash_add(event_handlers,
64 &key, display_on_off_event_handler) == EINA_FALSE) {
65 _E("eina_hash_add failed: %s", eina_error_msg_get(eina_error_get()));
69 /* LOGD_BATTERY_SOC | LOGD_CHANGED */
70 key = LOGD_BATTERY_SOC | LOGD_SHIFT_ACTION(LOGD_CHANGED);
71 if (eina_hash_add(event_handlers,
72 &key, battery_level_changed_event_handler) == EINA_FALSE) {
73 _E("eina_hash_add failed: %s", eina_error_msg_get(eina_error_get()));
77 /* LOGD_CHARGER | LOGD_ON */
78 key = LOGD_CHARGER | LOGD_SHIFT_ACTION(LOGD_ON);
79 if (eina_hash_add(event_handlers,
80 &key, battery_charger_event_handler) == EINA_FALSE) {
81 _E("eina_hash_add failed: %s", eina_error_msg_get(eina_error_get()));
85 /* LOGD_CHARGER | LOGD_OFF */
86 key = LOGD_CHARGER | LOGD_SHIFT_ACTION(LOGD_OFF);
87 if (eina_hash_add(event_handlers,
88 &key, battery_charger_event_handler) == EINA_FALSE) {
89 _E("eina_hash_add failed: %s", eina_error_msg_get(eina_error_get()));
93 /* LOGD_POWER_MODE | LOGD_CHANGED */
94 key = LOGD_POWER_MODE | LOGD_SHIFT_ACTION(LOGD_CHANGED);
95 if (eina_hash_add(event_handlers,
96 &key, battery_power_mode_changed_event_handler) == EINA_FALSE) {
97 _E("eina_hash_add failed: %s", eina_error_msg_get(eina_error_get()));
109 stored_appids = eina_hash_string_superfast_new(NULL);
110 if (!stored_appids) {
111 _E("eina_hash_string_superfast_new failed");
115 ret = logd_load_apps(load_apps_cb, NULL);
117 _E("logd_load_apps failed");
121 ret = init_event_handlers();
123 _E("init_event_handlers failed");
133 eina_hash_free(event_handlers);
136 eina_hash_free(stored_appids);
141 void free_event(struct logd_grabber_event *event)
145 if (event->application)
146 free((void*)event->application);
148 free((void*)event->message);
151 int store_event(struct logd_grabber_event *event)
156 if (event->action == LOGD_ON || event->action == LOGD_OFF)
157 if (store_devices_workingtime(event->object, event->action) < 0)
158 _E("store_devices_workingtime failed");
159 id = (int)eina_hash_find(stored_appids, event->application);
161 if (logd_store_app(event->application) < 0) {
162 _E("logd_store_app failed");
165 logd_load_apps(load_apps_cb, NULL);
167 id = (int)eina_hash_find(stored_appids, event->application);
169 _E("eina_hash_find failed");
173 ret = logd_store_event(event->type, event->date, id, event->message);
175 _E("logd_store_event failed");
181 void event_socket_cb(void *user_data)
183 struct logd_grabber_event event;
186 ret = get_next_event(&event);
188 _E("get_next_event failed");
190 } else if (ret == 0) {
191 event_handler_func func;
193 _D("object %d, action %d, message: %s\n", event.object,
194 event.action, event.message);
196 func = (event_handler_func) eina_hash_find(event_handlers, &event.type);
201 if (func(&event) < 0) {
202 _E("Event handle failed: object %d, action %d, message: %s\n",
203 event.object, event.action, event.message);
205 if (store_event(&event) < 0) {
206 _E("store_event failed");