[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