#include "StudyFileWriter.h" #include "StudySettings.h" #include "../dictionary/Dictionary.h" #include "../version.h" #include "../dictionary/CardPack.h" StudyFileWriter::StudyFileWriter( const Dictionary* aDict ): m_dict( aDict ) { setAutoFormatting( true ); } bool StudyFileWriter::write( QIODevice* aDevice ) { setDevice( aDevice ); writeStartDocument(); writeDTD( "" ); writeStartElement("study"); writeAttribute( "version", STUDY_VERSION ); foreach( CardPack* pack, m_dict->cardPacks() ) writePack( pack ); writeEndDocument(); return true; } void StudyFileWriter::writePack( const CardPack* aPack ) { QStringList cardIds = aPack->getCardQuestions(); if( cardIds.isEmpty() ) return; // Don't write empty pack writeStartElement( "pack" ); writeAttribute( "id", aPack->id() ); if( !aPack->curCardName().isEmpty() ) { writeEmptyElement( "cur-card" ); writeAttribute( "id", aPack->curCardName() ); } foreach( QString cardId, cardIds ) writeCard( cardId, aPack ); writeEndElement(); } void StudyFileWriter::writeCard( const QString& aCardId, const CardPack* aPack ) { QList studyRecords( aPack->getStudyRecords( aCardId ) ); if( studyRecords.isEmpty() ) // Don't write cards without records return; writeStartElement( "c" ); writeAttribute( "id", aCardId ); // Take study records from the list in reverse order. The first is the most recent. QListIterator it( studyRecords ); it.toBack(); while( it.hasPrevious() ) { StudyRecord record = it.previous(); writeEmptyElement( "r" ); writeAttribute( "d", record.date.toString( Qt::ISODate ) ); writeAttribute( "l", QString::number( record.level ) ); writeAttribute( "g", QString::number( record.grade ) ); writeAttribute( "e", QString::number( record.easiness ) ); writeAttribute( "rt", QString::number( record.recallTime, 'g', 4 ) ); writeAttribute( "at", QString::number( record.answerTime, 'g', 4 ) ); writeAttribute( "i", QString::number( record.interval, 'g', 6 ) ); } writeEndElement(); // }