示例#1
0
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();
}
示例#2
0
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;
}