On Mon, Oct 29, 2012 at 12:56 AM, Sebastian Kügler <span dir="ltr"><<a href="mailto:sebas@kde.org" target="_blank">sebas@kde.org</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Hi Martin,<br>
<div class="im"><br>
On Saturday, October 27, 2012 19:23:46 Martin Klapetek wrote:<br>
> I've just pushed my port of Microblog declarative plasmoid in a branch -<br>
> mklapetek/akonadi_port (kde:declarative-plasmoids). Setting this up needs<br>
> kdepim-libs from master, kde:libkfacebook (currently in kdereview),<br>
> kdepim-runtime from master with this[1] patch, SocialFeed qml plugin from<br>
> kde:scratch/mklapetek/socialfeed and this Microblog branch. If you want to<br>
> try microblog too, you can get the new microblog resource from<br>
> kde:scratch/mklapetek/akonadi-microblog-ng - I'm not aiming to have the<br>
> microblog-ng resource in 4.10 though, but it might be finished by then and<br>
> just released separately.<br>
><br>
> It's not yet finished, but it's fairly usable already. Here is what works:<br>
>  * listing stuff<br>
>     * facebook goes 3 days back (limit 400 posts) with number of likes and<br>
> comments<br>
>     * microblog for now goes 20 posts only<br>
>  * displaying facebook comments by clicking on the status (probably needs<br>
> better discoverability)<br>
>  * posting to networks<br>
<br>
</div>Very nice. I've tried to build it and am looking at it (well, the microblog<br>
parts at least, I don't have a fb account). The build of the microblog<br>
resource fails, complaining about<br>
akonadi-microblog-ng/libkmicroblog/microblogjob.h:27:30: fatal error:<br>
libkoauth/koauth.h: No such file or directory<br>
I don't have that lib. Where can I find it?<br></blockquote><div><br></div><div>Ah well, I forgot that one. It's at kde:scratch/mklapetek/koauth. It's splitted from the microblog dataengine and cleaned up a bit. I also haven't touched the microblog-ng for a while (or tested), might be broken. I'll put it in order first thing in the morning.</div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
SocialFeed wouldn't compile, missing the onShowPost(...) declaration, I've<br>
added it and pushed it to master as you asked. :)<br></blockquote><div><br></div><div>Thanks :)</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im"><br>
> Issues:<br>
>  * the scrollbar is baaad, unusable even (because of the non-uniform<br>
> delegate height), not sure what to do about it<br>
<br>
</div>I've seen that as well, once the model refreshes with all the differently<br>
sized widgets, the scrollbar position vs contentHeight seems to get screwed<br>
up. We'll need to create an as simple as possible test case (maybe using a<br>
timer to add different text items to a ListView?) and debug the scrollbar<br>
code, or maybe even deeper. :/<br></blockquote><div><br></div><div>I'm happy to help!</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im"><br>
>  * when using mouse wheel to scroll, sometimes it just stops scrolling and<br>
> you have to either scroll the wheel /really/ fast or drag the list, I'm<br>
> unsure why that happens, I suspect it's the item snapping to the list edge,<br>
> but I don't understand qml that deeply to see how it works exactly<br>
<br>
</div>Have you tried changing the snap to item property of the ListView?<br></blockquote><div><br></div><div>I have now :) Both the snapping options have similar behavior, only NoSnap works perfectly fine with mouse wheel. But the snapping is quite nice to have... :/</div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im"><br>
>  * sometimes the plasmoid can get really really slow or even freeze when<br>
> scrolling very fast as it tries to fetch all the avatars and post images,<br>
> this might need some optimizations<br>
<br>
</div>We should be able to limit that through KIO somehow, in fact KIO should not<br>
slow down the system in that way. Are you using the preview dataengine for<br>
this? Using this with the microblog plasmoid, I've not seen any problems with<br>
that in scrolling performance. (It downloads, caches the images, but still has<br>
to copy them at least twice (KImageCache -> DataEngine -> QML Runtime).<br></blockquote><div><br></div><div>I want to put it through a profiler to see exactly where the hold up is, but since it happens only the first time when the images are being fetched, I'd assume that would be the bottleneck. I'm not using the dataengine, but I am using the same code (slightly modified, but uses the same KImageCache as the dataengine), which I've put into kdepim-libs [1] so that the resources can fetch the images while downloading the other content while there's internet connection, makes the experience better when browsing it offline.</div>

<div><br></div><div>[1] - <a href="http://lxr.kde.org/source//kde/kdepimlibs/akonadi/socialutils/imageprovider.cpp">http://lxr.kde.org/source//kde/kdepimlibs/akonadi/socialutils/imageprovider.cpp</a></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<div class="im"><br>
>  * actions on posts do not currently work (liking, replying and sharing),<br>
> I'll try to have them working for 4.10, in the worst case, we can have just<br>
> "read-only" version shipped (if we're going to ship it by default) and just<br>
> hide those buttons<br>
<br>
</div>What's the actual problem?<br></blockquote><div><br></div><div>The way it should work is changing the Akonadi item and calling a modification job (nobrainer), which takes it to your resource and that handles it. But in the resource I have actually no way of knowing what was changed. This needs support for "parts" in the resource de-/serializer, so then the resource can say "this item has this part changed". Should be fairly easy, I tried quickly hacking a prototype code and failed, then I didn't have time to finish it.</div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im"><br>
>  * refreshing the list pushes garbage/no data into qml, I'm not yet sure<br>
> where this problem originates, simple reloading of the applet fixes it<br>
<br>
</div>Maybe again a setRoleNames() in the DeclarativeModel screwing up? Where's that<br>
happening, does it still happen if you don't use<br>
PlasmaCore.SortFilterProxyModel?<br></blockquote><div><br></div><div>I actually use proxy model on the c++ side. And I haven't investigated this properly (but it's near the top on my todo), so I don't know where exactly this happens. It does show proper amount of items, just their data are "undefined" in qml.</div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im"><br>
>  * clicking the status fetches all the comments, but the list is not<br>
> updated (even though the model emits dataChanged)<br>
>  * there's no user info yet, but the facebook contacts are in Akonadi, so<br>
> should be easy to just fetch the info and display it<br>
>  * there's still some code that's unneeded, will be removed<br>
>  * post times do not get updated, I'm not sure how to refresh the post<br>
> times in the whole model<br>
<br>
</div>Why would you want that? Posts are one-off items, they don't change posting<br>
date all the time. If you want to display things like "3 minutes ago",</blockquote><div><br></div><div>Yeah, that's exactly why :)</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

 and you<br>
do it like this it will "refresh' during scrolling (since the delegate is<br>
destroyed when going off-view and when becoming visible it's recreated.<br></blockquote><div><br></div><div>The problem arises when you don't scroll the view. Then you can easily have a "few seconds ago" when it really was few hours ago (think of having the plasmoid on desktop, covered with windows and seeing it after few hours).</div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Label {<br>
                text: fancyDateFormatter(postDate)<br>
}<br>
<br>
>From a UI point of view, a possible solution without too many timers is to<br>
display "Posted just a moment ago" for "really new" posts and using a single<br>
shot timer to change that into the posting time (4:41pm which is not relative<br>
to $now, and therefore you don't have to change). For single delegates that<br>
only refresh once that is I think an acceptable trade-off between usability<br>
and wake-ups. For most posts (all that are older than "just a moment ago", we<br>
don't need to start the timer at all).<br></blockquote><div><br></div><div>Hmm...I might change to the full time instead of relative, at least for the first release, it's a low-priority one.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<div class="im"><br>
> I'll be more than glad if anyone can help with any of the issues :) Feel<br>
> free to hack directly on the branch to make it more awesome. Or just<br>
> awesome.<br>
><br>
> [1] - <a href="https://git.reviewboard.kde.org/r/107021/" target="_blank">https://git.reviewboard.kde.org/r/107021/</a><br>
<br>
</div>Mighty cool stuff, by the way. :)<br></blockquote><div><br></div><div>Thanks :)</div><div><br></div></div>-- <br><div><span style="color:rgb(102,102,102)">Martin Klapetek | KDE Developer</span></div><br>