示例#1
0
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) ;
}
示例#2
0
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) ;
  }
}
示例#3
0
文件: machine.cpp 项目: pgerdt/timed
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) ;
  }
}
示例#4
0
文件: timed.cpp 项目: special/timed
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 ;
}
示例#5
0
		cookie_builder& new_cookie()
		{
			jar_.push_back(cookie_t());
			return *this;
		}
示例#6
0
			Context& new_cookie()
			{
				jar_.push_back(cookie_t());
				return *this;
			}