<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<id>tag:old.nabble.com,2006:forum-3067</id>
	<title>Nabble - CD Playing</title>
	<updated>2009-12-06T13:45:03Z</updated>
	<link rel="self" type="application/atom+xml" href="http://old.nabble.com/CD-Playing-f3067.xml" />
	<link rel="alternate" type="text/html" href="http://old.nabble.com/CD-Playing-f3067.html" />
	<subtitle type="html"></subtitle>
	
<entry>
	<id>tag:old.nabble.com,2006:post-26669433</id>
	<title>DVD Menu from remote control</title>
	<published>2009-12-06T13:45:03Z</published>
	<updated>2009-12-06T13:45:03Z</updated>
	<author>
		<name>Jeremy Weimer</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 HTTP-EQUIV=&quot;Content-Type&quot; CONTENT=&quot;text/html; CHARSET=UTF-8&quot;&gt;
  &lt;META NAME=&quot;GENERATOR&quot; CONTENT=&quot;GtkHTML/3.24.1.1&quot;&gt;
&lt;/HEAD&gt;
&lt;BODY&gt;
Over the past couple of days I have been configuring my remote control to operate Kaffeine.&amp;nbsp; I've got just about everything I want to work using the &amp;quot;config = dcop kaffeine KaffeineIface ...&amp;quot; commands, but there are two functions I would like to set-up that &amp;quot;decop&amp;quot; doesn't seep to support.&lt;BR&gt;
&lt;BR&gt;
These two functions are related to DVD Menues.&amp;nbsp; I would like to know how to cinfigure the remote to navigate through lists such as &amp;quot;episode list&amp;quot; and then select &amp;quot;X&amp;quot; episode to play.&amp;nbsp; I cannot figure out the programming for those two functions.&lt;BR&gt;
&lt;BR&gt;
I hope I am being clear on what I am asking as I am quite new to Linux.&lt;BR&gt;
&lt;BR&gt;
If you need me to be more clear or know how to help I would greatly appreciate an e-mail.&lt;BR&gt;
&lt;BR&gt;
Thank You&lt;BR&gt;
Jeremy&lt;BR&gt;
&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26669433&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jeremy.j.weimer@...&lt;/a&gt;
&lt;/BODY&gt;
&lt;/HTML&gt;
&lt;br /&gt;------------------------------------------------------------------------------
&lt;br&gt;Join us December 9, 2009 for the Red Hat Virtual Experience,
&lt;br&gt;a free event focused on virtualization and cloud computing. 
&lt;br&gt;Attend in-depth sessions from your desk. Your couch. Anywhere.
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/redhat-sfdev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/redhat-sfdev2dev&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=26669433&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/DVD-Menu-from-remote-control-tp26669433p26669433.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26660175</id>
	<title>Re: Request: kaffeine --dvb start parameter</title>
	<published>2009-12-05T14:45:48Z</published>
	<updated>2009-12-05T14:45:48Z</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=ISO-8859-1&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;
Christoph Pfister schrieb:
&lt;blockquote cite=&quot;mid:19a3b7a80911280546k7938050fr4ba29f9c540878ba@mail.gmail.com&quot; type=&quot;cite&quot;&gt;
  &lt;pre wrap=&quot;&quot;&gt;2009/11/17 Boris Cuber &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26660175&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine@...&lt;/a&gt;:
  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;Hi kaffeine people,

One feature i miss from the old versions is the possibilty
to start kaffeine from the cmdline in dvb mode with
the last tuned channel.

This would also keep some compatability to ~kaffeine-0.8.x.
I dunno if this is really a &quot;wanted&quot; feature, but it improves my
tv/dvb watching experience. I'm sure this could also be done
by altering the --tv parameter, but i'm no qt/c++ programmer
and my tries ended up in segfaults when starting kaffeine.

Whatever, it'd be cool to have this feature back ;)



A simple patch (applies to trunk), adds a --dvb parameter:
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
Applied (I've called the option &quot;--lastchannel&quot;).

  &lt;/pre&gt;
&lt;/blockquote&gt;
strangely enough this works if I close kaffeine witch Ctrl-Q or close
the window using the close-button of the window decoration, but it does
not work when I close kaffeine using &quot;qdbus /MainApplication quit&quot;. In
this case the last channel is not remembered. I dont know what this
dbus function really does, as it is automatically generated and not
directly implemented in the kaffeine source... Maybe it simply kills
the process???&lt;br&gt;
&lt;br&gt;
cheers,&lt;br&gt;
Pascal&lt;br&gt;
&lt;br&gt;
&lt;/body&gt;
&lt;/html&gt;
&lt;br /&gt;------------------------------------------------------------------------------
&lt;br&gt;Join us December 9, 2009 for the Red Hat Virtual Experience,
&lt;br&gt;a free event focused on virtualization and cloud computing. 
&lt;br&gt;Attend in-depth sessions from your desk. Your couch. Anywhere.
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/redhat-sfdev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/redhat-sfdev2dev&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=26660175&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/Request%3A-kaffeine---dvb-start-parameter-tp26390411p26660175.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26659859</id>
	<title>Re: dbus support for kaffeine</title>
	<published>2009-12-05T14:09:42Z</published>
	<updated>2009-12-05T14:09:42Z</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 Christoph,&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;with my old patch the channel ui didn't get updated when the channel was set
using the SetNumber(int) function, i now fixed it. I also cleaned up a
little bit my code in dvbtab.cpp and fixed a possible segmentation fault
when the dbus function SetDvbChannel(Qstring) was called with an invalid
name. The patch is against rev. 1053875.&lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;&lt;/pre&gt;
  &lt;pre wrap=&quot;&quot;&gt;
Finally I managed to review, overwork and commit your patch ...
  &lt;/pre&gt;
&lt;/blockquote&gt;
Thank you Christoph for taking my work into account and for this
detailled explanation. I'm not sure I really made your life easier, as
you finally had to change much of what I've done, but at least I could
give a little push to the whole dbus thing ;) I will not go into all
the points you mentioned, as it's all ok and I have nothing to add...&lt;br&gt;
&lt;br&gt;
&lt;blockquote type=&quot;cite&quot;&gt;
  &lt;pre wrap=&quot;&quot;&gt;c) continue hacking (if you need a task, you can try to create a
kdelirc profile for kaffeine, that's an xml file which provides
default associations between remote control buttons and kaffeine dbus
interface [2])&lt;/pre&gt;
&lt;/blockquote&gt;
I'll continue hacking for sure and will have a look at the kdelirc
profiles, I think I can do something in the next time. I'm happy if I
can help, you're doing great work and there are really much things to
do, this cannot be taken for granted, all this work only because there
is a new Qt version... Thumbs up!&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:19a3b7a80911300915u4957f107secb3045f7b3bc546@mail.gmail.com&quot; type=&quot;cite&quot;&gt;
  &lt;pre wrap=&quot;&quot;&gt;Hi,

2009/11/24 Pascal &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26659859&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 Christoph,

with my old patch the channel ui didn't get updated when the channel was set
using the SetNumber(int) function, i now fixed it. I also cleaned up a
little bit my code in dvbtab.cpp and fixed a possible segmentation fault
when the dbus function SetDvbChannel(Qstring) was called with an invalid
name. The patch is against rev. 1053875.
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
Finally I managed to review, overwork and commit your patch ...

  &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;
  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;+class MprisPlayerObject : public QObject
+{
+       Q_OBJECT
+       Q_CLASSINFO(&quot;D-Bus Interface&quot;, &quot;org.freedesktop.MediaPlayer&quot;)
+public:
+       explicit MprisPlayerObject(MediaWidget *mediaWidget_);
+       ~MprisPlayerObject();
+
+public slots:
+       void Next();
+       void Prev();
+       void Play();
+       void Pause();
+       void Stop();
+       int  VolumeGet();
+       void VolumeSet(int volume);
+       int  PositionGet();
+       void PositionSet(int position);
+       void Repeat();
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
You forgot the bool parameter.

  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;+       MprisStatusStruct GetStatus();
+       QVariantMap GetMetadata();
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
MPRIS metadata and Phonon metadata specifications aren't 100%
compatible (&quot;location&quot; means url in mpris terms, while it means
&quot;location where track was recorded&quot; in Phonon terms) ... I've left out
the metadata part for the moment.

  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;+       int GetCaps();
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
All functions reordered into the order given by the spec.

  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;+       // this functions are not part of the MPRIS specs
+       void PlayPause();
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
Not needed, Pause() has the same behaviour than mediaWidget's playPause action.

  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;+       void VolumeIncrease();
+       void VolumeDecrease();
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
Renamed to &quot;IncreaseVolume&quot; and &quot;DecreaseVolume&quot;.

  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;+       void Play(const QString &amp;amp;url);
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
Not needed, TrackList has an AddTrack() function.

  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;+       void PlayAudioCd();
+       void PlayVideoCd();
+       void PlayDvd();
+       void ChangeAudioChannel(int index);
+       void ChangeSubtitle(int index);
+       void LongSkipBackward();
+       void SkipBackward();
+       void SkipForward();
+       void LongSkipForward();
+       void TimeButtonClicked();
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
Left out for the moment (this has much to do with my workflow, not
with the actual content of the patch ... I'll think about those
functions once I have some spare time again).

  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;+       void ToggleMuted();
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;+       void UpdateTimeButton();
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
Not needed, internal function.

  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;+signals:
+       void CapsChange( int );
+       void StatusChange( MprisStatusStruct );
+       void TrackChange( QVariantMap );
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
Reordered into the order given by the spec.

  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;+private:
+       MediaWidget *mediaWidget;
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;+class MprisTrackListObject : public QObject
+{
+       Q_OBJECT
+       Q_CLASSINFO(&quot;D-Bus Interface&quot;, &quot;org.freedesktop.MediaPlayer&quot;)
+public:
+       explicit MprisTrackListObject(MediaWidget *mediaWidget_);
+       ~MprisTrackListObject();
+
+public slots:
+       QVariantMap GetMetadata();
+       int GetCurrentTrack();
+       int GetLength();
+       int AddTrack(QString track, bool play);
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
Use &quot;const QString &amp;amp;&quot;, not &quot;QString&quot;.

  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;+       void DelTrack(int position);
+       void SetLoop(bool loop);
+       void SetRandom(bool random);
+
+signals:
+       void TrackListChange(int);
+
+private:
+       MediaWidget *mediaWidget;
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
All those functions have a relation to PlaylistTab, not to MediaWidget.

  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;+class MprisDvbObject : public QObject
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
Renamed to &quot;DBusTelevisionObject&quot; (nothing to do with mpris).

  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;+{
+       Q_OBJECT
+       Q_CLASSINFO(&quot;D-Bus Interface&quot;, &quot;org.freedesktop.MediaPlayer&quot;)
+public:
+       explicit MprisDvbObject(MediaWidget *mediaWidget_);
+       ~MprisDvbObject();
+
+public slots:
+       void SetDvbChannel(const QString &amp;amp;name);
+       void SetDvbChannelNumber(int number);
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
Merged into a single function - playChannel(const QString &amp;amp;nameOrNumber);

  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;+       void SetNumber(int number);
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
Not needed (what's the sense of this function?)
Added a DigitPressed(int) function, for entering channel numbers via
remote control.

  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;+       void SetDvbLastChannel();
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
Renamed to PlayLastChannel().

  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;+       void StopDvb();
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
Not needed, internal function.

  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;+       void ToggleInstantRecord();
+       void ToggleOsd();
+
+private:
+       MediaWidget *mediaWidget;
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
All those functions have a relation to DvbTab, not to MediaWidget.

  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;+       void AspectRatioAuto();
+       void AspectRatio4_3();
+       void AspectRatio16_9();
+       void AspectRatioWidget();
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
Left out for the moment (this has much to do with my workflow, not
with the actual content of the patch ... I'll think about those
functions once I have some spare time again).

  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;+       void ToggleFullScreen();
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
Moved to the player object.

  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;+struct MprisStatusStruct
+{
+       quint16 play;
+       quint16 random;
+       quint16 repeatTrack;
+       quint16 repeatAll;
+};
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
The spec says 32 bit integers (= int).

  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;+Q_DECLARE_METATYPE(MprisStatusStruct)
+
+/**
+* The bit values for the capabilities flags
+*/
+enum Cap {
+       NO_CAPS                    = 0,
+       CAN_GO_NEXT                = 1 &amp;lt;&amp;lt; 0,
+       CAN_GO_PREV                = 1 &amp;lt;&amp;lt; 1,
+       CAN_PAUSE                        = 1 &amp;lt;&amp;lt; 2,
+       CAN_PLAY                          = 1 &amp;lt;&amp;lt; 3,
+       CAN_SEEK                          = 1 &amp;lt;&amp;lt; 4,
+       CAN_PROVIDE_METADATA  = 1 &amp;lt;&amp;lt; 5,
+       CAN_HAS_TRACKLIST        = 1 &amp;lt;&amp;lt; 6,
+       ALL_KNOWN_CAPS          = (1 &amp;lt;&amp;lt; 7) - 1
+};
+Q_DECLARE_FLAGS(Caps, Cap)
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
Directly merged into GetCaps (because it is the only function that
will use caps).

  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;+signals:
+       void updateDvbChannelUi(int number);
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
Solved that problem in a different way (ChannelModel returns the row,
not the channel itself --&amp;gt; the proxy model can map that information to
the correct view model index).

  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;+void DvbTab::toggleInstantRecord()
+{
+       if (instantRecordAction-&amp;gt;isChecked()) {
+               instantRecordAction-&amp;gt;setChecked(false);
+               instantRecord(false);
+       }
+       else {
+               instantRecordAction-&amp;gt;setChecked(true);
+               instantRecord(true);
+       }
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
Simply use instantRecordAction-&amp;gt;trigger();

  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&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 type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;+bool MediaWidget::isPaused()
+{
+       if (playing &amp;amp;&amp;amp; mediaObject-&amp;gt;state() == Phonon::PausedState)
+       {
+               return true;
+       }
+       return false;
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
Query the playPauseAction.

  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;+}
+int MediaWidget::getVolume()
+{
+       int volume = audioOutput-&amp;gt;volume() * 100;
+
+       if ( volume &amp;gt;= 0 &amp;amp;&amp;amp; volume &amp;lt;= 100 ) {
+               return volume;
+       }
+
+       return 0;
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
Query the volumeSlider.

  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;+}
+
 void MediaWidget::changeVolume(int volume)
 {
       audioOutput-&amp;gt;setVolume(volume * qreal(0.01));
@@ -915,6 +1014,16 @@
       mediaObject-&amp;gt;seek(mediaObject-&amp;gt;currentTime() + 1000 *
longSkipDuration);
 }
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt; class MediaWidget : public QWidget
 {
       Q_OBJECT
+       friend class MprisPlayerObject;
+       friend class MprisTrackListObject;
+       friend class MprisDvbObject;
+       friend class MprisDisplayObject;
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
Do not use friend classes for this purpose because of two reasons:
- there are internal functions that _really_ shouldn't be called from
outside (e.g. volumeChanged or mutedChanged, because they don't update
ui state)
- private functions usually trust their arguments etc, but in this
context more value checking is needed for calls from outside

So I've made the required functions public and rechecked that they
work correctly in all situations.

  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;+       bool hasMedia();
+       void setNumber(int number);
+       void changeDvbChannel(int number);
+       void changeDvbChannel(const QString &amp;amp;name);
+       void toggleOsd();
+       void dvbLastChannel();
+       void toggleInstantRecord();
+       int getCurrentTrack();
+       void playPause();
+       void pause();
+       void setDvbChannel(int number);
+       void setDvbChannel(const QString &amp;amp;name);
+       void setDvbLastChannel();
+       void fullScreen();
+       void delTrack(int position);
+       void setLoop(bool loop);
+       void setRandom(bool random);
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;&lt;!----&gt;
Removed all those functions because they are a) redundant (playPause,
pause --&amp;gt; simplified to togglePause()) or b) don't belong here (the
dbus objects call directly the needed functions from PlaylistTab or
DvbTab).

I suggest the following steps to proceed:
a) study the comments above a bit; the patches I've commited are [1];
feel free to ask questions
b) make your svn repo clean and update it
c) continue hacking (if you need a task, you can try to create a
kdelirc profile for kaffeine, that's an xml file which provides
default associations between remote control buttons and kaffeine dbus
interface [2])

Thanks a lot,

Christoph


[1]
&lt;a class=&quot;moz-txt-link-freetext&quot; href=&quot;http://websvn.kde.org/?view=revision&amp;revision=1055907&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://websvn.kde.org/?view=revision&amp;amp;revision=1055907&lt;/a&gt;
&lt;a class=&quot;moz-txt-link-freetext&quot; href=&quot;http://websvn.kde.org/?view=revision&amp;revision=1056261&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://websvn.kde.org/?view=revision&amp;amp;revision=1056261&lt;/a&gt;
&lt;a class=&quot;moz-txt-link-freetext&quot; href=&quot;http://websvn.kde.org/?view=revision&amp;revision=1056694&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://websvn.kde.org/?view=revision&amp;amp;revision=1056694&lt;/a&gt;
[2]
the resulting file would be installed to
/usr/share/kde4/apps/profiles/kaffeine.profile.xml

  &lt;/pre&gt;
&lt;/blockquote&gt;
&lt;/body&gt;
&lt;/html&gt;
&lt;br /&gt;------------------------------------------------------------------------------
&lt;br&gt;Join us December 9, 2009 for the Red Hat Virtual Experience,
&lt;br&gt;a free event focused on virtualization and cloud computing. 
&lt;br&gt;Attend in-depth sessions from your desk. Your couch. Anywhere.
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/redhat-sfdev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/redhat-sfdev2dev&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=26659859&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-tp26128565p26659859.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26578367</id>
	<title>Re: Kaffeine 1.0-pre2</title>
	<published>2009-11-30T09:18:48Z</published>
	<updated>2009-11-30T09:18:48Z</updated>
	<author>
		<name>Bugzilla from christophpfister@gmail.com</name>
	</author>
	<content type="html">2009/11/28 James W. Bennett &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26578367&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jw-bennett@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt; Kaffeine works now. I swapped DVD's drives. I had a Lite-on in high order
&lt;br&gt;&amp;gt; and samsung in low sata order. Once I made the switch Kaffeine worked good.
&lt;br&gt;&amp;gt; The Lite-on is a brand new drive. Samsung is several months old.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Thank you Christoph you got me on the right path.
&lt;br&gt;&lt;br&gt;The problem is that phonon doesn't care about the device path, so
&lt;br&gt;always the &amp;quot;first&amp;quot; drive (= which is more or less arbitrary) is used.
&lt;br&gt;I'm aware of this issue and hope to resolve it soon.
&lt;br&gt;&lt;br&gt;&amp;gt; Jim Bennett
&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=26578367&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-1.0-pre2-tp26463587p26578367.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26578311</id>
	<title>Re: dbus support for kaffeine</title>
	<published>2009-11-30T09:15:03Z</published>
	<updated>2009-11-30T09:15:03Z</updated>
	<author>
		<name>Bugzilla from christophpfister@gmail.com</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;2009/11/24 Pascal &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26578311&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 Christoph,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; with my old patch the channel ui didn't get updated when the channel was set
&lt;br&gt;&amp;gt; using the SetNumber(int) function, i now fixed it. I also cleaned up a
&lt;br&gt;&amp;gt; little bit my code in dvbtab.cpp and fixed a possible segmentation fault
&lt;br&gt;&amp;gt; when the dbus function SetDvbChannel(Qstring) was called with an invalid
&lt;br&gt;&amp;gt; name. The patch is against rev. 1053875.
&lt;br&gt;&lt;br&gt;Finally I managed to review, overwork and commit your patch ...
&lt;br&gt;&lt;br&gt;&amp;gt; cheers,
&lt;br&gt;&amp;gt; pascal
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; +class MprisPlayerObject : public QObject
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; +       Q_OBJECT
&lt;br&gt;&amp;gt; +       Q_CLASSINFO(&amp;quot;D-Bus Interface&amp;quot;, &amp;quot;org.freedesktop.MediaPlayer&amp;quot;)
&lt;br&gt;&amp;gt; +public:
&lt;br&gt;&amp;gt; +       explicit MprisPlayerObject(MediaWidget *mediaWidget_);
&lt;br&gt;&amp;gt; +       ~MprisPlayerObject();
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +public slots:
&lt;br&gt;&amp;gt; +       void Next();
&lt;br&gt;&amp;gt; +       void Prev();
&lt;br&gt;&amp;gt; +       void Play();
&lt;br&gt;&amp;gt; +       void Pause();
&lt;br&gt;&amp;gt; +       void Stop();
&lt;br&gt;&amp;gt; +       int  VolumeGet();
&lt;br&gt;&amp;gt; +       void VolumeSet(int volume);
&lt;br&gt;&amp;gt; +       int  PositionGet();
&lt;br&gt;&amp;gt; +       void PositionSet(int position);
&lt;br&gt;&amp;gt; +       void Repeat();
&lt;/div&gt;&lt;br&gt;You forgot the bool parameter.
&lt;br&gt;&lt;br&gt;&amp;gt; +       MprisStatusStruct GetStatus();
&lt;br&gt;&amp;gt; +       QVariantMap GetMetadata();
&lt;br&gt;&lt;br&gt;MPRIS metadata and Phonon metadata specifications aren't 100%
&lt;br&gt;compatible (&amp;quot;location&amp;quot; means url in mpris terms, while it means
&lt;br&gt;&amp;quot;location where track was recorded&amp;quot; in Phonon terms) ... I've left out
&lt;br&gt;the metadata part for the moment.
&lt;br&gt;&lt;br&gt;&amp;gt; +       int GetCaps();
&lt;br&gt;&lt;br&gt;All functions reordered into the order given by the spec.
&lt;br&gt;&lt;br&gt;&amp;gt; +       // this functions are not part of the MPRIS specs
&lt;br&gt;&amp;gt; +       void PlayPause();
&lt;br&gt;&lt;br&gt;Not needed, Pause() has the same behaviour than mediaWidget's playPause action.
&lt;br&gt;&lt;br&gt;&amp;gt; +       void VolumeIncrease();
&lt;br&gt;&amp;gt; +       void VolumeDecrease();
&lt;br&gt;&lt;br&gt;Renamed to &amp;quot;IncreaseVolume&amp;quot; and &amp;quot;DecreaseVolume&amp;quot;.
&lt;br&gt;&lt;br&gt;&amp;gt; +       void Play(const QString &amp;url);
&lt;br&gt;&lt;br&gt;Not needed, TrackList has an AddTrack() function.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; +       void PlayAudioCd();
&lt;br&gt;&amp;gt; +       void PlayVideoCd();
&lt;br&gt;&amp;gt; +       void PlayDvd();
&lt;br&gt;&amp;gt; +       void ChangeAudioChannel(int index);
&lt;br&gt;&amp;gt; +       void ChangeSubtitle(int index);
&lt;br&gt;&amp;gt; +       void LongSkipBackward();
&lt;br&gt;&amp;gt; +       void SkipBackward();
&lt;br&gt;&amp;gt; +       void SkipForward();
&lt;br&gt;&amp;gt; +       void LongSkipForward();
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; void TimeButtonClicked();
&lt;/div&gt;&lt;br&gt;Left out for the moment (this has much to do with my workflow, not
&lt;br&gt;with the actual content of the patch ... I'll think about those
&lt;br&gt;functions once I have some spare time again).
&lt;br&gt;&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; void ToggleMuted();
&lt;br&gt;&lt;br&gt;&amp;gt; +       void UpdateTimeButton();
&lt;br&gt;&lt;br&gt;Not needed, internal function.
&lt;br&gt;&lt;br&gt;&amp;gt; +signals:
&lt;br&gt;&amp;gt; +       void CapsChange( int );
&lt;br&gt;&amp;gt; +       void StatusChange( MprisStatusStruct );
&lt;br&gt;&amp;gt; +       void TrackChange( QVariantMap );
&lt;br&gt;&lt;br&gt;Reordered into the order given by the spec.
&lt;br&gt;&lt;br&gt;&amp;gt; +private:
&lt;br&gt;&amp;gt; +       MediaWidget *mediaWidget;
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; +class MprisTrackListObject : public QObject
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; +       Q_OBJECT
&lt;br&gt;&amp;gt; +       Q_CLASSINFO(&amp;quot;D-Bus Interface&amp;quot;, &amp;quot;org.freedesktop.MediaPlayer&amp;quot;)
&lt;br&gt;&amp;gt; +public:
&lt;br&gt;&amp;gt; +       explicit MprisTrackListObject(MediaWidget *mediaWidget_);
&lt;br&gt;&amp;gt; +       ~MprisTrackListObject();
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +public slots:
&lt;br&gt;&amp;gt; +       QVariantMap GetMetadata();
&lt;br&gt;&amp;gt; +       int GetCurrentTrack();
&lt;br&gt;&amp;gt; +       int GetLength();
&lt;br&gt;&amp;gt; +       int AddTrack(QString track, bool play);
&lt;/div&gt;&lt;br&gt;Use &amp;quot;const QString &amp;&amp;quot;, not &amp;quot;QString&amp;quot;.
&lt;br&gt;&lt;br&gt;&amp;gt; +       void DelTrack(int position);
&lt;br&gt;&amp;gt; +       void SetLoop(bool loop);
&lt;br&gt;&amp;gt; +       void SetRandom(bool random);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +signals:
&lt;br&gt;&amp;gt; +       void TrackListChange(int);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +private:
&lt;br&gt;&amp;gt; +       MediaWidget *mediaWidget;
&lt;br&gt;&lt;br&gt;All those functions have a relation to PlaylistTab, not to MediaWidget.
&lt;br&gt;&lt;br&gt;&amp;gt; +class MprisDvbObject : public QObject
&lt;br&gt;&lt;br&gt;Renamed to &amp;quot;DBusTelevisionObject&amp;quot; (nothing to do with mpris).
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; +       Q_OBJECT
&lt;br&gt;&amp;gt; +       Q_CLASSINFO(&amp;quot;D-Bus Interface&amp;quot;, &amp;quot;org.freedesktop.MediaPlayer&amp;quot;)
&lt;br&gt;&amp;gt; +public:
&lt;br&gt;&amp;gt; +       explicit MprisDvbObject(MediaWidget *mediaWidget_);
&lt;br&gt;&amp;gt; +       ~MprisDvbObject();
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +public slots:
&lt;br&gt;&amp;gt; +       void SetDvbChannel(const QString &amp;name);
&lt;br&gt;&amp;gt; +       void SetDvbChannelNumber(int number);
&lt;/div&gt;&lt;br&gt;Merged into a single function - playChannel(const QString &amp;nameOrNumber);
&lt;br&gt;&lt;br&gt;&amp;gt; +       void SetNumber(int number);
&lt;br&gt;&lt;br&gt;Not needed (what's the sense of this function?)
&lt;br&gt;Added a DigitPressed(int) function, for entering channel numbers via
&lt;br&gt;remote control.
&lt;br&gt;&lt;br&gt;&amp;gt; +       void SetDvbLastChannel();
&lt;br&gt;&lt;br&gt;Renamed to PlayLastChannel().
&lt;br&gt;&lt;br&gt;&amp;gt; +       void StopDvb();
&lt;br&gt;&lt;br&gt;Not needed, internal function.
&lt;br&gt;&lt;br&gt;&amp;gt; +       void ToggleInstantRecord();
&lt;br&gt;&amp;gt; +       void ToggleOsd();
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +private:
&lt;br&gt;&amp;gt; +       MediaWidget *mediaWidget;
&lt;br&gt;&lt;br&gt;All those functions have a relation to DvbTab, not to MediaWidget.
&lt;br&gt;&lt;br&gt;&amp;gt; +       void AspectRatioAuto();
&lt;br&gt;&amp;gt; +       void AspectRatio4_3();
&lt;br&gt;&amp;gt; +       void AspectRatio16_9();
&lt;br&gt;&amp;gt; +       void AspectRatioWidget();
&lt;br&gt;&lt;br&gt;Left out for the moment (this has much to do with my workflow, not
&lt;br&gt;with the actual content of the patch ... I'll think about those
&lt;br&gt;functions once I have some spare time again).
&lt;br&gt;&lt;br&gt;&amp;gt; +       void ToggleFullScreen();
&lt;br&gt;&lt;br&gt;Moved to the player object.
&lt;br&gt;&lt;br&gt;&amp;gt; +struct MprisStatusStruct
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; +       quint16 play;
&lt;br&gt;&amp;gt; +       quint16 random;
&lt;br&gt;&amp;gt; +       quint16 repeatTrack;
&lt;br&gt;&amp;gt; +       quint16 repeatAll;
&lt;br&gt;&amp;gt; +};
&lt;br&gt;&lt;br&gt;The spec says 32 bit integers (= int).
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; +Q_DECLARE_METATYPE(MprisStatusStruct)
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/**
&lt;br&gt;&amp;gt; +* The bit values for the capabilities flags
&lt;br&gt;&amp;gt; +*/
&lt;br&gt;&amp;gt; +enum Cap {
&lt;br&gt;&amp;gt; +       NO_CAPS                    = 0,
&lt;br&gt;&amp;gt; +       CAN_GO_NEXT                = 1 &amp;lt;&amp;lt; 0,
&lt;br&gt;&amp;gt; +       CAN_GO_PREV                = 1 &amp;lt;&amp;lt; 1,
&lt;br&gt;&amp;gt; +       CAN_PAUSE                        = 1 &amp;lt;&amp;lt; 2,
&lt;br&gt;&amp;gt; +       CAN_PLAY                          = 1 &amp;lt;&amp;lt; 3,
&lt;br&gt;&amp;gt; +       CAN_SEEK                          = 1 &amp;lt;&amp;lt; 4,
&lt;br&gt;&amp;gt; +       CAN_PROVIDE_METADATA  = 1 &amp;lt;&amp;lt; 5,
&lt;br&gt;&amp;gt; +       CAN_HAS_TRACKLIST        = 1 &amp;lt;&amp;lt; 6,
&lt;br&gt;&amp;gt; +       ALL_KNOWN_CAPS          = (1 &amp;lt;&amp;lt; 7) - 1
&lt;br&gt;&amp;gt; +};
&lt;br&gt;&amp;gt; +Q_DECLARE_FLAGS(Caps, Cap)
&lt;/div&gt;&lt;br&gt;Directly merged into GetCaps (because it is the only function that
&lt;br&gt;will use caps).
&lt;br&gt;&lt;br&gt;&amp;gt; +signals:
&lt;br&gt;&amp;gt; +       void updateDvbChannelUi(int number);
&lt;br&gt;&lt;br&gt;Solved that problem in a different way (ChannelModel returns the row,
&lt;br&gt;not the channel itself --&amp;gt; the proxy model can map that information to
&lt;br&gt;the correct view model index).
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; +void DvbTab::toggleInstantRecord()
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; +       if (instantRecordAction-&amp;gt;isChecked()) {
&lt;br&gt;&amp;gt; +               instantRecordAction-&amp;gt;setChecked(false);
&lt;br&gt;&amp;gt; +               instantRecord(false);
&lt;br&gt;&amp;gt; +       }
&lt;br&gt;&amp;gt; +       else {
&lt;br&gt;&amp;gt; +               instantRecordAction-&amp;gt;setChecked(true);
&lt;br&gt;&amp;gt; +               instantRecord(true);
&lt;br&gt;&amp;gt; +       }
&lt;/div&gt;&lt;br&gt;Simply use instantRecordAction-&amp;gt;trigger();
&lt;br&gt;&lt;br&gt;&amp;gt; +}
&lt;br&gt;&lt;br&gt;&amp;gt; +bool MediaWidget::isPaused()
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; +       if (playing &amp;&amp; mediaObject-&amp;gt;state() == Phonon::PausedState)
&lt;br&gt;&amp;gt; +       {
&lt;br&gt;&amp;gt; +               return true;
&lt;br&gt;&amp;gt; +       }
&lt;br&gt;&amp;gt; +       return false;
&lt;br&gt;&lt;br&gt;Query the playPauseAction.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +int MediaWidget::getVolume()
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; +       int volume = audioOutput-&amp;gt;volume() * 100;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +       if ( volume &amp;gt;= 0 &amp;&amp; volume &amp;lt;= 100 ) {
&lt;br&gt;&amp;gt; +               return volume;
&lt;br&gt;&amp;gt; +       }
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +       return 0;
&lt;/div&gt;&lt;br&gt;Query the volumeSlider.
&lt;br&gt;&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt;  void MediaWidget::changeVolume(int volume)
&lt;br&gt;&amp;gt;  {
&lt;br&gt;&amp;gt;        audioOutput-&amp;gt;setVolume(volume * qreal(0.01));
&lt;br&gt;&amp;gt; @@ -915,6 +1014,16 @@
&lt;br&gt;&amp;gt;        mediaObject-&amp;gt;seek(mediaObject-&amp;gt;currentTime() + 1000 *
&lt;br&gt;&amp;gt; longSkipDuration);
&lt;br&gt;&amp;gt;  }
&lt;br&gt;&lt;br&gt;&amp;gt;  class MediaWidget : public QWidget
&lt;br&gt;&amp;gt;  {
&lt;br&gt;&amp;gt;        Q_OBJECT
&lt;br&gt;&amp;gt; +       friend class MprisPlayerObject;
&lt;br&gt;&amp;gt; +       friend class MprisTrackListObject;
&lt;br&gt;&amp;gt; +       friend class MprisDvbObject;
&lt;br&gt;&amp;gt; +       friend class MprisDisplayObject;
&lt;br&gt;&lt;br&gt;Do not use friend classes for this purpose because of two reasons:
&lt;br&gt;- there are internal functions that _really_ shouldn't be called from
&lt;br&gt;outside (e.g. volumeChanged or mutedChanged, because they don't update
&lt;br&gt;ui state)
&lt;br&gt;- private functions usually trust their arguments etc, but in this
&lt;br&gt;context more value checking is needed for calls from outside
&lt;br&gt;&lt;br&gt;So I've made the required functions public and rechecked that they
&lt;br&gt;work correctly in all situations.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; +       bool hasMedia();
&lt;br&gt;&amp;gt; +       void setNumber(int number);
&lt;br&gt;&amp;gt; +       void changeDvbChannel(int number);
&lt;br&gt;&amp;gt; +       void changeDvbChannel(const QString &amp;name);
&lt;br&gt;&amp;gt; +       void toggleOsd();
&lt;br&gt;&amp;gt; +       void dvbLastChannel();
&lt;br&gt;&amp;gt; +       void toggleInstantRecord();
&lt;br&gt;&amp;gt; +       int getCurrentTrack();
&lt;br&gt;&amp;gt; +       void playPause();
&lt;br&gt;&amp;gt; +       void pause();
&lt;br&gt;&amp;gt; +       void setDvbChannel(int number);
&lt;br&gt;&amp;gt; +       void setDvbChannel(const QString &amp;name);
&lt;br&gt;&amp;gt; +       void setDvbLastChannel();
&lt;br&gt;&amp;gt; +       void fullScreen();
&lt;br&gt;&amp;gt; +       void delTrack(int position);
&lt;br&gt;&amp;gt; +       void setLoop(bool loop);
&lt;br&gt;&amp;gt; +       void setRandom(bool random);
&lt;/div&gt;&lt;br&gt;Removed all those functions because they are a) redundant (playPause,
&lt;br&gt;pause --&amp;gt; simplified to togglePause()) or b) don't belong here (the
&lt;br&gt;dbus objects call directly the needed functions from PlaylistTab or
&lt;br&gt;DvbTab).
&lt;br&gt;&lt;br&gt;I suggest the following steps to proceed:
&lt;br&gt;a) study the comments above a bit; the patches I've commited are [1];
&lt;br&gt;feel free to ask questions
&lt;br&gt;b) make your svn repo clean and update it
&lt;br&gt;c) continue hacking (if you need a task, you can try to create a
&lt;br&gt;kdelirc profile for kaffeine, that's an xml file which provides
&lt;br&gt;default associations between remote control buttons and kaffeine dbus
&lt;br&gt;interface [2])
&lt;br&gt;&lt;br&gt;Thanks a lot,
&lt;br&gt;&lt;br&gt;Christoph
&lt;br&gt;&lt;br&gt;&lt;br&gt;[1]
&lt;br&gt;&lt;a href=&quot;http://websvn.kde.org/?view=revision&amp;revision=1055907&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://websvn.kde.org/?view=revision&amp;revision=1055907&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://websvn.kde.org/?view=revision&amp;revision=1056261&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://websvn.kde.org/?view=revision&amp;revision=1056261&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://websvn.kde.org/?view=revision&amp;revision=1056694&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://websvn.kde.org/?view=revision&amp;revision=1056694&lt;/a&gt;&lt;br&gt;[2]
&lt;br&gt;the resulting file would be installed to
&lt;br&gt;/usr/share/kde4/apps/profiles/kaffeine.profile.xml
&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=26578311&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-tp26128565p26578311.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26561418</id>
	<title>EPG view improvements</title>
	<published>2009-11-29T04:04:40Z</published>
	<updated>2009-11-29T04:04:40Z</updated>
	<author>
		<name>Bugzilla from dmitry.poplavsky@gmail.com</name>
	</author>
	<content type="html">Hello,
&lt;br&gt;&lt;br&gt;I changed programs list view to follow selection
&lt;br&gt;in the channels list, and program description to follow
&lt;br&gt;selection change in the programs list.
&lt;br&gt;It makes much easier to navigate EPG.
&lt;br&gt;&lt;br&gt;I also connected the EPG view to recordings manager,
&lt;br&gt;so scheduled for recording programs are marked in 
&lt;br&gt;the EPG programs list (nothing fancy yet, just the 'R'
&lt;br&gt;symbol in the extra column, it would be nice to replace it with
&lt;br&gt;corresponding icon, or draw the row with red color).
&lt;br&gt;It also changed &amp;quot;Schedule&amp;quot; &amp;nbsp;button to toggle program scheduling.
&lt;br&gt;&lt;br&gt;The implementation is not the most effective (the recording manager is queried 
&lt;br&gt;for each program in the list), but it seems to be sufficient in this case.
&lt;br&gt;&lt;br&gt;I attached the patch for the current kaffeine (svn revision 1056100).
&lt;br&gt;&lt;br&gt;Regards
&lt;br&gt;&amp;nbsp; Dmytro.
&lt;br&gt;&lt;br /&gt;&lt;tt&gt;[kaffeine_epg_recordings.diff]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;Index: src/dvb/dvbepg.h
&lt;br&gt;===================================================================
&lt;br&gt;--- src/dvb/dvbepg.h	(revision 1055919)
&lt;br&gt;+++ src/dvb/dvbepg.h	(working copy)
&lt;br&gt;@@ -53,10 +53,12 @@
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+class DvbRecordingManager;
&lt;br&gt;&amp;nbsp;class DvbEpgModel : public QAbstractTableModel
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Q_OBJECT
&lt;br&gt;&amp;nbsp;public:
&lt;br&gt;-	explicit DvbEpgModel(QObject *parent);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;explicit DvbEpgModel(DvbRecordingManager *recordingManager, QObject *parent);
&lt;br&gt;&amp;nbsp;	~DvbEpgModel();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	int columnCount(const QModelIndex &amp;parent) const;
&lt;br&gt;@@ -71,9 +73,14 @@
&lt;br&gt;&amp;nbsp;	const DvbEpgEntry *getEntry(int row) const;
&lt;br&gt;&amp;nbsp;	QList&amp;lt;DvbEpgEntry&amp;gt; getCurrentNext(const QString &amp;channel) const;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+private slots:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;void updateRecordings();
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;private:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;DvbRecordingManager *recordingManager;
&lt;br&gt;&amp;nbsp;	QList&amp;lt;DvbEpgEntry&amp;gt; allEntries;
&lt;br&gt;-	QList&amp;lt;const DvbEpgEntry *&amp;gt; filteredEntries;
&lt;br&gt;+	QList&amp;lt;const DvbEpgEntry *&amp;gt; filteredEntries; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;mutable QHash&amp;lt;const DvbEpgEntry *, bool&amp;gt; recordingsStatusCache;
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;class DvbEitFilter : public DvbSectionFilter
&lt;br&gt;Index: src/dvb/dvbrecording.h
&lt;br&gt;===================================================================
&lt;br&gt;--- src/dvb/dvbrecording.h	(revision 1055919)
&lt;br&gt;+++ src/dvb/dvbrecording.h	(working copy)
&lt;br&gt;@@ -36,8 +36,15 @@
&lt;br&gt;&amp;nbsp;	explicit DvbRecordingManager(DvbManager *manager_);
&lt;br&gt;&amp;nbsp;	~DvbRecordingManager();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;bool isScheduled(const QString &amp;channel, const QDateTime &amp;begin,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const QTime &amp;duration) const;// begin must be local time!
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	void scheduleProgram(const QString &amp;name, const QString &amp;channel, const QDateTime &amp;begin,
&lt;br&gt;&amp;nbsp;		const QTime &amp;duration); // begin must be local time!
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;bool unscheduleProgram(const QString &amp;channel, const QDateTime &amp;begin,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const QTime &amp;duration); // begin must be local time!
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	void startInstantRecording(const QString &amp;name, const QString &amp;channel);
&lt;br&gt;&amp;nbsp;	void stopInstantRecording(); // stops the last started instant recording
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -45,6 +52,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;signals:
&lt;br&gt;&amp;nbsp;	void instantRecordingRemoved(); // not emitted by stopInstantRecording()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;void changed();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;private slots:
&lt;br&gt;&amp;nbsp;	void checkStatus();
&lt;br&gt;@@ -54,6 +62,8 @@
&lt;br&gt;&amp;nbsp;	void removeRecording();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;private:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;QModelIndex recordingIndex(const QString &amp;channel, const QDateTime &amp;begin,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const QTime &amp;duration) const;
&lt;br&gt;&amp;nbsp;	DvbManager *manager;
&lt;br&gt;&amp;nbsp;	DvbRecordingModel *model;
&lt;br&gt;&amp;nbsp;	QTimer checkStatusTimer;
&lt;br&gt;Index: src/dvb/dvbmanager.cpp
&lt;br&gt;===================================================================
&lt;br&gt;--- src/dvb/dvbmanager.cpp	(revision 1055919)
&lt;br&gt;+++ src/dvb/dvbmanager.cpp	(working copy)
&lt;br&gt;@@ -227,9 +227,9 @@
&lt;br&gt;&amp;nbsp;	parent(parent_), mediaWidget(mediaWidget_), dvbDumpEnabled(false)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	channelModel = new DvbSqlChannelModel(this);
&lt;br&gt;-	epgModel = new DvbEpgModel(this);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;recordingManager = new DvbRecordingManager(this);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;epgModel = new DvbEpgModel(recordingManager, this);
&lt;br&gt;&amp;nbsp;	liveView = new DvbLiveView(this);
&lt;br&gt;-	recordingManager = new DvbRecordingManager(this);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	readDeviceConfigs();
&lt;br&gt;&amp;nbsp;	updateSourceMapping();
&lt;br&gt;Index: src/dvb/dvbepg.cpp
&lt;br&gt;===================================================================
&lt;br&gt;--- src/dvb/dvbepg.cpp	(revision 1055919)
&lt;br&gt;+++ src/dvb/dvbepg.cpp	(working copy)
&lt;br&gt;@@ -79,7 +79,8 @@
&lt;br&gt;&amp;nbsp;	return x &amp;lt; y.channel;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-DvbEpgModel::DvbEpgModel(QObject *parent) : QAbstractTableModel(parent)
&lt;br&gt;+DvbEpgModel::DvbEpgModel(DvbRecordingManager *recordingManager, QObject *parent)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;: QAbstractTableModel(parent), recordingManager(recordingManager)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	QFile file(KStandardDirs::locateLocal(&amp;quot;appdata&amp;quot;, &amp;quot;epgdata.dvb&amp;quot;));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -124,6 +125,8 @@
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	qSort(allEntries);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;connect(recordingManager, SIGNAL(changed()), SLOT(updateRecordings()));
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;DvbEpgModel::~DvbEpgModel()
&lt;br&gt;@@ -163,7 +166,7 @@
&lt;br&gt;&amp;nbsp;		return 0;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	return 3;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return 4;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;int DvbEpgModel::rowCount(const QModelIndex &amp;parent) const
&lt;br&gt;@@ -186,11 +189,21 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	switch (index.column()) {
&lt;br&gt;&amp;nbsp;	case 0:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (recordingsStatusCache.contains(entry)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return recordingsStatusCache.value(entry) ? QString(&amp;quot;R&amp;quot;) : QString();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bool hasRecording = recordingManager-&amp;gt;isScheduled(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;entry-&amp;gt;channel, entry-&amp;gt;begin.toLocalTime(), entry-&amp;gt;duration);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;recordingsStatusCache.insert(entry, hasRecording);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return hasRecording ? QString(&amp;quot;R&amp;quot;) : QString();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case 1:
&lt;br&gt;&amp;nbsp;		return KGlobal::locale()-&amp;gt;formatDateTime(entry-&amp;gt;begin.toLocalTime());
&lt;br&gt;-	case 1:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case 2:
&lt;br&gt;&amp;nbsp;		return KGlobal::locale()-&amp;gt;formatTime(entry-&amp;gt;duration, false, true);
&lt;br&gt;-	case 2:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case 3:
&lt;br&gt;&amp;nbsp;		return entry-&amp;gt;title;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	return QVariant();
&lt;br&gt;@@ -204,10 +217,12 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	switch (section) {
&lt;br&gt;&amp;nbsp;	case 0:
&lt;br&gt;-		return i18n(&amp;quot;Begin&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return i18n(&amp;quot;R&amp;quot;);
&lt;br&gt;&amp;nbsp;	case 1:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return i18n(&amp;quot;Begin&amp;quot;); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case 2:
&lt;br&gt;&amp;nbsp;		return i18n(&amp;quot;Duration&amp;quot;);
&lt;br&gt;-	case 2:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case 3:
&lt;br&gt;&amp;nbsp;		return i18n(&amp;quot;Title&amp;quot;);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -237,9 +252,16 @@
&lt;br&gt;&amp;nbsp;void DvbEpgModel::resetChannel()
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	filteredEntries.clear();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;recordingsStatusCache.clear();
&lt;br&gt;&amp;nbsp;	reset();
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+void DvbEpgModel::updateRecordings()
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;recordingsStatusCache.clear();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;emit dataChanged(index(0,0,QModelIndex()), index(allEntries.size(),1,QModelIndex()));
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;void DvbEpgModel::setChannel(const QString &amp;channel)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	QList&amp;lt;DvbEpgEntry&amp;gt;::const_iterator it = qLowerBound(allEntries.constBegin(),
&lt;br&gt;@@ -415,11 +437,13 @@
&lt;br&gt;&amp;nbsp;	channelView = new QListView(widget);
&lt;br&gt;&amp;nbsp;	channelView-&amp;gt;setModel(channelModel);
&lt;br&gt;&amp;nbsp;	channelView-&amp;gt;setMaximumWidth(200);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;channelView-&amp;gt;setEditTriggers(QAbstractItemView::NoEditTriggers);
&lt;br&gt;&amp;nbsp;	connect(channelView, SIGNAL(activated(QModelIndex)),
&lt;br&gt;&amp;nbsp;		this, SLOT(channelActivated(QModelIndex)));
&lt;br&gt;&amp;nbsp;	boxLayout-&amp;gt;addWidget(channelView);
&lt;br&gt;&amp;nbsp;	mainLayout-&amp;gt;addLayout(boxLayout);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	boxLayout = new QVBoxLayout();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	KAction *scheduleAction = new KAction(KIcon(&amp;quot;media-record&amp;quot;),
&lt;br&gt;@@ -438,10 +462,18 @@
&lt;br&gt;&amp;nbsp;	epgView-&amp;gt;setContextMenuPolicy(Qt::ActionsContextMenu);
&lt;br&gt;&amp;nbsp;	epgView-&amp;gt;setMinimumWidth(450);
&lt;br&gt;&amp;nbsp;	epgView-&amp;gt;setModel(epgModel);
&lt;br&gt;-	epgView-&amp;gt;setRootIsDecorated(false);
&lt;br&gt;-	connect(epgView, SIGNAL(activated(QModelIndex)), this, SLOT(entryActivated(QModelIndex)));
&lt;br&gt;+	epgView-&amp;gt;setRootIsDecorated(false); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp;	boxLayout-&amp;gt;addWidget(epgView);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;QItemSelectionModel *programSelection = new QItemSelectionModel(epgModel, this);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;epgView-&amp;gt;setSelectionModel(programSelection);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;connect(programSelection, SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, SLOT(entryActivated(QModelIndex)));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;QItemSelectionModel *channelSelection = new QItemSelectionModel(channelModel, this);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;channelView-&amp;gt;setSelectionModel(channelSelection);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;connect(channelSelection, SIGNAL(currentChanged(QModelIndex,QModelIndex)),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this, SLOT(channelActivated(QModelIndex)));
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	contentLabel = new QLabel(widget);
&lt;br&gt;&amp;nbsp;	contentLabel-&amp;gt;setAlignment(Qt::AlignLeft | Qt::AlignTop);
&lt;br&gt;&amp;nbsp;	contentLabel-&amp;gt;setMargin(5);
&lt;br&gt;@@ -468,6 +500,7 @@
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	setMainWidget(widget);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;resize(800,600);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;DvbEpgDialog::~DvbEpgDialog()
&lt;br&gt;@@ -553,8 +586,21 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	const DvbEpgEntry *entry = epgModel-&amp;gt;getEntry(index.row());
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	manager-&amp;gt;getRecordingManager()-&amp;gt;scheduleProgram(entry-&amp;gt;title, entry-&amp;gt;channel,
&lt;br&gt;-		entry-&amp;gt;begin.toLocalTime().addSecs(-300), entry-&amp;gt;duration.addSecs(900));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;qDebug () &amp;lt;&amp;lt; &amp;quot;Schedule&amp;quot; &amp;lt;&amp;lt; entry-&amp;gt;title &amp;lt;&amp;lt; entry-&amp;gt;channel &amp;lt;&amp;lt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;entry-&amp;gt;begin &amp;lt;&amp;lt; entry-&amp;gt;duration;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	KMessageBox::information(this, i18nc(&amp;quot;program guide&amp;quot;, &amp;quot;Program successfully scheduled.&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;DvbRecordingManager *recordingManager = manager-&amp;gt;getRecordingManager();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;bool hasRecording = recordingManager-&amp;gt;isScheduled(entry-&amp;gt;channel,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;entry-&amp;gt;begin.toLocalTime(), entry-&amp;gt;duration);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (hasRecording) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;recordingManager-&amp;gt;unscheduleProgram(entry-&amp;gt;channel,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;entry-&amp;gt;begin.toLocalTime(), entry-&amp;gt;duration);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;recordingManager-&amp;gt;scheduleProgram(entry-&amp;gt;title, entry-&amp;gt;channel,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;entry-&amp;gt;begin.toLocalTime().addSecs(-120), entry-&amp;gt;duration.addSecs(180));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;//no need for message box, since the recording status is displayed in trable view.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;//KMessageBox::information(this, i18nc(&amp;quot;program guide&amp;quot;, &amp;quot;Program successfully scheduled.&amp;quot;));
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;Index: src/dvb/dvbrecording.cpp
&lt;br&gt;===================================================================
&lt;br&gt;--- src/dvb/dvbrecording.cpp	(revision 1055919)
&lt;br&gt;+++ src/dvb/dvbrecording.cpp	(working copy)
&lt;br&gt;@@ -271,6 +271,10 @@
&lt;br&gt;&amp;nbsp;	connect(model, SIGNAL(rowsRemoved(QModelIndex,int,int)),
&lt;br&gt;&amp;nbsp;		this, SLOT(checkInstantRecording()));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;connect(model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SIGNAL(changed()));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;connect(model, SIGNAL(rowsInserted(QModelIndex,int,int)), this, SIGNAL(changed()));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;connect(model, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SIGNAL(changed()));
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	// we regularly recheck the status of the recordings
&lt;br&gt;&amp;nbsp;	// this way we can keep retrying if the device was busy / tuning failed
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -337,6 +341,48 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+QModelIndex DvbRecordingManager::recordingIndex(const QString &amp;channel, const QDateTime &amp;begin,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const QTime &amp;duration) const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;for (int i=0; i&amp;lt;model-&amp;gt;rowCount(QModelIndex()); i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const DvbRecording *recording = model-&amp;gt;at(i);// recordings.at(i);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (recording-&amp;gt;repeat == 0 &amp;&amp; recording-&amp;gt;begin.date() != begin.date())
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;continue;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (begin &amp;lt; recording-&amp;gt;begin)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;continue;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (recording-&amp;gt;channelName != channel)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;continue;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (recording-&amp;gt;repeat) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int dayOfWeek = begin.date().dayOfWeek();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if ( !(recording-&amp;gt;repeat &amp; (1&amp;lt;&amp;lt;(dayOfWeek-1))) )
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;continue;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//day is correct, check if the time interval is covered
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;QTime recordingTime = recording-&amp;gt;begin.time();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;QTime recordingEndTime = recordingTime.addSecs( QTime().secsTo(recording-&amp;gt;duration) );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;QTime requestedTime = begin.time();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;QTime requestedEndTime = requestedTime.addSecs( QTime().secsTo(duration)-1 );
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (recordingTime &amp;lt;= requestedTime &amp;&amp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;recordingEndTime &amp;gt;= requestedEndTime) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return model-&amp;gt;index(i,0);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return QModelIndex();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+bool DvbRecordingManager::isScheduled(const QString &amp;channel, const QDateTime &amp;begin,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const QTime &amp;duration) const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return recordingIndex(channel,begin,duration).isValid();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;void DvbRecordingManager::scheduleProgram(const QString &amp;name, const QString &amp;channel,
&lt;br&gt;&amp;nbsp;	const QDateTime &amp;begin, const QTime &amp;duration)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;@@ -352,6 +398,18 @@
&lt;br&gt;&amp;nbsp;	model-&amp;gt;append(recording);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+bool DvbRecordingManager::unscheduleProgram(const QString &amp;channel, const QDateTime &amp;begin,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const QTime &amp;duration) // begin must be local time!
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;QModelIndex index = recordingIndex(channel, begin, duration);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (index.isValid()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;model-&amp;gt;remove(index.row());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return true;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;void DvbRecordingManager::startInstantRecording(const QString &amp;name, const QString &amp;channel)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	DvbRecording *recording = new DvbRecording(manager);
&lt;br&gt;@@ -483,7 +541,7 @@
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	checkingStatus = false;
&lt;br&gt;+	checkingStatus = false; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;void DvbRecordingManager::checkInstantRecording()
&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&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=26561418&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/EPG-view-improvements-tp26561418p26561418.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26557211</id>
	<title>Re: Kaffeine 1.0-pre2</title>
	<published>2009-11-28T13:47:06Z</published>
	<updated>2009-11-28T13:47:06Z</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 content=&quot;text/html; charset=UTF-8&quot; http-equiv=&quot;Content-Type&quot;&gt;
&lt;/head&gt;
&lt;body text=&quot;#000000&quot; bgcolor=&quot;#ffffff&quot;&gt;
On 11/28/2009 07:33 AM, James W. Bennett wrote:
&lt;blockquote cite=&quot;mid:4B1126BA.1080109@comcast.net&quot; type=&quot;cite&quot;&gt;
  &lt;meta content=&quot;text/html; charset=UTF-8&quot; http-equiv=&quot;Content-Type&quot;&gt;
  &lt;title&gt;&lt;/title&gt;
On 11/28/2009 06:36 AM, Christoph Pfister wrote:
  &lt;blockquote cite=&quot;mid:19a3b7a80911280436v4fd47c60xa21487698f46e0fc@mail.gmail.com&quot; type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;2009/11/22 James W. Bennett &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26557211&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jw-bennett@...&lt;/a&gt;:
  &lt;/pre&gt;
    &lt;blockquote type=&quot;cite&quot;&gt;
      &lt;pre wrap=&quot;&quot;&gt;Kaffeine displays the following message when in uses. Cannot find input
plugin for MRL [cadda:/].
Can anyone tell me what that message means.
    &lt;/pre&gt;
    &lt;/blockquote&gt;
    &lt;pre wrap=&quot;&quot;&gt;possible reasons:
1) you're trying to play an audio cd but there's no cd in the drive
(do you have more than one drive?)
2) you don't have permission to read audio cd
3) something is wrong with xine / phonon configuration (are you sure
it's [cadda:/] and not [cdda:/]?)

  &lt;/pre&gt;
    &lt;blockquote type=&quot;cite&quot;&gt;
      &lt;pre wrap=&quot;&quot;&gt;Thank you;
Jim Bennett
    &lt;/pre&gt;
    &lt;/blockquote&gt;
    &lt;pre wrap=&quot;&quot;&gt;Christoph

  &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;br&gt;
Hi; &lt;br&gt;
I am using Fedora 12 linux. I have have two sata cdroms. Also when I
first installed Fedora 12 Kaffeine worked fine. But when I turned off
my computer&lt;br&gt;
and disconnected all cables to dress them. Reinstalled cables  and
started computer  Kaffeine never worked again. I would continue to get
error message
  &lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot;&gt;
  &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;&gt;
  - &lt;b&gt;Cannot
find
input plugin for MRL [cdda:/]. &lt;/b&gt;When everything worked I was
only able to use high order DVD. Second drive would always cause the
same error. But I was happy to have it work on one DVD drive.&lt;b&gt;&lt;br&gt;
  &lt;/b&gt;&lt;br&gt;
Thanks for your replay.&lt;br&gt;
Jim Bennett&lt;br&gt;
  &lt;br&gt;
  &lt;b&gt;&lt;br&gt;
  &lt;/b&gt;&lt;!--EndFragment--&gt;&lt;br&gt;
  &lt;pre wrap=&quot;&quot;&gt;
&lt;fieldset class=&quot;mimeAttachmentHeader&quot;&gt;&lt;/fieldset&gt;
------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with
Crystal Reports now.  &lt;a class=&quot;moz-txt-link-freetext&quot; 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;/pre&gt;
  &lt;pre wrap=&quot;&quot;&gt;
&lt;fieldset class=&quot;mimeAttachmentHeader&quot;&gt;&lt;/fieldset&gt;
_______________________________________________
kaffeine-user mailing list
&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26557211&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-user@...&lt;/a&gt;
&lt;a class=&quot;moz-txt-link-freetext&quot; 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;/pre&gt;
&lt;/blockquote&gt;
Kaffeine works now. I swapped DVD's drives. I had a Lite-on in high
order and samsung in low sata order. Once I made the switch Kaffeine
worked good.&lt;br&gt;
The Lite-on is a brand new drive. Samsung is several months old.&lt;br&gt;
&lt;br&gt;
Thank you Christoph you got me on the right path.&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=26557211&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-1.0-pre2-tp26463587p26557211.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26553315</id>
	<title>Re: Request: kaffeine --dvb start parameter</title>
	<published>2009-11-28T05:46:21Z</published>
	<updated>2009-11-28T05:46:21Z</updated>
	<author>
		<name>Bugzilla from christophpfister@gmail.com</name>
	</author>
	<content type="html">2009/11/17 Boris Cuber &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26553315&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine@...&lt;/a&gt;&amp;gt;:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hi kaffeine people,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; One feature i miss from the old versions is the possibilty
&lt;br&gt;&amp;gt; to start kaffeine from the cmdline in dvb mode with
&lt;br&gt;&amp;gt; the last tuned channel.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; This would also keep some compatability to ~kaffeine-0.8.x.
&lt;br&gt;&amp;gt; I dunno if this is really a &amp;quot;wanted&amp;quot; feature, but it improves my
&lt;br&gt;&amp;gt; tv/dvb watching experience. I'm sure this could also be done
&lt;br&gt;&amp;gt; by altering the --tv parameter, but i'm no qt/c++ programmer
&lt;br&gt;&amp;gt; and my tries ended up in segfaults when starting kaffeine.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Whatever, it'd be cool to have this feature back ;)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; A simple patch (applies to trunk), adds a --dvb parameter:
&lt;/div&gt;&lt;br&gt;Applied (I've called the option &amp;quot;--lastchannel&amp;quot;).
&lt;br&gt;&lt;br&gt;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-devel mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26553315&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/Request%3A-kaffeine---dvb-start-parameter-tp26390411p26553315.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26553324</id>
	<title>Re: Kaffeine 1.0-pre2</title>
	<published>2009-11-28T05:33:46Z</published>
	<updated>2009-11-28T05:33:46Z</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 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 text=&quot;#000000&quot; bgcolor=&quot;#ffffff&quot;&gt;
On 11/28/2009 06:36 AM, Christoph Pfister wrote:
&lt;blockquote cite=&quot;mid:19a3b7a80911280436v4fd47c60xa21487698f46e0fc@mail.gmail.com&quot; type=&quot;cite&quot;&gt;
  &lt;pre wrap=&quot;&quot;&gt;2009/11/22 James W. Bennett &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26553324&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jw-bennett@...&lt;/a&gt;:
  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;Kaffeine displays the following message when in uses. Cannot find input
plugin for MRL [cadda:/].
Can anyone tell me what that message means.
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;
possible reasons:
1) you're trying to play an audio cd but there's no cd in the drive
(do you have more than one drive?)
2) you don't have permission to read audio cd
3) something is wrong with xine / phonon configuration (are you sure
it's [cadda:/] and not [cdda:/]?)

  &lt;/pre&gt;
  &lt;blockquote type=&quot;cite&quot;&gt;
    &lt;pre wrap=&quot;&quot;&gt;Thank you;
Jim Bennett
    &lt;/pre&gt;
  &lt;/blockquote&gt;
  &lt;pre wrap=&quot;&quot;&gt;
Christoph

  &lt;/pre&gt;
&lt;/blockquote&gt;
&lt;br&gt;
Hi; &lt;br&gt;
I am using Fedora 12 linux. I have have two sata cdroms. Also when I
first installed Fedora 12 Kaffeine worked fine. But when I turned off
my computer&lt;br&gt;
and disconnected all cables to dress them. Reinstalled cables  and
started computer  Kaffeine never worked again. I would continue to get
error message
&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot;&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;&gt;
- &lt;b&gt;Cannot
find input plugin for MRL [cdda:/]. &lt;/b&gt;When everything worked I was
only able to use high order DVD. Second drive would always cause the
same error. But I was happy to have it work on one DVD drive.&lt;b&gt;&lt;br&gt;
&lt;/b&gt;&lt;br&gt;
Thanks for your replay.&lt;br&gt;
Jim Bennett&lt;br&gt;
&lt;br&gt;
&lt;b&gt;&lt;br&gt;
&lt;/b&gt;&lt;!--EndFragment--&gt;&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=26553324&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-1.0-pre2-tp26463587p26553324.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26552853</id>
	<title>Re: [Fwd: dvb-c at-KarrerNet]</title>
	<published>2009-11-28T04:48:24Z</published>
	<updated>2009-11-28T04:48:24Z</updated>
	<author>
		<name>Bugzilla from christophpfister@gmail.com</name>
	</author>
	<content type="html">2009/11/21 Thomas E. Horner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26552853&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;office@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt; hi!
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; pfa the updated list of channels.
&lt;br&gt;&lt;br&gt;Updated, thanks!
&lt;br&gt;&lt;br&gt;Christoph
&lt;br&gt;&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; br,
&lt;br&gt;&amp;gt;  thomas
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; -------- Original-Nachricht --------
&lt;br&gt;&amp;gt; Betreff:        dvb-c at-KarrerNet
&lt;br&gt;&amp;gt; Datum:  Sat, 10 Jan 2009 12:04:45 +0100
&lt;br&gt;&amp;gt; Von:    Thomas E. Horner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26552853&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;office@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; An:     &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26552853&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kaffeine-user@...&lt;/a&gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; hi folks!
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; i live in st. florian bei linz / austria, postal code A-4490.
&lt;br&gt;&amp;gt; i just created the attached kaffeine dvb-c scan list out of a w_scan list.
&lt;br&gt;&amp;gt; i verified it by scanning for channels and everything (including epg) now
&lt;br&gt;&amp;gt; works fine.
&lt;br&gt;&amp;gt; also, all channels in the karrernet cable network were found correctly using
&lt;br&gt;&amp;gt; the list.
&lt;br&gt;&amp;gt; i ask you to include the file in future releases so other users may scan
&lt;br&gt;&amp;gt; more conveniently.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; br,
&lt;br&gt;&amp;gt;  thomas
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; # Kabel St. Florian bei Linz/AT KarrerNet
&lt;br&gt;&amp;gt; # 2009-01-10
&lt;br&gt;&amp;gt; # freq sr fec mod
&lt;br&gt;&amp;gt; C 442000000 6900000 NONE QAM64
&lt;br&gt;&amp;gt; C 458000000 6900000 NONE QAM64
&lt;br&gt;&amp;gt; C 466000000 6900000 NONE QAM64
&lt;br&gt;&amp;gt; C 474000000 6900000 NONE QAM64
&lt;br&gt;&amp;gt; C 482000000 6900000 NONE QAM64
&lt;br&gt;&amp;gt; C 490000000 6900000 NONE QAM64
&lt;br&gt;&amp;gt; C 498000000 6900000 NONE QAM64
&lt;br&gt;&amp;gt; C 506000000 6900000 NONE QAM64
&lt;br&gt;&amp;gt; C 514000000 6900000 NONE QAM64
&lt;br&gt;&amp;gt; C 522000000 6900000 NONE QAM64
&lt;br&gt;&amp;gt; C 530000000 6900000 NONE QAM64
&lt;br&gt;&amp;gt; C 538000000 6900000 NONE QAM64
&lt;br&gt;&amp;gt; C 546000000 6900000 NONE QAM64
&lt;br&gt;&amp;gt; C 554000000 6900000 NONE QAM64
&lt;br&gt;&amp;gt; C 562000000 6900000 NONE QAM64
&lt;br&gt;&amp;gt; C 570000000 6900000 NONE QAM64
&lt;br&gt;&amp;gt; C 578000000 6900000 NONE QAM64
&lt;br&gt;&amp;gt; C 586000000 6900000 NONE QAM64
&lt;br&gt;&amp;gt; C 610000000 6900000 NONE QAM64
&lt;br&gt;&amp;gt; C 386000000 6900000 NONE QAM256
&lt;br&gt;&amp;gt; C 394000000 6900000 NONE QAM256
&lt;br&gt;&amp;gt; C 410000000 6900000 NONE QAM256
&lt;br&gt;&amp;gt; C 434000000 6900000 NONE QAM256
&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=26552853&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/-Fwd%3A-dvb-c-at-KarrerNet--tp26457260p26552853.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26552768</id>
	<title>Re: Kaffeine 1.0-pre2</title>
	<published>2009-11-28T04:36:37Z</published>
	<updated>2009-11-28T04:36:37Z</updated>
	<author>
		<name>Bugzilla from christophpfister@gmail.com</name>
	</author>
	<content type="html">2009/11/22 James W. Bennett &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26552768&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jw-bennett@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt; Kaffeine displays the following message when in uses. Cannot find input
&lt;br&gt;&amp;gt; plugin for MRL [cadda:/].
&lt;br&gt;&amp;gt; Can anyone tell me what that message means.
&lt;br&gt;&lt;br&gt;possible reasons:
&lt;br&gt;1) you're trying to play an audio cd but there's no cd in the drive
&lt;br&gt;(do you have more than one drive?)
&lt;br&gt;2) you don't have permission to read audio cd
&lt;br&gt;3) something is wrong with xine / phonon configuration (are you sure
&lt;br&gt;it's [cadda:/] and not [cdda:/]?)
&lt;br&gt;&lt;br&gt;&amp;gt; Thank you;
&lt;br&gt;&amp;gt; Jim Bennett
&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=26552768&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-1.0-pre2-tp26463587p26552768.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26552826</id>
	<title>Re: uk-Redruth post digital-switchover network\location as of today</title>
	<published>2009-11-28T04:14:57Z</published>
	<updated>2009-11-28T04:14:57Z</updated>
	<author>
		<name>Bugzilla from christophpfister@gmail.com</name>
	</author>
	<content type="html">2009/11/22 g_remlin &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26552826&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;g_remlin@...&lt;/a&gt;&amp;gt;:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; #T 474167000 8MHz  2/3  2/3    QAM64   8k 1/32 NONE      # South West
&lt;br&gt;&amp;gt; (duplicate 690000000)
&lt;br&gt;&amp;gt; T 497833000 8MHz  2/3  2/3    QAM64   8k 1/32 NONE      # South West
&lt;br&gt;&amp;gt; (duplicate 650166670) better SNR
&lt;br&gt;&amp;gt; #T 506167000 8MHz  2/3  2/3    QAM64   8k 1/32 NONE      # South West
&lt;br&gt;&amp;gt; (duplicate 634167000)
&lt;br&gt;&amp;gt; T 521833000 8MHz  2/3  2/3    QAM64   8k 1/32 NONE      # South West
&lt;br&gt;&amp;gt; T 634167000 8MHz  2/3  2/3    QAM64   8k 1/32 NONE      # West
&lt;br&gt;&amp;gt; Cornwall.. (duplicate 506167000) better SNR
&lt;br&gt;&amp;gt; #T 650166670 8MHz  3/4 NONE    QAM16   2k 1/32 NONE     # (duplicate
&lt;br&gt;&amp;gt; 497833000)
&lt;br&gt;&amp;gt; T 658167000 8MHz  2/3  2/3    QAM64   8k 1/32 NONE      # South West
&lt;br&gt;&amp;gt; T 690000000 8MHz  2/3  2/3    QAM64   8k 1/32 NONE      # South West
&lt;br&gt;&amp;gt; (duplicate 474167000) better SNR
&lt;br&gt;&amp;gt; T 714000000 8MHz  2/3  2/3    QAM64   8k 1/32 NONE
&lt;/div&gt;&lt;br&gt;Updated, 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=26552826&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/uk-Redruth-post-digital-switchover-network%5Clocation-as-of-today-tp26464534p26552826.html" />
</entry>

<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>Bugzilla from andriusmao@gmail.com</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>

</feed>
