On Tuesday, January 24, 2012 17:23:03 Sebastian Kügler wrote: > Hey, > > That should work asynchronously, you just do setData() when you receive it, > and you start the download of a source by connecting to it (so basically in > sourceRequestEvent, or its Python equivalent in your dataengine). > > You can start as many KIO Jobs as you want in parallel, it being async, it > won't block, and KIO will even schedule these jobs for you so you don't clog > the user's downlink too much. > > If sources become available later on, you might want to catch reference > errors for non existing sources in your QML code, for example when > assigning text: > > Text { > [...] > text: { > if (typeof(viewsSource.data[mySource])) { > return viewsSource.data[mySource][key]; > } else { > return ""; > } > } > } > > This automatic updating is a bit peculiar, and I've seen some problematic > cases, but this is roughly how it *should* work. > > Cheers,
Thanks for all the help thus far, Sebastian. Right now here's how the engine looks: class PyFlickrEngine(plasmascript.DataEngine): def __init__(self,parent,args=None): plasmascript.DataEngine.__init__(self,parent) def init(self): self.setMinimumPollingInterval(333) #for flickr views.initialize() #adding this back in 24 jan to see if it helps def sources(self): sources = ["1500"] return sources def sourceRequestEvent(self, name): print "source request event" #debugging return self.updateSourceEvent(name) def updateSourceEvent(self,group): print "updateSourceEvent" #grouplist = [] if group == "25": print "i'm @ 25" #debug grouplist = views.analyzeviews(views.views25) #self.setData(grouplist, "Group List", QVariant.List) #original line self.setData("25", "Group 25", grouplist) elif group == "50": print "i'm @ 50" #debug grouplist = views.analyzeviews(views.views50) self.setData("50","Group 50", grouplist) elif group == "75": print "i'm @ 75" #debug grouplist = views.analyzeviews(views.views75) self.setData("75","Group 75", grouplist) #some stuff elif group == "1500": print "i'm @ 1500" #debug grouplist = views.analyzeviews(views.views1500) self.setData("1500","Group 1500", grouplist) return True def CreateDataEngine(parent): return PyFlickrEngine(parent) So you're saying that I need to add setData() in the sourceRequestEvent? As far as getting data out I'm coming across a weird phenomenon. Here's my code right now in QML: import Qt 4.7 import "content" import QtWebKit 1.0 import org.kde.plasma.core 0.1 as PlasmaCore Rectangle { id: window width: 360 height: 360 PlasmaCore.DataSource { id: viewsSource engine: "flickrviewsengine2" interval: 0 Component.onCompleted: connectedSources = sources onSourceAdded: connectSource(source) } property string currentGroup: viewsSource.data["1500"]["Group 1500"] //"/home/ermesa/bin/qml/plasmoids/flickrviews2/contents/ui/testgrouprss6" property string currentLocation: "" property bool loading: feedModel.status == XmlListModel.Loading XmlListModel{ id:feedModel source: window.currentGroup //viewsSource.data["1500"]["Group 1500"] query: "/photos/photo" //"/rsp/photos/photo" XmlRole { name: "title"; query: "title/string()"} XmlRole { name: "views"; query: "views/string()"} XmlRole { name: "url"; query: "URL/string()"} } Row { width: 360 height: 43 Rectangle{ width: window.width; height: window.height color: "blue" Text { id: testtext text: viewsSource.data["1500"]["Group 1500"] //viewsSource.valid //timer.data["Local"]["Timezone"] //qsTr("buttons will go here!") } } } Row { x: 0 y: 43 width: 370 height: 317 Rectangle { width: window.width/3+10; height: window.height color: "#efefef" ListView { id: list width: window.width/3; height: window.height model: feedModel delegate: ItemDelegate {} highlight: Rectangle { color: "lightgray" } highlightMoveSpeed: 9999999 } } Rectangle { width: window.width/3*2 height: window.height WebView { id: webView width: window.width/3*2 height: window.height html: "<a href="+currentLocation+">here</a>" } } } } Now, I know that the XML I'm generating in a string is coming across correctly, because it appears in the text I've created text: viewsSource.data["1500"]["Group 1500"] I know that if I copy that into a text file and read that in as in: property string currentGroup: "/home/ermesa/bin/qml/plasmoids/flickrviews2/contents/ui/testgrouprss6" , it works. So there doesn't appear to be anything wrong with the XML. BUT, if I do as I have it now: property string currentGroup: viewsSource.data["1500"]["Group 1500"] It does not populate the ListView. Here's what's in that QString: <?xml version='1.0' encoding='iso-8859-1' ?><photos><photo> <title>Vulnerable</title> <views>1605</views> <URL>http://www.flickr.com/photos/ericsbinaryworld/5673784030/</URL> </photo><photo> <title>The Triple-Breasted Whore of Eroticon Six</title> <views>1577</views> <URL>http://www.flickr.com/photos/ericsbinaryworld/5144657798/</URL> </photo><photo> <title>Wanted: Adrian Lamo</title> <views>1750</views> <URL>http://www.flickr.com/photos/ericsbinaryworld/4816607916/</URL> </photo><photo> <title>Katy Perry's Too Tasty to Resist</title> <views>1729</views> <URL>http://www.flickr.com/photos/ericsbinaryworld/5141646118/</URL> </photo><photo> <title>Wedding Ring and Anniversary Gift</title> <views>1744</views> <URL>http://www.flickr.com/photos/ericsbinaryworld/196460034/</URL> </photo></photos> Ideas? ------------- <br> Eric Mesa <br> http://www.ericsbinaryworld.com <br> Most of the emails from this account should be signed with my GPG key so that you know it's me. The only exception is when I'm using gmail from the web. <br> <br> "OK, so ten out of ten for style, but minus several million for good thinking, yeah? "
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ Plasma-devel mailing list Plasma-devel@kde.org https://mail.kde.org/mailman/listinfo/plasma-devel