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; }