00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
#include <kio/kmimetype.h>
00023
#include "artskde.h"
00024
#include "kplayobjectcreator.h"
00025
#include "kplayobjectcreator.moc"
00026
#include "kioinputstream_impl.h"
00027
00028
#include <qfile.h>
00029
00030
#include <kdebug.h>
00031
00032 KDE::PlayObjectCreator::PlayObjectCreator(Arts::SoundServerV2 server)
00033 {
00034 m_server = server;
00035 }
00036
00037 KDE::PlayObjectCreator::~PlayObjectCreator()
00038 {
00039 }
00040
00041
bool KDE::PlayObjectCreator::create(
const KURL& url,
bool createBUS,
const QObject* receiver,
const char* slot)
00042 {
00043
00044
if (m_server.isNull() || url.
isEmpty() )
00045
return false;
00046
00047
connect(
this, SIGNAL(
playObjectCreated( Arts::PlayObject ) ),
00048 receiver, slot );
00049
00050
00051
if (!url.
isLocalFile())
00052 {
00053 m_createBUS = createBUS;
00054
00055
00056 Arts::KIOInputStream_impl* instream_impl =
new Arts::KIOInputStream_impl();
00057 m_instream = Arts::KIOInputStream::_from_base(instream_impl);
00058
00059
00060
connect(instream_impl, SIGNAL(mimeTypeFound(
const QString &)),
00061
this, SLOT(slotMimeType(
const QString &)));
00062
00063
00064 m_instream.openURL(url.
url().
latin1());
00065 m_instream.streamStart();
00066
00067
return true;
00068 }
00069
kdDebug( 400 ) <<
"stream is local file: " << url.
url() <<
endl;
00070
00071
00072
KMimeType::Ptr mimetype =
KMimeType::findByURL(url);
00073 emit
playObjectCreated (
00074 m_server.createPlayObjectForURL(std::string(QFile::encodeName(url.
path())),
00075 std::string(
mimetype->name().latin1()),
00076 createBUS)
00077 );
00078
return true;
00079 }
00080
00081
void KDE::PlayObjectCreator::slotMimeType(
const QString& mimetype)
00082 {
00083
00084
kdDebug( 400 ) <<
"slotMimeType called: " <<
mimetype <<
endl;
00085
00086
QString mimetype_copy =
mimetype;
00087
00088
if ( mimetype_copy ==
"application/octet-stream" )
00089 mimetype_copy =
QString(
"audio/x-mp3");
00090
00091
if (mimetype_copy ==
"application/x-zerosize")
00092 emit
playObjectCreated(Arts::PlayObject::null());
00093
00094 playObject = m_server.createPlayObjectForStream(
00095 m_instream,
00096 std::string( mimetype_copy.
latin1() ),
00097 m_createBUS );
00098
if ( playObject.isNull() ) {
00099 m_instream.streamEnd();
00100 emit
playObjectCreated( Arts::PlayObject::null() );
00101
return;
00102 }
00103 emit
playObjectCreated( playObject );
00104 }