void AnnouncementApi::announceSession(const QUrl &apiUrl, const Session &session) { if(isWhitelisted(apiUrl)) { logger::debug() << "announcing" << session.id << "at" << apiUrl.toString(); // Construct the announcement QJsonObject o; if(!session.host.isEmpty()) o["host"] = session.host; else if(!_localAddress.isEmpty()) o["host"] = _localAddress; if(session.port>0) o["port"] = session.port; o["id"] = session.id; o["protocol"] = session.protocol.asString(); o["title"] = session.title; o["users"] = session.users; o["usernames"] = QJsonArray::fromStringList(session.usernames); o["password"] = session.password; o["owner"] = session.owner; // TODO: explicit NSFM tag // Send request QUrl url = apiUrl; url.setPath(slashcat(url.path(), "sessions/")); QNetworkRequest req(url); req.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); QNetworkReply *reply = _net->post(req, QJsonDocument(o).toJson()); reply->setProperty("QUERY_TYPE", "announce"); reply->setProperty("API_URL", apiUrl); reply->setProperty("SESSION_ID", session.id); } }
void Update::updateRequest(const QString &strMethod, const QString &strUrl, const QString &strUrlMarker) { QString strAgentPlatform = this->getPlatform(); QString strAgentUrl = "http://simplechatclien.sourceforge.net"; QString strAgentProgram = "SimpleChatClient"; QString strAgentVersion = Settings::instance()->get("version"); QString strUserAgent = QString("Mozilla/5.0 (%1; +%2) %3/%4").arg(strAgentPlatform, strAgentUrl, strAgentProgram, strAgentVersion); QNetworkRequest request; request.setUrl(QUrl(strUrl)); request.setHeader(QNetworkRequest::UserAgentHeader, strUserAgent.toLatin1()); QString strUUID = Settings::instance()->get("unique_id"); QRegExp rUUID("^[a-f0-9]{8}-([a-f0-9]{4}-){3}[a-f0-9]{12}$"); if ((strMethod == "POST") && (!strUUID.isEmpty()) && (rUUID.exactMatch(strUUID))) { QString strContent = QString("{\"uuid\":\"%1\"}").arg(strUUID); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); QNetworkReply *pReply = accessManager->post(request, strContent.toLatin1()); pReply->setProperty("update_url", strUrlMarker); } else { QNetworkReply *pReply = accessManager->get(request); pReply->setProperty("update_url", strUrlMarker); } }
void IMDB::onLoadFinished() { QNetworkReply *reply = static_cast<QNetworkReply*>(QObject::sender()); reply->deleteLater(); Movie *movie = reply->property("storage").value<Storage*>()->movie(); QList<int> infos = reply->property("infosToLoad").value<Storage*>()->infosToLoad(); if (!movie) return; if (reply->error() == QNetworkReply::NoError ) { QString msg = QString::fromUtf8(reply->readAll()); parseAndAssignInfos(msg, movie, infos); QString posterUrl = parsePosters(msg); if (infos.contains(MovieScraperInfos::Poster) && !posterUrl.isEmpty()) { QNetworkReply *reply = qnam()->get(QNetworkRequest(posterUrl)); reply->setProperty("storage", Storage::toVariant(reply, movie)); reply->setProperty("infosToLoad", Storage::toVariant(reply, infos)); connect(reply, SIGNAL(finished()), this, SLOT(onPosterLoadFinished())); } else { movie->controller()->scraperLoadDone(this); } } else { qWarning() << "Network Error (load)" << reply->errorString(); } }
/** * @brief Called when the tv show actors are downloaded * Starts download of banners * @see TheTvDb::parseAndAssignActors * @see TheTvDb::onBannersFinished */ void TheTvDb::onActorsFinished() { QNetworkReply *reply = static_cast<QNetworkReply*>(QObject::sender()); reply->deleteLater(); TvShow *show = reply->property("storage").value<Storage*>()->show(); TvShowUpdateType updateType = static_cast<TvShowUpdateType>(reply->property("updateType").toInt()); QList<int> infos = reply->property("infosToLoad").value<Storage*>()->infosToLoad(); if (!show) return; if (reply->error() == QNetworkReply::NoError ) { QString msg = QString::fromUtf8(reply->readAll()); if (show->infosToLoad().contains(TvShowScraperInfos::Actors) && (updateType == UpdateShow || updateType == UpdateShowAndAllEpisodes || updateType == UpdateShowAndNewEpisodes)) parseAndAssignActors(msg, show); } else { qWarning() << "Network Error" << reply->errorString(); } QString mirror = m_xmlMirrors.at(qrand()%m_xmlMirrors.count()); QUrl url(QString("%1/api/%2/series/%3/banners.xml").arg(mirror).arg(m_apiKey).arg(show->tvdbId())); reply = qnam()->get(QNetworkRequest(url)); reply->setProperty("storage", Storage::toVariant(reply, show)); reply->setProperty("updateType", updateType); reply->setProperty("infosToLoad", Storage::toVariant(reply, infos)); connect(reply, SIGNAL(finished()), this, SLOT(onBannersFinished())); }
QString Cache::get(const QString &strChannel, const QString &strUrl) { QString strFileName = QString(QCryptographicHash::hash(strUrl.toLatin1(), QCryptographicHash::Md5).toHex())+"."+QFileInfo(strUrl).suffix(); QString strPathPlusFileName = getCachePath(strFileName); bool bDownloadFile = true; if (QFile::exists(strPathPlusFileName)) { QList<QString> lSupportedImages; lSupportedImages << "jpg" << "jpeg" << "png" << "bmp"; if (lSupportedImages.contains(QFileInfo(strFileName).suffix().toLower())) { QPixmap pixmap; if (!pixmap.load(strPathPlusFileName)) bDownloadFile = true; else bDownloadFile = false; } else bDownloadFile = false; } else bDownloadFile = true; if (bDownloadFile) { QNetworkReply *reply = accessManager->get(QNetworkRequest(strUrl)); reply->setProperty("file", strPathPlusFileName); reply->setProperty("channel", strChannel); } return strPathPlusFileName; }
/** * @brief Called when backdrop scraping has finished * Starts the next backdrop download or tells the movie that scraping is done */ void Cinefacts::backdropFinished() { QNetworkReply *reply = static_cast<QNetworkReply*>(QObject::sender()); reply->deleteLater(); Movie *movie = reply->property("storage").value<Storage*>()->movie(); QStringList backdrops = reply->property("backdrops").toStringList(); QList<int> infos = reply->property("infosToLoad").value<Storage*>()->infosToLoad(); if (!movie) return; if (reply->error() == QNetworkReply::NoError) { QString msg = QString::fromUtf8(reply->readAll()); QRegExp rx("<a href=\"([^\"]*)\" target=\"_blank\">Bild in Originalgr..e</a>"); rx.setMinimal(true); if (rx.indexIn(msg) != -1) { Poster p; p.thumbUrl = rx.cap(1); p.originalUrl = rx.cap(1); movie->addBackdrop(p); } if (!backdrops.isEmpty()) { reply = qnam()->get(QNetworkRequest(QUrl(QString("http://www.cinefacts.de%1").arg(backdrops.takeFirst())))); reply->setProperty("storage", Storage::toVariant(reply, movie)); reply->setProperty("backdrops", backdrops); reply->setProperty("infosToLoad", Storage::toVariant(reply, infos)); connect(reply, SIGNAL(finished()), this, SLOT(backdropFinished())); return; } } movie->controller()->scraperLoadDone(this); }
EchonestCatalogSynchronizer::EchonestCatalogSynchronizer( QObject *parent ) : QObject( parent ) { m_syncing = TomahawkSettings::instance()->enableEchonestCatalogs(); qRegisterMetaType<QList<QStringList> >("QList<QStringList>"); connect( TomahawkSettings::instance(), SIGNAL( changed() ), this, SLOT( checkSettingsChanged() ) ); connect( SourceList::instance()->getLocal()->dbCollection().data(), SIGNAL( tracksAdded( QList<unsigned int> ) ), this, SLOT( tracksAdded( QList<unsigned int> ) ), Qt::QueuedConnection ); connect( SourceList::instance()->getLocal()->dbCollection().data(), SIGNAL( tracksRemoved( QList<unsigned int> ) ), this, SLOT( tracksRemoved( QList<unsigned int> ) ), Qt::QueuedConnection ); const QByteArray artist = TomahawkSettings::instance()->value( "collection/artistCatalog" ).toByteArray(); const QByteArray song = TomahawkSettings::instance()->value( "collection/songCatalog" ).toByteArray(); if ( !artist.isEmpty() ) m_artistCatalog.setId( artist ); if ( !song.isEmpty() ) m_songCatalog.setId( song ); // Sanity check if ( !song.isEmpty() && !m_syncing ) { // Not syncing but have a catalog id... lets fix this QNetworkReply* r = m_songCatalog.deleteCatalog(); connect( r, SIGNAL( finished() ), this, SLOT( catalogDeleted() ) ); r->setProperty( "type", "song" ); } if ( !artist.isEmpty() && !m_syncing ) { QNetworkReply* r = m_artistCatalog.deleteCatalog(); connect( r, SIGNAL( finished() ), this, SLOT( catalogDeleted() ) ); r->setProperty( "type", "artist" ); } }
void UniversalMusicScraper::onArtistRelsFinished() { QNetworkReply *reply = static_cast<QNetworkReply*>(QObject::sender()); Artist *artist = reply->property("storage").value<Storage*>()->artist(); QList<int> infos = reply->property("infosToLoad").value<Storage*>()->infosToLoad(); reply->deleteLater(); if (!artist) return; if (reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() == 302 || reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() == 301) { qDebug() << "Got redirect" << reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl(); reply = qnam()->get(QNetworkRequest(reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl())); reply->setProperty("storage", Storage::toVariant(reply, artist)); reply->setProperty("infosToLoad", Storage::toVariant(reply, infos)); connect(reply, SIGNAL(finished()), this, SLOT(onArtistRelsFinished())); return; } QString discogsUrl; if (reply->error() == QNetworkReply::NoError) { QString msg = QString::fromUtf8(reply->readAll()); QDomDocument domDoc; domDoc.setContent(msg); for (int i=0, n=domDoc.elementsByTagName("relation").count() ; i<n ; ++i) { QDomElement elem = domDoc.elementsByTagName("relation").at(i).toElement(); if (elem.attribute("type") == "allmusic" && elem.elementsByTagName("target").count() > 0) { QString url = elem.elementsByTagName("target").at(0).toElement().text(); QRegExp rx("allmusic\\.com/artist/(.*)$"); if (rx.indexIn(url) != -1) artist->setAllMusicId(rx.cap(1)); } if (elem.attribute("type") == "discogs" && elem.elementsByTagName("target").count() > 0) discogsUrl = elem.elementsByTagName("target").at(0).toElement().text(); } } if (!m_artistDownloads.contains(artist)) m_artistDownloads.insert(artist, QList<DownloadElement>()); m_artistDownloads[artist].clear(); appendDownloadElement(artist, "theaudiodb", "tadb_data", QUrl(QString("http://www.theaudiodb.com/api/v1/json/%1/artist-mb.php?i=%2").arg(m_tadbApiKey).arg(artist->mbId()))); appendDownloadElement(artist, "theaudiodb", "tadb_discography", QUrl(QString("http://www.theaudiodb.com/api/v1/json/%1/discography-mb.php?s=%2").arg(m_tadbApiKey).arg(artist->mbId()))); if (!artist->allMusicId().isEmpty()) { appendDownloadElement(artist, "allmusic", "am_data", QUrl(QString("http://www.allmusic.com/artist/%1").arg(artist->allMusicId()))); appendDownloadElement(artist, "allmusic", "am_biography", QUrl(QString("http://www.allmusic.com/artist/%1/biography").arg(artist->allMusicId()))); } if (!discogsUrl.isEmpty()) appendDownloadElement(artist, "discogs", "discogs_data", QUrl(discogsUrl + "?type=Releases&subtype=Albums")); foreach (DownloadElement elem, m_artistDownloads[artist]) { QNetworkRequest request(elem.url); request.setRawHeader("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10; rv:33.0) Gecko/20100101 Firefox/33.0"); QNetworkReply *reply = qnam()->get(request); new NetworkReplyWatcher(this, reply); reply->setProperty("storage", Storage::toVariant(reply, artist)); reply->setProperty("infosToLoad", Storage::toVariant(reply, infos)); connect(reply, SIGNAL(finished()), this, SLOT(onArtistLoadFinished())); }
void EchoNestPlugin::getMiscTopTerms( uint requestId, const Tomahawk::InfoSystem::InfoRequestData &requestData ) { QNetworkReply* reply = Echonest::Artist::topTerms( 20 ); reply->setProperty( "requestId", requestId ); reply->setProperty( "requestData", QVariant::fromValue< Tomahawk::InfoSystem::InfoRequestData >( requestData ) ); connect( reply, SIGNAL( finished() ), SLOT( getMiscTopSlot() ) ); }
void Cache::httpFinished(QNetworkReply *reply) { reply->deleteLater(); if (reply->error()) return; QString strFileName = reply->property("file").toString(); QString strChannel = reply->property("channel").toString(); QVariant possibleRedirectUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute); if (!possibleRedirectUrl.toUrl().isEmpty()) { QNetworkReply *replyRedirect = accessManager->get(QNetworkRequest(possibleRedirectUrl.toUrl())); replyRedirect->setProperty("file", strFileName); replyRedirect->setProperty("channel", strChannel); return; } QByteArray bFileContent = reply->readAll(); if (bFileContent.isEmpty()) return; QList<QString> lSupportedImages; lSupportedImages << "jpg" << "jpeg" << "png" << "bmp"; if (lSupportedImages.contains(QFileInfo(strFileName).suffix().toLower())) { QPixmap pixmap; if (pixmap.loadFromData(bFileContent)) { pixmap = pixmap.scaled(QSize(75,75), Qt::KeepAspectRatio, Qt::SmoothTransformation); pixmap.save(strFileName); // refresh if (!strChannel.isEmpty()) Channel::instance()->getChatView(strChannel)->reloadCacheImage(strFileName); } else { QFile f(strFileName); if (f.open(QIODevice::WriteOnly)) { f.write(bFileContent); f.close(); } } } else { QFile f(strFileName); if (f.open(QIODevice::WriteOnly)) { f.write(bFileContent); f.close(); } } }
void QgsArcGisRestCatalogProvider::parseFolder( const QString& path, const QStringList& catTitles ) { mPendingTasks += 1; QNetworkRequest req( QUrl( mBaseUrl + QString( "/rest/services%1?f=json" ).arg( path ) ) ); QNetworkReply* reply = QgsNetworkAccessManager::instance()->get( req ); reply->setProperty( "path", path ); reply->setProperty( "catTitles", catTitles ); connect( reply, SIGNAL( finished() ), this, SLOT( parseFolderDo() ) ); }
void ChartsPlugin::notInCacheSlot( QHash<QString, QString> criteria, Tomahawk::InfoSystem::InfoRequestData requestData ) { switch ( requestData.type ) { case InfoChart: { tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "InfoChart not in cache! Fetching..."; /// Fetch the chart, we need source and id QUrl url = QUrl( QString( CHART_URL "source/%1/chart/%2" ).arg( criteria["chart_source"] ).arg( criteria["chart_id"] ) ); tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "Getting chart url" << url; QNetworkReply* reply = TomahawkUtils::nam()->get( QNetworkRequest( url ) ); reply->setProperty( "requestData", QVariant::fromValue< Tomahawk::InfoSystem::InfoRequestData >( requestData ) ); connect( reply, SIGNAL( finished() ), SLOT( chartReturned() ) ); return; } case InfoChartCapabilities: { tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "InfoChartCapabilities not in cache! Fetching..."; // we never need to re-fetch if ( !m_allChartsMap.isEmpty() ) return; /// Then get each chart from resource if ( !m_chartResources.isEmpty() && m_allChartsMap.isEmpty() ) { tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "InfoChart fetching possible resources"; foreach ( QString resource, m_chartResources ) { QUrl url = QUrl( QString( CHART_URL "source/%1" ).arg( resource ) ); QNetworkReply* reply = TomahawkUtils::nam()->get( QNetworkRequest( url ) ); reply->setProperty( "chart_resource", resource); tDebug() << "fetching:" << url; connect( reply, SIGNAL( finished() ), SLOT( chartTypes() ) ); m_chartsFetchJobs++; } } if ( m_chartsFetchJobs > 0 ) { tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "InfoChartCapabilities still fetching!"; m_cachedRequests.append( requestData ); return; } emit info( requestData, m_allChartsMap ); return; }
/** * @brief Searches for a movie * @param searchStr The Movie name/search string * @see OFDb::searchFinished */ void OFDb::search(QString searchStr) { qDebug() << "Entered, searchStr=" << searchStr; QString encodedSearch = Helper::toLatin1PercentEncoding(searchStr); QUrl url(QString("http://www.ofdbgw.org/search/%1").arg(encodedSearch).toUtf8()); QNetworkReply *reply = qnam()->get(QNetworkRequest(url)); reply->setProperty("searchString", searchStr); reply->setProperty("notFoundCounter", 0); connect(reply, SIGNAL(finished()), this, SLOT(searchFinished())); }
/** * @brief FanartTv::loadConcertData * @param tmdbId * @param types */ void FanartTv::loadConcertData(QString tmdbId, QList<int> types, Concert *concert) { QUrl url; QNetworkRequest request; request.setRawHeader("Accept", "application/json"); url.setUrl(QString("http://webservice.fanart.tv/v3/movies/%1?%2").arg(tmdbId).arg(keyParameter())); QNetworkReply *reply = qnam()->get(QNetworkRequest(request)); reply->setProperty("infosToLoad", Storage::toVariant(reply, types)); reply->setProperty("storage", Storage::toVariant(reply, concert)); connect(reply, SIGNAL(finished()), this, SLOT(onLoadAllConcertDataFinished())); }
/** * @brief Starts network requests to download infos from VideoBuster * @param id VideoBuster movie ID * @param movie Movie object * @param infos List of infos to load * @see VideoBuster::loadFinished */ void VideoBuster::loadData(QString id, Movie *movie, QList<int> infos) { qDebug() << "Entered, id=" << id << "movie=" << movie->name(); movie->clear(infos); QUrl url(QString("https://www.videobuster.de%1").arg(id)); QNetworkReply *reply = this->qnam()->get(QNetworkRequest(url)); reply->setProperty("storage", Storage::toVariant(reply, movie)); reply->setProperty("infosToLoad", Storage::toVariant(reply, infos)); connect(reply, SIGNAL(finished()), this, SLOT(loadFinished())); }
/** * @brief Starts network requests to download infos from Cinefacts * @param id Cinefacts movie ID * @param movie Movie object * @param infos List of infos to load * @see Cinefacts::loadFinished */ void Cinefacts::loadData(QMap<ScraperInterface*, QString> ids, Movie *movie, QList<int> infos) { movie->clear(infos); QUrl url(QString("http://www.cinefacts.de/Filme/%1").arg(ids.values().first())); QNetworkReply *reply = qnam()->get(QNetworkRequest(url)); reply->setProperty("storage", Storage::toVariant(reply, movie)); reply->setProperty("cinefactsId", ids.values().first()); reply->setProperty("infosToLoad", Storage::toVariant(reply, infos)); connect(reply, SIGNAL(finished()), this, SLOT(loadFinished())); }
/** * @brief Starts network requests to download infos from TheTvDb * @param id TheTvDb show ID * @param episode Episode object * @see TheTvDb::onEpisodeLoadFinished */ void TheTvDb::loadTvShowEpisodeData(QString id, TvShowEpisode *episode, QList<int> infosToLoad) { qDebug() << "Entered, id=" << id << "episode=" << episode->name(); episode->clear(infosToLoad); QString mirror = m_xmlMirrors.at(qrand()%m_xmlMirrors.count()); QUrl url(QString("%1/api/%2/series/%3/all/%4.xml").arg(mirror).arg(m_apiKey).arg(id).arg(m_language)); QNetworkReply *reply = qnam()->get(QNetworkRequest(url)); reply->setProperty("storage", Storage::toVariant(reply, episode)); reply->setProperty("infosToLoad", Storage::toVariant(reply, infosToLoad)); connect(reply, SIGNAL(finished()), this, SLOT(onEpisodeLoadFinished())); }
void MusicBrainzPlugin::notInCacheSlot( InfoStringHash criteria, InfoRequestData requestData ) { QString querySt; switch ( requestData.type ) { case InfoArtistReleases: { querySt.append( QString( "artist:\"%1\"" ).arg(criteria["artist"]) ); querySt.append( " AND (type:album OR type:ep)" ); querySt.append( " AND status:official" ); querySt.append( " AND NOT secondarytype:live" ); querySt.append( " AND NOT secondarytype:compilation" ); // we dont handle more than 100 results atm, but not even the beatles have more than 100 ep+albums, so its probably safe QString requestString( "http://musicbrainz.org/ws/2/release-group" ); QUrl url( requestString ); url.addQueryItem( "query", querySt ); url.addQueryItem( "limit", "100" ); tDebug() << Q_FUNC_INFO << url.toString(); QNetworkReply* reply = TomahawkUtils::nam()->get( QNetworkRequest( url ) ); reply->setProperty( "requestData", QVariant::fromValue< Tomahawk::InfoSystem::InfoRequestData >( requestData ) ); connect( reply, SIGNAL( finished() ), SLOT( gotReleaseGroupsSlot() ) ); break; } case InfoAlbumSongs: { querySt.append( QString( "release:\"%1\"" ).arg(criteria["album"]) ); querySt.append( QString( " AND artist:\"%1\"" ).arg(criteria["artist"]) ); // not pre-filtering will yield more than 100 results which we dont handle atm. But since we only take the first result anyway that wont hurt QString requestString( "http://musicbrainz.org/ws/2/release" ); QUrl url( requestString ); url.addQueryItem( "query", querySt ); url.addQueryItem( "limit", "100" ); tDebug() << Q_FUNC_INFO << url.toString(); QNetworkReply* reply = TomahawkUtils::nam()->get( QNetworkRequest( url ) ); reply->setProperty( "requestData", QVariant::fromValue< Tomahawk::InfoSystem::InfoRequestData >( requestData ) ); connect( reply, SIGNAL( finished() ), SLOT( gotReleasesSlot() ) ); break; } default: { Q_ASSERT( false ); break; } } }
void EchonestPlugin::getArtistTerms( const Tomahawk::InfoSystem::InfoRequestData &requestData ) { if( !isValidArtistData( requestData ) ) return; Echonest::Artist artist( requestData.input.toString() ); QNetworkReply* reply = artist.fetchTerms( Echonest::Artist::Weight ); reply->setProperty( "artist", QVariant::fromValue< Echonest::Artist >( artist ) ); reply->setProperty( "requestData", QVariant::fromValue< Tomahawk::InfoSystem::InfoRequestData >( requestData ) ); connect( reply, SIGNAL( finished() ), SLOT( getArtistTermsSlot() ) ); }
/** * @brief Starts network requests to download infos from OFDb * @param id OFDb movie ID * @param movie Movie object * @param infos List of infos to load * @see OFDb::loadFinished */ void OFDb::loadData(QMap<ScraperInterface*, QString> ids, Movie *movie, QList<int> infos) { movie->clear(infos); QUrl url(QString("http://ofdbgw.org/movie/%1").arg(ids.values().first())); QNetworkReply *reply = qnam()->get(QNetworkRequest(url)); reply->setProperty("storage", Storage::toVariant(reply, movie)); reply->setProperty("ofdbId", ids.values().first()); reply->setProperty("notFoundCounter", 0); reply->setProperty("infosToLoad", Storage::toVariant(reply, infos)); connect(reply, SIGNAL(finished()), this, SLOT(loadFinished())); }
void EchonestPlugin::getArtistFamiliarity( const Tomahawk::InfoSystem::InfoRequestData &requestData ) { if( !isValidArtistData( requestData ) ) return; qDebug() << "Fetching artist familiarity!" << requestData.input; Echonest::Artist artist( requestData.input.toString() ); QNetworkReply* reply = artist.fetchFamiliarity(); reply->setProperty( "artist", QVariant::fromValue< Echonest::Artist >( artist ) ); reply->setProperty( "requestData", QVariant::fromValue< Tomahawk::InfoSystem::InfoRequestData >( requestData ) ); connect( reply, SIGNAL( finished() ), SLOT( getArtistFamiliaritySlot() ) ); }
/** * @brief Starts network requests to download infos from TheTvDb * @param id TheTvDb show ID * @param show Tv show object * @see TheTvDb::onLoadFinished */ void TheTvDb::loadTvShowData(QString id, TvShow *show, TvShowUpdateType updateType, QList<int> infosToLoad) { Q_UNUSED(infosToLoad) show->setTvdbId(id); QString mirror = m_xmlMirrors.at(qrand()%m_xmlMirrors.count()); QUrl url(QString("%1/api/%2/series/%3/all/%4.xml").arg(mirror).arg(m_apiKey).arg(id).arg(m_language)); show->setEpisodeGuideUrl(QString("%1/api/%2/series/%3/all/%4.zip").arg(mirror).arg(m_apiKey).arg(id).arg(m_language)); QNetworkReply *reply = qnam()->get(QNetworkRequest(url)); reply->setProperty("storage", Storage::toVariant(reply, show)); reply->setProperty("updateType", updateType); reply->setProperty("infosToLoad", Storage::toVariant(reply, infosToLoad)); connect(reply, SIGNAL(finished()), this, SLOT(onLoadFinished())); }
void IMDB::loadData(QMap<ScraperInterface*, QString> ids, Movie *movie, QList<int> infos) { movie->clear(infos); movie->setId(ids.values().first()); QUrl url = QUrl(QString("http://www.imdb.com/title/%1/").arg(ids.values().first()).toUtf8()); QNetworkRequest request = QNetworkRequest(url); request.setRawHeader("Accept-Language", "en;q=0.8"); QNetworkReply *reply = qnam()->get(request); reply->setProperty("storage", Storage::toVariant(reply, movie)); reply->setProperty("infosToLoad", Storage::toVariant(reply, infos)); connect(reply, SIGNAL(finished()), this, SLOT(onLoadFinished())); }
void IMDB::loadData(QMap<ScraperInterface*, QString> ids, Movie *movie, QList<int> infos) { movie->clear(infos); movie->setId(ids.values().first()); QUrl url(QString("http://mymovieapi.com/?id=%1&type=json&plot=full&episode=0&lang=en-US").arg(ids.values().first())); QNetworkRequest request(url); request.setRawHeader("Accept", "application/json"); QNetworkReply *reply = qnam()->get(QNetworkRequest(request)); reply->setProperty("storage", Storage::toVariant(reply, movie)); reply->setProperty("infosToLoad", Storage::toVariant(reply, infos)); connect(reply, SIGNAL(finished()), this, SLOT(onLoadFinished())); }
/** * @brief Starts network requests to download infos from OFDb * @param id OFDb movie ID * @param movie Movie object * @param infos List of infos to load * @see OFDb::loadFinished */ void OFDb::loadData(QString id, Movie *movie, QList<int> infos) { qDebug() << "Entered, id=" << id << "movie=" << movie->name(); movie->clear(infos); QUrl url(QString("http://ofdbgw.org/movie/%1").arg(id)); QNetworkReply *reply = qnam()->get(QNetworkRequest(url)); reply->setProperty("storage", Storage::toVariant(reply, movie)); reply->setProperty("ofdbId", id); reply->setProperty("notFoundCounter", 0); reply->setProperty("infosToLoad", Storage::toVariant(reply, infos)); connect(reply, SIGNAL(finished()), this, SLOT(loadFinished())); }
void EchoNestPlugin::getArtistBiography( uint requestId, const Tomahawk::InfoSystem::InfoRequestData &requestData ) { if( !isValidArtistData( requestId, requestData ) ) return; Echonest::Artist artist( requestData.input.toString() ); QNetworkReply *reply = artist.fetchBiographies(); reply->setProperty( "artist", QVariant::fromValue< Echonest::Artist >( artist ) ); reply->setProperty( "requestId", requestId ); reply->setProperty( "requestData", QVariant::fromValue< Tomahawk::InfoSystem::InfoRequestData >( requestData ) ); connect( reply, SIGNAL( finished() ), SLOT( getArtistBiographySlot() ) ); }
void EchoNestPlugin::getArtistBiography(const QString &caller, const QVariant& data, InfoCustomData &customData) { if( !isValidArtistData( caller, data, customData ) ) return; Echonest::Artist artist( data.toString() ); QNetworkReply *reply = artist.fetchBiographies(); reply->setProperty("artist", QVariant::fromValue<Echonest::Artist>(artist)); reply->setProperty( "data", data ); m_replyMap[reply] = customData; m_callerMap[reply] = caller; connect(reply, SIGNAL(finished()), SLOT(getArtistBiographySlot())); }
void UniversalMusicScraper::loadData(QString mbId, Artist *artist, QList<int> infos) { // Otherwise deleted images are showing up again infos.removeOne(MusicScraperInfos::ExtraFanarts); artist->clear(infos); artist->setMbId(mbId); artist->setAllMusicId(""); QUrl url(QString("http://www.musicbrainz.org/ws/2/artist/%1?inc=url-rels").arg(mbId)); QNetworkReply *reply = qnam()->get(QNetworkRequest(url)); reply->setProperty("storage", Storage::toVariant(reply, artist)); reply->setProperty("infosToLoad", Storage::toVariant(reply, infos)); connect(reply, SIGNAL(finished()), this, SLOT(onArtistRelsFinished())); }
void RemoteDatabase::fetch(const QString& url, RequestType type, const QString& clientCert, QVariant userdata) { // Check if network is accessible. If not, abort right here if(m_manager->networkAccessible() == QNetworkAccessManager::NotAccessible) { QMessageBox::warning(nullptr, qApp->applicationName(), tr("Error: The network is not accessible.")); return; } // If this is a request for a database there is a chance that we've already cloned that database. So check for that first if(type == RequestTypeDatabase) { QString exists = localExists(url, clientCert); if(!exists.isEmpty()) { // Database has already been cloned! So open the local file instead of fetching the one from the // server again. emit openFile(exists); return; } } // Build network request QNetworkRequest request; request.setUrl(url); request.setRawHeader("User-Agent", QString("%1 %2").arg(qApp->organizationName()).arg(APP_VERSION).toUtf8()); // Set SSL configuration when trying to access a file via the HTTPS protocol. // Skip this step when no client certificate was specified. In this case the default HTTPS configuration is used. bool https = QUrl(url).scheme().compare("https", Qt::CaseInsensitive) == 0; if(https && !clientCert.isNull()) { // If configuring the SSL connection fails, abort the request here if(!prepareSsl(&request, clientCert)) return; } // Clear access cache if necessary clearAccessCache(clientCert); // Fetch database and prepare pending reply for future processing QNetworkReply* reply = m_manager->get(request); reply->setProperty("type", type); reply->setProperty("certfile", clientCert); reply->setProperty("userdata", userdata); // Initialise the progress dialog for this request, but only if this is a database file. Directory listing are small enough to be loaded // without progress dialog. if(type == RequestTypeDatabase) prepareProgressDialog(reply, false, url); }
void EchoNestPlugin::getArtistTerms(const QString &caller, const QVariant &input, const InfoCustomData &customData) { if( !isValidArtistData( caller, input, customData ) ) return; Echonest::Artist artist( input.toString() ); QNetworkReply* reply = artist.fetchTerms( Echonest::Artist::Weight ); reply->setProperty( "artist", QVariant::fromValue<Echonest::Artist>(artist)); reply->setProperty( "input", input ); m_replyMap[reply] = customData; m_callerMap[reply] = caller; connect(reply, SIGNAL(finished()), SLOT(getArtistTermsSlot())); }