[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