• Skip to content
  • Skip to link menu
KDE 3.5 API Reference
  • KDE API Reference
  • API Reference
  • Sitemap
  • Contact Us
 

kio

ktrader.cpp

Go to the documentation of this file.
00001 /* This file is part of the KDE libraries
00002    Copyright (C) 2000 Torben Weis <weis@kde.org>
00003 
00004    This library is free software; you can redistribute it and/or
00005    modify it under the terms of the GNU Library General Public
00006    License version 2 as published by the Free Software Foundation.
00007 
00008    This library is distributed in the hope that it will be useful,
00009    but WITHOUT ANY WARRANTY; without even the implied warranty of
00010    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00011    Library General Public License for more details.
00012 
00013    You should have received a copy of the GNU Library General Public License
00014    along with this library; see the file COPYING.LIB.  If not, write to
00015    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00016    Boston, MA 02110-1301, USA.
00017 */
00018 
00019 #include "ktrader.h"
00020 #include "ktraderparsetree.h"
00021 
00022 #include <qtl.h>
00023 #include <qbuffer.h>
00024 
00025 #include <kuserprofile.h>
00026 #include <kstandarddirs.h>
00027 #include <kstaticdeleter.h>
00028 #include <kdebug.h>
00029 
00030 template class KStaticDeleter<KTrader>;
00031 
00032 using namespace KIO;
00033 
00034 class KTraderSorter
00035 {
00036 public:
00037   KTraderSorter() { m_pService = 0; };
00038   KTraderSorter( const KTraderSorter& s ) : m_userPreference( s.m_userPreference ),
00039     m_bAllowAsDefault( s.m_bAllowAsDefault ),
00040     m_traderPreference( s.m_traderPreference ), m_pService( s.m_pService ) { }
00041   KTraderSorter( const KService::Ptr &_service, double _pref1, int _pref2, bool _default )
00042   { m_pService = _service;
00043     m_userPreference = _pref2;
00044     m_traderPreference = _pref1;
00045     m_bAllowAsDefault = _default;
00046   }
00047 
00048   KService::Ptr service() const { return m_pService; }
00049 
00050   bool operator< ( const KTraderSorter& ) const;
00051 
00052 private:
00057   int m_userPreference;
00061   bool m_bAllowAsDefault;
00062 
00067   double m_traderPreference;
00068 
00069   KService::Ptr m_pService;
00070 };
00071 
00072 bool KTraderSorter::operator< ( const KTraderSorter& _o ) const
00073 {
00074   if ( _o.m_bAllowAsDefault && !m_bAllowAsDefault )
00075     return true;
00076   if ( _o.m_userPreference > m_userPreference )
00077     return true;
00078   if ( _o.m_userPreference < m_userPreference )
00079     return false;
00080   if ( _o.m_traderPreference > m_traderPreference )
00081     return true;
00082   return false;
00083 }
00084 
00085 // --------------------------------------------------
00086 
00087 KTrader* KTrader::s_self = 0;
00088 static KStaticDeleter<KTrader> ktradersd;
00089 
00090 KTrader* KTrader::self()
00091 {
00092     if ( !s_self )
00093     ktradersd.setObject( s_self, new KTrader );
00094 
00095     return s_self;
00096 }
00097 
00098 KTrader::KTrader()
00099 {
00100 }
00101 
00102 KTrader::~KTrader()
00103 {
00104 }
00105 
00106 KTrader::OfferList KTrader::query( const QString& _servicetype, const QString& _constraint,
00107                                    const QString& _preferences ) const
00108 {
00109     return query( _servicetype, QString::null, _constraint, _preferences );
00110 }
00111 
00112 KTrader::OfferList KTrader::query( const QString& _servicetype, const QString& _genericServiceType,
00113                                    const QString& _constraint,
00114                                    const QString& _preferences ) const
00115 {
00116   // TODO: catch errors here
00117   ParseTreeBase::Ptr constr;
00118   ParseTreeBase::Ptr prefs;
00119 
00120   if ( !_constraint.isEmpty() )
00121     constr = KIO::parseConstraints( _constraint );
00122 
00123   if ( !_preferences.isEmpty() )
00124     prefs = KIO::parsePreferences( _preferences );
00125 
00126   KServiceTypeProfile::OfferList lst;
00127   KTrader::OfferList ret;
00128 
00129   // Get all services of this service type.
00130   lst = KServiceTypeProfile::offers( _servicetype, _genericServiceType );
00131   if ( lst.count() == 0 )
00132     return ret;
00133 
00134   if ( !!constr )
00135   {
00136     // Find all services matching the constraint
00137     // and remove the other ones
00138     KServiceTypeProfile::OfferList::Iterator it = lst.begin();
00139     while( it != lst.end() )
00140     {
00141       if ( matchConstraint( constr, (*it).service(), lst ) != 1 )
00142     it = lst.remove( it );
00143       else
00144     ++it;
00145     }
00146   }
00147 
00148   if ( !!prefs )
00149   {
00150     QValueList<KTraderSorter> sorter;
00151     KServiceTypeProfile::OfferList::Iterator it = lst.begin();
00152     for( ; it != lst.end(); ++it )
00153     {
00154       PreferencesReturn p = matchPreferences( prefs, (*it).service(), lst );
00155       if ( p.type == PreferencesReturn::PRT_DOUBLE )
00156     sorter.append( KTraderSorter( (*it).service(), p.f, (*it).preference(), (*it).allowAsDefault() ) );
00157     }
00158     qBubbleSort( sorter );
00159 
00160     QValueList<KTraderSorter>::Iterator it2 = sorter.begin();
00161     for( ; it2 != sorter.end(); ++it2 )
00162       ret.prepend( (*it2).service() );
00163   }
00164   else
00165   {
00166     KServiceTypeProfile::OfferList::Iterator it = lst.begin();
00167     for( ; it != lst.end(); ++it )
00168       ret.append( (*it).service() );
00169   }
00170 
00171 #ifndef NDEBUG
00172   QString query = _servicetype;
00173   if ( !_genericServiceType.isEmpty() ) {
00174       query += ", ";
00175       query += _genericServiceType;
00176   }
00177   kdDebug(7014) << "query for " << query
00178                 << " : returning " << ret.count() << " offers" << endl;
00179 #endif
00180   return ret;
00181 }
00182 
00183 void KTrader::virtual_hook( int, void* )
00184 { /*BASE::virtual_hook( id, data );*/ }
00185 
00186 #include "ktrader.moc"

kio

Skip menu "kio"
  • Main Page
  • Modules
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

API Reference

Skip menu "API Reference"
  • dcop
  • DNSSD
  • interfaces
  • Kate
  • kconf_update
  • KDECore
  • KDED
  • kdefx
  • KDEsu
  • kdeui
  • KDocTools
  • KHTML
  • KImgIO
  • KInit
  • kio
  • kioslave
  • KJS
  • KNewStuff
  • KParts
  • KUtils
Generated for API Reference by doxygen 1.5.9
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal