diff options
Diffstat (limited to 'kresources/scalix/knotes/resourcescalix.cpp')
-rw-r--r-- | kresources/scalix/knotes/resourcescalix.cpp | 425 |
1 files changed, 0 insertions, 425 deletions
diff --git a/kresources/scalix/knotes/resourcescalix.cpp b/kresources/scalix/knotes/resourcescalix.cpp deleted file mode 100644 index 62b0daf48..000000000 --- a/kresources/scalix/knotes/resourcescalix.cpp +++ /dev/null @@ -1,425 +0,0 @@ -/* - This file is part of the scalix resource - based on the kolab resource. - - Copyright (c) 2004 Bo Thorsen <[email protected]> - Copyright (c) 2004 Till Adam <[email protected]> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. - - In addition, as a special exception, the copyright holders give - permission to link the code of this program with any edition of - the TQt library by Trolltech AS, Norway (or with modified versions - of TQt that use the same license as TQt), and distribute linked - combinations including the two. You must obey the GNU General - Public License in all respects for all of the code used other than - TQt. If you modify this file, you may extend this exception to - your version of the file, but you are not obligated to do so. If - you do not wish to do so, delete this exception statement from - your version. -*/ - -#include "resourcescalix.h" - -#include <knotes/resourcemanager.h> - -#include <libkcal/icalformat.h> - -#include <kdebug.h> -#include <kglobal.h> - -using namespace Scalix; - -static const char* configGroupName = "Note"; -static const char* kmailContentsType = "Note"; -static const char* attachmentMimeType = "application/x-vnd.kolab.note"; -static const char* inlineMimeType = "text/calendar"; - -ResourceScalix::ResourceScalix( const TDEConfig *config ) - : ResourceNotes( config ), ResourceScalixBase( "ResourceScalix-KNotes" ), - mCalendar( TQString::fromLatin1("UTC") ) -{ - setType( "scalix" ); -} - -ResourceScalix::~ResourceScalix() -{ -} - -bool ResourceScalix::doOpen() -{ - TDEConfig config( configFile() ); - config.setGroup( configGroupName ); - - // Get the list of Notes folders from KMail - TQValueList<KMailICalIface::SubResource> subResources; - if ( !kmailSubresources( subResources, kmailContentsType ) ) - return false; - - // Make the resource map from the folder list - TQValueList<KMailICalIface::SubResource>::ConstIterator it; - mSubResources.clear(); - for ( it = subResources.begin(); it != subResources.end(); ++it ) { - const TQString subResource = (*it).location; - const bool active = config.readBoolEntry( subResource, true ); - mSubResources[ subResource ] = Scalix::SubResource( active, (*it).writable, (*it).label ); - } - - return true; -} - -void ResourceScalix::doClose() -{ - TDEConfig config( configFile() ); - config.setGroup( configGroupName ); - Scalix::ResourceMap::ConstIterator it; - for ( it = mSubResources.begin(); it != mSubResources.end(); ++it ) - config.writeEntry( it.key(), it.data().active() ); -} - -bool ResourceScalix::loadSubResource( const TQString& subResource, - const TQString &mimetype ) -{ - // Get the list of journals - int count = 0; - if ( !kmailIncidencesCount( count, mimetype, subResource ) ) { - kdError() << "Communication problem in ResourceScalix::load()\n"; - return false; - } - - TQMap<TQ_UINT32, TQString> lst; - if( !kmailIncidences( lst, mimetype, subResource, 0, count ) ) { - kdError(5500) << "Communication problem in " - << "ResourceScalix::getIncidenceList()\n"; - return false; - } - - kdDebug(5500) << "Notes scalix resource: got " << lst.count() << " notes in " << subResource << endl; - - // Populate with the new entries - const bool silent = mSilent; - mSilent = true; - TQMap<TQ_UINT32, TQString>::Iterator it; - for ( it = lst.begin(); it != lst.end(); ++it ) { - KCal::Journal* journal = addNote( it.data(), subResource, it.key(), mimetype ); - if ( !journal ) - kdDebug(5500) << "loading note " << it.key() << " failed" << endl; - else - manager()->registerNote( this, journal ); - } - mSilent = silent; - - return true; -} - -bool ResourceScalix::load() -{ - // We get a fresh list of events, so clean out the old ones - mCalendar.deleteAllEvents(); - mUidMap.clear(); - - bool rc = true; - Scalix::ResourceMap::ConstIterator itR; - for ( itR = mSubResources.begin(); itR != mSubResources.end(); ++itR ) { - if ( !itR.data().active() ) - // This subResource is disabled - continue; - - TQString mimetype = inlineMimeType; - rc &= loadSubResource( itR.key(), mimetype ); - mimetype = attachmentMimeType; - rc &= loadSubResource( itR.key(), mimetype ); - } - - return rc; -} - -bool ResourceScalix::save() -{ - // Nothing to do here, we save everything in incidenceUpdated() - return true; -} - -bool ResourceScalix::addNote( KCal::Journal* journal ) -{ - return addNote( journal, TQString(), 0 ); -} - -KCal::Journal* ResourceScalix::addNote( const TQString& data, const TQString& subresource, - TQ_UINT32 sernum, const TQString& ) -{ - KCal::Journal* journal = 0; - // FIXME: This does not take into account the time zone! - KCal::ICalFormat formatter; - journal = static_cast<KCal::Journal*>( formatter.fromString( data ) ); - - Q_ASSERT( journal ); - if( journal && !mUidMap.contains( journal->uid() ) ) - if ( addNote( journal, subresource, sernum ) ) - return journal; - else - delete journal; - return 0; -} - -bool ResourceScalix::addNote( KCal::Journal* journal, - const TQString& subresource, TQ_UINT32 sernum ) -{ - kdDebug(5500) << "ResourceScalix::addNote( KCal::Journal*, '" << subresource << "', " << sernum << " )\n"; - - journal->registerObserver( this ); - - // Find out if this note was previously stored in KMail - bool newNote = subresource.isEmpty(); - mCalendar.addJournal( journal ); - - TQString resource = - newNote ? findWritableResource( mSubResources ) : subresource; - if ( resource.isEmpty() ) // canceled - return false; - - if ( !mSilent ) { - KCal::ICalFormat formatter; - const TQString xml = formatter.toString( journal ); - kdDebug(5500) << k_funcinfo << "XML string:\n" << xml << endl; - - if( !kmailUpdate( resource, sernum, xml, attachmentMimeType, journal->uid() ) ) { - kdError(5500) << "Communication problem in ResourceScalix::addNote()\n"; - return false; - } - } - - if ( !resource.isEmpty() && sernum != 0 ) { - mUidMap[ journal->uid() ] = StorageReference( resource, sernum ); - return true; - } - - return false; -} - -bool ResourceScalix::deleteNote( KCal::Journal* journal ) -{ - const TQString uid = journal->uid(); - if ( !mUidMap.contains( uid ) ) - // Odd - return false; - - if ( !mSilent ) { - kmailDeleteIncidence( mUidMap[ uid ].resource(), - mUidMap[ uid ].serialNumber() ); - } - mUidMap.remove( uid ); - manager()->deleteNote( journal ); - mCalendar.deleteJournal( journal ); - return true; -} - -KCal::Alarm::List ResourceScalix::alarms( const TQDateTime& from, const TQDateTime& to ) -{ - KCal::Alarm::List alarms; - KCal::Journal::List notes = mCalendar.journals(); - KCal::Journal::List::ConstIterator note; - for ( note = notes.begin(); note != notes.end(); ++note ) - { - TQDateTime preTime = from.addSecs( -1 ); - KCal::Alarm::List::ConstIterator it; - for( it = (*note)->alarms().begin(); it != (*note)->alarms().end(); ++it ) - { - if ( (*it)->enabled() ) - { - TQDateTime dt = (*it)->nextRepetition( preTime ); - if ( dt.isValid() && dt <= to ) - alarms.append( *it ); - } - } - } - - return alarms; -} - -void ResourceScalix::incidenceUpdated( KCal::IncidenceBase* i ) -{ - TQString subResource; - TQ_UINT32 sernum; - if ( mUidMap.contains( i->uid() ) ) { - subResource = mUidMap[ i->uid() ].resource(); - sernum = mUidMap[ i->uid() ].serialNumber(); - } else { // can this happen? - subResource = findWritableResource( mSubResources ); - if ( subResource.isEmpty() ) // canceled - return; - sernum = 0; - } - - KCal::Journal* journal = dynamic_cast<KCal::Journal*>( i ); - KCal::ICalFormat formatter; - const TQString xml = formatter.toString( journal ); - if( !xml.isEmpty() && kmailUpdate( subResource, sernum, xml, attachmentMimeType, journal->uid() ) ) - mUidMap[ i->uid() ] = StorageReference( subResource, sernum ); -} - -/* - * These are the DCOP slots that KMail call to notify when something - * changed. - */ -bool ResourceScalix::fromKMailAddIncidence( const TQString& type, - const TQString& subResource, - TQ_UINT32 sernum, - int, - const TQString& note ) -{ - // Check if this is a note - if( type != kmailContentsType ) return false; - - const bool silent = mSilent; - mSilent = true; - TQString mimetype = inlineMimeType; - KCal::Journal* journal = addNote( note, subResource, sernum, mimetype ); - if ( journal ) - manager()->registerNote( this, journal ); - mSilent = silent; - return true; -} - -void ResourceScalix::fromKMailDelIncidence( const TQString& type, - const TQString& /*subResource*/, - const TQString& uid ) -{ - // Check if this is a note - if( type != kmailContentsType ) return; - - kdDebug(5500) << "ResourceScalix::fromKMailDelIncidence( " << type << ", " << uid - << " )" << endl; - - const bool silent = mSilent; - mSilent = true; - KCal::Journal* j = mCalendar.journal( uid ); - if( j ) - deleteNote( j ); - mSilent = silent; -} - -void ResourceScalix::fromKMailRefresh( const TQString& type, - const TQString& /*subResource*/ ) -{ - if ( type == kmailContentsType ) - load(); // ### should call loadSubResource(subResource) probably -} - -void ResourceScalix::fromKMailAddSubresource( const TQString& type, - const TQString& subResource, - const TQString& mimetype, - bool writable ) -{ - if ( type != kmailContentsType ) - // Not ours - return; - - if ( mSubResources.contains( subResource ) ) - // Already registered - return; - - TDEConfig config( configFile() ); - config.setGroup( configGroupName ); - - bool active = config.readBoolEntry( subResource, true ); - mSubResources[ subResource ] = Scalix::SubResource( active, writable, subResource ); - loadSubResource( subResource, mimetype ); - emit signalSubresourceAdded( this, type, subResource ); -} - -void ResourceScalix::fromKMailDelSubresource( const TQString& type, - const TQString& subResource ) -{ - if ( type != configGroupName ) - // Not ours - return; - - if ( !mSubResources.contains( subResource ) ) - // Not registered - return; - - // Ok, it's our job, and we have it here - mSubResources.erase( subResource ); - - TDEConfig config( configFile() ); - config.setGroup( configGroupName ); - config.deleteEntry( subResource ); - config.sync(); - - // Make a list of all uids to remove - Scalix::UidMap::ConstIterator mapIt; - TQStringList uids; - for ( mapIt = mUidMap.begin(); mapIt != mUidMap.end(); ++mapIt ) - if ( mapIt.data().resource() == subResource ) - // We have a match - uids << mapIt.key(); - - // Finally delete all the incidences - if ( !uids.isEmpty() ) { - const bool silent = mSilent; - mSilent = true; - TQStringList::ConstIterator it; - for ( it = uids.begin(); it != uids.end(); ++it ) { - KCal::Journal* j = mCalendar.journal( *it ); - if( j ) - deleteNote( j ); - } - mSilent = silent; - } - - emit signalSubresourceRemoved( this, type, subResource ); -} - -void ResourceScalix::fromKMailAsyncLoadResult( const TQMap<TQ_UINT32, TQString>& map, - const TQString& type, - const TQString& folder ) -{ - // We are only interested in notes - if ( ( type != attachmentMimeType ) && ( type != inlineMimeType ) ) return; - // Populate with the new entries - const bool silent = mSilent; - mSilent = true; - TQString mimetype = inlineMimeType; - for( TQMap<TQ_UINT32, TQString>::ConstIterator it = map.begin(); it != map.end(); ++it ) { - KCal::Journal* journal = addNote( it.data(), folder, it.key(), mimetype ); - if ( !journal ) - kdDebug(5500) << "loading note " << it.key() << " failed" << endl; - else - manager()->registerNote( this, journal ); - } - mSilent = silent; -} - - -TQStringList ResourceScalix::subresources() const -{ - return mSubResources.keys(); -} - -bool ResourceScalix::subresourceActive( const TQString& res ) const -{ - if ( mSubResources.contains( res ) ) { - return mSubResources[ res ].active(); - } - - // Safe default bet: - kdDebug(5650) << "subresourceActive( " << res << " ): Safe bet\n"; - - return true; -} - - -#include "resourcescalix.moc" |