contentfetcher.cpp
来自「Amarok是一款在LINUX或其他类UNIX操作系统中运行的音频播放器软件。 」· C++ 代码 · 共 98 行
CPP
98 行
/*************************************************************************** * copyright : (C) 2006 Ian Monroe <ian@monroe.nu> * **************************************************************************//*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/#include "contentfetcher.h"#include "debug.h"#include "hasher.h"#include <qbuffer.h>#include <qsocket.h>#include <qdatastream.h>#include <qhttp.h>#include <kfilterdev.h>#include <kmdcodec.h>using namespace Daap;int ContentFetcher::s_requestId = 10;ContentFetcher::ContentFetcher( const QString & hostname, Q_UINT16 port, const QString& password, QObject * parent, const char * name ) : QHttp(hostname, port, parent, name) , m_hostname( hostname ) , m_port( port ) , m_selfDestruct( false ){ connect( this, SIGNAL( stateChanged( int ) ), this , SLOT( checkForErrors( int ) ) ); QCString pass = password.utf8(); if( !password.isNull() ) { m_authorize = "Basic " + KCodecs::base64Encode( "none:" + pass ); }}ContentFetcher::~ContentFetcher(){ }QDataStream&ContentFetcher::results(){ QBuffer* bytes = new QBuffer( readAll() ); QIODevice* stream = KFilterDev::device( bytes, "application/x-gzip", false ); stream->open( IO_ReadOnly ); QDataStream* ds = new QDataStream( stream ); return *ds;}voidContentFetcher::getDaap( const QString & command, QIODevice* musicFile /*= 0*/ ){ QHttpRequestHeader header( "GET", command ); char hash[33] = {0}; GenerateHash(3, reinterpret_cast<const unsigned char*>(command.ascii()), 2, reinterpret_cast<unsigned char*>(hash), 0 /*s_requestId*/); if( !m_authorize.isEmpty() ) { header.setValue( "Authorization", m_authorize ); } header.setValue( "Host", m_hostname + QString::number( m_port ) ); header.setValue( "Client-DAAP-Request-ID", "0"/*QString::number( s_requestId )*/ ); header.setValue( "Client-DAAP-Access-Index", "2" ); header.setValue( "Client-DAAP-Validation", hash ); header.setValue( "Client-DAAP-Version", "3.0" ); header.setValue( "User-Agent", "iTunes/4.6 (Windows; N)" ); header.setValue( "Accept", "*/*" ); header.setValue( "Accept-Encoding", "gzip" ); request( header, 0, musicFile );}/** * QHttp enjoys forgetting to emit a requestFinished when there's an error * This gets around that. */voidContentFetcher::checkForErrors( int /*state*/ ){ if( !m_selfDestruct && error() != 0 ) { debug() << "there is an error? " << error() << " " << errorString() << endl; m_selfDestruct = true; emit httpError( errorString() ); }}#include "contentfetcher.moc"
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?