summaryrefslogtreecommitdiffstats
path: root/libkonq/konq_sound.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libkonq/konq_sound.cc')
-rw-r--r--libkonq/konq_sound.cc137
1 files changed, 137 insertions, 0 deletions
diff --git a/libkonq/konq_sound.cc b/libkonq/konq_sound.cc
new file mode 100644
index 000000000..c609df553
--- /dev/null
+++ b/libkonq/konq_sound.cc
@@ -0,0 +1,137 @@
+/* This file is part of the KDE Project
+ Copyright (c) 2001 Malte Starostik <malte@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include <kartsdispatcher.h>
+#include <kdebug.h>
+#include <kplayobjectfactory.h>
+#include <soundserver.h>
+
+#include "konq_sound.h"
+
+using namespace std;
+
+class KonqSoundPlayerImpl : public KonqSoundPlayer
+{
+public:
+ KonqSoundPlayerImpl();
+ virtual ~KonqSoundPlayerImpl();
+
+ virtual const QStringList &mimeTypes();
+ virtual void play(const QString &fileName);
+ virtual void stop();
+ virtual bool isPlaying();
+
+private:
+ QStringList m_mimeTypes;
+
+ KArtsDispatcher m_dispatcher;
+ Arts::SoundServerV2 m_soundServer;
+ KDE::PlayObjectFactory *m_factory;
+ KDE::PlayObject *m_player;
+};
+
+KonqSoundPlayerImpl::KonqSoundPlayerImpl()
+ : m_player(0)
+{
+ m_soundServer = Arts::Reference("global:Arts_SoundServerV2");
+ m_factory = new KDE::PlayObjectFactory(m_soundServer);
+}
+
+KonqSoundPlayerImpl::~KonqSoundPlayerImpl()
+{
+ delete m_player;
+ delete m_factory;
+}
+
+const QStringList &KonqSoundPlayerImpl::mimeTypes()
+{
+ if (m_mimeTypes.isEmpty())
+ {
+ Arts::TraderQuery query;
+ vector<Arts::TraderOffer> *offers = query.query();
+
+ for (vector<Arts::TraderOffer>::iterator it = offers->begin();
+ it != offers->end(); ++it)
+ {
+ vector<string> *prop = (*it).getProperty("MimeType");
+ for (vector<string>::iterator mt = prop->begin();
+ mt != prop->end(); ++mt)
+ if ((*mt).length()) // && (*mt).find("video/") == string::npos)
+ m_mimeTypes << (*mt).c_str();
+ delete prop;
+ }
+ delete offers;
+ }
+ return m_mimeTypes;
+}
+
+void KonqSoundPlayerImpl::play(const QString &fileName)
+{
+ if (m_soundServer.isNull())
+ return;
+
+ delete m_player;
+ if ((m_player = m_factory->createPlayObject(fileName, true)))
+ {
+ if (m_player->isNull())
+ stop();
+ else
+ m_player->play();
+ }
+}
+
+void KonqSoundPlayerImpl::stop()
+{
+ delete m_player;
+ m_player = 0;
+}
+
+bool KonqSoundPlayerImpl::isPlaying()
+{
+ return m_player ? (m_player->state() == Arts::posPlaying) : false;
+}
+
+class KonqSoundFactory : public KLibFactory
+{
+public:
+ KonqSoundFactory(QObject *parent = 0, const char *name = 0)
+ : KLibFactory(parent, name) {};
+ virtual ~KonqSoundFactory() {};
+
+protected:
+ virtual QObject *createObject(QObject * = 0, const char * = 0,
+ const char *className = "QObject", const QStringList &args = QStringList());
+};
+
+QObject *KonqSoundFactory::createObject(QObject *, const char *,
+ const char *className, const QStringList &)
+{
+ if (qstrcmp(className, "KonqSoundPlayer") == 0)
+ return new KonqSoundPlayerImpl();
+ return 0;
+}
+
+extern "C"
+{
+ KDE_EXPORT KLibFactory *init_konq_sound()
+ {
+ return new KonqSoundFactory();
+ }
+}
+
+// vim: ts=4 sw=4 noet