kplayobjectfactory.cc
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 "kplayobject.h"
00024 #include "artskde.h"
00025 #include "kplayobjectfactory.h"
00026 #include "kplayobjectfactory_p.h"
00027 #include "kplayobjectcreator.h"
00028 #include "kioinputstream_impl.h"
00029 #include "kartsdispatcher.h"
00030 #include "kartsserver.h"
00031
00032 #include <qfile.h>
00033 #include <kdebug.h>
00034 #include "kaudiomanagerplay.h"
00035 #include <flowsystem.h>
00036
00037 using namespace std;
00038
00039 KPlayObjectFactory::KPlayObjectFactory(Arts::SoundServerV2 server)
00040 {
00041 m_server = server;
00042 m_allowStreaming = true;
00043 m_stream = false;
00044 }
00045
00046 KPlayObjectFactory::KPlayObjectFactory(KArtsServer* server)
00047 {
00048 m_server = server->server();
00049 m_allowStreaming = true;
00050 m_stream = false;
00051 }
00052
00053 KPlayObjectFactory::~KPlayObjectFactory()
00054 {
00055 }
00056
00057 KPlayObject *KPlayObjectFactory::createPlayObject(const KURL& url, bool createBUS)
00058 {
00059 KMimeType::Ptr mimetype = KMimeType::findByURL(url);
00060 return createPlayObject(url, mimetype->name(), createBUS);
00061 }
00062
00063 KPlayObject *KPlayObjectFactory::createPlayObject(const KURL& url, const QString &mimetype, bool createBUS)
00064 {
00065 if(!m_server.isNull())
00066 {
00067 if(mimetype == "application/octet-stream" && m_allowStreaming)
00068 {
00069 Arts::KIOInputStream instream;
00070 instream.openURL(url.url().latin1());
00071
00072 m_stream = true;
00073
00074
00075 return new KPlayObject(m_server.createPlayObjectForStream(instream, string("audio/x-mp3"), createBUS), true);
00076 }
00077 else
00078 return new KPlayObject(m_server.createPlayObjectForURL(string(QFile::encodeName(url.path())), string(mimetype.latin1()), createBUS), false);
00079 }
00080 else
00081 return new KPlayObject();
00082 }
00083
00084
00085
00086
00087
00088 KDE::PlayObjectFactory::PlayObjectFactory(Arts::SoundServerV2 server)
00089 {
00090 d = new PrivateData;
00091 d->server = server;
00092 d->amanPlay = 0;
00093 d->helper = 0;
00094 d->allowStreaming = true;
00095 d->isStream = false;
00096 }
00097
00098 KDE::PlayObjectFactory::PlayObjectFactory(KArtsServer* server)
00099 {
00100 d = new PrivateData;
00101 d->server = server->server();
00102 d->amanPlay = 0;
00103 d->helper = 0;
00104 d->allowStreaming = true;
00105 d->isStream = false;
00106 }
00107
00108 KDE::PlayObjectFactory::~PlayObjectFactory()
00109 {
00110 delete d->helper;
00111 delete d;
00112 }
00113
00114 void KDE::PlayObjectFactory::setAudioManagerPlay( KAudioManagerPlay * amanPlay )
00115 {
00116 d->amanPlay = amanPlay;
00117 if( ! d->helper )
00118 d->helper = new POFHelper;
00119 }
00120
00121 KDE::PlayObject *KDE::PlayObjectFactory::createPlayObject(const KURL& url, bool createBUS)
00122 {
00123 KMimeType::Ptr mimetype = KMimeType::findByURL(url);
00124 return createPlayObject(url, mimetype->name(), createBUS);
00125 }
00126
00127 KDE::PlayObject *KDE::PlayObjectFactory::createPlayObject(const KURL& url, const QString &mimetype, bool createBUS)
00128 {
00129
00130 if ( d->server.isNull() || url.isEmpty() )
00131 return new KDE::PlayObject();
00132
00133
00134
00135 if( d->amanPlay && createBUS )
00136 {
00137 kdWarning( 400 ) << "KDE::PlayObjectFactory was instructed to use a Synth_AMAN_PLAY for output but the program also asked for a Synth_BUS_UPLINK" << endl;
00138 createBUS = false;
00139 }
00140
00141
00142 if ( url.isLocalFile() || !d->allowStreaming || (url.protocol() == "audiocd" && mimetype == "application/x-cda" && mimeTypes().contains( "application/x-cda" ) ) )
00143 {
00144
00145 d->playObj = new KDE::PlayObject( d->server.createPlayObjectForURL( string( QFile::encodeName( url.path() ) ), string( mimetype.latin1() ), createBUS ), false );
00146 }
00147 else
00148 {
00149
00150
00151 d->playObj = new KDE::PlayObject( d->server, url, true, createBUS );
00152 }
00153
00154 if( d->playObj->isNull() )
00155 {
00156 delete d->playObj;
00157 d->playObj = 0;
00158 return new KDE::PlayObject();
00159 }
00160
00161 if( d->amanPlay )
00162 {
00163 d->helper->po = d->playObj;
00164 d->helper->ap = d->amanPlay;
00165 if( d->playObj->object().isNull() && d->amanPlay )
00166 QObject::connect( d->playObj, SIGNAL( playObjectCreated() ), d->helper, SLOT( connectAmanPlay() ) );
00167 else
00168 d->helper->connectAmanPlay();
00169 }
00170
00171 return d->playObj;
00172 }
00173
00174 QStringList KDE::PlayObjectFactory::mimeTypes(void)
00175 {
00176 KArtsDispatcher dispatcher;
00177 Arts::TraderQuery query;
00178 vector<Arts::TraderOffer> *offers = query.query();
00179
00180 QStringList results;
00181 for(vector<Arts::TraderOffer>::iterator offer = offers->begin();
00182 offer != offers->end(); ++offer)
00183 {
00184 vector<string> *mimetypes = (*offer).getProperty("MimeType");
00185
00186 for(vector<string>::iterator mimetype = mimetypes->begin();
00187 mimetype != mimetypes->end(); ++mimetype)
00188 {
00189 QString name = QString::fromLocal8Bit((*mimetype).c_str()).stripWhiteSpace();
00190 if(KMimeType::mimeType(name))
00191 results.append(name);
00192 }
00193
00194 delete mimetypes;
00195 }
00196 delete offers;
00197
00198
00199 results.sort();
00200 for(QStringList::iterator result = results.begin(); result != results.end(); )
00201 {
00202 QStringList::iterator previous = result;
00203 ++result;
00204 if(result != results.end() && *result == *previous)
00205 {
00206 results.remove(result);
00207 result = previous;
00208 }
00209 }
00210
00211 return results;
00212 }
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228 void KDE::POFHelper::connectAmanPlay()
00229 {
00230 kdDebug( 400 ) << k_funcinfo << endl;
00231 if( po->object().isNull() )
00232 return;
00233
00234 ap->start();
00235 po->object()._node()->start();
00236 Arts::connect( po->object(), "left" , ap->amanPlay(), "left" );
00237 Arts::connect( po->object(), "right", ap->amanPlay(), "right" );
00238 }
00239
00240 #include "kplayobjectfactory_p.moc"
00241
00242
This file is part of the documentation for arts Library Version 3.3.0.