cookie_t machine_t::add_event(const Maemo::Timed::event_io_t *eio, bool process_queue, const credentials_t *creds, const QDBusMessage *p_message) { // The credentials for the event are either already known (creds) // or have to be established by the QDBusMessage structure (from dbus daemon) // Using pointers instead of usual C++ references, just because a NULL-reference // usually confuses people (though working just fine) #if 0 if (event_t *e = new event_t) { // #include "simple-event.c++" #include "clock-ui-event.c++" #else if (event_t *e = event_t::from_dbus_iface(eio)) { if (e->actions.size() > 0) e->client_creds = creds ? new credentials_t(*creds) : new credentials_t(*p_message) ; #endif register_event(e) ; if (process_queue) invoke_process_transition_queue() ; log_info("new event: cookie=%d, object=%p", e->cookie.value(), e) ; return e->cookie ; } return cookie_t(0) ; } void machine_t::register_event(event_t *e) { if (not e->cookie.is_valid()) e->cookie = cookie_t(next_cookie++) ; events[e->cookie] = e ; state_start->go_to(e) ; } void machine_t::unregister_event(event_t *e) { log_assert(is_event_registered(e)) ; if (e->request_watcher) e->request_watcher->detach(e) ; log_assert(not e->request_watcher) ; events.erase(e->cookie) ; }
void machine_t::get_attributes_by_cookie(uint cookie, QMap<QString,QString> &a) { map<cookie_t,event_t*>::iterator it = events.find(cookie_t(cookie)) ; if(it==events.end()) return ; event_t *e = it->second ; a.insert("STATE", e->state->name()) ; static QString decimal = "%1" ; a.insert("COOKIE", decimal.arg(cookie)) ; for(attribute_t::const_iterator at=e->attr.txt.begin(); at!=e->attr.txt.end(); at++) { QString key = string_std_to_q(at->first) ; QString val = string_std_to_q(at->second) ; a.insert(key,val) ; } }
void machine_t::load_events(const iodata::array *events_data, bool trusted_source, bool use_cookies) { for(unsigned i=0; i < events_data->size(); ++i) { const iodata::record *ee = events_data->get(i)->rec() ; unsigned cookie = use_cookies ? ee->get("cookie")->value() : next_cookie++ ; event_t *e = new event_t ; e->cookie = cookie_t(cookie) ; e->ticker = ticker_t(ee->get("ticker")->value()) ; e->t.load(ee->get("t")->rec()) ; e->tz = ee->get("tz")->str() ; e->attr.load(ee->get("attr")->arr()) ; e->flags = ee->get("flags")->decode(event_t::codec) ; iodata::load(e->recrs, ee->get("recrs")->arr()) ; iodata::load_int_array(e->snooze, ee->get("snooze")->arr()) ; if (e->recrs.size() > 0) e->trigger_if_missed = true; const iodata::array *a = ee->get("b_attr")->arr() ; unsigned nb = a->size() ; e->b_attr.resize(nb) ; for(unsigned i=0; i<nb; ++i) e->b_attr[i].load(a->get(i)->rec()->get("attr")->arr()) ; e->last_triggered = ticker_t(ee->get("dialog_time")->value()) ; e->tsz_max = ee->get("tsz_max")->value() ; e->tsz_counter = ee->get("tsz_counter")->value() ; if(trusted_source) { iodata::load(e->actions, ee->get("actions")->arr()) ; if (e->actions.size()>0) e->client_creds = new credentials_t(ee->get("client_creds")->rec()) ; const iodata::array *cred_modifier = ee->get("cred_modifier")->arr() ; if (cred_modifier->size()>0) e->cred_modifier = new cred_modifier_t(cred_modifier) ; } if(e->flags & EventFlags::Empty_Recurring) e->invalidate_t() ; register_event(e) ; } }
cookie_t Timed::add_event(cookie_t remove, const Maemo::Timed::event_io_t &x, const QDBusMessage &message) { if(remove.is_valid() && am->find_event(remove)==NULL) { log_error("[%d]: cookie not found, event can't be replaced", remove.value()) ; return cookie_t() ; } cookie_t c = am->add_event(&x, true, NULL, &message) ; // message is given, but no creds log_debug() ; QMap<QString,QString>::const_iterator test = x.attr.txt.find("TEST") ; log_debug() ; if(test!=x.attr.txt.end()) log_debug("TEST event: '%s', cookie=%d", test.value().toStdString().c_str(), c.value()) ; log_debug() ; if(c.is_valid() && remove.is_valid() && !am->cancel_by_cookie(remove)) log_critical("[%d]: failed to remove event", remove.value()) ; return c ; }
cookie_builder& new_cookie() { jar_.push_back(cookie_t()); return *this; }
Context& new_cookie() { jar_.push_back(cookie_t()); return *this; }