UBWebController::UBWebController(UBMainWindow* mainWindow) : QObject(mainWindow->centralWidget()) , mMainWindow(mainWindow) , mCurrentWebBrowser(0) , mBrowserWidget(0) , mTrapContentController(0) , mToolsCurrentPalette(0) , mToolsPalettePositionned(false) , mDownloadViewIsVisible(false) { connect(mMainWindow->actionWebTools, SIGNAL(toggled(bool)), this, SLOT(toggleWebToolsPalette(bool))); connect(mMainWindow->actionBookmark, SIGNAL(triggered()), this, SLOT(onActionBookmark())); mStackedWidget = new QStackedWidget(); mStackedWidget->addWidget(new QWidget(mStackedWidget)); mStackedWidget->addWidget(new QWidget(mStackedWidget)); mStackedWidget->addWidget(new QWidget(mStackedWidget)); mMainWindow->addWebWidget(mStackedWidget); for (int i = 0; i < TotalNumberOfWebInstances; i += 1){ mWebBrowserList[i] = 0; mToolsPaletteList[i] = 0; mToolsPalettePositionnedList[i] = false; } connect(&mOEmbedParser, SIGNAL(oembedParsed(QVector<sOEmbedContent>)), this, SLOT(onOEmbedParsed(QVector<sOEmbedContent>))); // TODO : Comment the next line to continue the Youtube button bugfix initialiazemOEmbedProviders(); }
void UBOEmbedParser::onFinished(QNetworkReply *reply) { if(QNetworkReply::NoError == reply->error()) { QString receivedDatas = reply->readAll().constData(); sOEmbedContent crntContent; // The received datas can be in two different formats: JSON or XML if(receivedDatas.contains("<oembed>")) { // XML ! crntContent = getXMLInfos(receivedDatas); } else if(receivedDatas.contains("{\"provider_url")) { // JSON ! crntContent = getJSONInfos(receivedDatas); } // As we don't want duplicates, we have to check if the content title has already // been parsed. if("" != crntContent.title && !mParsedTitles.contains(crntContent.title)) { mParsedTitles << crntContent.title; mContents << crntContent; } } else { // We decided to not handle the error case here. If there is a problem with // getting the oembed content information, we just don't handle it: the content // will not be available for importation. } // Decrement the number of content to analyze mPending--; if(0 == mPending) { // All the oembed contents have been parsed. We notify it! emit oembedParsed(mContents); } }
void UBOEmbedParser::parse(const QString& html) { mContents.clear(); QString query = "<link([^>]*)>"; QRegExp exp(query); QStringList results; int count = 0; int pos = 0; while ((pos = exp.indexIn(html, pos)) != -1) { ++count; pos += exp.matchedLength(); QStringList res = exp.capturedTexts(); if("" != res.at(1)) { results << res.at(1); } } QVector<QString> oembedUrls; if(2 <= results.size()) { for(int i=1; i<results.size(); i++) { if("" != results.at(i)) { QString qsNode = QString("<link%0>").arg(results.at(i)); QDomDocument domDoc; domDoc.setContent(qsNode); QDomNode linkNode = domDoc.documentElement(); // At this point, we have a node that is the <link> element. Now we have to parse its attributes // in order to check if it is a oEmbed node or not QDomAttr typeAttribute = linkNode.toElement().attributeNode("type"); if(typeAttribute.value().contains("oembed")) { // The node is an oembed one! We have to get the url and the type of oembed encoding QDomAttr hrefAttribute = linkNode.toElement().attributeNode("href"); QString url = hrefAttribute.value(); oembedUrls.append(url); } } } } mPending = oembedUrls.size(); if(0 == mPending) { emit oembedParsed(mContents); } else { // Here we start the parsing (finally...)! for(int i=0; i<oembedUrls.size(); i++) { emit parseContent(oembedUrls.at(i)); } } }
UBWebController::UBWebController(UBMainWindow* mainWindow) : QObject(mainWindow->centralWidget()) , mMainWindow(mainWindow) , mCurrentWebBrowser(0) , mBrowserWidget(0) , mTrapFlashController(0) , mToolsCurrentPalette(0) , mToolsPalettePositionned(false) , mDownloadViewIsVisible(false) { connect(&mOEmbedParser, SIGNAL(oembedParsed(QVector<sOEmbedContent>)), this, SLOT(onOEmbedParsed(QVector<sOEmbedContent>))); // TODO : Comment the next line to continue the Youtube button bugfix initialiazemOEmbedProviders(); connect(mMainWindow->actionOpenTutorial,SIGNAL(triggered()),this, SLOT(onOpenTutorial())); }