[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-panel-devel
Subject:    Re: Review Request: Rework KMix DBus API and add KMix plasma
From:       "Igor Poboiko" <igor.poboiko () gmail ! com>
Date:       2011-03-26 12:15:52
Message-ID: 20110326121552.23050.86623 () vidsolbach ! de
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://svn.reviewboard.kde.org/r/6587/
-----------------------------------------------------------

(Updated March 26, 2011, 12:15 p.m.)


Review request for Plasma and Diego Casella.


Changes
-------

 - Fixed crash when called removeSource() in dataengine destructor (thanks to Diego \
                for report :)
 - Added some data sources such as "Can Be Muted" (shows can this particular control \
be muted), "Icon" (QIcon - an icon for control), "Controls Icons Names" (list of \
                QStrings - names of controls icons in mixer)
 - Added DBus properties and methods: currentMasterMixer, currentMasterControl, \
preferredMasterMixer, preferredMasterControl, setCurrentMaster(), \
setPreferredMaster() (does obvious things) and canMute() (for controls)

I didn't add ability to change and work with preferred/current master in dataengine \
because I didn't find any way to monitor its changes (in DBus part) Comments are \
welcome :)


Summary
-------

This patch reworks KMix DBus API and adds a plasma dataengine+service as a frontend \
to information provided by DBus. New DBus structure is:
 - /Mixers
used to get some global information, such as available mixers list and global master \
                mixer
 - /Mixers/MIXER_ID
used to get information about mixer with id=MIXER_ID. It provides such information as \
                list of available controls, name of this mixer, id, etc
 - /Mixers/MIXER_ID/CONTROL_ID
used to get and set information about control. Such information as volume level, \
mute, name of control, etc. It also adds a DBus signals which are emitted when new \
mixer/control appears, or volume level changes. It also splits all dbus-related code \
to separate class, DBus{KMix,Mixer,Control}Wrapper.

The Plasma Dataengine:
By default, the only available source is "KMix". It provides information global \
information about KMix: is KMix running, and list of available mixers. (its IDs) \
Source for every mixer is called by it's ID (for example, "ALSA::HDA_Intel:1"). This \
source provides such information about current Mixer as: it's readable name, is it \
opened, its balance and list of available controls. It also adds basic sources for \
every control, which provides only information about its readable name Sources for \
controls are called by 'MIXER_ID/CONTROL_ID' (for example, \
"ALSA::HDA_Intel:1/Master:0"). If you request this source, it will provide such \
information as its readable name, is it muted and its volume level (which are updates \
automatically, using DBus signals). There is a service available for controls \
sources. It provides such methods as setVolume() and setMute().

It doesn't close bug 171287, but it becomes one step closer to its solving :)

And, I'm not very familiar with CMake, but it would be great idea to make plasma part \
optional.


This addresses bug 171287.
    https://bugs.kde.org/show_bug.cgi?id=171287


Diffs (updated)
-----

  /trunk/KDE/kdemultimedia/kmix/CMakeLists.txt 1225808 
  /trunk/KDE/kdemultimedia/kmix/apps/kmix.cpp 1225808 
  /trunk/KDE/kdemultimedia/kmix/core/mixdevice.h 1225808 
  /trunk/KDE/kdemultimedia/kmix/core/mixdevice.cpp 1225808 
  /trunk/KDE/kdemultimedia/kmix/core/mixer.h 1225808 
  /trunk/KDE/kdemultimedia/kmix/core/mixer.cpp 1225808 
  /trunk/KDE/kdemultimedia/kmix/dbus/dbuscontrolwrapper.h PRE-CREATION 
  /trunk/KDE/kdemultimedia/kmix/dbus/dbuscontrolwrapper.cpp PRE-CREATION 
  /trunk/KDE/kdemultimedia/kmix/dbus/dbusmixerwrapper.h PRE-CREATION 
  /trunk/KDE/kdemultimedia/kmix/dbus/dbusmixerwrapper.cpp PRE-CREATION 
  /trunk/KDE/kdemultimedia/kmix/dbus/dbusmixsetwrapper.h PRE-CREATION 
  /trunk/KDE/kdemultimedia/kmix/dbus/dbusmixsetwrapper.cpp PRE-CREATION 
  /trunk/KDE/kdemultimedia/kmix/dbus/org.kde.kmix.control.xml PRE-CREATION 
  /trunk/KDE/kdemultimedia/kmix/dbus/org.kde.kmix.mixer.xml PRE-CREATION 
  /trunk/KDE/kdemultimedia/kmix/dbus/org.kde.kmix.mixset.xml PRE-CREATION 
  /trunk/KDE/kdemultimedia/kmix/gui/kmixdockwidget.cpp 1225808 
  /trunk/KDE/kdemultimedia/kmix/plasma/CMakeLists.txt PRE-CREATION 
  /trunk/KDE/kdemultimedia/kmix/plasma/engine/CMakeLists.txt PRE-CREATION 
  /trunk/KDE/kdemultimedia/kmix/plasma/engine/mixer.operations PRE-CREATION 
  /trunk/KDE/kdemultimedia/kmix/plasma/engine/mixerengine.h PRE-CREATION 
  /trunk/KDE/kdemultimedia/kmix/plasma/engine/mixerengine.cpp PRE-CREATION 
  /trunk/KDE/kdemultimedia/kmix/plasma/engine/mixerservice.h PRE-CREATION 
  /trunk/KDE/kdemultimedia/kmix/plasma/engine/mixerservice.cpp PRE-CREATION 
  /trunk/KDE/kdemultimedia/kmix/plasma/engine/plasma-engine-mixer.desktop \
PRE-CREATION   /trunk/KDE/kdemultimedia/kmix/tests/CMakeLists.txt 1225808 

Diff: http://svn.reviewboard.kde.org/r/6587/diff


Testing
-------

KMix from KDE SC 4.6.0 compiles ok with this patch, and patch applies to current \
trunk. Tested on system with one card and with ALSA backend, so I don't know is \
plasma dataengine works correctly with plugging/unplugging mixers (but it should). \
All DBus methods/properties works fine, signals are emitted, volume can be set using \
DBus methods.

Plasma dataengine was tested using plasmaengineexplorer. 
All works fine except the one thing. When I request an source for Mixer, it also adds \
soucres for controls. And then when I request source for already available Control, \
it doesn't react anyhow. But when I set "Update every % ms", and click "Reqeust", it \
works fine. If I request a source for control BEFORE requesting the source for mixer, \
all works fine too (without setting "Update every % ms"). I don't know is it a \
plasmaengineexplorer bug, or my.


Thanks,

Igor


[Attachment #5 (text/html)]

<html>
 <body>
  <div style="font-family: Verdana, Arial, Helvetica, Sans-Serif;">
   <table bgcolor="#f9f3c9" width="100%" cellpadding="8" style="border: 1px #c9c399 \
solid;">  <tr>
     <td>
      This is an automatically generated e-mail. To reply, visit:
      <a href="http://svn.reviewboard.kde.org/r/6587/">http://svn.reviewboard.kde.org/r/6587/</a>
  </td>
    </tr>
   </table>
   <br />


<table bgcolor="#fefadf" width="100%" cellspacing="0" cellpadding="8" \
style="background-image: \
url('http://svn.reviewboard.kde.orgrb/images/review_request_box_top_bg.png'); \
background-position: left top; background-repeat: repeat-x; border: 1px black \
solid;">  <tr>
  <td>

<div>Review request for Plasma and Diego Casella.</div>
<div>By Igor Poboiko.</div>


<p style="color: grey;"><i>Updated March 26, 2011, 12:15 p.m.</i></p>



<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Changes</h1>
<table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: \
1px solid #b8b5a0">  <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: \
-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: \
break-word;"> - Fixed crash when called removeSource() in dataengine destructor \
                (thanks to Diego for report :)
 - Added some data sources such as &quot;Can Be Muted&quot; (shows can this \
particular control be muted), &quot;Icon&quot; (QIcon - an icon for control), \
&quot;Controls Icons Names&quot; (list of QStrings - names of controls icons in \
                mixer)
 - Added DBus properties and methods: currentMasterMixer, currentMasterControl, \
preferredMasterMixer, preferredMasterControl, setCurrentMaster(), \
setPreferredMaster() (does obvious things) and canMute() (for controls)

I didn&#39;t add ability to change and work with preferred/current master in \
dataengine because I didn&#39;t find any way to monitor its changes (in DBus part) \
Comments are welcome :)</pre>  </td>
 </tr>
</table>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Description </h1>
<table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: \
1px solid #b8b5a0">  <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: \
-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: \
break-word;">This patch reworks KMix DBus API and adds a plasma dataengine+service as \
a frontend to information provided by DBus. New DBus structure is:
 - /Mixers
used to get some global information, such as available mixers list and global master \
                mixer
 - /Mixers/MIXER_ID
used to get information about mixer with id=MIXER_ID. It provides such information as \
                list of available controls, name of this mixer, id, etc
 - /Mixers/MIXER_ID/CONTROL_ID
used to get and set information about control. Such information as volume level, \
mute, name of control, etc. It also adds a DBus signals which are emitted when new \
mixer/control appears, or volume level changes. It also splits all dbus-related code \
to separate class, DBus{KMix,Mixer,Control}Wrapper.

The Plasma Dataengine:
By default, the only available source is &quot;KMix&quot;. It provides information \
global information about KMix: is KMix running, and list of available mixers. (its \
IDs) Source for every mixer is called by it&#39;s ID (for example, \
&quot;ALSA::HDA_Intel:1&quot;). This source provides such information about current \
Mixer as: it&#39;s readable name, is it opened, its balance and list of available \
controls. It also adds basic sources for every control, which provides only \
information about its readable name Sources for controls are called by \
&#39;MIXER_ID/CONTROL_ID&#39; (for example, &quot;ALSA::HDA_Intel:1/Master:0&quot;). \
If you request this source, it will provide such information as its readable name, is \
it muted and its volume level (which are updates automatically, using DBus signals). \
There is a service available for controls sources. It provides such methods as \
setVolume() and setMute().

It doesn&#39;t close bug 171287, but it becomes one step closer to its solving :)

And, I&#39;m not very familiar with CMake, but it would be great idea to make plasma \
part optional. </pre>
  </td>
 </tr>
</table>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Testing </h1>
<table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: \
1px solid #b8b5a0">  <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: \
-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: \
break-word;">KMix from KDE SC 4.6.0 compiles ok with this patch, and patch applies to \
current trunk. Tested on system with one card and with ALSA backend, so I don&#39;t \
know is plasma dataengine works correctly with plugging/unplugging mixers (but it \
should). All DBus methods/properties works fine, signals are emitted, volume can be \
set using DBus methods.

Plasma dataengine was tested using plasmaengineexplorer. 
All works fine except the one thing. When I request an source for Mixer, it also adds \
soucres for controls. And then when I request source for already available Control, \
it doesn&#39;t react anyhow. But when I set &quot;Update every % ms&quot;, and click \
&quot;Reqeust&quot;, it works fine. If I request a source for control BEFORE \
requesting the source for mixer, all works fine too (without setting &quot;Update \
every % ms&quot;). I don&#39;t know is it a plasmaengineexplorer bug, or my.</pre>  \
</td>  </tr>
</table>



<div style="margin-top: 1.5em;">
 <b style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Bugs: </b>


 <a href="https://bugs.kde.org/show_bug.cgi?id=171287">171287</a>


</div>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Diffs</b> \
(updated)</h1> <ul style="margin-left: 3em; padding-left: 0;">

 <li>/trunk/KDE/kdemultimedia/kmix/CMakeLists.txt <span style="color: \
grey">(1225808)</span></li>

 <li>/trunk/KDE/kdemultimedia/kmix/apps/kmix.cpp <span style="color: \
grey">(1225808)</span></li>

 <li>/trunk/KDE/kdemultimedia/kmix/core/mixdevice.h <span style="color: \
grey">(1225808)</span></li>

 <li>/trunk/KDE/kdemultimedia/kmix/core/mixdevice.cpp <span style="color: \
grey">(1225808)</span></li>

 <li>/trunk/KDE/kdemultimedia/kmix/core/mixer.h <span style="color: \
grey">(1225808)</span></li>

 <li>/trunk/KDE/kdemultimedia/kmix/core/mixer.cpp <span style="color: \
grey">(1225808)</span></li>

 <li>/trunk/KDE/kdemultimedia/kmix/dbus/dbuscontrolwrapper.h <span style="color: \
grey">(PRE-CREATION)</span></li>

 <li>/trunk/KDE/kdemultimedia/kmix/dbus/dbuscontrolwrapper.cpp <span style="color: \
grey">(PRE-CREATION)</span></li>

 <li>/trunk/KDE/kdemultimedia/kmix/dbus/dbusmixerwrapper.h <span style="color: \
grey">(PRE-CREATION)</span></li>

 <li>/trunk/KDE/kdemultimedia/kmix/dbus/dbusmixerwrapper.cpp <span style="color: \
grey">(PRE-CREATION)</span></li>

 <li>/trunk/KDE/kdemultimedia/kmix/dbus/dbusmixsetwrapper.h <span style="color: \
grey">(PRE-CREATION)</span></li>

 <li>/trunk/KDE/kdemultimedia/kmix/dbus/dbusmixsetwrapper.cpp <span style="color: \
grey">(PRE-CREATION)</span></li>

 <li>/trunk/KDE/kdemultimedia/kmix/dbus/org.kde.kmix.control.xml <span style="color: \
grey">(PRE-CREATION)</span></li>

 <li>/trunk/KDE/kdemultimedia/kmix/dbus/org.kde.kmix.mixer.xml <span style="color: \
grey">(PRE-CREATION)</span></li>

 <li>/trunk/KDE/kdemultimedia/kmix/dbus/org.kde.kmix.mixset.xml <span style="color: \
grey">(PRE-CREATION)</span></li>

 <li>/trunk/KDE/kdemultimedia/kmix/gui/kmixdockwidget.cpp <span style="color: \
grey">(1225808)</span></li>

 <li>/trunk/KDE/kdemultimedia/kmix/plasma/CMakeLists.txt <span style="color: \
grey">(PRE-CREATION)</span></li>

 <li>/trunk/KDE/kdemultimedia/kmix/plasma/engine/CMakeLists.txt <span style="color: \
grey">(PRE-CREATION)</span></li>

 <li>/trunk/KDE/kdemultimedia/kmix/plasma/engine/mixer.operations <span style="color: \
grey">(PRE-CREATION)</span></li>

 <li>/trunk/KDE/kdemultimedia/kmix/plasma/engine/mixerengine.h <span style="color: \
grey">(PRE-CREATION)</span></li>

 <li>/trunk/KDE/kdemultimedia/kmix/plasma/engine/mixerengine.cpp <span style="color: \
grey">(PRE-CREATION)</span></li>

 <li>/trunk/KDE/kdemultimedia/kmix/plasma/engine/mixerservice.h <span style="color: \
grey">(PRE-CREATION)</span></li>

 <li>/trunk/KDE/kdemultimedia/kmix/plasma/engine/mixerservice.cpp <span style="color: \
grey">(PRE-CREATION)</span></li>

 <li>/trunk/KDE/kdemultimedia/kmix/plasma/engine/plasma-engine-mixer.desktop <span \
style="color: grey">(PRE-CREATION)</span></li>

 <li>/trunk/KDE/kdemultimedia/kmix/tests/CMakeLists.txt <span style="color: \
grey">(1225808)</span></li>

</ul>

<p><a href="http://svn.reviewboard.kde.org/r/6587/diff/" style="margin-left: \
3em;">View Diff</a></p>




  </td>
 </tr>
</table>




  </div>
 </body>
</html>



_______________________________________________
Plasma-devel mailing list
Plasma-devel@kde.org
https://mail.kde.org/mailman/listinfo/plasma-devel


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic