kplayobject.cc00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "kplayobject.h"
00023 #include "kplayobject.moc"
00024 #include "kplayobjectcreator.h"
00025 #include <kdebug.h>
00026
00027 KPlayObject::KPlayObject() : QObject()
00028 {
00029 m_playObject = Arts::PlayObject::null();
00030 m_isStream = false;
00031 }
00032
00033 KPlayObject::KPlayObject(Arts::PlayObject playobject, bool isStream) : QObject()
00034 {
00035 m_playObject = playobject;
00036 m_isStream = isStream;
00037 }
00038
00039 KPlayObject::~KPlayObject()
00040 {
00041 }
00042
00043 void KPlayObject::play()
00044 {
00045 object().play();
00046 }
00047
00048 void KPlayObject::seek(Arts::poTime newTime)
00049 {
00050 if(!m_isStream)
00051 object().seek(newTime);
00052 else
00053 kdDebug( 400 ) << "Seeking in a Stream? huh?" << endl;
00054 }
00055
00056 void KPlayObject::pause()
00057 {
00058 object().pause();
00059 }
00060
00061 void KPlayObject::halt()
00062 {
00063 object().halt();
00064 }
00065
00066 QString KPlayObject::description()
00067 {
00068 return QString::fromLatin1(object().description().c_str());
00069 }
00070
00071 Arts::poTime KPlayObject::currentTime()
00072 {
00073 return object().currentTime();
00074 }
00075
00076 Arts::poTime KPlayObject::overallTime()
00077 {
00078 return object().overallTime();
00079 }
00080
00081 Arts::poCapabilities KPlayObject::capabilities()
00082 {
00083 return object().capabilities();
00084 }
00085
00086 QString KPlayObject::mediaName()
00087 {
00088 return QString::fromLatin1(object().mediaName().c_str());
00089 }
00090
00091 Arts::poState KPlayObject::state()
00092 {
00093 return object().state();
00094 }
00095
00096 Arts::PlayObject KPlayObject::object()
00097 {
00098 return m_playObject;
00099 }
00100
00101 bool KPlayObject::isNull()
00102 {
00103 if( !this )
00104 return true;
00105 return object().isNull();
00106 }
00107
00108 void KPlayObject::setObject(Arts::PlayObject playObject)
00109 {
00110 m_playObject = playObject;
00111 }
00112
00113 bool KPlayObject::stream()
00114 {
00115 return m_isStream;
00116 }
00117
00118 struct KDE::PlayObject::PrivateData
00119 {
00120 PrivateData() : creator( 0 ),
00121 isProxy( false ),
00122 internalState( Arts::posIdle ) {}
00123 ~PrivateData() {
00124 delete creator;
00125 }
00126 Arts::SoundServerV2 server;
00127 KDE::PlayObjectCreator* creator;
00128 bool createBUS;
00129 bool isProxy;
00130 Arts::poState internalState;
00131 KURL url;
00132 };
00133
00134 KDE::PlayObject::PlayObject() : QObject()
00135 {
00136 m_playObject = Arts::PlayObject::null();
00137 m_isStream = false;
00138 d = new PrivateData;
00139 }
00140
00141 KDE::PlayObject::PlayObject(Arts::PlayObject playobject, bool isStream) : QObject()
00142 {
00143 m_playObject = playobject;
00144 m_isStream = isStream;
00145 d = new PrivateData;
00146
00147
00148
00149
00150
00151 }
00152
00153 KDE::PlayObject::PlayObject( Arts::SoundServerV2 server, const KURL& url, bool isStream, bool createBUS ) : QObject()
00154 {
00155 kdDebug( 400 ) << "KDE::PlayObject: created as proxy for URL " << url.url()<< endl;
00156
00157 m_playObject = Arts::PlayObject::null();
00158 m_isStream = isStream;
00159 d = new PrivateData;
00160 d->server = server;
00161 d->url = url;
00162 d->createBUS = createBUS;
00163 d->isProxy = true;
00164 }
00165
00166 KDE::PlayObject::~PlayObject()
00167 {
00168 kdDebug( 400 ) << "KDE::PlayObject: destroyed" << endl;
00169
00170 delete d;
00171 }
00172
00173 void KDE::PlayObject::play()
00174 {
00175 kdDebug( 400 ) << "KDE::PlayObject::play()" << endl;
00176
00177 if ( object().isNull() ) {
00178 if ( m_isStream ) {
00179 if ( d->creator )
00180 delete d->creator;
00181 d->creator = new KDE::PlayObjectCreator( d->server );
00182 d->creator->create( d->url, d->createBUS, this, SLOT( attachPlayObject( Arts::PlayObject ) ) );
00183 kdDebug( 400 ) << "KDE::PlayObject::play(): creator called" << endl;
00184 d->internalState = Arts::posPlaying;
00185 }
00186 return;
00187 }
00188 object().play();
00189 }
00190
00191 void KDE::PlayObject::attachPlayObject( Arts::PlayObject playObject )
00192 {
00193 kdDebug( 400 ) << "KDE::PlayObject::attachPlayObject()" << endl;
00194
00195 m_playObject = playObject;
00196 emit playObjectCreated();
00197 if ( object().isNull() )
00198 return;
00199 switch ( d->internalState ) {
00200 case Arts::posIdle:
00201 object().halt();
00202 break;
00203 case Arts::posPaused:
00204 object().pause();
00205 break;
00206 case Arts::posPlaying:
00207 object().play ();
00208 break;
00209 }
00210 }
00211
00212 void KDE::PlayObject::seek(Arts::poTime newTime)
00213 {
00214 if ( object().isNull() )
00215 return;
00216 if(!m_isStream)
00217 object().seek(newTime);
00218 else
00219 kdDebug( 400 ) << "Seeking in a Stream? huh?" << endl;
00220 }
00221
00222 void KDE::PlayObject::pause()
00223 {
00224 if ( !object().isNull() )
00225 object().pause();
00226 d->internalState = Arts::posPaused;
00227 }
00228
00229 void KDE::PlayObject::halt()
00230 {
00231 kdDebug( 400 ) << "KDE::PlayObject::halt()" << endl;
00232 if ( !object().isNull() )
00233 object().halt();
00234 else if ( d->creator ) {
00235 delete d->creator;
00236 d->creator = 0;
00237 kdDebug( 400 ) << "KDE::PlayObject::halt(): creator destroyed" << endl;
00238 }
00239 d->internalState = Arts::posIdle;
00240 }
00241
00242 QString KDE::PlayObject::description()
00243 {
00244 if ( object().isNull() )
00245 return QString();
00246 return QString::fromLatin1(object().description().c_str());
00247 }
00248
00249 Arts::poTime KDE::PlayObject::currentTime()
00250 {
00251 if ( object().isNull() )
00252 return Arts::poTime( 0, 0, -1, "" );
00253 return object().currentTime();
00254 }
00255
00256 Arts::poTime KDE::PlayObject::overallTime()
00257 {
00258 if ( object().isNull() )
00259 return Arts::poTime( 0, 0, -1, "" );
00260 return object().overallTime();
00261 }
00262
00263 Arts::poCapabilities KDE::PlayObject::capabilities()
00264 {
00265 if ( object().isNull() )
00266 return static_cast<Arts::poCapabilities>( 0 );
00267 return object().capabilities();
00268 }
00269
00270 QString KDE::PlayObject::mediaName()
00271 {
00272 if ( object().isNull() )
00273 return QString();
00274 return QString::fromLatin1(object().mediaName().c_str());
00275 }
00276
00277 Arts::poState KDE::PlayObject::state()
00278 {
00279 if ( object().isNull() )
00280 return d->internalState;
00281 return object().state();
00282 }
00283
00284 Arts::PlayObject KDE::PlayObject::object()
00285 {
00286 return m_playObject;
00287 }
00288
00289 bool KDE::PlayObject::isNull()
00290 {
00291 if ( !this )
00292 return true;
00293 if ( d->isProxy )
00294 return false;
00295 return object().isNull();
00296 }
00297
00298 bool KDE::PlayObject::stream()
00299 {
00300 return m_isStream;
00301 }
00302
00303
|