summaryrefslogtreecommitdiffstats
path: root/kopete/protocols/groupwise/libgroupwise/privacymanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kopete/protocols/groupwise/libgroupwise/privacymanager.cpp')
-rw-r--r--kopete/protocols/groupwise/libgroupwise/privacymanager.cpp251
1 files changed, 251 insertions, 0 deletions
diff --git a/kopete/protocols/groupwise/libgroupwise/privacymanager.cpp b/kopete/protocols/groupwise/libgroupwise/privacymanager.cpp
new file mode 100644
index 00000000..3d42207b
--- /dev/null
+++ b/kopete/protocols/groupwise/libgroupwise/privacymanager.cpp
@@ -0,0 +1,251 @@
+/*
+ Kopete Groupwise Protocol
+ privacymanager.cpp - stores the user's privacy information and maintains it on the server
+
+ Copyright (c) 2004 SUSE Linux AG http://www.suse.com
+
+ Kopete (c) 2002-2004 by the Kopete developers <kopete-devel@kde.org>
+
+ *************************************************************************
+ * *
+ * This library is free software; you can redistribute it and/or *
+ * modify it under the terms of the GNU Lesser General Public *
+ * License as published by the Free Software Foundation; either *
+ * version 2 of the License, or (at your option) any later version. *
+ * *
+ *************************************************************************
+*/
+
+#include "client.h"
+#include "tasks/privacyitemtask.h"
+#include "userdetailsmanager.h"
+
+#include "privacymanager.h"
+
+PrivacyManager::PrivacyManager( Client * client, const char *name)
+ : QObject(client, name), m_client( client )
+{
+}
+
+PrivacyManager::~PrivacyManager()
+{
+}
+
+bool PrivacyManager::defaultAllow()
+{
+ return !m_defaultDeny;
+}
+
+bool PrivacyManager::defaultDeny()
+{
+ return m_defaultDeny;
+}
+
+QStringList PrivacyManager::allowList()
+{
+ return m_allowList;
+}
+
+QStringList PrivacyManager::denyList()
+{
+ return m_denyList;
+}
+
+bool PrivacyManager::isPrivacyLocked()
+{
+ return m_locked;
+}
+
+bool PrivacyManager::isBlocked( const QString & dn )
+{
+ if ( m_defaultDeny )
+ return !m_allowList.contains( dn );
+ else
+ return m_denyList.contains( dn );
+}
+
+void PrivacyManager::setAllow( const QString & dn )
+{
+ if ( m_defaultDeny )
+ {
+ if ( !m_allowList.contains( dn ) )
+ addAllow( dn );
+ }
+ else
+ {
+ if ( m_denyList.contains( dn ) )
+ removeDeny( dn );
+ }
+}
+
+void PrivacyManager::setDeny( const QString & dn )
+{
+ if ( m_defaultDeny )
+ {
+ if ( m_allowList.contains( dn ) )
+ removeAllow( dn );
+ }
+ else
+ {
+ if ( !m_denyList.contains( dn ) )
+ addDeny( dn );
+ }
+}
+
+
+void PrivacyManager::setDefaultAllow( bool allow )
+{
+ PrivacyItemTask * pit = new PrivacyItemTask( m_client->rootTask() );
+ pit->defaultPolicy( !allow );
+ connect( pit, SIGNAL( finished() ), SLOT( slotDefaultPolicyChanged() ) );
+ pit->go( true );
+}
+
+void PrivacyManager::setDefaultDeny( bool deny )
+{
+ PrivacyItemTask * pit = new PrivacyItemTask( m_client->rootTask() );
+ pit->defaultPolicy( deny);
+ connect( pit, SIGNAL( finished() ), SLOT( slotDefaultPolicyChanged() ) );
+ pit->go( true );
+}
+
+void PrivacyManager::addAllow( const QString & dn )
+{
+ // start off a CreatePrivacyItemTask
+ PrivacyItemTask * pit = new PrivacyItemTask( m_client->rootTask() );
+ pit->allow( dn );
+ connect( pit, SIGNAL( finished() ), SLOT( slotAllowAdded() ) );
+ pit->go( true );
+}
+
+void PrivacyManager::addDeny( const QString & dn )
+{
+ // start off a CreatePrivacyItemTask
+ PrivacyItemTask * pit = new PrivacyItemTask( m_client->rootTask() );
+ pit->deny( dn );
+ connect( pit, SIGNAL( finished() ), SLOT( slotDenyAdded() ) );
+ pit->go( true );
+}
+
+void PrivacyManager::removeAllow( const QString & dn )
+{
+ PrivacyItemTask * pit = new PrivacyItemTask( m_client->rootTask() );
+ pit->removeAllow( dn );
+ connect( pit, SIGNAL( finished() ), SLOT( slotAllowRemoved() ) );
+ pit->go( true );
+}
+
+void PrivacyManager::removeDeny( const QString & dn )
+{
+ // start off a CreatePrivacyItemTask
+ PrivacyItemTask * pit = new PrivacyItemTask( m_client->rootTask() );
+ pit->removeDeny( dn );
+ connect( pit, SIGNAL( finished() ), SLOT( slotDenyRemoved() ) );
+ pit->go( true );
+}
+
+void PrivacyManager::setPrivacy( bool defaultIsDeny, const QStringList & allowList, const QStringList & denyList )
+{
+ if ( defaultIsDeny != m_defaultDeny )
+ setDefaultDeny( defaultIsDeny );
+ // find the DNs no longer in the allow list
+ QStringList allowsToRemove = difference( m_allowList, allowList );
+ // find the DNs no longer in the deny list
+ QStringList denysToRemove = difference( m_denyList, denyList );
+ // find the DNs new in the allow list
+ QStringList allowsToAdd = difference( allowList, m_allowList );
+ // find the DNs new in the deny list
+ QStringList denysToAdd = difference( denyList, m_denyList );
+
+ QStringList::ConstIterator end = allowsToRemove.end();
+ for ( QStringList::ConstIterator it = allowsToRemove.begin(); it != end; ++it )
+ removeAllow( *it );
+ end = denysToRemove.end();
+ for ( QStringList::ConstIterator it = denysToRemove.begin(); it != end; ++it )
+ removeDeny( *it );
+ end = allowsToAdd.end();
+ for ( QStringList::ConstIterator it = allowsToAdd.begin(); it != end; ++it )
+ addAllow( *it );
+ end = denysToAdd.end();
+ for ( QStringList::ConstIterator it = denysToAdd.begin(); it != end; ++it )
+ addDeny( *it );
+}
+
+void PrivacyManager::slotGotPrivacySettings( bool locked, bool defaultDeny, const QStringList & allowList, const QStringList & denyList )
+{
+ m_locked = locked;
+ m_defaultDeny = defaultDeny;
+ m_allowList = allowList;
+ m_denyList = denyList;
+}
+
+void PrivacyManager::getDetailsForPrivacyLists()
+{
+ if ( !m_allowList.isEmpty() )
+ {
+ m_client->userDetailsManager()->requestDetails( m_allowList );
+ }
+ if ( !m_denyList.isEmpty() )
+ m_client->userDetailsManager()->requestDetails( m_denyList );
+}
+
+void PrivacyManager::slotDefaultPolicyChanged()
+{
+ PrivacyItemTask * pit = ( PrivacyItemTask * )sender();
+ if ( pit->success() )
+ m_defaultDeny = pit->defaultDeny();
+}
+
+void PrivacyManager::slotAllowAdded()
+{
+ PrivacyItemTask * pit = ( PrivacyItemTask * )sender();
+ if ( pit->success() )
+ {
+ m_allowList.append( pit->dn() );
+ emit privacyChanged( pit->dn(), isBlocked( pit->dn() ) );
+ }
+}
+
+void PrivacyManager::slotDenyAdded()
+{
+ PrivacyItemTask * pit = ( PrivacyItemTask * )sender();
+ if ( pit->success() )
+ {
+ m_denyList.append( pit->dn() );
+ emit privacyChanged( pit->dn(), isBlocked( pit->dn() ) );
+ }
+}
+
+void PrivacyManager::slotAllowRemoved()
+{
+ PrivacyItemTask * pit = ( PrivacyItemTask * )sender();
+ if ( pit->success() )
+ {
+ m_allowList.remove( pit->dn() );
+ emit privacyChanged( pit->dn(), isBlocked( pit->dn() ) );
+ }
+}
+
+void PrivacyManager::slotDenyRemoved()
+{
+ PrivacyItemTask * pit = ( PrivacyItemTask * )sender();
+ if ( pit->success() )
+ {
+ m_denyList.remove( pit->dn() );
+ emit privacyChanged( pit->dn(), isBlocked( pit->dn() ) );
+ }
+}
+
+QStringList PrivacyManager::difference( const QStringList & lhs, const QStringList & rhs )
+{
+ QStringList diff;
+ const QStringList::ConstIterator lhsEnd = lhs.end();
+ const QStringList::ConstIterator rhsEnd = rhs.end();
+ for ( QStringList::ConstIterator lhsIt = lhs.begin(); lhsIt != lhsEnd; ++lhsIt )
+ {
+ if ( rhs.find( *lhsIt ) == rhsEnd )
+ diff.append( *lhsIt );
+ }
+ return diff;
+}
+#include "privacymanager.moc"