-rw-r--r-- | libopie2/opiepim/ChangeLog | 3 | ||||
-rw-r--r-- | libopie2/opiepim/backend/odatebookaccessbackend_sql.cpp | 1 | ||||
-rw-r--r-- | libopie2/opiepim/backend/otodoaccessbackend.cpp | 2 | ||||
-rw-r--r-- | libopie2/opiepim/backend/otodoaccessbackend.h | 2 | ||||
-rw-r--r-- | libopie2/opiepim/core/ocontactaccess.cpp | 9 | ||||
-rw-r--r-- | libopie2/opiepim/core/ocontactaccess.h | 15 | ||||
-rw-r--r-- | libopie2/opiepim/core/opimaccesstemplate.h | 43 |
7 files changed, 40 insertions, 35 deletions
diff --git a/libopie2/opiepim/ChangeLog b/libopie2/opiepim/ChangeLog index 2007744..320b189 100644 --- a/libopie2/opiepim/ChangeLog +++ b/libopie2/opiepim/ChangeLog @@ -1,23 +1,26 @@ +2005-01-03 Stefan Eilers <stefan@eilers-online.net> + * Fixing bug in API documentation + * Moving hasQuerySettings() and querySettings() to OPimAccessTemplate to be available for all frontends 2004-12-28 Stefan Eilers <stefan@eilers-online.net> * Make improved query by example accessable via frontend * Some API documentation improvement * Cleanup of backend api.. * Fixing bug #1501 2004-11-23 Stefan Eilers <stefan@eilers-online.net> * Implement fast and full featured version of sorted() for addressbook * Implement generic queryByExample for all Addressboook backends. It allows incremental search. * Update of API Documentation 2004-11-18 Holger Freyther <freyther@handhelds.org> * Every Access can give a set of Occurrences for a period or a datetime * QueryByExample, Find, Sort can be generically accessed by OPimBase pointer interface * OPimBackendOccurrence gets split up to OPimOccurrences by OPimTemplateBase * Add safeCast to various OPimRecords * Kill memleak in OPimTodo * Add SortVector implementations for OPimTodo and OPimContact 2004-??-?? The Opie Team <opie@handhelds.org> * Implemented some important modifications to allow to use OPimRecords as it is, without have to cast them. This makes it possible to write applications which handling pim data in a generic manner (see opimconvertion tool) (eilers)
\ No newline at end of file diff --git a/libopie2/opiepim/backend/odatebookaccessbackend_sql.cpp b/libopie2/opiepim/backend/odatebookaccessbackend_sql.cpp index 41b714e..629e4da 100644 --- a/libopie2/opiepim/backend/odatebookaccessbackend_sql.cpp +++ b/libopie2/opiepim/backend/odatebookaccessbackend_sql.cpp @@ -187,48 +187,49 @@ void ODateBookAccessBackend_SQL::update() // m_uids.clear(); return; } m_uids = extractUids( res ); } bool ODateBookAccessBackend_SQL::reload() { return load(); } bool ODateBookAccessBackend_SQL::save() { return m_driver->close(); // Shouldn't m_driver->sync be better than close ? (eilers) } QArray<int> ODateBookAccessBackend_SQL::allRecords()const { return m_uids; } QArray<int> ODateBookAccessBackend_SQL::queryByExample(const OPimEvent&, int, const QDateTime& ) { + qDebug( "Accessing ODateBookAccessBackend_SQL::queryByExample() which is not implemented!" ); return QArray<int>(); } void ODateBookAccessBackend_SQL::clear() { QString qu = "drop table datebook;"; qu += "drop table custom_data;"; OSQLRawQuery raw( qu ); OSQLResult res = m_driver->query( &raw ); reload(); } OPimEvent ODateBookAccessBackend_SQL::find( int uid ) const{ odebug << "ODateBookAccessBackend_SQL::find( " << uid << " )" << oendl; QString qu = "select *"; qu += "from datebook where uid = " + QString::number(uid); odebug << "Query: " << qu << "" << oendl; OSQLRawQuery raw( qu ); diff --git a/libopie2/opiepim/backend/otodoaccessbackend.cpp b/libopie2/opiepim/backend/otodoaccessbackend.cpp index f979976..c7ce123 100644 --- a/libopie2/opiepim/backend/otodoaccessbackend.cpp +++ b/libopie2/opiepim/backend/otodoaccessbackend.cpp @@ -33,49 +33,49 @@ #include <qintdict.h> namespace Opie { OPimTodoAccessBackend::OPimTodoAccessBackend() : OPimAccessBackend<OPimTodo>() { } OPimTodoAccessBackend::~OPimTodoAccessBackend() { } const uint OPimTodoAccessBackend::querySettings() const { return 0; } bool OPimTodoAccessBackend::hasQuerySettings (uint querySettings) const { return false; } UIDArray OPimTodoAccessBackend::queryByExample( const UIDArray& uidlist, const OPimTodo& query, int settings, - const QDateTime& endperiod )const + const QDateTime& startperiod )const { qDebug( "Accessing OPimTodoAccessBackend::queryByExample() which is not implemented!" ); return UIDArray(); // odebug << "Using Unaccelerated OPimContactAccessBackend implementation of queryByExample!" << oendl; // UIDArray m_currentQuery( uid_array.count() ); // uint arraycounter = 0; // for( uint it = 0; it < uid_array.count(); ++it ){ // /* Search all fields and compare them with query object. Store them into list // * if all fields matches. // */ // } } UIDArray OPimTodoAccessBackend::sorted( const UIDArray& events, bool asc, int sortOrder, int sortFilter, const QArray<int>& categories )const { odebug << "Using Unaccelerated TodoList sorted Implementation" << oendl; Internal::OPimTodoSortVector vector(events.count(), asc,sortOrder ); int item = 0; diff --git a/libopie2/opiepim/backend/otodoaccessbackend.h b/libopie2/opiepim/backend/otodoaccessbackend.h index 870ee57..06cece3 100644 --- a/libopie2/opiepim/backend/otodoaccessbackend.h +++ b/libopie2/opiepim/backend/otodoaccessbackend.h @@ -43,49 +43,49 @@ public: const QDate& end, bool includeNoDates )const = 0; virtual UIDArray overDue()const = 0; virtual void removeAllCompleted() = 0; /** * Common and probably inefficent implementation * for queryByExample, matchRegexp, sorted * and occurrences */ //@{ /** * Return all possible settings. * @return All settings provided by the current backend * (i.e.: query_WildCards & query_IgnoreCase) */ const uint querySettings() const; /** * Check whether settings are correct. * @return <i>true</i> if the given settings are correct and possible. */ bool hasQuerySettings (uint querySettings) const; - UIDArray queryByExample( const UIDArray& uidlist, const OPimTodo& query, int settings, const QDateTime& endperiod = QDateTime() )const; + UIDArray queryByExample( const UIDArray& uidlist, const OPimTodo& query, int settings, const QDateTime& startperiod = QDateTime() )const; UIDArray sorted( const UIDArray&, bool asc, int, int, const QArray<int>& )const; OPimBackendOccurrence::List occurrences( const QDate&, const QDate& )const; //@} private: class Private; Private *d; }; } /** * \fn Opie::OPimBackendOccurrence::List Opie::OPimTodoAccessBackend::occurrences(const QDate& start,const QDate& end)const * \brief Return occurrences for a period of time * * This method will return the 'effective' Todos and also * 'Overdue' Todos. Overdues will be shown on the 'current' * day if it is in the range or on \par start. If the overdue * is inside the 'Effective Todos' we will skip the * special overdue handling. * * */ diff --git a/libopie2/opiepim/core/ocontactaccess.cpp b/libopie2/opiepim/core/ocontactaccess.cpp index 9bbc820..9d18d47 100644 --- a/libopie2/opiepim/core/ocontactaccess.cpp +++ b/libopie2/opiepim/core/ocontactaccess.cpp @@ -97,57 +97,48 @@ OPimContactAccess::~OPimContactAccess () save(); // delete m_backEnd; is done by template.. } bool OPimContactAccess::save () { /* If the database was changed externally, we could not save the * Data. This will remove added items which is unacceptable ! * Therefore: Reload database and merge the data... */ if ( OPimAccessTemplate<OPimContact>::wasChangedExternally() ) reload(); bool status = OPimAccessTemplate<OPimContact>::save(); if ( !status ) return false; /* Now tell everyone that new data is available. */ QCopEnvelope e( "QPE/PIM", "addressbookUpdated()" ); return true; } -const uint OPimContactAccess::querySettings() -{ - return ( m_backEnd->querySettings() ); -} - -bool OPimContactAccess::hasQuerySettings ( int querySettings ) const -{ - return ( m_backEnd->hasQuerySettings ( querySettings ) ); -} #if 0 OPimRecordList<OPimContact> OPimContactAccess::sorted( bool ascending, int sortOrder, int sortFilter, int cat ) const { QArray<int> matchingContacts = m_backEnd -> sorted( ascending, sortOrder, sortFilter, cat ); return ( OPimRecordList<OPimContact>(matchingContacts, this) ); } #endif bool OPimContactAccess::wasChangedExternally()const { return ( m_backEnd->wasChangedExternally() ); } void OPimContactAccess::copMessage( const QCString &msg, const QByteArray & ) { if ( msg == "addressbookUpdated()" ){ emit signalChanged ( this ); } else if ( msg == "flush()" ) { save (); } else if ( msg == "reload()" ) { reload (); diff --git a/libopie2/opiepim/core/ocontactaccess.h b/libopie2/opiepim/core/ocontactaccess.h index 5051321..9a2ecaf 100644 --- a/libopie2/opiepim/core/ocontactaccess.h +++ b/libopie2/opiepim/core/ocontactaccess.h @@ -95,63 +95,48 @@ class OPimContactAccess: public QObject, public OPimAccessTemplate<OPimContact> SortAnniversary, SortBirthday, SortGender }; /** * Create Database with contacts (addressbook). * @param appname Name of application which wants access to the database * (i.e. "todolist") * @param filename The name of the database file. If not set, the default one * is used. * @param backend Pointer to an alternative Backend. If not set, we will use * the default backend. * @param handlesync If <b>true</b> the database stores the current state * automatically if it receives the signals <i>flush()</i> and <i>reload()</i> * which are used before and after synchronisation. If the application wants * to react itself, it should be disabled by setting it to <b>false</b> * @see OPimContactAccessBackend */ OPimContactAccess (const QString appname, const QString filename = 0l, OPimContactAccessBackend* backend = 0l, bool handlesync = true); ~OPimContactAccess (); - /** - * Return all possible settings for queryByExample(). - * @return All settings provided by the current backend - * (i.e.: WildCards & IgnoreCase) - * @see QuerySettings in OPimBase for details of the parameter, queryByExample() - */ - const uint querySettings(); - - /** - * Check whether settings are correct for queryByExample(). - * @return <i>true</i> if the given settings are correct and possible. - * @see QuerySettings in OPimBase for details of the parameter - */ - bool hasQuerySettings ( int querySettings ) const; - /** * if the resource was changed externally. * You should use the signal instead of polling possible changes ! */ bool wasChangedExternally()const; /** Save contacts database. * Save is more a "commit". After calling this function, all changes are public available. * @return true if successful */ bool save(); /** * Return identification of used records */ int rtti() const; signals: /* Signal is emitted if the database was changed. Therefore * we may need to reload to stay consistent. * @param which Pointer to the database who created this event. This pointer * is useful if an application has to handle multiple databases at the same time. * @see reload() diff --git a/libopie2/opiepim/core/opimaccesstemplate.h b/libopie2/opiepim/core/opimaccesstemplate.h index 3875f09..823f03d 100644 --- a/libopie2/opiepim/core/opimaccesstemplate.h +++ b/libopie2/opiepim/core/opimaccesstemplate.h @@ -66,87 +66,102 @@ public: }; typedef OPimRecordList<T> List; typedef OPimAccessBackend<T> BackEnd; typedef OPimCache<T> Cache; //@{ OPimAccessTemplate( BackEnd* end); virtual ~OPimAccessTemplate(); //@} //@{ bool load(); virtual bool reload(); bool save(); void clear() ; //@} bool wasChangedExternally()const; //@{ virtual List allRecords()const; virtual List matchRegexp( const QRegExp &r ) const; + /** + * Return all possible settings for queryByExample(). + * @return All settings provided by the current backend + * (i.e.: WildCards & IgnoreCase) + * @see QuerySettings in OPimBase for details of the parameter, queryByExample() + */ + const uint querySettings(); + + /** + * Check whether settings are correct for queryByExample(). + * @return <i>true</i> if the given settings are correct and possible. + * @see QuerySettings in OPimBase for details of the parameter + */ + bool hasQuerySettings ( int querySettings ) const; + /** * Query by example search interface. * "Query by Example" provides a very powerful search engine. Use the query object * (this may be a contact, a todo or databook event) * as a search mask which is converted into a query regarding the querySettings. If a time period is needed - * (as for OpimBase::DateDiff), you have to use the date/time in the query object and the endperiod (the last parameter). + * (as for OpimBase::DateDiff), you have to use the date/time in the query object and the startperiod (the last parameter). * @see QuerySettings in class OPimBase * @param query The object which contains the query set * @param querySettings This parameter defines what should be searched and how the query should be interpreted - * @param endperiod Defines the end of a period for some special queries. + * @param startperiod Defines the start of a period for some special queries. */ - virtual List queryByExample( const T& query, int querySettings, const QDateTime& endperiod = QDateTime() ); + virtual List queryByExample( const T& query, int querySettings, const QDateTime& startperiod = QDateTime() ); /** * Generic query by example search interface. This is a special version which handles generic OPimRecord types. They are converted * automatically into the right datatype. * "Query by Example" provides a very powerful search engine. Use the query object (this may be a contact, a todo or databook event) * as a search mask which is converted into a query regarding the querySettings. If a time period is needed - * (as for OpimBase::DateDiff), you have to use the date/time in the query object and the endperiod (the last parameter). + * (as for OpimBase::DateDiff), you have to use the date/time in the query object and the startperiod (the last parameter). * @see QuerySettings in class OPimBase * @param query The object which contains the query set * @param querySettings This parameter defines what should be searched and how the query should be interpreted - * @param endperiod Defines the end of a period for some special queries. + * @param startperiod Defines the start of a period for some special queries. */ - virtual List queryByExample( const OPimRecord* query, int querySettings, const QDateTime& endperiod = QDateTime() ); + virtual List queryByExample( const OPimRecord* query, int querySettings, const QDateTime& startperiod = QDateTime() ); /** * Incremental query by example search interface. Providing incremental search, this one provides the feature * to search in a list of records which may be returned by an other search. * "Query by Example" provides a very powerful search engine. Use the query object (this may be a contact, a todo or databook event) * as a search mask which is converted into a query regarding the querySettings. If a time period is needed - * (as for OpimBase::DateDiff), you have to use the date/time in the query object and the endperiod (the last parameter). + * (as for OpimBase::DateDiff), you have to use the date/time in the query object and the startperiod (the last parameter). * @see QuerySettings in class OPimBase * @param uidlist List of uid's which should be incorporated into the next search * @param query The object which contains the query set * @param querySettings This parameter defines what should be searched and how the query should be interpreted - * @param endperiod Defines the end of a period for some special queries. + * @param startperiod Defines the start of a period for some special queries. */ virtual List queryByExample( const OPimAccessTemplate::List& uidlist, const T& query, int querySettings, - const QDateTime& endperiod = QDateTime() ); + const QDateTime& startperiod = QDateTime() ); virtual T find( UID uid )const; virtual T find( UID uid, const QArray<int>&, uint current, typename OTemplateBase<T>::CacheDirection dir = OTemplateBase<T>::Forward )const; //@} /** * Get sorted lists.. * @see OPimContactAccess, OPimTodoAccess and ODateBookAccess regarding more info for the following params: * @param list of UID's received by allRecords() or others... * @param sortOrder Setting the sort order defined by enum SortOrder * @param ascending Sort in ascending order if true, otherwise descending * @param sortFilter Setting the sort filter defined by enum SortFilter * @param cat number of category. */ virtual List sorted( const List& list, bool ascending, int sortOrder, int sortFilter, int cat )const; /** * Get sorted lists.. * @see OPimContactAccess, OPimTodoAccess and ODateBookAccess regarding more info for the following params: * @param list of UID's received by allRecords() or others... * @param sortOrder Setting the sort order defined by enum SortOrder * @param ascending Sort in ascending order if true, otherwise descending @@ -287,48 +302,58 @@ typename OPimAccessTemplate<T>::List OPimAccessTemplate<T>::allRecords()const { QArray<int> ints = m_backEnd->allRecords(); List lis(ints, this ); return lis; } /** * return a List of records * that match the regex */ template <class T> typename OPimAccessTemplate<T>::List OPimAccessTemplate<T>::matchRegexp( const QRegExp &r )const { QArray<int> ints = m_backEnd->matchRegexp( r ); List lis(ints, this ); return lis; } /** * find the OPimRecord uid */ template <class T> QArray<int> OPimAccessTemplate<T>::records()const { return m_backEnd->allRecords(); } +template <class T> +const uint OPimAccessTemplate<T>::querySettings(){ + return m_backEnd->querySettings(); +} + +template <class T> +bool OPimAccessTemplate<T>::hasQuerySettings ( int querySettings ) const { + return m_backEnd->hasQuerySettings( querySettings ); +} + template <class T> typename OPimAccessTemplate<T>::List OPimAccessTemplate<T>::queryByExample( const T& t, int settings, const QDateTime& d ) { QArray<int> ints = m_backEnd->queryByExample( t, settings, d ); List list(ints, this ); return list; } template <class T> typename OPimAccessTemplate<T>::List OPimAccessTemplate<T>::queryByExample( const OPimRecord* t, int settings, const QDateTime& d ) { T tempInstance; if ( t->rtti() == tempInstance.rtti() ) { QArray<int> ints = m_backEnd->queryByExample( t, settings, d ); List list( ints, this ); return list; } else { owarn << "Query not possible: Objecttype mismatch" << oendl; } return List(); |