<div dir="ltr"><p dir="ltr">Hey,</p>
<p dir="ltr">I'm doing well to some extent. Thanks to ask. Hope you're well too.</p>
<p dir="ltr">But, unfortunately, I must say that I do not intend to integrate libtomahawk with Amarok anymore. Please, don't get me wrong. I'm not saying that all my GSoC work was in vain and that the confidence that everyone had in me was an error. In fact, I have been trying to separate libtomahawk from the rest of the Tomahawk code until the end of January. However, simple changes were demanding a huge effort. All that just to separate, because we still had to do a Macgyver on the database stuff. Having another database running just because a plugin required that is somewhat difficult to accept in the long run. All that made me feel really frustrated for a while, since I haven't met my expectations neither in Tomahawk nor in Amarok.</p>
<p dir="ltr">Going awol was probably a consequence of that problem. And the fact that I care about both communities made this situation bother me even more. So, after doing some serious thinking in January, I decided that integrating libtomahawk wasn't the right thing to do. I couldn't know at the very beginning of my GSoC how that would end and that obviously was a tough decision to make.</p>
<p dir="ltr">Tomahawk is really full of great ideas and I completely understand why everybody insisted on the idea of using its code, since making everything from the scratch must be always our last card to play. Seriously, I'd learned a lot with all the design choices that were made. Resolvers, the protocol itself, the way that XMPP and its XEPs were used for peer discovery were simply outstanding ideas.</p>
<p dir="ltr">But fear not, as a consequence of everything aforementioned I started to develop a new library, even though I knew that Domme was against this alternative, to do everything that was planned during my GSoC. I call it TPLib, but maybe I should change its name for something that resembles more its social features afterwards. In spite of that, I guess many of you are now asking yourselves why I haven't told anybody about that yet. Well, people tend to accept an ongoing work easier than just promises, as both Andy Hunt and David Thomas wisely pointed out in the Pragmatic Programmer.</p>
<p>And speaking of that, I believe that I owe everyone apologies. Especially, for you Domme. Your commitment as a mentor was exceptional. Your several emails, even after GSoC are a concrete proof of this. Tomahawk team, in my opinion, should be really proud of having a contributor with such great sense of community.</p>
<p dir="ltr">To be honest, I still need at least three months for having it working as desired for a first release. Despite that, I've made all the stuff related to sources management, control connection, database sync connection and I'm polishing the stream connection stuff right now. Although the three connection types were almost done, I'm focusing on getting the part of having access to peers collections first. Along with units tests to validate my work. Right now, for instance, the library has something about 7000 lines of code, regardless of cmakelists and non-c++/qt related files.</p>
<p dir="ltr">With the the stream connection stuff done, I can then concentrate on the Amarok side for a while. Trying to listen to other peers collections. But that's only half of the equation. Since I still have to make others able to listen to TPLib users' collections and integrate that on Amarok. That's all I need to do before deploying this work on Amarok.</p>
<p dir="ltr">Playlists are out of question at this first moment. Since, in most cases, I've noticed that users tend to add much more tracks from resolvers plugins than from their own collections. Therefore, I believe we should postpone playlists to a second release of TPLib.</p>
<p dir="ltr">On balance, here goes a quick tour on what was planned/done:<br></p><p>Part 1:</p><p>Create separate message processors for every kind of connection [DONE]<br>Create separate message factories for every kind of connection [DONE]<br>
Manage new peers incoming network connections [DONE]<br>Manage control connections [DONE]<br>Make unit tests for control connection related classes [TODO]<br>Create classes to process database commands, converting from json and vice versa [DONE]<br>
Make unit tests for database commands related classes [DONE]<br>Manage database connections [DONE]<br>Make unit tests for database connection related classes [TODO]<br>Manage stream connections [DOING]<br>Make unit tests for stream connection related classes [TODO]<br>
Add support for sip plugins (Zeroconf, Gmail and Jabber) [TODO]<br>Integrate TPLib with Amarok and listen to others collections [TODO]</p><p>Part 2:</p><p>Make others able to get TPLib users' database state [TODO]<br>
Make others able to listen to TPLib users' collections [TODO]<br>Add support to listen along and what you're listening features [TODO]<br>Add support for Tomahawk resolvers [TODO]<br>Add static playlist support [TODO]<br>
Add dynamic playlist support [TODO]</p><p></p>
<p dir="ltr">Apart from technicalities, I'm really enjoying the whole experience of building up a library from scratch. Up to now this has lead me to several improvements in my coding skills; from tests to API design. In a way that, TPLib will be a reflect of everything that these 2 years of floss and patient friends had taught me.</p>
<p dir="ltr">Last but not least, I don't know if someone from our team still want to integrate tomahawklib with Amarok after all that was said in this email. Especially now that another GSoC is beginning. Otherwise, I can help clarifying what I had done.</p>
<p dir="ltr">
TPLib repository: <a href="http://www.bitbucket.org/x8lucas8x/tplib" target="_blank">www.bitbucket.org/x8lucas8x/tplib</a><br></p>
<p dir="ltr">Regards, Lucas Lira Gomes.</p>
<p dir="ltr">----------------------------------------------------------------------------------<br>
Lucas Lira Gomes (llg)<br>
Linux User #533002<br>
Tel.: <a href="tel:%2881%29%209235-0916" value="+18192350916" target="_blank">(81) 9235-0916</a></p>
<p dir="ltr"><a href="http://www.about.me/lucasliragomes" target="_blank">www.about.me/lucasliragomes</a></p>
</div>