<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://git.reviewboard.kde.org/r/100001/">http://git.reviewboard.kde.org/r/100001/</a>
     </td>
    </tr>
   </table>
   <br />



 <p>Ship it!</p>



 <pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Looks good to me! Max, feel free to review the CurriedQM stuff, where Andy essentially saves a list of function calls and replays them. Code looks clean. Andy, if you fix the really absolutely minor things i found, merge when you have the chance. Oh, and make sure you add an entry to the ChangeLog :)

Also, for future reference, we discussed on IRC something like the following:

1) On startup, check for playdar. If it exists, show the playdar collection.
2) Show a Playdar entry in Internet Sources. If checked, poll for playdar every ~5 or 10 minutes, with a refresh button available in the settings of the internet service. Though playdar is not technically an internet service, we could write a small stub one to provide a config UI in a logical place. It would be nice to have a &quot;collections config&quot; page to put this, but as all the other collections are auto-detected, this might not make a ton of sense.

Thoughts appreciated.</pre>
 <br />





<div>




<table width="100%" border="0" bgcolor="white" style="border: 1px solid #C0C0C0; border-collapse: collapse; margin: 2px padding: 2px;">
 <thead>
  <tr>
   <th colspan="4" bgcolor="#F0F0F0" style="border-bottom: 1px solid #C0C0C0; font-size: 9pt; padding: 4px 8px; text-align: left;">
    <a href="/r/100001/diff/1/?file=154#file154line42" style="color: black; font-weight: bold; text-decoration: underline;">src/core-impl/collections/playdarcollection/PlaydarCollection.h</a>
    <span style="font-weight: normal;">

     (Diff revision 1)

    </span>
   </th>
  </tr>
 </thead>

 <tbody style="background-color: #e4d9cb; padding: 4px 8px; text-align: center;">
  <tr>

   <td colspan="2"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "></pre></td>
   <td colspan="2"><pre style="font-size: 8pt; line-height: 140%; margin: 0; ">namespace Collections</pre></td>

  </tr>
 </tbody>




 
 



 <tbody>

  <tr>
    <th bgcolor="#b1ebb0" style="border-right: 1px solid #C0C0C0;" align="right"><font size="2"></font></th>
    <td bgcolor="#c5ffc4" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "></pre></td>
    <th bgcolor="#b1ebb0" style="border-left: 1px solid #C0C0C0; border-right: 1px solid #C0C0C0;" align="right"><font size="2">42</font></th>
    <td bgcolor="#c5ffc4" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; ">            <span class="n">PlaydarCollectionFactory</span><span class="p">(</span> <span class="n">QObject</span><span class="o">*</span> <span class="o">&amp;</span><span class="n">parent</span><span class="p">,</span> <span class="k">const</span> <span class="n">QVariantList</span> <span class="o">&amp;</span><span class="n">args</span> <span class="p">);</span></pre></td>
  </tr>

 </tbody>

</table>

<pre style="margin-left: 2em; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">I&#39;m guessing the &amp; is a copy and paste error here :)</pre>
</div>
<br />

<div>




<table width="100%" border="0" bgcolor="white" style="border: 1px solid #C0C0C0; border-collapse: collapse; margin: 2px padding: 2px;">
 <thead>
  <tr>
   <th colspan="4" bgcolor="#F0F0F0" style="border-bottom: 1px solid #C0C0C0; font-size: 9pt; padding: 4px 8px; text-align: left;">
    <a href="/r/100001/diff/1/?file=155#file155line40" style="color: black; font-weight: bold; text-decoration: underline;">src/core-impl/collections/playdarcollection/PlaydarCollection.cpp</a>
    <span style="font-weight: normal;">

     (Diff revision 1)

    </span>
   </th>
  </tr>
 </thead>

 <tbody style="background-color: #e4d9cb; padding: 4px 8px; text-align: center;">
  <tr>

   <td colspan="2"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "></pre></td>
   <td colspan="2"><pre style="font-size: 8pt; line-height: 140%; margin: 0; ">namespace Collections</pre></td>

  </tr>
 </tbody>




 
 



 <tbody>

  <tr>
    <th bgcolor="#b1ebb0" style="border-right: 1px solid #C0C0C0;" align="right"><font size="2"></font></th>
    <td bgcolor="#c5ffc4" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "></pre></td>
    <th bgcolor="#b1ebb0" style="border-left: 1px solid #C0C0C0; border-right: 1px solid #C0C0C0;" align="right"><font size="2">40</font></th>
    <td bgcolor="#c5ffc4" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; ">    <span class="n">PlaydarCollectionFactory</span><span class="o">::</span><span class="n">PlaydarCollectionFactory</span><span class="p">(</span> <span class="n">QObject</span><span class="o">*</span> <span class="o">&amp;</span><span class="n">parent</span><span class="p">,</span> <span class="k">const</span> <span class="n">QVariantList</span> <span class="o">&amp;</span><span class="n">args</span> <span class="p">)</span></pre></td>
  </tr>

 </tbody>

</table>

<pre style="margin-left: 2em; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Probably worth calling the superclass constructor with parent() rather than in the constructor body :)</pre>
</div>
<br />

<div>




<table width="100%" border="0" bgcolor="white" style="border: 1px solid #C0C0C0; border-collapse: collapse; margin: 2px padding: 2px;">
 <thead>
  <tr>
   <th colspan="4" bgcolor="#F0F0F0" style="border-bottom: 1px solid #C0C0C0; font-size: 9pt; padding: 4px 8px; text-align: left;">
    <a href="/r/100001/diff/1/?file=155#file155line124" style="color: black; font-weight: bold; text-decoration: underline;">src/core-impl/collections/playdarcollection/PlaydarCollection.cpp</a>
    <span style="font-weight: normal;">

     (Diff revision 1)

    </span>
   </th>
  </tr>
 </thead>

 <tbody style="background-color: #e4d9cb; padding: 4px 8px; text-align: center;">
  <tr>

   <td colspan="2"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "></pre></td>
   <td colspan="2"><pre style="font-size: 8pt; line-height: 140%; margin: 0; ">namespace Collections</pre></td>

  </tr>
 </tbody>




 
 



 <tbody>

  <tr>
    <th bgcolor="#b1ebb0" style="border-right: 1px solid #C0C0C0;" align="right"><font size="2"></font></th>
    <td bgcolor="#c5ffc4" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "></pre></td>
    <th bgcolor="#b1ebb0" style="border-left: 1px solid #C0C0C0; border-right: 1px solid #C0C0C0;" align="right"><font size="2">124</font></th>
    <td bgcolor="#c5ffc4" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; ">        <span class="o">:</span> <span class="n">m_collectionId</span><span class="p">(</span> <span class="s">&quot;Playdar Collection&quot;</span> <span class="p">)</span></pre></td>
  </tr>

 </tbody>

</table>

<pre style="margin-left: 2em; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">is this string shown to the user? if so, it needs to be wrapped in i18n()</pre>
</div>
<br />

<div>




<table width="100%" border="0" bgcolor="white" style="border: 1px solid #C0C0C0; border-collapse: collapse; margin: 2px padding: 2px;">
 <thead>
  <tr>
   <th colspan="4" bgcolor="#F0F0F0" style="border-bottom: 1px solid #C0C0C0; font-size: 9pt; padding: 4px 8px; text-align: left;">
    <a href="/r/100001/diff/1/?file=159#file159line2" style="color: black; font-weight: bold; text-decoration: underline;">src/core-impl/collections/playdarcollection/PlaydarQueryMaker.cpp</a>
    <span style="font-weight: normal;">

     (Diff revision 1)

    </span>
   </th>
  </tr>
 </thead>

 <tbody style="background-color: #e4d9cb; padding: 4px 8px; text-align: center;">
  <tr>

   <td colspan="4"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "></pre></td>

  </tr>
 </tbody>




 
 



 <tbody>

  <tr>
    <th bgcolor="#b1ebb0" style="border-right: 1px solid #C0C0C0;" align="right"><font size="2"></font></th>
    <td bgcolor="#c5ffc4" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "></pre></td>
    <th bgcolor="#b1ebb0" style="border-left: 1px solid #C0C0C0; border-right: 1px solid #C0C0C0;" align="right"><font size="2">2</font></th>
    <td bgcolor="#c5ffc4" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "><span class="cm"> * Copyright (c) 2010 Andrew Coder &lt;andrew.coder@gmail.com                              *</span></pre></td>
  </tr>

 </tbody>

</table>

<pre style="margin-left: 2em; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">I don&#39;t know if you care, but all your license headers are missing a final &gt; in your email address :D</pre>
</div>
<br />



<p>- Leo</p>


<br />
<p>On September 24th, 2010, 1:49 a.m., Andy Coder wrote:</p>






<table bgcolor="#fefadf" width="100%" cellspacing="0" cellpadding="8" style="background-image: url('http://git.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 amarok and Leo Franchi.</div>
<div>By Andy Coder.</div>


<p style="color: grey;"><i>Updated 2010-09-24 01:49:15</i></p>




<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 is what it does, (basically):

1) Adds the PlaydarCollection/QueryMaker/Meta/etc. code in src/core-impl/collections/playdar-collection/

2) Adds the top-level external/ directory and moves JsonQt into it

3) Changes the formerly unused side of the behavior of MetaProxy::Track,
   (when AwaitLookupNotification == false), so that PlaydarTracks can sit
   around and eventually get updated without slowing things to a crawl

4) Changes CurrentEngine and the SimilarArtists applet&#39; use of
   CollectionManager::instance()-&gt;primaryCollection() to -&gt;queryMaker()

5) Adds the &#39;Add top track to playlist&#39; button to SimilarArtists

6) Prevents XSPFPlaylist from killing of MetaProxy::Tracks just
   because they&#39;re not playable yet</pre>
  </td>
 </tr>
</table>





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

 <li>CMakeLists.txt <span style="color: grey">(191b02e)</span></li>

 <li>external/CMakeLists.txt <span style="color: grey">(PRE-CREATION)</span></li>

 <li>external/JsonQt/CMakeLists.txt <span style="color: grey">(PRE-CREATION)</span></li>

 <li>external/JsonQt/COMPATIBILITY <span style="color: grey">(PRE-CREATION)</span></li>

 <li>external/JsonQt/COPYING.HEADER <span style="color: grey">(PRE-CREATION)</span></li>

 <li>external/JsonQt/Doxyfile.cmake <span style="color: grey">(PRE-CREATION)</span></li>

 <li>external/JsonQt/README.txt <span style="color: grey">(PRE-CREATION)</span></li>

 <li>external/JsonQt/add-copyright-header.sh <span style="color: grey">(PRE-CREATION)</span></li>

 <li>external/JsonQt/lib/CMakeLists.txt <span style="color: grey">(PRE-CREATION)</span></li>

 <li>external/JsonQt/lib/JsonQtExport.h <span style="color: grey">(PRE-CREATION)</span></li>

 <li>external/JsonQt/lib/JsonRpc.h <span style="color: grey">(PRE-CREATION)</span></li>

 <li>external/JsonQt/lib/JsonRpc.cpp <span style="color: grey">(PRE-CREATION)</span></li>

 <li>external/JsonQt/lib/JsonRpcAdaptor.h <span style="color: grey">(PRE-CREATION)</span></li>

 <li>external/JsonQt/lib/JsonRpcAdaptor.cpp <span style="color: grey">(PRE-CREATION)</span></li>

 <li>external/JsonQt/lib/JsonRpcAdaptorPrivate.h <span style="color: grey">(PRE-CREATION)</span></li>

 <li>external/JsonQt/lib/JsonRpcAdaptorPrivate.cpp <span style="color: grey">(PRE-CREATION)</span></li>

 <li>external/JsonQt/lib/JsonToProperties.h <span style="color: grey">(PRE-CREATION)</span></li>

 <li>external/JsonQt/lib/JsonToProperties.cpp <span style="color: grey">(PRE-CREATION)</span></li>

 <li>external/JsonQt/lib/JsonToVariant.h <span style="color: grey">(PRE-CREATION)</span></li>

 <li>external/JsonQt/lib/JsonToVariant.cpp <span style="color: grey">(PRE-CREATION)</span></li>

 <li>external/JsonQt/lib/ParseException.h <span style="color: grey">(PRE-CREATION)</span></li>

 <li>external/JsonQt/lib/ParseException.cpp <span style="color: grey">(PRE-CREATION)</span></li>

 <li>external/JsonQt/lib/VariantToJson.h <span style="color: grey">(PRE-CREATION)</span></li>

 <li>external/JsonQt/lib/VariantToJson.cpp <span style="color: grey">(PRE-CREATION)</span></li>

 <li>external/JsonQt/tests/CMakeLists.txt <span style="color: grey">(PRE-CREATION)</span></li>

 <li>external/JsonQt/tests/JsonRpc.cpp <span style="color: grey">(PRE-CREATION)</span></li>

 <li>external/JsonQt/tests/JsonRpcAdaptor.cpp <span style="color: grey">(PRE-CREATION)</span></li>

 <li>external/JsonQt/tests/JsonToProperties.cpp <span style="color: grey">(PRE-CREATION)</span></li>

 <li>external/JsonQt/tests/JsonToVariant.cpp <span style="color: grey">(PRE-CREATION)</span></li>

 <li>external/JsonQt/tests/VariantToJson.cpp <span style="color: grey">(PRE-CREATION)</span></li>

 <li>external/README.txt <span style="color: grey">(PRE-CREATION)</span></li>

 <li>src/context/applets/similarartists/ArtistWidget.h <span style="color: grey">(a9331f6)</span></li>

 <li>src/context/applets/similarartists/ArtistWidget.cpp <span style="color: grey">(702248e)</span></li>

 <li>src/context/engines/current/CurrentEngine.cpp <span style="color: grey">(bb8e869)</span></li>

 <li>src/context/engines/songkick/CMakeLists.txt <span style="color: grey">(fab9a28)</span></li>

 <li>src/context/engines/songkick/JsonQt/CMakeLists.txt <span style="color: grey">(9978895)</span></li>

 <li>src/context/engines/songkick/JsonQt/COMPATIBILITY <span style="color: grey">(1a5b619)</span></li>

 <li>src/context/engines/songkick/JsonQt/COPYING.HEADER <span style="color: grey">(bf9c30e)</span></li>

 <li>src/context/engines/songkick/JsonQt/Doxyfile.cmake <span style="color: grey">(4d2a4bf)</span></li>

 <li>src/context/engines/songkick/JsonQt/README.txt <span style="color: grey">(4ebcf73)</span></li>

 <li>src/context/engines/songkick/JsonQt/add-copyright-header.sh <span style="color: grey">(8d21c92)</span></li>

 <li>src/context/engines/songkick/JsonQt/lib/CMakeLists.txt <span style="color: grey">(3d39457)</span></li>

 <li>src/context/engines/songkick/JsonQt/lib/JsonQtExport.h <span style="color: grey">(d7024e5)</span></li>

 <li>src/context/engines/songkick/JsonQt/lib/JsonRpc.h <span style="color: grey">(8f0024c)</span></li>

 <li>src/context/engines/songkick/JsonQt/lib/JsonRpc.cpp <span style="color: grey">(cbcd161)</span></li>

 <li>src/context/engines/songkick/JsonQt/lib/JsonRpcAdaptor.h <span style="color: grey">(83836c8)</span></li>

 <li>src/context/engines/songkick/JsonQt/lib/JsonRpcAdaptor.cpp <span style="color: grey">(18a1504)</span></li>

 <li>src/context/engines/songkick/JsonQt/lib/JsonRpcAdaptorPrivate.h <span style="color: grey">(03c990c)</span></li>

 <li>src/context/engines/songkick/JsonQt/lib/JsonRpcAdaptorPrivate.cpp <span style="color: grey">(c8fddb0)</span></li>

 <li>src/context/engines/songkick/JsonQt/lib/JsonToProperties.h <span style="color: grey">(f04bd58)</span></li>

 <li>src/context/engines/songkick/JsonQt/lib/JsonToProperties.cpp <span style="color: grey">(4859d49)</span></li>

 <li>src/context/engines/songkick/JsonQt/lib/JsonToVariant.h <span style="color: grey">(82b62c0)</span></li>

 <li>src/context/engines/songkick/JsonQt/lib/JsonToVariant.cpp <span style="color: grey">(323e31a)</span></li>

 <li>src/context/engines/songkick/JsonQt/lib/ParseException.h <span style="color: grey">(a942d37)</span></li>

 <li>src/context/engines/songkick/JsonQt/lib/ParseException.cpp <span style="color: grey">(c663179)</span></li>

 <li>src/context/engines/songkick/JsonQt/lib/VariantToJson.h <span style="color: grey">(2a1a645)</span></li>

 <li>src/context/engines/songkick/JsonQt/lib/VariantToJson.cpp <span style="color: grey">(baa7cdd)</span></li>

 <li>src/context/engines/songkick/JsonQt/tests/CMakeLists.txt <span style="color: grey">(4954fe7)</span></li>

 <li>src/context/engines/songkick/JsonQt/tests/JsonRpc.cpp <span style="color: grey">(1ce4c9c)</span></li>

 <li>src/context/engines/songkick/JsonQt/tests/JsonRpcAdaptor.cpp <span style="color: grey">(6e99599)</span></li>

 <li>src/context/engines/songkick/JsonQt/tests/JsonToProperties.cpp <span style="color: grey">(e1a0707)</span></li>

 <li>src/context/engines/songkick/JsonQt/tests/JsonToVariant.cpp <span style="color: grey">(414d1c9)</span></li>

 <li>src/context/engines/songkick/JsonQt/tests/VariantToJson.cpp <span style="color: grey">(dfad043)</span></li>

 <li>src/core-impl/collections/CMakeLists.txt <span style="color: grey">(79046d6)</span></li>

 <li>src/core-impl/collections/playdarcollection/CMakeLists.txt <span style="color: grey">(PRE-CREATION)</span></li>

 <li>src/core-impl/collections/playdarcollection/PlaydarCollection.h <span style="color: grey">(PRE-CREATION)</span></li>

 <li>src/core-impl/collections/playdarcollection/PlaydarCollection.cpp <span style="color: grey">(PRE-CREATION)</span></li>

 <li>src/core-impl/collections/playdarcollection/PlaydarMeta.h <span style="color: grey">(PRE-CREATION)</span></li>

 <li>src/core-impl/collections/playdarcollection/PlaydarMeta.cpp <span style="color: grey">(PRE-CREATION)</span></li>

 <li>src/core-impl/collections/playdarcollection/PlaydarQueryMaker.h <span style="color: grey">(PRE-CREATION)</span></li>

 <li>src/core-impl/collections/playdarcollection/PlaydarQueryMaker.cpp <span style="color: grey">(PRE-CREATION)</span></li>

 <li>src/core-impl/collections/playdarcollection/amarok_collection-playdarcollection.desktop <span style="color: grey">(PRE-CREATION)</span></li>

 <li>src/core-impl/collections/playdarcollection/support/Controller.h <span style="color: grey">(PRE-CREATION)</span></li>

 <li>src/core-impl/collections/playdarcollection/support/Controller.cpp <span style="color: grey">(PRE-CREATION)</span></li>

 <li>src/core-impl/collections/playdarcollection/support/ProxyResolver.h <span style="color: grey">(PRE-CREATION)</span></li>

 <li>src/core-impl/collections/playdarcollection/support/ProxyResolver.cpp <span style="color: grey">(PRE-CREATION)</span></li>

 <li>src/core-impl/collections/playdarcollection/support/QMFunctionTypes.h <span style="color: grey">(PRE-CREATION)</span></li>

 <li>src/core-impl/collections/playdarcollection/support/Query.h <span style="color: grey">(PRE-CREATION)</span></li>

 <li>src/core-impl/collections/playdarcollection/support/Query.cpp <span style="color: grey">(PRE-CREATION)</span></li>

 <li>src/core-impl/collections/support/MemoryFilter.cpp <span style="color: grey">(e329faa)</span></li>

 <li>src/core-impl/collections/support/MemoryQueryMaker.cpp <span style="color: grey">(831601b)</span></li>

 <li>src/core-impl/meta/proxy/MetaProxy.cpp <span style="color: grey">(341e076)</span></li>

 <li>src/core-impl/meta/proxy/MetaProxy_p.h <span style="color: grey">(d2638a8)</span></li>

 <li>src/core-impl/playlists/types/file/xspf/XSPFPlaylist.cpp <span style="color: grey">(592bc24)</span></li>

</ul>

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



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

<div>

 <a href="http://git.reviewboard.kde.org/r/100001/s/2/"><img src="http://git.reviewboard.kde.org/media/uploaded/images/2010/09/24/ss-amarok-defaultPlaylistAndCoversLoaded_400x100.png" style="border: 1px black solid;" alt="It works! (for me)" /></a>

</div>


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








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