<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<id>tag:old.nabble.com,2006:forum-3471</id>
	<title>Nabble - Kaffeine Player</title>
	<updated>2009-11-24T14:54:54Z</updated>
	<link rel="self" type="application/atom+xml" href="http://old.nabble.com/Kaffeine-Player-f3471.xml" />
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Kaffeine-Player-f3471.html" />
	<subtitle type="html">Kaffeine is full featured Media Player for KDE3. It supports all kinds of local and network media and digital video broadcasting. At the moment Kaffeine can use xine-lib or GStreamer as backend. Kaffeine Player home is &lt;a href=&quot;http://sourceforge.net/projects/kaffeine/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.</subtitle>
	
<entry>
	<id>tag:old.nabble.com,2006:post-26504736</id>
	<title>Re: dbus support for kaffeine</title>
	<published>2009-11-24T14:54:54Z</published>
	<updated>2009-11-24T14:54:54Z</updated>
	<author>
		<name>Pascal Pollet</name>
	</author>
	<content type="html">Hi Christoph,
&lt;br&gt;&lt;br&gt;with my old patch the channel ui didn't get updated when the channel was 
&lt;br&gt;set using the SetNumber(int) function, i now fixed it. I also cleaned up 
&lt;br&gt;a little bit my code in dvbtab.cpp and fixed a possible segmentation 
&lt;br&gt;fault when the dbus function SetDvbChannel(Qstring) was called with an 
&lt;br&gt;invalid name. The patch is against rev. 1053875.
&lt;br&gt;&lt;br&gt;cheers,
&lt;br&gt;pascal
&lt;br&gt;&lt;br&gt;Pascal schrieb:
&lt;div class='shrinkable-quote'&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; I forgot to add a check if the parameter is a single digit integer in 
&lt;br&gt;&amp;gt; the MediaWidget::setNumber(int) function, here is the new patch, 
&lt;br&gt;&amp;gt; please forget the other one...
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ciao,
&lt;br&gt;&amp;gt; Pascal
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Pascal schrieb:
&lt;br&gt;&amp;gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; I now added the SetNumber(int) function to enter numbers with 
&lt;br&gt;&amp;gt;&amp;gt; multiple digits, that was really easy, as the code to enter numbers 
&lt;br&gt;&amp;gt;&amp;gt; with the keyboard was already there. I didn't notice it before 
&lt;br&gt;&amp;gt;&amp;gt; because there is one problem left with this code: entering numbers 
&lt;br&gt;&amp;gt;&amp;gt; with the keyboard has no effect if the DvbChannelView has the focus, 
&lt;br&gt;&amp;gt;&amp;gt; in this case you have to click into the picture before to make it 
&lt;br&gt;&amp;gt;&amp;gt; work. Number-key events in the DvbChannelView should maybe be 
&lt;br&gt;&amp;gt;&amp;gt; redirected somehow to the MediaWidget class...
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; I also removed some debugging code that was still present in my last 
&lt;br&gt;&amp;gt;&amp;gt; patch, sorry...
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; The patch is against the actual svn trunk again (revision 1053111)
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ciao,
&lt;br&gt;&amp;gt;&amp;gt; Pascal
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Pascal schrieb:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ok, here is the actual state of things. The mpris methods are all 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; implemented, with a few stubs left: a few /TrackList methods still 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; need to be implemented, but I will try to do it soon. The /Player 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Repeat() function is also a stub, because the playlist does not 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; allow to repeat a single track yet. Also the GetCaps () function is 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; incomplete.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; I put much methods into the /Player object which are not part of the 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; mpris specs, because it wouldn't make much sense to make a separate 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; object for them. I think it should be ok, but if you don't agree, 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; please tell me, it' not difficult to change...
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; I made a DVB/ object for dvb-related stuff and a Display/ object for 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; methods like toggleFullScreen, I'm not sure if &amp;quot;Display&amp;quot; is the best 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; name for that...
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; There is still a need for a method that allows to enter channel 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; numbers with more than one digit with a remote control (or with the 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; keyboard), I will try to do this in the next time, as for me it's 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; the most important feature which is still missing.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; I changed all dbus functions to begin with a capital letter, to be 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; consistent with the mpris methods.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; All this isn't thoroughly tested at all and rather crude, and there 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; should certainly be more error checking, but I think this is true 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; for almost all the rest of the app also, so it should be ok for the 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; beginning ;)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; changing the channel works, but I didn't manage to have the selection
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; changed to the new channel in the DvbChannelView tree. I don't 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; know how to
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; get a valid QModelIndex that points to the correct 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; DvbChannelModel. Please
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; look at the code and at my comments in DvbTab::setChannel(int 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; number). I
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tried almost everything and thereby learned a lot about the model 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; / view
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; concept of Qt, but it didn't help me to find the solution... Maybe 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; you
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; already know this probem Christoph, because there is the same 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; issue when
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; kaffeine gets started with the &amp;quot;--tv &amp;lt;channel&amp;gt;&amp;quot; flag: it simply calls
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; DvbTab::playChannel(const QString &amp;name), but it does not select 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the channel
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; in the DvbChannelView. The problem is that afterwards, calls to
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; MediaWidget::previous() and next() have no effect, because the 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; currently
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; selected channel is not known. I hope that someone more clever 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; than me will
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; solve this issue ;)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Yes, this one is trickier. Note that there exists a similar problem
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; e.g. with playPause(): you also need to update the ui state.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; I now found a solution (although I don't know if it's the best), but 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; I don't recognize what should be updated when the playPause() method 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; is called, &amp;nbsp;you have a better overview for sure...
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ciao,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Pascal
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Christoph Pfister schrieb:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2009/11/6 Pascal Pollet &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26504736&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pascal@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; here is what I've done so far, I think it should add enough d-bus 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; to make
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; most users happy, including me :) Please look at it and tell me 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; what you
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; think of it...
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; It's a very good starting point. There exists a mediaplayer dbus
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; specification MPRIS [1], which I consider worth to implement (so that
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; we don't add yet another dbus interface for common functionality).
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I've committed preliminary support to svn (the &amp;quot;root&amp;quot; object). Could
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; you please adapt your patch to that concept (i.e. add a tracklist and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; player object; in case of need just method stubs)? I'm aware of the
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; fact that the actions defined in that specification don't 100% map
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Kaffeine's actions (e.g. Play() doing a rewind to the beginning of a
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; track), so you don't have to care about those details if you don't
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; want to do. I also know that not every mpris thing is possible
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (especially the tracklist parts needs more work) and that there's not
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; a mpris thing for every action Kaffeine is able to perform (put them
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; in a separate object for now).
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; There is one problem left, when selecting a new DVB-channel 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; directly by name
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; or by number, with the (new) functions:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; dvbTab::setChannel(const QString &amp;name)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; DvbTab::setChannel(int number)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; changing the channel works, but I didn't manage to have the selection
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; changed to the new channel in the DvbChannelView tree. I don't 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; know how to
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; get a valid QModelIndex that points to the correct 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; DvbChannelModel. Please
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; look at the code and at my comments in DvbTab::setChannel(int 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; number). I
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tried almost everything and thereby learned a lot about the model 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; / view
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; concept of Qt, but it didn't help me to find the solution... Maybe 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; you
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; already know this probem Christoph, because there is the same 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; issue when
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; kaffeine gets started with the &amp;quot;--tv &amp;lt;channel&amp;gt;&amp;quot; flag: it simply calls
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; DvbTab::playChannel(const QString &amp;name), but it does not select 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the channel
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; in the DvbChannelView. The problem is that afterwards, calls to
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; MediaWidget::previous() and next() have no effect, because the 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; currently
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; selected channel is not known. I hope that someone more clever 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; than me will
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; solve this issue ;)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Yes, this one is trickier. Note that there exists a similar problem
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; e.g. with playPause(): you also need to update the ui state.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; cheers,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Pascal
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Thanks,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Christoph
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [1] &lt;a href=&quot;http://wiki.xmms2.xmms.se/wiki/MPRIS&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://wiki.xmms2.xmms.se/wiki/MPRIS&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;diff -Naur ../kaffeine/src/dbusobjects.cpp ./src/dbusobjects.cpp
&lt;br&gt;--- ../kaffeine/src/dbusobjects.cpp	2009-11-24 23:27:03.000000000 +0100
&lt;br&gt;+++ ./src/dbusobjects.cpp	2009-11-24 23:44:23.000000000 +0100
&lt;br&gt;@@ -23,6 +23,9 @@
&lt;br&gt;&amp;nbsp;#include &amp;lt;QDBusMetaType&amp;gt;
&lt;br&gt;&amp;nbsp;#include &amp;lt;KAboutData&amp;gt;
&lt;br&gt;&amp;nbsp;#include &amp;lt;KApplication&amp;gt;
&lt;br&gt;+#include &amp;lt;KUrl&amp;gt;
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;mediawidget.h&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;QDBusArgument &amp;operator&amp;lt;&amp;lt;(QDBusArgument &amp;argument, const MprisVersionStruct &amp;versionStruct)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;@@ -40,9 +43,27 @@
&lt;br&gt;&amp;nbsp;	return argument;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+QDBusArgument &amp;operator&amp;lt;&amp;lt;(QDBusArgument &amp;argument, const MprisStatusStruct &amp;statusStruct)
&lt;br&gt;+{
&lt;br&gt;+	argument.beginStructure();
&lt;br&gt;+	argument &amp;lt;&amp;lt; statusStruct.play &amp;lt;&amp;lt; statusStruct.random &amp;lt;&amp;lt; statusStruct.repeatTrack &amp;lt;&amp;lt; statusStruct.repeatAll;
&lt;br&gt;+	argument.endStructure();
&lt;br&gt;+	return argument;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+const QDBusArgument &amp;operator&amp;gt;&amp;gt;(const QDBusArgument &amp;argument, MprisStatusStruct &amp;statusStruct)
&lt;br&gt;+{
&lt;br&gt;+	argument.beginStructure();
&lt;br&gt;+	argument &amp;gt;&amp;gt; statusStruct.play &amp;gt;&amp;gt; statusStruct.random &amp;gt;&amp;gt; statusStruct.repeatTrack &amp;gt;&amp;gt; statusStruct.repeatAll;
&lt;br&gt;+	argument.endStructure();
&lt;br&gt;+	return argument;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;MprisRootObject::MprisRootObject(QObject *parent) : QObject(parent)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	 qDBusRegisterMetaType&amp;lt;MprisVersionStruct&amp;gt;();
&lt;br&gt;+	 qDBusRegisterMetaType&amp;lt;MprisStatusStruct&amp;gt;();
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;MprisRootObject::~MprisRootObject()
&lt;br&gt;@@ -67,3 +88,325 @@
&lt;br&gt;&amp;nbsp;	versionStruct.minor = 0;
&lt;br&gt;&amp;nbsp;	return versionStruct;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+MprisPlayerObject::MprisPlayerObject(MediaWidget *mediaWidget_): mediaWidget(mediaWidget_)
&lt;br&gt;+{ }
&lt;br&gt;+
&lt;br&gt;+MprisPlayerObject::~MprisPlayerObject()
&lt;br&gt;+{ }
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::Next()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;next();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::Prev()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;previous();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::PlayPause()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;playPause();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::Play()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;play();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::Pause()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;pause();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MprisPlayerObject::VolumeGet()
&lt;br&gt;+{
&lt;br&gt;+	return mediaWidget-&amp;gt;getVolume();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::VolumeSet(int volume)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;changeVolume(volume);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::VolumeIncrease()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;increaseVolume();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::VolumeDecrease()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;decreaseVolume();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MprisPlayerObject::PositionGet()
&lt;br&gt;+{
&lt;br&gt;+	return mediaWidget-&amp;gt;getPosition();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::PositionSet(int position)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;setPosition(position);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::Repeat()
&lt;br&gt;+{
&lt;br&gt;+	//TODO
&lt;br&gt;+	//repeating a single track not implemented yet, only whole playlist
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MprisPlayerObject::GetCaps()
&lt;br&gt;+{
&lt;br&gt;+	int caps = NO_CAPS;
&lt;br&gt;+
&lt;br&gt;+	if ( mediaWidget-&amp;gt;hasMedia() ) 
&lt;br&gt;+	{
&lt;br&gt;+		if ( mediaWidget-&amp;gt;isPlaying() &amp;&amp; ! mediaWidget-&amp;gt;isPaused() )
&lt;br&gt;+		{
&lt;br&gt;+			caps |= CAN_PAUSE;
&lt;br&gt;+		}
&lt;br&gt;+		else 
&lt;br&gt;+		{
&lt;br&gt;+			caps |= CAN_PLAY;
&lt;br&gt;+		}
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	caps |= CAN_HAS_TRACKLIST;
&lt;br&gt;+
&lt;br&gt;+	//TODO: CAN_GO_NEXT &amp; CAN_GO_PREV &amp; CAN_PROVIDE_METADATA
&lt;br&gt;+
&lt;br&gt;+	return caps;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::Stop()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;stop();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+MprisStatusStruct MprisPlayerObject::GetStatus()
&lt;br&gt;+{
&lt;br&gt;+	MprisStatusStruct statusStruct;
&lt;br&gt;+	if ( mediaWidget-&amp;gt;isPaused() )
&lt;br&gt;+	{
&lt;br&gt;+		statusStruct.play = 1;
&lt;br&gt;+	}
&lt;br&gt;+	else if ( mediaWidget-&amp;gt;isPlaying() )
&lt;br&gt;+	{
&lt;br&gt;+		statusStruct.play = 0;
&lt;br&gt;+	}
&lt;br&gt;+	else
&lt;br&gt;+	{
&lt;br&gt;+		statusStruct.play = 2;
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	if ( mediaWidget-&amp;gt;isRepeat() )
&lt;br&gt;+	{
&lt;br&gt;+		statusStruct.repeatAll = 1;
&lt;br&gt;+	}
&lt;br&gt;+	else
&lt;br&gt;+	{
&lt;br&gt;+		statusStruct.repeatAll = 0;
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	statusStruct.random = 0;
&lt;br&gt;+	statusStruct.repeatTrack = 0;
&lt;br&gt;+	
&lt;br&gt;+	return statusStruct;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+QVariantMap MprisPlayerObject::GetMetadata()
&lt;br&gt;+{
&lt;br&gt;+	return mediaWidget-&amp;gt;getMetadata();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::Play(const QString &amp;url)
&lt;br&gt;+{
&lt;br&gt;+	KUrl kurl(url);
&lt;br&gt;+	if (kurl.isValid()) {
&lt;br&gt;+		mediaWidget-&amp;gt;play(kurl);
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::PlayAudioCd()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;playAudioCd();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::PlayVideoCd()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;playVideoCd();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::PlayDvd()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;playDvd();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void &amp;nbsp;MprisPlayerObject::ChangeAudioChannel(int index)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;changeAudioChannel(index);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void &amp;nbsp;MprisPlayerObject::ChangeSubtitle(int index)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;changeSubtitle(index);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::ToggleMuted()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;toggleMuted();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::LongSkipBackward()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;longSkipBackward();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::SkipBackward()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;skipBackward();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::SkipForward()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;skipForward();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::LongSkipForward()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;longSkipForward();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::TimeButtonClicked()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;timeButtonClicked();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::UpdateTimeButton()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;updateTimeButton();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+MprisTrackListObject::MprisTrackListObject(MediaWidget *mediaWidget_): mediaWidget(mediaWidget_)
&lt;br&gt;+{ }
&lt;br&gt;+
&lt;br&gt;+MprisTrackListObject::~MprisTrackListObject()
&lt;br&gt;+{ }
&lt;br&gt;+
&lt;br&gt;+QVariantMap MprisTrackListObject::GetMetadata()
&lt;br&gt;+{
&lt;br&gt;+	return mediaWidget-&amp;gt;getMetadata();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MprisTrackListObject::GetCurrentTrack()
&lt;br&gt;+{
&lt;br&gt;+	return mediaWidget-&amp;gt;getCurrentTrack();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MprisTrackListObject::GetLength()
&lt;br&gt;+{
&lt;br&gt;+	return mediaWidget-&amp;gt;getLength();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MprisTrackListObject::AddTrack(QString track, bool play)
&lt;br&gt;+{
&lt;br&gt;+	return mediaWidget-&amp;gt;addTrack(track, play);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisTrackListObject::DelTrack(int position)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;delTrack(position);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisTrackListObject::SetLoop(bool loop)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;setLoop(loop);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisTrackListObject::SetRandom(bool random)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;setRandom(random);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+MprisDvbObject::MprisDvbObject(MediaWidget *mediaWidget_): mediaWidget(mediaWidget_)
&lt;br&gt;+{ }
&lt;br&gt;+
&lt;br&gt;+MprisDvbObject::~MprisDvbObject()
&lt;br&gt;+{ }
&lt;br&gt;+
&lt;br&gt;+void MprisDvbObject::SetDvbChannel(const QString &amp;name)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;setDvbChannel(name);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDvbObject::SetDvbChannelNumber(int number)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;setDvbChannel(number);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDvbObject::SetNumber(int number)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;setNumber(number);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDvbObject::SetDvbLastChannel()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;setDvbLastChannel();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDvbObject::StopDvb()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;stopDvb();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDvbObject::ToggleInstantRecord()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;toggleInstantRecord();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDvbObject::ToggleOsd()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;toggleOsd();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+MprisDisplayObject::MprisDisplayObject(MediaWidget *mediaWidget_): mediaWidget(mediaWidget_)
&lt;br&gt;+{ }
&lt;br&gt;+
&lt;br&gt;+MprisDisplayObject::~MprisDisplayObject()
&lt;br&gt;+{ }
&lt;br&gt;+
&lt;br&gt;+void MprisDisplayObject::ToggleFullScreen()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;fullScreen();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDisplayObject::AspectRatioAuto()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;aspectRatioAuto();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDisplayObject::AspectRatio4_3()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;aspectRatio4_3();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDisplayObject::AspectRatio16_9()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;aspectRatio16_9();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDisplayObject::AspectRatioWidget()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;aspectRatioWidget();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;diff -Naur ../kaffeine/src/dbusobjects.h ./src/dbusobjects.h
&lt;br&gt;--- ../kaffeine/src/dbusobjects.h	2009-11-24 23:27:03.000000000 +0100
&lt;br&gt;+++ ./src/dbusobjects.h	2009-11-24 23:44:27.000000000 +0100
&lt;br&gt;@@ -22,8 +22,12 @@
&lt;br&gt;&amp;nbsp;#define DBUSOBJECTS_H
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;#include &amp;lt;QMetaType&amp;gt;
&lt;br&gt;+#include &amp;lt;QVariantMap&amp;gt;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;struct MprisVersionStruct;
&lt;br&gt;+struct MprisStatusStruct;
&lt;br&gt;+
&lt;br&gt;+class MediaWidget;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;class MprisRootObject : public QObject
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;@@ -39,6 +43,130 @@
&lt;br&gt;&amp;nbsp;	MprisVersionStruct MprisVersion();
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+
&lt;br&gt;+class MprisPlayerObject : public QObject
&lt;br&gt;+{
&lt;br&gt;+	Q_OBJECT
&lt;br&gt;+	Q_CLASSINFO(&amp;quot;D-Bus Interface&amp;quot;, &amp;quot;org.freedesktop.MediaPlayer&amp;quot;)
&lt;br&gt;+public:
&lt;br&gt;+	explicit MprisPlayerObject(MediaWidget *mediaWidget_);
&lt;br&gt;+	~MprisPlayerObject();
&lt;br&gt;+
&lt;br&gt;+public slots:
&lt;br&gt;+	void Next();
&lt;br&gt;+	void Prev();
&lt;br&gt;+	void Play();
&lt;br&gt;+	void Pause();
&lt;br&gt;+	void Stop();
&lt;br&gt;+	int &amp;nbsp;VolumeGet();
&lt;br&gt;+	void VolumeSet(int volume);
&lt;br&gt;+	int &amp;nbsp;PositionGet();
&lt;br&gt;+	void PositionSet(int position);
&lt;br&gt;+	void Repeat();
&lt;br&gt;+	MprisStatusStruct GetStatus();
&lt;br&gt;+	QVariantMap GetMetadata();
&lt;br&gt;+	int GetCaps();
&lt;br&gt;+
&lt;br&gt;+	// this functions are not part of the MPRIS specs
&lt;br&gt;+	void PlayPause();
&lt;br&gt;+	void VolumeIncrease();
&lt;br&gt;+	void VolumeDecrease();
&lt;br&gt;+	void Play(const QString &amp;url);
&lt;br&gt;+	void PlayAudioCd();
&lt;br&gt;+	void PlayVideoCd();
&lt;br&gt;+	void PlayDvd();
&lt;br&gt;+	void ChangeAudioChannel(int index);
&lt;br&gt;+	void ChangeSubtitle(int index);
&lt;br&gt;+	void ToggleMuted();
&lt;br&gt;+	void LongSkipBackward();
&lt;br&gt;+	void SkipBackward();
&lt;br&gt;+	void SkipForward();
&lt;br&gt;+	void LongSkipForward();
&lt;br&gt;+	void TimeButtonClicked();
&lt;br&gt;+	void UpdateTimeButton();
&lt;br&gt;+
&lt;br&gt;+signals:
&lt;br&gt;+	void CapsChange( int );
&lt;br&gt;+	void StatusChange( MprisStatusStruct );
&lt;br&gt;+	void TrackChange( QVariantMap );
&lt;br&gt;+
&lt;br&gt;+private:
&lt;br&gt;+	MediaWidget *mediaWidget;
&lt;br&gt;+
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+class MprisTrackListObject : public QObject
&lt;br&gt;+{
&lt;br&gt;+	Q_OBJECT
&lt;br&gt;+	Q_CLASSINFO(&amp;quot;D-Bus Interface&amp;quot;, &amp;quot;org.freedesktop.MediaPlayer&amp;quot;)
&lt;br&gt;+public:
&lt;br&gt;+	explicit MprisTrackListObject(MediaWidget *mediaWidget_);
&lt;br&gt;+	~MprisTrackListObject();
&lt;br&gt;+
&lt;br&gt;+public slots:
&lt;br&gt;+	QVariantMap GetMetadata();
&lt;br&gt;+	int GetCurrentTrack();
&lt;br&gt;+	int GetLength();
&lt;br&gt;+	int AddTrack(QString track, bool play);
&lt;br&gt;+	void DelTrack(int position);
&lt;br&gt;+	void SetLoop(bool loop);
&lt;br&gt;+	void SetRandom(bool random);
&lt;br&gt;+
&lt;br&gt;+signals:
&lt;br&gt;+	void TrackListChange(int);
&lt;br&gt;+
&lt;br&gt;+private:
&lt;br&gt;+	MediaWidget *mediaWidget;
&lt;br&gt;+
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+class MprisDvbObject : public QObject
&lt;br&gt;+{
&lt;br&gt;+	Q_OBJECT
&lt;br&gt;+	Q_CLASSINFO(&amp;quot;D-Bus Interface&amp;quot;, &amp;quot;org.freedesktop.MediaPlayer&amp;quot;)
&lt;br&gt;+public:
&lt;br&gt;+	explicit MprisDvbObject(MediaWidget *mediaWidget_);
&lt;br&gt;+	~MprisDvbObject();
&lt;br&gt;+
&lt;br&gt;+public slots:
&lt;br&gt;+	void SetDvbChannel(const QString &amp;name);
&lt;br&gt;+	void SetDvbChannelNumber(int number);
&lt;br&gt;+	void SetNumber(int number);
&lt;br&gt;+	void SetDvbLastChannel();
&lt;br&gt;+	void StopDvb();
&lt;br&gt;+	void ToggleInstantRecord();
&lt;br&gt;+	void ToggleOsd();
&lt;br&gt;+
&lt;br&gt;+private:
&lt;br&gt;+	MediaWidget *mediaWidget;
&lt;br&gt;+
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+class MprisDisplayObject : public QObject
&lt;br&gt;+{
&lt;br&gt;+	Q_OBJECT
&lt;br&gt;+	Q_CLASSINFO(&amp;quot;D-Bus Interface&amp;quot;, &amp;quot;org.freedesktop.MediaPlayer&amp;quot;)
&lt;br&gt;+public:
&lt;br&gt;+	explicit MprisDisplayObject(MediaWidget *mediaWidget_);
&lt;br&gt;+	~MprisDisplayObject();
&lt;br&gt;+
&lt;br&gt;+public slots:
&lt;br&gt;+	void AspectRatioAuto();
&lt;br&gt;+	void AspectRatio4_3();
&lt;br&gt;+	void AspectRatio16_9();
&lt;br&gt;+	void AspectRatioWidget();
&lt;br&gt;+	void ToggleFullScreen();
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+private:
&lt;br&gt;+	MediaWidget *mediaWidget;
&lt;br&gt;+
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;struct MprisVersionStruct
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	quint16 major;
&lt;br&gt;@@ -47,4 +175,30 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;Q_DECLARE_METATYPE(MprisVersionStruct)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+struct MprisStatusStruct
&lt;br&gt;+{
&lt;br&gt;+	quint16 play;
&lt;br&gt;+	quint16 random;
&lt;br&gt;+	quint16 repeatTrack;
&lt;br&gt;+	quint16 repeatAll;
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+Q_DECLARE_METATYPE(MprisStatusStruct)
&lt;br&gt;+
&lt;br&gt;+/**
&lt;br&gt;+* The bit values for the capabilities flags
&lt;br&gt;+*/
&lt;br&gt;+enum Cap {
&lt;br&gt;+	NO_CAPS			 &amp;nbsp; = 0,
&lt;br&gt;+	CAN_GO_NEXT		 &amp;nbsp; = 1 &amp;lt;&amp;lt; 0,
&lt;br&gt;+	CAN_GO_PREV		 &amp;nbsp; = 1 &amp;lt;&amp;lt; 1,
&lt;br&gt;+	CAN_PAUSE			 = 1 &amp;lt;&amp;lt; 2,
&lt;br&gt;+	CAN_PLAY			 &amp;nbsp;= 1 &amp;lt;&amp;lt; 3,
&lt;br&gt;+	CAN_SEEK			 &amp;nbsp;= 1 &amp;lt;&amp;lt; 4,
&lt;br&gt;+	CAN_PROVIDE_METADATA &amp;nbsp;= 1 &amp;lt;&amp;lt; 5,
&lt;br&gt;+	CAN_HAS_TRACKLIST	 = 1 &amp;lt;&amp;lt; 6,
&lt;br&gt;+	ALL_KNOWN_CAPS		= (1 &amp;lt;&amp;lt; 7) - 1
&lt;br&gt;+};
&lt;br&gt;+Q_DECLARE_FLAGS(Caps, Cap)
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;#endif /* DBUSOBJECTS_H */
&lt;br&gt;diff -Naur ../kaffeine/src/dvb/dvbliveview.cpp ./src/dvb/dvbliveview.cpp
&lt;br&gt;--- ../kaffeine/src/dvb/dvbliveview.cpp	2009-11-24 23:27:03.000000000 +0100
&lt;br&gt;+++ ./src/dvb/dvbliveview.cpp	2009-11-24 23:46:14.000000000 +0100
&lt;br&gt;@@ -440,6 +440,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	if (channel != NULL) {
&lt;br&gt;&amp;nbsp;		playChannel(channel);
&lt;br&gt;+		emit updateDvbChannelUi(channel.data()-&amp;gt;number);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;diff -Naur ../kaffeine/src/dvb/dvbliveview.h ./src/dvb/dvbliveview.h
&lt;br&gt;--- ../kaffeine/src/dvb/dvbliveview.h	2009-11-24 23:27:03.000000000 +0100
&lt;br&gt;+++ ./src/dvb/dvbliveview.h	2009-11-24 23:46:19.000000000 +0100
&lt;br&gt;@@ -44,6 +44,9 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	void playChannel(const QSharedDataPointer&amp;lt;DvbChannel&amp;gt; &amp;channel_);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+signals:
&lt;br&gt;+	void updateDvbChannelUi(int number);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;private slots:
&lt;br&gt;&amp;nbsp;	void pmtSectionChanged(const DvbPmtSection &amp;pmtSection);
&lt;br&gt;&amp;nbsp;	void insertPatPmt();
&lt;br&gt;diff -Naur ../kaffeine/src/dvb/dvbtab.cpp ./src/dvb/dvbtab.cpp
&lt;br&gt;--- ../kaffeine/src/dvb/dvbtab.cpp	2009-11-24 23:27:03.000000000 +0100
&lt;br&gt;+++ ./src/dvb/dvbtab.cpp	2009-11-24 23:46:14.000000000 +0100
&lt;br&gt;@@ -117,6 +117,10 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	connect(mediaWidget, SIGNAL(previousDvbChannel()), this, SLOT(previousChannel()));
&lt;br&gt;&amp;nbsp;	connect(mediaWidget, SIGNAL(nextDvbChannel()), this, SLOT(nextChannel()));
&lt;br&gt;+	connect(mediaWidget, SIGNAL(changeDvbChannel(const QString&amp;)), this, SLOT(setChannel(const QString&amp;)));
&lt;br&gt;+	connect(mediaWidget, SIGNAL(changeDvbChannel(int)), this, SLOT(setChannel(int)));
&lt;br&gt;+	connect(mediaWidget, SIGNAL(dvbLastChannel()), this, SLOT(setLastChannel()));
&lt;br&gt;+	connect(mediaWidget, SIGNAL(toggleInstantRecord()), this, SLOT(toggleInstantRecord()));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	connect(manager-&amp;gt;getRecordingManager(), SIGNAL(instantRecordingRemoved()),
&lt;br&gt;&amp;nbsp;		this, SLOT(instantRecordingRemoved()));
&lt;br&gt;@@ -144,7 +148,7 @@
&lt;br&gt;&amp;nbsp;	channelView-&amp;gt;setRootIsDecorated(false);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	if (!channelView-&amp;gt;header()-&amp;gt;restoreState(QByteArray::fromBase64(
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;KGlobal::config()-&amp;gt;group(&amp;quot;DVB&amp;quot;).readEntry(&amp;quot;ChannelViewState&amp;quot;, QByteArray())))) {
&lt;br&gt;+		KGlobal::config()-&amp;gt;group(&amp;quot;DVB&amp;quot;).readEntry(&amp;quot;ChannelViewState&amp;quot;, QByteArray())))) {
&lt;br&gt;&amp;nbsp;		channelView-&amp;gt;sortByColumn(0, Qt::AscendingOrder);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -195,6 +199,8 @@
&lt;br&gt;&amp;nbsp;	QTimer *timer = new QTimer(this);
&lt;br&gt;&amp;nbsp;	timer-&amp;gt;start(30000);
&lt;br&gt;&amp;nbsp;	connect(timer, SIGNAL(timeout()), this, SLOT(cleanTimeShiftFiles()));
&lt;br&gt;+
&lt;br&gt;+	connect(manager-&amp;gt;getLiveView(), SIGNAL(updateDvbChannelUi(int)), this, SLOT(updateDvbChannelUi(int)));
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;DvbTab::~DvbTab()
&lt;br&gt;@@ -210,6 +216,11 @@
&lt;br&gt;&amp;nbsp;	playChannel(manager-&amp;gt;getChannelModel()-&amp;gt;channelForName(name));
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+void DvbTab::playChannel(int number)
&lt;br&gt;+{
&lt;br&gt;+	playChannel(manager-&amp;gt;getChannelModel()-&amp;gt;channelForNumber(number));
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;void DvbTab::playLastChannel()
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	playChannel(KGlobal::config()-&amp;gt;group(&amp;quot;DVB&amp;quot;).readEntry(&amp;quot;LastChannel&amp;quot;));
&lt;br&gt;@@ -244,6 +255,19 @@
&lt;br&gt;&amp;nbsp;	dialog.exec();
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+void DvbTab::toggleInstantRecord()
&lt;br&gt;+{
&lt;br&gt;+	if (instantRecordAction-&amp;gt;isChecked()) {
&lt;br&gt;+		instantRecordAction-&amp;gt;setChecked(false);
&lt;br&gt;+		instantRecord(false);
&lt;br&gt;+	}
&lt;br&gt;+	else {
&lt;br&gt;+		instantRecordAction-&amp;gt;setChecked(true);
&lt;br&gt;+		instantRecord(true);
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;void DvbTab::instantRecord(bool checked)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	if (checked) {
&lt;br&gt;@@ -349,6 +373,49 @@
&lt;br&gt;&amp;nbsp;void DvbTab::playChannel(const QSharedDataPointer&amp;lt;DvbChannel&amp;gt; &amp;channel)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	if (channel != NULL) {
&lt;br&gt;+		updateDvbChannelUi(channel-&amp;gt;number);
&lt;br&gt;&amp;nbsp;		manager-&amp;gt;getLiveView()-&amp;gt;playChannel(channel);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+void DvbTab::setChannel(const QString &amp;name)
&lt;br&gt;+{
&lt;br&gt;+	QSharedDataPointer&amp;lt;DvbChannel&amp;gt; channel = manager-&amp;gt;getChannelModel()-&amp;gt;channelForName(name);
&lt;br&gt;+	if (channel != NULL) {
&lt;br&gt;+		updateDvbChannelUi(channel.data()-&amp;gt;number);
&lt;br&gt;+	}
&lt;br&gt;+	playChannel(name);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DvbTab::setChannel(int number)
&lt;br&gt;+{
&lt;br&gt;+	updateDvbChannelUi(number);
&lt;br&gt;+	playChannel(number);
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DvbTab::setLastChannel()
&lt;br&gt;+{
&lt;br&gt;+	playLastChannel();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DvbTab::updateDvbChannelUi(int number)
&lt;br&gt;+{
&lt;br&gt;+	QModelIndex index = channelView-&amp;gt;indexAt(QPoint(0,0));
&lt;br&gt;+
&lt;br&gt;+	if (!index.isValid()) {
&lt;br&gt;+		return;
&lt;br&gt;+	}
&lt;br&gt;+	
&lt;br&gt;+	DvbChannelModel *channelModel = (DvbChannelModel*) index.model();
&lt;br&gt;+
&lt;br&gt;+	QModelIndexList list = channelModel-&amp;gt;match(channelModel-&amp;gt;index(0, 1), Qt::DisplayRole, number, 1, Qt::MatchExactly);
&lt;br&gt;+	QModelIndex index_new = list.value(0);
&lt;br&gt;+
&lt;br&gt;+	if (!index_new.isValid()) {
&lt;br&gt;+		return;
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	channelView-&amp;gt;setCurrentIndex(index_new);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;diff -Naur ../kaffeine/src/dvb/dvbtab.h ./src/dvb/dvbtab.h
&lt;br&gt;--- ../kaffeine/src/dvb/dvbtab.h	2009-11-24 23:27:03.000000000 +0100
&lt;br&gt;+++ ./src/dvb/dvbtab.h	2009-11-24 23:46:19.000000000 +0100
&lt;br&gt;@@ -38,11 +38,13 @@
&lt;br&gt;&amp;nbsp;class DvbTab : public TabBase
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	Q_OBJECT
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;public:
&lt;br&gt;&amp;nbsp;	DvbTab(KMenu *menu, KActionCollection *collection, MediaWidget *mediaWidget_);
&lt;br&gt;&amp;nbsp;	~DvbTab();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	void playChannel(const QString &amp;name);
&lt;br&gt;+	void playChannel(int number);
&lt;br&gt;&amp;nbsp;	void playLastChannel();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	void enableDvbDump();
&lt;br&gt;@@ -52,12 +54,17 @@
&lt;br&gt;&amp;nbsp;	void showEpgDialog();
&lt;br&gt;&amp;nbsp;	void showRecordingDialog();
&lt;br&gt;&amp;nbsp;	void instantRecord(bool checked);
&lt;br&gt;+	void toggleInstantRecord();
&lt;br&gt;&amp;nbsp;	void instantRecordingRemoved();
&lt;br&gt;&amp;nbsp;	void configureDvb();
&lt;br&gt;&amp;nbsp;	void playLive(const QModelIndex &amp;index);
&lt;br&gt;&amp;nbsp;	void previousChannel();
&lt;br&gt;&amp;nbsp;	void nextChannel();
&lt;br&gt;&amp;nbsp;	void cleanTimeShiftFiles();
&lt;br&gt;+	void setChannel(const QString &amp;name);
&lt;br&gt;+	void setChannel(int number);
&lt;br&gt;+	void setLastChannel();
&lt;br&gt;+	void updateDvbChannelUi(int number);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;private:
&lt;br&gt;&amp;nbsp;	void activate();
&lt;br&gt;diff -Naur ../kaffeine/src/kaffeine.cpp ./src/kaffeine.cpp
&lt;br&gt;--- ../kaffeine/src/kaffeine.cpp	2009-11-24 23:27:03.000000000 +0100
&lt;br&gt;+++ ./src/kaffeine.cpp	2009-11-24 23:44:23.000000000 +0100
&lt;br&gt;@@ -327,6 +327,15 @@
&lt;br&gt;&amp;nbsp;	// initialize dbus objects
&lt;br&gt;&amp;nbsp;	QDBusConnection::sessionBus().registerObject(&amp;quot;/&amp;quot;, new MprisRootObject(this),
&lt;br&gt;&amp;nbsp;		QDBusConnection::ExportAllContents);
&lt;br&gt;+	QDBusConnection::sessionBus().registerObject(&amp;quot;/Player&amp;quot;, new MprisPlayerObject(mediaWidget),
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;QDBusConnection::ExportAllContents);
&lt;br&gt;+	QDBusConnection::sessionBus().registerObject(&amp;quot;/TrackList&amp;quot;, new MprisTrackListObject(mediaWidget),
&lt;br&gt;+		QDBusConnection::ExportAllContents);
&lt;br&gt;+	QDBusConnection::sessionBus().registerObject(&amp;quot;/DVB&amp;quot;, new MprisDvbObject(mediaWidget),
&lt;br&gt;+		QDBusConnection::ExportAllContents);
&lt;br&gt;+	QDBusConnection::sessionBus().registerObject(&amp;quot;/Display&amp;quot;, new MprisDisplayObject(mediaWidget),
&lt;br&gt;+		QDBusConnection::ExportAllContents);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	QDBusConnection::sessionBus().registerService(&amp;quot;org.mpris.kaffeine&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	show();
&lt;br&gt;diff -Naur ../kaffeine/src/mediawidget.cpp ./src/mediawidget.cpp
&lt;br&gt;--- ../kaffeine/src/mediawidget.cpp	2009-11-24 23:27:03.000000000 +0100
&lt;br&gt;+++ ./src/mediawidget.cpp	2009-11-24 23:44:23.000000000 +0100
&lt;br&gt;@@ -374,6 +374,8 @@
&lt;br&gt;&amp;nbsp;	connect(timer, SIGNAL(timeout()), this, SLOT(checkScreenSaver()));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	stateChanged(Phonon::StoppedState);
&lt;br&gt;+
&lt;br&gt;+	setRepeat(false);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;MediaWidget::~MediaWidget()
&lt;br&gt;@@ -543,6 +545,67 @@
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+bool MediaWidget::isPaused()
&lt;br&gt;+{
&lt;br&gt;+	if (playing &amp;&amp; mediaObject-&amp;gt;state() == Phonon::PausedState)
&lt;br&gt;+	{
&lt;br&gt;+		return true;
&lt;br&gt;+	}
&lt;br&gt;+	return false;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+// also returns true when paused
&lt;br&gt;+bool MediaWidget::isPlaying()
&lt;br&gt;+{
&lt;br&gt;+	return playing;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::setRepeat(bool repeat_)
&lt;br&gt;+{
&lt;br&gt;+	repeat = repeat_;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+bool MediaWidget::isRepeat()
&lt;br&gt;+{
&lt;br&gt;+	return repeat;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+bool MediaWidget::hasMedia()
&lt;br&gt;+{
&lt;br&gt;+	if ( mediaObject-&amp;gt;currentSource().type() != Phonon::MediaSource::Invalid ) {
&lt;br&gt;+		return true;
&lt;br&gt;+	}
&lt;br&gt;+	else {
&lt;br&gt;+		return false;
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::setDvbChannel(int number)
&lt;br&gt;+{
&lt;br&gt;+	if (dvbFeed != NULL) {
&lt;br&gt;+		emit changeDvbChannel(number);
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::setDvbChannel(const QString &amp;name)
&lt;br&gt;+{
&lt;br&gt;+	if (dvbFeed != NULL) {
&lt;br&gt;+		emit changeDvbChannel(name);
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::setDvbLastChannel()
&lt;br&gt;+{
&lt;br&gt;+	if (dvbFeed != NULL) {
&lt;br&gt;+		emit dvbLastChannel();
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::fullScreen()
&lt;br&gt;+{
&lt;br&gt;+	emit toggleFullScreen();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;void MediaWidget::stateChanged(Phonon::State state)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	bool newPlaying = false;
&lt;br&gt;@@ -655,6 +718,31 @@
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+void MediaWidget::playPause() {
&lt;br&gt;+	//if (actionPlayPause-&amp;gt;text() == textPlay) {
&lt;br&gt;+	if (isPaused()) {
&lt;br&gt;+		playPause(false);
&lt;br&gt;+	}
&lt;br&gt;+	else {
&lt;br&gt;+		playPause(true);
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::play() {
&lt;br&gt;+	if (playing &amp;&amp; actionPlayPause-&amp;gt;text() == textPlay) {
&lt;br&gt;+		playPause(false);
&lt;br&gt;+	}
&lt;br&gt;+	else if (!playing) {
&lt;br&gt;+		emit playlistPlay();
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::pause() {
&lt;br&gt;+	if (playing &amp;&amp; actionPlayPause-&amp;gt;text() == textPause) {
&lt;br&gt;+		playPause(true);
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;void MediaWidget::stop()
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	mediaObject-&amp;gt;stop();
&lt;br&gt;@@ -726,6 +814,17 @@
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+int MediaWidget::getVolume()
&lt;br&gt;+{
&lt;br&gt;+	int volume = audioOutput-&amp;gt;volume() * 100;
&lt;br&gt;+
&lt;br&gt;+	if ( volume &amp;gt;= 0 &amp;&amp; volume &amp;lt;= 100 ) {
&lt;br&gt;+		return volume;
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	return 0;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;void MediaWidget::changeVolume(int volume)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	audioOutput-&amp;gt;setVolume(volume * qreal(0.01));
&lt;br&gt;@@ -915,6 +1014,16 @@
&lt;br&gt;&amp;nbsp;	mediaObject-&amp;gt;seek(mediaObject-&amp;gt;currentTime() + 1000 * longSkipDuration);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+void MediaWidget::setPosition(int position)
&lt;br&gt;+{
&lt;br&gt;+	mediaObject-&amp;gt;seek(position);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MediaWidget::getPosition()
&lt;br&gt;+{
&lt;br&gt;+	return mediaObject-&amp;gt;currentTime();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;void MediaWidget::jumpToPosition()
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	JumpToPositionDialog dialog(QTime().addMSecs(mediaObject-&amp;gt;currentTime()), this);
&lt;br&gt;@@ -1150,3 +1259,64 @@
&lt;br&gt;&amp;nbsp;		subtitleBox-&amp;gt;setEnabled(false);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+QVariantMap MediaWidget::getMetadata()
&lt;br&gt;+{
&lt;br&gt;+	QVariantMap ret;
&lt;br&gt;+	QMultiMap&amp;lt;QString, QString&amp;gt; multiMap = mediaObject-&amp;gt;metaData();
&lt;br&gt;+	QMultiMap&amp;lt;QString, QString&amp;gt;::const_iterator i = multiMap.constBegin();
&lt;br&gt;+	
&lt;br&gt;+	while( i != multiMap.constEnd() )
&lt;br&gt;+	{
&lt;br&gt;+		ret[ i.key() ] = QVariant( i.value() );
&lt;br&gt;+		i++;
&lt;br&gt;+	}
&lt;br&gt;+	return ret;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int getNumberOfTracks()
&lt;br&gt;+{
&lt;br&gt;+	//TODO
&lt;br&gt;+	return 0;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MediaWidget::getCurrentTrack()
&lt;br&gt;+{
&lt;br&gt;+	//TODO
&lt;br&gt;+	return 0;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MediaWidget::getLength()
&lt;br&gt;+{
&lt;br&gt;+	//TODO
&lt;br&gt;+	return 0;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MediaWidget::addTrack(QString track, bool play)
&lt;br&gt;+{
&lt;br&gt;+	//TODO
&lt;br&gt;+	return 0;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::delTrack(int position)
&lt;br&gt;+{
&lt;br&gt;+	//TODO
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::setLoop(bool loop)
&lt;br&gt;+{
&lt;br&gt;+	setRepeat(loop);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::setRandom(bool random)
&lt;br&gt;+{
&lt;br&gt;+	//TODO
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::setNumber(int number)
&lt;br&gt;+{
&lt;br&gt;+	if (number &amp;gt;= 0 &amp;&amp; number &amp;lt;= 9) {
&lt;br&gt;+		emit osdKeyPressed(number + Qt::Key_0);
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;diff -Naur ../kaffeine/src/mediawidget.h ./src/mediawidget.h
&lt;br&gt;--- ../kaffeine/src/mediawidget.h	2009-11-24 23:27:03.000000000 +0100
&lt;br&gt;+++ ./src/mediawidget.h	2009-11-24 23:44:27.000000000 +0100
&lt;br&gt;@@ -48,9 +48,14 @@
&lt;br&gt;&amp;nbsp;class MediaWidget : public QWidget
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	Q_OBJECT
&lt;br&gt;+	friend class MprisPlayerObject;
&lt;br&gt;+	friend class MprisTrackListObject;
&lt;br&gt;+	friend class MprisDvbObject;
&lt;br&gt;+	friend class MprisDisplayObject;	
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;public:
&lt;br&gt;&amp;nbsp;	MediaWidget(KMenu *menu_, KAction *fullScreenAction, KToolBar *toolBar,
&lt;br&gt;-		 &amp;nbsp; &amp;nbsp;KActionCollection *collection, QWidget *parent);
&lt;br&gt;+			KActionCollection *collection, QWidget *parent);
&lt;br&gt;&amp;nbsp;	~MediaWidget();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	static QString extensionFilter(); // usable for KFileDialog::setFilter()
&lt;br&gt;@@ -78,6 +83,12 @@
&lt;br&gt;&amp;nbsp;	void setShortSkipDuration(int duration);
&lt;br&gt;&amp;nbsp;	void setLongSkipDuration(int duration);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	void setRepeat(bool repeat_);
&lt;br&gt;+	bool isRepeat();
&lt;br&gt;+	bool hasMedia();
&lt;br&gt;+
&lt;br&gt;+	void setNumber(int number);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;public slots:
&lt;br&gt;&amp;nbsp;	void stop();
&lt;br&gt;&amp;nbsp;	void stopDvb();
&lt;br&gt;@@ -98,14 +109,35 @@
&lt;br&gt;&amp;nbsp;	void startDvbTimeShift();
&lt;br&gt;&amp;nbsp;	void changeDvbAudioChannel(int index);
&lt;br&gt;&amp;nbsp;	void changeDvbSubtitle(int index);
&lt;br&gt;+	void changeDvbChannel(int number);
&lt;br&gt;+	void changeDvbChannel(const QString &amp;name);
&lt;br&gt;&amp;nbsp;	void dvbStopped();
&lt;br&gt;&amp;nbsp;	void osdKeyPressed(int key);
&lt;br&gt;+	void toggleOsd();
&lt;br&gt;+
&lt;br&gt;+	void dvbLastChannel();
&lt;br&gt;+	void toggleInstantRecord();
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;private slots:
&lt;br&gt;+	bool isPlaying();
&lt;br&gt;+	bool isPaused();
&lt;br&gt;+
&lt;br&gt;+	int getPosition();
&lt;br&gt;+	int getCurrentTrack();
&lt;br&gt;+	int getLength();
&lt;br&gt;+	int addTrack(QString track, bool play);
&lt;br&gt;+	int getVolume();
&lt;br&gt;+
&lt;br&gt;+	QVariantMap getMetadata();
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	void stateChanged(Phonon::State state);
&lt;br&gt;&amp;nbsp;	void playbackFinished();
&lt;br&gt;&amp;nbsp;	void previous();
&lt;br&gt;&amp;nbsp;	void playPause(bool paused);
&lt;br&gt;+	void playPause();
&lt;br&gt;+	void play();
&lt;br&gt;+	void pause();
&lt;br&gt;&amp;nbsp;	void next();
&lt;br&gt;&amp;nbsp;	void changeAudioChannel(int index);
&lt;br&gt;&amp;nbsp;	void changeSubtitle(int index);
&lt;br&gt;@@ -132,6 +164,7 @@
&lt;br&gt;&amp;nbsp;	void skipForward();
&lt;br&gt;&amp;nbsp;	void longSkipForward();
&lt;br&gt;&amp;nbsp;	void jumpToPosition();
&lt;br&gt;+	void setPosition(int position);
&lt;br&gt;&amp;nbsp;	void timeButtonClicked();
&lt;br&gt;&amp;nbsp;	void updateTimeButton();
&lt;br&gt;&amp;nbsp;	void updateCaption();
&lt;br&gt;@@ -144,6 +177,17 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	void checkScreenSaver();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	void setDvbChannel(int number);
&lt;br&gt;+	void setDvbChannel(const QString &amp;name);
&lt;br&gt;+	void setDvbLastChannel();
&lt;br&gt;+	
&lt;br&gt;+	void fullScreen();
&lt;br&gt;+
&lt;br&gt;+	void delTrack(int position);
&lt;br&gt;+	void setLoop(bool loop);
&lt;br&gt;+	void setRandom(bool random);
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;private:
&lt;br&gt;&amp;nbsp;	void contextMenuEvent(QContextMenuEvent *event);
&lt;br&gt;&amp;nbsp;	void mouseDoubleClickEvent(QMouseEvent *);
&lt;br&gt;@@ -204,6 +248,8 @@
&lt;br&gt;&amp;nbsp;	KAction *jumpToPositionAction;
&lt;br&gt;&amp;nbsp;	QPushButton *timeButton;
&lt;br&gt;&amp;nbsp;	bool showElapsedTime;
&lt;br&gt;+	bool repeat;
&lt;br&gt;+	int inputNumber;
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;#endif /* MEDIAWIDGET_H */
&lt;br&gt;diff -Naur ../kaffeine/src/playlist/playlistmodel.cpp ./src/playlist/playlistmodel.cpp
&lt;br&gt;--- ../kaffeine/src/playlist/playlistmodel.cpp	2009-11-24 23:27:03.000000000 +0100
&lt;br&gt;+++ ./src/playlist/playlistmodel.cpp	2009-11-24 23:27:04.000000000 +0100
&lt;br&gt;@@ -48,6 +48,7 @@
&lt;br&gt;&amp;nbsp;	QAbstractTableModel(parent), mediaWidget(mediaWidget_), repeat(false)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	setSupportedDragActions(Qt::MoveAction);
&lt;br&gt;+	mediaWidget-&amp;gt;setRepeat(false);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	connect(mediaWidget, SIGNAL(playlistPrevious()), this, SLOT(playPreviousTrack()));
&lt;br&gt;&amp;nbsp;	connect(mediaWidget, SIGNAL(playlistPlay()), this, SLOT(playCurrentTrack()));
&lt;br&gt;@@ -351,6 +352,7 @@
&lt;br&gt;&amp;nbsp;void PlaylistModel::repeatPlaylist(bool repeat_)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	repeat = repeat_;
&lt;br&gt;+	mediaWidget-&amp;gt;setRepeat(repeat);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static bool playlistIndexLess(const PlaylistTrack &amp;x, const PlaylistTrack &amp;y)
&lt;br&gt;&lt;br /&gt;------------------------------------------------------------------------------
&lt;br&gt;Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
&lt;br&gt;trial. Simplify your report design, integration and deployment - and focus on 
&lt;br&gt;what you do best, core application coding. Discover what's new with
&lt;br&gt;Crystal Reports now. &amp;nbsp;&lt;a href=&quot;http://p.sf.net/sfu/bobj-july&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/bobj-july&lt;/a&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;kaffeine-devel mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26504736&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-devel@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-devel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-devel&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-devel-f3473.html&quot; embed=&quot;fixTarget[3473]&quot; target=&quot;_top&quot; &gt;kaffeine-devel&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/dbus-support-for-kaffeine-tp26128565p26504736.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26542949</id>
	<title>Re: Kaffeine Scans, Kaffeine Won't Play</title>
	<published>2009-11-23T10:38:15Z</published>
	<updated>2009-11-23T10:38:15Z</updated>
	<author>
		<name>Justin Piszcz</name>
	</author>
	<content type="html">&lt;br&gt;&lt;br&gt;On Mon, 23 Nov 2009, Joel Mayer wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Dear Fellow Kaffeine Users-
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I am on a dual boot lap top running Windows XP Pro and SuSE Linux
&lt;br&gt;&amp;gt; 11.1. I have a Hauppauge 1950 (model 1192) USB tv box which I am
&lt;br&gt;&amp;gt; certain is configured properly. The correct drivers, firmware, and
&lt;br&gt;&amp;gt; firmware extractor, were provided for me by Justin Piszcz.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; When I type in as root from a terminal:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; mplayer -vf yadif /dev/video1
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I am able to watch one single cable tv channel.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; New to Kaffeine, I am able to scan for channels but have not been
&lt;br&gt;&amp;gt; able to get any single one of them to play. When I type in as root:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; kaffeine -vf yadif /dev/video1 the message I get is:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; kbuild sycoca running ... /dev/dvb/adaptor0/frontend0 : opened
&lt;br&gt;&amp;gt; (Samsung S5H1411 QAM/8VSB Frontend) 0 EPG plugins loaded
&lt;br&gt;&amp;gt; for device 0 : 0 Loaded epg data : 0 events ( 0 msecs )
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Can you tell me what this means? Do you have any suggestions?
&lt;br&gt;&amp;gt; (I live in the state of Michigan, so the cable tv broadcast format
&lt;br&gt;&amp;gt; I need will probably be different from yours.)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Thanks / Joel Mayer / &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26542949&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;joelm_armillary@...&lt;/a&gt;&amp;lt;mailto:&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26542949&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;joelm_armillary@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;Hi Joel,
&lt;br&gt;&lt;br&gt;It looks like you need to set the channel via v4lctl:
&lt;br&gt;&lt;a href=&quot;http://klk64.com/wintv-hvr-1950/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://klk64.com/wintv-hvr-1950/&lt;/a&gt;&lt;br&gt;&lt;br&gt;The command:
&lt;br&gt;v4lctl setchannel ##
&lt;br&gt;&lt;br&gt;So:
&lt;br&gt;v4lctl setchannel 10
&lt;br&gt;v4lctl setchannel 11
&lt;br&gt;&lt;br&gt;Let me know if this works, I'd be curious, I do not have a regular cable 
&lt;br&gt;box, only DVR and the stream is encrypted so I cannot test, thanks :)
&lt;br&gt;&lt;br&gt;Justin.
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
&lt;br&gt;trial. Simplify your report design, integration and deployment - and focus on 
&lt;br&gt;what you do best, core application coding. Discover what's new with
&lt;br&gt;Crystal Reports now. &amp;nbsp;&lt;a href=&quot;http://p.sf.net/sfu/bobj-july&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/bobj-july&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;kaffeine-user mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26542949&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-user@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-user-f3474.html&quot; embed=&quot;fixTarget[3474]&quot; target=&quot;_top&quot; &gt;kaffeine-user&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Kaffeine-Scans%2C-Kaffeine-Won%27t-Play-tp26483108p26542949.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26483108</id>
	<title>Kaffeine Scans, Kaffeine Won't Play</title>
	<published>2009-11-23T10:05:12Z</published>
	<updated>2009-11-23T10:05:12Z</updated>
	<author>
		<name>Joel Mayer</name>
	</author>
	<content type="html">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0 Transitional//EN&quot;&gt;
&lt;HTML&gt;&lt;HEAD&gt;
&lt;META content=text/html;charset=iso-8859-1 http-equiv=Content-Type&gt;


&lt;META name=GENERATOR content=&quot;MSHTML 8.00.6001.18852&quot;&gt;&lt;/HEAD&gt;
&lt;BODY style=&quot;BORDER-BOTTOM-STYLE: none; BORDER-RIGHT-STYLE: none; FONT-STYLE: normal; PADDING-LEFT: 10px; FONT-FAMILY: Verdana; BORDER-TOP-STYLE: none; COLOR: #000000; FONT-SIZE: 10pt; BORDER-LEFT-STYLE: none; FONT-WEIGHT: normal; TEXT-DECORATION: none; PADDING-TOP: 15px&quot; id=MailContainerBody leftMargin=0 topMargin=0 acc_role=&quot;text&quot; CanvasTabStop=&quot;true&quot; name=&quot;Compose message area&quot;&gt;&lt;!--[gte IE 5]&gt;&lt;?xml:namespace prefix=&quot;v&quot; /&gt;&lt;?xml:namespace prefix=&quot;o&quot; /&gt;&lt;![endif]--&gt;
&lt;DIV&gt;Dear Fellow Kaffeine Users-&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;
&lt;DIV&gt;I am on a dual boot lap top running Windows XP Pro and SuSE Linux&lt;/DIV&gt;
&lt;DIV&gt;11.1. I have a Hauppauge 1950 (model 1192) USB tv box which I am&lt;/DIV&gt;
&lt;DIV&gt;certain is configured properly. The correct drivers, firmware, and&lt;/DIV&gt;
&lt;DIV&gt;firmware extractor, were provided for me by Justin Piszcz.&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;When I type in as root from a&amp;nbsp;terminal: &lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;mplayer -vf yadif /dev/video1 &lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;I am able to watch one single cable tv channel.&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;New&amp;nbsp;to Kaffeine, I am able to scan for channels but have not 
been&lt;/DIV&gt;
&lt;DIV&gt;able to get any single one of them to play. When I type in as root:&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;kaffeine -vf yadif /dev/video1 the message I get is:&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;kbuild sycoca running ... /dev/dvb/adaptor0/frontend0 : opened&lt;/DIV&gt;
&lt;DIV&gt;(Samsung S5H1411 QAM/8VSB Frontend) 0 EPG plugins loaded&lt;/DIV&gt;
&lt;DIV&gt;for device 0 : 0 Loaded epg data : 0 events ( 0 msecs )&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Can you tell me what this means? Do you have any suggestions? &lt;/DIV&gt;
&lt;DIV&gt;(I live in the state of Michigan, so the cable tv broadcast format &lt;/DIV&gt;
&lt;DIV&gt;I need will probably be different from yours.)&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Thanks / Joel Mayer / &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483108&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;joelm_armillary@...&lt;/a&gt; &lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;
&lt;br /&gt;------------------------------------------------------------------------------
&lt;br&gt;Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
&lt;br&gt;trial. Simplify your report design, integration and deployment - and focus on 
&lt;br&gt;what you do best, core application coding. Discover what's new with
&lt;br&gt;Crystal Reports now. &amp;nbsp;&lt;a href=&quot;http://p.sf.net/sfu/bobj-july&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/bobj-july&lt;/a&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;kaffeine-user mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483108&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-user@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-user-f3474.html&quot; embed=&quot;fixTarget[3474]&quot; target=&quot;_top&quot; &gt;kaffeine-user&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Kaffeine-Scans%2C-Kaffeine-Won%27t-Play-tp26483108p26483108.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26476166</id>
	<title>Re: dbus support for kaffeine</title>
	<published>2009-11-23T03:14:28Z</published>
	<updated>2009-11-23T03:14:28Z</updated>
	<author>
		<name>Pascal Pollet</name>
	</author>
	<content type="html">I forgot to add a check if the parameter is a single digit integer in 
&lt;br&gt;the MediaWidget::setNumber(int) function, here is the new patch, please 
&lt;br&gt;forget the other one...
&lt;br&gt;&lt;br&gt;ciao,
&lt;br&gt;Pascal
&lt;br&gt;&lt;br&gt;Pascal schrieb:
&lt;div class='shrinkable-quote'&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I now added the SetNumber(int) function to enter numbers with multiple 
&lt;br&gt;&amp;gt; digits, that was really easy, as the code to enter numbers with the 
&lt;br&gt;&amp;gt; keyboard was already there. I didn't notice it before because there is 
&lt;br&gt;&amp;gt; one problem left with this code: entering numbers with the keyboard 
&lt;br&gt;&amp;gt; has no effect if the DvbChannelView has the focus, in this case you 
&lt;br&gt;&amp;gt; have to click into the picture before to make it work. Number-key 
&lt;br&gt;&amp;gt; events in the DvbChannelView should maybe be redirected somehow to the 
&lt;br&gt;&amp;gt; MediaWidget class...
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I also removed some debugging code that was still present in my last 
&lt;br&gt;&amp;gt; patch, sorry...
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The patch is against the actual svn trunk again (revision 1053111)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ciao,
&lt;br&gt;&amp;gt; Pascal
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Pascal schrieb:
&lt;br&gt;&amp;gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ok, here is the actual state of things. The mpris methods are all 
&lt;br&gt;&amp;gt;&amp;gt; implemented, with a few stubs left: a few /TrackList methods still 
&lt;br&gt;&amp;gt;&amp;gt; need to be implemented, but I will try to do it soon. The /Player 
&lt;br&gt;&amp;gt;&amp;gt; Repeat() function is also a stub, because the playlist does not allow 
&lt;br&gt;&amp;gt;&amp;gt; to repeat a single track yet. Also the GetCaps () function is 
&lt;br&gt;&amp;gt;&amp;gt; incomplete.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; I put much methods into the /Player object which are not part of the 
&lt;br&gt;&amp;gt;&amp;gt; mpris specs, because it wouldn't make much sense to make a separate 
&lt;br&gt;&amp;gt;&amp;gt; object for them. I think it should be ok, but if you don't agree, 
&lt;br&gt;&amp;gt;&amp;gt; please tell me, it' not difficult to change...
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; I made a DVB/ object for dvb-related stuff and a Display/ object for 
&lt;br&gt;&amp;gt;&amp;gt; methods like toggleFullScreen, I'm not sure if &amp;quot;Display&amp;quot; is the best 
&lt;br&gt;&amp;gt;&amp;gt; name for that...
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; There is still a need for a method that allows to enter channel 
&lt;br&gt;&amp;gt;&amp;gt; numbers with more than one digit with a remote control (or with the 
&lt;br&gt;&amp;gt;&amp;gt; keyboard), I will try to do this in the next time, as for me it's the 
&lt;br&gt;&amp;gt;&amp;gt; most important feature which is still missing.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; I changed all dbus functions to begin with a capital letter, to be 
&lt;br&gt;&amp;gt;&amp;gt; consistent with the mpris methods.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; All this isn't thoroughly tested at all and rather crude, and there 
&lt;br&gt;&amp;gt;&amp;gt; should certainly be more error checking, but I think this is true for 
&lt;br&gt;&amp;gt;&amp;gt; almost all the rest of the app also, so it should be ok for the 
&lt;br&gt;&amp;gt;&amp;gt; beginning ;)
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; changing the channel works, but I didn't manage to have the selection
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; changed to the new channel in the DvbChannelView tree. I don't know 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; how to
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; get a valid QModelIndex that points to the correct DvbChannelModel. 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Please
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; look at the code and at my comments in DvbTab::setChannel(int 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; number). I
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tried almost everything and thereby learned a lot about the model / 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; view
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; concept of Qt, but it didn't help me to find the solution... Maybe you
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; already know this probem Christoph, because there is the same issue 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; when
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; kaffeine gets started with the &amp;quot;--tv &amp;lt;channel&amp;gt;&amp;quot; flag: it simply calls
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; DvbTab::playChannel(const QString &amp;name), but it does not select 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the channel
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; in the DvbChannelView. The problem is that afterwards, calls to
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; MediaWidget::previous() and next() have no effect, because the 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; currently
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; selected channel is not known. I hope that someone more clever than 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; me will
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; solve this issue ;)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Yes, this one is trickier. Note that there exists a similar problem
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; e.g. with playPause(): you also need to update the ui state.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt; I now found a solution (although I don't know if it's the best), but 
&lt;br&gt;&amp;gt;&amp;gt; I don't recognize what should be updated when the playPause() method 
&lt;br&gt;&amp;gt;&amp;gt; is called, &amp;nbsp;you have a better overview for sure...
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ciao,
&lt;br&gt;&amp;gt;&amp;gt; Pascal
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Christoph Pfister schrieb:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; 2009/11/6 Pascal Pollet &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26476166&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pascal@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; here is what I've done so far, I think it should add enough d-bus 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; to make
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; most users happy, including me :) Please look at it and tell me 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; what you
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; think of it...
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; It's a very good starting point. There exists a mediaplayer dbus
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; specification MPRIS [1], which I consider worth to implement (so that
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; we don't add yet another dbus interface for common functionality).
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; I've committed preliminary support to svn (the &amp;quot;root&amp;quot; object). Could
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; you please adapt your patch to that concept (i.e. add a tracklist and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; player object; in case of need just method stubs)? I'm aware of the
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; fact that the actions defined in that specification don't 100% map
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Kaffeine's actions (e.g. Play() doing a rewind to the beginning of a
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; track), so you don't have to care about those details if you don't
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; want to do. I also know that not every mpris thing is possible
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; (especially the tracklist parts needs more work) and that there's not
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; a mpris thing for every action Kaffeine is able to perform (put them
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; in a separate object for now).
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; There is one problem left, when selecting a new DVB-channel 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; directly by name
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; or by number, with the (new) functions:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; dvbTab::setChannel(const QString &amp;name)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; DvbTab::setChannel(int number)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; changing the channel works, but I didn't manage to have the selection
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; changed to the new channel in the DvbChannelView tree. I don't know 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; how to
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; get a valid QModelIndex that points to the correct DvbChannelModel. 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Please
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; look at the code and at my comments in DvbTab::setChannel(int 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; number). I
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tried almost everything and thereby learned a lot about the model / 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; view
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; concept of Qt, but it didn't help me to find the solution... Maybe you
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; already know this probem Christoph, because there is the same issue 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; when
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; kaffeine gets started with the &amp;quot;--tv &amp;lt;channel&amp;gt;&amp;quot; flag: it simply calls
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; DvbTab::playChannel(const QString &amp;name), but it does not select 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the channel
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; in the DvbChannelView. The problem is that afterwards, calls to
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; MediaWidget::previous() and next() have no effect, because the 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; currently
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; selected channel is not known. I hope that someone more clever than 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; me will
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; solve this issue ;)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Yes, this one is trickier. Note that there exists a similar problem
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; e.g. with playPause(): you also need to update the ui state.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; cheers,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Pascal
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Thanks,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Christoph
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [1] &lt;a href=&quot;http://wiki.xmms2.xmms.se/wiki/MPRIS&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://wiki.xmms2.xmms.se/wiki/MPRIS&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;diff -Naur ../kaffeine/src/dbusobjects.cpp ./src/dbusobjects.cpp
&lt;br&gt;--- ../kaffeine/src/dbusobjects.cpp	2009-11-23 11:06:04.000000000 +0100
&lt;br&gt;+++ ./src/dbusobjects.cpp	2009-11-23 12:09:12.000000000 +0100
&lt;br&gt;@@ -23,6 +23,9 @@
&lt;br&gt;&amp;nbsp;#include &amp;lt;QDBusMetaType&amp;gt;
&lt;br&gt;&amp;nbsp;#include &amp;lt;KAboutData&amp;gt;
&lt;br&gt;&amp;nbsp;#include &amp;lt;KApplication&amp;gt;
&lt;br&gt;+#include &amp;lt;KUrl&amp;gt;
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;mediawidget.h&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;QDBusArgument &amp;operator&amp;lt;&amp;lt;(QDBusArgument &amp;argument, const MprisVersionStruct &amp;versionStruct)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;@@ -40,9 +43,27 @@
&lt;br&gt;&amp;nbsp;	return argument;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+QDBusArgument &amp;operator&amp;lt;&amp;lt;(QDBusArgument &amp;argument, const MprisStatusStruct &amp;statusStruct)
&lt;br&gt;+{
&lt;br&gt;+	argument.beginStructure();
&lt;br&gt;+	argument &amp;lt;&amp;lt; statusStruct.play &amp;lt;&amp;lt; statusStruct.random &amp;lt;&amp;lt; statusStruct.repeatTrack &amp;lt;&amp;lt; statusStruct.repeatAll;
&lt;br&gt;+	argument.endStructure();
&lt;br&gt;+	return argument;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+const QDBusArgument &amp;operator&amp;gt;&amp;gt;(const QDBusArgument &amp;argument, MprisStatusStruct &amp;statusStruct)
&lt;br&gt;+{
&lt;br&gt;+	argument.beginStructure();
&lt;br&gt;+	argument &amp;gt;&amp;gt; statusStruct.play &amp;gt;&amp;gt; statusStruct.random &amp;gt;&amp;gt; statusStruct.repeatTrack &amp;gt;&amp;gt; statusStruct.repeatAll;
&lt;br&gt;+	argument.endStructure();
&lt;br&gt;+	return argument;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;MprisRootObject::MprisRootObject(QObject *parent) : QObject(parent)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	 qDBusRegisterMetaType&amp;lt;MprisVersionStruct&amp;gt;();
&lt;br&gt;+	 qDBusRegisterMetaType&amp;lt;MprisStatusStruct&amp;gt;();
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;MprisRootObject::~MprisRootObject()
&lt;br&gt;@@ -67,3 +88,325 @@
&lt;br&gt;&amp;nbsp;	versionStruct.minor = 0;
&lt;br&gt;&amp;nbsp;	return versionStruct;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+MprisPlayerObject::MprisPlayerObject(MediaWidget *mediaWidget_): mediaWidget(mediaWidget_)
&lt;br&gt;+{ }
&lt;br&gt;+
&lt;br&gt;+MprisPlayerObject::~MprisPlayerObject()
&lt;br&gt;+{ }
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::Next()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;next();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::Prev()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;previous();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::PlayPause()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;playPause();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::Play()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;play();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::Pause()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;pause();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MprisPlayerObject::VolumeGet()
&lt;br&gt;+{
&lt;br&gt;+	return mediaWidget-&amp;gt;getVolume();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::VolumeSet(int volume)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;changeVolume(volume);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::VolumeIncrease()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;increaseVolume();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::VolumeDecrease()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;decreaseVolume();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MprisPlayerObject::PositionGet()
&lt;br&gt;+{
&lt;br&gt;+	return mediaWidget-&amp;gt;getPosition();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::PositionSet(int position)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;setPosition(position);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::Repeat()
&lt;br&gt;+{
&lt;br&gt;+	//TODO
&lt;br&gt;+	//repeating a single track not implemented yet, only whole playlist
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MprisPlayerObject::GetCaps()
&lt;br&gt;+{
&lt;br&gt;+	int caps = NO_CAPS;
&lt;br&gt;+
&lt;br&gt;+	if ( mediaWidget-&amp;gt;hasMedia() ) 
&lt;br&gt;+	{
&lt;br&gt;+		if ( mediaWidget-&amp;gt;isPlaying() &amp;&amp; ! mediaWidget-&amp;gt;isPaused() )
&lt;br&gt;+		{
&lt;br&gt;+			caps |= CAN_PAUSE;
&lt;br&gt;+		}
&lt;br&gt;+		else 
&lt;br&gt;+		{
&lt;br&gt;+			caps |= CAN_PLAY;
&lt;br&gt;+		}
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	caps |= CAN_HAS_TRACKLIST;
&lt;br&gt;+
&lt;br&gt;+	//TODO: CAN_GO_NEXT &amp; CAN_GO_PREV &amp; CAN_PROVIDE_METADATA
&lt;br&gt;+
&lt;br&gt;+	return caps;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::Stop()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;stop();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+MprisStatusStruct MprisPlayerObject::GetStatus()
&lt;br&gt;+{
&lt;br&gt;+	MprisStatusStruct statusStruct;
&lt;br&gt;+	if ( mediaWidget-&amp;gt;isPaused() )
&lt;br&gt;+	{
&lt;br&gt;+		statusStruct.play = 1;
&lt;br&gt;+	}
&lt;br&gt;+	else if ( mediaWidget-&amp;gt;isPlaying() )
&lt;br&gt;+	{
&lt;br&gt;+		statusStruct.play = 0;
&lt;br&gt;+	}
&lt;br&gt;+	else
&lt;br&gt;+	{
&lt;br&gt;+		statusStruct.play = 2;
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	if ( mediaWidget-&amp;gt;isRepeat() )
&lt;br&gt;+	{
&lt;br&gt;+		statusStruct.repeatAll = 1;
&lt;br&gt;+	}
&lt;br&gt;+	else
&lt;br&gt;+	{
&lt;br&gt;+		statusStruct.repeatAll = 0;
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	statusStruct.random = 0;
&lt;br&gt;+	statusStruct.repeatTrack = 0;
&lt;br&gt;+	
&lt;br&gt;+	return statusStruct;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+QVariantMap MprisPlayerObject::GetMetadata()
&lt;br&gt;+{
&lt;br&gt;+	return mediaWidget-&amp;gt;getMetadata();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::Play(const QString &amp;url)
&lt;br&gt;+{
&lt;br&gt;+	KUrl kurl(url);
&lt;br&gt;+	if (kurl.isValid()) {
&lt;br&gt;+		mediaWidget-&amp;gt;play(kurl);
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::PlayAudioCd()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;playAudioCd();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::PlayVideoCd()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;playVideoCd();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::PlayDvd()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;playDvd();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void &amp;nbsp;MprisPlayerObject::ChangeAudioChannel(int index)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;changeAudioChannel(index);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void &amp;nbsp;MprisPlayerObject::ChangeSubtitle(int index)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;changeSubtitle(index);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::ToggleMuted()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;toggleMuted();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::LongSkipBackward()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;longSkipBackward();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::SkipBackward()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;skipBackward();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::SkipForward()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;skipForward();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::LongSkipForward()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;longSkipForward();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::TimeButtonClicked()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;timeButtonClicked();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::UpdateTimeButton()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;updateTimeButton();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+MprisTrackListObject::MprisTrackListObject(MediaWidget *mediaWidget_): mediaWidget(mediaWidget_)
&lt;br&gt;+{ }
&lt;br&gt;+
&lt;br&gt;+MprisTrackListObject::~MprisTrackListObject()
&lt;br&gt;+{ }
&lt;br&gt;+
&lt;br&gt;+QVariantMap MprisTrackListObject::GetMetadata()
&lt;br&gt;+{
&lt;br&gt;+	return mediaWidget-&amp;gt;getMetadata();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MprisTrackListObject::GetCurrentTrack()
&lt;br&gt;+{
&lt;br&gt;+	return mediaWidget-&amp;gt;getCurrentTrack();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MprisTrackListObject::GetLength()
&lt;br&gt;+{
&lt;br&gt;+	return mediaWidget-&amp;gt;getLength();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MprisTrackListObject::AddTrack(QString track, bool play)
&lt;br&gt;+{
&lt;br&gt;+	return mediaWidget-&amp;gt;addTrack(track, play);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisTrackListObject::DelTrack(int position)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;delTrack(position);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisTrackListObject::SetLoop(bool loop)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;setLoop(loop);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisTrackListObject::SetRandom(bool random)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;setRandom(random);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+MprisDvbObject::MprisDvbObject(MediaWidget *mediaWidget_): mediaWidget(mediaWidget_)
&lt;br&gt;+{ }
&lt;br&gt;+
&lt;br&gt;+MprisDvbObject::~MprisDvbObject()
&lt;br&gt;+{ }
&lt;br&gt;+
&lt;br&gt;+void MprisDvbObject::SetDvbChannel(const QString &amp;name)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;setDvbChannel(name);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDvbObject::SetDvbChannelNumber(int number)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;setDvbChannel(number);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDvbObject::SetNumber(int number)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;setNumber(number);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDvbObject::SetDvbLastChannel()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;setDvbLastChannel();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDvbObject::StopDvb()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;stopDvb();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDvbObject::ToggleInstantRecord()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;toggleInstantRecord();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDvbObject::ToggleOsd()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;toggleOsd();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+MprisDisplayObject::MprisDisplayObject(MediaWidget *mediaWidget_): mediaWidget(mediaWidget_)
&lt;br&gt;+{ }
&lt;br&gt;+
&lt;br&gt;+MprisDisplayObject::~MprisDisplayObject()
&lt;br&gt;+{ }
&lt;br&gt;+
&lt;br&gt;+void MprisDisplayObject::ToggleFullScreen()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;fullScreen();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDisplayObject::AspectRatioAuto()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;aspectRatioAuto();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDisplayObject::AspectRatio4_3()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;aspectRatio4_3();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDisplayObject::AspectRatio16_9()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;aspectRatio16_9();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDisplayObject::AspectRatioWidget()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;aspectRatioWidget();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;diff -Naur ../kaffeine/src/dbusobjects.h ./src/dbusobjects.h
&lt;br&gt;--- ../kaffeine/src/dbusobjects.h	2009-11-23 11:06:04.000000000 +0100
&lt;br&gt;+++ ./src/dbusobjects.h	2009-11-23 12:09:12.000000000 +0100
&lt;br&gt;@@ -22,8 +22,12 @@
&lt;br&gt;&amp;nbsp;#define DBUSOBJECTS_H
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;#include &amp;lt;QMetaType&amp;gt;
&lt;br&gt;+#include &amp;lt;QVariantMap&amp;gt;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;struct MprisVersionStruct;
&lt;br&gt;+struct MprisStatusStruct;
&lt;br&gt;+
&lt;br&gt;+class MediaWidget;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;class MprisRootObject : public QObject
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;@@ -39,6 +43,130 @@
&lt;br&gt;&amp;nbsp;	MprisVersionStruct MprisVersion();
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+
&lt;br&gt;+class MprisPlayerObject : public QObject
&lt;br&gt;+{
&lt;br&gt;+	Q_OBJECT
&lt;br&gt;+	Q_CLASSINFO(&amp;quot;D-Bus Interface&amp;quot;, &amp;quot;org.freedesktop.MediaPlayer&amp;quot;)
&lt;br&gt;+public:
&lt;br&gt;+	explicit MprisPlayerObject(MediaWidget *mediaWidget_);
&lt;br&gt;+	~MprisPlayerObject();
&lt;br&gt;+
&lt;br&gt;+public slots:
&lt;br&gt;+	void Next();
&lt;br&gt;+	void Prev();
&lt;br&gt;+	void Play();
&lt;br&gt;+	void Pause();
&lt;br&gt;+	void Stop();
&lt;br&gt;+	int &amp;nbsp;VolumeGet();
&lt;br&gt;+	void VolumeSet(int volume);
&lt;br&gt;+	int &amp;nbsp;PositionGet();
&lt;br&gt;+	void PositionSet(int position);
&lt;br&gt;+	void Repeat();
&lt;br&gt;+	MprisStatusStruct GetStatus();
&lt;br&gt;+	QVariantMap GetMetadata();
&lt;br&gt;+	int GetCaps();
&lt;br&gt;+
&lt;br&gt;+	// this functions are not part of the MPRIS specs
&lt;br&gt;+	void PlayPause();
&lt;br&gt;+	void VolumeIncrease();
&lt;br&gt;+	void VolumeDecrease();
&lt;br&gt;+	void Play(const QString &amp;url);
&lt;br&gt;+	void PlayAudioCd();
&lt;br&gt;+	void PlayVideoCd();
&lt;br&gt;+	void PlayDvd();
&lt;br&gt;+	void ChangeAudioChannel(int index);
&lt;br&gt;+	void ChangeSubtitle(int index);
&lt;br&gt;+	void ToggleMuted();
&lt;br&gt;+	void LongSkipBackward();
&lt;br&gt;+	void SkipBackward();
&lt;br&gt;+	void SkipForward();
&lt;br&gt;+	void LongSkipForward();
&lt;br&gt;+	void TimeButtonClicked();
&lt;br&gt;+	void UpdateTimeButton();
&lt;br&gt;+
&lt;br&gt;+signals:
&lt;br&gt;+	void CapsChange( int );
&lt;br&gt;+	void StatusChange( MprisStatusStruct );
&lt;br&gt;+	void TrackChange( QVariantMap );
&lt;br&gt;+
&lt;br&gt;+private:
&lt;br&gt;+	MediaWidget *mediaWidget;
&lt;br&gt;+
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+class MprisTrackListObject : public QObject
&lt;br&gt;+{
&lt;br&gt;+	Q_OBJECT
&lt;br&gt;+	Q_CLASSINFO(&amp;quot;D-Bus Interface&amp;quot;, &amp;quot;org.freedesktop.MediaPlayer&amp;quot;)
&lt;br&gt;+public:
&lt;br&gt;+	explicit MprisTrackListObject(MediaWidget *mediaWidget_);
&lt;br&gt;+	~MprisTrackListObject();
&lt;br&gt;+
&lt;br&gt;+public slots:
&lt;br&gt;+	QVariantMap GetMetadata();
&lt;br&gt;+	int GetCurrentTrack();
&lt;br&gt;+	int GetLength();
&lt;br&gt;+	int AddTrack(QString track, bool play);
&lt;br&gt;+	void DelTrack(int position);
&lt;br&gt;+	void SetLoop(bool loop);
&lt;br&gt;+	void SetRandom(bool random);
&lt;br&gt;+
&lt;br&gt;+signals:
&lt;br&gt;+	void TrackListChange(int);
&lt;br&gt;+
&lt;br&gt;+private:
&lt;br&gt;+	MediaWidget *mediaWidget;
&lt;br&gt;+
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+class MprisDvbObject : public QObject
&lt;br&gt;+{
&lt;br&gt;+	Q_OBJECT
&lt;br&gt;+	Q_CLASSINFO(&amp;quot;D-Bus Interface&amp;quot;, &amp;quot;org.freedesktop.MediaPlayer&amp;quot;)
&lt;br&gt;+public:
&lt;br&gt;+	explicit MprisDvbObject(MediaWidget *mediaWidget_);
&lt;br&gt;+	~MprisDvbObject();
&lt;br&gt;+
&lt;br&gt;+public slots:
&lt;br&gt;+	void SetDvbChannel(const QString &amp;name);
&lt;br&gt;+	void SetDvbChannelNumber(int number);
&lt;br&gt;+	void SetNumber(int number);
&lt;br&gt;+	void SetDvbLastChannel();
&lt;br&gt;+	void StopDvb();
&lt;br&gt;+	void ToggleInstantRecord();
&lt;br&gt;+	void ToggleOsd();
&lt;br&gt;+
&lt;br&gt;+private:
&lt;br&gt;+	MediaWidget *mediaWidget;
&lt;br&gt;+
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+class MprisDisplayObject : public QObject
&lt;br&gt;+{
&lt;br&gt;+	Q_OBJECT
&lt;br&gt;+	Q_CLASSINFO(&amp;quot;D-Bus Interface&amp;quot;, &amp;quot;org.freedesktop.MediaPlayer&amp;quot;)
&lt;br&gt;+public:
&lt;br&gt;+	explicit MprisDisplayObject(MediaWidget *mediaWidget_);
&lt;br&gt;+	~MprisDisplayObject();
&lt;br&gt;+
&lt;br&gt;+public slots:
&lt;br&gt;+	void AspectRatioAuto();
&lt;br&gt;+	void AspectRatio4_3();
&lt;br&gt;+	void AspectRatio16_9();
&lt;br&gt;+	void AspectRatioWidget();
&lt;br&gt;+	void ToggleFullScreen();
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+private:
&lt;br&gt;+	MediaWidget *mediaWidget;
&lt;br&gt;+
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;struct MprisVersionStruct
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	quint16 major;
&lt;br&gt;@@ -47,4 +175,30 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;Q_DECLARE_METATYPE(MprisVersionStruct)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+struct MprisStatusStruct
&lt;br&gt;+{
&lt;br&gt;+	quint16 play;
&lt;br&gt;+	quint16 random;
&lt;br&gt;+	quint16 repeatTrack;
&lt;br&gt;+	quint16 repeatAll;
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+Q_DECLARE_METATYPE(MprisStatusStruct)
&lt;br&gt;+
&lt;br&gt;+/**
&lt;br&gt;+* The bit values for the capabilities flags
&lt;br&gt;+*/
&lt;br&gt;+enum Cap {
&lt;br&gt;+	NO_CAPS			 &amp;nbsp; = 0,
&lt;br&gt;+	CAN_GO_NEXT		 &amp;nbsp; = 1 &amp;lt;&amp;lt; 0,
&lt;br&gt;+	CAN_GO_PREV		 &amp;nbsp; = 1 &amp;lt;&amp;lt; 1,
&lt;br&gt;+	CAN_PAUSE			 = 1 &amp;lt;&amp;lt; 2,
&lt;br&gt;+	CAN_PLAY			 &amp;nbsp;= 1 &amp;lt;&amp;lt; 3,
&lt;br&gt;+	CAN_SEEK			 &amp;nbsp;= 1 &amp;lt;&amp;lt; 4,
&lt;br&gt;+	CAN_PROVIDE_METADATA &amp;nbsp;= 1 &amp;lt;&amp;lt; 5,
&lt;br&gt;+	CAN_HAS_TRACKLIST	 = 1 &amp;lt;&amp;lt; 6,
&lt;br&gt;+	ALL_KNOWN_CAPS		= (1 &amp;lt;&amp;lt; 7) - 1
&lt;br&gt;+};
&lt;br&gt;+Q_DECLARE_FLAGS(Caps, Cap)
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;#endif /* DBUSOBJECTS_H */
&lt;br&gt;diff -Naur ../kaffeine/src/dvb/dvbtab.cpp ./src/dvb/dvbtab.cpp
&lt;br&gt;--- ../kaffeine/src/dvb/dvbtab.cpp	2009-11-23 11:06:03.000000000 +0100
&lt;br&gt;+++ ./src/dvb/dvbtab.cpp	2009-11-23 12:09:12.000000000 +0100
&lt;br&gt;@@ -117,6 +117,10 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	connect(mediaWidget, SIGNAL(previousDvbChannel()), this, SLOT(previousChannel()));
&lt;br&gt;&amp;nbsp;	connect(mediaWidget, SIGNAL(nextDvbChannel()), this, SLOT(nextChannel()));
&lt;br&gt;+	connect(mediaWidget, SIGNAL(changeDvbChannel(const QString&amp;)), this, SLOT(setChannel(const QString&amp;)));
&lt;br&gt;+	connect(mediaWidget, SIGNAL(changeDvbChannel(int)), this, SLOT(setChannel(int)));
&lt;br&gt;+	connect(mediaWidget, SIGNAL(dvbLastChannel()), this, SLOT(setLastChannel()));
&lt;br&gt;+	connect(mediaWidget, SIGNAL(toggleInstantRecord()), this, SLOT(toggleInstantRecord()));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	connect(manager-&amp;gt;getRecordingManager(), SIGNAL(instantRecordingRemoved()),
&lt;br&gt;&amp;nbsp;		this, SLOT(instantRecordingRemoved()));
&lt;br&gt;@@ -144,7 +148,7 @@
&lt;br&gt;&amp;nbsp;	channelView-&amp;gt;setRootIsDecorated(false);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	if (!channelView-&amp;gt;header()-&amp;gt;restoreState(QByteArray::fromBase64(
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;KGlobal::config()-&amp;gt;group(&amp;quot;DVB&amp;quot;).readEntry(&amp;quot;ChannelViewState&amp;quot;, QByteArray())))) {
&lt;br&gt;+		KGlobal::config()-&amp;gt;group(&amp;quot;DVB&amp;quot;).readEntry(&amp;quot;ChannelViewState&amp;quot;, QByteArray())))) {
&lt;br&gt;&amp;nbsp;		channelView-&amp;gt;sortByColumn(0, Qt::AscendingOrder);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -210,6 +214,11 @@
&lt;br&gt;&amp;nbsp;	playChannel(manager-&amp;gt;getChannelModel()-&amp;gt;channelForName(name));
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+void DvbTab::playChannel(int number)
&lt;br&gt;+{
&lt;br&gt;+	playChannel(manager-&amp;gt;getChannelModel()-&amp;gt;channelForNumber(number));
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;void DvbTab::playLastChannel()
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	playChannel(KGlobal::config()-&amp;gt;group(&amp;quot;DVB&amp;quot;).readEntry(&amp;quot;LastChannel&amp;quot;));
&lt;br&gt;@@ -244,6 +253,19 @@
&lt;br&gt;&amp;nbsp;	dialog.exec();
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+void DvbTab::toggleInstantRecord()
&lt;br&gt;+{
&lt;br&gt;+	if (instantRecordAction-&amp;gt;isChecked()) {
&lt;br&gt;+		instantRecordAction-&amp;gt;setChecked(false);
&lt;br&gt;+		instantRecord(false);
&lt;br&gt;+	}
&lt;br&gt;+	else {
&lt;br&gt;+		instantRecordAction-&amp;gt;setChecked(true);
&lt;br&gt;+		instantRecord(true);
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;void DvbTab::instantRecord(bool checked)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	if (checked) {
&lt;br&gt;@@ -351,4 +373,73 @@
&lt;br&gt;&amp;nbsp;	if (channel != NULL) {
&lt;br&gt;&amp;nbsp;		manager-&amp;gt;getLiveView()-&amp;gt;playChannel(channel);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;+
&lt;br&gt;+	QModelIndex index = channelView-&amp;gt;indexAt(QPoint(0,0));
&lt;br&gt;+
&lt;br&gt;+	if (!index.isValid()) {
&lt;br&gt;+		return;
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	DvbChannelModel *channelModel = (DvbChannelModel*) index.model();
&lt;br&gt;+
&lt;br&gt;+	QModelIndexList list = channelModel-&amp;gt;match(channelModel-&amp;gt;index(0, 0), Qt::DisplayRole, channel-&amp;gt;name, 1, Qt::MatchExactly);
&lt;br&gt;+	QModelIndex index_new = list.value(0);
&lt;br&gt;+
&lt;br&gt;+	if (!index_new.isValid()) {
&lt;br&gt;+		return;
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	channelView-&amp;gt;setCurrentIndex(index_new);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+void DvbTab::setChannel(const QString &amp;name)
&lt;br&gt;+{
&lt;br&gt;+	QModelIndex index = channelView-&amp;gt;indexAt(QPoint(0,0));
&lt;br&gt;+
&lt;br&gt;+	if (!index.isValid()) {
&lt;br&gt;+		return;
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	DvbChannelModel *channelModel = (DvbChannelModel*) index.model();
&lt;br&gt;+
&lt;br&gt;+	QModelIndexList list = channelModel-&amp;gt;match(channelModel-&amp;gt;index(0, 0), Qt::DisplayRole, name, 1, Qt::MatchExactly);
&lt;br&gt;+	QModelIndex index_new = list.value(0);
&lt;br&gt;+
&lt;br&gt;+	if (!index_new.isValid()) {
&lt;br&gt;+		return;
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	channelView-&amp;gt;setCurrentIndex(index_new);
&lt;br&gt;+
&lt;br&gt;+	playChannel(name);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DvbTab::setChannel(int number)
&lt;br&gt;+{
&lt;br&gt;+
&lt;br&gt;+	QModelIndex index = channelView-&amp;gt;indexAt(QPoint(0,0));
&lt;br&gt;+
&lt;br&gt;+	if (!index.isValid()) {
&lt;br&gt;+		return;
&lt;br&gt;+	}
&lt;br&gt;+	
&lt;br&gt;+	DvbChannelModel *channelModel = (DvbChannelModel*) index.model();
&lt;br&gt;+
&lt;br&gt;+	QModelIndexList list = channelModel-&amp;gt;match(channelModel-&amp;gt;index(0, 1), Qt::DisplayRole, number, 1, Qt::MatchExactly);
&lt;br&gt;+	QModelIndex index_new = list.value(0);
&lt;br&gt;+
&lt;br&gt;+	if (!index_new.isValid()) {
&lt;br&gt;+		return;
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	channelView-&amp;gt;setCurrentIndex(index_new);
&lt;br&gt;+	playChannel(number);
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DvbTab::setLastChannel()
&lt;br&gt;+{
&lt;br&gt;+	playLastChannel();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;diff -Naur ../kaffeine/src/dvb/dvbtab.h ./src/dvb/dvbtab.h
&lt;br&gt;--- ../kaffeine/src/dvb/dvbtab.h	2009-11-23 11:06:02.000000000 +0100
&lt;br&gt;+++ ./src/dvb/dvbtab.h	2009-11-23 12:09:12.000000000 +0100
&lt;br&gt;@@ -38,11 +38,13 @@
&lt;br&gt;&amp;nbsp;class DvbTab : public TabBase
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	Q_OBJECT
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;public:
&lt;br&gt;&amp;nbsp;	DvbTab(KMenu *menu, KActionCollection *collection, MediaWidget *mediaWidget_);
&lt;br&gt;&amp;nbsp;	~DvbTab();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	void playChannel(const QString &amp;name);
&lt;br&gt;+	void playChannel(int number);
&lt;br&gt;&amp;nbsp;	void playLastChannel();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	void enableDvbDump();
&lt;br&gt;@@ -52,12 +54,16 @@
&lt;br&gt;&amp;nbsp;	void showEpgDialog();
&lt;br&gt;&amp;nbsp;	void showRecordingDialog();
&lt;br&gt;&amp;nbsp;	void instantRecord(bool checked);
&lt;br&gt;+	void toggleInstantRecord();
&lt;br&gt;&amp;nbsp;	void instantRecordingRemoved();
&lt;br&gt;&amp;nbsp;	void configureDvb();
&lt;br&gt;&amp;nbsp;	void playLive(const QModelIndex &amp;index);
&lt;br&gt;&amp;nbsp;	void previousChannel();
&lt;br&gt;&amp;nbsp;	void nextChannel();
&lt;br&gt;&amp;nbsp;	void cleanTimeShiftFiles();
&lt;br&gt;+	void setChannel(const QString &amp;name);
&lt;br&gt;+	void setChannel(int number);
&lt;br&gt;+	void setLastChannel();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;private:
&lt;br&gt;&amp;nbsp;	void activate();
&lt;br&gt;diff -Naur ../kaffeine/src/kaffeine.cpp ./src/kaffeine.cpp
&lt;br&gt;--- ../kaffeine/src/kaffeine.cpp	2009-11-23 11:06:04.000000000 +0100
&lt;br&gt;+++ ./src/kaffeine.cpp	2009-11-23 12:09:12.000000000 +0100
&lt;br&gt;@@ -327,6 +327,15 @@
&lt;br&gt;&amp;nbsp;	// initialize dbus objects
&lt;br&gt;&amp;nbsp;	QDBusConnection::sessionBus().registerObject(&amp;quot;/&amp;quot;, new MprisRootObject(this),
&lt;br&gt;&amp;nbsp;		QDBusConnection::ExportAllContents);
&lt;br&gt;+	QDBusConnection::sessionBus().registerObject(&amp;quot;/Player&amp;quot;, new MprisPlayerObject(mediaWidget),
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;QDBusConnection::ExportAllContents);
&lt;br&gt;+	QDBusConnection::sessionBus().registerObject(&amp;quot;/TrackList&amp;quot;, new MprisTrackListObject(mediaWidget),
&lt;br&gt;+		QDBusConnection::ExportAllContents);
&lt;br&gt;+	QDBusConnection::sessionBus().registerObject(&amp;quot;/DVB&amp;quot;, new MprisDvbObject(mediaWidget),
&lt;br&gt;+		QDBusConnection::ExportAllContents);
&lt;br&gt;+	QDBusConnection::sessionBus().registerObject(&amp;quot;/Display&amp;quot;, new MprisDisplayObject(mediaWidget),
&lt;br&gt;+		QDBusConnection::ExportAllContents);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	QDBusConnection::sessionBus().registerService(&amp;quot;org.mpris.kaffeine&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	show();
&lt;br&gt;diff -Naur ../kaffeine/src/mediawidget.cpp ./src/mediawidget.cpp
&lt;br&gt;--- ../kaffeine/src/mediawidget.cpp	2009-11-23 11:06:02.000000000 +0100
&lt;br&gt;+++ ./src/mediawidget.cpp	2009-11-23 12:09:12.000000000 +0100
&lt;br&gt;@@ -374,6 +374,8 @@
&lt;br&gt;&amp;nbsp;	connect(timer, SIGNAL(timeout()), this, SLOT(checkScreenSaver()));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	stateChanged(Phonon::StoppedState);
&lt;br&gt;+
&lt;br&gt;+	setRepeat(false);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;MediaWidget::~MediaWidget()
&lt;br&gt;@@ -543,6 +545,67 @@
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+bool MediaWidget::isPaused()
&lt;br&gt;+{
&lt;br&gt;+	if (playing &amp;&amp; mediaObject-&amp;gt;state() == Phonon::PausedState)
&lt;br&gt;+	{
&lt;br&gt;+		return true;
&lt;br&gt;+	}
&lt;br&gt;+	return false;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+// also returns true when paused
&lt;br&gt;+bool MediaWidget::isPlaying()
&lt;br&gt;+{
&lt;br&gt;+	return playing;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::setRepeat(bool repeat_)
&lt;br&gt;+{
&lt;br&gt;+	repeat = repeat_;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+bool MediaWidget::isRepeat()
&lt;br&gt;+{
&lt;br&gt;+	return repeat;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+bool MediaWidget::hasMedia()
&lt;br&gt;+{
&lt;br&gt;+	if ( mediaObject-&amp;gt;currentSource().type() != Phonon::MediaSource::Invalid ) {
&lt;br&gt;+		return true;
&lt;br&gt;+	}
&lt;br&gt;+	else {
&lt;br&gt;+		return false;
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::setDvbChannel(int number)
&lt;br&gt;+{
&lt;br&gt;+	if (dvbFeed != NULL) {
&lt;br&gt;+		emit changeDvbChannel(number);
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::setDvbChannel(const QString &amp;name)
&lt;br&gt;+{
&lt;br&gt;+	if (dvbFeed != NULL) {
&lt;br&gt;+		emit changeDvbChannel(name);
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::setDvbLastChannel()
&lt;br&gt;+{
&lt;br&gt;+	if (dvbFeed != NULL) {
&lt;br&gt;+		emit dvbLastChannel();
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::fullScreen()
&lt;br&gt;+{
&lt;br&gt;+	emit toggleFullScreen();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;void MediaWidget::stateChanged(Phonon::State state)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	bool newPlaying = false;
&lt;br&gt;@@ -551,6 +614,7 @@
&lt;br&gt;&amp;nbsp;		case Phonon::BufferingState:
&lt;br&gt;&amp;nbsp;		case Phonon::PlayingState:
&lt;br&gt;&amp;nbsp;		case Phonon::PausedState:
&lt;br&gt;+			paused = true;
&lt;br&gt;&amp;nbsp;			newPlaying = true;
&lt;br&gt;&amp;nbsp;			break;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -655,6 +719,31 @@
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+void MediaWidget::playPause() {
&lt;br&gt;+	//if (actionPlayPause-&amp;gt;text() == textPlay) {
&lt;br&gt;+	if (isPaused()) {
&lt;br&gt;+		playPause(false);
&lt;br&gt;+	}
&lt;br&gt;+	else {
&lt;br&gt;+		playPause(true);
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::play() {
&lt;br&gt;+	if (playing &amp;&amp; actionPlayPause-&amp;gt;text() == textPlay) {
&lt;br&gt;+		playPause(false);
&lt;br&gt;+	}
&lt;br&gt;+	else if (!playing) {
&lt;br&gt;+		emit playlistPlay();
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::pause() {
&lt;br&gt;+	if (playing &amp;&amp; actionPlayPause-&amp;gt;text() == textPause) {
&lt;br&gt;+		playPause(true);
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;void MediaWidget::stop()
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	mediaObject-&amp;gt;stop();
&lt;br&gt;@@ -726,6 +815,17 @@
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+int MediaWidget::getVolume()
&lt;br&gt;+{
&lt;br&gt;+	int volume = audioOutput-&amp;gt;volume() * 100;
&lt;br&gt;+
&lt;br&gt;+	if ( volume &amp;gt;= 0 &amp;&amp; volume &amp;lt;= 100 ) {
&lt;br&gt;+		return volume;
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	return 0;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;void MediaWidget::changeVolume(int volume)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	audioOutput-&amp;gt;setVolume(volume * qreal(0.01));
&lt;br&gt;@@ -915,6 +1015,16 @@
&lt;br&gt;&amp;nbsp;	mediaObject-&amp;gt;seek(mediaObject-&amp;gt;currentTime() + 1000 * longSkipDuration);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+void MediaWidget::setPosition(int position)
&lt;br&gt;+{
&lt;br&gt;+	mediaObject-&amp;gt;seek(position);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MediaWidget::getPosition()
&lt;br&gt;+{
&lt;br&gt;+	return mediaObject-&amp;gt;currentTime();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;void MediaWidget::jumpToPosition()
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	JumpToPositionDialog dialog(QTime().addMSecs(mediaObject-&amp;gt;currentTime()), this);
&lt;br&gt;@@ -1150,3 +1260,64 @@
&lt;br&gt;&amp;nbsp;		subtitleBox-&amp;gt;setEnabled(false);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+QVariantMap MediaWidget::getMetadata()
&lt;br&gt;+{
&lt;br&gt;+	QVariantMap ret;
&lt;br&gt;+	QMultiMap&amp;lt;QString, QString&amp;gt; multiMap = mediaObject-&amp;gt;metaData();
&lt;br&gt;+	QMultiMap&amp;lt;QString, QString&amp;gt;::const_iterator i = multiMap.constBegin();
&lt;br&gt;+	
&lt;br&gt;+	while( i != multiMap.constEnd() )
&lt;br&gt;+	{
&lt;br&gt;+		ret[ i.key() ] = QVariant( i.value() );
&lt;br&gt;+		i++;
&lt;br&gt;+	}
&lt;br&gt;+	return ret;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int getNumberOfTracks()
&lt;br&gt;+{
&lt;br&gt;+	//TODO
&lt;br&gt;+	return 0;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MediaWidget::getCurrentTrack()
&lt;br&gt;+{
&lt;br&gt;+	//TODO
&lt;br&gt;+	return 0;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MediaWidget::getLength()
&lt;br&gt;+{
&lt;br&gt;+	//TODO
&lt;br&gt;+	return 0;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MediaWidget::addTrack(QString track, bool play)
&lt;br&gt;+{
&lt;br&gt;+	//TODO
&lt;br&gt;+	return 0;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::delTrack(int position)
&lt;br&gt;+{
&lt;br&gt;+	//TODO
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::setLoop(bool loop)
&lt;br&gt;+{
&lt;br&gt;+	setRepeat(loop);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::setRandom(bool random)
&lt;br&gt;+{
&lt;br&gt;+	//TODO
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::setNumber(int number)
&lt;br&gt;+{
&lt;br&gt;+	if (number &amp;gt;= 0 &amp;&amp; number &amp;lt;= 9) {
&lt;br&gt;+		emit osdKeyPressed(number + Qt::Key_0);
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;diff -Naur ../kaffeine/src/mediawidget.h ./src/mediawidget.h
&lt;br&gt;--- ../kaffeine/src/mediawidget.h	2009-11-23 11:06:03.000000000 +0100
&lt;br&gt;+++ ./src/mediawidget.h	2009-11-23 12:09:12.000000000 +0100
&lt;br&gt;@@ -48,9 +48,14 @@
&lt;br&gt;&amp;nbsp;class MediaWidget : public QWidget
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	Q_OBJECT
&lt;br&gt;+	friend class MprisPlayerObject;
&lt;br&gt;+	friend class MprisTrackListObject;
&lt;br&gt;+	friend class MprisDvbObject;
&lt;br&gt;+	friend class MprisDisplayObject;	
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;public:
&lt;br&gt;&amp;nbsp;	MediaWidget(KMenu *menu_, KAction *fullScreenAction, KToolBar *toolBar,
&lt;br&gt;-		 &amp;nbsp; &amp;nbsp;KActionCollection *collection, QWidget *parent);
&lt;br&gt;+			KActionCollection *collection, QWidget *parent);
&lt;br&gt;&amp;nbsp;	~MediaWidget();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	static QString extensionFilter(); // usable for KFileDialog::setFilter()
&lt;br&gt;@@ -78,6 +83,12 @@
&lt;br&gt;&amp;nbsp;	void setShortSkipDuration(int duration);
&lt;br&gt;&amp;nbsp;	void setLongSkipDuration(int duration);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	void setRepeat(bool repeat_);
&lt;br&gt;+	bool isRepeat();
&lt;br&gt;+	bool hasMedia();
&lt;br&gt;+
&lt;br&gt;+	void setNumber(int number);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;public slots:
&lt;br&gt;&amp;nbsp;	void stop();
&lt;br&gt;&amp;nbsp;	void stopDvb();
&lt;br&gt;@@ -98,14 +109,35 @@
&lt;br&gt;&amp;nbsp;	void startDvbTimeShift();
&lt;br&gt;&amp;nbsp;	void changeDvbAudioChannel(int index);
&lt;br&gt;&amp;nbsp;	void changeDvbSubtitle(int index);
&lt;br&gt;+	void changeDvbChannel(int number);
&lt;br&gt;+	void changeDvbChannel(const QString &amp;name);
&lt;br&gt;&amp;nbsp;	void dvbStopped();
&lt;br&gt;&amp;nbsp;	void osdKeyPressed(int key);
&lt;br&gt;+	void toggleOsd();
&lt;br&gt;+
&lt;br&gt;+	void dvbLastChannel();
&lt;br&gt;+	void toggleInstantRecord();
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;private slots:
&lt;br&gt;+	bool isPlaying();
&lt;br&gt;+	bool isPaused();
&lt;br&gt;+
&lt;br&gt;+	int getPosition();
&lt;br&gt;+	int getCurrentTrack();
&lt;br&gt;+	int getLength();
&lt;br&gt;+	int addTrack(QString track, bool play);
&lt;br&gt;+	int getVolume();
&lt;br&gt;+
&lt;br&gt;+	QVariantMap getMetadata();
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	void stateChanged(Phonon::State state);
&lt;br&gt;&amp;nbsp;	void playbackFinished();
&lt;br&gt;&amp;nbsp;	void previous();
&lt;br&gt;&amp;nbsp;	void playPause(bool paused);
&lt;br&gt;+	void playPause();
&lt;br&gt;+	void play();
&lt;br&gt;+	void pause();
&lt;br&gt;&amp;nbsp;	void next();
&lt;br&gt;&amp;nbsp;	void changeAudioChannel(int index);
&lt;br&gt;&amp;nbsp;	void changeSubtitle(int index);
&lt;br&gt;@@ -132,6 +164,7 @@
&lt;br&gt;&amp;nbsp;	void skipForward();
&lt;br&gt;&amp;nbsp;	void longSkipForward();
&lt;br&gt;&amp;nbsp;	void jumpToPosition();
&lt;br&gt;+	void setPosition(int position);
&lt;br&gt;&amp;nbsp;	void timeButtonClicked();
&lt;br&gt;&amp;nbsp;	void updateTimeButton();
&lt;br&gt;&amp;nbsp;	void updateCaption();
&lt;br&gt;@@ -144,6 +177,17 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	void checkScreenSaver();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	void setDvbChannel(int number);
&lt;br&gt;+	void setDvbChannel(const QString &amp;name);
&lt;br&gt;+	void setDvbLastChannel();
&lt;br&gt;+	
&lt;br&gt;+	void fullScreen();
&lt;br&gt;+
&lt;br&gt;+	void delTrack(int position);
&lt;br&gt;+	void setLoop(bool loop);
&lt;br&gt;+	void setRandom(bool random);
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;private:
&lt;br&gt;&amp;nbsp;	void contextMenuEvent(QContextMenuEvent *event);
&lt;br&gt;&amp;nbsp;	void mouseDoubleClickEvent(QMouseEvent *);
&lt;br&gt;@@ -164,6 +208,7 @@
&lt;br&gt;&amp;nbsp;	Phonon::MediaController *mediaController;
&lt;br&gt;&amp;nbsp;	DvbFeed *dvbFeed;
&lt;br&gt;&amp;nbsp;	bool playing;
&lt;br&gt;+	bool paused;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	KAction *actionPrevious;
&lt;br&gt;&amp;nbsp;	KAction *actionPlayPause;
&lt;br&gt;@@ -204,6 +249,8 @@
&lt;br&gt;&amp;nbsp;	KAction *jumpToPositionAction;
&lt;br&gt;&amp;nbsp;	QPushButton *timeButton;
&lt;br&gt;&amp;nbsp;	bool showElapsedTime;
&lt;br&gt;+	bool repeat;
&lt;br&gt;+	int inputNumber;
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;#endif /* MEDIAWIDGET_H */
&lt;br&gt;diff -Naur ../kaffeine/src/playlist/playlistmodel.cpp ./src/playlist/playlistmodel.cpp
&lt;br&gt;--- ../kaffeine/src/playlist/playlistmodel.cpp	2009-11-23 11:06:03.000000000 +0100
&lt;br&gt;+++ ./src/playlist/playlistmodel.cpp	2009-11-23 12:09:12.000000000 +0100
&lt;br&gt;@@ -48,6 +48,7 @@
&lt;br&gt;&amp;nbsp;	QAbstractTableModel(parent), mediaWidget(mediaWidget_), repeat(false)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	setSupportedDragActions(Qt::MoveAction);
&lt;br&gt;+	mediaWidget-&amp;gt;setRepeat(false);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	connect(mediaWidget, SIGNAL(playlistPrevious()), this, SLOT(playPreviousTrack()));
&lt;br&gt;&amp;nbsp;	connect(mediaWidget, SIGNAL(playlistPlay()), this, SLOT(playCurrentTrack()));
&lt;br&gt;@@ -351,6 +352,7 @@
&lt;br&gt;&amp;nbsp;void PlaylistModel::repeatPlaylist(bool repeat_)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	repeat = repeat_;
&lt;br&gt;+	mediaWidget-&amp;gt;setRepeat(repeat);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static bool playlistIndexLess(const PlaylistTrack &amp;x, const PlaylistTrack &amp;y)
&lt;br&gt;&lt;br /&gt;------------------------------------------------------------------------------
&lt;br&gt;Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
&lt;br&gt;trial. Simplify your report design, integration and deployment - and focus on 
&lt;br&gt;what you do best, core application coding. Discover what's new with
&lt;br&gt;Crystal Reports now. &amp;nbsp;&lt;a href=&quot;http://p.sf.net/sfu/bobj-july&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/bobj-july&lt;/a&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;kaffeine-devel mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26476166&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-devel@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-devel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-devel&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-devel-f3473.html&quot; embed=&quot;fixTarget[3473]&quot; target=&quot;_top&quot; &gt;kaffeine-devel&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/dbus-support-for-kaffeine-tp26128565p26476166.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26475780</id>
	<title>Re: dbus support for kaffeine</title>
	<published>2009-11-23T02:43:09Z</published>
	<updated>2009-11-23T02:43:09Z</updated>
	<author>
		<name>Pascal Pollet</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;I now added the SetNumber(int) function to enter numbers with multiple 
&lt;br&gt;digits, that was really easy, as the code to enter numbers with the 
&lt;br&gt;keyboard was already there. I didn't notice it before because there is 
&lt;br&gt;one problem left with this code: entering numbers with the keyboard has 
&lt;br&gt;no effect if the DvbChannelView has the focus, in this case you have to 
&lt;br&gt;click into the picture before to make it work. Number-key events in the 
&lt;br&gt;DvbChannelView should maybe be redirected somehow to the MediaWidget 
&lt;br&gt;class...
&lt;br&gt;&lt;br&gt;I also removed some debugging code that was still present in my last 
&lt;br&gt;patch, sorry...
&lt;br&gt;&lt;br&gt;The patch is against the actual svn trunk again (revision 1053111)
&lt;br&gt;&lt;br&gt;ciao,
&lt;br&gt;Pascal
&lt;br&gt;&lt;br&gt;&lt;br&gt;Pascal schrieb:
&lt;div class='shrinkable-quote'&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ok, here is the actual state of things. The mpris methods are all 
&lt;br&gt;&amp;gt; implemented, with a few stubs left: a few /TrackList methods still 
&lt;br&gt;&amp;gt; need to be implemented, but I will try to do it soon. The /Player 
&lt;br&gt;&amp;gt; Repeat() function is also a stub, because the playlist does not allow 
&lt;br&gt;&amp;gt; to repeat a single track yet. Also the GetCaps () function is incomplete.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I put much methods into the /Player object which are not part of the 
&lt;br&gt;&amp;gt; mpris specs, because it wouldn't make much sense to make a separate 
&lt;br&gt;&amp;gt; object for them. I think it should be ok, but if you don't agree, 
&lt;br&gt;&amp;gt; please tell me, it' not difficult to change...
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I made a DVB/ object for dvb-related stuff and a Display/ object for 
&lt;br&gt;&amp;gt; methods like toggleFullScreen, I'm not sure if &amp;quot;Display&amp;quot; is the best 
&lt;br&gt;&amp;gt; name for that...
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; There is still a need for a method that allows to enter channel 
&lt;br&gt;&amp;gt; numbers with more than one digit with a remote control (or with the 
&lt;br&gt;&amp;gt; keyboard), I will try to do this in the next time, as for me it's the 
&lt;br&gt;&amp;gt; most important feature which is still missing.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I changed all dbus functions to begin with a capital letter, to be 
&lt;br&gt;&amp;gt; consistent with the mpris methods.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; All this isn't thoroughly tested at all and rather crude, and there 
&lt;br&gt;&amp;gt; should certainly be more error checking, but I think this is true for 
&lt;br&gt;&amp;gt; almost all the rest of the app also, so it should be ok for the 
&lt;br&gt;&amp;gt; beginning ;)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; changing the channel works, but I didn't manage to have the selection
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; changed to the new channel in the DvbChannelView tree. I don't know 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; how to
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; get a valid QModelIndex that points to the correct DvbChannelModel. 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Please
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; look at the code and at my comments in DvbTab::setChannel(int 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; number). I
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; tried almost everything and thereby learned a lot about the model / 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; view
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; concept of Qt, but it didn't help me to find the solution... Maybe you
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; already know this probem Christoph, because there is the same issue 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; when
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; kaffeine gets started with the &amp;quot;--tv &amp;lt;channel&amp;gt;&amp;quot; flag: it simply calls
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; DvbTab::playChannel(const QString &amp;name), but it does not select the 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; channel
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; in the DvbChannelView. The problem is that afterwards, calls to
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; MediaWidget::previous() and next() have no effect, because the 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; currently
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; selected channel is not known. I hope that someone more clever than 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; me will
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; solve this issue ;)
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Yes, this one is trickier. Note that there exists a similar problem
&lt;br&gt;&amp;gt;&amp;gt; e.g. with playPause(): you also need to update the ui state.
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt; I now found a solution (although I don't know if it's the best), but I 
&lt;br&gt;&amp;gt; don't recognize what should be updated when the playPause() method is 
&lt;br&gt;&amp;gt; called, &amp;nbsp;you have a better overview for sure...
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ciao,
&lt;br&gt;&amp;gt; Pascal
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Christoph Pfister schrieb:
&lt;br&gt;&amp;gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; 2009/11/6 Pascal Pollet &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26475780&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pascal@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; here is what I've done so far, I think it should add enough d-bus to 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; make
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; most users happy, including me :) Please look at it and tell me what 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; you
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; think of it...
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; It's a very good starting point. There exists a mediaplayer dbus
&lt;br&gt;&amp;gt;&amp;gt; specification MPRIS [1], which I consider worth to implement (so that
&lt;br&gt;&amp;gt;&amp;gt; we don't add yet another dbus interface for common functionality).
&lt;br&gt;&amp;gt;&amp;gt; I've committed preliminary support to svn (the &amp;quot;root&amp;quot; object). Could
&lt;br&gt;&amp;gt;&amp;gt; you please adapt your patch to that concept (i.e. add a tracklist and
&lt;br&gt;&amp;gt;&amp;gt; player object; in case of need just method stubs)? I'm aware of the
&lt;br&gt;&amp;gt;&amp;gt; fact that the actions defined in that specification don't 100% map
&lt;br&gt;&amp;gt;&amp;gt; Kaffeine's actions (e.g. Play() doing a rewind to the beginning of a
&lt;br&gt;&amp;gt;&amp;gt; track), so you don't have to care about those details if you don't
&lt;br&gt;&amp;gt;&amp;gt; want to do. I also know that not every mpris thing is possible
&lt;br&gt;&amp;gt;&amp;gt; (especially the tracklist parts needs more work) and that there's not
&lt;br&gt;&amp;gt;&amp;gt; a mpris thing for every action Kaffeine is able to perform (put them
&lt;br&gt;&amp;gt;&amp;gt; in a separate object for now).
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; There is one problem left, when selecting a new DVB-channel directly 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; by name
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; or by number, with the (new) functions:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; dvbTab::setChannel(const QString &amp;name)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; DvbTab::setChannel(int number)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; changing the channel works, but I didn't manage to have the selection
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; changed to the new channel in the DvbChannelView tree. I don't know 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; how to
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; get a valid QModelIndex that points to the correct DvbChannelModel. 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Please
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; look at the code and at my comments in DvbTab::setChannel(int 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; number). I
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; tried almost everything and thereby learned a lot about the model / 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; view
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; concept of Qt, but it didn't help me to find the solution... Maybe you
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; already know this probem Christoph, because there is the same issue 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; when
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; kaffeine gets started with the &amp;quot;--tv &amp;lt;channel&amp;gt;&amp;quot; flag: it simply calls
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; DvbTab::playChannel(const QString &amp;name), but it does not select the 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; channel
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; in the DvbChannelView. The problem is that afterwards, calls to
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; MediaWidget::previous() and next() have no effect, because the 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; currently
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; selected channel is not known. I hope that someone more clever than 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; me will
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; solve this issue ;)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Yes, this one is trickier. Note that there exists a similar problem
&lt;br&gt;&amp;gt;&amp;gt; e.g. with playPause(): you also need to update the ui state.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; cheers,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Pascal
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Thanks,
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Christoph
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; [1] &lt;a href=&quot;http://wiki.xmms2.xmms.se/wiki/MPRIS&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://wiki.xmms2.xmms.se/wiki/MPRIS&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;diff -Naur ../kaffeine/src/dbusobjects.cpp ./src/dbusobjects.cpp
&lt;br&gt;--- ../kaffeine/src/dbusobjects.cpp	2009-11-23 11:06:04.000000000 +0100
&lt;br&gt;+++ ./src/dbusobjects.cpp	2009-11-23 11:18:25.000000000 +0100
&lt;br&gt;@@ -23,6 +23,9 @@
&lt;br&gt;&amp;nbsp;#include &amp;lt;QDBusMetaType&amp;gt;
&lt;br&gt;&amp;nbsp;#include &amp;lt;KAboutData&amp;gt;
&lt;br&gt;&amp;nbsp;#include &amp;lt;KApplication&amp;gt;
&lt;br&gt;+#include &amp;lt;KUrl&amp;gt;
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;mediawidget.h&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;QDBusArgument &amp;operator&amp;lt;&amp;lt;(QDBusArgument &amp;argument, const MprisVersionStruct &amp;versionStruct)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;@@ -40,9 +43,27 @@
&lt;br&gt;&amp;nbsp;	return argument;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+QDBusArgument &amp;operator&amp;lt;&amp;lt;(QDBusArgument &amp;argument, const MprisStatusStruct &amp;statusStruct)
&lt;br&gt;+{
&lt;br&gt;+	argument.beginStructure();
&lt;br&gt;+	argument &amp;lt;&amp;lt; statusStruct.play &amp;lt;&amp;lt; statusStruct.random &amp;lt;&amp;lt; statusStruct.repeatTrack &amp;lt;&amp;lt; statusStruct.repeatAll;
&lt;br&gt;+	argument.endStructure();
&lt;br&gt;+	return argument;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+const QDBusArgument &amp;operator&amp;gt;&amp;gt;(const QDBusArgument &amp;argument, MprisStatusStruct &amp;statusStruct)
&lt;br&gt;+{
&lt;br&gt;+	argument.beginStructure();
&lt;br&gt;+	argument &amp;gt;&amp;gt; statusStruct.play &amp;gt;&amp;gt; statusStruct.random &amp;gt;&amp;gt; statusStruct.repeatTrack &amp;gt;&amp;gt; statusStruct.repeatAll;
&lt;br&gt;+	argument.endStructure();
&lt;br&gt;+	return argument;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;MprisRootObject::MprisRootObject(QObject *parent) : QObject(parent)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	 qDBusRegisterMetaType&amp;lt;MprisVersionStruct&amp;gt;();
&lt;br&gt;+	 qDBusRegisterMetaType&amp;lt;MprisStatusStruct&amp;gt;();
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;MprisRootObject::~MprisRootObject()
&lt;br&gt;@@ -67,3 +88,325 @@
&lt;br&gt;&amp;nbsp;	versionStruct.minor = 0;
&lt;br&gt;&amp;nbsp;	return versionStruct;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+MprisPlayerObject::MprisPlayerObject(MediaWidget *mediaWidget_): mediaWidget(mediaWidget_)
&lt;br&gt;+{ }
&lt;br&gt;+
&lt;br&gt;+MprisPlayerObject::~MprisPlayerObject()
&lt;br&gt;+{ }
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::Next()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;next();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::Prev()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;previous();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::PlayPause()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;playPause();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::Play()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;play();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::Pause()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;pause();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MprisPlayerObject::VolumeGet()
&lt;br&gt;+{
&lt;br&gt;+	return mediaWidget-&amp;gt;getVolume();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::VolumeSet(int volume)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;changeVolume(volume);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::VolumeIncrease()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;increaseVolume();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::VolumeDecrease()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;decreaseVolume();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MprisPlayerObject::PositionGet()
&lt;br&gt;+{
&lt;br&gt;+	return mediaWidget-&amp;gt;getPosition();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::PositionSet(int position)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;setPosition(position);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::Repeat()
&lt;br&gt;+{
&lt;br&gt;+	//TODO
&lt;br&gt;+	//repeating a single track not implemented yet, only whole playlist
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MprisPlayerObject::GetCaps()
&lt;br&gt;+{
&lt;br&gt;+	int caps = NO_CAPS;
&lt;br&gt;+
&lt;br&gt;+	if ( mediaWidget-&amp;gt;hasMedia() ) 
&lt;br&gt;+	{
&lt;br&gt;+		if ( mediaWidget-&amp;gt;isPlaying() &amp;&amp; ! mediaWidget-&amp;gt;isPaused() )
&lt;br&gt;+		{
&lt;br&gt;+			caps |= CAN_PAUSE;
&lt;br&gt;+		}
&lt;br&gt;+		else 
&lt;br&gt;+		{
&lt;br&gt;+			caps |= CAN_PLAY;
&lt;br&gt;+		}
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	caps |= CAN_HAS_TRACKLIST;
&lt;br&gt;+
&lt;br&gt;+	//TODO: CAN_GO_NEXT &amp; CAN_GO_PREV &amp; CAN_PROVIDE_METADATA
&lt;br&gt;+
&lt;br&gt;+	return caps;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::Stop()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;stop();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+MprisStatusStruct MprisPlayerObject::GetStatus()
&lt;br&gt;+{
&lt;br&gt;+	MprisStatusStruct statusStruct;
&lt;br&gt;+	if ( mediaWidget-&amp;gt;isPaused() )
&lt;br&gt;+	{
&lt;br&gt;+		statusStruct.play = 1;
&lt;br&gt;+	}
&lt;br&gt;+	else if ( mediaWidget-&amp;gt;isPlaying() )
&lt;br&gt;+	{
&lt;br&gt;+		statusStruct.play = 0;
&lt;br&gt;+	}
&lt;br&gt;+	else
&lt;br&gt;+	{
&lt;br&gt;+		statusStruct.play = 2;
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	if ( mediaWidget-&amp;gt;isRepeat() )
&lt;br&gt;+	{
&lt;br&gt;+		statusStruct.repeatAll = 1;
&lt;br&gt;+	}
&lt;br&gt;+	else
&lt;br&gt;+	{
&lt;br&gt;+		statusStruct.repeatAll = 0;
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	statusStruct.random = 0;
&lt;br&gt;+	statusStruct.repeatTrack = 0;
&lt;br&gt;+	
&lt;br&gt;+	return statusStruct;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+QVariantMap MprisPlayerObject::GetMetadata()
&lt;br&gt;+{
&lt;br&gt;+	return mediaWidget-&amp;gt;getMetadata();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::Play(const QString &amp;url)
&lt;br&gt;+{
&lt;br&gt;+	KUrl kurl(url);
&lt;br&gt;+	if (kurl.isValid()) {
&lt;br&gt;+		mediaWidget-&amp;gt;play(kurl);
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::PlayAudioCd()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;playAudioCd();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::PlayVideoCd()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;playVideoCd();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::PlayDvd()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;playDvd();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void &amp;nbsp;MprisPlayerObject::ChangeAudioChannel(int index)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;changeAudioChannel(index);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void &amp;nbsp;MprisPlayerObject::ChangeSubtitle(int index)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;changeSubtitle(index);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::ToggleMuted()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;toggleMuted();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::LongSkipBackward()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;longSkipBackward();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::SkipBackward()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;skipBackward();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::SkipForward()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;skipForward();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::LongSkipForward()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;longSkipForward();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::TimeButtonClicked()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;timeButtonClicked();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::UpdateTimeButton()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;updateTimeButton();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+MprisTrackListObject::MprisTrackListObject(MediaWidget *mediaWidget_): mediaWidget(mediaWidget_)
&lt;br&gt;+{ }
&lt;br&gt;+
&lt;br&gt;+MprisTrackListObject::~MprisTrackListObject()
&lt;br&gt;+{ }
&lt;br&gt;+
&lt;br&gt;+QVariantMap MprisTrackListObject::GetMetadata()
&lt;br&gt;+{
&lt;br&gt;+	return mediaWidget-&amp;gt;getMetadata();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MprisTrackListObject::GetCurrentTrack()
&lt;br&gt;+{
&lt;br&gt;+	return mediaWidget-&amp;gt;getCurrentTrack();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MprisTrackListObject::GetLength()
&lt;br&gt;+{
&lt;br&gt;+	return mediaWidget-&amp;gt;getLength();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MprisTrackListObject::AddTrack(QString track, bool play)
&lt;br&gt;+{
&lt;br&gt;+	return mediaWidget-&amp;gt;addTrack(track, play);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisTrackListObject::DelTrack(int position)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;delTrack(position);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisTrackListObject::SetLoop(bool loop)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;setLoop(loop);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisTrackListObject::SetRandom(bool random)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;setRandom(random);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+MprisDvbObject::MprisDvbObject(MediaWidget *mediaWidget_): mediaWidget(mediaWidget_)
&lt;br&gt;+{ }
&lt;br&gt;+
&lt;br&gt;+MprisDvbObject::~MprisDvbObject()
&lt;br&gt;+{ }
&lt;br&gt;+
&lt;br&gt;+void MprisDvbObject::SetDvbChannel(const QString &amp;name)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;setDvbChannel(name);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDvbObject::SetDvbChannelNumber(int number)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;setDvbChannel(number);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDvbObject::SetNumber(int number)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;setNumber(number);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDvbObject::SetDvbLastChannel()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;setDvbLastChannel();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDvbObject::StopDvb()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;stopDvb();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDvbObject::ToggleInstantRecord()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;toggleInstantRecord();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDvbObject::ToggleOsd()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;toggleOsd();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+MprisDisplayObject::MprisDisplayObject(MediaWidget *mediaWidget_): mediaWidget(mediaWidget_)
&lt;br&gt;+{ }
&lt;br&gt;+
&lt;br&gt;+MprisDisplayObject::~MprisDisplayObject()
&lt;br&gt;+{ }
&lt;br&gt;+
&lt;br&gt;+void MprisDisplayObject::ToggleFullScreen()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;fullScreen();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDisplayObject::AspectRatioAuto()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;aspectRatioAuto();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDisplayObject::AspectRatio4_3()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;aspectRatio4_3();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDisplayObject::AspectRatio16_9()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;aspectRatio16_9();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDisplayObject::AspectRatioWidget()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;aspectRatioWidget();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;diff -Naur ../kaffeine/src/dbusobjects.h ./src/dbusobjects.h
&lt;br&gt;--- ../kaffeine/src/dbusobjects.h	2009-11-23 11:06:04.000000000 +0100
&lt;br&gt;+++ ./src/dbusobjects.h	2009-11-23 11:18:25.000000000 +0100
&lt;br&gt;@@ -22,8 +22,12 @@
&lt;br&gt;&amp;nbsp;#define DBUSOBJECTS_H
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;#include &amp;lt;QMetaType&amp;gt;
&lt;br&gt;+#include &amp;lt;QVariantMap&amp;gt;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;struct MprisVersionStruct;
&lt;br&gt;+struct MprisStatusStruct;
&lt;br&gt;+
&lt;br&gt;+class MediaWidget;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;class MprisRootObject : public QObject
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;@@ -39,6 +43,130 @@
&lt;br&gt;&amp;nbsp;	MprisVersionStruct MprisVersion();
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+
&lt;br&gt;+class MprisPlayerObject : public QObject
&lt;br&gt;+{
&lt;br&gt;+	Q_OBJECT
&lt;br&gt;+	Q_CLASSINFO(&amp;quot;D-Bus Interface&amp;quot;, &amp;quot;org.freedesktop.MediaPlayer&amp;quot;)
&lt;br&gt;+public:
&lt;br&gt;+	explicit MprisPlayerObject(MediaWidget *mediaWidget_);
&lt;br&gt;+	~MprisPlayerObject();
&lt;br&gt;+
&lt;br&gt;+public slots:
&lt;br&gt;+	void Next();
&lt;br&gt;+	void Prev();
&lt;br&gt;+	void Play();
&lt;br&gt;+	void Pause();
&lt;br&gt;+	void Stop();
&lt;br&gt;+	int &amp;nbsp;VolumeGet();
&lt;br&gt;+	void VolumeSet(int volume);
&lt;br&gt;+	int &amp;nbsp;PositionGet();
&lt;br&gt;+	void PositionSet(int position);
&lt;br&gt;+	void Repeat();
&lt;br&gt;+	MprisStatusStruct GetStatus();
&lt;br&gt;+	QVariantMap GetMetadata();
&lt;br&gt;+	int GetCaps();
&lt;br&gt;+
&lt;br&gt;+	// this functions are not part of the MPRIS specs
&lt;br&gt;+	void PlayPause();
&lt;br&gt;+	void VolumeIncrease();
&lt;br&gt;+	void VolumeDecrease();
&lt;br&gt;+	void Play(const QString &amp;url);
&lt;br&gt;+	void PlayAudioCd();
&lt;br&gt;+	void PlayVideoCd();
&lt;br&gt;+	void PlayDvd();
&lt;br&gt;+	void ChangeAudioChannel(int index);
&lt;br&gt;+	void ChangeSubtitle(int index);
&lt;br&gt;+	void ToggleMuted();
&lt;br&gt;+	void LongSkipBackward();
&lt;br&gt;+	void SkipBackward();
&lt;br&gt;+	void SkipForward();
&lt;br&gt;+	void LongSkipForward();
&lt;br&gt;+	void TimeButtonClicked();
&lt;br&gt;+	void UpdateTimeButton();
&lt;br&gt;+
&lt;br&gt;+signals:
&lt;br&gt;+	void CapsChange( int );
&lt;br&gt;+	void StatusChange( MprisStatusStruct );
&lt;br&gt;+	void TrackChange( QVariantMap );
&lt;br&gt;+
&lt;br&gt;+private:
&lt;br&gt;+	MediaWidget *mediaWidget;
&lt;br&gt;+
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+class MprisTrackListObject : public QObject
&lt;br&gt;+{
&lt;br&gt;+	Q_OBJECT
&lt;br&gt;+	Q_CLASSINFO(&amp;quot;D-Bus Interface&amp;quot;, &amp;quot;org.freedesktop.MediaPlayer&amp;quot;)
&lt;br&gt;+public:
&lt;br&gt;+	explicit MprisTrackListObject(MediaWidget *mediaWidget_);
&lt;br&gt;+	~MprisTrackListObject();
&lt;br&gt;+
&lt;br&gt;+public slots:
&lt;br&gt;+	QVariantMap GetMetadata();
&lt;br&gt;+	int GetCurrentTrack();
&lt;br&gt;+	int GetLength();
&lt;br&gt;+	int AddTrack(QString track, bool play);
&lt;br&gt;+	void DelTrack(int position);
&lt;br&gt;+	void SetLoop(bool loop);
&lt;br&gt;+	void SetRandom(bool random);
&lt;br&gt;+
&lt;br&gt;+signals:
&lt;br&gt;+	void TrackListChange(int);
&lt;br&gt;+
&lt;br&gt;+private:
&lt;br&gt;+	MediaWidget *mediaWidget;
&lt;br&gt;+
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+class MprisDvbObject : public QObject
&lt;br&gt;+{
&lt;br&gt;+	Q_OBJECT
&lt;br&gt;+	Q_CLASSINFO(&amp;quot;D-Bus Interface&amp;quot;, &amp;quot;org.freedesktop.MediaPlayer&amp;quot;)
&lt;br&gt;+public:
&lt;br&gt;+	explicit MprisDvbObject(MediaWidget *mediaWidget_);
&lt;br&gt;+	~MprisDvbObject();
&lt;br&gt;+
&lt;br&gt;+public slots:
&lt;br&gt;+	void SetDvbChannel(const QString &amp;name);
&lt;br&gt;+	void SetDvbChannelNumber(int number);
&lt;br&gt;+	void SetNumber(int number);
&lt;br&gt;+	void SetDvbLastChannel();
&lt;br&gt;+	void StopDvb();
&lt;br&gt;+	void ToggleInstantRecord();
&lt;br&gt;+	void ToggleOsd();
&lt;br&gt;+
&lt;br&gt;+private:
&lt;br&gt;+	MediaWidget *mediaWidget;
&lt;br&gt;+
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+class MprisDisplayObject : public QObject
&lt;br&gt;+{
&lt;br&gt;+	Q_OBJECT
&lt;br&gt;+	Q_CLASSINFO(&amp;quot;D-Bus Interface&amp;quot;, &amp;quot;org.freedesktop.MediaPlayer&amp;quot;)
&lt;br&gt;+public:
&lt;br&gt;+	explicit MprisDisplayObject(MediaWidget *mediaWidget_);
&lt;br&gt;+	~MprisDisplayObject();
&lt;br&gt;+
&lt;br&gt;+public slots:
&lt;br&gt;+	void AspectRatioAuto();
&lt;br&gt;+	void AspectRatio4_3();
&lt;br&gt;+	void AspectRatio16_9();
&lt;br&gt;+	void AspectRatioWidget();
&lt;br&gt;+	void ToggleFullScreen();
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+private:
&lt;br&gt;+	MediaWidget *mediaWidget;
&lt;br&gt;+
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;struct MprisVersionStruct
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	quint16 major;
&lt;br&gt;@@ -47,4 +175,30 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;Q_DECLARE_METATYPE(MprisVersionStruct)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+struct MprisStatusStruct
&lt;br&gt;+{
&lt;br&gt;+	quint16 play;
&lt;br&gt;+	quint16 random;
&lt;br&gt;+	quint16 repeatTrack;
&lt;br&gt;+	quint16 repeatAll;
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+Q_DECLARE_METATYPE(MprisStatusStruct)
&lt;br&gt;+
&lt;br&gt;+/**
&lt;br&gt;+* The bit values for the capabilities flags
&lt;br&gt;+*/
&lt;br&gt;+enum Cap {
&lt;br&gt;+	NO_CAPS			 &amp;nbsp; = 0,
&lt;br&gt;+	CAN_GO_NEXT		 &amp;nbsp; = 1 &amp;lt;&amp;lt; 0,
&lt;br&gt;+	CAN_GO_PREV		 &amp;nbsp; = 1 &amp;lt;&amp;lt; 1,
&lt;br&gt;+	CAN_PAUSE			 = 1 &amp;lt;&amp;lt; 2,
&lt;br&gt;+	CAN_PLAY			 &amp;nbsp;= 1 &amp;lt;&amp;lt; 3,
&lt;br&gt;+	CAN_SEEK			 &amp;nbsp;= 1 &amp;lt;&amp;lt; 4,
&lt;br&gt;+	CAN_PROVIDE_METADATA &amp;nbsp;= 1 &amp;lt;&amp;lt; 5,
&lt;br&gt;+	CAN_HAS_TRACKLIST	 = 1 &amp;lt;&amp;lt; 6,
&lt;br&gt;+	ALL_KNOWN_CAPS		= (1 &amp;lt;&amp;lt; 7) - 1
&lt;br&gt;+};
&lt;br&gt;+Q_DECLARE_FLAGS(Caps, Cap)
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;#endif /* DBUSOBJECTS_H */
&lt;br&gt;diff -Naur ../kaffeine/src/dvb/dvbtab.cpp ./src/dvb/dvbtab.cpp
&lt;br&gt;--- ../kaffeine/src/dvb/dvbtab.cpp	2009-11-23 11:06:03.000000000 +0100
&lt;br&gt;+++ ./src/dvb/dvbtab.cpp	2009-11-23 11:18:25.000000000 +0100
&lt;br&gt;@@ -117,6 +117,10 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	connect(mediaWidget, SIGNAL(previousDvbChannel()), this, SLOT(previousChannel()));
&lt;br&gt;&amp;nbsp;	connect(mediaWidget, SIGNAL(nextDvbChannel()), this, SLOT(nextChannel()));
&lt;br&gt;+	connect(mediaWidget, SIGNAL(changeDvbChannel(const QString&amp;)), this, SLOT(setChannel(const QString&amp;)));
&lt;br&gt;+	connect(mediaWidget, SIGNAL(changeDvbChannel(int)), this, SLOT(setChannel(int)));
&lt;br&gt;+	connect(mediaWidget, SIGNAL(dvbLastChannel()), this, SLOT(setLastChannel()));
&lt;br&gt;+	connect(mediaWidget, SIGNAL(toggleInstantRecord()), this, SLOT(toggleInstantRecord()));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	connect(manager-&amp;gt;getRecordingManager(), SIGNAL(instantRecordingRemoved()),
&lt;br&gt;&amp;nbsp;		this, SLOT(instantRecordingRemoved()));
&lt;br&gt;@@ -144,7 +148,7 @@
&lt;br&gt;&amp;nbsp;	channelView-&amp;gt;setRootIsDecorated(false);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	if (!channelView-&amp;gt;header()-&amp;gt;restoreState(QByteArray::fromBase64(
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;KGlobal::config()-&amp;gt;group(&amp;quot;DVB&amp;quot;).readEntry(&amp;quot;ChannelViewState&amp;quot;, QByteArray())))) {
&lt;br&gt;+		KGlobal::config()-&amp;gt;group(&amp;quot;DVB&amp;quot;).readEntry(&amp;quot;ChannelViewState&amp;quot;, QByteArray())))) {
&lt;br&gt;&amp;nbsp;		channelView-&amp;gt;sortByColumn(0, Qt::AscendingOrder);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -210,6 +214,11 @@
&lt;br&gt;&amp;nbsp;	playChannel(manager-&amp;gt;getChannelModel()-&amp;gt;channelForName(name));
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+void DvbTab::playChannel(int number)
&lt;br&gt;+{
&lt;br&gt;+	playChannel(manager-&amp;gt;getChannelModel()-&amp;gt;channelForNumber(number));
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;void DvbTab::playLastChannel()
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	playChannel(KGlobal::config()-&amp;gt;group(&amp;quot;DVB&amp;quot;).readEntry(&amp;quot;LastChannel&amp;quot;));
&lt;br&gt;@@ -244,6 +253,19 @@
&lt;br&gt;&amp;nbsp;	dialog.exec();
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+void DvbTab::toggleInstantRecord()
&lt;br&gt;+{
&lt;br&gt;+	if (instantRecordAction-&amp;gt;isChecked()) {
&lt;br&gt;+		instantRecordAction-&amp;gt;setChecked(false);
&lt;br&gt;+		instantRecord(false);
&lt;br&gt;+	}
&lt;br&gt;+	else {
&lt;br&gt;+		instantRecordAction-&amp;gt;setChecked(true);
&lt;br&gt;+		instantRecord(true);
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;void DvbTab::instantRecord(bool checked)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	if (checked) {
&lt;br&gt;@@ -351,4 +373,73 @@
&lt;br&gt;&amp;nbsp;	if (channel != NULL) {
&lt;br&gt;&amp;nbsp;		manager-&amp;gt;getLiveView()-&amp;gt;playChannel(channel);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;+
&lt;br&gt;+	QModelIndex index = channelView-&amp;gt;indexAt(QPoint(0,0));
&lt;br&gt;+
&lt;br&gt;+	if (!index.isValid()) {
&lt;br&gt;+		return;
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	DvbChannelModel *channelModel = (DvbChannelModel*) index.model();
&lt;br&gt;+
&lt;br&gt;+	QModelIndexList list = channelModel-&amp;gt;match(channelModel-&amp;gt;index(0, 0), Qt::DisplayRole, channel-&amp;gt;name, 1, Qt::MatchExactly);
&lt;br&gt;+	QModelIndex index_new = list.value(0);
&lt;br&gt;+
&lt;br&gt;+	if (!index_new.isValid()) {
&lt;br&gt;+		return;
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	channelView-&amp;gt;setCurrentIndex(index_new);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+void DvbTab::setChannel(const QString &amp;name)
&lt;br&gt;+{
&lt;br&gt;+	QModelIndex index = channelView-&amp;gt;indexAt(QPoint(0,0));
&lt;br&gt;+
&lt;br&gt;+	if (!index.isValid()) {
&lt;br&gt;+		return;
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	DvbChannelModel *channelModel = (DvbChannelModel*) index.model();
&lt;br&gt;+
&lt;br&gt;+	QModelIndexList list = channelModel-&amp;gt;match(channelModel-&amp;gt;index(0, 0), Qt::DisplayRole, name, 1, Qt::MatchExactly);
&lt;br&gt;+	QModelIndex index_new = list.value(0);
&lt;br&gt;+
&lt;br&gt;+	if (!index_new.isValid()) {
&lt;br&gt;+		return;
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	channelView-&amp;gt;setCurrentIndex(index_new);
&lt;br&gt;+
&lt;br&gt;+	playChannel(name);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DvbTab::setChannel(int number)
&lt;br&gt;+{
&lt;br&gt;+
&lt;br&gt;+	QModelIndex index = channelView-&amp;gt;indexAt(QPoint(0,0));
&lt;br&gt;+
&lt;br&gt;+	if (!index.isValid()) {
&lt;br&gt;+		return;
&lt;br&gt;+	}
&lt;br&gt;+	
&lt;br&gt;+	DvbChannelModel *channelModel = (DvbChannelModel*) index.model();
&lt;br&gt;+
&lt;br&gt;+	QModelIndexList list = channelModel-&amp;gt;match(channelModel-&amp;gt;index(0, 1), Qt::DisplayRole, number, 1, Qt::MatchExactly);
&lt;br&gt;+	QModelIndex index_new = list.value(0);
&lt;br&gt;+
&lt;br&gt;+	if (!index_new.isValid()) {
&lt;br&gt;+		return;
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	channelView-&amp;gt;setCurrentIndex(index_new);
&lt;br&gt;+	playChannel(number);
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DvbTab::setLastChannel()
&lt;br&gt;+{
&lt;br&gt;+	playLastChannel();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;diff -Naur ../kaffeine/src/dvb/dvbtab.h ./src/dvb/dvbtab.h
&lt;br&gt;--- ../kaffeine/src/dvb/dvbtab.h	2009-11-23 11:06:02.000000000 +0100
&lt;br&gt;+++ ./src/dvb/dvbtab.h	2009-11-23 11:18:24.000000000 +0100
&lt;br&gt;@@ -38,11 +38,13 @@
&lt;br&gt;&amp;nbsp;class DvbTab : public TabBase
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	Q_OBJECT
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;public:
&lt;br&gt;&amp;nbsp;	DvbTab(KMenu *menu, KActionCollection *collection, MediaWidget *mediaWidget_);
&lt;br&gt;&amp;nbsp;	~DvbTab();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	void playChannel(const QString &amp;name);
&lt;br&gt;+	void playChannel(int number);
&lt;br&gt;&amp;nbsp;	void playLastChannel();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	void enableDvbDump();
&lt;br&gt;@@ -52,12 +54,16 @@
&lt;br&gt;&amp;nbsp;	void showEpgDialog();
&lt;br&gt;&amp;nbsp;	void showRecordingDialog();
&lt;br&gt;&amp;nbsp;	void instantRecord(bool checked);
&lt;br&gt;+	void toggleInstantRecord();
&lt;br&gt;&amp;nbsp;	void instantRecordingRemoved();
&lt;br&gt;&amp;nbsp;	void configureDvb();
&lt;br&gt;&amp;nbsp;	void playLive(const QModelIndex &amp;index);
&lt;br&gt;&amp;nbsp;	void previousChannel();
&lt;br&gt;&amp;nbsp;	void nextChannel();
&lt;br&gt;&amp;nbsp;	void cleanTimeShiftFiles();
&lt;br&gt;+	void setChannel(const QString &amp;name);
&lt;br&gt;+	void setChannel(int number);
&lt;br&gt;+	void setLastChannel();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;private:
&lt;br&gt;&amp;nbsp;	void activate();
&lt;br&gt;diff -Naur ../kaffeine/src/kaffeine.cpp ./src/kaffeine.cpp
&lt;br&gt;--- ../kaffeine/src/kaffeine.cpp	2009-11-23 11:06:04.000000000 +0100
&lt;br&gt;+++ ./src/kaffeine.cpp	2009-11-23 11:18:25.000000000 +0100
&lt;br&gt;@@ -327,6 +327,15 @@
&lt;br&gt;&amp;nbsp;	// initialize dbus objects
&lt;br&gt;&amp;nbsp;	QDBusConnection::sessionBus().registerObject(&amp;quot;/&amp;quot;, new MprisRootObject(this),
&lt;br&gt;&amp;nbsp;		QDBusConnection::ExportAllContents);
&lt;br&gt;+	QDBusConnection::sessionBus().registerObject(&amp;quot;/Player&amp;quot;, new MprisPlayerObject(mediaWidget),
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;QDBusConnection::ExportAllContents);
&lt;br&gt;+	QDBusConnection::sessionBus().registerObject(&amp;quot;/TrackList&amp;quot;, new MprisTrackListObject(mediaWidget),
&lt;br&gt;+		QDBusConnection::ExportAllContents);
&lt;br&gt;+	QDBusConnection::sessionBus().registerObject(&amp;quot;/DVB&amp;quot;, new MprisDvbObject(mediaWidget),
&lt;br&gt;+		QDBusConnection::ExportAllContents);
&lt;br&gt;+	QDBusConnection::sessionBus().registerObject(&amp;quot;/Display&amp;quot;, new MprisDisplayObject(mediaWidget),
&lt;br&gt;+		QDBusConnection::ExportAllContents);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	QDBusConnection::sessionBus().registerService(&amp;quot;org.mpris.kaffeine&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	show();
&lt;br&gt;diff -Naur ../kaffeine/src/mediawidget.cpp ./src/mediawidget.cpp
&lt;br&gt;--- ../kaffeine/src/mediawidget.cpp	2009-11-23 11:06:02.000000000 +0100
&lt;br&gt;+++ ./src/mediawidget.cpp	2009-11-23 11:18:24.000000000 +0100
&lt;br&gt;@@ -374,6 +374,8 @@
&lt;br&gt;&amp;nbsp;	connect(timer, SIGNAL(timeout()), this, SLOT(checkScreenSaver()));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	stateChanged(Phonon::StoppedState);
&lt;br&gt;+
&lt;br&gt;+	setRepeat(false);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;MediaWidget::~MediaWidget()
&lt;br&gt;@@ -543,6 +545,67 @@
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+bool MediaWidget::isPaused()
&lt;br&gt;+{
&lt;br&gt;+	if (playing &amp;&amp; mediaObject-&amp;gt;state() == Phonon::PausedState)
&lt;br&gt;+	{
&lt;br&gt;+		return true;
&lt;br&gt;+	}
&lt;br&gt;+	return false;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+// also returns true when paused
&lt;br&gt;+bool MediaWidget::isPlaying()
&lt;br&gt;+{
&lt;br&gt;+	return playing;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::setRepeat(bool repeat_)
&lt;br&gt;+{
&lt;br&gt;+	repeat = repeat_;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+bool MediaWidget::isRepeat()
&lt;br&gt;+{
&lt;br&gt;+	return repeat;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+bool MediaWidget::hasMedia()
&lt;br&gt;+{
&lt;br&gt;+	if ( mediaObject-&amp;gt;currentSource().type() != Phonon::MediaSource::Invalid ) {
&lt;br&gt;+		return true;
&lt;br&gt;+	}
&lt;br&gt;+	else {
&lt;br&gt;+		return false;
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::setDvbChannel(int number)
&lt;br&gt;+{
&lt;br&gt;+	if (dvbFeed != NULL) {
&lt;br&gt;+		emit changeDvbChannel(number);
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::setDvbChannel(const QString &amp;name)
&lt;br&gt;+{
&lt;br&gt;+	if (dvbFeed != NULL) {
&lt;br&gt;+		emit changeDvbChannel(name);
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::setDvbLastChannel()
&lt;br&gt;+{
&lt;br&gt;+	if (dvbFeed != NULL) {
&lt;br&gt;+		emit dvbLastChannel();
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::fullScreen()
&lt;br&gt;+{
&lt;br&gt;+	emit toggleFullScreen();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;void MediaWidget::stateChanged(Phonon::State state)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	bool newPlaying = false;
&lt;br&gt;@@ -551,6 +614,7 @@
&lt;br&gt;&amp;nbsp;		case Phonon::BufferingState:
&lt;br&gt;&amp;nbsp;		case Phonon::PlayingState:
&lt;br&gt;&amp;nbsp;		case Phonon::PausedState:
&lt;br&gt;+			paused = true;
&lt;br&gt;&amp;nbsp;			newPlaying = true;
&lt;br&gt;&amp;nbsp;			break;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -655,6 +719,31 @@
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+void MediaWidget::playPause() {
&lt;br&gt;+	//if (actionPlayPause-&amp;gt;text() == textPlay) {
&lt;br&gt;+	if (isPaused()) {
&lt;br&gt;+		playPause(false);
&lt;br&gt;+	}
&lt;br&gt;+	else {
&lt;br&gt;+		playPause(true);
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::play() {
&lt;br&gt;+	if (playing &amp;&amp; actionPlayPause-&amp;gt;text() == textPlay) {
&lt;br&gt;+		playPause(false);
&lt;br&gt;+	}
&lt;br&gt;+	else if (!playing) {
&lt;br&gt;+		emit playlistPlay();
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::pause() {
&lt;br&gt;+	if (playing &amp;&amp; actionPlayPause-&amp;gt;text() == textPause) {
&lt;br&gt;+		playPause(true);
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;void MediaWidget::stop()
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	mediaObject-&amp;gt;stop();
&lt;br&gt;@@ -726,6 +815,17 @@
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+int MediaWidget::getVolume()
&lt;br&gt;+{
&lt;br&gt;+	int volume = audioOutput-&amp;gt;volume() * 100;
&lt;br&gt;+
&lt;br&gt;+	if ( volume &amp;gt;= 0 &amp;&amp; volume &amp;lt;= 100 ) {
&lt;br&gt;+		return volume;
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	return 0;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;void MediaWidget::changeVolume(int volume)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	audioOutput-&amp;gt;setVolume(volume * qreal(0.01));
&lt;br&gt;@@ -915,6 +1015,16 @@
&lt;br&gt;&amp;nbsp;	mediaObject-&amp;gt;seek(mediaObject-&amp;gt;currentTime() + 1000 * longSkipDuration);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+void MediaWidget::setPosition(int position)
&lt;br&gt;+{
&lt;br&gt;+	mediaObject-&amp;gt;seek(position);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MediaWidget::getPosition()
&lt;br&gt;+{
&lt;br&gt;+	return mediaObject-&amp;gt;currentTime();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;void MediaWidget::jumpToPosition()
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	JumpToPositionDialog dialog(QTime().addMSecs(mediaObject-&amp;gt;currentTime()), this);
&lt;br&gt;@@ -1150,3 +1260,62 @@
&lt;br&gt;&amp;nbsp;		subtitleBox-&amp;gt;setEnabled(false);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+QVariantMap MediaWidget::getMetadata()
&lt;br&gt;+{
&lt;br&gt;+	QVariantMap ret;
&lt;br&gt;+	QMultiMap&amp;lt;QString, QString&amp;gt; multiMap = mediaObject-&amp;gt;metaData();
&lt;br&gt;+	QMultiMap&amp;lt;QString, QString&amp;gt;::const_iterator i = multiMap.constBegin();
&lt;br&gt;+	
&lt;br&gt;+	while( i != multiMap.constEnd() )
&lt;br&gt;+	{
&lt;br&gt;+		ret[ i.key() ] = QVariant( i.value() );
&lt;br&gt;+		i++;
&lt;br&gt;+	}
&lt;br&gt;+	return ret;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int getNumberOfTracks()
&lt;br&gt;+{
&lt;br&gt;+	//TODO
&lt;br&gt;+	return 0;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MediaWidget::getCurrentTrack()
&lt;br&gt;+{
&lt;br&gt;+	//TODO
&lt;br&gt;+	return 0;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MediaWidget::getLength()
&lt;br&gt;+{
&lt;br&gt;+	//TODO
&lt;br&gt;+	return 0;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MediaWidget::addTrack(QString track, bool play)
&lt;br&gt;+{
&lt;br&gt;+	//TODO
&lt;br&gt;+	return 0;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::delTrack(int position)
&lt;br&gt;+{
&lt;br&gt;+	//TODO
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::setLoop(bool loop)
&lt;br&gt;+{
&lt;br&gt;+	setRepeat(loop);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::setRandom(bool random)
&lt;br&gt;+{
&lt;br&gt;+	//TODO
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::setNumber(int number)
&lt;br&gt;+{
&lt;br&gt;+	emit osdKeyPressed(number + Qt::Key_0);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;diff -Naur ../kaffeine/src/mediawidget.h ./src/mediawidget.h
&lt;br&gt;--- ../kaffeine/src/mediawidget.h	2009-11-23 11:06:03.000000000 +0100
&lt;br&gt;+++ ./src/mediawidget.h	2009-11-23 11:18:25.000000000 +0100
&lt;br&gt;@@ -48,9 +48,14 @@
&lt;br&gt;&amp;nbsp;class MediaWidget : public QWidget
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	Q_OBJECT
&lt;br&gt;+	friend class MprisPlayerObject;
&lt;br&gt;+	friend class MprisTrackListObject;
&lt;br&gt;+	friend class MprisDvbObject;
&lt;br&gt;+	friend class MprisDisplayObject;	
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;public:
&lt;br&gt;&amp;nbsp;	MediaWidget(KMenu *menu_, KAction *fullScreenAction, KToolBar *toolBar,
&lt;br&gt;-		 &amp;nbsp; &amp;nbsp;KActionCollection *collection, QWidget *parent);
&lt;br&gt;+			KActionCollection *collection, QWidget *parent);
&lt;br&gt;&amp;nbsp;	~MediaWidget();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	static QString extensionFilter(); // usable for KFileDialog::setFilter()
&lt;br&gt;@@ -78,6 +83,12 @@
&lt;br&gt;&amp;nbsp;	void setShortSkipDuration(int duration);
&lt;br&gt;&amp;nbsp;	void setLongSkipDuration(int duration);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	void setRepeat(bool repeat_);
&lt;br&gt;+	bool isRepeat();
&lt;br&gt;+	bool hasMedia();
&lt;br&gt;+
&lt;br&gt;+	void setNumber(int number);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;public slots:
&lt;br&gt;&amp;nbsp;	void stop();
&lt;br&gt;&amp;nbsp;	void stopDvb();
&lt;br&gt;@@ -98,14 +109,35 @@
&lt;br&gt;&amp;nbsp;	void startDvbTimeShift();
&lt;br&gt;&amp;nbsp;	void changeDvbAudioChannel(int index);
&lt;br&gt;&amp;nbsp;	void changeDvbSubtitle(int index);
&lt;br&gt;+	void changeDvbChannel(int number);
&lt;br&gt;+	void changeDvbChannel(const QString &amp;name);
&lt;br&gt;&amp;nbsp;	void dvbStopped();
&lt;br&gt;&amp;nbsp;	void osdKeyPressed(int key);
&lt;br&gt;+	void toggleOsd();
&lt;br&gt;+
&lt;br&gt;+	void dvbLastChannel();
&lt;br&gt;+	void toggleInstantRecord();
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;private slots:
&lt;br&gt;+	bool isPlaying();
&lt;br&gt;+	bool isPaused();
&lt;br&gt;+
&lt;br&gt;+	int getPosition();
&lt;br&gt;+	int getCurrentTrack();
&lt;br&gt;+	int getLength();
&lt;br&gt;+	int addTrack(QString track, bool play);
&lt;br&gt;+	int getVolume();
&lt;br&gt;+
&lt;br&gt;+	QVariantMap getMetadata();
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	void stateChanged(Phonon::State state);
&lt;br&gt;&amp;nbsp;	void playbackFinished();
&lt;br&gt;&amp;nbsp;	void previous();
&lt;br&gt;&amp;nbsp;	void playPause(bool paused);
&lt;br&gt;+	void playPause();
&lt;br&gt;+	void play();
&lt;br&gt;+	void pause();
&lt;br&gt;&amp;nbsp;	void next();
&lt;br&gt;&amp;nbsp;	void changeAudioChannel(int index);
&lt;br&gt;&amp;nbsp;	void changeSubtitle(int index);
&lt;br&gt;@@ -132,6 +164,7 @@
&lt;br&gt;&amp;nbsp;	void skipForward();
&lt;br&gt;&amp;nbsp;	void longSkipForward();
&lt;br&gt;&amp;nbsp;	void jumpToPosition();
&lt;br&gt;+	void setPosition(int position);
&lt;br&gt;&amp;nbsp;	void timeButtonClicked();
&lt;br&gt;&amp;nbsp;	void updateTimeButton();
&lt;br&gt;&amp;nbsp;	void updateCaption();
&lt;br&gt;@@ -144,6 +177,17 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	void checkScreenSaver();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	void setDvbChannel(int number);
&lt;br&gt;+	void setDvbChannel(const QString &amp;name);
&lt;br&gt;+	void setDvbLastChannel();
&lt;br&gt;+	
&lt;br&gt;+	void fullScreen();
&lt;br&gt;+
&lt;br&gt;+	void delTrack(int position);
&lt;br&gt;+	void setLoop(bool loop);
&lt;br&gt;+	void setRandom(bool random);
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;private:
&lt;br&gt;&amp;nbsp;	void contextMenuEvent(QContextMenuEvent *event);
&lt;br&gt;&amp;nbsp;	void mouseDoubleClickEvent(QMouseEvent *);
&lt;br&gt;@@ -164,6 +208,7 @@
&lt;br&gt;&amp;nbsp;	Phonon::MediaController *mediaController;
&lt;br&gt;&amp;nbsp;	DvbFeed *dvbFeed;
&lt;br&gt;&amp;nbsp;	bool playing;
&lt;br&gt;+	bool paused;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	KAction *actionPrevious;
&lt;br&gt;&amp;nbsp;	KAction *actionPlayPause;
&lt;br&gt;@@ -204,6 +249,8 @@
&lt;br&gt;&amp;nbsp;	KAction *jumpToPositionAction;
&lt;br&gt;&amp;nbsp;	QPushButton *timeButton;
&lt;br&gt;&amp;nbsp;	bool showElapsedTime;
&lt;br&gt;+	bool repeat;
&lt;br&gt;+	int inputNumber;
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;#endif /* MEDIAWIDGET_H */
&lt;br&gt;diff -Naur ../kaffeine/src/playlist/playlistmodel.cpp ./src/playlist/playlistmodel.cpp
&lt;br&gt;--- ../kaffeine/src/playlist/playlistmodel.cpp	2009-11-23 11:06:03.000000000 +0100
&lt;br&gt;+++ ./src/playlist/playlistmodel.cpp	2009-11-23 11:18:25.000000000 +0100
&lt;br&gt;@@ -48,6 +48,7 @@
&lt;br&gt;&amp;nbsp;	QAbstractTableModel(parent), mediaWidget(mediaWidget_), repeat(false)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	setSupportedDragActions(Qt::MoveAction);
&lt;br&gt;+	mediaWidget-&amp;gt;setRepeat(false);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	connect(mediaWidget, SIGNAL(playlistPrevious()), this, SLOT(playPreviousTrack()));
&lt;br&gt;&amp;nbsp;	connect(mediaWidget, SIGNAL(playlistPlay()), this, SLOT(playCurrentTrack()));
&lt;br&gt;@@ -351,6 +352,7 @@
&lt;br&gt;&amp;nbsp;void PlaylistModel::repeatPlaylist(bool repeat_)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	repeat = repeat_;
&lt;br&gt;+	mediaWidget-&amp;gt;setRepeat(repeat);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static bool playlistIndexLess(const PlaylistTrack &amp;x, const PlaylistTrack &amp;y)
&lt;br&gt;&lt;br /&gt;------------------------------------------------------------------------------
&lt;br&gt;Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
&lt;br&gt;trial. Simplify your report design, integration and deployment - and focus on 
&lt;br&gt;what you do best, core application coding. Discover what's new with
&lt;br&gt;Crystal Reports now. &amp;nbsp;&lt;a href=&quot;http://p.sf.net/sfu/bobj-july&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/bobj-july&lt;/a&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;kaffeine-devel mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26475780&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-devel@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-devel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-devel&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-devel-f3473.html&quot; embed=&quot;fixTarget[3473]&quot; target=&quot;_top&quot; &gt;kaffeine-devel&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/dbus-support-for-kaffeine-tp26128565p26475780.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26463587</id>
	<title>Kaffeine 1.0-pre2</title>
	<published>2009-11-22T00:47:39Z</published>
	<updated>2009-11-22T00:47:39Z</updated>
	<author>
		<name>James W. Bennett-2</name>
	</author>
	<content type="html">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;&gt;
&lt;html&gt;
&lt;head&gt;

&lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=ISO-8859-1&quot;&gt;
&lt;/head&gt;
&lt;body text=&quot;#000000&quot; bgcolor=&quot;#ffffff&quot;&gt;
Kaffeine displays the following message when in uses.&lt;b&gt; Cannot find
input plugin for MRL [cadda:/]&lt;/b&gt;.&lt;br&gt;
Can anyone tell me what that message means.&lt;br&gt;
&lt;br&gt;
Thank you;&lt;br&gt;
Jim Bennett&lt;br&gt;
&lt;/body&gt;
&lt;/html&gt;
&lt;br /&gt;------------------------------------------------------------------------------
&lt;br&gt;Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
&lt;br&gt;trial. Simplify your report design, integration and deployment - and focus on 
&lt;br&gt;what you do best, core application coding. Discover what's new with
&lt;br&gt;Crystal Reports now. &amp;nbsp;&lt;a href=&quot;http://p.sf.net/sfu/bobj-july&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/bobj-july&lt;/a&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;kaffeine-user mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26463587&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-user@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-user-f3474.html&quot; embed=&quot;fixTarget[3474]&quot; target=&quot;_top&quot; &gt;kaffeine-user&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Kaffeine-1.0-pre2-tp26463587p26463587.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26464534</id>
	<title>uk-Redruth post digital-switchover network\location as of today</title>
	<published>2009-11-21T16:31:01Z</published>
	<updated>2009-11-21T16:31:01Z</updated>
	<author>
		<name>g_remlin</name>
	</author>
	<content type="html">#T 474167000 8MHz &amp;nbsp;2/3 &amp;nbsp;2/3 &amp;nbsp; &amp;nbsp;QAM64 &amp;nbsp; 8k 1/32 NONE &amp;nbsp; &amp;nbsp; &amp;nbsp;# South West 
&lt;br&gt;(duplicate 690000000)
&lt;br&gt;T 497833000 8MHz &amp;nbsp;2/3 &amp;nbsp;2/3 &amp;nbsp; &amp;nbsp;QAM64 &amp;nbsp; 8k 1/32 NONE &amp;nbsp; &amp;nbsp; &amp;nbsp;# South West 
&lt;br&gt;(duplicate 650166670) better SNR
&lt;br&gt;#T 506167000 8MHz &amp;nbsp;2/3 &amp;nbsp;2/3 &amp;nbsp; &amp;nbsp;QAM64 &amp;nbsp; 8k 1/32 NONE &amp;nbsp; &amp;nbsp; &amp;nbsp;# South West 
&lt;br&gt;(duplicate 634167000)
&lt;br&gt;T 521833000 8MHz &amp;nbsp;2/3 &amp;nbsp;2/3 &amp;nbsp; &amp;nbsp;QAM64 &amp;nbsp; 8k 1/32 NONE &amp;nbsp; &amp;nbsp; &amp;nbsp;# South West
&lt;br&gt;T 634167000 8MHz &amp;nbsp;2/3 &amp;nbsp;2/3 &amp;nbsp; &amp;nbsp;QAM64 &amp;nbsp; 8k 1/32 NONE &amp;nbsp; &amp;nbsp; &amp;nbsp;# West 
&lt;br&gt;Cornwall.. (duplicate 506167000) better SNR
&lt;br&gt;#T 650166670 8MHz &amp;nbsp;3/4 NONE &amp;nbsp; &amp;nbsp;QAM16 &amp;nbsp; 2k 1/32 NONE &amp;nbsp; &amp;nbsp; # (duplicate 
&lt;br&gt;497833000)
&lt;br&gt;T 658167000 8MHz &amp;nbsp;2/3 &amp;nbsp;2/3 &amp;nbsp; &amp;nbsp;QAM64 &amp;nbsp; 8k 1/32 NONE &amp;nbsp; &amp;nbsp; &amp;nbsp;# South West
&lt;br&gt;T 690000000 8MHz &amp;nbsp;2/3 &amp;nbsp;2/3 &amp;nbsp; &amp;nbsp;QAM64 &amp;nbsp; 8k 1/32 NONE &amp;nbsp; &amp;nbsp; &amp;nbsp;# South West 
&lt;br&gt;(duplicate 474167000) better SNR
&lt;br&gt;T 714000000 8MHz &amp;nbsp;2/3 &amp;nbsp;2/3 &amp;nbsp; &amp;nbsp;QAM64 &amp;nbsp; 8k 1/32 NONE
&lt;br&gt;&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
&lt;br&gt;trial. Simplify your report design, integration and deployment - and focus on 
&lt;br&gt;what you do best, core application coding. Discover what's new with
&lt;br&gt;Crystal Reports now. &amp;nbsp;&lt;a href=&quot;http://p.sf.net/sfu/bobj-july&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/bobj-july&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;kaffeine-user mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26464534&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-user@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-user-f3474.html&quot; embed=&quot;fixTarget[3474]&quot; target=&quot;_top&quot; &gt;kaffeine-user&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/uk-Redruth-post-digital-switchover-network%5Clocation-as-of-today-tp26464534p26464534.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26461092</id>
	<title>Re: dbus support for kaffeine</title>
	<published>2009-11-21T14:31:26Z</published>
	<updated>2009-11-21T14:31:26Z</updated>
	<author>
		<name>Pascal Pollet</name>
	</author>
	<content type="html">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;&gt;
&lt;html&gt;
&lt;head&gt;
  &lt;meta content=&quot;text/html;charset=UTF-8&quot; http-equiv=&quot;Content-Type&quot;&gt;
  &lt;title&gt;&lt;/title&gt;
&lt;/head&gt;
&lt;body bgcolor=&quot;#ffffff&quot; text=&quot;#000000&quot;&gt;
Hi,&lt;br&gt;
&lt;br&gt;
ok, here is the actual state of things. The mpris methods are all
implemented, with a few stubs left: a few /TrackList methods still need
to be implemented, but I will try to do it soon. The /Player Repeat()
function is also a stub, because the playlist does not allow to repeat
a single track yet. Also the GetCaps () function is incomplete. &lt;br&gt;
&lt;br&gt;
I put much methods into the /Player object which are not part of the
mpris specs, because it wouldn't make much sense to make a separate
object for them. I think it should be ok, but if you don't agree,
please tell me, it' not difficult to change...&lt;br&gt;
&lt;br&gt;
I made a DVB/ object for dvb-related stuff and a Display/ object for
methods like toggleFullScreen, I'm not sure if &quot;Display&quot; is the best
name for that...&lt;br&gt;
&lt;br&gt;
There is still a need for a method that allows to enter channel numbers
with more than one digit with a remote control (or with the keyboard),
I will try to do this in the next time, as for me it's the most
important feature which is still missing.&lt;br&gt;
&lt;br&gt;
I changed all dbus functions to begin with a capital letter, to be
consistent with the mpris methods.&lt;br&gt;
&lt;br&gt;
All this isn't thoroughly tested at all and rather crude, and there
should certainly be more error checking, but I think this is true for
almost all the rest of the app also, so it should be ok for the
beginning ;) &lt;br&gt;
&lt;br&gt;
&lt;blockquote type=&quot;cite&quot;&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;changing the channel works, but I didn't manage to have the selection
changed to the new channel in the DvbChannelView tree. I don't know how to
get a valid QModelIndex that points to the correct DvbChannelModel. Please
look at the code and at my comments in DvbTab::setChannel(int number). I
tried almost everything and thereby learned a lot about the model / view
concept of Qt, but it didn't help me to find the solution... Maybe you
already know this probem Christoph, because there is the same issue when
kaffeine gets started with the &quot;--tv &amp;lt;channel&amp;gt;&quot; flag: it simply calls
DvbTab::playChannel(const QString &amp;amp;name), but it does not select the channel
in the DvbChannelView. The problem is that afterwards, calls to
MediaWidget::previous() and next() have no effect, because the currently
selected channel is not known. I hope that someone more clever than me will
solve this issue ;)&lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
Yes, this one is trickier. Note that there exists a similar problem
e.g. with playPause(): you also need to update the ui state.
  &lt;/pre&gt;
&lt;/blockquote&gt;
I now found a solution (although I don't know if it's the best), but I
don't recognize what should be updated when the playPause() method is
called,  you have a better overview for sure...&lt;br&gt;
&lt;br&gt;
ciao,&lt;br&gt;
Pascal&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Christoph Pfister schrieb:
&lt;blockquote cite=&quot;mid:19a3b7a80911080946s5da4709ch9df30c45cc79b3ba@mail.gmail.com&quot; type=&quot;cite&quot;&gt;
  &lt;pre wrap=&quot;&quot;&gt;Hi,

2009/11/6 Pascal Pollet &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26461092&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pascal@...&lt;/a&gt;:
  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;Hi,

here is what I've done so far, I think it should add enough d-bus to make
most users happy, including me :) Please look at it and tell me what you
think of it...
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
It's a very good starting point. There exists a mediaplayer dbus
specification MPRIS [1], which I consider worth to implement (so that
we don't add yet another dbus interface for common functionality).
I've committed preliminary support to svn (the &quot;root&quot; object). Could
you please adapt your patch to that concept (i.e. add a tracklist and
player object; in case of need just method stubs)? I'm aware of the
fact that the actions defined in that specification don't 100% map
Kaffeine's actions (e.g. Play() doing a rewind to the beginning of a
track), so you don't have to care about those details if you don't
want to do. I also know that not every mpris thing is possible
(especially the tracklist parts needs more work) and that there's not
a mpris thing for every action Kaffeine is able to perform (put them
in a separate object for now).

  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;There is one problem left, when selecting a new DVB-channel directly by name
or by number, with the (new) functions:

dvbTab::setChannel(const QString &amp;amp;name)
and
DvbTab::setChannel(int number)

changing the channel works, but I didn't manage to have the selection
changed to the new channel in the DvbChannelView tree. I don't know how to
get a valid QModelIndex that points to the correct DvbChannelModel. Please
look at the code and at my comments in DvbTab::setChannel(int number). I
tried almost everything and thereby learned a lot about the model / view
concept of Qt, but it didn't help me to find the solution... Maybe you
already know this probem Christoph, because there is the same issue when
kaffeine gets started with the &quot;--tv &amp;lt;channel&amp;gt;&quot; flag: it simply calls
DvbTab::playChannel(const QString &amp;amp;name), but it does not select the channel
in the DvbChannelView. The problem is that afterwards, calls to
MediaWidget::previous() and next() have no effect, because the currently
selected channel is not known. I hope that someone more clever than me will
solve this issue ;)
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
Yes, this one is trickier. Note that there exists a similar problem
e.g. with playPause(): you also need to update the ui state.

  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;cheers,
Pascal
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
Thanks,

Christoph


[1] &lt;a class=&quot;moz-txt-link-freetext&quot; href=&quot;http://wiki.xmms2.xmms.se/wiki/MPRIS&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://wiki.xmms2.xmms.se/wiki/MPRIS&lt;/a&gt;

  &lt;/pre&gt;
&lt;/blockquote&gt;
&lt;/body&gt;
&lt;/html&gt;
&lt;br /&gt;diff -Naur ../kaffeine/src/dbusobjects.cpp ./src/dbusobjects.cpp
&lt;br&gt;--- ../kaffeine/src/dbusobjects.cpp	2009-11-21 23:11:28.000000000 +0100
&lt;br&gt;+++ ./src/dbusobjects.cpp	2009-11-21 23:08:52.000000000 +0100
&lt;br&gt;@@ -23,6 +23,9 @@
&lt;br&gt;&amp;nbsp;#include &amp;lt;QDBusMetaType&amp;gt;
&lt;br&gt;&amp;nbsp;#include &amp;lt;KAboutData&amp;gt;
&lt;br&gt;&amp;nbsp;#include &amp;lt;KApplication&amp;gt;
&lt;br&gt;+#include &amp;lt;KUrl&amp;gt;
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;mediawidget.h&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;QDBusArgument &amp;operator&amp;lt;&amp;lt;(QDBusArgument &amp;argument, const MprisVersionStruct &amp;versionStruct)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;@@ -40,9 +43,27 @@
&lt;br&gt;&amp;nbsp;	return argument;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+QDBusArgument &amp;operator&amp;lt;&amp;lt;(QDBusArgument &amp;argument, const MprisStatusStruct &amp;statusStruct)
&lt;br&gt;+{
&lt;br&gt;+	argument.beginStructure();
&lt;br&gt;+	argument &amp;lt;&amp;lt; statusStruct.play &amp;lt;&amp;lt; statusStruct.random &amp;lt;&amp;lt; statusStruct.repeatTrack &amp;lt;&amp;lt; statusStruct.repeatAll;
&lt;br&gt;+	argument.endStructure();
&lt;br&gt;+	return argument;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+const QDBusArgument &amp;operator&amp;gt;&amp;gt;(const QDBusArgument &amp;argument, MprisStatusStruct &amp;statusStruct)
&lt;br&gt;+{
&lt;br&gt;+	argument.beginStructure();
&lt;br&gt;+	argument &amp;gt;&amp;gt; statusStruct.play &amp;gt;&amp;gt; statusStruct.random &amp;gt;&amp;gt; statusStruct.repeatTrack &amp;gt;&amp;gt; statusStruct.repeatAll;
&lt;br&gt;+	argument.endStructure();
&lt;br&gt;+	return argument;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;MprisRootObject::MprisRootObject(QObject *parent) : QObject(parent)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	 qDBusRegisterMetaType&amp;lt;MprisVersionStruct&amp;gt;();
&lt;br&gt;+	 qDBusRegisterMetaType&amp;lt;MprisStatusStruct&amp;gt;();
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;MprisRootObject::~MprisRootObject()
&lt;br&gt;@@ -67,3 +88,320 @@
&lt;br&gt;&amp;nbsp;	versionStruct.minor = 0;
&lt;br&gt;&amp;nbsp;	return versionStruct;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+MprisPlayerObject::MprisPlayerObject(MediaWidget *mediaWidget_): mediaWidget(mediaWidget_)
&lt;br&gt;+{ }
&lt;br&gt;+
&lt;br&gt;+MprisPlayerObject::~MprisPlayerObject()
&lt;br&gt;+{ }
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::Next()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;next();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::Prev()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;previous();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::PlayPause()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;playPause();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::Play()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;play();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::Pause()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;pause();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MprisPlayerObject::VolumeGet()
&lt;br&gt;+{
&lt;br&gt;+	return mediaWidget-&amp;gt;getVolume();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::VolumeSet(int volume)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;changeVolume(volume);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::VolumeIncrease()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;increaseVolume();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::VolumeDecrease()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;decreaseVolume();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MprisPlayerObject::PositionGet()
&lt;br&gt;+{
&lt;br&gt;+	return mediaWidget-&amp;gt;getPosition();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::PositionSet(int position)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;setPosition(position);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::Repeat()
&lt;br&gt;+{
&lt;br&gt;+	//TODO
&lt;br&gt;+	//repeating a single track not implemented yet, only whole playlist
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MprisPlayerObject::GetCaps()
&lt;br&gt;+{
&lt;br&gt;+	int caps = NO_CAPS;
&lt;br&gt;+
&lt;br&gt;+	if ( mediaWidget-&amp;gt;hasMedia() ) 
&lt;br&gt;+	{
&lt;br&gt;+		if ( mediaWidget-&amp;gt;isPlaying() &amp;&amp; ! mediaWidget-&amp;gt;isPaused() )
&lt;br&gt;+		{
&lt;br&gt;+			caps |= CAN_PAUSE;
&lt;br&gt;+		}
&lt;br&gt;+		else 
&lt;br&gt;+		{
&lt;br&gt;+			caps |= CAN_PLAY;
&lt;br&gt;+		}
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	caps |= CAN_HAS_TRACKLIST;
&lt;br&gt;+
&lt;br&gt;+	//TODO: CAN_GO_NEXT &amp; CAN_GO_PREV &amp; CAN_PROVIDE_METADATA
&lt;br&gt;+
&lt;br&gt;+	return caps;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::Stop()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;stop();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+MprisStatusStruct MprisPlayerObject::GetStatus()
&lt;br&gt;+{
&lt;br&gt;+	MprisStatusStruct statusStruct;
&lt;br&gt;+	if ( mediaWidget-&amp;gt;isPaused() )
&lt;br&gt;+	{
&lt;br&gt;+		statusStruct.play = 1;
&lt;br&gt;+	}
&lt;br&gt;+	else if ( mediaWidget-&amp;gt;isPlaying() )
&lt;br&gt;+	{
&lt;br&gt;+		statusStruct.play = 0;
&lt;br&gt;+	}
&lt;br&gt;+	else
&lt;br&gt;+	{
&lt;br&gt;+		statusStruct.play = 2;
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	if ( mediaWidget-&amp;gt;isRepeat() )
&lt;br&gt;+	{
&lt;br&gt;+		statusStruct.repeatAll = 1;
&lt;br&gt;+	}
&lt;br&gt;+	else
&lt;br&gt;+	{
&lt;br&gt;+		statusStruct.repeatAll = 0;
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	statusStruct.random = 0;
&lt;br&gt;+	statusStruct.repeatTrack = 0;
&lt;br&gt;+	
&lt;br&gt;+	return statusStruct;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+QVariantMap MprisPlayerObject::GetMetadata()
&lt;br&gt;+{
&lt;br&gt;+	return mediaWidget-&amp;gt;getMetadata();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::Play(const QString &amp;url)
&lt;br&gt;+{
&lt;br&gt;+	KUrl kurl(url);
&lt;br&gt;+	if (kurl.isValid()) {
&lt;br&gt;+		mediaWidget-&amp;gt;play(kurl);
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::PlayAudioCd()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;playAudioCd();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::PlayVideoCd()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;playVideoCd();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::PlayDvd()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;playDvd();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void &amp;nbsp;MprisPlayerObject::ChangeAudioChannel(int index)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;changeAudioChannel(index);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void &amp;nbsp;MprisPlayerObject::ChangeSubtitle(int index)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;changeSubtitle(index);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::ToggleMuted()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;toggleMuted();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::LongSkipBackward()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;longSkipBackward();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::SkipBackward()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;skipBackward();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::SkipForward()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;skipForward();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::LongSkipForward()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;longSkipForward();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::TimeButtonClicked()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;timeButtonClicked();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisPlayerObject::UpdateTimeButton()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;updateTimeButton();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+MprisTrackListObject::MprisTrackListObject(MediaWidget *mediaWidget_): mediaWidget(mediaWidget_)
&lt;br&gt;+{ }
&lt;br&gt;+
&lt;br&gt;+MprisTrackListObject::~MprisTrackListObject()
&lt;br&gt;+{ }
&lt;br&gt;+
&lt;br&gt;+QVariantMap MprisTrackListObject::GetMetadata()
&lt;br&gt;+{
&lt;br&gt;+	return mediaWidget-&amp;gt;getMetadata();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MprisTrackListObject::GetCurrentTrack()
&lt;br&gt;+{
&lt;br&gt;+	return mediaWidget-&amp;gt;getCurrentTrack();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MprisTrackListObject::GetLength()
&lt;br&gt;+{
&lt;br&gt;+	return mediaWidget-&amp;gt;getLength();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MprisTrackListObject::AddTrack(QString track, bool play)
&lt;br&gt;+{
&lt;br&gt;+	return mediaWidget-&amp;gt;addTrack(track, play);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisTrackListObject::DelTrack(int position)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;delTrack(position);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisTrackListObject::SetLoop(bool loop)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;setLoop(loop);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisTrackListObject::SetRandom(bool random)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;setRandom(random);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+MprisDvbObject::MprisDvbObject(MediaWidget *mediaWidget_): mediaWidget(mediaWidget_)
&lt;br&gt;+{ }
&lt;br&gt;+
&lt;br&gt;+MprisDvbObject::~MprisDvbObject()
&lt;br&gt;+{ }
&lt;br&gt;+
&lt;br&gt;+void MprisDvbObject::SetDvbChannel(const QString &amp;name)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;setDvbChannel(name);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDvbObject::SetDvbChannelNumber(int number)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;setDvbChannel(number);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDvbObject::SetDvbLastChannel()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;setDvbLastChannel();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDvbObject::StopDvb()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;stopDvb();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDvbObject::ToggleInstantRecord()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;toggleInstantRecord();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDvbObject::ToggleOsd()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;toggleOsd();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+MprisDisplayObject::MprisDisplayObject(MediaWidget *mediaWidget_): mediaWidget(mediaWidget_)
&lt;br&gt;+{ }
&lt;br&gt;+
&lt;br&gt;+MprisDisplayObject::~MprisDisplayObject()
&lt;br&gt;+{ }
&lt;br&gt;+
&lt;br&gt;+void MprisDisplayObject::ToggleFullScreen()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;fullScreen();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDisplayObject::AspectRatioAuto()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;aspectRatioAuto();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDisplayObject::AspectRatio4_3()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;aspectRatio4_3();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDisplayObject::AspectRatio16_9()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;aspectRatio16_9();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MprisDisplayObject::AspectRatioWidget()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;aspectRatioWidget();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;diff -Naur ../kaffeine/src/dbusobjects.h ./src/dbusobjects.h
&lt;br&gt;--- ../kaffeine/src/dbusobjects.h	2009-11-21 23:11:28.000000000 +0100
&lt;br&gt;+++ ./src/dbusobjects.h	2009-11-21 23:08:52.000000000 +0100
&lt;br&gt;@@ -22,8 +22,12 @@
&lt;br&gt;&amp;nbsp;#define DBUSOBJECTS_H
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;#include &amp;lt;QMetaType&amp;gt;
&lt;br&gt;+#include &amp;lt;QVariantMap&amp;gt;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;struct MprisVersionStruct;
&lt;br&gt;+struct MprisStatusStruct;
&lt;br&gt;+
&lt;br&gt;+class MediaWidget;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;class MprisRootObject : public QObject
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;@@ -39,6 +43,129 @@
&lt;br&gt;&amp;nbsp;	MprisVersionStruct MprisVersion();
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+
&lt;br&gt;+class MprisPlayerObject : public QObject
&lt;br&gt;+{
&lt;br&gt;+	Q_OBJECT
&lt;br&gt;+	Q_CLASSINFO(&amp;quot;D-Bus Interface&amp;quot;, &amp;quot;org.freedesktop.MediaPlayer&amp;quot;)
&lt;br&gt;+public:
&lt;br&gt;+	explicit MprisPlayerObject(MediaWidget *mediaWidget_);
&lt;br&gt;+	~MprisPlayerObject();
&lt;br&gt;+
&lt;br&gt;+public slots:
&lt;br&gt;+	void Next();
&lt;br&gt;+	void Prev();
&lt;br&gt;+	void Play();
&lt;br&gt;+	void Pause();
&lt;br&gt;+	void Stop();
&lt;br&gt;+	int &amp;nbsp;VolumeGet();
&lt;br&gt;+	void VolumeSet(int volume);
&lt;br&gt;+	int &amp;nbsp;PositionGet();
&lt;br&gt;+	void PositionSet(int position);
&lt;br&gt;+	void Repeat();
&lt;br&gt;+	MprisStatusStruct GetStatus();
&lt;br&gt;+	QVariantMap GetMetadata();
&lt;br&gt;+	int GetCaps();
&lt;br&gt;+
&lt;br&gt;+	// this functions are not part of the MPRIS specs
&lt;br&gt;+	void PlayPause();
&lt;br&gt;+	void VolumeIncrease();
&lt;br&gt;+	void VolumeDecrease();
&lt;br&gt;+	void Play(const QString &amp;url);
&lt;br&gt;+	void PlayAudioCd();
&lt;br&gt;+	void PlayVideoCd();
&lt;br&gt;+	void PlayDvd();
&lt;br&gt;+	void ChangeAudioChannel(int index);
&lt;br&gt;+	void ChangeSubtitle(int index);
&lt;br&gt;+	void ToggleMuted();
&lt;br&gt;+	void LongSkipBackward();
&lt;br&gt;+	void SkipBackward();
&lt;br&gt;+	void SkipForward();
&lt;br&gt;+	void LongSkipForward();
&lt;br&gt;+	void TimeButtonClicked();
&lt;br&gt;+	void UpdateTimeButton();
&lt;br&gt;+
&lt;br&gt;+signals:
&lt;br&gt;+	void CapsChange( int );
&lt;br&gt;+	void StatusChange( MprisStatusStruct );
&lt;br&gt;+	void TrackChange( QVariantMap );
&lt;br&gt;+
&lt;br&gt;+private:
&lt;br&gt;+	MediaWidget *mediaWidget;
&lt;br&gt;+
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+class MprisTrackListObject : public QObject
&lt;br&gt;+{
&lt;br&gt;+	Q_OBJECT
&lt;br&gt;+	Q_CLASSINFO(&amp;quot;D-Bus Interface&amp;quot;, &amp;quot;org.freedesktop.MediaPlayer&amp;quot;)
&lt;br&gt;+public:
&lt;br&gt;+	explicit MprisTrackListObject(MediaWidget *mediaWidget_);
&lt;br&gt;+	~MprisTrackListObject();
&lt;br&gt;+
&lt;br&gt;+public slots:
&lt;br&gt;+	QVariantMap GetMetadata();
&lt;br&gt;+	int GetCurrentTrack();
&lt;br&gt;+	int GetLength();
&lt;br&gt;+	int AddTrack(QString track, bool play);
&lt;br&gt;+	void DelTrack(int position);
&lt;br&gt;+	void SetLoop(bool loop);
&lt;br&gt;+	void SetRandom(bool random);
&lt;br&gt;+
&lt;br&gt;+signals:
&lt;br&gt;+	void TrackListChange(int);
&lt;br&gt;+
&lt;br&gt;+private:
&lt;br&gt;+	MediaWidget *mediaWidget;
&lt;br&gt;+
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+class MprisDvbObject : public QObject
&lt;br&gt;+{
&lt;br&gt;+	Q_OBJECT
&lt;br&gt;+	Q_CLASSINFO(&amp;quot;D-Bus Interface&amp;quot;, &amp;quot;org.freedesktop.MediaPlayer&amp;quot;)
&lt;br&gt;+public:
&lt;br&gt;+	explicit MprisDvbObject(MediaWidget *mediaWidget_);
&lt;br&gt;+	~MprisDvbObject();
&lt;br&gt;+
&lt;br&gt;+public slots:
&lt;br&gt;+	void SetDvbChannel(const QString &amp;name);
&lt;br&gt;+	void SetDvbChannelNumber(int number);
&lt;br&gt;+	void SetDvbLastChannel();
&lt;br&gt;+	void StopDvb();
&lt;br&gt;+	void ToggleInstantRecord();
&lt;br&gt;+	void ToggleOsd();
&lt;br&gt;+
&lt;br&gt;+private:
&lt;br&gt;+	MediaWidget *mediaWidget;
&lt;br&gt;+
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+class MprisDisplayObject : public QObject
&lt;br&gt;+{
&lt;br&gt;+	Q_OBJECT
&lt;br&gt;+	Q_CLASSINFO(&amp;quot;D-Bus Interface&amp;quot;, &amp;quot;org.freedesktop.MediaPlayer&amp;quot;)
&lt;br&gt;+public:
&lt;br&gt;+	explicit MprisDisplayObject(MediaWidget *mediaWidget_);
&lt;br&gt;+	~MprisDisplayObject();
&lt;br&gt;+
&lt;br&gt;+public slots:
&lt;br&gt;+	void AspectRatioAuto();
&lt;br&gt;+	void AspectRatio4_3();
&lt;br&gt;+	void AspectRatio16_9();
&lt;br&gt;+	void AspectRatioWidget();
&lt;br&gt;+	void ToggleFullScreen();
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+private:
&lt;br&gt;+	MediaWidget *mediaWidget;
&lt;br&gt;+
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;struct MprisVersionStruct
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	quint16 major;
&lt;br&gt;@@ -47,4 +174,30 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;Q_DECLARE_METATYPE(MprisVersionStruct)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+struct MprisStatusStruct
&lt;br&gt;+{
&lt;br&gt;+	quint16 play;
&lt;br&gt;+	quint16 random;
&lt;br&gt;+	quint16 repeatTrack;
&lt;br&gt;+	quint16 repeatAll;
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+Q_DECLARE_METATYPE(MprisStatusStruct)
&lt;br&gt;+
&lt;br&gt;+/**
&lt;br&gt;+* The bit values for the capabilities flags
&lt;br&gt;+*/
&lt;br&gt;+enum Cap {
&lt;br&gt;+	NO_CAPS			 &amp;nbsp; = 0,
&lt;br&gt;+	CAN_GO_NEXT		 &amp;nbsp; = 1 &amp;lt;&amp;lt; 0,
&lt;br&gt;+	CAN_GO_PREV		 &amp;nbsp; = 1 &amp;lt;&amp;lt; 1,
&lt;br&gt;+	CAN_PAUSE			 = 1 &amp;lt;&amp;lt; 2,
&lt;br&gt;+	CAN_PLAY			 &amp;nbsp;= 1 &amp;lt;&amp;lt; 3,
&lt;br&gt;+	CAN_SEEK			 &amp;nbsp;= 1 &amp;lt;&amp;lt; 4,
&lt;br&gt;+	CAN_PROVIDE_METADATA &amp;nbsp;= 1 &amp;lt;&amp;lt; 5,
&lt;br&gt;+	CAN_HAS_TRACKLIST	 = 1 &amp;lt;&amp;lt; 6,
&lt;br&gt;+	ALL_KNOWN_CAPS		= (1 &amp;lt;&amp;lt; 7) - 1
&lt;br&gt;+};
&lt;br&gt;+Q_DECLARE_FLAGS(Caps, Cap)
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;#endif /* DBUSOBJECTS_H */
&lt;br&gt;diff -Naur ../kaffeine/src/dvb/dvbliveview.cpp ./src/dvb/dvbliveview.cpp
&lt;br&gt;--- ../kaffeine/src/dvb/dvbliveview.cpp	2009-11-21 23:11:27.000000000 +0100
&lt;br&gt;+++ ./src/dvb/dvbliveview.cpp	2009-11-21 23:08:52.000000000 +0100
&lt;br&gt;@@ -157,6 +157,7 @@
&lt;br&gt;&amp;nbsp;	connect(mediaWidget, SIGNAL(dvbStopped()), this, SLOT(liveStopped()));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	connect(mediaWidget, SIGNAL(osdKeyPressed(int)), this, SLOT(osdKeyPressed(int)));
&lt;br&gt;+	connect(mediaWidget, SIGNAL(toggleOsd()), this, SLOT(toggleOsd()));
&lt;br&gt;&amp;nbsp;	connect(&amp;osdChannelTimer, SIGNAL(timeout()), this, SLOT(tuneOsdChannel()));
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;diff -Naur ../kaffeine/src/dvb/dvbtab.cpp ./src/dvb/dvbtab.cpp
&lt;br&gt;--- ../kaffeine/src/dvb/dvbtab.cpp	2009-11-21 23:11:27.000000000 +0100
&lt;br&gt;+++ ./src/dvb/dvbtab.cpp	2009-11-21 23:08:52.000000000 +0100
&lt;br&gt;@@ -117,6 +117,10 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	connect(mediaWidget, SIGNAL(previousDvbChannel()), this, SLOT(previousChannel()));
&lt;br&gt;&amp;nbsp;	connect(mediaWidget, SIGNAL(nextDvbChannel()), this, SLOT(nextChannel()));
&lt;br&gt;+	connect(mediaWidget, SIGNAL(changeDvbChannel(const QString&amp;)), this, SLOT(setChannel(const QString&amp;)));
&lt;br&gt;+	connect(mediaWidget, SIGNAL(changeDvbChannel(int)), this, SLOT(setChannel(int)));
&lt;br&gt;+	connect(mediaWidget, SIGNAL(dvbLastChannel()), this, SLOT(setLastChannel()));
&lt;br&gt;+	connect(mediaWidget, SIGNAL(toggleInstantRecord()), this, SLOT(toggleInstantRecord()));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	connect(manager-&amp;gt;getRecordingManager(), SIGNAL(instantRecordingRemoved()),
&lt;br&gt;&amp;nbsp;		this, SLOT(instantRecordingRemoved()));
&lt;br&gt;@@ -144,7 +148,7 @@
&lt;br&gt;&amp;nbsp;	channelView-&amp;gt;setRootIsDecorated(false);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	if (!channelView-&amp;gt;header()-&amp;gt;restoreState(QByteArray::fromBase64(
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;KGlobal::config()-&amp;gt;group(&amp;quot;DVB&amp;quot;).readEntry(&amp;quot;ChannelViewState&amp;quot;, QByteArray())))) {
&lt;br&gt;+		KGlobal::config()-&amp;gt;group(&amp;quot;DVB&amp;quot;).readEntry(&amp;quot;ChannelViewState&amp;quot;, QByteArray())))) {
&lt;br&gt;&amp;nbsp;		channelView-&amp;gt;sortByColumn(0, Qt::AscendingOrder);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -210,6 +214,11 @@
&lt;br&gt;&amp;nbsp;	playChannel(manager-&amp;gt;getChannelModel()-&amp;gt;channelForName(name));
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+void DvbTab::playChannel(int number)
&lt;br&gt;+{
&lt;br&gt;+	playChannel(manager-&amp;gt;getChannelModel()-&amp;gt;channelForNumber(number));
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;void DvbTab::playLastChannel()
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	playChannel(KGlobal::config()-&amp;gt;group(&amp;quot;DVB&amp;quot;).readEntry(&amp;quot;LastChannel&amp;quot;));
&lt;br&gt;@@ -244,6 +253,19 @@
&lt;br&gt;&amp;nbsp;	dialog.exec();
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+void DvbTab::toggleInstantRecord()
&lt;br&gt;+{
&lt;br&gt;+	if (instantRecordAction-&amp;gt;isChecked()) {
&lt;br&gt;+		instantRecordAction-&amp;gt;setChecked(false);
&lt;br&gt;+		instantRecord(false);
&lt;br&gt;+	}
&lt;br&gt;+	else {
&lt;br&gt;+		instantRecordAction-&amp;gt;setChecked(true);
&lt;br&gt;+		instantRecord(true);
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;void DvbTab::instantRecord(bool checked)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	if (checked) {
&lt;br&gt;@@ -351,4 +373,73 @@
&lt;br&gt;&amp;nbsp;	if (channel != NULL) {
&lt;br&gt;&amp;nbsp;		manager-&amp;gt;getLiveView()-&amp;gt;playChannel(channel);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;+
&lt;br&gt;+	QModelIndex index = channelView-&amp;gt;indexAt(QPoint(0,0));
&lt;br&gt;+
&lt;br&gt;+	if (!index.isValid()) {
&lt;br&gt;+		return;
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	DvbChannelModel *channelModel = (DvbChannelModel*) index.model();
&lt;br&gt;+
&lt;br&gt;+	QModelIndexList list = channelModel-&amp;gt;match(channelModel-&amp;gt;index(0, 0), Qt::DisplayRole, channel-&amp;gt;name, 1, Qt::MatchExactly);
&lt;br&gt;+	QModelIndex index_new = list.value(0);
&lt;br&gt;+
&lt;br&gt;+	if (!index_new.isValid()) {
&lt;br&gt;+		return;
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	channelView-&amp;gt;setCurrentIndex(index_new);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+void DvbTab::setChannel(const QString &amp;name)
&lt;br&gt;+{
&lt;br&gt;+	QModelIndex index = channelView-&amp;gt;indexAt(QPoint(0,0));
&lt;br&gt;+
&lt;br&gt;+	if (!index.isValid()) {
&lt;br&gt;+		return;
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	DvbChannelModel *channelModel = (DvbChannelModel*) index.model();
&lt;br&gt;+
&lt;br&gt;+	QModelIndexList list = channelModel-&amp;gt;match(channelModel-&amp;gt;index(0, 0), Qt::DisplayRole, name, 1, Qt::MatchExactly);
&lt;br&gt;+	QModelIndex index_new = list.value(0);
&lt;br&gt;+
&lt;br&gt;+	if (!index_new.isValid()) {
&lt;br&gt;+		return;
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	channelView-&amp;gt;setCurrentIndex(index_new);
&lt;br&gt;+
&lt;br&gt;+	playChannel(name);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DvbTab::setChannel(int number)
&lt;br&gt;+{
&lt;br&gt;+
&lt;br&gt;+	QModelIndex index = channelView-&amp;gt;indexAt(QPoint(0,0));
&lt;br&gt;+
&lt;br&gt;+	if (!index.isValid()) {
&lt;br&gt;+		return;
&lt;br&gt;+	}
&lt;br&gt;+	
&lt;br&gt;+	DvbChannelModel *channelModel = (DvbChannelModel*) index.model();
&lt;br&gt;+
&lt;br&gt;+	QModelIndexList list = channelModel-&amp;gt;match(channelModel-&amp;gt;index(0, 1), Qt::DisplayRole, number, 1, Qt::MatchExactly);
&lt;br&gt;+	QModelIndex index_new = list.value(0);
&lt;br&gt;+
&lt;br&gt;+	if (!index_new.isValid()) {
&lt;br&gt;+		return;
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	channelView-&amp;gt;setCurrentIndex(index_new);
&lt;br&gt;+	playChannel(number);
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DvbTab::setLastChannel()
&lt;br&gt;+{
&lt;br&gt;+	playLastChannel();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;diff -Naur ../kaffeine/src/dvb/dvbtab.h ./src/dvb/dvbtab.h
&lt;br&gt;--- ../kaffeine/src/dvb/dvbtab.h	2009-11-21 23:11:27.000000000 +0100
&lt;br&gt;+++ ./src/dvb/dvbtab.h	2009-11-21 23:08:52.000000000 +0100
&lt;br&gt;@@ -38,11 +38,13 @@
&lt;br&gt;&amp;nbsp;class DvbTab : public TabBase
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	Q_OBJECT
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;public:
&lt;br&gt;&amp;nbsp;	DvbTab(KMenu *menu, KActionCollection *collection, MediaWidget *mediaWidget_);
&lt;br&gt;&amp;nbsp;	~DvbTab();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	void playChannel(const QString &amp;name);
&lt;br&gt;+	void playChannel(int number);
&lt;br&gt;&amp;nbsp;	void playLastChannel();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	void enableDvbDump();
&lt;br&gt;@@ -52,12 +54,16 @@
&lt;br&gt;&amp;nbsp;	void showEpgDialog();
&lt;br&gt;&amp;nbsp;	void showRecordingDialog();
&lt;br&gt;&amp;nbsp;	void instantRecord(bool checked);
&lt;br&gt;+	void toggleInstantRecord();
&lt;br&gt;&amp;nbsp;	void instantRecordingRemoved();
&lt;br&gt;&amp;nbsp;	void configureDvb();
&lt;br&gt;&amp;nbsp;	void playLive(const QModelIndex &amp;index);
&lt;br&gt;&amp;nbsp;	void previousChannel();
&lt;br&gt;&amp;nbsp;	void nextChannel();
&lt;br&gt;&amp;nbsp;	void cleanTimeShiftFiles();
&lt;br&gt;+	void setChannel(const QString &amp;name);
&lt;br&gt;+	void setChannel(int number);
&lt;br&gt;+	void setLastChannel();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;private:
&lt;br&gt;&amp;nbsp;	void activate();
&lt;br&gt;diff -Naur ../kaffeine/src/kaffeine.cpp ./src/kaffeine.cpp
&lt;br&gt;--- ../kaffeine/src/kaffeine.cpp	2009-11-21 23:11:28.000000000 +0100
&lt;br&gt;+++ ./src/kaffeine.cpp	2009-11-21 23:08:52.000000000 +0100
&lt;br&gt;@@ -327,6 +327,15 @@
&lt;br&gt;&amp;nbsp;	// initialize dbus objects
&lt;br&gt;&amp;nbsp;	QDBusConnection::sessionBus().registerObject(&amp;quot;/&amp;quot;, new MprisRootObject(this),
&lt;br&gt;&amp;nbsp;		QDBusConnection::ExportAllContents);
&lt;br&gt;+	QDBusConnection::sessionBus().registerObject(&amp;quot;/Player&amp;quot;, new MprisPlayerObject(mediaWidget),
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;QDBusConnection::ExportAllContents);
&lt;br&gt;+	QDBusConnection::sessionBus().registerObject(&amp;quot;/TrackList&amp;quot;, new MprisTrackListObject(mediaWidget),
&lt;br&gt;+		QDBusConnection::ExportAllContents);
&lt;br&gt;+	QDBusConnection::sessionBus().registerObject(&amp;quot;/DVB&amp;quot;, new MprisDvbObject(mediaWidget),
&lt;br&gt;+		QDBusConnection::ExportAllContents);
&lt;br&gt;+	QDBusConnection::sessionBus().registerObject(&amp;quot;/Display&amp;quot;, new MprisDisplayObject(mediaWidget),
&lt;br&gt;+		QDBusConnection::ExportAllContents);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	QDBusConnection::sessionBus().registerService(&amp;quot;org.mpris.kaffeine&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	show();
&lt;br&gt;diff -Naur ../kaffeine/src/mediawidget.cpp ./src/mediawidget.cpp
&lt;br&gt;--- ../kaffeine/src/mediawidget.cpp	2009-11-21 23:11:27.000000000 +0100
&lt;br&gt;+++ ./src/mediawidget.cpp	2009-11-21 23:08:52.000000000 +0100
&lt;br&gt;@@ -45,6 +45,8 @@
&lt;br&gt;&amp;nbsp;#include &amp;lt;KToolBar&amp;gt;
&lt;br&gt;&amp;nbsp;#include &amp;quot;osdwidget.h&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+#include &amp;lt;iostream&amp;gt;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;class DvbFeed : public Phonon::AbstractMediaStream
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;public:
&lt;br&gt;@@ -374,6 +376,8 @@
&lt;br&gt;&amp;nbsp;	connect(timer, SIGNAL(timeout()), this, SLOT(checkScreenSaver()));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	stateChanged(Phonon::StoppedState);
&lt;br&gt;+
&lt;br&gt;+	setRepeat(false);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;MediaWidget::~MediaWidget()
&lt;br&gt;@@ -543,6 +547,69 @@
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+bool MediaWidget::isPaused()
&lt;br&gt;+{
&lt;br&gt;+	if (playing &amp;&amp; mediaObject-&amp;gt;state() == Phonon::PausedState)
&lt;br&gt;+	{
&lt;br&gt;+		return true;
&lt;br&gt;+	}
&lt;br&gt;+	return false;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+// also returns true when paused
&lt;br&gt;+bool MediaWidget::isPlaying()
&lt;br&gt;+{
&lt;br&gt;+	return playing;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::setRepeat(bool repeat_)
&lt;br&gt;+{
&lt;br&gt;+	repeat = repeat_;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+bool MediaWidget::isRepeat()
&lt;br&gt;+{
&lt;br&gt;+	return repeat;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+bool MediaWidget::hasMedia()
&lt;br&gt;+{
&lt;br&gt;+	if ( mediaObject-&amp;gt;currentSource().type() != Phonon::MediaSource::Invalid ) {
&lt;br&gt;+		std::cout &amp;lt;&amp;lt; &amp;quot;KAFFEINE: true&amp;quot; &amp;lt;&amp;lt; std::endl;
&lt;br&gt;+		return true;
&lt;br&gt;+	}
&lt;br&gt;+	else {
&lt;br&gt;+		std::cout &amp;lt;&amp;lt; &amp;quot;KAFFEINE: false&amp;quot; &amp;lt;&amp;lt; std::endl;
&lt;br&gt;+		return false;
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::setDvbChannel(int number)
&lt;br&gt;+{
&lt;br&gt;+	if (dvbFeed != NULL) {
&lt;br&gt;+		emit changeDvbChannel(number);
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::setDvbChannel(const QString &amp;name)
&lt;br&gt;+{
&lt;br&gt;+	if (dvbFeed != NULL) {
&lt;br&gt;+		emit changeDvbChannel(name);
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::setDvbLastChannel()
&lt;br&gt;+{
&lt;br&gt;+	if (dvbFeed != NULL) {
&lt;br&gt;+		emit dvbLastChannel();
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::fullScreen()
&lt;br&gt;+{
&lt;br&gt;+	emit toggleFullScreen();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;void MediaWidget::stateChanged(Phonon::State state)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	bool newPlaying = false;
&lt;br&gt;@@ -551,6 +618,7 @@
&lt;br&gt;&amp;nbsp;		case Phonon::BufferingState:
&lt;br&gt;&amp;nbsp;		case Phonon::PlayingState:
&lt;br&gt;&amp;nbsp;		case Phonon::PausedState:
&lt;br&gt;+			paused = true;
&lt;br&gt;&amp;nbsp;			newPlaying = true;
&lt;br&gt;&amp;nbsp;			break;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -655,6 +723,31 @@
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+void MediaWidget::playPause() {
&lt;br&gt;+	//if (actionPlayPause-&amp;gt;text() == textPlay) {
&lt;br&gt;+	if (isPaused()) {
&lt;br&gt;+		playPause(false);
&lt;br&gt;+	}
&lt;br&gt;+	else {
&lt;br&gt;+		playPause(true);
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::play() {
&lt;br&gt;+	if (playing &amp;&amp; actionPlayPause-&amp;gt;text() == textPlay) {
&lt;br&gt;+		playPause(false);
&lt;br&gt;+	}
&lt;br&gt;+	else if (!playing) {
&lt;br&gt;+		emit playlistPlay();
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::pause() {
&lt;br&gt;+	if (playing &amp;&amp; actionPlayPause-&amp;gt;text() == textPause) {
&lt;br&gt;+		playPause(true);
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;void MediaWidget::stop()
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	mediaObject-&amp;gt;stop();
&lt;br&gt;@@ -726,6 +819,17 @@
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+int MediaWidget::getVolume()
&lt;br&gt;+{
&lt;br&gt;+	int volume = audioOutput-&amp;gt;volume() * 100;
&lt;br&gt;+
&lt;br&gt;+	if ( volume &amp;gt;= 0 &amp;&amp; volume &amp;lt;= 100 ) {
&lt;br&gt;+		return volume;
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	return 0;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;void MediaWidget::changeVolume(int volume)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	audioOutput-&amp;gt;setVolume(volume * qreal(0.01));
&lt;br&gt;@@ -915,6 +1019,16 @@
&lt;br&gt;&amp;nbsp;	mediaObject-&amp;gt;seek(mediaObject-&amp;gt;currentTime() + 1000 * longSkipDuration);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+void MediaWidget::setPosition(int position)
&lt;br&gt;+{
&lt;br&gt;+	mediaObject-&amp;gt;seek(position);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MediaWidget::getPosition()
&lt;br&gt;+{
&lt;br&gt;+	return mediaObject-&amp;gt;currentTime();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;void MediaWidget::jumpToPosition()
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	JumpToPositionDialog dialog(QTime().addMSecs(mediaObject-&amp;gt;currentTime()), this);
&lt;br&gt;@@ -1150,3 +1264,57 @@
&lt;br&gt;&amp;nbsp;		subtitleBox-&amp;gt;setEnabled(false);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+QVariantMap MediaWidget::getMetadata()
&lt;br&gt;+{
&lt;br&gt;+	QVariantMap ret;
&lt;br&gt;+	QMultiMap&amp;lt;QString, QString&amp;gt; multiMap = mediaObject-&amp;gt;metaData();
&lt;br&gt;+	QMultiMap&amp;lt;QString, QString&amp;gt;::const_iterator i = multiMap.constBegin();
&lt;br&gt;+	
&lt;br&gt;+	while( i != multiMap.constEnd() )
&lt;br&gt;+	{
&lt;br&gt;+		ret[ i.key() ] = QVariant( i.value() );
&lt;br&gt;+		i++;
&lt;br&gt;+	}
&lt;br&gt;+	return ret;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int getNumberOfTracks()
&lt;br&gt;+{
&lt;br&gt;+	//TODO
&lt;br&gt;+	return 0;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MediaWidget::getCurrentTrack()
&lt;br&gt;+{
&lt;br&gt;+	//TODO
&lt;br&gt;+	return 0;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MediaWidget::getLength()
&lt;br&gt;+{
&lt;br&gt;+	//TODO
&lt;br&gt;+	return 0;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int MediaWidget::addTrack(QString track, bool play)
&lt;br&gt;+{
&lt;br&gt;+	//TODO
&lt;br&gt;+	return 0;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::delTrack(int position)
&lt;br&gt;+{
&lt;br&gt;+	//TODO
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::setLoop(bool loop)
&lt;br&gt;+{
&lt;br&gt;+	setRepeat(loop);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::setRandom(bool random)
&lt;br&gt;+{
&lt;br&gt;+	//TODO
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;diff -Naur ../kaffeine/src/mediawidget.h ./src/mediawidget.h
&lt;br&gt;--- ../kaffeine/src/mediawidget.h	2009-11-21 23:11:27.000000000 +0100
&lt;br&gt;+++ ./src/mediawidget.h	2009-11-21 23:08:52.000000000 +0100
&lt;br&gt;@@ -21,6 +21,7 @@
&lt;br&gt;&amp;nbsp;#ifndef MEDIAWIDGET_H
&lt;br&gt;&amp;nbsp;#define MEDIAWIDGET_H
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+#include &amp;lt;QVariantMap&amp;gt;
&lt;br&gt;&amp;nbsp;#include &amp;lt;QWidget&amp;gt;
&lt;br&gt;&amp;nbsp;#include &amp;lt;Phonon/Global&amp;gt;
&lt;br&gt;&amp;nbsp;#include &amp;lt;Phonon/ObjectDescription&amp;gt;
&lt;br&gt;@@ -48,9 +49,14 @@
&lt;br&gt;&amp;nbsp;class MediaWidget : public QWidget
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	Q_OBJECT
&lt;br&gt;+	friend class MprisPlayerObject;
&lt;br&gt;+	friend class MprisTrackListObject;
&lt;br&gt;+	friend class MprisDvbObject;
&lt;br&gt;+	friend class MprisDisplayObject;	
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;public:
&lt;br&gt;&amp;nbsp;	MediaWidget(KMenu *menu_, KAction *fullScreenAction, KToolBar *toolBar,
&lt;br&gt;-		 &amp;nbsp; &amp;nbsp;KActionCollection *collection, QWidget *parent);
&lt;br&gt;+			KActionCollection *collection, QWidget *parent);
&lt;br&gt;&amp;nbsp;	~MediaWidget();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	static QString extensionFilter(); // usable for KFileDialog::setFilter()
&lt;br&gt;@@ -78,6 +84,10 @@
&lt;br&gt;&amp;nbsp;	void setShortSkipDuration(int duration);
&lt;br&gt;&amp;nbsp;	void setLongSkipDuration(int duration);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	void setRepeat(bool repeat_);
&lt;br&gt;+	bool isRepeat();
&lt;br&gt;+	bool hasMedia();
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;public slots:
&lt;br&gt;&amp;nbsp;	void stop();
&lt;br&gt;&amp;nbsp;	void stopDvb();
&lt;br&gt;@@ -98,14 +108,34 @@
&lt;br&gt;&amp;nbsp;	void startDvbTimeShift();
&lt;br&gt;&amp;nbsp;	void changeDvbAudioChannel(int index);
&lt;br&gt;&amp;nbsp;	void changeDvbSubtitle(int index);
&lt;br&gt;+	void changeDvbChannel(int number);
&lt;br&gt;+	void changeDvbChannel(const QString &amp;name);
&lt;br&gt;&amp;nbsp;	void dvbStopped();
&lt;br&gt;&amp;nbsp;	void osdKeyPressed(int key);
&lt;br&gt;+	void toggleOsd();
&lt;br&gt;+
&lt;br&gt;+	void dvbLastChannel();
&lt;br&gt;+	void toggleInstantRecord();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;private slots:
&lt;br&gt;+	bool isPlaying();
&lt;br&gt;+	bool isPaused();
&lt;br&gt;+
&lt;br&gt;+	int getPosition();
&lt;br&gt;+	int getCurrentTrack();
&lt;br&gt;+	int getLength();
&lt;br&gt;+	int addTrack(QString track, bool play);
&lt;br&gt;+	int getVolume();
&lt;br&gt;+
&lt;br&gt;+	QVariantMap getMetadata();
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	void stateChanged(Phonon::State state);
&lt;br&gt;&amp;nbsp;	void playbackFinished();
&lt;br&gt;&amp;nbsp;	void previous();
&lt;br&gt;&amp;nbsp;	void playPause(bool paused);
&lt;br&gt;+	void playPause();
&lt;br&gt;+	void play();
&lt;br&gt;+	void pause();
&lt;br&gt;&amp;nbsp;	void next();
&lt;br&gt;&amp;nbsp;	void changeAudioChannel(int index);
&lt;br&gt;&amp;nbsp;	void changeSubtitle(int index);
&lt;br&gt;@@ -132,6 +162,7 @@
&lt;br&gt;&amp;nbsp;	void skipForward();
&lt;br&gt;&amp;nbsp;	void longSkipForward();
&lt;br&gt;&amp;nbsp;	void jumpToPosition();
&lt;br&gt;+	void setPosition(int position);
&lt;br&gt;&amp;nbsp;	void timeButtonClicked();
&lt;br&gt;&amp;nbsp;	void updateTimeButton();
&lt;br&gt;&amp;nbsp;	void updateCaption();
&lt;br&gt;@@ -144,6 +175,16 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	void checkScreenSaver();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	void setDvbChannel(int number);
&lt;br&gt;+	void setDvbChannel(const QString &amp;name);
&lt;br&gt;+	void setDvbLastChannel();
&lt;br&gt;+	
&lt;br&gt;+	void fullScreen();
&lt;br&gt;+
&lt;br&gt;+	void delTrack(int position);
&lt;br&gt;+	void setLoop(bool loop);
&lt;br&gt;+	void setRandom(bool random);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;private:
&lt;br&gt;&amp;nbsp;	void contextMenuEvent(QContextMenuEvent *event);
&lt;br&gt;&amp;nbsp;	void mouseDoubleClickEvent(QMouseEvent *);
&lt;br&gt;@@ -164,6 +205,7 @@
&lt;br&gt;&amp;nbsp;	Phonon::MediaController *mediaController;
&lt;br&gt;&amp;nbsp;	DvbFeed *dvbFeed;
&lt;br&gt;&amp;nbsp;	bool playing;
&lt;br&gt;+	bool paused;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	KAction *actionPrevious;
&lt;br&gt;&amp;nbsp;	KAction *actionPlayPause;
&lt;br&gt;@@ -204,6 +246,7 @@
&lt;br&gt;&amp;nbsp;	KAction *jumpToPositionAction;
&lt;br&gt;&amp;nbsp;	QPushButton *timeButton;
&lt;br&gt;&amp;nbsp;	bool showElapsedTime;
&lt;br&gt;+	bool repeat;
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;#endif /* MEDIAWIDGET_H */
&lt;br&gt;diff -Naur ../kaffeine/src/playlist/playlistmodel.cpp ./src/playlist/playlistmodel.cpp
&lt;br&gt;--- ../kaffeine/src/playlist/playlistmodel.cpp	2009-11-21 23:11:27.000000000 +0100
&lt;br&gt;+++ ./src/playlist/playlistmodel.cpp	2009-11-21 23:08:52.000000000 +0100
&lt;br&gt;@@ -48,6 +48,7 @@
&lt;br&gt;&amp;nbsp;	QAbstractTableModel(parent), mediaWidget(mediaWidget_), repeat(false)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	setSupportedDragActions(Qt::MoveAction);
&lt;br&gt;+	mediaWidget-&amp;gt;setRepeat(false);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	connect(mediaWidget, SIGNAL(playlistPrevious()), this, SLOT(playPreviousTrack()));
&lt;br&gt;&amp;nbsp;	connect(mediaWidget, SIGNAL(playlistPlay()), this, SLOT(playCurrentTrack()));
&lt;br&gt;@@ -351,6 +352,7 @@
&lt;br&gt;&amp;nbsp;void PlaylistModel::repeatPlaylist(bool repeat_)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	repeat = repeat_;
&lt;br&gt;+	mediaWidget-&amp;gt;setRepeat(repeat);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static bool playlistIndexLess(const PlaylistTrack &amp;x, const PlaylistTrack &amp;y)
&lt;br&gt;&lt;br /&gt;------------------------------------------------------------------------------
&lt;br&gt;Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
&lt;br&gt;trial. Simplify your report design, integration and deployment - and focus on 
&lt;br&gt;what you do best, core application coding. Discover what's new with
&lt;br&gt;Crystal Reports now. &amp;nbsp;&lt;a href=&quot;http://p.sf.net/sfu/bobj-july&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/bobj-july&lt;/a&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;kaffeine-devel mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26461092&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-devel@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-devel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-devel&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-devel-f3473.html&quot; embed=&quot;fixTarget[3473]&quot; target=&quot;_top&quot; &gt;kaffeine-devel&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/dbus-support-for-kaffeine-tp26128565p26461092.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26460318</id>
	<title>User</title>
	<published>2009-11-21T13:04:19Z</published>
	<updated>2009-11-21T13:04:19Z</updated>
	<author>
		<name>Ismo Kuhmonen</name>
	</author>
	<content type="html">&lt;br clear=&quot;all&quot;&gt;&lt;br&gt;-- &lt;br&gt;Ismo Kuhmonen&lt;br&gt;Kontiopuisto  7 B 18&lt;br&gt;76120 Pieksämäki&lt;br&gt;p 046 6336111 &amp;amp;  044 9627227&lt;br&gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26460318&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;ismokuh@...&lt;/a&gt;&lt;br&gt;
&lt;br /&gt;------------------------------------------------------------------------------
&lt;br&gt;Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
&lt;br&gt;trial. Simplify your report design, integration and deployment - and focus on 
&lt;br&gt;what you do best, core application coding. Discover what's new with
&lt;br&gt;Crystal Reports now. &amp;nbsp;&lt;a href=&quot;http://p.sf.net/sfu/bobj-july&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/bobj-july&lt;/a&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;kaffeine-user mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26460318&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-user@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-user-f3474.html&quot; embed=&quot;fixTarget[3474]&quot; target=&quot;_top&quot; &gt;kaffeine-user&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/User-tp26460318p26460318.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26457260</id>
	<title>[Fwd: dvb-c at-KarrerNet]</title>
	<published>2009-11-21T05:42:46Z</published>
	<updated>2009-11-21T05:42:46Z</updated>
	<author>
		<name>Thomas E. Horner</name>
	</author>
	<content type="html">&lt;br&gt;hi!
&lt;br&gt;&lt;br&gt;pfa the updated list of channels.
&lt;br&gt;&lt;br&gt;br,
&lt;br&gt;&amp;nbsp; &amp;nbsp;thomas
&lt;br&gt;&lt;br&gt;&lt;br&gt;-------- Original-Nachricht --------
&lt;br&gt;Betreff: 	dvb-c at-KarrerNet
&lt;br&gt;Datum: 	Sat, 10 Jan 2009 12:04:45 +0100
&lt;br&gt;Von: 	Thomas E. Horner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26457260&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;office@...&lt;/a&gt;&amp;gt;
&lt;br&gt;An: 	&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26457260&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-user@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;hi folks!
&lt;br&gt;&lt;br&gt;i live in st. florian bei linz / austria, postal code A-4490.
&lt;br&gt;i just created the attached kaffeine dvb-c scan list out of a w_scan list.
&lt;br&gt;i verified it by scanning for channels and everything (including epg) 
&lt;br&gt;now works fine.
&lt;br&gt;also, all channels in the karrernet cable network were found correctly 
&lt;br&gt;using the list.
&lt;br&gt;i ask you to include the file in future releases so other users may scan 
&lt;br&gt;more conveniently.
&lt;br&gt;&lt;br&gt;br,
&lt;br&gt;&amp;nbsp; &amp;nbsp;thomas
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;# Kabel St. Florian bei Linz/AT KarrerNet
&lt;br&gt;# 2009-01-10
&lt;br&gt;# freq sr fec mod
&lt;br&gt;C 442000000 6900000 NONE QAM64
&lt;br&gt;C 458000000 6900000 NONE QAM64
&lt;br&gt;C 466000000 6900000 NONE QAM64
&lt;br&gt;C 474000000 6900000 NONE QAM64
&lt;br&gt;C 482000000 6900000 NONE QAM64
&lt;br&gt;C 490000000 6900000 NONE QAM64
&lt;br&gt;C 498000000 6900000 NONE QAM64
&lt;br&gt;C 506000000 6900000 NONE QAM64
&lt;br&gt;C 514000000 6900000 NONE QAM64
&lt;br&gt;C 522000000 6900000 NONE QAM64
&lt;br&gt;C 530000000 6900000 NONE QAM64
&lt;br&gt;C 538000000 6900000 NONE QAM64
&lt;br&gt;C 546000000 6900000 NONE QAM64
&lt;br&gt;C 554000000 6900000 NONE QAM64
&lt;br&gt;C 562000000 6900000 NONE QAM64
&lt;br&gt;C 570000000 6900000 NONE QAM64
&lt;br&gt;C 578000000 6900000 NONE QAM64
&lt;br&gt;C 586000000 6900000 NONE QAM64
&lt;br&gt;C 610000000 6900000 NONE QAM64
&lt;br&gt;C 386000000 6900000 NONE QAM256
&lt;br&gt;C 394000000 6900000 NONE QAM256
&lt;br&gt;C 410000000 6900000 NONE QAM256
&lt;br&gt;C 434000000 6900000 NONE QAM256
&lt;br&gt;&lt;br&gt;&lt;br /&gt; &lt;br /&gt;------------------------------------------------------------------------------
&lt;br&gt;Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
&lt;br&gt;trial. Simplify your report design, integration and deployment - and focus on 
&lt;br&gt;what you do best, core application coding. Discover what's new with
&lt;br&gt;Crystal Reports now. &amp;nbsp;&lt;a href=&quot;http://p.sf.net/sfu/bobj-july&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/bobj-july&lt;/a&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;kaffeine-user mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26457260&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-user@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&lt;/a&gt;&lt;br&gt;&lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://old.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;smime.p7s&lt;/strong&gt; (7K) &lt;a href=&quot;http://old.nabble.com/attachment/26457260/0/smime.p7s&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-user-f3474.html&quot; embed=&quot;fixTarget[3474]&quot; target=&quot;_top&quot; &gt;kaffeine-user&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-Fwd%3A-dvb-c-at-KarrerNet--tp26457260p26457260.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26445509</id>
	<title>Re: dbus support for kaffeine</title>
	<published>2009-11-20T07:47:10Z</published>
	<updated>2009-11-20T07:47:10Z</updated>
	<author>
		<name>Pascal Pollet</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;this e-mail is just to say that I didn't forget what I promised to do, I
&lt;br&gt;simply hadn't much time in the two last weeks. But I think that I will
&lt;br&gt;be able to send you a new patch in the next few days, if nothing gets in
&lt;br&gt;the way... Have a nice week-end!
&lt;br&gt;&lt;br&gt;cheers,
&lt;br&gt;Pascal
&lt;br&gt;&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
&lt;br&gt;trial. Simplify your report design, integration and deployment - and focus on 
&lt;br&gt;what you do best, core application coding. Discover what's new with
&lt;br&gt;Crystal Reports now. &amp;nbsp;&lt;a href=&quot;http://p.sf.net/sfu/bobj-july&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/bobj-july&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;kaffeine-devel mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26445509&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-devel@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-devel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-devel&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-devel-f3473.html&quot; embed=&quot;fixTarget[3473]&quot; target=&quot;_top&quot; &gt;kaffeine-devel&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/dbus-support-for-kaffeine-tp26128565p26445509.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26390411</id>
	<title>Request: kaffeine --dvb start parameter</title>
	<published>2009-11-17T06:00:48Z</published>
	<updated>2009-11-17T06:00:48Z</updated>
	<author>
		<name>Boris Cuber-2</name>
	</author>
	<content type="html">Hi kaffeine people,
&lt;br&gt;&lt;br&gt;One feature i miss from the old versions is the possibilty
&lt;br&gt;to start kaffeine from the cmdline in dvb mode with 
&lt;br&gt;the last tuned channel.
&lt;br&gt;&lt;br&gt;This would also keep some compatability to ~kaffeine-0.8.x.
&lt;br&gt;I dunno if this is really a &amp;quot;wanted&amp;quot; feature, but it improves my
&lt;br&gt;tv/dvb watching experience. I'm sure this could also be done
&lt;br&gt;by altering the --tv parameter, but i'm no qt/c++ programmer
&lt;br&gt;and my tries ended up in segfaults when starting kaffeine.
&lt;br&gt;&lt;br&gt;Whatever, it'd be cool to have this feature back ;)
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;A simple patch (applies to trunk), adds a --dvb parameter:
&lt;br&gt;-------------------------------------
&lt;br&gt;diff -ur kaffeine-9999/src/kaffeine.cpp kaffeine-9999-new/src/kaffeine.cpp
&lt;br&gt;--- kaffeine-9999/src/kaffeine.cpp	2009-11-16 16:11:31.205787337 +0100
&lt;br&gt;+++ kaffeine-9999-new/src/kaffeine.cpp	2009-11-16 21:30:35.943537036 +0100
&lt;br&gt;@@ -345,6 +345,7 @@
&lt;br&gt;&amp;nbsp;	options.add(&amp;quot;audiocd&amp;quot;, ki18n(&amp;quot;Play Audio CD&amp;quot;));
&lt;br&gt;&amp;nbsp;	options.add(&amp;quot;videocd&amp;quot;, ki18n(&amp;quot;Play Video CD&amp;quot;));
&lt;br&gt;&amp;nbsp;	options.add(&amp;quot;dvd&amp;quot;, ki18n(&amp;quot;Play DVD&amp;quot;));
&lt;br&gt;+	options.add(&amp;quot;dvb&amp;quot;, ki18n(&amp;quot;Play TV (last tuned channel)&amp;quot;));	// compatibility 
&lt;br&gt;option to kaffeine-0.8.x
&lt;br&gt;&amp;nbsp;	options.add(&amp;quot;tv &amp;lt;channel&amp;gt;&amp;quot;, ki18n(&amp;quot;Play TV channel&amp;quot;));
&lt;br&gt;&amp;nbsp;	options.add(&amp;quot;dumpdvb&amp;quot;, ki18nc(&amp;quot;command line option&amp;quot;, &amp;quot;Dump dvb data (debug 
&lt;br&gt;option)&amp;quot;));
&lt;br&gt;&amp;nbsp;	options.add(&amp;quot;+[file]&amp;quot;, ki18n(&amp;quot;Files or URLs to play&amp;quot;));
&lt;br&gt;@@ -387,6 +388,16 @@
&lt;br&gt;&amp;nbsp;		return;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	if (args-&amp;gt;isSet(&amp;quot;dvb&amp;quot;)) {
&lt;br&gt;+		// Start kaffeine in dvb mode using last watched channel
&lt;br&gt;+
&lt;br&gt;+		activateTab(DvbTabId);
&lt;br&gt;+		dvbTab-&amp;gt;playLastChannel();
&lt;br&gt;+
&lt;br&gt;+		args-&amp;gt;clear();
&lt;br&gt;+		return;
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	QString dvb = args-&amp;gt;getOption(&amp;quot;tv&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	if (!dvb.isEmpty()) {
&lt;br&gt;&lt;br&gt;&lt;br&gt;-------------------------------------
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
&lt;br&gt;trial. Simplify your report design, integration and deployment - and focus on 
&lt;br&gt;what you do best, core application coding. Discover what's new with
&lt;br&gt;Crystal Reports now. &amp;nbsp;&lt;a href=&quot;http://p.sf.net/sfu/bobj-july&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/bobj-july&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;kaffeine-devel mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26390411&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-devel@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-devel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-devel&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-devel-f3473.html&quot; embed=&quot;fixTarget[3473]&quot; target=&quot;_top&quot; &gt;kaffeine-devel&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Request%3A-kaffeine---dvb-start-parameter-tp26390411p26390411.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26325040</id>
	<title>Re: Review Request: qgpgmecryptoconfig.cpp:744: warning: suggest explicit braces to avoid ambiguous 'else'</title>
	<published>2009-11-12T11:02:23Z</published>
	<updated>2009-11-12T11:02:23Z</updated>
	<author>
		<name>Bugzilla from christophpfister@gmail.com</name>
	</author>
	<content type="html">&lt;br&gt;-----------------------------------------------------------
&lt;br&gt;This is an automatically generated e-mail. To reply, visit:
&lt;br&gt;&lt;a href=&quot;http://reviewboard.kde.org/r/2147/#review3058&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://reviewboard.kde.org/r/2147/#review3058&lt;/a&gt;&lt;br&gt;-----------------------------------------------------------
&lt;br&gt;&lt;br&gt;&lt;br&gt;this patch doesn't belong to the group 'kaffeine'
&lt;br&gt;&lt;br&gt;- Christoph
&lt;br&gt;&lt;br&gt;&lt;br&gt;On 2009-11-12 17:55:03, Guy Maurel wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; -----------------------------------------------------------
&lt;br&gt;&amp;gt; This is an automatically generated e-mail. To reply, visit:
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://reviewboard.kde.org/r/2147/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://reviewboard.kde.org/r/2147/&lt;/a&gt;&lt;br&gt;&amp;gt; -----------------------------------------------------------
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; (Updated 2009-11-12 17:55:03)
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Review request for kaffeine.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Summary
&lt;br&gt;&amp;gt; -------
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; The dashboard
&lt;br&gt;&amp;gt; &amp;nbsp; &lt;a href=&quot;http://dashboard.akonadi-project.org/CDash/index.php?project=kdelibs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://dashboard.akonadi-project.org/CDash/index.php?project=kdelibs&lt;/a&gt;&lt;br&gt;&amp;gt; reports:
&lt;br&gt;&amp;gt; /.../kdepim/libkleo/backends/qgpgme/qgpgmecryptoconfig.cpp:744: warning: suggest explicit braces to avoid ambiguous 'else'
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; at
&lt;br&gt;&amp;gt; QGpgMECryptoConfigEntry::resetToDefault(
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; my proposal: complete with some more parentheses
&lt;br&gt;&amp;gt; see: qgpgmecryptoconfig-gm-58.diff
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Diffs
&lt;br&gt;&amp;gt; -----
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;nbsp; /trunk/KDE/kdepim/libkleo/backends/qgpgme/qgpgmecryptoconfig.cpp 1046400 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Diff: &lt;a href=&quot;http://reviewboard.kde.org/r/2147/diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://reviewboard.kde.org/r/2147/diff&lt;/a&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Testing
&lt;br&gt;&amp;gt; -------
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Thanks,
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Guy
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
&lt;br&gt;trial. Simplify your report design, integration and deployment - and focus on 
&lt;br&gt;what you do best, core application coding. Discover what's new with
&lt;br&gt;Crystal Reports now. &amp;nbsp;&lt;a href=&quot;http://p.sf.net/sfu/bobj-july&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/bobj-july&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;kaffeine-user mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26325040&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-user@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-user-f3474.html&quot; embed=&quot;fixTarget[3474]&quot; target=&quot;_top&quot; &gt;kaffeine-user&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Re%3A-Review-Request%3A-qgpgmecryptoconfig.cpp%3A744%3A-warning%3A-suggest-explicit-braces-to-avoid-ambiguous-%27else%27-tp26325040p26325040.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26291495</id>
	<title>Re: kaffeine for kde4: what the?</title>
	<published>2009-11-10T13:26:44Z</published>
	<updated>2009-11-10T13:26:44Z</updated>
	<author>
		<name>Beso-2</name>
	</author>
	<content type="html">&lt;br&gt;&lt;div class=&quot;gmail_quote&quot;&gt;2009/11/10 Andrius da Costa Ribas &lt;span dir=&quot;ltr&quot;&gt;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26291495&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andriusmao@...&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;blockquote class=&quot;gmail_quote&quot; style=&quot;border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;&quot;&gt;
regarding xine configuration: this is configurable through &amp;#39;systemsettings&amp;#39; or &amp;#39;kcmshell4 kcm_phonon&amp;#39;&lt;div&gt;please note that phonon may use other backend instead of xine.&lt;br clear=&quot;all&quot;&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;
 &lt;br&gt;well, the phonon xine configuration is so very damn bad..... you cannot configure almost nothing.... if you look at xine configuration in old kaffeine 0.8 the configuration dialog has so many options.... i&amp;#39;ve actually installed old kaffeine to be able to configure xine settings.... and this is the same for gstreamer. i still think that phonon configuration dialog is still an infant!!!&lt;br&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br&gt;-- &lt;br&gt;dott. ing. beso&lt;br&gt;
&lt;br /&gt;------------------------------------------------------------------------------
&lt;br&gt;Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
&lt;br&gt;trial. Simplify your report design, integration and deployment - and focus on 
&lt;br&gt;what you do best, core application coding. Discover what's new with
&lt;br&gt;Crystal Reports now. &amp;nbsp;&lt;a href=&quot;http://p.sf.net/sfu/bobj-july&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/bobj-july&lt;/a&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;kaffeine-user mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26291495&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-user@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-user-f3474.html&quot; embed=&quot;fixTarget[3474]&quot; target=&quot;_top&quot; &gt;kaffeine-user&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/kaffeine-for-kde4%3A-what-the--tp26275811p26291495.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26290802</id>
	<title>Re: kaffeine for kde4: what the?</title>
	<published>2009-11-10T12:41:30Z</published>
	<updated>2009-11-10T12:41:30Z</updated>
	<author>
		<name>Andrius da Costa Ribas</name>
	</author>
	<content type="html">regarding xine configuration: this is configurable through &amp;#39;systemsettings&amp;#39; or &amp;#39;kcmshell4 kcm_phonon&amp;#39;&lt;div&gt;please note that phonon may use other backend instead of xine.&lt;br&gt;&lt;br&gt;&lt;div class=&quot;gmail_quote&quot;&gt;2009/11/9 Dexter Filmore &lt;span dir=&quot;ltr&quot;&gt;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26290802&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Dexter.Filmore@...&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;

&lt;blockquote class=&quot;gmail_quote&quot; style=&quot;margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;&quot;&gt;So after 7 years of kde3 I set up a kubuntu 9.10 box for testing which&lt;br&gt;
replaced my computer I use for watching videos.&lt;br&gt;
&lt;br&gt;
This was my first real attempt on kde4 after 3 tries in VMs with kde4.0, 4.1&lt;br&gt;
and 4.2 and after I decided that 4.3 still royally sucked I moved to gnome.&lt;br&gt;
&lt;br&gt;
Wanted to keep Kaffeine as my movie player, still.&lt;br&gt;
&lt;br&gt;
Now:&lt;br&gt;
-F5 to F9 don&amp;#39;t switch aspect ratio&lt;br&gt;
-&amp;quot;I&amp;quot; doesn&amp;#39;t toggle interlacing&lt;br&gt;
-I can&amp;#39;t click somewhere into the position bar and the slider jumps there. I&lt;br&gt;
have to grab and drag it&lt;br&gt;
-dropping a file into the player view doesn&amp;#39;t play it at once but queues it.&lt;br&gt;
It&amp;#39;s been like this for years, why did you change it? We all got used to it.&lt;br&gt;
-mouse wheel on position bar doesn&amp;#39;t do a thing.&lt;br&gt;
-biggest problem so far: I can&amp;#39;t find any options where to configure the xine&lt;br&gt;
engine. I guess I&amp;#39;ll have to do that from KDE kontrols now that we got this&lt;br&gt;
phonon thing going, but how would I call that from gnome?&lt;br&gt;
&lt;br&gt;
Dex&lt;br&gt;
&lt;font color=&quot;#888888&quot;&gt;&lt;br&gt;
&lt;br&gt;
--&lt;br&gt;
-----BEGIN GEEK CODE BLOCK-----&lt;br&gt;
Version: 3.12&lt;br&gt;
GCS d--(+)@ s-:+ a C++++ UL++ P+&amp;gt;++ L+++&amp;gt;++++ E-- W++ N o? K-&lt;br&gt;
w--(---) !O M+ V- PS+ PE Y++ PGP t++(---)@ 5 X+(++) R+(++) tv--(+)@&lt;br&gt;
b++(+++) DI+++ D- G++ e* h&amp;gt;++ r* y?&lt;br&gt;
------END GEEK CODE BLOCK------&lt;br&gt;
&lt;/font&gt;&lt;br&gt;------------------------------------------------------------------------------&lt;br&gt;
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day&lt;br&gt;
trial. Simplify your report design, integration and deployment - and focus on&lt;br&gt;
what you do best, core application coding. Discover what&amp;#39;s new with&lt;br&gt;
Crystal Reports now.  &lt;a href=&quot;http://p.sf.net/sfu/bobj-july&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/bobj-july&lt;/a&gt;&lt;br&gt;_______________________________________________&lt;br&gt;
kaffeine-user mailing list&lt;br&gt;
&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26290802&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-user@...&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;br&gt;&lt;/div&gt;
&lt;br /&gt;------------------------------------------------------------------------------
&lt;br&gt;Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
&lt;br&gt;trial. Simplify your report design, integration and deployment - and focus on 
&lt;br&gt;what you do best, core application coding. Discover what's new with
&lt;br&gt;Crystal Reports now. &amp;nbsp;&lt;a href=&quot;http://p.sf.net/sfu/bobj-july&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/bobj-july&lt;/a&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;kaffeine-user mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26290802&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-user@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-user-f3474.html&quot; embed=&quot;fixTarget[3474]&quot; target=&quot;_top&quot; &gt;kaffeine-user&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/kaffeine-for-kde4%3A-what-the--tp26275811p26290802.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26279905</id>
	<title>Re: dbus support for kaffeine</title>
	<published>2009-11-10T00:32:53Z</published>
	<updated>2009-11-10T00:32:53Z</updated>
	<author>
		<name>Pascal Pollet</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;&amp;gt; There exists a mediaplayer dbus
&lt;br&gt;&amp;gt; specification MPRIS [1], which I consider worth to implement (so that
&lt;br&gt;&amp;gt; we don't add yet another dbus interface for common functionality).
&lt;br&gt;&lt;br&gt;I fully agree, it' good to have standards.
&lt;br&gt;&lt;br&gt;&amp;gt; I've committed preliminary support to svn (the &amp;quot;root&amp;quot; object).
&lt;br&gt;&lt;br&gt;nice, I'll take it as a starting point.
&lt;br&gt;&lt;br&gt;&amp;gt; Could you please adapt your patch to that concept (i.e. add a tracklist and
&lt;br&gt;&amp;gt; player object; in case of need just method stubs)? 
&lt;br&gt;ok, no problem :) Yes for the beginning I will for sure leave some stubs
&lt;br&gt;for the more difficult functions, which can be implemented later...
&lt;br&gt;&lt;br&gt;&amp;gt; I'm aware of the
&lt;br&gt;&amp;gt; fact that the actions defined in that specification don't 100% map
&lt;br&gt;&amp;gt; Kaffeine's actions (e.g. Play() doing a rewind to the beginning of a
&lt;br&gt;&amp;gt; track), so you don't have to care about those details if you don't
&lt;br&gt;&amp;gt; want to do. I also know that not every mpris thing is possible
&lt;br&gt;&amp;gt; (especially the tracklist parts needs more work) and that there's not
&lt;br&gt;&amp;gt; a mpris thing for every action Kaffeine is able to perform (put them
&lt;br&gt;&amp;gt; in a separate object for now).
&lt;br&gt;I'll see what I can do, I already began to port my stuff yesterday... I
&lt;br&gt;would put methods like playPause() or increaseVolume() into the /Player
&lt;br&gt;object even if they are not included in the mpris-specs, because
&lt;br&gt;everything else would be very confusing... All the methods related to
&lt;br&gt;the display (fullscreen, aspect-ratio) could come into an object named
&lt;br&gt;/Display, and all the DVB-related stuff into an object /DVB. This can be
&lt;br&gt;changed very easily later anyway......
&lt;br&gt;&lt;br&gt;In my last patch I forgot a function like the setNumber() function in
&lt;br&gt;kaffeine 0.8 (with a timer for the input of numbers with more than one
&lt;br&gt;digit), which is very important for the use with a remote control. I
&lt;br&gt;will add this, and also a dbus-function to show/hide EPG information,
&lt;br&gt;which I forgot too...
&lt;br&gt;&lt;br&gt;I must say it's really nice to work on kaffeine, because it's codebase
&lt;br&gt;is very well structured and comprehensible, I got into it very fast.
&lt;br&gt;I'll try to not mess it up too much ;)
&lt;br&gt;&lt;br&gt;&lt;br&gt;cheers,
&lt;br&gt;Pascal
&lt;br&gt;&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
&lt;br&gt;trial. Simplify your report design, integration and deployment - and focus on 
&lt;br&gt;what you do best, core application coding. Discover what's new with
&lt;br&gt;Crystal Reports now. &amp;nbsp;&lt;a href=&quot;http://p.sf.net/sfu/bobj-july&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/bobj-july&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;kaffeine-devel mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26279905&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-devel@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-devel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-devel&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-devel-f3473.html&quot; embed=&quot;fixTarget[3473]&quot; target=&quot;_top&quot; &gt;kaffeine-devel&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/dbus-support-for-kaffeine-tp26128565p26279905.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26275811</id>
	<title>kaffeine for kde4: what the?</title>
	<published>2009-11-09T15:37:27Z</published>
	<updated>2009-11-09T15:37:27Z</updated>
	<author>
		<name>Dexter Filmore</name>
	</author>
	<content type="html">So after 7 years of kde3 I set up a kubuntu 9.10 box for testing which 
&lt;br&gt;replaced my computer I use for watching videos.
&lt;br&gt;&lt;br&gt;This was my first real attempt on kde4 after 3 tries in VMs with kde4.0, 4.1 
&lt;br&gt;and 4.2 and after I decided that 4.3 still royally sucked I moved to gnome.
&lt;br&gt;&lt;br&gt;Wanted to keep Kaffeine as my movie player, still.
&lt;br&gt;&lt;br&gt;Now: 
&lt;br&gt;-F5 to F9 don't switch aspect ratio
&lt;br&gt;-&amp;quot;I&amp;quot; doesn't toggle interlacing
&lt;br&gt;-I can't click somewhere into the position bar and the slider jumps there. I 
&lt;br&gt;have to grab and drag it
&lt;br&gt;-dropping a file into the player view doesn't play it at once but queues it. 
&lt;br&gt;It's been like this for years, why did you change it? We all got used to it.
&lt;br&gt;-mouse wheel on position bar doesn't do a thing.
&lt;br&gt;-biggest problem so far: I can't find any options where to configure the xine 
&lt;br&gt;engine. I guess I'll have to do that from KDE kontrols now that we got this 
&lt;br&gt;phonon thing going, but how would I call that from gnome?
&lt;br&gt;&lt;br&gt;Dex
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;-----BEGIN GEEK CODE BLOCK-----
&lt;br&gt;Version: 3.12
&lt;br&gt;GCS d--(+)@ s-:+ a C++++ UL++ P+&amp;gt;++ L+++&amp;gt;++++ E-- W++ N o? K-
&lt;br&gt;w--(---) !O M+ V- PS+ PE Y++ PGP t++(---)@ 5 X+(++) R+(++) tv--(+)@ 
&lt;br&gt;b++(+++) DI+++ D- G++ e* h&amp;gt;++ r* y?
&lt;br&gt;------END GEEK CODE BLOCK------
&lt;br&gt;&lt;br /&gt; &lt;br /&gt;------------------------------------------------------------------------------
&lt;br&gt;Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
&lt;br&gt;trial. Simplify your report design, integration and deployment - and focus on 
&lt;br&gt;what you do best, core application coding. Discover what's new with
&lt;br&gt;Crystal Reports now. &amp;nbsp;&lt;a href=&quot;http://p.sf.net/sfu/bobj-july&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/bobj-july&lt;/a&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;kaffeine-user mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26275811&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-user@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&lt;/a&gt;&lt;br&gt;&lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://old.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;signature.asc&lt;/strong&gt; (196 bytes) &lt;a href=&quot;http://old.nabble.com/attachment/26275811/0/signature.asc&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-user-f3474.html&quot; embed=&quot;fixTarget[3474]&quot; target=&quot;_top&quot; &gt;kaffeine-user&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/kaffeine-for-kde4%3A-what-the--tp26275811p26275811.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26257069</id>
	<title>unsbscribe</title>
	<published>2009-11-08T11:30:38Z</published>
	<updated>2009-11-08T11:30:38Z</updated>
	<author>
		<name>Maurice Arthur-2</name>
	</author>
	<content type="html">&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
&lt;br&gt;trial. Simplify your report design, integration and deployment - and focus on 
&lt;br&gt;what you do best, core application coding. Discover what's new with
&lt;br&gt;Crystal Reports now. &amp;nbsp;&lt;a href=&quot;http://p.sf.net/sfu/bobj-july&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/bobj-july&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;kaffeine-user mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26257069&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-user@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-user-f3474.html&quot; embed=&quot;fixTarget[3474]&quot; target=&quot;_top&quot; &gt;kaffeine-user&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/unsbscribe-tp26257069p26257069.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26256027</id>
	<title>Re: dbus support for kaffeine</title>
	<published>2009-11-08T09:46:03Z</published>
	<updated>2009-11-08T09:46:03Z</updated>
	<author>
		<name>Bugzilla from christophpfister@gmail.com</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;2009/11/6 Pascal Pollet &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26256027&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pascal@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; here is what I've done so far, I think it should add enough d-bus to make
&lt;br&gt;&amp;gt; most users happy, including me :) Please look at it and tell me what you
&lt;br&gt;&amp;gt; think of it...
&lt;br&gt;&lt;br&gt;It's a very good starting point. There exists a mediaplayer dbus
&lt;br&gt;specification MPRIS [1], which I consider worth to implement (so that
&lt;br&gt;we don't add yet another dbus interface for common functionality).
&lt;br&gt;I've committed preliminary support to svn (the &amp;quot;root&amp;quot; object). Could
&lt;br&gt;you please adapt your patch to that concept (i.e. add a tracklist and
&lt;br&gt;player object; in case of need just method stubs)? I'm aware of the
&lt;br&gt;fact that the actions defined in that specification don't 100% map
&lt;br&gt;Kaffeine's actions (e.g. Play() doing a rewind to the beginning of a
&lt;br&gt;track), so you don't have to care about those details if you don't
&lt;br&gt;want to do. I also know that not every mpris thing is possible
&lt;br&gt;(especially the tracklist parts needs more work) and that there's not
&lt;br&gt;a mpris thing for every action Kaffeine is able to perform (put them
&lt;br&gt;in a separate object for now).
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; There is one problem left, when selecting a new DVB-channel directly by name
&lt;br&gt;&amp;gt; or by number, with the (new) functions:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; dvbTab::setChannel(const QString &amp;name)
&lt;br&gt;&amp;gt; and
&lt;br&gt;&amp;gt; DvbTab::setChannel(int number)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; changing the channel works, but I didn't manage to have the selection
&lt;br&gt;&amp;gt; changed to the new channel in the DvbChannelView tree. I don't know how to
&lt;br&gt;&amp;gt; get a valid QModelIndex that points to the correct DvbChannelModel. Please
&lt;br&gt;&amp;gt; look at the code and at my comments in DvbTab::setChannel(int number). I
&lt;br&gt;&amp;gt; tried almost everything and thereby learned a lot about the model / view
&lt;br&gt;&amp;gt; concept of Qt, but it didn't help me to find the solution... Maybe you
&lt;br&gt;&amp;gt; already know this probem Christoph, because there is the same issue when
&lt;br&gt;&amp;gt; kaffeine gets started with the &amp;quot;--tv &amp;lt;channel&amp;gt;&amp;quot; flag: it simply calls
&lt;br&gt;&amp;gt; DvbTab::playChannel(const QString &amp;name), but it does not select the channel
&lt;br&gt;&amp;gt; in the DvbChannelView. The problem is that afterwards, calls to
&lt;br&gt;&amp;gt; MediaWidget::previous() and next() have no effect, because the currently
&lt;br&gt;&amp;gt; selected channel is not known. I hope that someone more clever than me will
&lt;br&gt;&amp;gt; solve this issue ;)
&lt;/div&gt;&lt;br&gt;Yes, this one is trickier. Note that there exists a similar problem
&lt;br&gt;e.g. with playPause(): you also need to update the ui state.
&lt;br&gt;&lt;br&gt;&amp;gt; cheers,
&lt;br&gt;&amp;gt; Pascal
&lt;br&gt;&lt;br&gt;Thanks,
&lt;br&gt;&lt;br&gt;Christoph
&lt;br&gt;&lt;br&gt;&lt;br&gt;[1] &lt;a href=&quot;http://wiki.xmms2.xmms.se/wiki/MPRIS&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://wiki.xmms2.xmms.se/wiki/MPRIS&lt;/a&gt;&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
&lt;br&gt;trial. Simplify your report design, integration and deployment - and focus on 
&lt;br&gt;what you do best, core application coding. Discover what's new with
&lt;br&gt;Crystal Reports now. &amp;nbsp;&lt;a href=&quot;http://p.sf.net/sfu/bobj-july&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/bobj-july&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;kaffeine-devel mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26256027&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-devel@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-devel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-devel&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-devel-f3473.html&quot; embed=&quot;fixTarget[3473]&quot; target=&quot;_top&quot; &gt;kaffeine-devel&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/dbus-support-for-kaffeine-tp26128565p26256027.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26253161</id>
	<title>Important Notice about Reviewboard</title>
	<published>2009-11-08T03:11:58Z</published>
	<updated>2009-11-08T03:11:58Z</updated>
	<author>
		<name>David Solbach</name>
	</author>
	<content type="html">Dear Reviewboard-Users,
&lt;br&gt;&lt;br&gt;Unfortunately I had to disable the user registration because we had a lot of 
&lt;br&gt;nonsense accounts created by spammers. Until we have installed a captcha 
&lt;br&gt;system or similar measures, all new accounts have to be requested via 
&lt;br&gt;bugs.kde.org . There is a component &amp;quot;Reviewboard&amp;quot; that you can choose to 
&lt;br&gt;request accounts. I will react as quckly as possible!
&lt;br&gt;&lt;br&gt;Ah, and to easily identify and delete all those spammer accounts, I need your 
&lt;br&gt;help: Please (if you haven't already done so) add your First and Lastname to 
&lt;br&gt;your account. If you don't want to do that just write me an email with your 
&lt;br&gt;account name.
&lt;br&gt;&lt;br&gt;Cheers,
&lt;br&gt;&lt;br&gt;David
&lt;br&gt;&lt;br&gt;PS: if anyone has experience in python and webdevelopment and wants to help to 
&lt;br&gt;add a captcha to reviewboard, please drop me an email :)
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
&lt;br&gt;trial. Simplify your report design, integration and deployment - and focus on 
&lt;br&gt;what you do best, core application coding. Discover what's new with
&lt;br&gt;Crystal Reports now. &amp;nbsp;&lt;a href=&quot;http://p.sf.net/sfu/bobj-july&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/bobj-july&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;kaffeine-user mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26253161&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-user@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-user-f3474.html&quot; embed=&quot;fixTarget[3474]&quot; target=&quot;_top&quot; &gt;kaffeine-user&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Important-Notice-about-Reviewboard-tp26253161p26253161.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26246925</id>
	<title>Re: dbus support for kaffeine</title>
	<published>2009-11-07T09:40:11Z</published>
	<updated>2009-11-07T09:40:11Z</updated>
	<author>
		<name>Bugzilla from christophpfister@gmail.com</name>
	</author>
	<content type="html">2009/11/6 Pascal Pollet &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26246925&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pascal@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;lt;snip&amp;gt;
&lt;br&gt;&amp;gt; I don't think you need to care about this Christoph, I already reported this
&lt;br&gt;&amp;gt; bug to sourceforge : bug #6149
&lt;br&gt;&lt;br&gt;Thanks for the update.
&lt;br&gt;&lt;br&gt;&amp;gt; cheers,
&lt;br&gt;&amp;gt; Pascal
&lt;br&gt;&lt;br&gt;Christoph
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
&lt;br&gt;trial. Simplify your report design, integration and deployment - and focus on 
&lt;br&gt;what you do best, core application coding. Discover what's new with
&lt;br&gt;Crystal Reports now. &amp;nbsp;&lt;a href=&quot;http://p.sf.net/sfu/bobj-july&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/bobj-july&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;kaffeine-devel mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26246925&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-devel@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-devel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-devel&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-devel-f3473.html&quot; embed=&quot;fixTarget[3473]&quot; target=&quot;_top&quot; &gt;kaffeine-devel&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/dbus-support-for-kaffeine-tp26128565p26246925.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26246876</id>
	<title>Re: two kaffeine frequency tables</title>
	<published>2009-11-07T09:33:54Z</published>
	<updated>2009-11-07T09:33:54Z</updated>
	<author>
		<name>Bugzilla from christophpfister@gmail.com</name>
	</author>
	<content type="html">2009/11/4 dragoncity &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26246876&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dragoncity@...&lt;/a&gt;&amp;gt;:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt; here are two frequency tables for  Kaffeine that I 'built' for the
&lt;br&gt;&amp;gt; Australian Cites of :
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Bendigo ( Central Victoria )
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Devonport ( Tasmania )
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; Cheers,
&lt;br&gt;&amp;gt; Brett
&lt;/div&gt;&lt;br&gt;Added, thanks!
&lt;br&gt;&lt;br&gt;Christoph
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
&lt;br&gt;trial. Simplify your report design, integration and deployment - and focus on 
&lt;br&gt;what you do best, core application coding. Discover what's new with
&lt;br&gt;Crystal Reports now. &amp;nbsp;&lt;a href=&quot;http://p.sf.net/sfu/bobj-july&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/bobj-july&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;kaffeine-user mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26246876&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-user@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-user-f3474.html&quot; embed=&quot;fixTarget[3474]&quot; target=&quot;_top&quot; &gt;kaffeine-user&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/two-kaffeine-frequency-tables-tp26236490p26246876.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26230137</id>
	<title>Re: dbus support for kaffeine</title>
	<published>2009-11-06T03:03:03Z</published>
	<updated>2009-11-06T03:03:03Z</updated>
	<author>
		<name>Pascal Pollet</name>
	</author>
	<content type="html">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;&gt;
&lt;html&gt;
&lt;head&gt;
  &lt;meta content=&quot;text/html;charset=UTF-8&quot; http-equiv=&quot;Content-Type&quot;&gt;
&lt;/head&gt;
&lt;body bgcolor=&quot;#ffffff&quot; text=&quot;#000000&quot;&gt;
sorry, in my 2 last mails I forgot to respond to this:&lt;br&gt;
&lt;br&gt;
&lt;blockquote type=&quot;cite&quot;&gt;
  &lt;pre wrap=&quot;&quot;&gt;I sent an email to this mailing list with a patch attached one hour ago,
but now I looked at the mailing list archive
(&lt;a class=&quot;moz-txt-link-freetext&quot; href=&quot;http://sourceforge.net/mailarchive/forum.php?forum_name=kaffeine-devel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://sourceforge.net/mailarchive/forum.php?forum_name=kaffeine-devel&lt;/a&gt;),
and it seems that only the patch reached the mailing list, and not the
body of the email.
    
      
  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;Right, there seems to be a problem (I'll take care of it).&lt;/pre&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;br&gt;
I don't think you need to care about this Christoph, I already reported
this bug to sourceforge : bug #6149&lt;br&gt;
&lt;br&gt;
cheers,&lt;br&gt;
Pascal&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Pascal Pollet schrieb:
&lt;blockquote cite=&quot;mid:4AF3F23A.4050907@bongosoft.de&quot; type=&quot;cite&quot;&gt;
  &lt;pre wrap=&quot;&quot;&gt;Hi,

here is what I've done so far, I think it should add enough d-bus to
make most users happy, including me :) Please look at it and tell me
what you think of it...

There is one problem left, when selecting a new DVB-channel directly by
name or by number, with the (new) functions:

dvbTab::setChannel(const QString &amp;amp;name)
and
DvbTab::setChannel(int number)

changing the channel works, but I didn't manage to have the selection
changed to the new channel in the DvbChannelView tree. I don't know how
to get a valid QModelIndex that points to the correct DvbChannelModel.
Please look at the code and at my comments in DvbTab::setChannel(int
number). I tried almost everything and thereby learned a lot about the
model / view concept of Qt, but it didn't help me to find the
solution... Maybe you already know this probem Christoph, because there
is the same issue when kaffeine gets started with the &quot;--tv &amp;lt;channel&amp;gt;&quot;
flag: it simply calls DvbTab::playChannel(const QString &amp;amp;name), but it
does not select the channel in the DvbChannelView. The problem is that
afterwards, calls to MediaWidget::previous() and next() have no effect,
because the currently selected channel is not known. I hope that someone
more clever than me will solve this issue ;)

cheers,
Pascal







Pascal Pollet schrieb:
  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;Thank you for your feedback Christoph, I'll consider the points you
mentioned and try to implement the complete dbus-functionality in the
very near future. Maybe I'll come up with some questions if things are
unclear, we'll see :)

cheers,
Pascal


Christoph Pfister schrieb:
  
    &lt;/pre&gt;
    &lt;blockquote type=&quot;cite&quot;&gt;
      &lt;pre wrap=&quot;&quot;&gt;2009/10/30 Pascal Pollet &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26230137&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pascal@...&lt;/a&gt;:
  
    
      &lt;/pre&gt;
      &lt;blockquote type=&quot;cite&quot;&gt;
        &lt;pre wrap=&quot;&quot;&gt;Hi,

I sent an email to this mailing list with a patch attached one hour ago,
but now I looked at the mailing list archive
(&lt;a class=&quot;moz-txt-link-freetext&quot; href=&quot;http://sourceforge.net/mailarchive/forum.php?forum_name=kaffeine-devel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://sourceforge.net/mailarchive/forum.php?forum_name=kaffeine-devel&lt;/a&gt;),
and it seems that only the patch reached the mailing list, and not the
body of the email.
    
      
        &lt;/pre&gt;
      &lt;/blockquote&gt;
      &lt;pre wrap=&quot;&quot;&gt;Right, there seems to be a problem (I'll take care of it).

  
    
      &lt;/pre&gt;
      &lt;blockquote type=&quot;cite&quot;&gt;
        &lt;pre wrap=&quot;&quot;&gt;Is this maybe a sourceforge bug? So I send the mail
again, without the patch this time:


Hello guys,

I am since the very beginning of kaffeine a great fan of this
application and use it for watching movies and TV. In the new version, I
miss a dbus interface to be able to use my remote control for watching
TV. As I know a little bit of C++ and Qt, I decided to implement the
dbus features for kaffeine, btw. giving me the occasion to learn how to
do this. Here is a small patch which makes two functions of dvbtab.cpp
available for dbus: previousChannel() and nextChannel(). It is just a
minimal proof of principle, to show you how I would implement the dbus
functionality. I would be really happy to contribute to this cool
project, so if you are interested in my code, please tell me. I would
add dbus support for all functions which should be accessible from the
outside world.
    
      
        &lt;/pre&gt;
      &lt;/blockquote&gt;
      &lt;pre wrap=&quot;&quot;&gt;I appreciate contributions (I have to code less; you learn something
;-). See below for a (short, I'm sorry) feedback.

  
    
      &lt;/pre&gt;
      &lt;blockquote type=&quot;cite&quot;&gt;
        &lt;pre wrap=&quot;&quot;&gt;For my developer background, I like to contribute with mostly small
patches to various open-source projects, and I am the guy from this
project: &lt;a class=&quot;moz-txt-link-freetext&quot; href=&quot;http://www.bongosoft.de&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.bongosoft.de&lt;/a&gt; (german page!).
Newly, I also started this one:
&lt;a class=&quot;moz-txt-link-freetext&quot; href=&quot;http://www.kde-look.org/content/show.php/Babeleo+translator?content=110491&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.kde-look.org/content/show.php/Babeleo+translator?content=110491&lt;/a&gt;
In &quot;real life&quot; I am about to finalize a Ph.D. in bioinformatics in the
nice town of Freiburg/Germany...

I am both French and German, so you can talk to me in any of these
languages, naturally also in English.

The patch is against revision 1042616 of the SVN tree.

greetings,
Pascal
    
      
        &lt;/pre&gt;
      &lt;/blockquote&gt;
      &lt;pre wrap=&quot;&quot;&gt;  
    
      &lt;/pre&gt;
      &lt;blockquote type=&quot;cite&quot;&gt;
        &lt;pre wrap=&quot;&quot;&gt;diff -Naur ../kaffeine_ori/src/CMakeLists.txt ./src/CMakeLists.txt
--- ../kaffeine_ori/src/CMakeLists.txt  2009-10-30 10:34:30.000000000 +0100
+++ ./src/CMakeLists.txt        2009-10-30 11:08:47.000000000 +0100
@@ -2,6 +2,7 @@
    dvb/dvbchannel.cpp
    dvb/dvbchannelui.cpp
    dvb/dvbconfigdialog.cpp
+    dvb/dvbdbusadaptor.cpp
    
      
        &lt;/pre&gt;
      &lt;/blockquote&gt;
      &lt;pre wrap=&quot;&quot;&gt;please place the file in the src/ directory and call it dbusadaptor.cpp

  
    
      &lt;/pre&gt;
      &lt;blockquote type=&quot;cite&quot;&gt;
        &lt;pre wrap=&quot;&quot;&gt;    dvb/dvbdevice.cpp
    dvb/dvbepg.cpp
    dvb/dvbmanager.cpp
diff -Naur ../kaffeine_ori/src/dvb/dvbdbusadaptor.h ./src/dvb/dvbdbusadaptor.h
--- ../kaffeine_ori/src/dvb/dvbdbusadaptor.h    1970-01-01 01:00:00.000000000 +0100
+++ ./src/dvb/dvbdbusadaptor.h  2009-10-30 11:08:47.000000000 +0100
@@ -0,0 +1,19 @@
    
      
        &lt;/pre&gt;
      &lt;/blockquote&gt;
      &lt;pre wrap=&quot;&quot;&gt;use a header include guard =
#ifndef DBUSADAPTOR_H
#define DBUSADAPTOR_H

...

#endif

  
    
      &lt;/pre&gt;
      &lt;blockquote type=&quot;cite&quot;&gt;
        &lt;pre wrap=&quot;&quot;&gt;+#include &amp;lt;QDBusAbstractAdaptor&amp;gt;
+
+class DvbTab;
+
+class dvbdbusadaptor: public QDBusAbstractAdaptor
+{
+       Q_OBJECT
+       Q_CLASSINFO(&quot;D-Bus Interface&quot;, &quot;org.kde.kaffeine&quot;)
+
+private:
+       DvbTab* dtab;
+
+public:
+       dvbdbusadaptor(QWidget* dvbTab);
+
+public slots:
+       void nextTvChannel();
+       void previousTvChannel();
    
      
        &lt;/pre&gt;
      &lt;/blockquote&gt;
      &lt;pre wrap=&quot;&quot;&gt;please call those slots previous() and next()

  
    
      &lt;/pre&gt;
      &lt;blockquote type=&quot;cite&quot;&gt;
        &lt;pre wrap=&quot;&quot;&gt;+};
diff -Naur ../kaffeine_ori/src/dvb/dvbdbusadaptor.cpp ./src/dvb/dvbdbusadaptor.cpp
--- ../kaffeine_ori/src/dvb/dvbdbusadaptor.cpp  1970-01-01 01:00:00.000000000 +0100
+++ ./src/dvb/dvbdbusadaptor.cpp        2009-10-30 11:08:47.000000000 +0100
@@ -0,0 +1,19 @@
+#include &quot;dvbdbusadaptor.h&quot;
+#include &quot;dvbtab.h&quot;
+
+
+dvbdbusadaptor::dvbdbusadaptor(QWidget* dvbtab)
+: QDBusAbstractAdaptor(dvbtab)
+{
+       dtab = dynamic_cast&amp;lt;DvbTab*&amp;gt;(dvbtab);
    
      
        &lt;/pre&gt;
      &lt;/blockquote&gt;
      &lt;pre wrap=&quot;&quot;&gt;avoid dynamic casts

  
    
      &lt;/pre&gt;
      &lt;blockquote type=&quot;cite&quot;&gt;
        &lt;pre wrap=&quot;&quot;&gt;+}
+
+Q_NOREPLY void dvbdbusadaptor::previousTvChannel()
+{
+       dtab-&amp;gt;previousChannel();
    
      
        &lt;/pre&gt;
      &lt;/blockquote&gt;
      &lt;pre wrap=&quot;&quot;&gt;call mediaWidget-&amp;gt;previous()

  
    
      &lt;/pre&gt;
      &lt;blockquote type=&quot;cite&quot;&gt;
        &lt;pre wrap=&quot;&quot;&gt;+}
+
+Q_NOREPLY void dvbdbusadaptor::nextTvChannel()
+{
+       dtab-&amp;gt;nextChannel();
    
      
        &lt;/pre&gt;
      &lt;/blockquote&gt;
      &lt;pre wrap=&quot;&quot;&gt;call mediaWidget-&amp;gt;next()

  
    
      &lt;/pre&gt;
      &lt;blockquote type=&quot;cite&quot;&gt;
        &lt;pre wrap=&quot;&quot;&gt;+}
diff -Naur ../kaffeine_ori/src/dvb/dvbtab.cpp ./src/dvb/dvbtab.cpp
--- ../kaffeine_ori/src/dvb/dvbtab.cpp  2009-10-30 10:34:30.000000000 +0100
+++ ./src/dvb/dvbtab.cpp        2009-10-30 11:08:47.000000000 +0100
@@ -21,6 +21,7 @@
 #include &quot;dvbtab.h&quot;

 #include &amp;lt;QBoxLayout&amp;gt;
+#include &amp;lt;QDBusConnection&amp;gt;
 #include &amp;lt;QDir&amp;gt;
 #include &amp;lt;QHeaderView&amp;gt;
 #include &amp;lt;QPainter&amp;gt;
@@ -37,6 +38,7 @@
 #include &quot;../osdwidget.h&quot;
 #include &quot;dvbchannelui.h&quot;
 #include &quot;dvbconfigdialog.h&quot;
+#include &quot;dvbdbusadaptor.h&quot;
 #include &quot;dvbepg.h&quot;
 #include &quot;dvbmanager.h&quot;
 #include &quot;dvbrecording.h&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26230137&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;@...&lt;/a&gt;/DVB&quot;, this);
+       QDBusConnection::sessionBus().registerService(&quot;org.kde.kaffeine&quot;);
    
      
        &lt;/pre&gt;
      &lt;/blockquote&gt;
      &lt;pre wrap=&quot;&quot;&gt;initialise the adapter from Kaffeine::Kaffeine()

  
    
      &lt;/pre&gt;
      &lt;blockquote type=&quot;cite&quot;&gt;
        &lt;pre wrap=&quot;&quot;&gt; }

 DvbTab::~DvbTab()
diff -Naur ../kaffeine_ori/src/dvb/dvbtab.h ./src/dvb/dvbtab.h
--- ../kaffeine_ori/src/dvb/dvbtab.h    2009-10-30 10:34:30.000000000 +0100
+++ ./src/dvb/dvbtab.h  2009-10-30 11:08:47.000000000 +0100
@@ -42,6 +42,8 @@
 class DvbTab : public TabBase
 {
       Q_OBJECT
+       friend class dvbdbusadaptor;
+
 public:
       DvbTab(KMenu *menu, KActionCollection *collection, MediaWidget *mediaWidget_);
       ~DvbTab();
    
      
        &lt;/pre&gt;
      &lt;/blockquote&gt;
      &lt;pre wrap=&quot;&quot;&gt;Thanks,

Christoph

  
    
      &lt;/pre&gt;
    &lt;/blockquote&gt;
    &lt;pre wrap=&quot;&quot;&gt;  
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
  &lt;/pre&gt;
&lt;/blockquote&gt;
&lt;/body&gt;
&lt;/html&gt;
&lt;br /&gt;------------------------------------------------------------------------------
&lt;br&gt;Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
&lt;br&gt;trial. Simplify your report design, integration and deployment - and focus on 
&lt;br&gt;what you do best, core application coding. Discover what's new with
&lt;br&gt;Crystal Reports now. &amp;nbsp;&lt;a href=&quot;http://p.sf.net/sfu/bobj-july&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/bobj-july&lt;/a&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;kaffeine-devel mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26230137&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-devel@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-devel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-devel&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-devel-f3473.html&quot; embed=&quot;fixTarget[3473]&quot; target=&quot;_top&quot; &gt;kaffeine-devel&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/dbus-support-for-kaffeine-tp26128565p26230137.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26229329</id>
	<title>Re: dbus support for kaffeine</title>
	<published>2009-11-06T01:54:02Z</published>
	<updated>2009-11-06T01:54:02Z</updated>
	<author>
		<name>Pascal Pollet</name>
	</author>
	<content type="html">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;&gt;
&lt;html&gt;
&lt;head&gt;
  &lt;meta content=&quot;text/html;charset=UTF-8&quot; http-equiv=&quot;Content-Type&quot;&gt;
&lt;/head&gt;
&lt;body bgcolor=&quot;#ffffff&quot; text=&quot;#000000&quot;&gt;
Hi,&lt;br&gt;
&lt;br&gt;
here is what I've done so far, I think it should add enough d-bus to
make most users happy, including me :) Please look at it and tell me
what you think of it...&lt;br&gt;
&lt;br&gt;
There is one problem left, when selecting a new DVB-channel directly by
name or by number, with the (new) functions:&lt;br&gt;
&lt;br&gt;
dvbTab::setChannel(const QString &amp;amp;name)&lt;br&gt;
and&lt;br&gt;
DvbTab::setChannel(int number)&lt;br&gt;
&lt;br&gt;
changing the channel works, but I didn't manage to have the selection
changed to the new channel in the DvbChannelView tree. I don't know how
to get a valid QModelIndex that points to the correct DvbChannelModel.
Please look at the code and at my comments in DvbTab::setChannel(int
number). I tried almost everything and thereby learned a lot about the
model / view concept of Qt, but it didn't help me to find the
solution... Maybe you already know this probem Christoph, because there
is the same issue when kaffeine gets started with the &quot;--tv
&amp;lt;channel&amp;gt;&quot; flag: it simply calls DvbTab::playChannel(const
QString &amp;amp;name), but it does not select the channel in the
DvbChannelView. The problem is that afterwards, calls to
MediaWidget::previous() and next() have no effect, because the
currently selected channel is not known. I hope that someone more
clever than me will solve this issue ;)&lt;br&gt;
&lt;br&gt;
cheers,&lt;br&gt;
Pascal&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Pascal Pollet schrieb:
&lt;blockquote cite=&quot;mid:4AEEA8D4.4060408@bongosoft.de&quot; type=&quot;cite&quot;&gt;
  &lt;pre wrap=&quot;&quot;&gt;Thank you for your feedback Christoph, I'll consider the points you
mentioned and try to implement the complete dbus-functionality in the
very near future. Maybe I'll come up with some questions if things are
unclear, we'll see :)

cheers,
Pascal


Christoph Pfister schrieb:
  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;2009/10/30 Pascal Pollet &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26229329&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pascal@...&lt;/a&gt;:
  
    &lt;/pre&gt;
    &lt;blockquote type=&quot;cite&quot;&gt;
      &lt;pre wrap=&quot;&quot;&gt;Hi,

I sent an email to this mailing list with a patch attached one hour ago,
but now I looked at the mailing list archive
(&lt;a class=&quot;moz-txt-link-freetext&quot; href=&quot;http://sourceforge.net/mailarchive/forum.php?forum_name=kaffeine-devel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://sourceforge.net/mailarchive/forum.php?forum_name=kaffeine-devel&lt;/a&gt;),
and it seems that only the patch reached the mailing list, and not the
body of the email.
    
      &lt;/pre&gt;
    &lt;/blockquote&gt;
    &lt;pre wrap=&quot;&quot;&gt;Right, there seems to be a problem (I'll take care of it).

  
    &lt;/pre&gt;
    &lt;blockquote type=&quot;cite&quot;&gt;
      &lt;pre wrap=&quot;&quot;&gt;Is this maybe a sourceforge bug? So I send the mail
again, without the patch this time:


Hello guys,

I am since the very beginning of kaffeine a great fan of this
application and use it for watching movies and TV. In the new version, I
miss a dbus interface to be able to use my remote control for watching
TV. As I know a little bit of C++ and Qt, I decided to implement the
dbus features for kaffeine, btw. giving me the occasion to learn how to
do this. Here is a small patch which makes two functions of dvbtab.cpp
available for dbus: previousChannel() and nextChannel(). It is just a
minimal proof of principle, to show you how I would implement the dbus
functionality. I would be really happy to contribute to this cool
project, so if you are interested in my code, please tell me. I would
add dbus support for all functions which should be accessible from the
outside world.
    
      &lt;/pre&gt;
    &lt;/blockquote&gt;
    &lt;pre wrap=&quot;&quot;&gt;I appreciate contributions (I have to code less; you learn something
;-). See below for a (short, I'm sorry) feedback.

  
    &lt;/pre&gt;
    &lt;blockquote type=&quot;cite&quot;&gt;
      &lt;pre wrap=&quot;&quot;&gt;For my developer background, I like to contribute with mostly small
patches to various open-source projects, and I am the guy from this
project: &lt;a class=&quot;moz-txt-link-freetext&quot; href=&quot;http://www.bongosoft.de&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.bongosoft.de&lt;/a&gt; (german page!).
Newly, I also started this one:
&lt;a class=&quot;moz-txt-link-freetext&quot; href=&quot;http://www.kde-look.org/content/show.php/Babeleo+translator?content=110491&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.kde-look.org/content/show.php/Babeleo+translator?content=110491&lt;/a&gt;
In &quot;real life&quot; I am about to finalize a Ph.D. in bioinformatics in the
nice town of Freiburg/Germany...

I am both French and German, so you can talk to me in any of these
languages, naturally also in English.

The patch is against revision 1042616 of the SVN tree.

greetings,
Pascal
    
      &lt;/pre&gt;
    &lt;/blockquote&gt;
    &lt;pre wrap=&quot;&quot;&gt;  
    &lt;/pre&gt;
    &lt;blockquote type=&quot;cite&quot;&gt;
      &lt;pre wrap=&quot;&quot;&gt;diff -Naur ../kaffeine_ori/src/CMakeLists.txt ./src/CMakeLists.txt
--- ../kaffeine_ori/src/CMakeLists.txt  2009-10-30 10:34:30.000000000 +0100
+++ ./src/CMakeLists.txt        2009-10-30 11:08:47.000000000 +0100
@@ -2,6 +2,7 @@
    dvb/dvbchannel.cpp
    dvb/dvbchannelui.cpp
    dvb/dvbconfigdialog.cpp
+    dvb/dvbdbusadaptor.cpp
    
      &lt;/pre&gt;
    &lt;/blockquote&gt;
    &lt;pre wrap=&quot;&quot;&gt;please place the file in the src/ directory and call it dbusadaptor.cpp

  
    &lt;/pre&gt;
    &lt;blockquote type=&quot;cite&quot;&gt;
      &lt;pre wrap=&quot;&quot;&gt;    dvb/dvbdevice.cpp
    dvb/dvbepg.cpp
    dvb/dvbmanager.cpp
diff -Naur ../kaffeine_ori/src/dvb/dvbdbusadaptor.h ./src/dvb/dvbdbusadaptor.h
--- ../kaffeine_ori/src/dvb/dvbdbusadaptor.h    1970-01-01 01:00:00.000000000 +0100
+++ ./src/dvb/dvbdbusadaptor.h  2009-10-30 11:08:47.000000000 +0100
@@ -0,0 +1,19 @@
    
      &lt;/pre&gt;
    &lt;/blockquote&gt;
    &lt;pre wrap=&quot;&quot;&gt;use a header include guard =
#ifndef DBUSADAPTOR_H
#define DBUSADAPTOR_H

...

#endif

  
    &lt;/pre&gt;
    &lt;blockquote type=&quot;cite&quot;&gt;
      &lt;pre wrap=&quot;&quot;&gt;+#include &amp;lt;QDBusAbstractAdaptor&amp;gt;
+
+class DvbTab;
+
+class dvbdbusadaptor: public QDBusAbstractAdaptor
+{
+       Q_OBJECT
+       Q_CLASSINFO(&quot;D-Bus Interface&quot;, &quot;org.kde.kaffeine&quot;)
+
+private:
+       DvbTab* dtab;
+
+public:
+       dvbdbusadaptor(QWidget* dvbTab);
+
+public slots:
+       void nextTvChannel();
+       void previousTvChannel();
    
      &lt;/pre&gt;
    &lt;/blockquote&gt;
    &lt;pre wrap=&quot;&quot;&gt;please call those slots previous() and next()

  
    &lt;/pre&gt;
    &lt;blockquote type=&quot;cite&quot;&gt;
      &lt;pre wrap=&quot;&quot;&gt;+};
diff -Naur ../kaffeine_ori/src/dvb/dvbdbusadaptor.cpp ./src/dvb/dvbdbusadaptor.cpp
--- ../kaffeine_ori/src/dvb/dvbdbusadaptor.cpp  1970-01-01 01:00:00.000000000 +0100
+++ ./src/dvb/dvbdbusadaptor.cpp        2009-10-30 11:08:47.000000000 +0100
@@ -0,0 +1,19 @@
+#include &quot;dvbdbusadaptor.h&quot;
+#include &quot;dvbtab.h&quot;
+
+
+dvbdbusadaptor::dvbdbusadaptor(QWidget* dvbtab)
+: QDBusAbstractAdaptor(dvbtab)
+{
+       dtab = dynamic_cast&amp;lt;DvbTab*&amp;gt;(dvbtab);
    
      &lt;/pre&gt;
    &lt;/blockquote&gt;
    &lt;pre wrap=&quot;&quot;&gt;avoid dynamic casts

  
    &lt;/pre&gt;
    &lt;blockquote type=&quot;cite&quot;&gt;
      &lt;pre wrap=&quot;&quot;&gt;+}
+
+Q_NOREPLY void dvbdbusadaptor::previousTvChannel()
+{
+       dtab-&amp;gt;previousChannel();
    
      &lt;/pre&gt;
    &lt;/blockquote&gt;
    &lt;pre wrap=&quot;&quot;&gt;call mediaWidget-&amp;gt;previous()

  
    &lt;/pre&gt;
    &lt;blockquote type=&quot;cite&quot;&gt;
      &lt;pre wrap=&quot;&quot;&gt;+}
+
+Q_NOREPLY void dvbdbusadaptor::nextTvChannel()
+{
+       dtab-&amp;gt;nextChannel();
    
      &lt;/pre&gt;
    &lt;/blockquote&gt;
    &lt;pre wrap=&quot;&quot;&gt;call mediaWidget-&amp;gt;next()

  
    &lt;/pre&gt;
    &lt;blockquote type=&quot;cite&quot;&gt;
      &lt;pre wrap=&quot;&quot;&gt;+}
diff -Naur ../kaffeine_ori/src/dvb/dvbtab.cpp ./src/dvb/dvbtab.cpp
--- ../kaffeine_ori/src/dvb/dvbtab.cpp  2009-10-30 10:34:30.000000000 +0100
+++ ./src/dvb/dvbtab.cpp        2009-10-30 11:08:47.000000000 +0100
@@ -21,6 +21,7 @@
 #include &quot;dvbtab.h&quot;

 #include &amp;lt;QBoxLayout&amp;gt;
+#include &amp;lt;QDBusConnection&amp;gt;
 #include &amp;lt;QDir&amp;gt;
 #include &amp;lt;QHeaderView&amp;gt;
 #include &amp;lt;QPainter&amp;gt;
@@ -37,6 +38,7 @@
 #include &quot;../osdwidget.h&quot;
 #include &quot;dvbchannelui.h&quot;
 #include &quot;dvbconfigdialog.h&quot;
+#include &quot;dvbdbusadaptor.h&quot;
 #include &quot;dvbepg.h&quot;
 #include &quot;dvbmanager.h&quot;
 #include &quot;dvbrecording.h&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26229329&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;@...&lt;/a&gt;/DVB&quot;, this);
+       QDBusConnection::sessionBus().registerService(&quot;org.kde.kaffeine&quot;);
    
      &lt;/pre&gt;
    &lt;/blockquote&gt;
    &lt;pre wrap=&quot;&quot;&gt;initialise the adapter from Kaffeine::Kaffeine()

  
    &lt;/pre&gt;
    &lt;blockquote type=&quot;cite&quot;&gt;
      &lt;pre wrap=&quot;&quot;&gt; }

 DvbTab::~DvbTab()
diff -Naur ../kaffeine_ori/src/dvb/dvbtab.h ./src/dvb/dvbtab.h
--- ../kaffeine_ori/src/dvb/dvbtab.h    2009-10-30 10:34:30.000000000 +0100
+++ ./src/dvb/dvbtab.h  2009-10-30 11:08:47.000000000 +0100
@@ -42,6 +42,8 @@
 class DvbTab : public TabBase
 {
       Q_OBJECT
+       friend class dvbdbusadaptor;
+
 public:
       DvbTab(KMenu *menu, KActionCollection *collection, MediaWidget *mediaWidget_);
       ~DvbTab();
    
      &lt;/pre&gt;
    &lt;/blockquote&gt;
    &lt;pre wrap=&quot;&quot;&gt;Thanks,

Christoph

  
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
  &lt;/pre&gt;
&lt;/blockquote&gt;
&lt;/body&gt;
&lt;/html&gt;
&lt;br /&gt;diff -Naur ../kaffeine_ori/src/CMakeLists.txt ./src/CMakeLists.txt
&lt;br&gt;--- ../kaffeine_ori/src/CMakeLists.txt	2009-11-05 09:13:12.000000000 +0100
&lt;br&gt;+++ ./src/CMakeLists.txt	2009-11-05 23:26:07.000000000 +0100
&lt;br&gt;@@ -14,6 +14,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;playlist/playlistmodel.cpp
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;playlist/playlisttab.cpp
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;datetimeedit.cpp
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;dbusadaptor.cpp
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;kaffeine.cpp
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;main.cpp
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;mediawidget.cpp
&lt;br&gt;diff -Naur ../kaffeine_ori/src/dbusadaptor.cpp ./src/dbusadaptor.cpp
&lt;br&gt;--- ../kaffeine_ori/src/dbusadaptor.cpp	1970-01-01 01:00:00.000000000 +0100
&lt;br&gt;+++ ./src/dbusadaptor.cpp	2009-11-05 23:26:08.000000000 +0100
&lt;br&gt;@@ -0,0 +1,171 @@
&lt;br&gt;+#include &amp;quot;dbusadaptor.h&amp;quot;
&lt;br&gt;+#include &amp;quot;mediawidget.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+#include &amp;lt;KUrl&amp;gt;
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+DbusAdaptor::DbusAdaptor(MediaWidget *mediaWidget_)
&lt;br&gt;+: QDBusAbstractAdaptor(mediaWidget_), mediaWidget(mediaWidget_)
&lt;br&gt;+{ }
&lt;br&gt;+
&lt;br&gt;+DbusAdaptor::~DbusAdaptor() { }
&lt;br&gt;+ 
&lt;br&gt;+void DbusAdaptor::previous()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;previous();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DbusAdaptor::playPause()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;playPause();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DbusAdaptor::next()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;next();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DbusAdaptor::toggleMuted()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;toggleMuted();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DbusAdaptor::increaseVolume()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;increaseVolume();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DbusAdaptor::decreaseVolume()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;decreaseVolume();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void &amp;nbsp;DbusAdaptor::changeAudioChannel(int index)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;changeAudioChannel(index);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void &amp;nbsp;DbusAdaptor::changeSubtitle(int index)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;changeSubtitle(index);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void &amp;nbsp;DbusAdaptor::changeVolume(int volume)
&lt;br&gt;+{
&lt;br&gt;+	if ( volume &amp;gt;= 0 &amp;&amp; volume &amp;lt;= 100 ) {
&lt;br&gt;+		mediaWidget-&amp;gt;changeVolume(volume);
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DbusAdaptor::setDvbChannel(const QString &amp;name)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;setDvbChannel(name);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DbusAdaptor::setDvbChannelNumber(int number)
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;setDvbChannel(number);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DbusAdaptor::setDvbLastChannel()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;setDvbLastChannel();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DbusAdaptor::aspectRatioAuto()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;aspectRatioAuto();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DbusAdaptor::aspectRatio4_3()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;aspectRatio4_3();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DbusAdaptor::aspectRatio16_9()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;aspectRatio16_9();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DbusAdaptor::aspectRatioWidget()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;aspectRatioWidget();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DbusAdaptor::longSkipBackward()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;longSkipBackward();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DbusAdaptor::skipBackward()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;skipBackward();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DbusAdaptor::skipForward()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;skipForward();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DbusAdaptor::longSkipForward()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;longSkipForward();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DbusAdaptor::jumpToPosition()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;jumpToPosition();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DbusAdaptor::timeButtonClicked()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;timeButtonClicked();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DbusAdaptor::updateTimeButton()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;updateTimeButton();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DbusAdaptor::play(const QString &amp;url)
&lt;br&gt;+{
&lt;br&gt;+	KUrl kurl(url);
&lt;br&gt;+	if (kurl.isValid()) {
&lt;br&gt;+		mediaWidget-&amp;gt;play(kurl);
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DbusAdaptor::playAudioCd()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;playAudioCd();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DbusAdaptor::playVideoCd()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;playVideoCd();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DbusAdaptor::playDvd()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;playDvd();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DbusAdaptor::stop()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;stop();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DbusAdaptor::stopDvb()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;stopDvb();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DbusAdaptor::toggleFullScreen()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;fullScreen();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DbusAdaptor::toggleInstantRecord()
&lt;br&gt;+{
&lt;br&gt;+	mediaWidget-&amp;gt;toggleInstantRecord();
&lt;br&gt;+}
&lt;br&gt;diff -Naur ../kaffeine_ori/src/dbusadaptor.h ./src/dbusadaptor.h
&lt;br&gt;--- ../kaffeine_ori/src/dbusadaptor.h	1970-01-01 01:00:00.000000000 +0100
&lt;br&gt;+++ ./src/dbusadaptor.h	2009-11-05 23:26:07.000000000 +0100
&lt;br&gt;@@ -0,0 +1,56 @@
&lt;br&gt;+#ifndef DBUSADAPTOR_H
&lt;br&gt;+#define DBUSADAPTOR_H
&lt;br&gt;+
&lt;br&gt;+#include &amp;lt;QDBusAbstractAdaptor&amp;gt;
&lt;br&gt;+#include &amp;lt;QString&amp;gt;
&lt;br&gt;+
&lt;br&gt;+class MediaWidget;
&lt;br&gt;+//class KUrl;
&lt;br&gt;+
&lt;br&gt;+class DbusAdaptor: public QDBusAbstractAdaptor
&lt;br&gt;+{
&lt;br&gt;+	Q_OBJECT
&lt;br&gt;+	Q_CLASSINFO(&amp;quot;D-Bus Interface&amp;quot;, &amp;quot;org.kde.kaffeine&amp;quot;)
&lt;br&gt;+
&lt;br&gt;+private:
&lt;br&gt;+	MediaWidget *mediaWidget;
&lt;br&gt;+
&lt;br&gt;+public:
&lt;br&gt;+	DbusAdaptor(MediaWidget *mediaWidget_);
&lt;br&gt;+	~DbusAdaptor();
&lt;br&gt;+ &amp;nbsp; 
&lt;br&gt;+public slots:
&lt;br&gt;+	void next();
&lt;br&gt;+	void previous();
&lt;br&gt;+	void playPause();
&lt;br&gt;+	void changeAudioChannel(int index);
&lt;br&gt;+	void changeSubtitle(int index);
&lt;br&gt;+	void setDvbChannel(const QString &amp;name);
&lt;br&gt;+	void setDvbChannelNumber(int number);
&lt;br&gt;+	void setDvbLastChannel();
&lt;br&gt;+	void toggleMuted();
&lt;br&gt;+	void changeVolume(int volume);
&lt;br&gt;+	void increaseVolume();
&lt;br&gt;+	void decreaseVolume();
&lt;br&gt;+	void aspectRatioAuto();
&lt;br&gt;+	void aspectRatio4_3();
&lt;br&gt;+	void aspectRatio16_9();
&lt;br&gt;+	void aspectRatioWidget();
&lt;br&gt;+	void longSkipBackward();
&lt;br&gt;+	void skipBackward();
&lt;br&gt;+	void skipForward();
&lt;br&gt;+	void longSkipForward();
&lt;br&gt;+	void jumpToPosition();
&lt;br&gt;+	void timeButtonClicked();
&lt;br&gt;+	void updateTimeButton();
&lt;br&gt;+	void play(const QString &amp;url);
&lt;br&gt;+	void playAudioCd();
&lt;br&gt;+	void playVideoCd();
&lt;br&gt;+	void playDvd();
&lt;br&gt;+	void stop();
&lt;br&gt;+	void stopDvb();
&lt;br&gt;+	void toggleFullScreen();
&lt;br&gt;+	void toggleInstantRecord();
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+#endif /* DBUSADAPTOR_H */
&lt;br&gt;diff -Naur ../kaffeine_ori/src/dvb/dvbtab.cpp ./src/dvb/dvbtab.cpp
&lt;br&gt;--- ../kaffeine_ori/src/dvb/dvbtab.cpp	2009-11-05 09:13:12.000000000 +0100
&lt;br&gt;+++ ./src/dvb/dvbtab.cpp	2009-11-05 23:26:07.000000000 +0100
&lt;br&gt;@@ -117,6 +117,10 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	connect(mediaWidget, SIGNAL(previousDvbChannel()), this, SLOT(previousChannel()));
&lt;br&gt;&amp;nbsp;	connect(mediaWidget, SIGNAL(nextDvbChannel()), this, SLOT(nextChannel()));
&lt;br&gt;+	connect(mediaWidget, SIGNAL(changeDvbChannel(const QString&amp;)), this, SLOT(setChannel(const QString&amp;)));
&lt;br&gt;+	connect(mediaWidget, SIGNAL(changeDvbChannel(int)), this, SLOT(setChannel(int)));
&lt;br&gt;+	connect(mediaWidget, SIGNAL(dvbLastChannel()), this, SLOT(setLastChannel()));
&lt;br&gt;+	connect(mediaWidget, SIGNAL(toggleInstantRecord()), this, SLOT(toggleInstantRecord()));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	connect(manager-&amp;gt;getRecordingModel(), SIGNAL(instantRecordingRemoved()),
&lt;br&gt;&amp;nbsp;		this, SLOT(instantRecordingRemoved()));
&lt;br&gt;@@ -144,7 +148,7 @@
&lt;br&gt;&amp;nbsp;	channelView-&amp;gt;setRootIsDecorated(false);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	if (!channelView-&amp;gt;header()-&amp;gt;restoreState(QByteArray::fromBase64(
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;KGlobal::config()-&amp;gt;group(&amp;quot;DVB&amp;quot;).readEntry(&amp;quot;ChannelViewState&amp;quot;, QByteArray())))) {
&lt;br&gt;+		KGlobal::config()-&amp;gt;group(&amp;quot;DVB&amp;quot;).readEntry(&amp;quot;ChannelViewState&amp;quot;, QByteArray())))) {
&lt;br&gt;&amp;nbsp;		channelView-&amp;gt;sortByColumn(0, Qt::AscendingOrder);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -210,6 +214,11 @@
&lt;br&gt;&amp;nbsp;	playChannel(manager-&amp;gt;getChannelModel()-&amp;gt;channelForName(name));
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+void DvbTab::playChannel(int number)
&lt;br&gt;+{
&lt;br&gt;+	playChannel(manager-&amp;gt;getChannelModel()-&amp;gt;channelForNumber(number));
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;void DvbTab::playLastChannel()
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	playChannel(KGlobal::config()-&amp;gt;group(&amp;quot;DVB&amp;quot;).readEntry(&amp;quot;LastChannel&amp;quot;));
&lt;br&gt;@@ -245,6 +254,19 @@
&lt;br&gt;&amp;nbsp;	dialog.exec();
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+void DvbTab::toggleInstantRecord()
&lt;br&gt;+{
&lt;br&gt;+	if (instantRecordAction-&amp;gt;isChecked()) {
&lt;br&gt;+		instantRecordAction-&amp;gt;setChecked(false);
&lt;br&gt;+		instantRecord(false);
&lt;br&gt;+	}
&lt;br&gt;+	else {
&lt;br&gt;+		instantRecordAction-&amp;gt;setChecked(true);
&lt;br&gt;+		instantRecord(true);
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;void DvbTab::instantRecord(bool checked)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	if (checked) {
&lt;br&gt;@@ -353,3 +375,35 @@
&lt;br&gt;&amp;nbsp;		manager-&amp;gt;getLiveView()-&amp;gt;playChannel(channel);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+void DvbTab::setChannel(const QString &amp;name)
&lt;br&gt;+{
&lt;br&gt;+	playChannel(name);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DvbTab::setChannel(int number)
&lt;br&gt;+{
&lt;br&gt;+	// with this way to get QModelIndex, the later setCurrentIndex(index) call does not work:
&lt;br&gt;+	//QModelIndex index = manager-&amp;gt;getChannelModel()-&amp;gt;index(number, 0);
&lt;br&gt;+
&lt;br&gt;+	// another way to obtain the QModelIndex, but doesn't work too:
&lt;br&gt;+	DvbChannelModel *channelModel = (DvbChannelModel*) channelView-&amp;gt;getModel();
&lt;br&gt;+	QModelIndex index = channelModel-&amp;gt;index(number, 0);
&lt;br&gt;+
&lt;br&gt;+	// for testing purposes, returns this runtime error (why?):
&lt;br&gt;+	// QSortFilterProxyModel: index from wrong model passed to mapToSource
&lt;br&gt;+	channelView-&amp;gt;mapToSource(index);
&lt;br&gt;+
&lt;br&gt;+	// Has no effect (index from wrong model?):
&lt;br&gt;+	channelView-&amp;gt;setCurrentIndex(index);
&lt;br&gt;+
&lt;br&gt;+	// at least this works
&lt;br&gt;+	playChannel(number);
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void DvbTab::setLastChannel()
&lt;br&gt;+{
&lt;br&gt;+	playLastChannel();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;diff -Naur ../kaffeine_ori/src/dvb/dvbtab.h ./src/dvb/dvbtab.h
&lt;br&gt;--- ../kaffeine_ori/src/dvb/dvbtab.h	2009-11-05 09:13:12.000000000 +0100
&lt;br&gt;+++ ./src/dvb/dvbtab.h	2009-11-05 23:26:07.000000000 +0100
&lt;br&gt;@@ -38,11 +38,13 @@
&lt;br&gt;&amp;nbsp;class DvbTab : public TabBase
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	Q_OBJECT
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;public:
&lt;br&gt;&amp;nbsp;	DvbTab(KMenu *menu, KActionCollection *collection, MediaWidget *mediaWidget_);
&lt;br&gt;&amp;nbsp;	~DvbTab();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	void playChannel(const QString &amp;name);
&lt;br&gt;+	void playChannel(int number);
&lt;br&gt;&amp;nbsp;	void playLastChannel();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	void enableDvbDump();
&lt;br&gt;@@ -52,12 +54,16 @@
&lt;br&gt;&amp;nbsp;	void showEpgDialog();
&lt;br&gt;&amp;nbsp;	void showRecordingDialog();
&lt;br&gt;&amp;nbsp;	void instantRecord(bool checked);
&lt;br&gt;+	void toggleInstantRecord();
&lt;br&gt;&amp;nbsp;	void instantRecordingRemoved();
&lt;br&gt;&amp;nbsp;	void configureDvb();
&lt;br&gt;&amp;nbsp;	void playLive(const QModelIndex &amp;index);
&lt;br&gt;&amp;nbsp;	void previousChannel();
&lt;br&gt;&amp;nbsp;	void nextChannel();
&lt;br&gt;&amp;nbsp;	void cleanTimeShiftFiles();
&lt;br&gt;+	void setChannel(const QString &amp;name);
&lt;br&gt;+	void setChannel(int number);
&lt;br&gt;+	void setLastChannel();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;private:
&lt;br&gt;&amp;nbsp;	void activate();
&lt;br&gt;diff -Naur ../kaffeine_ori/src/kaffeine.cpp ./src/kaffeine.cpp
&lt;br&gt;--- ../kaffeine_ori/src/kaffeine.cpp	2009-11-05 09:13:12.000000000 +0100
&lt;br&gt;+++ ./src/kaffeine.cpp	2009-11-05 23:26:08.000000000 +0100
&lt;br&gt;@@ -20,6 +20,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;#include &amp;quot;kaffeine.h&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+#include &amp;lt;QDBusConnection&amp;gt;
&lt;br&gt;&amp;nbsp;#include &amp;lt;QHoverEvent&amp;gt;
&lt;br&gt;&amp;nbsp;#include &amp;lt;QLabel&amp;gt;
&lt;br&gt;&amp;nbsp;#include &amp;lt;QSpinBox&amp;gt;
&lt;br&gt;@@ -38,6 +39,7 @@
&lt;br&gt;&amp;nbsp;#include &amp;lt;KToolBar&amp;gt;
&lt;br&gt;&amp;nbsp;#include &amp;quot;dvb/dvbtab.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;playlist/playlisttab.h&amp;quot;
&lt;br&gt;+#include &amp;quot;dbusadaptor.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;mediawidget.h&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;class StartTab : public TabBase
&lt;br&gt;@@ -322,6 +324,11 @@
&lt;br&gt;&amp;nbsp;	// initialize random number generator
&lt;br&gt;&amp;nbsp;	qsrand(QTime().msecsTo(QTime::currentTime()));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	// initialize the dbus-adaptor 
&lt;br&gt;+	new DbusAdaptor(mediaWidget);
&lt;br&gt;+	QDBusConnection::sessionBus().registerObject(&amp;quot;/Player&amp;quot;, mediaWidget);
&lt;br&gt;+	QDBusConnection::sessionBus().registerService(&amp;quot;org.kde.kaffeine&amp;quot;);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	show();
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;diff -Naur ../kaffeine_ori/src/mediawidget.cpp ./src/mediawidget.cpp
&lt;br&gt;--- ../kaffeine_ori/src/mediawidget.cpp	2009-11-05 09:13:12.000000000 +0100
&lt;br&gt;+++ ./src/mediawidget.cpp	2009-11-05 23:26:08.000000000 +0100
&lt;br&gt;@@ -543,6 +543,32 @@
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+void MediaWidget::setDvbChannel(int number)
&lt;br&gt;+{
&lt;br&gt;+	if (dvbFeed != NULL) {
&lt;br&gt;+		emit changeDvbChannel(number);
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::setDvbChannel(const QString &amp;name)
&lt;br&gt;+{
&lt;br&gt;+	if (dvbFeed != NULL) {
&lt;br&gt;+		emit changeDvbChannel(name);
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::setDvbLastChannel()
&lt;br&gt;+{
&lt;br&gt;+	if (dvbFeed != NULL) {
&lt;br&gt;+		emit dvbLastChannel();
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void MediaWidget::fullScreen()
&lt;br&gt;+{
&lt;br&gt;+	emit toggleFullScreen();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;void MediaWidget::stateChanged(Phonon::State state)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	bool newPlaying = false;
&lt;br&gt;@@ -655,6 +681,15 @@
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+void MediaWidget::playPause() {
&lt;br&gt;+	if (actionPlayPause-&amp;gt;text() == textPlay) {
&lt;br&gt;+		playPause(false);
&lt;br&gt;+	}
&lt;br&gt;+	else {
&lt;br&gt;+		playPause(true);
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;void MediaWidget::stop()
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	mediaObject-&amp;gt;stop();
&lt;br&gt;@@ -679,7 +714,9 @@
&lt;br&gt;&amp;nbsp;		if ((dvbFeed != NULL) &amp;&amp; !dvbFeed-&amp;gt;audioChannels.isEmpty()) {
&lt;br&gt;&amp;nbsp;			emit changeDvbAudioChannel(index);
&lt;br&gt;&amp;nbsp;		} else {
&lt;br&gt;-			mediaController-&amp;gt;setCurrentAudioChannel(audioChannels.at(index));
&lt;br&gt;+			if ( index &amp;gt;= 0 &amp;&amp; index &amp;lt; audioChannels.size() ) {
&lt;br&gt;+				mediaController-&amp;gt;setCurrentAudioChannel(audioChannels.at(index));
&lt;br&gt;+			}
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;@@ -690,7 +727,9 @@
&lt;br&gt;&amp;nbsp;		if ((dvbFeed != NULL) &amp;&amp; !dvbFeed-&amp;gt;subtitles.isEmpty()) {
&lt;br&gt;&amp;nbsp;			emit changeDvbSubtitle(index);
&lt;br&gt;&amp;nbsp;		} else {
&lt;br&gt;-			mediaController-&amp;gt;setCurrentSubtitle(subtitles.at(index));
&lt;br&gt;+			if ( index &amp;gt;= 0 &amp;&amp; index &amp;lt; subtitles.size() ) {
&lt;br&gt;+				mediaController-&amp;gt;setCurrentSubtitle(subtitles.at(index));
&lt;br&gt;+			}
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;diff -Naur ../kaffeine_ori/src/mediawidget.h ./src/mediawidget.h
&lt;br&gt;--- ../kaffeine_ori/src/mediawidget.h	2009-11-05 09:13:12.000000000 +0100
&lt;br&gt;+++ ./src/mediawidget.h	2009-11-05 23:26:07.000000000 +0100
&lt;br&gt;@@ -48,9 +48,11 @@
&lt;br&gt;&amp;nbsp;class MediaWidget : public QWidget
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	Q_OBJECT
&lt;br&gt;+	friend class DbusAdaptor;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;public:
&lt;br&gt;&amp;nbsp;	MediaWidget(KMenu *menu_, KAction *fullScreenAction, KToolBar *toolBar,
&lt;br&gt;-		 &amp;nbsp; &amp;nbsp;KActionCollection *collection, QWidget *parent);
&lt;br&gt;+			KActionCollection *collection, QWidget *parent);
&lt;br&gt;&amp;nbsp;	~MediaWidget();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	static QString extensionFilter(); // usable for KFileDialog::setFilter()
&lt;br&gt;@@ -98,14 +100,19 @@
&lt;br&gt;&amp;nbsp;	void startDvbTimeShift();
&lt;br&gt;&amp;nbsp;	void changeDvbAudioChannel(int index);
&lt;br&gt;&amp;nbsp;	void changeDvbSubtitle(int index);
&lt;br&gt;+	void changeDvbChannel(int number);
&lt;br&gt;+	void changeDvbChannel(const QString &amp;name);
&lt;br&gt;&amp;nbsp;	void dvbStopped();
&lt;br&gt;&amp;nbsp;	void osdKeyPressed(int key);
&lt;br&gt;+	void dvbLastChannel();
&lt;br&gt;+	void toggleInstantRecord();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;private slots:
&lt;br&gt;&amp;nbsp;	void stateChanged(Phonon::State state);
&lt;br&gt;&amp;nbsp;	void playbackFinished();
&lt;br&gt;&amp;nbsp;	void previous();
&lt;br&gt;&amp;nbsp;	void playPause(bool paused);
&lt;br&gt;+	void playPause();
&lt;br&gt;&amp;nbsp;	void next();
&lt;br&gt;&amp;nbsp;	void changeAudioChannel(int index);
&lt;br&gt;&amp;nbsp;	void changeSubtitle(int index);
&lt;br&gt;@@ -135,6 +142,11 @@
&lt;br&gt;&amp;nbsp;	void timeButtonClicked();
&lt;br&gt;&amp;nbsp;	void updateTimeButton();
&lt;br&gt;&amp;nbsp;	void updateCaption();
&lt;br&gt;+	void setDvbChannel(int number);
&lt;br&gt;+	void setDvbChannel(const QString &amp;name);
&lt;br&gt;+	void setDvbLastChannel();
&lt;br&gt;+	void fullScreen();
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	void titleCountChanged(int count);
&lt;br&gt;&amp;nbsp;	void chapterCountChanged(int count);
&lt;br&gt;diff -Naur ../kaffeine_ori/src/proxytreeview.cpp ./src/proxytreeview.cpp
&lt;br&gt;--- ../kaffeine_ori/src/proxytreeview.cpp	2009-11-05 09:13:12.000000000 +0100
&lt;br&gt;+++ ./src/proxytreeview.cpp	2009-11-05 23:26:07.000000000 +0100
&lt;br&gt;@@ -85,6 +85,11 @@
&lt;br&gt;&amp;nbsp;	proxyModel-&amp;gt;setSourceModel(model);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+QAbstractItemModel* ProxyTreeView::getModel()
&lt;br&gt;+{
&lt;br&gt;+	return proxyModel-&amp;gt;sourceModel();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;void ProxyTreeView::contextMenuEvent(QContextMenuEvent *event)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	if (!currentIndex().isValid()) {
&lt;br&gt;diff -Naur ../kaffeine_ori/src/proxytreeview.h ./src/proxytreeview.h
&lt;br&gt;--- ../kaffeine_ori/src/proxytreeview.h	2009-11-05 09:13:12.000000000 +0100
&lt;br&gt;+++ ./src/proxytreeview.h	2009-11-05 23:26:08.000000000 +0100
&lt;br&gt;@@ -36,6 +36,7 @@
&lt;br&gt;&amp;nbsp;	QList&amp;lt;int&amp;gt; selectedRows() const;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	void setModel(QAbstractItemModel *model);
&lt;br&gt;+	QAbstractItemModel* getModel();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;protected:
&lt;br&gt;&amp;nbsp;	void contextMenuEvent(QContextMenuEvent *event);
&lt;br&gt;&lt;br /&gt;------------------------------------------------------------------------------
&lt;br&gt;Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
&lt;br&gt;trial. Simplify your report design, integration and deployment - and focus on 
&lt;br&gt;what you do best, core application coding. Discover what's new with
&lt;br&gt;Crystal Reports now. &amp;nbsp;&lt;a href=&quot;http://p.sf.net/sfu/bobj-july&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/bobj-july&lt;/a&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;kaffeine-devel mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26229329&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-devel@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-devel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-devel&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-devel-f3473.html&quot; embed=&quot;fixTarget[3473]&quot; target=&quot;_top&quot; &gt;kaffeine-devel&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/dbus-support-for-kaffeine-tp26128565p26229329.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26236490</id>
	<title>two kaffeine frequency tables</title>
	<published>2009-11-04T03:46:11Z</published>
	<updated>2009-11-04T03:46:11Z</updated>
	<author>
		<name>dragoncity</name>
	</author>
	<content type="html">&lt;br&gt;Hi,
&lt;br&gt;here are two frequency tables for &amp;nbsp;Kaffeine that I 'built' for the
&lt;br&gt;Australian Cites of :
&lt;br&gt;&lt;br&gt;Bendigo ( Central Victoria )
&lt;br&gt;&lt;br&gt;Devonport ( Tasmania )
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Cheers,
&lt;br&gt;Brett&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;------------------------------------------------------------------------------
&lt;br&gt;Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
&lt;br&gt;trial. Simplify your report design, integration and deployment - and focus on 
&lt;br&gt;what you do best, core application coding. Discover what's new with
&lt;br&gt;Crystal Reports now. &amp;nbsp;&lt;a href=&quot;http://p.sf.net/sfu/bobj-july&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/bobj-july&lt;/a&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;kaffeine-user mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26236490&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-user@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&lt;/a&gt;&lt;br&gt;&lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://old.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;au-Bendigo&lt;/strong&gt; (1K) &lt;a href=&quot;http://old.nabble.com/attachment/26236490/0/au-Bendigo&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;br/&gt;&lt;img src=&quot;http://old.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;au-Devonport&lt;/strong&gt; (768 bytes) &lt;a href=&quot;http://old.nabble.com/attachment/26236490/1/au-Devonport&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-user-f3474.html&quot; embed=&quot;fixTarget[3474]&quot; target=&quot;_top&quot; &gt;kaffeine-user&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/two-kaffeine-frequency-tables-tp26236490p26236490.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26161077</id>
	<title>Re: dbus support for kaffeine</title>
	<published>2009-11-02T01:39:32Z</published>
	<updated>2009-11-02T01:39:32Z</updated>
	<author>
		<name>Pascal Pollet</name>
	</author>
	<content type="html">Thank you for your feedback Christoph, I'll consider the points you
&lt;br&gt;mentioned and try to implement the complete dbus-functionality in the
&lt;br&gt;very near future. Maybe I'll come up with some questions if things are
&lt;br&gt;unclear, we'll see :)
&lt;br&gt;&lt;br&gt;cheers,
&lt;br&gt;Pascal
&lt;br&gt;&lt;br&gt;&lt;br&gt;Christoph Pfister schrieb:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; 2009/10/30 Pascal Pollet &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26161077&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pascal@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; I sent an email to this mailing list with a patch attached one hour ago,
&lt;br&gt;&amp;gt;&amp;gt; but now I looked at the mailing list archive
&lt;br&gt;&amp;gt;&amp;gt; (&lt;a href=&quot;http://sourceforge.net/mailarchive/forum.php?forum_name=kaffeine-devel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://sourceforge.net/mailarchive/forum.php?forum_name=kaffeine-devel&lt;/a&gt;),
&lt;br&gt;&amp;gt;&amp;gt; and it seems that only the patch reached the mailing list, and not the
&lt;br&gt;&amp;gt;&amp;gt; body of the email.
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Right, there seems to be a problem (I'll take care of it).
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt; Is this maybe a sourceforge bug? So I send the mail
&lt;br&gt;&amp;gt;&amp;gt; again, without the patch this time:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Hello guys,
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; I am since the very beginning of kaffeine a great fan of this
&lt;br&gt;&amp;gt;&amp;gt; application and use it for watching movies and TV. In the new version, I
&lt;br&gt;&amp;gt;&amp;gt; miss a dbus interface to be able to use my remote control for watching
&lt;br&gt;&amp;gt;&amp;gt; TV. As I know a little bit of C++ and Qt, I decided to implement the
&lt;br&gt;&amp;gt;&amp;gt; dbus features for kaffeine, btw. giving me the occasion to learn how to
&lt;br&gt;&amp;gt;&amp;gt; do this. Here is a small patch which makes two functions of dvbtab.cpp
&lt;br&gt;&amp;gt;&amp;gt; available for dbus: previousChannel() and nextChannel(). It is just a
&lt;br&gt;&amp;gt;&amp;gt; minimal proof of principle, to show you how I would implement the dbus
&lt;br&gt;&amp;gt;&amp;gt; functionality. I would be really happy to contribute to this cool
&lt;br&gt;&amp;gt;&amp;gt; project, so if you are interested in my code, please tell me. I would
&lt;br&gt;&amp;gt;&amp;gt; add dbus support for all functions which should be accessible from the
&lt;br&gt;&amp;gt;&amp;gt; outside world.
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I appreciate contributions (I have to code less; you learn something
&lt;br&gt;&amp;gt; ;-). See below for a (short, I'm sorry) feedback.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt; For my developer background, I like to contribute with mostly small
&lt;br&gt;&amp;gt;&amp;gt; patches to various open-source projects, and I am the guy from this
&lt;br&gt;&amp;gt;&amp;gt; project: &lt;a href=&quot;http://www.bongosoft.de&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.bongosoft.de&lt;/a&gt;&amp;nbsp;(german page!).
&lt;br&gt;&amp;gt;&amp;gt; Newly, I also started this one:
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://www.kde-look.org/content/show.php/Babeleo+translator?content=110491&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.kde-look.org/content/show.php/Babeleo+translator?content=110491&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; In &amp;quot;real life&amp;quot; I am about to finalize a Ph.D. in bioinformatics in the
&lt;br&gt;&amp;gt;&amp;gt; nice town of Freiburg/Germany...
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; I am both French and German, so you can talk to me in any of these
&lt;br&gt;&amp;gt;&amp;gt; languages, naturally also in English.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; The patch is against revision 1042616 of the SVN tree.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; greetings,
&lt;br&gt;&amp;gt;&amp;gt; Pascal
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt; diff -Naur ../kaffeine_ori/src/CMakeLists.txt ./src/CMakeLists.txt
&lt;br&gt;&amp;gt;&amp;gt; --- ../kaffeine_ori/src/CMakeLists.txt &amp;nbsp;2009-10-30 10:34:30.000000000 +0100
&lt;br&gt;&amp;gt;&amp;gt; +++ ./src/CMakeLists.txt &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2009-10-30 11:08:47.000000000 +0100
&lt;br&gt;&amp;gt;&amp;gt; @@ -2,6 +2,7 @@
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; dvb/dvbchannel.cpp
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; dvb/dvbchannelui.cpp
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; dvb/dvbconfigdialog.cpp
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;dvb/dvbdbusadaptor.cpp
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; please place the file in the src/ directory and call it dbusadaptor.cpp
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; dvb/dvbdevice.cpp
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; dvb/dvbepg.cpp
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; dvb/dvbmanager.cpp
&lt;br&gt;&amp;gt;&amp;gt; diff -Naur ../kaffeine_ori/src/dvb/dvbdbusadaptor.h ./src/dvb/dvbdbusadaptor.h
&lt;br&gt;&amp;gt;&amp;gt; --- ../kaffeine_ori/src/dvb/dvbdbusadaptor.h &amp;nbsp; &amp;nbsp;1970-01-01 01:00:00.000000000 +0100
&lt;br&gt;&amp;gt;&amp;gt; +++ ./src/dvb/dvbdbusadaptor.h &amp;nbsp;2009-10-30 11:08:47.000000000 +0100
&lt;br&gt;&amp;gt;&amp;gt; @@ -0,0 +1,19 @@
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; use a header include guard =
&lt;br&gt;&amp;gt; #ifndef DBUSADAPTOR_H
&lt;br&gt;&amp;gt; #define DBUSADAPTOR_H
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ...
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; #endif
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt; +#include &amp;lt;QDBusAbstractAdaptor&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +class DvbTab;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +class dvbdbusadaptor: public QDBusAbstractAdaptor
&lt;br&gt;&amp;gt;&amp;gt; +{
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; Q_OBJECT
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; Q_CLASSINFO(&amp;quot;D-Bus Interface&amp;quot;, &amp;quot;org.kde.kaffeine&amp;quot;)
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +private:
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; DvbTab* dtab;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +public:
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; dvbdbusadaptor(QWidget* dvbTab);
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +public slots:
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; void nextTvChannel();
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; void previousTvChannel();
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; please call those slots previous() and next()
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt; +};
&lt;br&gt;&amp;gt;&amp;gt; diff -Naur ../kaffeine_ori/src/dvb/dvbdbusadaptor.cpp ./src/dvb/dvbdbusadaptor.cpp
&lt;br&gt;&amp;gt;&amp;gt; --- ../kaffeine_ori/src/dvb/dvbdbusadaptor.cpp &amp;nbsp;1970-01-01 01:00:00.000000000 +0100
&lt;br&gt;&amp;gt;&amp;gt; +++ ./src/dvb/dvbdbusadaptor.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2009-10-30 11:08:47.000000000 +0100
&lt;br&gt;&amp;gt;&amp;gt; @@ -0,0 +1,19 @@
&lt;br&gt;&amp;gt;&amp;gt; +#include &amp;quot;dvbdbusadaptor.h&amp;quot;
&lt;br&gt;&amp;gt;&amp;gt; +#include &amp;quot;dvbtab.h&amp;quot;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +dvbdbusadaptor::dvbdbusadaptor(QWidget* dvbtab)
&lt;br&gt;&amp;gt;&amp;gt; +: QDBusAbstractAdaptor(dvbtab)
&lt;br&gt;&amp;gt;&amp;gt; +{
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; dtab = dynamic_cast&amp;lt;DvbTab*&amp;gt;(dvbtab);
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; avoid dynamic casts
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt; +}
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +Q_NOREPLY void dvbdbusadaptor::previousTvChannel()
&lt;br&gt;&amp;gt;&amp;gt; +{
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; dtab-&amp;gt;previousChannel();
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; call mediaWidget-&amp;gt;previous()
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt; +}
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +Q_NOREPLY void dvbdbusadaptor::nextTvChannel()
&lt;br&gt;&amp;gt;&amp;gt; +{
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; dtab-&amp;gt;nextChannel();
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; call mediaWidget-&amp;gt;next()
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt; +}
&lt;br&gt;&amp;gt;&amp;gt; diff -Naur ../kaffeine_ori/src/dvb/dvbtab.cpp ./src/dvb/dvbtab.cpp
&lt;br&gt;&amp;gt;&amp;gt; --- ../kaffeine_ori/src/dvb/dvbtab.cpp &amp;nbsp;2009-10-30 10:34:30.000000000 +0100
&lt;br&gt;&amp;gt;&amp;gt; +++ ./src/dvb/dvbtab.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2009-10-30 11:08:47.000000000 +0100
&lt;br&gt;&amp;gt;&amp;gt; @@ -21,6 +21,7 @@
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;#include &amp;quot;dvbtab.h&amp;quot;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;#include &amp;lt;QBoxLayout&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; +#include &amp;lt;QDBusConnection&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;#include &amp;lt;QDir&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;#include &amp;lt;QHeaderView&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;#include &amp;lt;QPainter&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; @@ -37,6 +38,7 @@
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;#include &amp;quot;../osdwidget.h&amp;quot;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;#include &amp;quot;dvbchannelui.h&amp;quot;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;#include &amp;quot;dvbconfigdialog.h&amp;quot;
&lt;br&gt;&amp;gt;&amp;gt; +#include &amp;quot;dvbdbusadaptor.h&amp;quot;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;#include &amp;quot;dvbepg.h&amp;quot;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;#include &amp;quot;dvbmanager.h&amp;quot;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;#include &amp;quot;dvbrecording.h&amp;quot;
&lt;br&gt;&amp;gt;&amp;gt; @@ -424,6 +426,10 @@
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dvbOsdTimer = new QTimer(this);
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;connect(dvbOsdTimer, SIGNAL(timeout()), this, SLOT(osdTimeout()));
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; new dvbdbusadaptor(this);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; QDBusConnection::sessionBus().registerObject(&amp;quot;/DVB&amp;quot;, this);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; QDBusConnection::sessionBus().registerService(&amp;quot;org.kde.kaffeine&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; initialise the adapter from Kaffeine::Kaffeine()
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;DvbTab::~DvbTab()
&lt;br&gt;&amp;gt;&amp;gt; diff -Naur ../kaffeine_ori/src/dvb/dvbtab.h ./src/dvb/dvbtab.h
&lt;br&gt;&amp;gt;&amp;gt; --- ../kaffeine_ori/src/dvb/dvbtab.h &amp;nbsp; &amp;nbsp;2009-10-30 10:34:30.000000000 +0100
&lt;br&gt;&amp;gt;&amp;gt; +++ ./src/dvb/dvbtab.h &amp;nbsp;2009-10-30 11:08:47.000000000 +0100
&lt;br&gt;&amp;gt;&amp;gt; @@ -42,6 +42,8 @@
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;class DvbTab : public TabBase
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Q_OBJECT
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; friend class dvbdbusadaptor;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;public:
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DvbTab(KMenu *menu, KActionCollection *collection, MediaWidget *mediaWidget_);
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;~DvbTab();
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Thanks,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Christoph
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;/div&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Come build with us! The BlackBerry(R) Developer Conference in SF, CA
&lt;br&gt;is the only developer event you need to attend this year. Jumpstart your
&lt;br&gt;developing skills, take BlackBerry mobile applications to market and stay 
&lt;br&gt;ahead of the curve. Join us from November 9 - 12, 2009. Register now!
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/devconference&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/devconference&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;kaffeine-devel mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26161077&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-devel@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-devel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-devel&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-devel-f3473.html&quot; embed=&quot;fixTarget[3473]&quot; target=&quot;_top&quot; &gt;kaffeine-devel&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/dbus-support-for-kaffeine-tp26128565p26161077.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26160366</id>
	<title>Re: dbus support for kaffeine</title>
	<published>2009-11-02T01:00:39Z</published>
	<updated>2009-11-02T01:00:39Z</updated>
	<author>
		<name>Bugzilla from christophpfister@gmail.com</name>
	</author>
	<content type="html">2009/10/30 Pascal Pollet &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26160366&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pascal@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I sent an email to this mailing list with a patch attached one hour ago,
&lt;br&gt;&amp;gt; but now I looked at the mailing list archive
&lt;br&gt;&amp;gt; (&lt;a href=&quot;http://sourceforge.net/mailarchive/forum.php?forum_name=kaffeine-devel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://sourceforge.net/mailarchive/forum.php?forum_name=kaffeine-devel&lt;/a&gt;),
&lt;br&gt;&amp;gt; and it seems that only the patch reached the mailing list, and not the
&lt;br&gt;&amp;gt; body of the email.
&lt;br&gt;&lt;br&gt;Right, there seems to be a problem (I'll take care of it).
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Is this maybe a sourceforge bug? So I send the mail
&lt;br&gt;&amp;gt; again, without the patch this time:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Hello guys,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I am since the very beginning of kaffeine a great fan of this
&lt;br&gt;&amp;gt; application and use it for watching movies and TV. In the new version, I
&lt;br&gt;&amp;gt; miss a dbus interface to be able to use my remote control for watching
&lt;br&gt;&amp;gt; TV. As I know a little bit of C++ and Qt, I decided to implement the
&lt;br&gt;&amp;gt; dbus features for kaffeine, btw. giving me the occasion to learn how to
&lt;br&gt;&amp;gt; do this. Here is a small patch which makes two functions of dvbtab.cpp
&lt;br&gt;&amp;gt; available for dbus: previousChannel() and nextChannel(). It is just a
&lt;br&gt;&amp;gt; minimal proof of principle, to show you how I would implement the dbus
&lt;br&gt;&amp;gt; functionality. I would be really happy to contribute to this cool
&lt;br&gt;&amp;gt; project, so if you are interested in my code, please tell me. I would
&lt;br&gt;&amp;gt; add dbus support for all functions which should be accessible from the
&lt;br&gt;&amp;gt; outside world.
&lt;/div&gt;&lt;br&gt;I appreciate contributions (I have to code less; you learn something
&lt;br&gt;;-). See below for a (short, I'm sorry) feedback.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; For my developer background, I like to contribute with mostly small
&lt;br&gt;&amp;gt; patches to various open-source projects, and I am the guy from this
&lt;br&gt;&amp;gt; project: &lt;a href=&quot;http://www.bongosoft.de&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.bongosoft.de&lt;/a&gt;&amp;nbsp;(german page!).
&lt;br&gt;&amp;gt; Newly, I also started this one:
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://www.kde-look.org/content/show.php/Babeleo+translator?content=110491&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.kde-look.org/content/show.php/Babeleo+translator?content=110491&lt;/a&gt;&lt;br&gt;&amp;gt; In &amp;quot;real life&amp;quot; I am about to finalize a Ph.D. in bioinformatics in the
&lt;br&gt;&amp;gt; nice town of Freiburg/Germany...
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I am both French and German, so you can talk to me in any of these
&lt;br&gt;&amp;gt; languages, naturally also in English.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The patch is against revision 1042616 of the SVN tree.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; greetings,
&lt;br&gt;&amp;gt; Pascal
&lt;/div&gt;&lt;br&gt;&amp;gt; diff -Naur ../kaffeine_ori/src/CMakeLists.txt ./src/CMakeLists.txt
&lt;br&gt;&amp;gt; --- ../kaffeine_ori/src/CMakeLists.txt  2009-10-30 10:34:30.000000000 +0100
&lt;br&gt;&amp;gt; +++ ./src/CMakeLists.txt        2009-10-30 11:08:47.000000000 +0100
&lt;br&gt;&amp;gt; @@ -2,6 +2,7 @@
&lt;br&gt;&amp;gt;     dvb/dvbchannel.cpp
&lt;br&gt;&amp;gt;     dvb/dvbchannelui.cpp
&lt;br&gt;&amp;gt;     dvb/dvbconfigdialog.cpp
&lt;br&gt;&amp;gt; +    dvb/dvbdbusadaptor.cpp
&lt;br&gt;&lt;br&gt;please place the file in the src/ directory and call it dbusadaptor.cpp
&lt;br&gt;&lt;br&gt;&amp;gt;     dvb/dvbdevice.cpp
&lt;br&gt;&amp;gt;     dvb/dvbepg.cpp
&lt;br&gt;&amp;gt;     dvb/dvbmanager.cpp
&lt;br&gt;&amp;gt; diff -Naur ../kaffeine_ori/src/dvb/dvbdbusadaptor.h ./src/dvb/dvbdbusadaptor.h
&lt;br&gt;&amp;gt; --- ../kaffeine_ori/src/dvb/dvbdbusadaptor.h &amp;nbsp; &amp;nbsp;1970-01-01 01:00:00.000000000 +0100
&lt;br&gt;&amp;gt; +++ ./src/dvb/dvbdbusadaptor.h &amp;nbsp;2009-10-30 11:08:47.000000000 +0100
&lt;br&gt;&amp;gt; @@ -0,0 +1,19 @@
&lt;br&gt;&lt;br&gt;use a header include guard =
&lt;br&gt;#ifndef DBUSADAPTOR_H
&lt;br&gt;#define DBUSADAPTOR_H
&lt;br&gt;&lt;br&gt;...
&lt;br&gt;&lt;br&gt;#endif
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; +#include &amp;lt;QDBusAbstractAdaptor&amp;gt;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +class DvbTab;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +class dvbdbusadaptor: public QDBusAbstractAdaptor
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; Q_OBJECT
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; Q_CLASSINFO(&amp;quot;D-Bus Interface&amp;quot;, &amp;quot;org.kde.kaffeine&amp;quot;)
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +private:
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; DvbTab* dtab;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +public:
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; dvbdbusadaptor(QWidget* dvbTab);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +public slots:
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; void nextTvChannel();
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; void previousTvChannel();
&lt;/div&gt;&lt;br&gt;please call those slots previous() and next()
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; +};
&lt;br&gt;&amp;gt; diff -Naur ../kaffeine_ori/src/dvb/dvbdbusadaptor.cpp ./src/dvb/dvbdbusadaptor.cpp
&lt;br&gt;&amp;gt; --- ../kaffeine_ori/src/dvb/dvbdbusadaptor.cpp  1970-01-01 01:00:00.000000000 +0100
&lt;br&gt;&amp;gt; +++ ./src/dvb/dvbdbusadaptor.cpp        2009-10-30 11:08:47.000000000 +0100
&lt;br&gt;&amp;gt; @@ -0,0 +1,19 @@
&lt;br&gt;&amp;gt; +#include &amp;quot;dvbdbusadaptor.h&amp;quot;
&lt;br&gt;&amp;gt; +#include &amp;quot;dvbtab.h&amp;quot;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +dvbdbusadaptor::dvbdbusadaptor(QWidget* dvbtab)
&lt;br&gt;&amp;gt; +: QDBusAbstractAdaptor(dvbtab)
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; +       dtab = dynamic_cast&amp;lt;DvbTab*&amp;gt;(dvbtab);
&lt;/div&gt;&lt;br&gt;avoid dynamic casts
&lt;br&gt;&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +Q_NOREPLY void dvbdbusadaptor::previousTvChannel()
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; +       dtab-&amp;gt;previousChannel();
&lt;br&gt;&lt;br&gt;call mediaWidget-&amp;gt;previous()
&lt;br&gt;&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +Q_NOREPLY void dvbdbusadaptor::nextTvChannel()
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; +       dtab-&amp;gt;nextChannel();
&lt;br&gt;&lt;br&gt;call mediaWidget-&amp;gt;next()
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; diff -Naur ../kaffeine_ori/src/dvb/dvbtab.cpp ./src/dvb/dvbtab.cpp
&lt;br&gt;&amp;gt; --- ../kaffeine_ori/src/dvb/dvbtab.cpp  2009-10-30 10:34:30.000000000 +0100
&lt;br&gt;&amp;gt; +++ ./src/dvb/dvbtab.cpp        2009-10-30 11:08:47.000000000 +0100
&lt;br&gt;&amp;gt; @@ -21,6 +21,7 @@
&lt;br&gt;&amp;gt;  #include &amp;quot;dvbtab.h&amp;quot;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;  #include &amp;lt;QBoxLayout&amp;gt;
&lt;br&gt;&amp;gt; +#include &amp;lt;QDBusConnection&amp;gt;
&lt;br&gt;&amp;gt;  #include &amp;lt;QDir&amp;gt;
&lt;br&gt;&amp;gt;  #include &amp;lt;QHeaderView&amp;gt;
&lt;br&gt;&amp;gt;  #include &amp;lt;QPainter&amp;gt;
&lt;br&gt;&amp;gt; @@ -37,6 +38,7 @@
&lt;br&gt;&amp;gt;  #include &amp;quot;../osdwidget.h&amp;quot;
&lt;br&gt;&amp;gt;  #include &amp;quot;dvbchannelui.h&amp;quot;
&lt;br&gt;&amp;gt;  #include &amp;quot;dvbconfigdialog.h&amp;quot;
&lt;br&gt;&amp;gt; +#include &amp;quot;dvbdbusadaptor.h&amp;quot;
&lt;br&gt;&amp;gt;  #include &amp;quot;dvbepg.h&amp;quot;
&lt;br&gt;&amp;gt;  #include &amp;quot;dvbmanager.h&amp;quot;
&lt;br&gt;&amp;gt;  #include &amp;quot;dvbrecording.h&amp;quot;
&lt;br&gt;&amp;gt; @@ -424,6 +426,10 @@
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;        dvbOsdTimer = new QTimer(this);
&lt;br&gt;&amp;gt;        connect(dvbOsdTimer, SIGNAL(timeout()), this, SLOT(osdTimeout()));
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +       new dvbdbusadaptor(this);
&lt;br&gt;&amp;gt; +       QDBusConnection::sessionBus().registerObject(&amp;quot;/DVB&amp;quot;, this);
&lt;br&gt;&amp;gt; +       QDBusConnection::sessionBus().registerService(&amp;quot;org.kde.kaffeine&amp;quot;);
&lt;/div&gt;&lt;br&gt;initialise the adapter from Kaffeine::Kaffeine()
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;  }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;  DvbTab::~DvbTab()
&lt;br&gt;&amp;gt; diff -Naur ../kaffeine_ori/src/dvb/dvbtab.h ./src/dvb/dvbtab.h
&lt;br&gt;&amp;gt; --- ../kaffeine_ori/src/dvb/dvbtab.h    2009-10-30 10:34:30.000000000 +0100
&lt;br&gt;&amp;gt; +++ ./src/dvb/dvbtab.h  2009-10-30 11:08:47.000000000 +0100
&lt;br&gt;&amp;gt; @@ -42,6 +42,8 @@
&lt;br&gt;&amp;gt;  class DvbTab : public TabBase
&lt;br&gt;&amp;gt;  {
&lt;br&gt;&amp;gt;        Q_OBJECT
&lt;br&gt;&amp;gt; +       friend class dvbdbusadaptor;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt;  public:
&lt;br&gt;&amp;gt;        DvbTab(KMenu *menu, KActionCollection *collection, MediaWidget *mediaWidget_);
&lt;br&gt;&amp;gt;        ~DvbTab();
&lt;/div&gt;&lt;br&gt;Thanks,
&lt;br&gt;&lt;br&gt;Christoph
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Come build with us! The BlackBerry(R) Developer Conference in SF, CA
&lt;br&gt;is the only developer event you need to attend this year. Jumpstart your
&lt;br&gt;developing skills, take BlackBerry mobile applications to market and stay 
&lt;br&gt;ahead of the curve. Join us from November 9 - 12, 2009. Register now!
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/devconference&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/devconference&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;kaffeine-devel mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26160366&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-devel@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-devel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-devel&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-devel-f3473.html&quot; embed=&quot;fixTarget[3473]&quot; target=&quot;_top&quot; &gt;kaffeine-devel&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/dbus-support-for-kaffeine-tp26128565p26160366.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26159574</id>
	<title>Re: Kaffeine (almost) successful build on mswindows</title>
	<published>2009-11-02T00:15:16Z</published>
	<updated>2009-11-02T00:15:16Z</updated>
	<author>
		<name>Bugzilla from christophpfister@gmail.com</name>
	</author>
	<content type="html">2009/11/1 Patrick Spendrin &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26159574&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;ps_ml@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt; Andrius da Costa Ribas schrieb:
&lt;br&gt;&amp;gt;&amp;gt; CMakeLists.txt does not seem to specify individual targets, how do I
&lt;br&gt;&amp;gt;&amp;gt; remove kaffeinedvb target? (or make it conditional?)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I just disabled it on windows.
&lt;br&gt;&amp;gt; Looking at the code it tries to run system specific stuff anyway, so no
&lt;br&gt;&amp;gt; direct way to make it work on windows...
&lt;br&gt;&lt;br&gt;Yes, the dvb part is using a linux-specific interface.
&lt;br&gt;&lt;br&gt;&amp;gt; regards,
&lt;br&gt;&amp;gt; Patrick
&lt;br&gt;&lt;br&gt;Christoph
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Come build with us! The BlackBerry(R) Developer Conference in SF, CA
&lt;br&gt;is the only developer event you need to attend this year. Jumpstart your
&lt;br&gt;developing skills, take BlackBerry mobile applications to market and stay 
&lt;br&gt;ahead of the curve. Join us from November 9 - 12, 2009. Register now!
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/devconference&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/devconference&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;kaffeine-user mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26159574&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-user@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-user-f3474.html&quot; embed=&quot;fixTarget[3474]&quot; target=&quot;_top&quot; &gt;kaffeine-user&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Kaffeine-%28almost%29-successful-build-on-mswindows-tp26153371p26159574.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26159482</id>
	<title>Re: Kaffeine (almost) successful build on mswindows</title>
	<published>2009-11-01T14:24:47Z</published>
	<updated>2009-11-01T14:24:47Z</updated>
	<author>
		<name>Bugzilla from ps_ml@gmx.de</name>
	</author>
	<content type="html">-----BEGIN PGP SIGNED MESSAGE-----
&lt;br&gt;Hash: SHA1
&lt;br&gt;&lt;br&gt;Andrius da Costa Ribas schrieb:
&lt;br&gt;&amp;gt; CMakeLists.txt does not seem to specify individual targets, how do I
&lt;br&gt;&amp;gt; remove kaffeinedvb target? (or make it conditional?)
&lt;br&gt;&amp;gt; 
&lt;br&gt;I just disabled it on windows.
&lt;br&gt;Looking at the code it tries to run system specific stuff anyway, so no
&lt;br&gt;direct way to make it work on windows...
&lt;br&gt;regards,
&lt;br&gt;Patrick
&lt;br&gt;-----BEGIN PGP SIGNATURE-----
&lt;br&gt;Version: GnuPG v1.4.9 (MingW32)
&lt;br&gt;&lt;br&gt;iEYEARECAAYFAkruCq8ACgkQi49rfdk/G3bhtQCfd3J9TJmnTcTdxc4R3lWCHhPw
&lt;br&gt;cngAoKW/0rNYUwnUW0xTdRrtJ9REzVFV
&lt;br&gt;=+WiY
&lt;br&gt;-----END PGP SIGNATURE-----
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Come build with us! The BlackBerry(R) Developer Conference in SF, CA
&lt;br&gt;is the only developer event you need to attend this year. Jumpstart your
&lt;br&gt;developing skills, take BlackBerry mobile applications to market and stay 
&lt;br&gt;ahead of the curve. Join us from November 9 - 12, 2009. Register now!
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/devconference&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/devconference&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;kaffeine-user mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26159482&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-user@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-user-f3474.html&quot; embed=&quot;fixTarget[3474]&quot; target=&quot;_top&quot; &gt;kaffeine-user&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Kaffeine-%28almost%29-successful-build-on-mswindows-tp26153371p26159482.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26155329</id>
	<title>Re: Kaffeine (almost) successful build on mswindows</title>
	<published>2009-11-01T13:58:56Z</published>
	<updated>2009-11-01T13:58:56Z</updated>
	<author>
		<name>Andrius da Costa Ribas</name>
	</author>
	<content type="html">CMakeLists.txt does not seem to specify individual targets, how do I remove kaffeinedvb target? (or make it conditional?)&lt;br&gt;&lt;br&gt;&lt;div class=&quot;gmail_quote&quot;&gt;2009/11/1 Andrius da Costa Ribas &lt;span dir=&quot;ltr&quot;&gt;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26155329&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andriusmao@...&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;

&lt;blockquote class=&quot;gmail_quote&quot; style=&quot;border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;&quot;&gt;I believe I&amp;#39;ll remove WMP from my machine soon  :)&lt;br&gt;&lt;br&gt;&lt;div class=&quot;gmail_quote&quot;&gt;2009/11/1 Christoph Pfister &lt;span dir=&quot;ltr&quot;&gt;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26155329&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;christophpfister@...&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;div&gt;

&lt;div&gt;&lt;/div&gt;&lt;div class=&quot;h5&quot;&gt;&lt;br&gt;
&lt;blockquote class=&quot;gmail_quote&quot; style=&quot;border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;&quot;&gt;Hi,&lt;br&gt;
&lt;br&gt;
2009/11/1 Andrius da Costa Ribas &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26155329&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andriusmao@...&lt;/a&gt;&amp;gt;:&lt;br&gt;
&lt;div&gt;&amp;gt; I&amp;#39;ve just tried building Kaffeine on MSWindows and I&amp;#39;ve got surprised!!! no&lt;br&gt;
&amp;gt; code changes to build successfuly all targets ( except linux-specific dvb&lt;br&gt;
&amp;gt; parts )&lt;br&gt;
&lt;br&gt;
&lt;/div&gt;That isn&amp;#39;t a big surprise for me - it&amp;#39;s the consequence of the kde4&lt;br&gt;
technologies (e.g. the buildsystem).&lt;br&gt;
&lt;div&gt;&lt;br&gt;
&amp;gt; screenshot of kaffeine playing windows vista sample video butterfly.wmv&lt;br&gt;
&amp;gt; (using mplayer backend):&lt;br&gt;
&amp;gt; &lt;a href=&quot;http://imagebin.ca/view/xHr9jvlF.html&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;http://imagebin.ca/view/xHr9jvlF.html&lt;/a&gt;&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; screenshot of about screen:&lt;br&gt;
&amp;gt; &lt;a href=&quot;http://imagebin.ca/view/6E6q1LIC.html&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;http://imagebin.ca/view/6E6q1LIC.html&lt;/a&gt;&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; It&amp;#39;s a mingw build, I&amp;#39;ve not tried it with msvc. Somehow I&amp;#39;ve got no&lt;br&gt;
&amp;gt; directshow backend in phonon installation  ( KDE 4.3.2 - mingw4 - binary&lt;br&gt;
&amp;gt; packages from installer )&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; @Christoph, is it time to change last question of FAQ? ;)&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; some issues:&lt;br&gt;
&amp;gt; - when trying to open a dvd: &amp;quot;No stream found to handle url dvd://1&amp;quot;,&lt;br&gt;
&amp;gt; similar for audio cd etc.. (I believe it&amp;#39;s kde-windows issue)&lt;br&gt;
&amp;gt; - a small delay before starting video ( longer delay on first use ) ( I&lt;br&gt;
&amp;gt; believe it&amp;#39;s backend issue )&lt;br&gt;
&lt;br&gt;
&lt;/div&gt;Those two issues are caused by phonon resp. the phonon backend.&lt;br&gt;
&lt;div&gt;&lt;br&gt;
&amp;gt; - I&amp;#39;m not sure about konqueror and firefox kaffeine plugin&lt;br&gt;
&lt;br&gt;
&lt;/div&gt;Kaffeine doesn&amp;#39;t provide a plugin anymore.&lt;br&gt;
&lt;div&gt;&lt;br&gt;
&amp;gt; Many thanks for all people who helped :)&lt;br&gt;
&lt;/div&gt;&amp;lt;snip&amp;gt;&lt;br&gt;
&amp;gt; Thanks again,&lt;br&gt;
&amp;gt; Andrius.&lt;br&gt;
&lt;font color=&quot;#888888&quot;&gt;&lt;br&gt;
Christoph&lt;br&gt;
&lt;/font&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br&gt;
&lt;/blockquote&gt;&lt;/div&gt;&lt;br&gt;
&lt;br /&gt;------------------------------------------------------------------------------
&lt;br&gt;Come build with us! The BlackBerry(R) Developer Conference in SF, CA
&lt;br&gt;is the only developer event you need to attend this year. Jumpstart your
&lt;br&gt;developing skills, take BlackBerry mobile applications to market and stay 
&lt;br&gt;ahead of the curve. Join us from November 9 - 12, 2009. Register now!
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/devconference&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/devconference&lt;/a&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;kaffeine-user mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26155329&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-user@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-user-f3474.html&quot; embed=&quot;fixTarget[3474]&quot; target=&quot;_top&quot; &gt;kaffeine-user&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Kaffeine-%28almost%29-successful-build-on-mswindows-tp26153371p26155329.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26155306</id>
	<title>Re: Kaffeine (almost) successful build on mswindows</title>
	<published>2009-11-01T13:55:37Z</published>
	<updated>2009-11-01T13:55:37Z</updated>
	<author>
		<name>Andrius da Costa Ribas</name>
	</author>
	<content type="html">I believe I&amp;#39;ll remove WMP from my machine soon  :)&lt;br&gt;&lt;br&gt;&lt;div class=&quot;gmail_quote&quot;&gt;2009/11/1 Christoph Pfister &lt;span dir=&quot;ltr&quot;&gt;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26155306&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;christophpfister@...&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;

&lt;blockquote class=&quot;gmail_quote&quot; style=&quot;border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;&quot;&gt;Hi,&lt;br&gt;
&lt;br&gt;
2009/11/1 Andrius da Costa Ribas &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26155306&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andriusmao@...&lt;/a&gt;&amp;gt;:&lt;br&gt;
&lt;div class=&quot;im&quot;&gt;&amp;gt; I&amp;#39;ve just tried building Kaffeine on MSWindows and I&amp;#39;ve got surprised!!! no&lt;br&gt;
&amp;gt; code changes to build successfuly all targets ( except linux-specific dvb&lt;br&gt;
&amp;gt; parts )&lt;br&gt;
&lt;br&gt;
&lt;/div&gt;That isn&amp;#39;t a big surprise for me - it&amp;#39;s the consequence of the kde4&lt;br&gt;
technologies (e.g. the buildsystem).&lt;br&gt;
&lt;div class=&quot;im&quot;&gt;&lt;br&gt;
&amp;gt; screenshot of kaffeine playing windows vista sample video butterfly.wmv&lt;br&gt;
&amp;gt; (using mplayer backend):&lt;br&gt;
&amp;gt; &lt;a href=&quot;http://imagebin.ca/view/xHr9jvlF.html&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;http://imagebin.ca/view/xHr9jvlF.html&lt;/a&gt;&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; screenshot of about screen:&lt;br&gt;
&amp;gt; &lt;a href=&quot;http://imagebin.ca/view/6E6q1LIC.html&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;http://imagebin.ca/view/6E6q1LIC.html&lt;/a&gt;&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; It&amp;#39;s a mingw build, I&amp;#39;ve not tried it with msvc. Somehow I&amp;#39;ve got no&lt;br&gt;
&amp;gt; directshow backend in phonon installation  ( KDE 4.3.2 - mingw4 - binary&lt;br&gt;
&amp;gt; packages from installer )&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; @Christoph, is it time to change last question of FAQ? ;)&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; some issues:&lt;br&gt;
&amp;gt; - when trying to open a dvd: &amp;quot;No stream found to handle url dvd://1&amp;quot;,&lt;br&gt;
&amp;gt; similar for audio cd etc.. (I believe it&amp;#39;s kde-windows issue)&lt;br&gt;
&amp;gt; - a small delay before starting video ( longer delay on first use ) ( I&lt;br&gt;
&amp;gt; believe it&amp;#39;s backend issue )&lt;br&gt;
&lt;br&gt;
&lt;/div&gt;Those two issues are caused by phonon resp. the phonon backend.&lt;br&gt;
&lt;div class=&quot;im&quot;&gt;&lt;br&gt;
&amp;gt; - I&amp;#39;m not sure about konqueror and firefox kaffeine plugin&lt;br&gt;
&lt;br&gt;
&lt;/div&gt;Kaffeine doesn&amp;#39;t provide a plugin anymore.&lt;br&gt;
&lt;div class=&quot;im&quot;&gt;&lt;br&gt;
&amp;gt; Many thanks for all people who helped :)&lt;br&gt;
&lt;/div&gt;&amp;lt;snip&amp;gt;&lt;br&gt;
&amp;gt; Thanks again,&lt;br&gt;
&amp;gt; Andrius.&lt;br&gt;
&lt;font color=&quot;#888888&quot;&gt;&lt;br&gt;
Christoph&lt;br&gt;
&lt;/font&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;br&gt;
&lt;br /&gt;------------------------------------------------------------------------------
&lt;br&gt;Come build with us! The BlackBerry(R) Developer Conference in SF, CA
&lt;br&gt;is the only developer event you need to attend this year. Jumpstart your
&lt;br&gt;developing skills, take BlackBerry mobile applications to market and stay 
&lt;br&gt;ahead of the curve. Join us from November 9 - 12, 2009. Register now!
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/devconference&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/devconference&lt;/a&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;kaffeine-user mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26155306&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-user@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-user-f3474.html&quot; embed=&quot;fixTarget[3474]&quot; target=&quot;_top&quot; &gt;kaffeine-user&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Kaffeine-%28almost%29-successful-build-on-mswindows-tp26153371p26155306.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26154506</id>
	<title>Re: Kaffeine (almost) successful build on mswindows</title>
	<published>2009-11-01T12:30:52Z</published>
	<updated>2009-11-01T12:30:52Z</updated>
	<author>
		<name>Bugzilla from christophpfister@gmail.com</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;2009/11/1 Andrius da Costa Ribas &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26154506&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andriusmao@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt; I've just tried building Kaffeine on MSWindows and I've got surprised!!! no
&lt;br&gt;&amp;gt; code changes to build successfuly all targets ( except linux-specific dvb
&lt;br&gt;&amp;gt; parts )
&lt;br&gt;&lt;br&gt;That isn't a big surprise for me - it's the consequence of the kde4
&lt;br&gt;technologies (e.g. the buildsystem).
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; screenshot of kaffeine playing windows vista sample video butterfly.wmv
&lt;br&gt;&amp;gt; (using mplayer backend):
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://imagebin.ca/view/xHr9jvlF.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://imagebin.ca/view/xHr9jvlF.html&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; screenshot of about screen:
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://imagebin.ca/view/6E6q1LIC.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://imagebin.ca/view/6E6q1LIC.html&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; It's a mingw build, I've not tried it with msvc. Somehow I've got no
&lt;br&gt;&amp;gt; directshow backend in phonon installation  ( KDE 4.3.2 - mingw4 - binary
&lt;br&gt;&amp;gt; packages from installer )
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; @Christoph, is it time to change last question of FAQ? ;)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; some issues:
&lt;br&gt;&amp;gt; - when trying to open a dvd: &amp;quot;No stream found to handle url dvd://1&amp;quot;,
&lt;br&gt;&amp;gt; similar for audio cd etc.. (I believe it's kde-windows issue)
&lt;br&gt;&amp;gt; - a small delay before starting video ( longer delay on first use ) ( I
&lt;br&gt;&amp;gt; believe it's backend issue )
&lt;/div&gt;&lt;br&gt;Those two issues are caused by phonon resp. the phonon backend.
&lt;br&gt;&lt;br&gt;&amp;gt; - I'm not sure about konqueror and firefox kaffeine plugin
&lt;br&gt;&lt;br&gt;Kaffeine doesn't provide a plugin anymore.
&lt;br&gt;&lt;br&gt;&amp;gt; Many thanks for all people who helped :)
&lt;br&gt;&amp;lt;snip&amp;gt;
&lt;br&gt;&amp;gt; Thanks again,
&lt;br&gt;&amp;gt; Andrius.
&lt;br&gt;&lt;br&gt;Christoph
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Come build with us! The BlackBerry(R) Developer Conference in SF, CA
&lt;br&gt;is the only developer event you need to attend this year. Jumpstart your
&lt;br&gt;developing skills, take BlackBerry mobile applications to market and stay 
&lt;br&gt;ahead of the curve. Join us from November 9 - 12, 2009. Register now!
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/devconference&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/devconference&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;kaffeine-user mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26154506&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-user@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-user-f3474.html&quot; embed=&quot;fixTarget[3474]&quot; target=&quot;_top&quot; &gt;kaffeine-user&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Kaffeine-%28almost%29-successful-build-on-mswindows-tp26153371p26154506.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26154456</id>
	<title>Re: [kaffeine-devel] Kaffeine (almost) successful build on mswindows</title>
	<published>2009-11-01T12:25:03Z</published>
	<updated>2009-11-01T12:25:03Z</updated>
	<author>
		<name>Bugzilla from christophpfister@gmail.com</name>
	</author>
	<content type="html">2009/11/1 Devin Heitmueller &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26154456&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;devin.heitmueller@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;lt;snip&amp;gt;
&lt;br&gt;&amp;gt; Andrius,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Pretty neat.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; It might make sense for you to propose a patch that includes a stub
&lt;br&gt;&amp;gt; class for the dvb stuff, so that it builds cleanly on platforms that
&lt;br&gt;&amp;gt; don't have Linux DVB.
&lt;br&gt;&lt;br&gt;You don't need a stub class; removing the kaffeinedvb target from
&lt;br&gt;CMakeLists.txt (or making it conditional) is enough.
&lt;br&gt;&lt;br&gt;&amp;gt; Devin
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; Devin J. Heitmueller
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://www.devinheitmueller.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.devinheitmueller.com&lt;/a&gt;&lt;br&gt;&amp;gt; AIM: devinheitmueller
&lt;br&gt;&lt;br&gt;Christoph
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Come build with us! The BlackBerry(R) Developer Conference in SF, CA
&lt;br&gt;is the only developer event you need to attend this year. Jumpstart your
&lt;br&gt;developing skills, take BlackBerry mobile applications to market and stay 
&lt;br&gt;ahead of the curve. Join us from November 9 - 12, 2009. Register now!
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/devconference&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/devconference&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;kaffeine-user mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26154456&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-user@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-user-f3474.html&quot; embed=&quot;fixTarget[3474]&quot; target=&quot;_top&quot; &gt;kaffeine-user&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Kaffeine-%28almost%29-successful-build-on-mswindows-tp26153371p26154456.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26154457</id>
	<title>Re: Kaffeine (almost) successful build on mswindows</title>
	<published>2009-11-01T12:25:03Z</published>
	<updated>2009-11-01T12:25:03Z</updated>
	<author>
		<name>Bugzilla from christophpfister@gmail.com</name>
	</author>
	<content type="html">2009/11/1 Devin Heitmueller &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26154457&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;devin.heitmueller@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;lt;snip&amp;gt;
&lt;br&gt;&amp;gt; Andrius,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Pretty neat.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; It might make sense for you to propose a patch that includes a stub
&lt;br&gt;&amp;gt; class for the dvb stuff, so that it builds cleanly on platforms that
&lt;br&gt;&amp;gt; don't have Linux DVB.
&lt;br&gt;&lt;br&gt;You don't need a stub class; removing the kaffeinedvb target from
&lt;br&gt;CMakeLists.txt (or making it conditional) is enough.
&lt;br&gt;&lt;br&gt;&amp;gt; Devin
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; Devin J. Heitmueller
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://www.devinheitmueller.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.devinheitmueller.com&lt;/a&gt;&lt;br&gt;&amp;gt; AIM: devinheitmueller
&lt;br&gt;&lt;br&gt;Christoph
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Come build with us! The BlackBerry(R) Developer Conference in SF, CA
&lt;br&gt;is the only developer event you need to attend this year. Jumpstart your
&lt;br&gt;developing skills, take BlackBerry mobile applications to market and stay 
&lt;br&gt;ahead of the curve. Join us from November 9 - 12, 2009. Register now!
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/devconference&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/devconference&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;kaffeine-devel mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26154457&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-devel@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-devel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-devel&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-devel-f3473.html&quot; embed=&quot;fixTarget[3473]&quot; target=&quot;_top&quot; &gt;kaffeine-devel&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Re%3A-Kaffeine-%28almost%29-successful-build-on-mswindows-tp26153833p26154457.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26154459</id>
	<title>Re: [kaffeine-devel] Kaffeine (almost) successful build on mswindows</title>
	<published>2009-11-01T12:20:55Z</published>
	<updated>2009-11-01T12:20:55Z</updated>
	<author>
		<name>Bugzilla from devin.heitmueller@gmail.com</name>
	</author>
	<content type="html">On Sun, Nov 1, 2009 at 2:12 PM, Andrius da Costa Ribas
&lt;br&gt;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26154459&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andriusmao@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Including  kaffeine-devel list
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; Andrius
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 2009/11/1 Andrius da Costa Ribas &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26154459&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andriusmao@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; I've just tried building Kaffeine on MSWindows and I've got surprised!!!
&lt;br&gt;&amp;gt;&amp;gt; no code changes to build successfuly all targets ( except linux-specific dvb
&lt;br&gt;&amp;gt;&amp;gt; parts )
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; screenshot of kaffeine playing windows vista sample video butterfly.wmv
&lt;br&gt;&amp;gt;&amp;gt; (using mplayer backend):
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://imagebin.ca/view/xHr9jvlF.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://imagebin.ca/view/xHr9jvlF.html&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; screenshot of about screen:
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://imagebin.ca/view/6E6q1LIC.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://imagebin.ca/view/6E6q1LIC.html&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; It's a mingw build, I've not tried it with msvc. Somehow I've got no
&lt;br&gt;&amp;gt;&amp;gt; directshow backend in phonon installation  ( KDE 4.3.2 - mingw4 - binary
&lt;br&gt;&amp;gt;&amp;gt; packages from installer )
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; @Christoph, is it time to change last question of FAQ? ;)
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; some issues:
&lt;br&gt;&amp;gt;&amp;gt; - when trying to open a dvd: &amp;quot;No stream found to handle url dvd://1&amp;quot;,
&lt;br&gt;&amp;gt;&amp;gt; similar for audio cd etc.. (I believe it's kde-windows issue)
&lt;br&gt;&amp;gt;&amp;gt; - a small delay before starting video ( longer delay on first use ) ( I
&lt;br&gt;&amp;gt;&amp;gt; believe it's backend issue )
&lt;br&gt;&amp;gt;&amp;gt; - I'm not sure about konqueror and firefox kaffeine plugin
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Many thanks for all people who helped :)
&lt;/div&gt;&lt;br&gt;Andrius,
&lt;br&gt;&lt;br&gt;Pretty neat.
&lt;br&gt;&lt;br&gt;It might make sense for you to propose a patch that includes a stub
&lt;br&gt;class for the dvb stuff, so that it builds cleanly on platforms that
&lt;br&gt;don't have Linux DVB.
&lt;br&gt;&lt;br&gt;Devin
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Devin J. Heitmueller
&lt;br&gt;&lt;a href=&quot;http://www.devinheitmueller.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.devinheitmueller.com&lt;/a&gt;&lt;br&gt;AIM: devinheitmueller
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Come build with us! The BlackBerry(R) Developer Conference in SF, CA
&lt;br&gt;is the only developer event you need to attend this year. Jumpstart your
&lt;br&gt;developing skills, take BlackBerry mobile applications to market and stay 
&lt;br&gt;ahead of the curve. Join us from November 9 - 12, 2009. Register now!
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/devconference&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/devconference&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;kaffeine-user mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26154459&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-user@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/kaffeine-user&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/kaffeine-user-f3474.html&quot; embed=&quot;fixTarget[3474]&quot; target=&quot;_top&quot; &gt;kaffeine-user&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Kaffeine-%28almost%29-successful-build-on-mswindows-tp26153371p26154459.html" />
</entry>

</feed>
