mirror of
https://github.com/tomahawk-player/tomahawk.git
synced 2025-03-19 15:29:42 +01:00
* New WebResultHintChecker API. Class will be renamed soon.
This commit is contained in:
parent
5fe963fa50
commit
13ab38ae8f
@ -1,6 +1,7 @@
|
||||
/* === This file is part of Tomahawk Player - <http://tomahawk-player.org> ===
|
||||
*
|
||||
* Copyright 2012, Leo Franchi <lfranchi@kde.org>
|
||||
* Copyright 2013, Christian Muehlhaeuser <muesli@tomahawk-player.org>
|
||||
*
|
||||
* Tomahawk is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -25,25 +26,17 @@
|
||||
#include "Query.h"
|
||||
#include "Result.h"
|
||||
#include "Source.h"
|
||||
#include "Pipeline.h"
|
||||
#include "utils/NetworkReply.h"
|
||||
#include "utils/Logger.h"
|
||||
|
||||
using namespace Tomahawk;
|
||||
|
||||
|
||||
WebResultHintChecker::WebResultHintChecker( const query_ptr& q )
|
||||
WebResultHintChecker::WebResultHintChecker( const query_ptr& query, const QList< result_ptr >& results )
|
||||
: QObject( 0 )
|
||||
, m_query( q )
|
||||
, m_query( query )
|
||||
, m_results( results )
|
||||
{
|
||||
Q_ASSERT( !m_query.isNull() );
|
||||
|
||||
m_url = q->resultHint();
|
||||
|
||||
if ( Pipeline::instance()->isResolving( m_query ) )
|
||||
connect( m_query.data(), SIGNAL( resolvingFinished( bool ) ), this, SLOT( onResolvingFinished( bool ) ) );
|
||||
else
|
||||
check( QUrl::fromUserInput( m_url ) );
|
||||
check();
|
||||
}
|
||||
|
||||
|
||||
@ -53,68 +46,19 @@ WebResultHintChecker::~WebResultHintChecker()
|
||||
|
||||
|
||||
void
|
||||
WebResultHintChecker::checkQuery( const query_ptr& query )
|
||||
WebResultHintChecker::check()
|
||||
{
|
||||
if ( !query->resultHint().isEmpty() && query->resultHint().startsWith( "http" ) )
|
||||
new WebResultHintChecker( query );
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
WebResultHintChecker::checkQueries( const QList< query_ptr >& queries )
|
||||
{
|
||||
foreach ( const query_ptr& query, queries )
|
||||
checkQuery( query );
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
WebResultHintChecker::onResolvingFinished( bool hasResults )
|
||||
{
|
||||
Q_UNUSED( hasResults );
|
||||
|
||||
check( QUrl::fromUserInput( m_url ) );
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
WebResultHintChecker::check( const QUrl &url )
|
||||
{
|
||||
// Nothing to do
|
||||
if ( url.isEmpty() || !url.toString().startsWith( "http" ) )
|
||||
foreach ( const result_ptr& result, m_results )
|
||||
{
|
||||
if ( !url.isEmpty() || m_query->saveHTTPResultHint() )
|
||||
removeHint();
|
||||
tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "Checking http url:" << result->url();
|
||||
QUrl url = QUrl::fromUserInput( result->url() );
|
||||
if ( url.isEmpty() || !url.toString().startsWith( "http" ) )
|
||||
continue;
|
||||
|
||||
deleteLater();
|
||||
return;
|
||||
NetworkReply* reply = new NetworkReply( TomahawkUtils::nam()->head( QNetworkRequest( url ) ) );
|
||||
m_replies.insert( reply, result );
|
||||
connect( reply, SIGNAL( finished() ), SLOT( headFinished() ) );
|
||||
}
|
||||
|
||||
NetworkReply* reply = new NetworkReply( TomahawkUtils::nam()->head( QNetworkRequest( url ) ) );
|
||||
connect( reply, SIGNAL( finished() ), SLOT( headFinished() ) );
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
WebResultHintChecker::removeHint()
|
||||
{
|
||||
tLog() << "Removing HTTP result from query since HEAD request failed to verify it was a valid url:" << m_url;
|
||||
|
||||
result_ptr foundResult;
|
||||
foreach ( const result_ptr& result, m_query->results() )
|
||||
{
|
||||
if ( result->url() == m_url )
|
||||
{
|
||||
foundResult = result;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( !foundResult.isNull() )
|
||||
m_query->removeResult( foundResult );
|
||||
if ( m_query->resultHint() == m_url )
|
||||
m_query->setResultHint( QString() );
|
||||
m_query->setSaveHTTPResultHint( false );
|
||||
}
|
||||
|
||||
|
||||
@ -124,12 +68,20 @@ WebResultHintChecker::headFinished()
|
||||
NetworkReply* r = qobject_cast<NetworkReply*>( sender() );
|
||||
r->deleteLater();
|
||||
|
||||
if ( r->reply()->error() != QNetworkReply::NoError )
|
||||
{
|
||||
// Error getting headers for the http resulthint, remove it from the result
|
||||
// as it's definitely not playable
|
||||
removeHint();
|
||||
}
|
||||
if ( !m_replies.contains( r ) )
|
||||
return;
|
||||
|
||||
deleteLater();
|
||||
result_ptr result = m_replies.value( r );
|
||||
m_replies.remove( r );
|
||||
|
||||
if ( r->reply()->error() == QNetworkReply::NoError )
|
||||
{
|
||||
tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "Found valid http url:" << result->url();
|
||||
m_validResults << result;
|
||||
}
|
||||
else
|
||||
tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "Found invalid http url:" << result->url() << r->reply()->error();
|
||||
|
||||
if ( m_replies.isEmpty() )
|
||||
emit done();
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
/* === This file is part of Tomahawk Player - <http://tomahawk-player.org> ===
|
||||
*
|
||||
* Copyright 2012, Leo Franchi <lfranchi@kde.org>
|
||||
* Copyright 2013, Christian Muehlhaeuser <muesli@tomahawk-player.org>
|
||||
*
|
||||
* Tomahawk is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -15,12 +16,15 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Tomahawk. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef WEB_RESULT_HINT_CHECKER_H
|
||||
#define WEB_RESULT_HINT_CHECKER_H
|
||||
|
||||
#include "Typedefs.h"
|
||||
#include "utils/NetworkReply.h"
|
||||
|
||||
#include <QObject>
|
||||
#include <QSet>
|
||||
|
||||
namespace Tomahawk
|
||||
{
|
||||
@ -29,23 +33,25 @@ class WebResultHintChecker : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
WebResultHintChecker( const query_ptr& q );
|
||||
WebResultHintChecker( const query_ptr& query, const QList< result_ptr >& results );
|
||||
virtual ~WebResultHintChecker();
|
||||
|
||||
static void checkQuery( const query_ptr& query );
|
||||
static void checkQueries( const QList< query_ptr >& queries );
|
||||
query_ptr query() const { return m_query; }
|
||||
QList< result_ptr > results() const { return m_results; }
|
||||
QList< result_ptr > validResults() const { return m_validResults; }
|
||||
|
||||
signals:
|
||||
void done();
|
||||
|
||||
private slots:
|
||||
void check();
|
||||
void headFinished();
|
||||
|
||||
void check( const QUrl& url );
|
||||
|
||||
void onResolvingFinished( bool hasResults );
|
||||
private:
|
||||
void removeHint();
|
||||
|
||||
query_ptr m_query;
|
||||
QString m_url;
|
||||
QList< result_ptr > m_results;
|
||||
QList< result_ptr > m_validResults;
|
||||
QHash< NetworkReply*, Tomahawk::result_ptr > m_replies;
|
||||
};
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user