bool Deck::importDana(QString fileName) { QFileInfo fi(fileName); QString baseName = fi.baseName().toLower(); QString tempFolder = utils::combinePaths(tempPath(), baseName); QString deckPath = utils::combinePaths(tempFolder, "deck.xml"); QString iconPath = utils::combinePaths(tempFolder, "icon.png"); utils::createDirectory(tempFolder); Compressor c; if(!c.decompressFolder(fileName, tempFolder)) { return false; } /// importFromXml(deckPath); utils::removeFile(deckPath); utils::copyDirectory(getDeckPath(), tempFolder); /// load icon pixmap loadPixmap( iconPath ); return true; }
bool Deck::importMnemosyne(QString fileName) { QFileInfo fi(fileName); QString baseName = fi.baseName().toLower(); QString tempFolder = utils::combinePaths(tempPath(), baseName); QString metadataPath = utils::combinePaths(tempFolder, "METADATA"); QString cardsPath = utils::combinePaths(tempFolder, "cards.xml"); utils::createDirectory(tempFolder); Compressor c; if(!c.decompressFolder(fileName, tempFolder)) { return false; } /// import metadata /// QTextStream s; QFile metadataFile(metadataPath); metadataFile.open(QIODevice::ReadOnly | QIODevice::Text); if(!metadataFile.isOpen()) return false; s.setDevice(&metadataFile); s.setCodec("UTF-8"); QStringList sl; QString l = s.readLine(); while (!s.atEnd()) { sl = l.split(":"); if(sl.size()>1) { if(sl[0]=="tags") setTags(sl[1]); else if(sl[0]=="notes") setDesc(sl[1]); else if(sl[0]=="author_name") setAuthor(sl[1]); else if(sl[0]=="card_set_name") setName(sl[1]); } l = s.readLine(); } /// read cards QDomDocument domDocument; QString errorStr; int errorLine; int errorColumn; QString front, back, level; QFile cardsFile(cardsPath); cardsFile.open(QIODevice::ReadOnly | QIODevice::Text); if(!cardsFile.isOpen()) return false; if (!domDocument.setContent(&cardsFile, true, &errorStr, &errorLine, &errorColumn)) { qDebug() << QString("Parse error at line %1, column %2:\n%3") .arg(errorLine) .arg(errorColumn) .arg(errorStr); return false; } QDomElement root = domDocument.documentElement(); QString rootName = root.tagName().toLower(); if (rootName == "opensm2sync") { QDomNodeList nodes = root.elementsByTagName("log"); QDomNode node; QDomElement elnode; int count = nodes.count(); for(int no = 0; no < count; no++) { node = nodes.at(no); if(node.attributes().namedItem("type").nodeValue()=="16") { elnode = node.firstChildElement("f"); front = elnode.text(); elnode = node.firstChildElement("b"); back = elnode.text(); if(!front.isEmpty()) { Card *card = new Card(); card->updateFront(front); card->updateBack(back); addCard(card); } } } } metadataFile.close(); cardsFile.close(); utils::removeFile(metadataPath); utils::removeFile(cardsPath); utils::copyDirectory(getDeckPath(), tempFolder); return true; }