void HtmlBookmarksImporter::processElement(const QWebElement &element) { QWebElement entryElement(element.findFirst(QLatin1String("dt, hr"))); while (!entryElement.isNull()) { if (entryElement.tagName().toLower() == QLatin1String("hr")) { BookmarksManager::addBookmark(BookmarksModel::SeparatorBookmark, {}, getCurrentFolder()); ++m_currentAmount; emit importProgress(BookmarksImport, m_totalAmount, m_currentAmount); } else { BookmarksModel::BookmarkType type(BookmarksModel::UnknownBookmark); QWebElement matchedElement(entryElement.findFirst(QLatin1String("dt > h3"))); if (matchedElement.isNull()) { matchedElement = entryElement.findFirst(QLatin1String("dt > a")); if (!matchedElement.isNull()) { type = (matchedElement.hasAttribute(QLatin1String("FEEDURL")) ? BookmarksModel::FeedBookmark : BookmarksModel::UrlBookmark); } } else { type = BookmarksModel::FolderBookmark; } if (type != BookmarksModel::UnknownBookmark && !matchedElement.isNull()) { QMap<int, QVariant> metaData({{BookmarksModel::TitleRole, matchedElement.toPlainText()}}); const bool isUrlBookmark(type == BookmarksModel::UrlBookmark || BookmarksModel::FeedBookmark); if (isUrlBookmark) { const QUrl url(matchedElement.attribute(QLatin1String("HREF"))); if (!areDuplicatesAllowed() && BookmarksManager::hasBookmark(url)) { entryElement = entryElement.nextSibling(); continue; } metaData[BookmarksModel::UrlRole] = url; } if (matchedElement.hasAttribute(QLatin1String("SHORTCUTURL"))) { const QString keyword(matchedElement.attribute(QLatin1String("SHORTCUTURL"))); if (!keyword.isEmpty() && !BookmarksManager::hasKeyword(keyword)) { metaData[BookmarksModel::KeywordRole] = keyword; } } if (matchedElement.hasAttribute(QLatin1String("ADD_DATE"))) { const QDateTime dateTime(getDateTime(matchedElement, QLatin1String("ADD_DATE"))); if (dateTime.isValid()) { metaData[BookmarksModel::TimeAddedRole] = dateTime; metaData[BookmarksModel::TimeModifiedRole] = dateTime; } } if (matchedElement.hasAttribute(QLatin1String("LAST_MODIFIED"))) { const QDateTime dateTime(getDateTime(matchedElement, QLatin1String("LAST_MODIFIED"))); if (dateTime.isValid()) { metaData[BookmarksModel::TimeModifiedRole] = dateTime; } } if (isUrlBookmark && matchedElement.hasAttribute(QLatin1String("LAST_VISITED"))) { const QDateTime dateTime(getDateTime(matchedElement, QLatin1String("LAST_VISITED"))); if (dateTime.isValid()) { metaData[BookmarksModel::TimeVisitedRole] = dateTime; } } BookmarksModel::Bookmark *bookmark(BookmarksManager::addBookmark(type, metaData, getCurrentFolder())); ++m_currentAmount; emit importProgress(BookmarksImport, m_totalAmount, m_currentAmount); if (type == BookmarksModel::FolderBookmark) { setCurrentFolder(bookmark); processElement(entryElement); } if (entryElement.nextSibling().tagName().toLower() == QLatin1String("dd")) { bookmark->setItemData(entryElement.nextSibling().toPlainText(), BookmarksModel::DescriptionRole); entryElement = entryElement.nextSibling(); } } } entryElement = entryElement.nextSibling(); } goToParent(); }
void Career::save(TiXmlDocument* xmlDocument) { unsigned int i; std::string data; // create career node TiXmlElement* careerElement = new TiXmlElement( "career" ); careerElement->SetAttribute( "name", _name.c_str() ); // create virtues node TiXmlElement* virtuesElement = new TiXmlElement( "virtues" ); virtuesElement->SetAttribute( "checksum", checksum( &_virtues, sizeof(Virtues) ) ); encrypt( data, &_virtues, sizeof(Virtues), _name.c_str() ); virtuesElement->SetAttribute( "data", data.c_str() ); careerElement->InsertEndChild( *virtuesElement ); delete virtuesElement; // save gears TiXmlElement* gearsGroupElement = new TiXmlElement( "gears" ); for( i=0; i<_gears.size(); i++ ) { Gear gear = _gears[i]; //gear.state = 1.0f; TiXmlElement* gearElement = new TiXmlElement( "gear" ); gearElement->SetAttribute( "checksum", checksum( &gear, sizeof(Gear) ) ); encrypt( data, &gear, sizeof(Gear), _name.c_str() ); gearElement->SetAttribute( "data", data.c_str() ); gearsGroupElement->InsertEndChild( *gearElement ); delete gearElement; } careerElement->InsertEndChild( *gearsGroupElement ); delete gearsGroupElement; // save home if( _isHomeDefined ) { TiXmlElement* homeElement = new TiXmlElement( "home" ); homeElement->SetAttribute( "x", _homeX ); homeElement->SetAttribute( "y", _homeY ); careerElement->InsertEndChild( *homeElement ); delete homeElement; } // save events if( _events.size() ) { TiXmlElement eventsGroup( "events" ); for( unsigned int i=0; i<_events.size(); i++ ) { _events[i]->saveToXml( &eventsGroup ); } careerElement->InsertEndChild( eventsGroup ); } // save game data if( _gameDataM.size() ) { TiXmlElement gameDataGroup( "gamedata" ); for( GameDataI gameDataI = _gameDataM.begin(); gameDataI != _gameDataM.end(); gameDataI++ ) { int cs = ::checksum( gameDataI->second->getData(), gameDataI->second->getSize() ); std::string data; ::encrypt( data, gameDataI->second->getData(), gameDataI->second->getSize(), _name.c_str() ); TiXmlElement entryElement( "entry" ); entryElement.SetAttribute( "name", gameDataI->first.c_str() ); entryElement.SetAttribute( "checksum", cs ); entryElement.SetAttribute( "data", data.c_str() ); gameDataGroup.InsertEndChild( entryElement ); } careerElement->InsertEndChild( gameDataGroup ); } xmlDocument->InsertEndChild( *careerElement ); delete careerElement; }