void CEventQueue::addEvent(const CEvent& event) { // discard bogus event types switch (event.getType()) { case CEvent::kUnknown: case CEvent::kSystem: case CEvent::kTimer: return; default: break; } if ((event.getFlags() & CEvent::kDeliverImmediately) != 0) { dispatchEvent(event); CEvent::deleteData(event); } else { CArchMutexLock lock(m_mutex); // store the event's data locally UInt32 eventID = saveEvent(event); // add it if (!m_buffer->addEvent(eventID)) { // failed to send event removeEvent(eventID); CEvent::deleteData(event); } } }
void CInputFilter::handleEvent(const CEvent& event, void* arg) { // get a modifiable copy of this event. // set target to us, set kDontFreeData and kDeliverImmediately because the // original event will be destroyed after this method exits. CEvent evt(event.getType(), this, event.getData(), event.getFlags() | CEvent::kDontFreeData | CEvent::kDeliverImmediately); // clear dirty flag m_dirtyFlag = kNotDirty; EActionMode actionMode = kModePass; // match event against filter rules and perform actions for (CRuleList::iterator rule = m_ruleList.begin(); rule != m_ruleList.end(); ++rule) { EFilterStatus conditionStatus; EFilterStatus actionStatus; conditionStatus = rule->first->match(evt, arg, actionMode); if (conditionStatus == kDiscard) { return; } else if (conditionStatus == kNoMatch) { continue; } actionStatus = rule->second->perform(evt, arg, actionMode); if (actionStatus == kDiscard) { // discard event return; } else if (actionStatus == kNotHandled) { continue; } else if (actionStatus == kUpdateModifiers) { updateModifiers(); return; } // if we got here then the rule has matched and action returned // kHandled, so send the event. break; } sendEvent(evt); }
void CEvent::deleteData(const CEvent& event) { switch (event.getType()) { case kUnknown: case kQuit: case kSystem: case kTimer: break; default: if ((event.getFlags() & kDontFreeData) == 0) { free(event.getData()); delete event.getDataObject(); } break; } }
void CInputFilter::handleEvent(const CEvent& event, void*) { // copy event and adjust target CEvent myEvent(event.getType(), this, event.getData(), event.getFlags() | CEvent::kDontFreeData | CEvent::kDeliverImmediately); // let each rule try to match the event until one does for (CRuleList::iterator rule = m_ruleList.begin(); rule != m_ruleList.end(); ++rule) { if (rule->handleEvent(myEvent)) { // handled return; } } // not handled so pass through EVENTQUEUE->addEvent(myEvent); }
std::vector<CEvent *> OrganizerCalendarDatabaseAccess::getEvents(int calId, std::string guid, int &pErrorCode) { std::vector<CEvent*> listEvent; OrganizerGuidCacheKey cacheKey(calId, E_EVENT, QString::fromStdString(guid)); if (m_dbCache->containsEventVector(cacheKey)) { // found in cache m_dbCache->takeEventVector(cacheKey, listEvent); return listEvent; } const int columnNumber = 49; CEvent *event = 0; CAlarm *pAlarm = 0; CRecurrence *pRec = 0; int iI_EventCount = 0; int iJ_EventCount = 0; pErrorCode = CALENDAR_OPERATION_SUCCESSFUL; std::vector<long> vCookie; std::vector<std::string> vERule; std::vector<std::string> vEdate; std::vector<std::string> vRdate; std::vector<std::string> vRRule; QSqlQuery pQuery; if (!pQuery.prepare(selectInnerJoinBatchGuid)) { pErrorCode = CALENDAR_DATABASE_ERROR; return listEvent; } pQuery.bindValue(":calId", QString::number(calId)); pQuery.bindValue(":compType", QString::number(E_EVENT)); pQuery.bindValue(":compUid", QString::fromStdString(guid)); bool ok = pQuery.exec(); sqliteErrorMapper(pQuery.lastError(), pErrorCode); if (!ok) return listEvent; while (pQuery.next()) { event = new CEvent(); pAlarm = new CAlarm(); pRec = new CRecurrence(); for (iJ_EventCount = 0; iJ_EventCount < columnNumber; ++iJ_EventCount) { switch(iJ_EventCount) { case 0: // ID1 event->setId(pQuery.value(iJ_EventCount).toString().toStdString()); break; case 1: break; case 2: // ID3 event->setType(pQuery.value(iJ_EventCount).toInt()); break; case 3: // ID4 event->setFlags(pQuery.value(iJ_EventCount).toInt()); break; case 4: // ID5 event->setDateStart(pQuery.value(iJ_EventCount).toInt()); break; case 5: // ID6 event->setDateEnd(pQuery.value(iJ_EventCount).toInt()); break; case 6: // ID7 if (!pQuery.value(iJ_EventCount).toString().isEmpty()) event->setSummary(pQuery.value(iJ_EventCount).toString().toStdString()); break; case 7: // ID8 if (!pQuery.value(iJ_EventCount).toString().isEmpty()) event->setLocation(pQuery.value(iJ_EventCount).toString().toStdString()); break; case 8: // ID9 if (!pQuery.value(iJ_EventCount).toString().isEmpty()) event->setDescription(pQuery.value(iJ_EventCount).toString().toStdString()); break; case 9: // ID10 event->setStatus(pQuery.value(iJ_EventCount).toInt()); break; case 10: // ID11 if (!pQuery.value(iJ_EventCount).toString().isEmpty()) event->setGUid(pQuery.value(iJ_EventCount).toString().toStdString()); break; case 11: // ID12 event->setUntil(pQuery.value(iJ_EventCount).toInt()); break; case 12: // ID13 event->setAllDay(pQuery.value(iJ_EventCount).toInt()); break; case 13: // ID14 event->setCreatedTime(pQuery.value(iJ_EventCount).toInt()); break; case 14: // ID15 event->setLastModified(pQuery.value(iJ_EventCount).toInt()); break; case 15: // ID16 event->setTzid(pQuery.value(iJ_EventCount).toString().toStdString()); break; case 16: // ID17 case 17: // ID18 case 18: // ID19 break; case 19: // ID20 if (pQuery.value(iJ_EventCount).toInt()) event->setClas(pQuery.value(iJ_EventCount).toString().toStdString()); break; case 20: // ID21 if (!pQuery.value(iJ_EventCount).toString().isEmpty()) event->setGeo(pQuery.value(iJ_EventCount).toString().toStdString()); break; case 21: // ID22 event->setPriority(pQuery.value(iJ_EventCount).toInt()); break; case 22: // ID23 event->setDateStamp(pQuery.value(iJ_EventCount).toInt()); break; case 23: // ID24 event->setSequence(pQuery.value(iJ_EventCount).toInt()); break; case 24: // ID25 if (!pQuery.value(iJ_EventCount).toString().isEmpty()) event->setTransparency(pQuery.value(iJ_EventCount).toString().toStdString()); break; case 25: // ID26 event->setUid(pQuery.value(iJ_EventCount).toInt()); break; case 26: // ID27 if (!pQuery.value(iJ_EventCount).toString().isEmpty()) event->setUrl(pQuery.value(iJ_EventCount).toString().toStdString()); break; case 27: // ID28 if (!pQuery.value(iJ_EventCount).toString().isEmpty()) { std::vector<std::string> vAtt; vAtt.push_back(pQuery.value(iJ_EventCount).toString().toStdString()); event->setAttachments(vAtt); } break; case 28: // ID29 if (!pQuery.value(iJ_EventCount).toString().isEmpty()) event->setCategories(pQuery.value(iJ_EventCount).toString().toStdString()); break; case 29: // ID30 if (!pQuery.value(iJ_EventCount).toString().isEmpty()) event->setComments(pQuery.value(iJ_EventCount).toString().toStdString()); break; case 30: // ID31 if (!pQuery.value(iJ_EventCount).toString().isEmpty()) event->setContact(pQuery.value(iJ_EventCount).toString().toStdString()); break; case 31: // ID32 if (!pQuery.value(iJ_EventCount).toString().isEmpty()) event->setRelated(pQuery.value(iJ_EventCount).toString().toStdString()); break; case 32: // ID33 if (!pQuery.value(iJ_EventCount).toString().isEmpty()) event->setResources(pQuery.value(iJ_EventCount).toString().toStdString()); break; case 33: // ID34 case 34: // ID35 case 35: // ID36 break; case 36: // ID37 if (!pQuery.value(iJ_EventCount).toString().isEmpty()) pAlarm->setTrigger(pQuery.value(iJ_EventCount).toInt()); break; case 37: // ID38 if (!pQuery.value(iJ_EventCount).toString().isEmpty()) pAlarm->setRepeat(pQuery.value(iJ_EventCount).toInt()); break; case 38: // ID39 if (!pQuery.value(iJ_EventCount).toString().isEmpty()) pAlarm->setDuration(pQuery.value(iJ_EventCount).toInt()); break; case 39: // ID40 if (!pQuery.value(iJ_EventCount).toString().isEmpty()) pAlarm->setAction(pQuery.value(iJ_EventCount).toInt()); break; case 40: // ID41 if (!pQuery.value(iJ_EventCount).toString().isEmpty()) { vCookie.push_back(pQuery.value(iJ_EventCount).toInt()); pAlarm->setCookie(vCookie); } break; case 41: // ID42 if (!pQuery.value(iJ_EventCount).toString().isEmpty()) pAlarm->setAttach(pQuery.value(iJ_EventCount).toString().toStdString()); break; case 42: // ID43 break; case 43: // ID44 if (!pQuery.value(iJ_EventCount).toString().isEmpty()) { vRRule = event->extractSubStrings(pQuery.value(iJ_EventCount).toString().toStdString(), EXCLAMATION); pRec->setRrule(vRRule); } break; case 44: // ID45 if (!pQuery.value(iJ_EventCount).toString().isEmpty()) { vRdate = event->extractSubStrings(pQuery.value(iJ_EventCount).toString().toStdString(), SEMI_COLON); pRec->setRDays(vRdate); } break; case 45: // ID46 if (!pQuery.value(iJ_EventCount).toString().isEmpty()) { vEdate = event->extractSubStrings(pQuery.value(iJ_EventCount).toString().toStdString(), SEMI_COLON); pRec->setEDays(vEdate); } break; case 46: // ID47 if (!pQuery.value(iJ_EventCount).toString().isEmpty()) { vERule = event->extractSubStrings(pQuery.value(iJ_EventCount).toString().toStdString(), EXCLAMATION); pRec->setErule(vERule); } break; case 47: // ID48 if (!pQuery.value(iJ_EventCount).toString().isEmpty()) pRec->setRecurId(pQuery.value(iJ_EventCount).toInt()); break; case 48: // ID49 if (!pQuery.value(iJ_EventCount).toString().isEmpty()) pRec->setRtype(pQuery.value(iJ_EventCount).toInt()); break; } } if ((event->getFlags() == HAS_RECURRENCE) || (event->getFlags() == HAS_RECURRENCE_ALARM)) { event->setRecurrence(pRec); } delete pRec; pRec = 0; if ((event->getFlags() == HAS_ALARM) || (event->getFlags() == HAS_RECURRENCE_ALARM)) { event->setAlarm(pAlarm); } delete pAlarm; pAlarm = 0; std::vector<CAttendee *> listAttendee; listAttendee = event->retrieveAttendeeDetails(); COrganizer *pOrg = 0; pOrg = event->retrieveOrganizerDetails(); if (listAttendee.size()) event->setAttendees(listAttendee); std::vector<CAttendee *>::iterator listAttendeeIterator; for (listAttendeeIterator = listAttendee.begin(); listAttendeeIterator != listAttendee.end(); ++listAttendeeIterator) delete *listAttendeeIterator; if (pOrg) { event->setOrganizer(pOrg); delete pOrg; pOrg = 0; } /*retrieve xprop */ std::vector<CProperties *> vPropList; vPropList = event->retrieveXPropertyDetails(); event->setXProperties(vPropList); std::vector<CProperties *>::iterator vPropListIterator; for (vPropListIterator = vPropList.begin(); vPropListIterator != vPropList.end(); ++vPropListIterator) delete *vPropListIterator; /*retrieve params */ std::map<std::string, std::vector<CParameters *> > paramMap; paramMap = event->retrieveParameterDetails(); event->setHashMap(paramMap); paramMap.clear(); /* push the event in to the list */ listEvent.push_back(event); ++iI_EventCount; } // put to cache m_dbCache->insertEventVector(cacheKey, listEvent); return listEvent; }