<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:'Courier New', courier, monaco, monospace, sans-serif;font-size:10pt"><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 10pt; color: black; "></div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 10pt; color: black; ">Hi list,</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 10pt; color: black; ">as you all know PackageKit changed it's API quite a</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 10pt; color: black; ">lot in the past (which is ok in my POV since the</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 10pt; color: black; ">project was starting). Right now PK is used in several</div><div style="font-family: 'Courier
 New', courier, monaco, monospace, sans-serif; font-size: 10pt; color: black; ">distros and developers are trying to use it more and more.</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 10pt; color: black; ">And the first complain I hear (one of these from openSUSE)</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 10pt; color: black; ">is that API changes too much.</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 10pt; color: black; "><br></div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 10pt; color: black; ">So there are a some signals that I trully never liked, especially</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 10pt; color: black; ">because you can't "read" the code bellow:</div><div style="font-family:
 'Courier New', courier, monaco, monospace, sans-serif; font-size: 10pt; color: black; "><br></div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 10pt; color: black; ">THIS connects the UpdateDetail SIGNAL</div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif" size="4"><span class="Apple-style-span" style="font-size: 10pt;">&nbsp;</span></font><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif" size="3"><span class="Apple-style-span" style="font-size: 13px;">&nbsp;&nbsp; &nbsp;connect(d-&gt;p, SIGNAL(UpdateDetail(const QString&amp;, const QString&amp;, const QString&amp;, const QString&amp;, const QString&amp;, const QString&amp;, const QString&amp;, const QString&amp;, const QString&amp;, const QString&amp;, const QString&amp;, const QString&amp;)),</span></font></div><div><font class="Apple-style-span" face="'Courier New',
 courier, monaco, monospace, sans-serif" size="3"><span class="Apple-style-span" style="font-size: 13px;">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;d, SLOT(updateDetail(const QString&amp;, const QString&amp;, const QString&amp;, const QString&amp;, const QString&amp;, const QString&amp;, const QString&amp;, const QString&amp;, const QString&amp;, const QString&amp;, const QString&amp;, const QString&amp;)));</span></font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif" size="3"><span class="Apple-style-span" style="font-size: 13px;"><br></span></font></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif" size="3"><span class="Apple-style-span" style="font-size: 13px;"><meta http-equiv="content-type" content="text/html; charset=utf-8">THIS connects the&nbsp;<meta http-equiv="content-type" content="text/html; charset=utf-8">Details (package
 details)&nbsp;SIGNAL:</span></font></div><div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; ">connect(d-&gt;p, SIGNAL(Details(const QString&amp;, const QString&amp;, const QString&amp;, const QString&amp;, const QString&amp;, qulonglong)),</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;d, SLOT(details(const QString&amp;, const QString&amp;, const QString&amp;, const QString&amp;, const QString&amp;, qulonglong)));</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; "><br></div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; ">That's C++ with Qt, and if you look at the glib version isn't easier at all.</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px;
 "><br></div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; ">So what if tomorrow we decide that Details needs to pass the size</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; ">of the installed package and it's popularity?</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; ">API breaks.</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; "><br></div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; ">This is not good, since every app on earth that needs just to get</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; ">the package description (which doesn't care about popularity at all),</div><div style="font-family: 'Courier New', courier, monaco,
 monospace, sans-serif; font-size: 13px; ">will have to be fixed.</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; "><br></div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; ">My proposal as I said to Richard and of course any of if in case of a</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; ">better idea please say. is:</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; "><br></div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; ">&nbsp;* Deprecate&nbsp;Subpercentage property.</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; ">&nbsp;* Deprecate these two methods.</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif;
 font-size: 13px; ">&nbsp;* Deprecate Package() signal.</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; "><br></div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; ">And from these 3 signals we get just one:</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; ">&nbsp;PackageData(string package_id, string status, stringlist data)</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; "><br></div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; ">Richard said that he doesn't want backends emiting any kind of</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; ">data, otherwise (as I think) it would let some specific frontends</div><div style="font-family: 'Courier
 New', courier, monaco, monospace, sans-serif; font-size: 13px; ">or non-compilant ones to be written, which is indeed bad.</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; "><br></div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; ">The solution would be to verify all the data emited by the</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; ">backend to see if it is ok, so if someone sends "special" data</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; ">it gets dropped. This is an expensive solution though. But</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; ">if we use enum numbers it can be reduced.</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size:
 13px; "><br></div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; ">Now some use cases for this signal:</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; "><br></div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; ">// emit that the download of package foo is at 30% [1]</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; ">PackageData("foo;3.3.3;bar;zing", "downloading",</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; ">&nbsp;&nbsp; &nbsp; &nbsp;["progress=30", "progress-bytes=3294", "bytes-total=393423"]);</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; "><br></div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif;
 font-size: 13px; ">// emit update info</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; "><meta http-equiv="content-type" content="text/html; charset=utf-8"><div>PackageData("foo;3.3.3;bar;zing", "security",</div><div>&nbsp;&nbsp; &nbsp; &nbsp;["issued=3423540", "updates=foo;2.2.2.2;zing;bar", "changelog=this update is important because it extends our API"]);</div></div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; "><br></div><div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif" size="3"><span class="Apple-style-span" style="font-size: 13px;"><meta http-equiv="content-type" content="text/html; charset=utf-8"><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; ">// emit package details of popularity</div><div style="font-family: 'Courier New', courier, monaco,
 monospace, sans-serif; font-size: 13px; "><div>PackageData("foo;3.3.3;bar;zing", "security",</div><div>&nbsp;&nbsp; &nbsp; &nbsp;["description=This package is nice", "popularity=87"]);</div></div></span></font></div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; "><br></div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; ">Then we creates an enum PackageData fields PK_ENUM_POPULARITY and use them</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; ">in the code.</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; "><br></div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; ">[1] This actually fixes a bug in PK when multiples downloads are running</div><div style="font-family: 'Courier New', courier, monaco,
 monospace, sans-serif; font-size: 13px; ">the progress of them is mixed since Subpercentage does not tell us which</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; ">package has the percentage.</div></div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; "><br></div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; ">Any thoughts?</div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; "><br></div><div style="font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 13px; ">Best,</div><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif" size="4" style="color: black; "><span class="Apple-style-span" style="font-size: 10pt; ">________________________________</span></font><br><font class="Apple-style-span"
 face="'Courier New', courier, monaco, monospace, sans-serif" size="4" style="color: black; "><span class="Apple-style-span" style="font-size: 10pt;">Daniel Nicoletti - KDE Developer</span></font><br><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif" size="4" style="color: black; "><span class="Apple-style-span" style="font-size: 10pt;"><span><a target="_blank" href="http://dantti.wordpress.com">http://dantti.wordpress.com</a></span></span></font><br><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif" size="4" style="color: black; "><span class="Apple-style-span" style="font-size: 10pt;">When a wicked man dies, his hope perishes;</span></font><br><font class="Apple-style-span" face="'Courier New', courier, monaco, monospace, sans-serif" size="4" style="color: black; "><span class="Apple-style-span" style="font-size: 10pt;">all he expected from his power comes to nothing.
 Prov. 11:7</span></font><div style="color: black; "><div style="position: fixed; font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 10pt; "></div>


</div></div><br>



      &nbsp;</body></html>