mirror of
https://github.com/tomahawk-player/tomahawk.git
synced 2025-04-20 07:52:30 +02:00
Allow async streamUrl reports for custom IODeviceFactory resolvers.
This commit is contained in:
parent
230fbdcef9
commit
918545eddc
@ -57,6 +57,7 @@
|
||||
|
||||
QtScriptResolverHelper::QtScriptResolverHelper( const QString& scriptPath, QtScriptResolver* parent )
|
||||
: QObject( parent )
|
||||
, m_urlCallbackIsAsync( false )
|
||||
{
|
||||
m_scriptPath = scriptPath;
|
||||
m_resolver = parent;
|
||||
@ -291,8 +292,12 @@ QtScriptResolverHelper::md5( const QByteArray& input )
|
||||
|
||||
|
||||
void
|
||||
QtScriptResolverHelper::addCustomUrlHandler( const QString& protocol, const QString& callbackFuncName )
|
||||
QtScriptResolverHelper::addCustomUrlHandler( const QString& protocol,
|
||||
const QString& callbackFuncName,
|
||||
const QString& async )
|
||||
{
|
||||
m_urlCallbackIsAsync = ( async.toLower() == "true" ) ? true : false;
|
||||
|
||||
boost::function< void( const Tomahawk::result_ptr&,
|
||||
boost::function< void( QSharedPointer< QIODevice >& ) > )> fac =
|
||||
boost::bind( &QtScriptResolverHelper::customIODeviceFactory, this, _1, _2 );
|
||||
@ -320,20 +325,55 @@ void
|
||||
QtScriptResolverHelper::customIODeviceFactory( const Tomahawk::result_ptr& result,
|
||||
boost::function< void( QSharedPointer< QIODevice >& ) > callback )
|
||||
{
|
||||
QString getUrl = QString( "Tomahawk.resolver.instance.%1( '%2' );" ).arg( m_urlCallback )
|
||||
.arg( QString( QUrl( result->url() ).toEncoded() ) );
|
||||
//can be sync or async
|
||||
QString origResultUrl = QString( QUrl( result->url() ).toEncoded() );
|
||||
|
||||
QString urlStr = m_resolver->m_engine->mainFrame()->evaluateJavaScript( getUrl ).toString();
|
||||
|
||||
QSharedPointer< QIODevice > sp;
|
||||
if ( urlStr.isEmpty() )
|
||||
if ( m_urlCallbackIsAsync )
|
||||
{
|
||||
QString qid = uuid();
|
||||
QString getUrl = QString( "Tomahawk.resolver.instance.%1( '%2', '%3' );" ).arg( m_urlCallback )
|
||||
.arg( qid )
|
||||
.arg( origResultUrl );
|
||||
|
||||
m_streamCallbacks.insert( qid, callback );
|
||||
m_resolver->m_engine->mainFrame()->evaluateJavaScript( getUrl );
|
||||
}
|
||||
else
|
||||
{
|
||||
QString getUrl = QString( "Tomahawk.resolver.instance.%1( '%2' );" ).arg( m_urlCallback )
|
||||
.arg( origResultUrl );
|
||||
|
||||
QString urlStr = m_resolver->m_engine->mainFrame()->evaluateJavaScript( getUrl ).toString();
|
||||
|
||||
returnStreamUrl( urlStr, callback );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
QtScriptResolverHelper::reportStreamUrl( const QString& qid,
|
||||
const QString& streamUrl )
|
||||
{
|
||||
if ( !m_streamCallbacks.contains( qid ) )
|
||||
return;
|
||||
|
||||
boost::function< void( QSharedPointer< QIODevice >& ) > callback = m_streamCallbacks.take( qid );
|
||||
|
||||
returnStreamUrl( streamUrl, callback );
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
QtScriptResolverHelper::returnStreamUrl( const QString& streamUrl, boost::function< void( QSharedPointer< QIODevice >& ) > callback )
|
||||
{
|
||||
QSharedPointer< QIODevice > sp;
|
||||
if ( streamUrl.isEmpty() )
|
||||
{
|
||||
callback( sp );
|
||||
return;
|
||||
}
|
||||
|
||||
QUrl url = QUrl::fromEncoded( urlStr.toUtf8() );
|
||||
QUrl url = QUrl::fromEncoded( streamUrl.toUtf8() );
|
||||
QNetworkRequest req( url );
|
||||
tDebug() << "Creating a QNetowrkReply with url:" << req.url().toString();
|
||||
QNetworkReply* reply = TomahawkUtils::nam()->get( req );
|
||||
|
@ -54,7 +54,8 @@ public:
|
||||
Q_INVOKABLE QString hmac( const QByteArray& key, const QByteArray& input );
|
||||
Q_INVOKABLE QString md5( const QByteArray& input );
|
||||
|
||||
Q_INVOKABLE void addCustomUrlHandler( const QString& protocol, const QString& callbackFuncName );
|
||||
Q_INVOKABLE void addCustomUrlHandler( const QString& protocol, const QString& callbackFuncName, const QString& async = "false" );
|
||||
Q_INVOKABLE void reportStreamUrl( const QString& origResultUrl, const QString& streamUrl );
|
||||
|
||||
Q_INVOKABLE QByteArray base64Encode( const QByteArray& input );
|
||||
Q_INVOKABLE QByteArray base64Decode( const QByteArray& input );
|
||||
@ -82,7 +83,10 @@ public slots:
|
||||
void reportCapabilities( const QVariant& capabilities );
|
||||
|
||||
private:
|
||||
void returnStreamUrl( const QString& streamUrl, boost::function< void( QSharedPointer< QIODevice >& ) > callback );
|
||||
QString m_scriptPath, m_urlCallback;
|
||||
QHash< QString, boost::function< void( QSharedPointer< QIODevice >& ) > > m_streamCallbacks;
|
||||
bool m_urlCallbackIsAsync;
|
||||
QVariantMap m_resolverConfig;
|
||||
QtScriptResolver* m_resolver;
|
||||
#ifdef QCA2_FOUND
|
||||
|
Loading…
x
Reference in New Issue
Block a user