You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
670 lines
21 KiB
670 lines
21 KiB
13 years ago
|
Index: arts/knotify/knotify.cpp
|
||
|
===================================================================
|
||
|
--- arts/knotify/knotify.cpp.orig
|
||
|
+++ arts/knotify/knotify.cpp
|
||
|
@@ -5,6 +5,7 @@
|
||
|
2000 Matthias Ettrich (ettrich@kde.org)
|
||
|
2000 Waldo Bastian <bastian@kde.org>
|
||
|
2000-2003 Carsten Pfeiffer <pfeiffer@kde.org>
|
||
|
+ 2004 Allan Sandfeld Jensen <kde@carewolf.com>
|
||
|
|
||
|
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
|
||
|
@@ -26,21 +27,12 @@
|
||
|
#include <sys/types.h>
|
||
|
#include <sys/stat.h>
|
||
|
|
||
|
-#include <config.h>
|
||
|
-#ifndef WITHOUT_ARTS
|
||
|
-// aRts headers
|
||
|
-#include <connect.h>
|
||
|
-#include <dispatcher.h>
|
||
|
-#include <flowsystem.h>
|
||
|
-#include <qiomanager.h>
|
||
|
-#include <soundserver.h>
|
||
|
-#endif
|
||
|
-
|
||
|
// QT headers
|
||
|
#include <qfile.h>
|
||
|
#include <qfileinfo.h>
|
||
|
#include <qstringlist.h>
|
||
|
#include <qtextstream.h>
|
||
|
+#include <qtimer.h>
|
||
|
|
||
|
// KDE headers
|
||
|
#include <dcopclient.h>
|
||
|
@@ -80,15 +72,11 @@ public:
|
||
|
QString externalPlayer;
|
||
|
KProcess *externalPlayerProc;
|
||
|
|
||
|
-#ifndef WITHOUT_ARTS
|
||
|
- QPtrList<KDE::PlayObject> playObjects;
|
||
|
- QMap<KDE::PlayObject*,int> playObjectEventMap;
|
||
|
- KAudioManagerPlay *audioManager;
|
||
|
-#endif
|
||
|
+ QMap<KDE::Multimedia::SimplePlayer*,int> playObjectEventMap;
|
||
|
int externalPlayerEventId;
|
||
|
|
||
|
bool useExternal;
|
||
|
- bool useArts;
|
||
|
+ bool useKDEMM;
|
||
|
int volume;
|
||
|
QTimer *playTimer;
|
||
|
bool inStartup;
|
||
|
@@ -106,12 +94,13 @@ extern "C"{
|
||
|
KDE_EXPORT int kdemain(int argc, char **argv)
|
||
|
{
|
||
|
KAboutData aboutdata("knotify", I18N_NOOP("KNotify"),
|
||
|
- "3.0", I18N_NOOP("KDE Notification Server"),
|
||
|
+ "4.0", I18N_NOOP("KDE Notification Server"),
|
||
|
KAboutData::License_GPL, "(C) 1997-2003, KDE Developers");
|
||
|
aboutdata.addAuthor("Carsten Pfeiffer",I18N_NOOP("Current Maintainer"),"pfeiffer@kde.org");
|
||
|
aboutdata.addAuthor("Christian Esken",0,"esken@kde.org");
|
||
|
aboutdata.addAuthor("Stefan Westerfeld",I18N_NOOP("Sound support"),"stefan@space.twc.de");
|
||
|
aboutdata.addAuthor("Charles Samuels",I18N_NOOP("Previous Maintainer"),"charles@kde.org");
|
||
|
+ aboutdata.addAuthor("Allan Sandfeld Jensen",I18N_NOOP("Conversion to KDEMM"),"kde@carewolf.com");
|
||
|
|
||
|
KCmdLineArgs::init( argc, argv, &aboutdata );
|
||
|
KUniqueApplication::addCmdLineOptions();
|
||
|
@@ -126,145 +115,36 @@ KDE_EXPORT int kdemain(int argc, char **
|
||
|
KUniqueApplication app;
|
||
|
app.disableSessionManagement();
|
||
|
|
||
|
- // KNotify is started on KDE startup and on demand (using
|
||
|
- // KNotifClient::startDaemon()) whenever a KNotify event occurs. Especially
|
||
|
- // KWin may fire many events (e.g. when a window pops up). When we have
|
||
|
- // problems with aRts or the installation, we might get an infinite loop
|
||
|
- // of knotify crashing, popping up the crashhandler window and kwin firing
|
||
|
- // another event, starting knotify again...
|
||
|
- // We try to prevent this by tracking our startup and offer options to
|
||
|
- // abort this.
|
||
|
-
|
||
|
-#ifndef WITHOUT_ARTS
|
||
|
- KConfigGroup config( KGlobal::config(), "StartProgress" );
|
||
|
- KConfig artsKCMConfig( "kcmartsrc" );
|
||
|
- artsKCMConfig.setGroup( "Arts" );
|
||
|
- bool useArts = artsKCMConfig.readBoolEntry( "StartServer", true );
|
||
|
- if (useArts)
|
||
|
- useArts = config.readBoolEntry( "Use Arts", useArts );
|
||
|
- bool ok = config.readBoolEntry( "Arts Init", true );
|
||
|
-
|
||
|
- if ( useArts && !ok )
|
||
|
- {
|
||
|
- if ( KMessageBox::questionYesNo(
|
||
|
- 0L,
|
||
|
- i18n("During the previous startup, KNotify crashed while creating "
|
||
|
- "Arts::Dispatcher. Do you want to try again or disable "
|
||
|
- "aRts sound output?\n\n"
|
||
|
- "If you choose to disable aRts output now, you can re-enable "
|
||
|
- "it later or select an alternate sound player "
|
||
|
- "in the System Notifications control panel."),
|
||
|
- i18n("KNotify Problem"),
|
||
|
- i18n("&Try Again"),
|
||
|
- i18n("D&isable aRts Output"),
|
||
|
- "KNotifyStartProgress",
|
||
|
- 0 /* don't call KNotify :) */
|
||
|
- )
|
||
|
- == KMessageBox::No )
|
||
|
- {
|
||
|
- useArts = false;
|
||
|
- }
|
||
|
- }
|
||
|
-
|
||
|
- // when ArtsDispatcher crashes, we know it the next start.
|
||
|
- config.writeEntry( "Arts Init", false );
|
||
|
- config.writeEntry( "Use Arts", useArts );
|
||
|
- config.sync();
|
||
|
-
|
||
|
- KArtsDispatcher *dispatcher = 0;
|
||
|
- if ( useArts )
|
||
|
- {
|
||
|
- dispatcher = new KArtsDispatcher;
|
||
|
- soundServer = new KArtsServer;
|
||
|
- }
|
||
|
-
|
||
|
- // ok, seemed to work.
|
||
|
- config.writeEntry("Arts Init", useArts );
|
||
|
- config.sync();
|
||
|
-
|
||
|
- ok = config.readBoolEntry( "KNotify Init", true );
|
||
|
- if ( useArts && !ok )
|
||
|
- {
|
||
|
- if ( KMessageBox::questionYesNo(
|
||
|
- 0L,
|
||
|
- i18n("During the previous startup, KNotify crashed while instantiating "
|
||
|
- "KNotify. Do you want to try again or disable "
|
||
|
- "aRts sound output?\n\n"
|
||
|
- "If you choose to disable aRts output now, you can re-enable "
|
||
|
- "it later or select an alternate sound player "
|
||
|
- "in the System Notifications control panel."),
|
||
|
- i18n("KNotify Problem"),
|
||
|
- i18n("&Try Again"),
|
||
|
- i18n("D&isable aRts Output"),
|
||
|
- "KNotifyStartProgress",
|
||
|
- 0 /* don't call KNotify :) */
|
||
|
- )
|
||
|
- == KMessageBox::No )
|
||
|
- {
|
||
|
- useArts = false;
|
||
|
- delete soundServer;
|
||
|
- soundServer = 0L;
|
||
|
- delete dispatcher;
|
||
|
- dispatcher = 0L;
|
||
|
- }
|
||
|
- }
|
||
|
-
|
||
|
- // when KNotify instantiation crashes, we know it the next start.
|
||
|
- config.writeEntry( "KNotify Init", false );
|
||
|
- config.writeEntry( "Use Arts", useArts );
|
||
|
- config.sync();
|
||
|
-
|
||
|
// start notify service
|
||
|
- KNotify *notify = new KNotify( useArts );
|
||
|
-
|
||
|
- config.writeEntry( "KNotify Init", true );
|
||
|
- config.sync();
|
||
|
-
|
||
|
-#else
|
||
|
-
|
||
|
- // start notify service, without aRts
|
||
|
- KNotify *notify = new KNotify( false );
|
||
|
-
|
||
|
-#endif
|
||
|
+ KNotify notify( true );
|
||
|
|
||
|
app.dcopClient()->setDefaultObject( "Notify" );
|
||
|
app.dcopClient()->setDaemonMode( true );
|
||
|
// kdDebug() << "knotify starting" << endl;
|
||
|
|
||
|
int ret = app.exec();
|
||
|
- delete notify;
|
||
|
-#ifndef WITHOUT_ARTS
|
||
|
- delete soundServer;
|
||
|
- delete dispatcher;
|
||
|
-#endif
|
||
|
return ret;
|
||
|
}
|
||
|
}// end extern "C"
|
||
|
|
||
|
-KNotify::KNotify( bool useArts )
|
||
|
+KNotify::KNotify( bool useKDEMM )
|
||
|
: QObject(), DCOPObject("Notify")
|
||
|
{
|
||
|
d = new KNotifyPrivate;
|
||
|
d->globalEvents = new KConfig("knotify/eventsrc", true, false, "data");
|
||
|
d->globalConfig = new KConfig("knotify.eventsrc", true, false);
|
||
|
d->externalPlayerProc = 0;
|
||
|
- d->useArts = useArts;
|
||
|
- d->inStartup = true;
|
||
|
-#ifndef WITHOUT_ARTS
|
||
|
- d->playObjects.setAutoDelete(true);
|
||
|
- d->audioManager = 0;
|
||
|
- if( useArts )
|
||
|
- {
|
||
|
- connect( soundServer, SIGNAL( restartedServer() ), this, SLOT( restartedArtsd() ) );
|
||
|
- restartedArtsd(); //started allready need to initialize d->audioManager
|
||
|
- }
|
||
|
-#endif
|
||
|
+ d->useKDEMM = useKDEMM;
|
||
|
|
||
|
- d->volume = 100;
|
||
|
+ d->inStartup = 0;
|
||
|
+ d->volume = 100;
|
||
|
|
||
|
d->playTimer = 0;
|
||
|
|
||
|
loadConfig();
|
||
|
+
|
||
|
+ connect ( this, SIGNAL(deletePlayObject(KDE::Multimedia::SimplePlayer*)),
|
||
|
+ SLOT(objectDeleter(KDE::Multimedia::SimplePlayer*)) );
|
||
|
}
|
||
|
|
||
|
KNotify::~KNotify()
|
||
|
@@ -272,12 +152,9 @@ KNotify::~KNotify()
|
||
|
reconfigure();
|
||
|
|
||
|
#ifndef WITHOUT_ARTS
|
||
|
- d->playObjects.clear();
|
||
|
-
|
||
|
delete d->globalEvents;
|
||
|
delete d->globalConfig;
|
||
|
delete d->externalPlayerProc;
|
||
|
- delete d->audioManager;
|
||
|
#endif
|
||
|
delete d;
|
||
|
}
|
||
|
@@ -293,7 +170,7 @@ void KNotify::loadConfig() {
|
||
|
// try to locate a suitable player if none is configured
|
||
|
if ( d->externalPlayer.isEmpty() ) {
|
||
|
QStringList players;
|
||
|
- players << "wavplay" << "aplay" << "auplay";
|
||
|
+ players << "wavplay" << "aplay" << "auplay" << "artsplay" << "akodeplay";
|
||
|
QStringList::Iterator it = players.begin();
|
||
|
while ( d->externalPlayer.isEmpty() && it != players.end() ) {
|
||
|
d->externalPlayer = KStandardDirs::findExe( *it );
|
||
|
@@ -456,9 +333,9 @@ bool KNotify::notifyBySound( const QStri
|
||
|
if ( soundFile.isEmpty() )
|
||
|
soundFile = locate( "sound", sound );
|
||
|
}
|
||
|
- if ( soundFile.isEmpty() || isPlaying( soundFile ) )
|
||
|
+ if ( soundFile.isEmpty() )
|
||
|
{
|
||
|
- soundFinished( eventId, soundFile.isEmpty() ? NoSoundFile : FileAlreadyPlaying );
|
||
|
+ soundFinished( eventId, NoSoundFile );
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
@@ -466,64 +343,18 @@ bool KNotify::notifyBySound( const QStri
|
||
|
// kdDebug() << "KNotify::notifyBySound - trying to play file " << soundFile << endl;
|
||
|
|
||
|
if (!external) {
|
||
|
- //If we disabled using aRts, just return,
|
||
|
- //(If we don't, we'll blow up accessing the null soundServer)
|
||
|
- if (!d->useArts)
|
||
|
+ //If we disabled audio, just return,
|
||
|
+ if (!d->useKDEMM)
|
||
|
{
|
||
|
soundFinished( eventId, NoSoundSupport );
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
-#ifndef WITHOUT_ARTS
|
||
|
- // play sound finally
|
||
|
- while( d->playObjects.count()>5 )
|
||
|
- abortFirstPlayObject();
|
||
|
-
|
||
|
- KDE::PlayObjectFactory factory(soundServer->server());
|
||
|
- if( d->audioManager )
|
||
|
- factory.setAudioManagerPlay( d->audioManager );
|
||
|
KURL soundURL;
|
||
|
soundURL.setPath(soundFile);
|
||
|
- KDE::PlayObject *playObject = factory.createPlayObject(soundURL, false);
|
||
|
-
|
||
|
- if (playObject->isNull())
|
||
|
- {
|
||
|
- soundFinished( eventId, NoSoundSupport );
|
||
|
- delete playObject;
|
||
|
- return false;
|
||
|
- }
|
||
|
-
|
||
|
- if ( d->volume != 100 )
|
||
|
- {
|
||
|
- // It works to access the playObject immediately because we don't allow
|
||
|
- // non-file URLs for sounds.
|
||
|
- Arts::StereoVolumeControl volumeControl = Arts::DynamicCast(soundServer->server().createObject("Arts::StereoVolumeControl"));
|
||
|
- Arts::PlayObject player = playObject->object();
|
||
|
- Arts::Synth_AMAN_PLAY ap = d->audioManager->amanPlay();
|
||
|
- if( ! volumeControl.isNull() && ! player.isNull() && ! ap.isNull() )
|
||
|
- {
|
||
|
- volumeControl.scaleFactor( d->volume/100.0 );
|
||
|
-
|
||
|
- ap.stop();
|
||
|
- Arts::disconnect( player, "left", ap, "left" );
|
||
|
- Arts::disconnect( player, "right", ap, "right" );
|
||
|
-
|
||
|
- ap.start();
|
||
|
- volumeControl.start();
|
||
|
-
|
||
|
- Arts::connect(player,"left",volumeControl,"inleft");
|
||
|
- Arts::connect(player,"right",volumeControl,"inright");
|
||
|
-
|
||
|
- Arts::connect(volumeControl,"outleft",ap,"left");
|
||
|
- Arts::connect(volumeControl,"outright",ap,"right");
|
||
|
-
|
||
|
- player._addChild( volumeControl, "volume" );
|
||
|
- }
|
||
|
- }
|
||
|
-
|
||
|
- playObject->play();
|
||
|
- d->playObjects.append( playObject );
|
||
|
+ KDE::Multimedia::SimplePlayer* playObject = new KDE::Multimedia::SimplePlayer( this );
|
||
|
d->playObjectEventMap.insert( playObject, eventId );
|
||
|
+ playObject->play( soundURL );
|
||
|
|
||
|
if ( !d->playTimer )
|
||
|
{
|
||
|
@@ -532,8 +363,7 @@ bool KNotify::notifyBySound( const QStri
|
||
|
}
|
||
|
if ( !d->playTimer->isActive() )
|
||
|
d->playTimer->start( 1000 );
|
||
|
-#endif
|
||
|
- return true;
|
||
|
+ return playObject->isPlaying();
|
||
|
|
||
|
} else if(!d->externalPlayer.isEmpty()) {
|
||
|
// use an external player to play the sound
|
||
|
@@ -686,58 +516,39 @@ void KNotify::setVolume( int volume )
|
||
|
d->volume = volume;
|
||
|
}
|
||
|
|
||
|
+void KNotify::slotPlayerProcessExited( KProcess *proc )
|
||
|
+{
|
||
|
+ soundFinished( d->externalPlayerEventId,
|
||
|
+ (proc->normalExit() && proc->exitStatus() == 0) ? PlayedOK : Unknown );
|
||
|
+}
|
||
|
+
|
||
|
+
|
||
|
void KNotify::playTimeout()
|
||
|
{
|
||
|
-#ifndef WITHOUT_ARTS
|
||
|
- for ( QPtrListIterator< KDE::PlayObject > it(d->playObjects); *it;)
|
||
|
+qDebug("KNotify::playTimeout");
|
||
|
+ for( QMap< KDE::Multimedia::SimplePlayer*, int >::Iterator it = d->playObjectEventMap.begin();
|
||
|
+ it != d->playObjectEventMap.end();
|
||
|
+ )
|
||
|
{
|
||
|
- QPtrListIterator< KDE::PlayObject > current = it;
|
||
|
+ QMap< KDE::Multimedia::SimplePlayer*, int >::Iterator current = it;
|
||
|
++it;
|
||
|
- if ( (*current)->state() != Arts::posPlaying )
|
||
|
+ KDE::Multimedia::SimplePlayer* playObject = current.key();
|
||
|
+ if ( !playObject->isPlaying() || playObject->totalTime() <= 0 ) // may be "playing" even if there's an error
|
||
|
{
|
||
|
- QMap<KDE::PlayObject*,int>::Iterator eit = d->playObjectEventMap.find( *current );
|
||
|
- if ( eit != d->playObjectEventMap.end() )
|
||
|
- {
|
||
|
- soundFinished( *eit, PlayedOK );
|
||
|
- d->playObjectEventMap.remove( eit );
|
||
|
- }
|
||
|
- d->playObjects.remove( current );
|
||
|
+ soundFinished( *current, PlayedOK );
|
||
|
+ d->playObjectEventMap.remove( current );
|
||
|
+ disconnect( playObject, SIGNAL( finished() ) );
|
||
|
+ playObject->stop();
|
||
|
+ emit deletePlayObject(playObject);
|
||
|
}
|
||
|
}
|
||
|
- if ( !d->playObjects.count() )
|
||
|
+ if ( !d->playObjectEventMap.count() )
|
||
|
d->playTimer->stop();
|
||
|
-#endif
|
||
|
}
|
||
|
|
||
|
-bool KNotify::isPlaying( const QString& soundFile ) const
|
||
|
+void KNotify::objectDeleter( KDE::Multimedia::SimplePlayer *playObject )
|
||
|
{
|
||
|
-#ifndef WITHOUT_ARTS
|
||
|
- for ( QPtrListIterator< KDE::PlayObject > it(d->playObjects); *it; ++it)
|
||
|
- {
|
||
|
- if ( (*it)->mediaName() == soundFile )
|
||
|
- return true;
|
||
|
- }
|
||
|
-#endif
|
||
|
- return false;
|
||
|
-}
|
||
|
-
|
||
|
-void KNotify::slotPlayerProcessExited( KProcess *proc )
|
||
|
-{
|
||
|
- soundFinished( d->externalPlayerEventId,
|
||
|
- (proc->normalExit() && proc->exitStatus() == 0) ? PlayedOK : Unknown );
|
||
|
-}
|
||
|
-
|
||
|
-void KNotify::abortFirstPlayObject()
|
||
|
-{
|
||
|
-#ifndef WITHOUT_ARTS
|
||
|
- QMap<KDE::PlayObject*,int>::Iterator it = d->playObjectEventMap.find( d->playObjects.getFirst() );
|
||
|
- if ( it != d->playObjectEventMap.end() )
|
||
|
- {
|
||
|
- soundFinished( it.data(), Aborted );
|
||
|
- d->playObjectEventMap.remove( it );
|
||
|
- }
|
||
|
- d->playObjects.removeFirst();
|
||
|
-#endif
|
||
|
+ delete playObject;
|
||
|
}
|
||
|
|
||
|
void KNotify::soundFinished( int eventId, PlayingFinishedStatus reason )
|
||
|
@@ -780,16 +591,6 @@ WId KNotify::checkWinId( const QString &
|
||
|
return senderWinId;
|
||
|
}
|
||
|
|
||
|
-void KNotify::restartedArtsd()
|
||
|
-{
|
||
|
-#ifndef WITHOUT_ARTS
|
||
|
- delete d->audioManager;
|
||
|
- d->audioManager = new KAudioManagerPlay( soundServer );
|
||
|
- d->audioManager->setTitle( i18n( "KDE System Notifications" ) );
|
||
|
- d->audioManager->setAutoRestoreID( "KNotify Aman Play" );
|
||
|
-#endif
|
||
|
-}
|
||
|
-
|
||
|
void KNotify::sessionReady()
|
||
|
{
|
||
|
if( d->inStartup && !d->startupEvents.isEmpty())
|
||
|
Index: arts/knotify/knotify.h
|
||
|
===================================================================
|
||
|
--- arts/knotify/knotify.h.orig
|
||
|
+++ arts/knotify/knotify.h
|
||
|
@@ -24,9 +24,10 @@
|
||
|
#include <knotifyclient.h>
|
||
|
#include <dcopobject.h>
|
||
|
|
||
|
+#include <kdemm/simpleplayer.h>
|
||
|
+
|
||
|
class KNotifyPrivate;
|
||
|
class KProcess;
|
||
|
-class KConfig;
|
||
|
|
||
|
class KNotify : public QObject, public DCOPObject
|
||
|
{
|
||
|
@@ -76,19 +77,16 @@ private:
|
||
|
bool notifyByStderr(const QString &text);
|
||
|
bool notifyByPassivePopup(const QString &text, const QString &appName,
|
||
|
KConfig* eventsFile, WId winId );
|
||
|
- bool notifyByExecute(const QString &command,
|
||
|
- const QString& event,
|
||
|
- const QString& fromApp,
|
||
|
+ bool notifyByExecute(const QString &command,
|
||
|
+ const QString& event,
|
||
|
+ const QString& fromApp,
|
||
|
const QString& text,
|
||
|
int winId,
|
||
|
int eventId );
|
||
|
- bool notifyByTaskbar( WId winId );
|
||
|
-
|
||
|
- bool isPlaying( const QString& soundFile ) const;
|
||
|
-
|
||
|
- void soundFinished( int eventId, PlayingFinishedStatus reason );
|
||
|
- void abortFirstPlayObject();
|
||
|
-
|
||
|
+ bool notifyByTaskbar( WId winId );
|
||
|
+
|
||
|
+ void soundFinished( int eventId, PlayingFinishedStatus reason );
|
||
|
+
|
||
|
WId checkWinId( const QString& appName, WId senderWinId );
|
||
|
|
||
|
/**
|
||
|
@@ -97,9 +95,13 @@ private:
|
||
|
bool isGlobal(const QString &eventname);
|
||
|
|
||
|
private slots:
|
||
|
- void playTimeout();
|
||
|
- void slotPlayerProcessExited( KProcess *proc );
|
||
|
- void restartedArtsd();
|
||
|
+ void playTimeout();
|
||
|
+ void slotPlayerProcessExited( KProcess *proc );
|
||
|
+ void objectDeleter( KDE::Multimedia::SimplePlayer* );
|
||
|
+
|
||
|
+signals:
|
||
|
+ void deletePlayObject( KDE::Multimedia::SimplePlayer* );
|
||
|
+
|
||
|
|
||
|
private:
|
||
|
KNotifyPrivate* d;
|
||
|
Index: arts/knotify/Makefile.am
|
||
|
===================================================================
|
||
|
--- arts/knotify/Makefile.am.orig
|
||
|
+++ arts/knotify/Makefile.am
|
||
|
@@ -3,12 +3,13 @@ INCLUDES= -I$(top_srcdir)/arts/kde -I$(i
|
||
|
|
||
|
####### Files
|
||
|
|
||
|
-kde_module_LTLIBRARIES = knotify.la
|
||
|
+#kde_module_LTLIBRARIES = knotify.la
|
||
|
+bin_PROGRAMS =
|
||
|
+lib_LTLIBRARIES =
|
||
|
+kdeinit_LTLIBRARIES = knotify.la
|
||
|
|
||
|
knotify_la_SOURCES = knotify.cpp knotify.skel
|
||
|
-if include_ARTS
|
||
|
-knotify_la_LIBADD = -lsoundserver_idl -lqtmcop $(LIB_KDEUI) $(top_builddir)/arts/kde/libartskde.la
|
||
|
-endif
|
||
|
+knotify_la_LIBADD = $(LIB_KDEUI) $(top_builddir)/kdemm/libkdemm.la
|
||
|
knotify_la_LDFLAGS = $(all_libraries) -module -avoid-version
|
||
|
knotify_la_METASOURCES = AUTO
|
||
|
|
||
|
Index: kdemm/channel.h
|
||
|
===================================================================
|
||
|
--- kdemm/channel.h.orig
|
||
|
+++ kdemm/channel.h
|
||
|
@@ -83,7 +83,7 @@ namespace Multimedia
|
||
|
* You can not instantiate channels yourself, use the Factory to
|
||
|
* create them.
|
||
|
*/
|
||
|
- Channel( const QString & name, const QString & type, Direction direction,
|
||
|
+ Channel( const QString & channelName, const QString & type, Direction direction,
|
||
|
QObject * parent = 0, const char * name = 0 );
|
||
|
|
||
|
private:
|
||
|
Index: kdemm/factory.cpp
|
||
|
===================================================================
|
||
|
--- kdemm/factory.cpp.orig
|
||
|
+++ kdemm/factory.cpp
|
||
|
@@ -80,6 +80,7 @@ class Factory::Private
|
||
|
":\n" << e << endl;
|
||
|
}
|
||
|
}
|
||
|
+#if 0
|
||
|
if( 0 == backend )
|
||
|
{
|
||
|
if( offers.size() == 0 )
|
||
|
@@ -100,6 +101,7 @@ class Factory::Private
|
||
|
i18n( "Unable to use any of the available Multimedia Backends" ), details );
|
||
|
}
|
||
|
}
|
||
|
+#endif
|
||
|
}
|
||
|
|
||
|
Backend * backend;
|
||
|
Index: kdemm/simpleplayer.cpp
|
||
|
===================================================================
|
||
|
--- kdemm/simpleplayer.cpp.orig
|
||
|
+++ kdemm/simpleplayer.cpp
|
||
|
@@ -50,10 +50,12 @@ SimplePlayer::SimplePlayer( QObject * pa
|
||
|
connect( Factory::self(), SIGNAL( recreateObjects() ), SLOT( recreateObjects() ) );
|
||
|
d->channel = Factory::self()->createChannel( KGlobal::instance()->aboutData()->programName() );
|
||
|
d->player = Factory::self()->createPlayer();
|
||
|
- d->player->setOutputChannel( d->channel );
|
||
|
- connect( d->player, SIGNAL( stateChanged( KDE::Multimedia::Player::State, KDE::Multimedia::Player::State ) ),
|
||
|
+ if ( d->player ) {
|
||
|
+ d->player->setOutputChannel( d->channel );
|
||
|
+ connect( d->player, SIGNAL( stateChanged( KDE::Multimedia::Player::State, KDE::Multimedia::Player::State ) ),
|
||
|
SLOT( stateChanged( KDE::Multimedia::Player::State, KDE::Multimedia::Player::State ) ) );
|
||
|
- connect( d->player, SIGNAL( finished() ), SIGNAL( finished() ) );
|
||
|
+ connect( d->player, SIGNAL( finished() ), SIGNAL( finished() ) );
|
||
|
+ };
|
||
|
}
|
||
|
|
||
|
SimplePlayer::~SimplePlayer()
|
||
|
@@ -64,6 +66,8 @@ SimplePlayer::~SimplePlayer()
|
||
|
|
||
|
void SimplePlayer::play( const KURL & url )
|
||
|
{
|
||
|
+ if( ! d->player )
|
||
|
+ return;
|
||
|
if( isPaused() && url == d->url )
|
||
|
{
|
||
|
d->player->play();
|
||
|
@@ -78,51 +82,71 @@ void SimplePlayer::play( const KURL & ur
|
||
|
|
||
|
void SimplePlayer::pause()
|
||
|
{
|
||
|
+ if( ! d->player )
|
||
|
+ return;
|
||
|
d->player->pause();
|
||
|
}
|
||
|
|
||
|
void SimplePlayer::stop()
|
||
|
{
|
||
|
+ if( ! d->player )
|
||
|
+ return;
|
||
|
d->player->stop();
|
||
|
}
|
||
|
|
||
|
long SimplePlayer::totalTime() const
|
||
|
{
|
||
|
+ if( ! d->player )
|
||
|
+ return 0;
|
||
|
return d->player->totalTime();
|
||
|
}
|
||
|
|
||
|
long SimplePlayer::currentTime() const
|
||
|
{
|
||
|
+ if( ! d->player )
|
||
|
+ return 0;
|
||
|
return d->player->currentTime();
|
||
|
}
|
||
|
|
||
|
void SimplePlayer::seek( long ms )
|
||
|
{
|
||
|
+ if( ! d->player )
|
||
|
+ return;
|
||
|
d->player->seek( ms );
|
||
|
}
|
||
|
|
||
|
float SimplePlayer::volume() const
|
||
|
{
|
||
|
+ if( ! d->player )
|
||
|
+ return 0;
|
||
|
return d->channel->volume();
|
||
|
}
|
||
|
|
||
|
void SimplePlayer::setVolume( float v )
|
||
|
{
|
||
|
+ if( ! d->player )
|
||
|
+ return;
|
||
|
d->channel->setVolume( v );
|
||
|
}
|
||
|
|
||
|
bool SimplePlayer::isPlaying() const
|
||
|
{
|
||
|
+ if( ! d->player )
|
||
|
+ return false;
|
||
|
return ( d->player->state() == Player::Playing );
|
||
|
}
|
||
|
|
||
|
bool SimplePlayer::isPaused() const
|
||
|
{
|
||
|
+ if( ! d->player )
|
||
|
+ return false;
|
||
|
return ( d->player->state() == Player::Paused );
|
||
|
}
|
||
|
|
||
|
void SimplePlayer::stateChanged( Player::State ns, Player::State os )
|
||
|
{
|
||
|
+ if( ! d->player )
|
||
|
+ return;
|
||
|
if( os == Player::Loading && ns == Player::Stopped )
|
||
|
d->player->play();
|
||
|
}
|
||
|
@@ -135,7 +159,8 @@ void SimplePlayer::deleteYourObjects()
|
||
|
d->title = d->channel->channelName();
|
||
|
d->type = d->channel->channelType();
|
||
|
|
||
|
- d->player->stop();
|
||
|
+ if( d->player )
|
||
|
+ d->player->stop();
|
||
|
|
||
|
delete d->player;
|
||
|
delete d->channel;
|
||
|
@@ -149,6 +174,9 @@ void SimplePlayer::recreateObjects()
|
||
|
d->channel->setVolume( d->channelvolume );
|
||
|
|
||
|
d->player = Factory::self()->createPlayer();
|
||
|
+ if( ! d->player )
|
||
|
+ return;
|
||
|
+
|
||
|
d->player->setOutputChannel( d->channel );
|
||
|
|
||
|
if( d->state != Player::NoMedia )
|