void JingleFileTransferFileInfoParser::handleEndElement(const std::string& element, const std::string&) { --level; if (level == 1) { if (element == "date") { getPayloadInternal()->setDate(stringToDateTime(charData)); } else if (element == "desc") { getPayloadInternal()->setDescription(charData); } else if (element == "media-type") { getPayloadInternal()->setMediaType(charData); } else if (element == "name") { getPayloadInternal()->setName(charData); } else if (element == "size") { boost::optional<boost::uintmax_t> size = safeLexicalCast<boost::uintmax_t>(charData); if (size) { getPayloadInternal()->setSize(size.get()); } } else if (element == "range") { getPayloadInternal()->setSupportsRangeRequests(true); if (rangeOffset) { getPayloadInternal()->setRangeOffset(rangeOffset.get_value_or(0)); } } else if (element == "hash") { getPayloadInternal()->addHash(HashElement(hashAlg, Base64::decode(charData))); } } }
void IdleParser::handleStartElement(const std::string& /*element*/, const std::string& /*ns*/, const AttributeMap& attributes) { if (level_ == 0) { boost::posix_time::ptime since = stringToDateTime(attributes.getAttribute("since")); getPayloadInternal()->setSince(since); } ++level_; }
void KNMusicDatabase::recoverData() { int recoverCount=size(); QString dateTimeStringCache; QDateTime dateTimeCache; for(int i=0; i<recoverCount; i++) { QStringList textList; KNMusicGlobal::MusicDetailsInfo currentDetails; QJsonObject currentSong=row(i); QJsonArray displayText=currentSong["Text"].toArray(); for(int j=0; j<KNMusicGlobal::MusicDataCount; j++) { textList.append(displayText.at(j).toString()); } currentDetails.filePath=currentSong["FilePath"].toString(); currentDetails.coverImageHash=currentSong["CoverImage"].toString(); currentDetails.duration=(int)currentSong["Time"].toDouble(); currentDetails.size=(int)currentSong["Size"].toDouble(); currentDetails.bitRate=(float)currentSong["BitRate"].toDouble(); currentDetails.samplingRate=(float)currentSong["SampleRate"].toDouble(); currentDetails.rating=(int)currentSong["Rating"].toInt(); dateTimeStringCache=currentSong["DateModified"].toString(); dateTimeCache=stringToDateTime(dateTimeStringCache); currentDetails.dateModified=dateTimeCache; textList[KNMusicGlobal::DateModified]=dateTimeCache.toString("yyyy-MM-dd APhh:mm"); dateTimeStringCache=currentSong["LastPlayed"].toString(); dateTimeCache=stringToDateTime(dateTimeStringCache); currentDetails.lastPlayed=dateTimeCache; textList[KNMusicGlobal::LastPlayed]=dateTimeCache.toString("yyyy-MM-dd APhh:mm"); dateTimeStringCache=currentSong["DateAdded"].toString(); dateTimeCache=stringToDateTime(dateTimeStringCache); currentDetails.dateAdded=dateTimeCache; textList[KNMusicGlobal::DateAdded]=dateTimeCache.toString("yyyy-MM-dd APhh:mm"); m_model->recoverFile(textList, currentDetails); } emit recoverComplete(); }
QString read_item( const Outlook::_AppointmentItemPtr &item, QXmlStreamReader &reader, bool dump_exception ) { TRACE(OutlookSyncPlugin) << "OutlookDatebookSync::read_item"; Outlook::UserPropertiesPtr props = item->GetUserProperties(); Q_ASSERT(props); // We need to clear the recurrence pattern now or we will fail to update recurring events if ( !dump_exception ) item->ClearRecurrencePattern(); enum State { Idle, When, Alarm, Repeat, Exception, Categories }; State state = Idle; Outlook::RecurrencePatternPtr recpat = 0; QString key; QXmlStreamAttributes attributes; QString value; QStringList categories; bool utc = false; bool allday = false; while (!reader.atEnd()) { bool loop = true; switch(reader.readNext()) { case QXmlStreamReader::StartElement: key = reader.qualifiedName().toString(); value = QString(); attributes = reader.attributes(); if ( key == "When" ) state = When; if ( state == When && key == "StartDate" ) { allday = true; } if ( state == When && key == "Start" ) { allday = false; } if ( key == "Alarm" ) { state = Alarm; LOG() << "item->PutReminderSet" << false; item->PutReminderSet( false ); } if ( state == Alarm && key == "Type" || key == "Delay" ) { // Outlook only wants to see alarms set on events in the future // If we sync an event in the past with an alarm it will go off // immediately, something that can be annoying when you do an // initial sync with lots of events with alarms. if ( date_to_qdatetime(item->GetStart()) > QDateTime::currentDateTime() ) { LOG() << "item->PutReminderSet" << true; item->PutReminderSet( true ); } } if ( !dump_exception ) { if ( key == "Repeat" ) { state = Repeat; } if ( state == Repeat && key == "Type" ) { recpat = item->GetRecurrencePattern(); recpat->PutPatternStartDate( item->GetStart() ); } if ( state == Repeat && key == "Exception" ) { state = Exception; } } if ( key == "Categories" ) state = Categories; break; case QXmlStreamReader::Characters: value += reader.text().toString(); break; case QXmlStreamReader::EndElement: key = reader.qualifiedName().toString(); //LOG() << "key" << key << "value" << value; READ_STRING(Description,Subject); READ_STRING(Location,Location); if ( key == "TimeZone" ) { utc = ( !value.isEmpty() ); } if ( state == When ) { if ( allday ) { item->PutAllDayEvent( true ); READ_DATE(StartDate,Start); // We can't just read the end date because Outlook does it differently to Qtopia. // Qtopia gives us something like "starts 7/10/08, ends 7/10/08" but Outlook // expects "starts 7/10/08 00:00:00, ends 8/10/08 00:00:00". // Simply add one day to the end date to get something Outlook won't barf over. if ( key == "EndDate" ) { QDate dt = stringToDate(value); QDateTime actual( dt.addDays(1), QTime(0,0,0) ); LOG() << "item->PutEnd" << actual; item->PutEnd( qdatetime_to_date(actual) ); } } else { item->PutAllDayEvent( false ); if ( key == "Start" ) { QDateTime dt = stringToDateTime(value, utc); if ( utc ) { dt.setTimeSpec( Qt::UTC ); dt = dt.toLocalTime(); } LOG() << "item->PutStart" << dt; item->PutStart( qdatetime_to_date(dt) ); } if ( key == "End" ) { QDateTime dt = stringToDateTime(value, utc); if ( utc ) { dt.setTimeSpec( Qt::UTC ); dt = dt.toLocalTime(); } LOG() << "item->PutEnd" << dt; item->PutEnd( qdatetime_to_date(dt) ); } } if ( key == "When" ) state = Idle; } if ( state == Alarm ) { READ_ENUM(Type,ReminderPlaySound,true,Audible); READ_ENUM(Type,ReminderPlaySound,false,Visible); READ_INT(Delay,ReminderMinutesBeforeStart); if ( key == "Alarm" ) state = Idle; } if ( dump_exception == false && state == Repeat ) { READ_ENUM_ITEM(Type,RecurrenceType,Outlook::olRecursDaily,Daily,recpat); READ_ENUM_ITEM(Type,RecurrenceType,Outlook::olRecursWeekly,Weekly,recpat); READ_ENUM_ITEM(Type,RecurrenceType,Outlook::olRecursMonthly,MonthlyDate,recpat); READ_ENUM_ITEM(Type,RecurrenceType,Outlook::olRecursMonthNth,MonthlyDay,recpat); READ_ENUM_ITEM(Type,RecurrenceType,Outlook::olRecursMonthNth,MonthlyEndDay,recpat); READ_ENUM_ITEM(Type,RecurrenceType,Outlook::olRecursYearly,Yearly,recpat); if ( key == "Type" ) { if ( value == "MonthlyEndDay" ) { LOG() << "recpat->PutInstance" << 5; recpat->PutInstance( 5 ); } } if ( key == "Frequency" ) { int interval = QVariant(value).toInt(); if ( interval >= 12 && interval % 12 == 0 ) { // since interval is bigger than 12 yet divisible by 12 this is more // likely to be a YearNth which Qtopia Sync Agent sends down as a // MonthNth with interval *= 12 recpat->PutRecurrenceType( Outlook::olRecursYearNth ); } LOG() << "recpat->PutInterval" << interval; recpat->PutInterval( interval ); } if ( key == "Until" ) { if ( value.isEmpty() ) { LOG() << "recpat->PutNoEndDate" << true; recpat->PutNoEndDate( true ); } else { LOG() << "recpat->PutPatternEndDate" << QDateTime( stringToDate(value), QTime(0,0,0) ); recpat->PutPatternEndDate( qdatetime_to_date(QDateTime( stringToDate(value), QTime(0,0,0) )) ); } } // Outlook doesn't seem to support Nearest == false (so ignore it) if ( key == "WeekMask" ) { int mask = 0; foreach( const QString &v, value.split(" ") ) { if ( v == "Monday" ) mask |= Outlook::olMonday; else if ( v == "Tuesday" ) mask |= Outlook::olTuesday; else if ( v == "Wednesday" ) mask |= Outlook::olWednesday; else if ( v == "Thursday" ) mask |= Outlook::olThursday; else if ( v == "Friday" ) mask |= Outlook::olFriday; else if ( v == "Saturday" ) mask |= Outlook::olSaturday; else if ( v == "Sunday" ) mask |= Outlook::olSunday; } LOG() << "recpat->PutDayOfWeekMask" << mask; recpat->PutDayOfWeekMask( (Outlook::OlDaysOfWeek)mask ); } if ( key == "Repeat" ) state = Idle; } if ( dump_exception == false && state == Exception ) { if ( key == "OriginalDate" ) { QDate exceptionDate = stringToDate(value); Outlook::_AppointmentItemPtr eitem = recpat->GetOccurrence( qdatetime_to_date(QDateTime( exceptionDate, QTime(0,0,0) )) ); QString entryid = read_item( eitem, reader, true ); if ( entryid.isEmpty() ) state = Repeat; // the delete case eats the closing Exception tag } if ( key == "Exception" ) { state = Repeat; } } READ_STRING(Notes,Body); if ( state == Categories ) { if ( key == "Category" ) categories << value; if ( key == "Categories" ) { LOG() << "item->PutCategories" << categories; item->PutCategories( qstring_to_bstr(categories.join(", ")) ); state = Idle; } } READ_CUSTOM(TimeZone,Qtopia Timezone); if ( dump_exception && key == "Appointment" ) loop = false; if ( dump_exception && key == "Exception" ) { // Oops... no Appointment tag in an Exception tag // That means we need to delete the existing exception item->Delete(); return QString(); } }