On 06/28/2012 12:44 AM, Vishesh Handa wrote: > > > On Wed, Jun 27, 2012 at 1:22 AM, Sebastian Tr=FCg > wrote: > > On 06/26/2012 10:42 AM, Vishesh Handa wrote: > > > > On Tue, Jun 26, 2012 at 1:17 PM, Sebastian Tr=FCg > >> wrote: > > On 06/25/2012 10:50 AM, Vishesh Handa wrote: > > Hey Sebastian > > The reviewboard has gone insane and it refuses to let me > upload > my patch > - "The file > 'nepomuk/kioslaves/search/kio_____nepomuksearch.cpp' > > (r2311b7a) > could not be found in the repository". > > The auto updates donot seem to work any more, so that rea= lly > needs to be > > > > > fixed or thrown away. I would prefer throwing it away, > but it > does have > a valid use-case, though the implementation is horrible. > > > Why is the implementation horrible? I always thought it to > be very > clean. The concept is simple: the kio slave lists a folder wh= ich > results in a KDirNotify signal which is used by the kded > module to > list the query in the query service. Since before that would > > have reused the same query folder there would have been no > re-querying. The kded would simply subscribe to updates from = the > query service. > > > I was referring to how the query service does the updates - It > runs the > queries every time any data has changed. The current implementati= on > makes Nepomuk completely unusable. Mainly cause I have the > telepathy-nepomuk-service running which updates the nepomuk repo = any > time the status of any of my contacts changes. > > Right now, the query will be run both in the kio-slave, and in the > queryservice. Maybe we could abstract away the queryservice > code, and > make it run in the kioslave itself. That way the kded will > listen to the > kioslave for updates, and the queries will not have to be run twi= ce. > > > The kio slave does not run forever. So you cannot do updates that way. > But remember that we had the idea to use the resource watcher to do > some heuristics. > > > Hmm. So now what? Should I commit this patch? > > I remember the plan of using some heuristics, I just don't think that > would help a lot. For simple queries like listing all your music files - > On my desktop that is over 20,000 files. Doing that query and processing > 20000 files again, just cause one music file was added seems to be an > overkill. > > I rather not have this feature of automatic updates, if it means such a > heavy performance penalty. If you are only talking KIO then I suppose that would be OK. I would, = however, like to keep the kded code around for when we improved the = query updating. > > > > > > commit 1fba20495fddfc596591f6ea8535d5____fc6427c62b > > Author: Vishesh Handa > > > >>> > > > Date: Sat Jun 16 02:57:57 2012 +0530 > > Avoid using the query service to run queries in the > kioslave > > Avoid creating a new thread in the query service, and > parsing the > results over dbus. Instead just run the query > manually in > the kioslave. > > We can do this cause kioslaves run in a separate > process > and are allowed > to be blocking. > > diff --git a/nepomuk/kioslaves/common/____resourcestat.cpp > b/nepomuk/kioslaves/common/____resourcestat.cpp > index a259ba5..8f3088e 100644 > --- a/nepomuk/kioslaves/common/____resourcestat.cpp > +++ b/nepomuk/kioslaves/common/____resourcestat.cpp > > @@ -349,6 +349,7 @@ KUrl Nepomuk2::redirectionUrl( const > Nepomuk2::Resource& res ) > > > namespace { > + > /** > * Check if the resource represents a local file > with an > existing nie:url property. > */ > diff --git > a/nepomuk/kioslaves/search/____kio_nepomuksearch.cpp > b/nepomuk/kioslaves/search/____kio_nepomuksearch.cpp > index 2311b7a..3c82796 100644 > --- a/nepomuk/kioslaves/search/____kio_nepomuksearch.cpp > +++ b/nepomuk/kioslaves/search/____kio_nepomuksearch.cpp > @@ -182,7 +182,7 @@ void > Nepomuk2::SearchProtocol::____listDir( > > const KUrl& url ) > else { > SearchFolder folder( url, this ); > updateQueryUrlHistory( url ); > - folder.waitForListing(); > + folder.list(); > listEntry( KIO::UDSEntry(), true ); > finished(); > } > @@ -315,7 +315,7 @@ void > Nepomuk2::SearchProtocol::____listRoot() > > if ( query.isValid() ) { > // FIXME: Avoid this useless conversion to > searchUrl > and back > SearchFolder folder( query.toSearchUrl(), this = ); > - folder.waitForListing(); > + folder.list(); > } > > listEntry( KIO::UDSEntry(), true ); > diff --git a/nepomuk/kioslaves/search/____searchfolder.cpp > b/nepomuk/kioslaves/search/____searchfolder.cpp > index 3cd098a..38e4b1d 100644 > --- a/nepomuk/kioslaves/search/____searchfolder.cpp > +++ b/nepomuk/kioslaves/search/____searchfolder.cpp > > @@ -32,15 +32,19 @@ > #include > #include > #include > -#include > +#include > #include > -#include > #include > #include > #include > > +#include > > +#include > + > #include > #include > +#include > > +#include > > #include > #include > @@ -51,6 +55,8 @@ > #include > #include > > +using namespace Nepomuk2::Vocabulary; > +using namespace Soprano::Vocabulary; > > Nepomuk2::SearchFolder::____SearchFolder( const KUrl& > url, > > KIO::SlaveBase* slave ) > : QObject( 0 ), > @@ -60,23 +66,9 @@ > Nepomuk2::SearchFolder::____SearchFolder( const > > KUrl& url, KIO::SlaveBase* slave ) > // parse URL (this may fail in which case we fall > back to > pure SPARQL below) > Query::parseQueryUrl( url, m_query, m_sparqlQuery ); > > - m_client =3D new > Nepomuk2::Query::____QueryServiceClient(); > > - > - connect( m_client, SIGNAL( newEntries( const > QList____& ) ), > > - this, SLOT( slotNewEntries( const > QList____& ) ) ); > > - connect( m_client, SIGNAL( resultCount(int) ), > - this, SLOT( slotResultCount(int) ) ); > - connect( m_client, SIGNAL( finishedListing() ), > - this, SLOT( slotFinishedListing() ) ); > - connect( m_client, SIGNAL( error(QString) ), > - this, SLOT( slotFinishedListing() ) ); > - connect( m_client, SIGNAL( finishedListing() ), > - m_client, SLOT( deleteLater() ) ); > - > - if ( m_query.isValid() ) > - m_client->query( m_query ); > - else > - m_client->sparqlQuery( m_sparqlQuery ); > + if ( m_query.isValid() ) { > + m_sparqlQuery =3D m_query.toSparqlQuery(); > + } > } > > > @@ -84,36 +76,20 @@ > Nepomuk2::SearchFolder::~____SearchFolder() > { > } > > -void Nepomuk2::SearchFolder::____waitForListing() > > -{ > - m_eventLoop.exec(); > -} > - > -void Nepomuk2::SearchFolder::____slotNewEntries( const > QList____& results ) > > +void Nepomuk2::SearchFolder::list() > { > - KIO::UDSEntryList entryList; > - foreach(const Query::Result& result, results ) { > + //FIXME: Do the result count as well? > + Soprano::Model* model =3D > ResourceManager::instance()->____mainModel(); > > + Soprano::QueryResultIterator it =3D model->executeQu= ery( > m_sparqlQuery, Soprano::Query::____QueryLanguageSparql ); > > + while( it.next() ) { > + Query::Result result =3D extractResult( it ); > KIO::UDSEntry uds =3D statResult( result ); > if ( uds.count() ) { > - //kDebug()<< "listing" << > result.resource().resourceUri(____); > m_slave->listEntry(uds, false); > } > } > } > > - > -void Nepomuk2::SearchFolder::____slotResultCount( int > count ) > > -{ > - m_slave->totalSize( count ); > -} > - > - > -void Nepomuk2::SearchFolder::____slotFinishedListing() > > -{ > - m_eventLoop.exit(); > -} > - > - > namespace { > bool statFile( const KUrl& url, const KUrl& fileU= rl, > KIO::UDSEntry& uds ) > { > @@ -146,7 +122,7 @@ KIO::UDSEntry > Nepomuk2::SearchFolder::____statResult( const > Query::Result& result ) > > { > Resource res( result.resource() ); > const KUrl uri( res.resourceUri() ); > - KUrl nieUrl( > result[Nepomuk2::Vocabulary::____NIE::url()].uri() ); > > + KUrl nieUrl( result[NIE::url()].uri() ); > > // the additional bindings that we only have on > unix systems > // Either all are bound or none of them. > @@ -263,3 +239,36 @@ KIO::UDSEntry > Nepomuk2::SearchFolder::____statResult( const > Query::Result& result ) > > > return uds; > } > + > +// copied from the QueryService > +Nepomuk2::Query::Result > Nepomuk2::SearchFolder::____extractResult(const > > Soprano::QueryResultIterator& it) const > +{ > + Query::Result result( Resource::fromResourceUri( > it[0].uri() ) ); > + const Query::RequestPropertyMap map =3D > m_query.requestPropertyMap(); > + for( Query::RequestPropertyMap::____const_iterator > rit =3D > > map.begin(); rit !=3D map.constEnd(); rit++ ) { > + result.addRequestProperty( rit.value(), it.bindi= ng( > rit.key() ) ); > + } > + > + // make sure we do not store values twice > + QStringList names =3D it.bindingNames(); > + names.removeAll( QLatin1String("r" ) ); > + > + static const char* s_scoreVarName =3D"_n_f_t_m_s_"; > + static const char* s_excerptVarName =3D"_n_f_t_m_ex_= "; > + > + Soprano::BindingSet set; > + int score =3D 0; > + Q_FOREACH( const QString& var, names ) { > + if ( var =3D=3D QLatin1String( s_scoreVarName ) ) > + score =3D it[var].literal().toInt(); > + else if ( var =3D=3D QLatin1String( > s_excerptVarName ) ) > + result.setExcerpt( it[var].toString() ); > + else > + set.insert( var, it[var] ); > + } > + > + result.setAdditionalBindings( set ); > + result.setScore( ( double )score ); > + > + return result; > +} > \ No newline at end of file > diff --git a/nepomuk/kioslaves/search/____searchfolder.h > b/nepomuk/kioslaves/search/____searchfolder.h > index 794baaa..b475402 100644 > --- a/nepomuk/kioslaves/search/____searchfolder.h > +++ b/nepomuk/kioslaves/search/____searchfolder.h > > @@ -36,6 +36,9 @@ > #include > #include > > +namespace Soprano { > + class QueryResultIterator; > +} > > namespace Nepomuk2 { > namespace Query { > @@ -76,17 +79,7 @@ namespace Nepomuk2 { > /** > * List the results directly on the parent slav= e. > */ > - void waitForListing(); > - > - private Q_SLOTS: > - /// connected to the QueryServiceClient in the > search > thread > - void slotNewEntries( const > QList____& ); > > - > - /// connected to the QueryServiceClient in the > search > thread > - void slotResultCount( int ); > - > - /// connected to the QueryServiceClient in the > search > thread > - void slotFinishedListing(); > + void list(); > > private: > /** > @@ -94,6 +87,8 @@ namespace Nepomuk2 { > */ > KIO::UDSEntry statResult( const Query::Result& > result ); > > + Query::Result extractResult( const > Soprano::QueryResultIterator& it ) const; > + > // folder properties > KUrl m_url; > > > > > -- > Vishesh Handa > > > > > -- > Vishesh Handa > > > > > -- > Vishesh Handa > _______________________________________________ Nepomuk mailing list Nepomuk@kde.org https://mail.kde.org/mailman/listinfo/nepomuk