summaryrefslogtreecommitdiff
path: root/nonprism/kopete
diff options
context:
space:
mode:
authorAndreas Grapentin <andreas@grapentin.org>2018-01-04 09:01:12 +0100
committerAndreas Grapentin <andreas@grapentin.org>2018-01-04 09:01:26 +0100
commit18e56e928eee366c592be4f12c261b11401ae529 (patch)
tree02197b383dff1b0f18cf4d4444a2db5d77fbe185 /nonprism/kopete
parentc5e23a92aa94792fe0f235fb4d767e98c41521dc (diff)
downloadabslibre-18e56e928eee366c592be4f12c261b11401ae529.tar.gz
abslibre-18e56e928eee366c592be4f12c261b11401ae529.tar.bz2
abslibre-18e56e928eee366c592be4f12c261b11401ae529.zip
nonprism/kopete: updated to 17.08.3 (renamed from kdenetwork-kopete)
Diffstat (limited to 'nonprism/kopete')
-rw-r--r--nonprism/kopete/PKGBUILD95
-rw-r--r--nonprism/kopete/kopete-mediastreamer2.14.patch83
-rw-r--r--nonprism/kopete/kopete-no-kdepimlibs.patch1280
-rw-r--r--nonprism/kopete/kopete-pthread-link.patch12
-rw-r--r--nonprism/kopete/libre-nonprism.patch109
5 files changed, 1579 insertions, 0 deletions
diff --git a/nonprism/kopete/PKGBUILD b/nonprism/kopete/PKGBUILD
new file mode 100644
index 000000000..696781bb3
--- /dev/null
+++ b/nonprism/kopete/PKGBUILD
@@ -0,0 +1,95 @@
+# $Id: PKGBUILD 290221 2017-03-09 16:12:45Z arojas $
+# Maintainer (Arch): Felix Yan <felixonmars@archlinux.org>
+# Maintainer (Arch): Antonio Rojas <arojas@archlinux.org>
+# Contributor (Arch): Andrea Scarpino <andrea@archlinux.org>
+# Maintainer: André Silva <emulatorman@hyperbola.info>
+
+pkgname=kopete
+
+pkgver=17.08.3
+pkgrel=1.parabola2.nonprism1
+arch=(i686 x86_64 armv7h)
+
+pkgdesc="Instant Messenger, without nonfree Skype support and support for unsafe and dangerous for privacy protocols"
+url="https://kde.org/applications/internet/kopete/"
+license=(GPL LGPL FDL)
+
+makedepends=(cmake automoc4 boost mediastreamer libgadu jsoncpp openssl-1.0)
+depends=(kdebase-runtime libotr qimageblitz qca-qt4 qjson)
+optdepends=('mediastreamer: jingle support')
+conflicts=(kdenetwork-kopete)
+replaces=(kdenetwork-kopete)
+
+source=("https://download.kde.org/stable/applications/${pkgver}/src/kopete-${pkgver}.tar.xz"{,.sig}
+ kopete-mediastreamer2.14.patch
+ kopete-pthread-link.patch
+ kopete-no-kdepimlibs.patch
+ libre-nonprism.patch)
+sha256sums=('f86ccc1ca809c723d1baf2eed745f158337059263555f6fafa23ea200aacafec'
+ 'SKIP'
+ 'c34a268aaa058e563174581dbe37c15fed91e82326ec704d2a872463139865e0'
+ 'a7ebdd8dd4336b7ec085ef254bf18040f473b73379a8cd84569b28441a6c71df'
+ 'b9e7f0029dabe6a738114b11a093eb7d24aaf1e71b26d089901246e56cbeacf5'
+ 'c1824f31afbe37089508a7bc3ac29e5a5835e0aac6fd53d8097085cde1e3cf23')
+validpgpkeys=(CA262C6C83DE4D2FB28A332A3A6A4DB839EAA6D7 # Albert Astals Cid <aacid@kde.org>
+ F23275E4BF10AFC1DF6914A6DBD2CE893E2D1C87) # Christoph Feck <cfeck@kde.org>
+
+prepare() {
+ mkdir -p build
+
+ cd kopete-$pkgver
+
+ # based on https://devel.trisquel.info/trisquel/package-helpers/blob/belenos/helpers/make-kopete
+ sed -i 's/Skype protocol" ON/Skype protocol" OFF/g' protocols/CMakeLists.txt
+ rm -rf protocols/skype
+ sed 's/, Skype//' -i ./doc/index.docbook
+
+ # Remove unsafe/dangerous services
+ rm -rv protocols/oscar
+ rm -rv protocols/yahoo
+ rm -rv protocols/qq
+ rm -rv protocols/groupwise
+ rm -rv protocols/gadu
+ rm -rv protocols/wlm
+ rm -rv protocols/meanwhile
+ patch -p1 -i "${srcdir}"/libre-nonprism.patch
+
+ # Fix build with mediastreamer 2.14
+ patch -p1 -i ../kopete-mediastreamer2.14.patch
+ # Fix linking to pthread in libjingle-call
+ patch -p1 -i ../kopete-pthread-link.patch
+ # Remove kdepimlibs usage
+ patch -p1 -i ../kopete-no-kdepimlibs.patch
+}
+
+build() {
+ cd build
+
+ cmake ../kopete-$pkgver \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DKDE4_BUILD_TESTS=OFF \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_SKIP_RPATH=ON \
+ -DWITH_Libmsn=OFF \
+ -DWITH_Libgadu=OFF \
+ -DWITH_skype=OFF \
+ -DWITH_oscar=OFF \
+ -DWITH_yahoo=OFF \
+ -DWITH_qq=OFF \
+ -DWITH_groupwise=OFF \
+ -DWITH_gadu=OFF \
+ -DWITH_GOOGLETALK=OFF \
+ -DWITH_wlm=OFF \
+ -DWITH_WLM_MEDIASTREAMER=OFF \
+ -DWITH_meanwhile=OFF \
+ -DOPENSSL_INCLUDE_DIR=/usr/include/openssl-1.0 \
+ -DOPENSSL_SSL_LIBRARY=/usr/lib/openssl-1.0/libssl.so \
+ -DOPENSSL_CRYPTO_LIBRARY=/usr/lib/openssl-1.0/libcrypto.so
+ make
+}
+
+package() {
+ cd build
+
+ make DESTDIR="$pkgdir" install
+}
diff --git a/nonprism/kopete/kopete-mediastreamer2.14.patch b/nonprism/kopete/kopete-mediastreamer2.14.patch
new file mode 100644
index 000000000..f4ee1a096
--- /dev/null
+++ b/nonprism/kopete/kopete-mediastreamer2.14.patch
@@ -0,0 +1,83 @@
+diff --git a/cmake/modules/FindMediastreamer.cmake b/cmake/modules/FindMediastreamer.cmake
+index 47fe5c3..31802f0 100644
+--- a/cmake/modules/FindMediastreamer.cmake
++++ b/cmake/modules/FindMediastreamer.cmake
+@@ -24,12 +24,19 @@ IF (MEDIASTREAMER_FOUND)
+ IF (MEDIASTREAMER_VERSION VERSION_LESS 2.9)
+ SET(MEDIASTREAMER_LESS_2_9 TRUE)
+ SET(MEDIASTREAMER_LESS_2_11 TRUE)
++ SET(MEDIASTREAMER_LESS_2_14 TRUE)
+ ELSEIF (MEDIASTREAMER_VERSION VERSION_LESS 2.11)
+ SET(MEDIASTREAMER_LESS_2_9 FALSE)
+ SET(MEDIASTREAMER_LESS_2_11 TRUE)
++ SET(MEDIASTREAMER_LESS_2_14 TRUE)
++ ELSEIF (MEDIASTREAMER_VERSION VERSION_LESS 2.14)
++ SET(MEDIASTREAMER_LESS_2_9 FALSE)
++ SET(MEDIASTREAMER_LESS_2_11 FALSE)
++ SET(MEDIASTREAMER_LESS_2_14 TRUE)
+ ELSE (MEDIASTREAMER_VERSION VERSION_LESS 2.9)
+ SET(MEDIASTREAMER_LESS_2_9 FALSE)
+ SET(MEDIASTREAMER_LESS_2_11 FALSE)
++ SET(MEDIASTREAMER_LESS_2_14 FALSE)
+ ENDIF (MEDIASTREAMER_VERSION VERSION_LESS 2.9)
+ ENDIF (NOT MEDIASTREAMER_FIND_QUIETLY)
+ ELSE (MEDIASTREAMER_FOUND)
+diff --git a/protocols/jabber/libjingle/talk/session/phone/linphonemediaengine.cc b/protocols/jabber/libjingle/talk/session/phone/linphonemediaengine.cc
+index bd3de2b..9379226 100644
+--- a/protocols/jabber/libjingle/talk/session/phone/linphonemediaengine.cc
++++ b/protocols/jabber/libjingle/talk/session/phone/linphonemediaengine.cc
+@@ -151,15 +151,25 @@ LinphoneVoiceChannel::LinphoneVoiceChannel(LinphoneMediaEngine*eng)
+ playport2 = PORT_UNUSED;
+
+ #ifdef _DEBUG
++#ifdef MEDIASTREAMER_LESS_2_14
+ ortp_set_log_level_mask(ORTP_DEBUG|ORTP_MESSAGE|ORTP_WARNING|ORTP_ERROR|ORTP_FATAL);
+ #else
++ ortp_set_log_level_mask(NULL, ORTP_DEBUG|ORTP_MESSAGE|ORTP_WARNING|ORTP_ERROR|ORTP_FATAL);
++#endif
++#else
++#ifdef MEDIASTREAMER_LESS_2_14
+ ortp_set_log_level_mask(ORTP_FATAL);
++#else
++ ortp_set_log_level_mask(NULL, ORTP_FATAL);
+ #endif
+-
++#endif
++
+ #ifdef MEDIASTREAMER_LESS_2_9
+ audio_stream_ = audio_stream_new(-1, 0); /* -1 means that function will choose some free port */
+-#else
++#elseif MEDIASTREAMER_LESS_2_14
+ audio_stream_ = audio_stream_new(-1, -1, 0); /* -1 means that function will choose some free port */
++#else
++ audio_stream_ = audio_stream_new(NULL, -1, -1, 0); /* -1 means that function will choose some free port */
+ #endif
+
+ }
+@@ -344,16 +354,24 @@ void LinphoneVoiceChannel::StartRing(bool bIncomingCall)
+ if (engine_->GetRingWav().size() > 0)
+ {
+ LOG(LS_VERBOSE) << "incoming ring. sound file: " << engine_->GetRingWav().c_str() << "\n";
++#ifdef MEDIASTREAMER_LESS_2_14
+ ring_stream_ = ring_start (engine_->GetRingWav().c_str(), 1, sndcard);
+- }
++#else
++ ring_stream_ = ring_start (NULL, engine_->GetRingWav().c_str(), 1, sndcard);
++#endif
++ }
+ }
+ else
+ {
+ if (engine_->GetCallWav().size() > 0)
+ {
+ LOG(LS_VERBOSE) << "outgoing ring. sound file: " << engine_->GetCallWav().c_str() << "\n";
++#ifdef MEDIASTREAMER_LESS_2_14
+ ring_stream_ = ring_start (engine_->GetCallWav().c_str(), 1, sndcard);
+- }
++#else
++ ring_stream_ = ring_start (NULL, engine_->GetCallWav().c_str(), 1, sndcard);
++#endif
++ }
+ }
+ }
+ }
diff --git a/nonprism/kopete/kopete-no-kdepimlibs.patch b/nonprism/kopete/kopete-no-kdepimlibs.patch
new file mode 100644
index 000000000..e4d3609f8
--- /dev/null
+++ b/nonprism/kopete/kopete-no-kdepimlibs.patch
@@ -0,0 +1,1280 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 5216807ab..78c7ab500 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -4,7 +4,6 @@ project(kopete)
+ find_package(KDE4 REQUIRED)
+ include(KDE4Defaults)
+ include(MacroLibrary)
+-find_package(KdepimLibs REQUIRED)
+ find_package(QImageBlitz REQUIRED)
+
+ set(KOPETE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
+diff --git a/kopete/contactlist/CMakeLists.txt b/kopete/contactlist/CMakeLists.txt
+index 2219addf9..ea5623a75 100644
+--- a/kopete/contactlist/CMakeLists.txt
++++ b/kopete/contactlist/CMakeLists.txt
+@@ -12,10 +12,8 @@ set(kopetecontactlist_SRCS
+ #kopetegroupviewitem.cpp
+ kopetecontactlistview.cpp
+ kopetelviprops.cpp
+-kopeteaddrbookexport.cpp
+ customnotificationprops.cpp
+ kopetegrouplistaction.cpp
+-kabcexport.cpp
+ contactlistmodel.cpp
+ contactlisttreemodel.cpp
+ contactlistplainmodel.cpp
+@@ -28,9 +26,6 @@ contactlistlayoutitemconfig.cpp
+ kde4_add_ui_files(kopetecontactlist_SRCS
+ kopetegvipropswidget.ui
+ kopetemetalvipropswidget.ui
+-kopeteaddrbookexportui.ui
+-kabcexport_page1.ui
+-kabcexport_page2.ui
+ )
+
+ kde4_add_library( kopetecontactlist SHARED ${kopetecontactlist_SRCS} )
+diff --git a/kopete/contactlist/contactlistproxymodel.cpp b/kopete/contactlist/contactlistproxymodel.cpp
+index d0ada7892..cb636dfca 100644
+--- a/kopete/contactlist/contactlistproxymodel.cpp
++++ b/kopete/contactlist/contactlistproxymodel.cpp
+@@ -27,7 +27,6 @@
+ #include "kopetecontact.h"
+ #include "kopeteappearancesettings.h"
+ #include "kopeteitembase.h"
+-#include <kabc/stdaddressbook.h>
+
+ namespace Kopete {
+
+@@ -272,15 +271,6 @@ bool ContactListProxyModel::searchContactInfo(Kopete::MetaContact *mc, QRegExp s
+ return true;
+
+ // Check the address book
+- KABC::Addressee addressee = KABC::StdAddressBook::self()->findByUid( mc->kabcId() );
+- if ( !addressee.isEmpty() )
+- {
+- QString emailAddr = addressee.fullEmail();
+-
+- if ( emailAddr.contains( searchPattern ) )
+- return true;
+- }
+-
+ // Check alternative names
+ foreach( Kopete::Contact* c , mc->contacts() )
+ {
+diff --git a/kopete/contactlist/kopetecontactlistview.cpp b/kopete/contactlist/kopetecontactlistview.cpp
+index b32a500cf..9b403d123 100644
+--- a/kopete/contactlist/kopetecontactlistview.cpp
++++ b/kopete/contactlist/kopetecontactlistview.cpp
+@@ -39,7 +39,6 @@
+ #include <KMessageBox>
+ #include <KToolInvocation>
+ #include <kxmlguifactory.h>
+-#include <kabc/stdaddressbook.h>
+
+ #include "kopeteuiglobal.h"
+ #include "kopetecontactlistelement.h"
+@@ -529,24 +528,6 @@ void KopeteContactListView::sendMessage()
+ void KopeteContactListView::sendEmail()
+ {
+ Kopete::MetaContact* metaContact = metaContactFromIndex( currentIndex() );
+- if ( metaContact )
+- {
+- KABC::Addressee addressee = KABC::StdAddressBook::self()->findByUid( metaContact->kabcId() );
+- if ( !addressee.isEmpty() )
+- {
+- QString emailAddr = addressee.fullEmail();
+-
+- kDebug( 14000 ) << "Email: " << emailAddr << "!";
+- if ( !emailAddr.isEmpty() )
+- KToolInvocation::invokeMailer( emailAddr, QString() );
+- else
+- KMessageBox::queuedMessageBox( this, KMessageBox::Sorry, i18n( "There is no email address set for this contact in the KDE address book." ), i18n( "No Email Address in Address Book" ) );
+- }
+- else
+- {
+- KMessageBox::queuedMessageBox( this, KMessageBox::Sorry, i18n( "This contact was not found in the KDE address book. Check that a contact is selected in the properties dialog." ), i18n( "Not Found in Address Book" ) );
+- }
+- }
+ }
+
+ void KopeteContactListView::rename()
+diff --git a/kopete/contactlist/kopetelviprops.cpp b/kopete/contactlist/kopetelviprops.cpp
+index 04ff289a1..84a4c95f8 100644
+--- a/kopete/contactlist/kopetelviprops.cpp
++++ b/kopete/contactlist/kopetelviprops.cpp
+@@ -43,18 +43,12 @@
+ #include <klocale.h>
+ #include <kmessagebox.h>
+ #include <kurlrequester.h>
+-#include <kabc/addresseedialog.h>
+-#include <kabc/stdaddressbook.h>
+-#include <kabc/addressee.h>
+ #include <kstandarddirs.h>
+
+-#include "kabcpersistence.h"
+-#include "kopeteaddrbookexport.h"
+ #include "kopetecontact.h"
+ #include "kopetegroup.h"
+ #include "kopeteaccount.h"
+ #include "kopeteprotocol.h"
+-#include "addressbooklinkwidget.h"
+ #include "avatardialog.h"
+
+ #include "customnotificationprops.h"
+@@ -186,9 +180,6 @@ KopeteMetaLVIProps::KopeteMetaLVIProps(Kopete::MetaContact *metaContact, QWidget
+ hb->setMargin( -1 );
+ hb->setObjectName( "soundFromKABClayout" );
+
+- mFromKABC = new QPushButton( i18n( "Sync KABC..." ), mNotificationProps->widget() );
+- mFromKABC->setObjectName( QLatin1String("getSoundFromKABC") );
+- hb->addWidget( mFromKABC ); // [ [Button] <-xxxxx-> ]
+ hb->addStretch();
+ vb->addStretch(); // vert spacer keeps the rest snug
+
+@@ -199,10 +190,8 @@ KopeteMetaLVIProps::KopeteMetaLVIProps(Kopete::MetaContact *metaContact, QWidget
+ ui_mainWidget->tabWidget->addTab( npMainWidget, i18n( "Custom &Notifications" ) );
+ setMainWidget( mainWidget );
+
+- connect( ui_mainWidget->radioNameKABC, SIGNAL(toggled(bool)), SLOT(slotEnableAndDisableWidgets()));
+ connect( ui_mainWidget->radioNameContact, SIGNAL(toggled(bool)), SLOT(slotEnableAndDisableWidgets()));
+ connect( ui_mainWidget->radioNameCustom, SIGNAL(toggled(bool)), SLOT(slotEnableAndDisableWidgets()));
+- connect( ui_mainWidget->radioPhotoKABC, SIGNAL(toggled(bool)), SLOT(slotEnableAndDisableWidgets()));
+ connect( ui_mainWidget->radioPhotoContact, SIGNAL(toggled(bool)), SLOT(slotEnableAndDisableWidgets()));
+ connect( ui_mainWidget->radioPhotoCustom, SIGNAL(toggled(bool)), SLOT(slotEnableAndDisableWidgets()));
+ connect( ui_mainWidget->cmbAccountPhoto, SIGNAL(activated(int)), SLOT(slotEnableAndDisableWidgets()));
+@@ -210,7 +199,6 @@ KopeteMetaLVIProps::KopeteMetaLVIProps(Kopete::MetaContact *metaContact, QWidget
+
+ ui_mainWidget->btnClearPhoto->setIcon( KIcon( (QApplication::layoutDirection() == Qt::RightToLeft) ? "edit-clear-locationbar-ltr" : "edit-clear-locationbar-rtl" ) );
+ connect( ui_mainWidget->btnClearPhoto, SIGNAL(clicked()), this, SLOT(slotClearPhotoClicked()) );
+- connect( ui_mainWidget->widAddresseeLink, SIGNAL(addresseeChanged(KABC::Addressee)), SLOT(slotAddresseeChanged(KABC::Addressee)) );
+ connect( ui_mainWidget->btnChoosePhoto, SIGNAL(clicked()), this, SLOT(slotSelectPhoto()));
+ ui_mainWidget->chkUseCustomIcons->setChecked( mMetaContact->useCustomIcon() );
+
+@@ -235,41 +223,14 @@ KopeteMetaLVIProps::KopeteMetaLVIProps(Kopete::MetaContact *metaContact, QWidget
+ // ui_mainWidget->icnbAway->setIcon( awayName );
+ // ui_mainWidget->icnbUnknown->setIcon( unknownName );
+
+- ui_mainWidget->widAddresseeLink->setMetaContact( mMetaContact );
+-
+- mAddressBookUid = mMetaContact->kabcId();
+-
+ mExport = 0L;
+
+- if ( !mAddressBookUid.isEmpty() )
+- {
+- KABC::AddressBook *ab = Kopete::KABCPersistence::self()->addressBook();
+- KABC::Addressee a = ab->findByUid( mAddressBookUid );
+- ui_mainWidget->widAddresseeLink->setAddressee( a );
+-
+- if ( !a.isEmpty() )
+- {
+- ui_mainWidget->btnImportKABC->setEnabled( true );
+- ui_mainWidget->btnExportKABC->setEnabled( true );
+- mExport = new KopeteAddressBookExport( this, mMetaContact );
+-
+- mSound = a.sound();
+- mFromKABC->setEnabled( !( mSound.isIntern() || mSound.url().isEmpty() ) );
+- }
+- }
+-
+ slotLoadNameSources();
+ slotLoadPhotoSources();
+
+ connect( this, SIGNAL(okClicked()), this, SLOT(slotOkClicked()) );
+ connect( ui_mainWidget->chkUseCustomIcons, SIGNAL(toggled(bool)),
+ this, SLOT(slotUseCustomIconsToggled(bool)) );
+- connect( ui_mainWidget->btnImportKABC, SIGNAL(clicked()),
+- this, SLOT(slotImportClicked()) );
+- connect( ui_mainWidget->btnExportKABC, SIGNAL(clicked()),
+- this, SLOT(slotExportClicked()) );
+- connect( mFromKABC, SIGNAL(clicked()),
+- this, SLOT(slotFromKABCClicked()) );
+
+ slotUseCustomIconsToggled( ui_mainWidget->chkUseCustomIcons->isChecked() );
+ slotEnableAndDisableWidgets();
+@@ -325,7 +286,6 @@ void KopeteMetaLVIProps::slotLoadNameSources()
+ Kopete::MetaContact::PropertySource nameSource = mMetaContact->displayNameSource();
+
+ ui_mainWidget->radioNameContact->setChecked(nameSource == Kopete::MetaContact::SourceContact);
+- ui_mainWidget->radioNameKABC->setChecked(nameSource == Kopete::MetaContact::SourceKABC);
+ ui_mainWidget->radioNameCustom->setChecked(nameSource == Kopete::MetaContact::SourceCustom);
+
+ }
+@@ -361,10 +321,7 @@ void KopeteMetaLVIProps::slotLoadPhotoSources()
+ Kopete::MetaContact::PropertySource photoSource = mMetaContact->photoSource();
+
+ ui_mainWidget->radioPhotoContact->setChecked(photoSource == Kopete::MetaContact::SourceContact);
+- ui_mainWidget->radioPhotoKABC->setChecked(photoSource == Kopete::MetaContact::SourceKABC);
+ ui_mainWidget->radioPhotoCustom->setChecked(photoSource == Kopete::MetaContact::SourceCustom);
+-
+- ui_mainWidget->chkSyncPhoto->setChecked(mMetaContact->isPhotoSyncedWithKABC());
+ }
+
+ void KopeteMetaLVIProps::slotSelectPhoto()
+@@ -379,24 +336,6 @@ void KopeteMetaLVIProps::slotSelectPhoto()
+
+ void KopeteMetaLVIProps::slotEnableAndDisableWidgets()
+ {
+- KABC::AddressBook *ab = Kopete::KABCPersistence::self()->addressBook();
+- KABC::Addressee a = ab->findByUid( mAddressBookUid );
+- bool validLink = ! a.isEmpty();
+- // kabc source requires a kabc link
+- ui_mainWidget->radioNameKABC->setEnabled(validLink);
+- // kabc source requires a kabc link
+- ui_mainWidget->radioPhotoKABC->setEnabled(validLink);
+- // sync with kabc has no sense if we use kabc as source (sync kabc with kabc? uh?)
+- // it has also no sense if they are no kabc link
+- if( selectedPhotoSource() == Kopete::MetaContact::SourceKABC || !validLink )
+- {
+- ui_mainWidget->chkSyncPhoto->setEnabled(false);
+- }
+- else
+- {
+- ui_mainWidget->chkSyncPhoto->setEnabled(true);
+- }
+-
+ ui_mainWidget->radioNameContact->setEnabled(mMetaContact->contacts().count());
+ ui_mainWidget->radioPhotoContact->setEnabled(!m_withPhotoContacts.isEmpty());
+
+@@ -416,9 +355,6 @@ void KopeteMetaLVIProps::slotEnableAndDisableWidgets()
+ QImage photo;
+ switch ( selectedPhotoSource() )
+ {
+- case Kopete::MetaContact::SourceKABC:
+- photo = Kopete::photoFromKABC(mAddressBookUid);
+- break;
+ case Kopete::MetaContact::SourceContact:
+ photo = Kopete::photoFromContact(selectedPhotoSourceContact());
+ break;
+@@ -434,8 +370,6 @@ void KopeteMetaLVIProps::slotEnableAndDisableWidgets()
+
+ Kopete::MetaContact::PropertySource KopeteMetaLVIProps::selectedNameSource() const
+ {
+- if ( ui_mainWidget->radioNameKABC->isChecked() )
+- return Kopete::MetaContact::SourceKABC;
+ if ( ui_mainWidget->radioNameContact->isChecked() )
+ return Kopete::MetaContact::SourceContact;
+ if ( ui_mainWidget->radioNameCustom->isChecked() )
+@@ -446,8 +380,6 @@ Kopete::MetaContact::PropertySource KopeteMetaLVIProps::selectedNameSource() con
+
+ Kopete::MetaContact::PropertySource KopeteMetaLVIProps::selectedPhotoSource() const
+ {
+- if ( ui_mainWidget->radioPhotoKABC->isChecked() )
+- return Kopete::MetaContact::SourceKABC;
+ if ( ui_mainWidget->radioPhotoContact->isChecked() )
+ return Kopete::MetaContact::SourceContact;
+ if ( ui_mainWidget->radioPhotoCustom->isChecked() )
+@@ -490,10 +422,6 @@ Kopete::Contact* KopeteMetaLVIProps::selectedPhotoSourceContact() const
+
+ void KopeteMetaLVIProps::slotOkClicked()
+ {
+- // update meta contact's UID
+- mMetaContact->setKabcId( mAddressBookUid );
+- //this has to be done first, in the case something is synced with KABC (see bug 109494)
+-
+ // set custom display name
+ if( ui_mainWidget->edtDisplayName->text() != mMetaContact->customDisplayName() )
+ mMetaContact->setDisplayName( ui_mainWidget->edtDisplayName->text() );
+@@ -508,7 +436,6 @@ void KopeteMetaLVIProps::slotOkClicked()
+ mMetaContact->setPhotoSourceContact( selectedPhotoSourceContact() );
+ if ( !m_photoPath.isEmpty())
+ mMetaContact->setPhoto(KUrl(m_photoPath));
+- mMetaContact->setPhotoSyncedWithKABC( ui_mainWidget->chkSyncPhoto->isChecked() );
+
+ mMetaContact->setUseCustomIcon(
+ ui_mainWidget->chkUseCustomIcons->isChecked() );
+@@ -550,53 +477,6 @@ void KopeteMetaLVIProps::slotUseCustomIconsToggled(bool on)
+ ui_mainWidget->icnbUnknown->setEnabled( on );
+ }
+
+-void KopeteMetaLVIProps::slotAddresseeChanged( const KABC::Addressee & a )
+-{
+- if ( !a.isEmpty() )
+- {
+- mSound = a.sound();
+- mFromKABC->setEnabled( !( mSound.isIntern() || mSound.url().isEmpty() ) );
+- ui_mainWidget->btnExportKABC->setEnabled( true );
+- ui_mainWidget->btnImportKABC->setEnabled( true );
+- // set/update the MC's addressee uin field
+- mAddressBookUid = a.uid();
+- }
+- else
+- {
+- ui_mainWidget->btnExportKABC->setEnabled( false );
+- ui_mainWidget->btnImportKABC->setEnabled( false );
+- mAddressBookUid.clear();
+- ui_mainWidget->radioNameContact->setChecked( true );
+- ui_mainWidget->radioPhotoContact->setChecked( true );
+- }
+- slotEnableAndDisableWidgets();
+-}
+-
+-void KopeteMetaLVIProps::slotExportClicked()
+-{
+- mMetaContact->setKabcId( mAddressBookUid );
+- delete mExport;
+- mExport = new KopeteAddressBookExport( this, mMetaContact );
+- if ( mExport->showDialog() == QDialog::Accepted )
+- mExport->exportData();
+-}
+-
+-void KopeteMetaLVIProps::slotImportClicked()
+-{
+- mMetaContact->setKabcId( mAddressBookUid );
+- if ( Kopete::KABCPersistence::self()->syncWithKABC( mMetaContact ) )
+- KMessageBox::queuedMessageBox( this, KMessageBox::Information,
+- i18n( "No contacts were imported from the address book." ),
+- i18n( "No Change" ) );
+-}
+-
+-void KopeteMetaLVIProps::slotFromKABCClicked()
+-{
+-#if 0
+- mNotificationProps->widget()->customSound->setUrl( mSound.url() );
+-#endif
+-}
+-
+ void KopeteMetaLVIProps::slotOpenSoundDialog( KUrlRequester *requester )
+ {
+ // taken from kdelibs/kio/kfile/knotifydialog.cpp
+diff --git a/kopete/contactlist/kopetelviprops.h b/kopete/contactlist/kopetelviprops.h
+index c4c65747c..cae803993 100644
+--- a/kopete/contactlist/kopetelviprops.h
++++ b/kopete/contactlist/kopetelviprops.h
+@@ -21,19 +21,16 @@
+ #define KOPETELVIPROPS_H
+
+ #include <kdialog.h>
+-#include <kabc/sound.h>
+
+ #include "kopetemetacontact.h"
+
+ #include "ui_kopetemetalvipropswidget.h"
+ #include "ui_kopetegvipropswidget.h"
+
+-class AddressBookLinkWidget;
+ class CustomNotificationProps;
+ class KopeteAddressBookExport;
+ class KUrlRequester;
+
+-namespace KABC { class Addressee; }
+ namespace Kopete {
+ class Contact;
+ class Group;
+@@ -74,10 +71,8 @@ class KopeteMetaLVIProps: public KDialog
+ QPushButton *mFromKABC;
+ QWidget* mainWidget;
+ Ui::KopeteMetaLVIPropsWidget *ui_mainWidget;
+- AddressBookLinkWidget *linkWidget;
+ Kopete::MetaContact *mMetaContact;
+ KopeteAddressBookExport *mExport;
+- KABC::Sound mSound;
+ int m_countPhotoCapable;
+ QMap<int, Kopete::Contact *> m_withPhotoContacts;
+ QString mAddressBookUid; // the currently selected addressbook UID
+@@ -93,10 +88,6 @@ class KopeteMetaLVIProps: public KDialog
+ void slotOkClicked();
+ void slotUseCustomIconsToggled( bool on );
+ void slotClearPhotoClicked();
+- void slotAddresseeChanged( const KABC::Addressee & );
+- void slotExportClicked();
+- void slotImportClicked();
+- void slotFromKABCClicked();
+ void slotOpenSoundDialog( KUrlRequester *requester );
+ void slotLoadNameSources();
+ void slotLoadPhotoSources();
+diff --git a/kopete/contactlist/kopetemetalvipropswidget.ui b/kopete/contactlist/kopetemetalvipropswidget.ui
+index c2265367f..d882676f4 100644
+--- a/kopete/contactlist/kopetemetalvipropswidget.ui
++++ b/kopete/contactlist/kopetemetalvipropswidget.ui
+@@ -62,9 +62,6 @@
+ <property name="bottomMargin" >
+ <number>11</number>
+ </property>
+- <item>
+- <widget class="Kopete::UI::AddressBookLinkWidget" native="1" name="widAddresseeLink" />
+- </item>
+ <item>
+ <layout class="QHBoxLayout" >
+ <property name="spacing" >
+@@ -82,19 +79,6 @@
+ <property name="bottomMargin" >
+ <number>0</number>
+ </property>
+- <item>
+- <widget class="QPushButton" name="btnExportKABC" >
+- <property name="enabled" >
+- <bool>false</bool>
+- </property>
+- <property name="toolTip" >
+- <string>Export contact's details to the KDE Address Book</string>
+- </property>
+- <property name="text" >
+- <string>E&amp;xport Details...</string>
+- </property>
+- </widget>
+- </item>
+ <item>
+ <spacer>
+ <property name="orientation" >
+@@ -111,19 +95,6 @@
+ </property>
+ </spacer>
+ </item>
+- <item>
+- <widget class="QPushButton" name="btnImportKABC" >
+- <property name="enabled" >
+- <bool>false</bool>
+- </property>
+- <property name="toolTip" >
+- <string>Import contacts from the KDE Address Book</string>
+- </property>
+- <property name="text" >
+- <string>&amp;Import Contacts</string>
+- </property>
+- </widget>
+- </item>
+ </layout>
+ </item>
+ </layout>
+@@ -135,13 +106,6 @@
+ <string>Display Name Source</string>
+ </property>
+ <layout class="QGridLayout" >
+- <item row="0" column="0" colspan="4" >
+- <widget class="QRadioButton" name="radioNameKABC" >
+- <property name="text" >
+- <string>Use address book &amp;name (needs address book link)</string>
+- </property>
+- </widget>
+- </item>
+ <item row="1" column="0" colspan="2" >
+ <widget class="QRadioButton" name="radioNameContact" >
+ <property name="text" >
+@@ -213,13 +177,6 @@
+ <string>Photo Source</string>
+ </property>
+ <layout class="QGridLayout" >
+- <item row="0" column="0" >
+- <widget class="QRadioButton" name="radioPhotoKABC" >
+- <property name="text" >
+- <string>U&amp;se address book photo (needs address book link)</string>
+- </property>
+- </widget>
+- </item>
+ <item rowspan="3" row="0" column="1" >
+ <widget class="QLabel" name="photoLabel" >
+ <property name="minimumSize" >
+@@ -513,14 +470,10 @@
+ </customwidgets>
+ <tabstops>
+ <tabstop>tabWidget</tabstop>
+- <tabstop>btnExportKABC</tabstop>
+- <tabstop>btnImportKABC</tabstop>
+- <tabstop>radioNameKABC</tabstop>
+ <tabstop>radioNameContact</tabstop>
+ <tabstop>cmbAccountName</tabstop>
+ <tabstop>radioNameCustom</tabstop>
+ <tabstop>edtDisplayName</tabstop>
+- <tabstop>radioPhotoKABC</tabstop>
+ <tabstop>radioPhotoContact</tabstop>
+ <tabstop>cmbAccountPhoto</tabstop>
+ <tabstop>radioPhotoCustom</tabstop>
+diff --git a/kopete/kopeteapplication.cpp b/kopete/kopeteapplication.cpp
+index 601b33ae2..0cf1f7952 100644
+--- a/kopete/kopeteapplication.cpp
++++ b/kopete/kopeteapplication.cpp
+@@ -32,7 +32,6 @@
+ #include <solid/networking.h>
+
+ #include "addaccountwizard.h"
+-#include "kabcpersistence.h"
+ #include "kopeteaccount.h"
+ #include "kopeteaccountmanager.h"
+ #include "kopetestatusmanager.h"
+@@ -131,11 +130,6 @@ KopeteApplication::~KopeteApplication()
+
+ void KopeteApplication::slotLoadPlugins()
+ {
+- // we have to load the address book early, because calling this enters the Qt event loop when there are remote resources.
+- // The plugin manager is written with the assumption that Kopete will not reenter the event loop during plugin load,
+- // otherwise lots of things break as plugins are loaded, then contacts are added to incompletely initialised MCLVIs
+- Kopete::KABCPersistence::self()->addressBook();
+-
+ //Create the command handler (looks silly)
+ Kopete::CommandHandler::commandHandler();
+
+diff --git a/kopete/kopetewindow.cpp b/kopete/kopetewindow.cpp
+index c6ca7ec4d..564e2a0f5 100644
+--- a/kopete/kopetewindow.cpp
++++ b/kopete/kopetewindow.cpp
+@@ -72,8 +72,6 @@
+
+ #include "addcontactpage.h"
+ #include "addressbooklinkwidget.h"
+-#include "ui_groupkabcselectorwidget.h"
+-#include "kabcexport.h"
+ #include "kopeteappearancesettings.h"
+ #include "kopeteapplication.h"
+ #include "kopeteaccount.h"
+@@ -397,11 +395,6 @@ void KopeteWindow::initActions()
+ connect ( d->actionDisconnect, SIGNAL (triggered(bool)), this, SLOT (slotDisconnectAll()) );
+ d->actionDisconnect->setEnabled ( false );
+
+- d->actionExportContacts = new KAction ( i18n ( "&Export Contacts..." ), this );
+- d->actionExportContacts->setIcon ( KIcon ( "document-export" ) );
+- actionCollection()->addAction ( "ExportContacts", d->actionExportContacts );
+- connect ( d->actionExportContacts, SIGNAL (triggered(bool)), this, SLOT (showExportDialog()) );
+-
+ d->actionSetAway = new KAction ( KIcon ( "user-identity", 0, QStringList() << QString() << "user-away" ), i18n ( "&Away" ), this );
+ actionCollection()->addAction ( "SetAwayAll", d->actionSetAway );
+ connect ( d->actionSetAway, SIGNAL (triggered(bool)), this, SLOT (slotGlobalAway()) );
+@@ -1291,13 +1284,6 @@ void KopeteWindow::slotTrayAboutToShowMenu ( KMenu * popup )
+ popup->addAction ( actionCollection->action ( KStandardAction::name ( KStandardAction::Quit ) ) );
+ }
+
+-void KopeteWindow::showExportDialog()
+-{
+- KabcExportWizard* wizard = new KabcExportWizard ( this );
+- wizard->setObjectName ( QLatin1String ( "export_contact_dialog" ) );
+- wizard->show();
+-}
+-
+ void KopeteWindow::leaveEvent ( QEvent * )
+ {
+ startAutoHideTimer();
+@@ -1413,18 +1399,12 @@ void KopeteWindow::showAddContactDialog ( Kopete::Account * account )
+ AddContactPage *addContactPage =
+ account->protocol()->createAddContactWidget ( mainWid, account );
+
+- QWidget* groupKABC = new QWidget ( mainWid );
+- groupKABC->setObjectName ( "groupkabcwidget" );
+- Ui::GroupKABCSelectorWidget ui_groupKABC;
+- ui_groupKABC.setupUi ( groupKABC );
+-
+ // Populate the groups list
+ Kopete::GroupList groups=Kopete::ContactList::self()->groups();
+ QHash<QString, Kopete::Group*> groupItems;
+
+ // Add top level group
+ groupItems.insert ( Kopete::Group::topLevel()->displayName(), Kopete::Group::topLevel() );
+- ui_groupKABC.groupCombo->addItem ( Kopete::Group::topLevel()->displayName() );
+
+ foreach ( Kopete::Group *group, groups )
+ {
+@@ -1434,7 +1414,6 @@ void KopeteWindow::showAddContactDialog ( Kopete::Account * account )
+ if ( !groupname.isEmpty() )
+ {
+ groupItems.insert ( groupname, group );
+- ui_groupKABC.groupCombo->addItem ( groupname );
+ }
+ }
+
+@@ -1451,8 +1430,6 @@ void KopeteWindow::showAddContactDialog ( Kopete::Account * account )
+ if ( addContactPage->validateData() )
+ {
+ Kopete::MetaContact * metacontact = new Kopete::MetaContact();
+- metacontact->addToGroup ( groupItems[ ui_groupKABC.groupCombo->currentText() ] );
+- metacontact->setKabcId ( ui_groupKABC.widAddresseeLink->uid() );
+ if ( addContactPage->apply ( account, metacontact ) )
+ {
+ Kopete::ContactList::self()->addMetaContact ( metacontact );
+diff --git a/kopete/kopetewindow.h b/kopete/kopetewindow.h
+index 974b27572..d4cedb3b8 100644
+--- a/kopete/kopetewindow.h
++++ b/kopete/kopetewindow.h
+@@ -171,11 +171,6 @@ private slots:
+ */
+ void showAddContactDialog( Kopete::Account * );
+
+- /**
+- * Show the Export Contacts wizards
+- */
+- void showExportDialog();
+-
+ /**
+ * Enable the Connect All and Disconnect All buttons here
+ * along with connecting the accountRegistered and accountUnregistered
+diff --git a/libkopete/CMakeLists.txt b/libkopete/CMakeLists.txt
+index c1df84378..f899810c8 100644
+--- a/libkopete/CMakeLists.txt
++++ b/libkopete/CMakeLists.txt
+@@ -40,10 +40,6 @@ endif (Q_WS_WIN)
+ set(kopete_ui_SRCS
+ ui/accountselector.cpp
+ ui/addcontactpage.cpp
+- ui/addressbooklinkwidget.cpp
+- ui/addressbookselectordialog.cpp
+- ui/addressbookselectorwidget.cpp
+- ui/addresseeitem.cpp
+ ui/avatardialog.cpp
+ ui/avatarwebcamdialog.cpp
+ ui/avatarselectorwidget.cpp
+@@ -79,7 +75,6 @@ set(kopete_LIB_SRCS
+ ${kopete_ui_SRCS}
+ ${kopete_contactlist_SRCS}
+ ${kopete_tasks_SRCS}
+- kabcpersistence.cpp
+ kopeteaccount.cpp
+ kopeteaccountmanager.cpp
+ kopeteavatarmanager.cpp
+diff --git a/libkopete/contactlist/xmlcontactstorage.cpp b/libkopete/contactlist/xmlcontactstorage.cpp
+index 5164b3b69..7830a5102 100644
+--- a/libkopete/contactlist/xmlcontactstorage.cpp
++++ b/libkopete/contactlist/xmlcontactstorage.cpp
+@@ -340,9 +340,6 @@ bool XmlContactStorage::parseMetaContact( Kopete::MetaContact *metaContact, cons
+ // custom photo, used for custom photo source
+ metaContact->setPhoto( KUrl(contactElement.text()) );
+
+- bool photoSyncedWithKABC = (contactElement.attribute(QString::fromUtf8("syncWithKABC")) == QString::fromUtf8("1")) || (contactElement.attribute(QString::fromUtf8("syncWithKABC")) == QString::fromUtf8("true"));
+- metaContact->setPhotoSyncedWithKABC( photoSyncedWithKABC );
+-
+ // retrieve deprecated data (now stored in property-sources)
+ // save temporarely, we will find a Contact* with this later
+ if ( contactElement.hasAttribute(PSCID_ELEM) && contactElement.hasAttribute(PSPID_ELEM) && contactElement.hasAttribute(PSAID_ELEM))
+@@ -450,7 +447,7 @@ bool XmlContactStorage::parseMetaContact( Kopete::MetaContact *metaContact, cons
+ {
+ // lets do the best conversion for the old name tracking
+ // if the custom display name is the same as kabc name, set the source to kabc
+- if ( !metaContact->kabcId().isEmpty() && ( metaContact->customDisplayName() == nameFromKABC( metaContact->kabcId() )) )
++ if ( !metaContact->kabcId().isEmpty() )
+ metaContact->setDisplayNameSource( Kopete::MetaContact::SourceKABC );
+ else
+ metaContact->setDisplayNameSource( Kopete::MetaContact::SourceCustom );
+@@ -466,7 +463,7 @@ bool XmlContactStorage::parseMetaContact( Kopete::MetaContact *metaContact, cons
+ }
+ else
+ {
+- if ( !metaContact->kabcId().isEmpty() && !photoFromKABC( metaContact->kabcId() ).isNull() )
++ if ( !metaContact->kabcId().isEmpty() )
+ metaContact->setPhotoSource( Kopete::MetaContact::SourceKABC );
+ else
+ metaContact->setPhotoSource( Kopete::MetaContact::SourceCustom );
+@@ -705,9 +702,6 @@ const QDomElement XmlContactStorage::storeMetaContact( Kopete::MetaContact *meta
+ // set the contact source for photo
+ _photoSource.setAttribute( QString::fromUtf8("source"), sourceToString( metaContact->photoSource() ) );
+
+- if( !metaContact->kabcId().isEmpty() )
+- photo.setAttribute( QString::fromUtf8("syncWithKABC") , QString::fromUtf8( metaContact->isPhotoSyncedWithKABC() ? "true" : "false" ) );
+-
+ if( metaContact->photoSourceContact() )
+ {
+ //kDebug(14010) << "serializing photo source " << nameFromContact(photoSourceContact());
+diff --git a/libkopete/kopeteaccount.cpp b/libkopete/kopeteaccount.cpp
+index e6e7669a9..61f60d872 100644
+--- a/libkopete/kopeteaccount.cpp
++++ b/libkopete/kopeteaccount.cpp
+@@ -42,7 +42,6 @@
+
+ #include "kopeteidentity.h"
+ #include "kopeteidentitymanager.h"
+-#include "kabcpersistence.h"
+ #include "kopetecontactlist.h"
+ #include "kopeteaccountmanager.h"
+ #include "kopetecontact.h"
+@@ -392,11 +391,6 @@ Kopete::MetaContact* Account::addContact( const QString &contactId, const QStrin
+ if ( c )
+ {
+ c->setMetaContact( parentContact );
+- if ( mode == ChangeKABC )
+- {
+- kDebug( 14010 ) << " changing KABC";
+- KABCPersistence::self()->write( parentContact );
+- }
+ }
+ else
+ {
+@@ -453,12 +447,6 @@ bool Account::addContact(const QString &contactId , MetaContact *parent, AddMode
+
+ const bool success = createContact(contactId, parent);
+
+- if ( success && mode == ChangeKABC )
+- {
+- kDebug( 14010 ) << " changing KABC";
+- KABCPersistence::self()->write( parent );
+- }
+-
+ return success;
+ }
+
+diff --git a/libkopete/kopetecontact.cpp b/libkopete/kopetecontact.cpp
+index 670fba008..7bb5e182b 100644
+--- a/libkopete/kopetecontact.cpp
++++ b/libkopete/kopetecontact.cpp
+@@ -28,7 +28,6 @@
+ #include <kdeversion.h>
+ #include <kinputdialog.h>
+
+-#include <kabcpersistence.h>
+ #include <kdialog.h>
+ #include <klocale.h>
+ #include <kicon.h>
+@@ -448,10 +447,6 @@ void Contact::setMetaContact( MetaContact *m )
+ {
+ m->addContact( this );
+ connect( m, SIGNAL(destroyed(QObject*)), this, SLOT(slotMetaContactDestroyed(QObject*)) );
+- // it is necessary to call this write here, because MetaContact::addContact() does not differentiate
+- // between adding completely new contacts (which should be written to kabc) and restoring upon restart
+- // (where no write is needed).
+- KABCPersistence::self()->write( m );
+ }
+ sync();
+ }
+diff --git a/libkopete/kopetecontactlist.cpp b/libkopete/kopetecontactlist.cpp
+index fade2ea29..221d5ad56 100644
+--- a/libkopete/kopetecontactlist.cpp
++++ b/libkopete/kopetecontactlist.cpp
+@@ -27,7 +27,6 @@
+ #include <QtCore/QTextStream>
+
+ // KDE includes
+-#include <kabc/stdaddressbook.h>
+ #include <kapplication.h>
+ #include <kdebug.h>
+ #include <kglobal.h>
+@@ -434,16 +433,6 @@ void ContactList::slotSaveLater()
+ d->saveTimer->start( 17100 /* 17,1 seconds */ );
+ }
+
+-void ContactList::slotKABCChanged()
+-{
+- // TODO: react to changes in KABC, replacing this function, post 3.4 (Will)
+- // call syncWithKABC on each metacontact to check if its associated kabc entry has changed.
+-/* for ( MetaContact * mc = d->contacts.first(); mc; mc = d->contacts.next() )
+-
+- mc->syncWithKABC();*/
+-}
+-
+-
+ } //END namespace Kopete
+
+ #include "kopetecontactlist.moc"
+diff --git a/libkopete/kopetecontactlist.h b/libkopete/kopetecontactlist.h
+index abfb8a15f..8313757ea 100644
+--- a/libkopete/kopetecontactlist.h
++++ b/libkopete/kopetecontactlist.h
+@@ -266,10 +266,6 @@ private slots:
+ * Called when the contact list changes. Flags the list dirty and schedules a save for a little while later.
+ */
+ void slotSaveLater();
+- /**
+- * Called on contact list load or when KABC has changed, to check if we need to update our contact list from there.
+- */
+- void slotKABCChanged();
+
+ private:
+ /**
+diff --git a/libkopete/kopetemetacontact.cpp b/libkopete/kopetemetacontact.cpp
+index da9b92bf5..ef181a4ef 100644
+--- a/libkopete/kopetemetacontact.cpp
++++ b/libkopete/kopetemetacontact.cpp
+@@ -23,16 +23,12 @@
+
+ #include <QTextDocument>
+
+-#include <kabc/addressbook.h>
+-#include <kabc/addressee.h>
+-
+ #include <kdebug.h>
+ #include <klocale.h>
+ #include <kmessagebox.h>
+ #include <kdeversion.h>
+ #include <knotification.h>
+
+-#include "kabcpersistence.h"
+ #include "kopetecontactlist.h"
+ #include "kopetecontact.h"
+ #include "kopeteaccountmanager.h"
+@@ -62,10 +58,6 @@ MetaContact::MetaContact()
+ connect( this, SIGNAL(contactAdded(Kopete::Contact*)), SIGNAL(persistentDataChanged()) );
+ connect( this, SIGNAL(contactRemoved(Kopete::Contact*)), SIGNAL(persistentDataChanged()) );
+
+- // TODO: speed up: this slot is called when any kabc contact is changed and is called in *every* metacontact instance. also slot is slow because it finding kabc id
+- // Update the KABC picture when the KDE Address book change.
+- connect(KABCPersistence::self()->addressBook(), SIGNAL(addressBookChanged(AddressBook*)), this, SLOT(slotUpdateAddressBookPicture()));
+-
+ // make sure MetaContact is at least in one group
+ addToGroup( Group::topLevel() );
+ // I'm not sure this is correct -Olivier
+@@ -242,7 +234,6 @@ void MetaContact::removeContact(Contact *c, bool deleted)
+
+ kDebug( 14010 ) << "Contact disconnected";
+
+- KABCPersistence::self()->write( this );
+ }
+
+ // Reparent the contact
+@@ -668,14 +659,7 @@ QString MetaContact::customDisplayName() const
+ QString MetaContact::displayName() const
+ {
+ PropertySource source = displayNameSource();
+- if ( source == SourceKABC )
+- {
+- // kabc source, try to get from addressbook
+- // if the metacontact has a kabc association
+- if ( !kabcId().isEmpty() )
+- return nameFromKABC(kabcId());
+- }
+- else if ( source == SourceContact || d->displayName.isEmpty())
++ if ( source == SourceContact || d->displayName.isEmpty())
+ {
+ if ( d->displayNameSourceContact==0 )
+ {
+@@ -697,25 +681,6 @@ QString MetaContact::displayName() const
+ return d->displayName;
+ }
+
+-QString nameFromKABC( const QString &id ) /*const*/
+-{
+- KABC::AddressBook* ab = KABCPersistence::self()->addressBook();
+- if ( ! id.isEmpty() && !id.contains(':') )
+- {
+- KABC::Addressee theAddressee = ab->findByUid(id);
+- if ( theAddressee.isEmpty() )
+- {
+- kDebug( 14010 ) << "no KABC::Addressee found for ( " << id << " ) " << " in current address book";
+- }
+- else
+- {
+- return theAddressee.formattedName();
+- }
+- }
+- // no kabc association, return null image
+- return QString();
+-}
+-
+ QString nameFromContact( Kopete::Contact *c) /*const*/
+ {
+ if ( !c )
+@@ -787,36 +752,6 @@ QImage photoFromContact( Kopete::Contact *contact) /*const*/
+ return img;
+ }
+
+-QImage photoFromKABC( const QString &id ) /*const*/
+-{
+- KABC::AddressBook* ab = KABCPersistence::self()->addressBook();
+- if ( ! id.isEmpty() && !id.contains(':') )
+- {
+- KABC::Addressee theAddressee = ab->findByUid(id);
+- if ( theAddressee.isEmpty() )
+- {
+- kDebug( 14010 ) << "no KABC::Addressee found for ( " << id << " ) " << " in current address book";
+- }
+- else
+- {
+- KABC::Picture pic = theAddressee.photo();
+- if ( pic.data().isNull() && pic.url().isEmpty() )
+- pic = theAddressee.logo();
+-
+- if ( pic.isIntern())
+- {
+- return pic.data();
+- }
+- else
+- {
+- return QPixmap( pic.url() ).toImage();
+- }
+- }
+- }
+- // no kabc association, return null image
+- return QImage();
+-}
+-
+ Contact *MetaContact::displayNameSourceContact() const
+ {
+ return d->displayNameSourceContact;
+@@ -926,9 +861,6 @@ void MetaContact::slotPropertyChanged( PropertyContainer* _subcontact, const QSt
+ }
+ else if(photoSourceContact() == subcontact)
+ {
+- if(d->photoSyncedWithKABC)
+- setPhotoSyncedWithKABC(true);
+-
+ setPhotoSourceContact(subcontact);
+ }
+ }
+@@ -1120,28 +1052,6 @@ void MetaContact::slotAllPluginsLoaded()
+ setPhotoSourceContact( findContact( d->photoSourcePID, d->photoSourceAID, d->photoSourceCID) );
+ }
+
+-void MetaContact::slotUpdateAddressBookPicture()
+-{
+- KABC::AddressBook* ab = KABCPersistence::self()->addressBook();
+- QString id = kabcId();
+- if ( !id.isEmpty() && !id.contains(':') )
+- {
+- KABC::Addressee theAddressee = ab->findByUid(id);
+- if ( theAddressee.isEmpty() )
+- {
+- kDebug( 14010 ) << "no KABC::Addressee found for ( " << id << " ) " << " in current address book";
+- }
+- else
+- {
+- KABC::Picture pic = theAddressee.photo();
+- if ( pic.data().isNull() && pic.url().isEmpty() )
+- pic = theAddressee.logo();
+-
+- d->kabcPicture.setPicture(pic);
+- }
+- }
+-}
+-
+ bool MetaContact::isTemporary() const
+ {
+ return d->temporary;
+@@ -1197,84 +1107,14 @@ void MetaContact::setKabcId( const QString& newKabcId )
+ d->kabcId = newKabcId;
+ if ( loading() )
+ {
+- // TODO: speed up: this slot is called in *every* metacontact instance and is slow because it finding kabc id
+- slotUpdateAddressBookPicture();
+ }
+ else
+ {
+- KABCPersistence::self()->write( this );
+ emit onlineStatusChanged( this, d->onlineStatus );
+ emit persistentDataChanged();
+ }
+ }
+
+-bool MetaContact::isPhotoSyncedWithKABC() const
+-{
+- return d->photoSyncedWithKABC;
+-}
+-
+-void MetaContact::setPhotoSyncedWithKABC(bool b)
+-{
+- d->photoSyncedWithKABC=b;
+- if( b && !loading() )
+- {
+- QVariant newValue;
+-
+- switch( photoSource() )
+- {
+- case SourceContact:
+- {
+- Contact *source = photoSourceContact();
+- if(source != 0L)
+- newValue = source->property( Kopete::Global::Properties::self()->photo() ).value();
+- break;
+- }
+- case SourceCustom:
+- {
+- if( !d->customPicture.isNull() )
+- newValue = d->customPicture.path();
+- break;
+- }
+- // Don't sync the photo with KABC if the source is KABC !
+- default:
+- return;
+- }
+-
+- if ( !d->kabcId.isEmpty() && !newValue.isNull())
+- {
+- KABC::Addressee theAddressee = KABCPersistence::self()->addressBook()->findByUid( kabcId() );
+-
+- if ( !theAddressee.isEmpty() )
+- {
+- QImage img;
+- if(newValue.canConvert( QVariant::Image ))
+- img=newValue.value<QImage>();
+- else if(newValue.canConvert( QVariant::Pixmap ))
+- img=newValue.value<QPixmap>().toImage();
+-
+- if(img.isNull())
+- {
+- // Some protocols like MSN save the photo as a url in
+- // contact properties, we should not use this url
+- // to sync with kabc but try first to embed the
+- // photo data in the kabc addressee, because it could
+- // be remote resource and the local url makes no sense
+- QImage fallBackImage = QImage(newValue.toString());
+- if(fallBackImage.isNull())
+- theAddressee.setPhoto(newValue.toString());
+- else
+- theAddressee.setPhoto(fallBackImage);
+- }
+- else
+- theAddressee.setPhoto(img);
+-
+- KABCPersistence::self()->addressBook()->insertAddressee(theAddressee);
+- KABCPersistence::self()->writeAddressBook( theAddressee.resource() );
+- }
+-
+- }
+- }
+-}
+
+ QList<Contact *> MetaContact::contacts() const
+ {
+diff --git a/libkopete/kopetemetacontact.h b/libkopete/kopetemetacontact.h
+index 55b202d57..80613ec64 100644
+--- a/libkopete/kopetemetacontact.h
++++ b/libkopete/kopetemetacontact.h
+@@ -64,7 +64,6 @@ class KOPETE_EXPORT MetaContact : public ContactListElement
+ Q_PROPERTY( bool canAcceptFiles READ canAcceptFiles )
+ //Q_PROPERTY( ulong idleTime READ idleTime )
+ Q_PROPERTY( QUuid metaContactId READ metaContactId WRITE setMetaContactId )
+- Q_PROPERTY( bool photoSyncedWithKABC READ isPhotoSyncedWithKABC WRITE setPhotoSyncedWithKABC )
+
+ public:
+ typedef QList<MetaContact *> List;
+@@ -275,19 +274,6 @@ public:
+ */
+ void setPhotoSourceContact( Contact* contact );
+
+- /**
+- * @return true if when a subcontact change his photo, the photo will be set to the kabc contact.
+- */
+- bool isPhotoSyncedWithKABC() const;
+-
+- /**
+- * Set if the photo should be synced with the adressbook when the photosource change his photo
+- *
+- * If \p b is true, the photo will be synced immediately if possible
+- */
+- void setPhotoSyncedWithKABC(bool b);
+-
+-
+ /**
+ * Temporary contacts will not be serialized.
+ * If they are added to the contact list, they appears in a special "Not in your contact list" group.
+@@ -601,11 +587,6 @@ private slots:
+ */
+ void slotContactDestroyed( Kopete::Contact* );
+
+- /**
+- * Update the KABC Picture when the addressbook is changed.
+- */
+- void slotUpdateAddressBookPicture();
+-
+ protected:
+ //QImage photoFromContact( Kopete::Contact *c) const;
+ //QImage photoFromKABC( const QString &id ) const;
+@@ -622,9 +603,7 @@ private:
+
+ // util functions shared with metacontact property dialog
+ KOPETE_EXPORT QImage photoFromContact( Kopete::Contact *c) /*const*/;
+-KOPETE_EXPORT QImage photoFromKABC( const QString &id ) /*const*/;
+ KOPETE_EXPORT QString nameFromContact( Kopete::Contact *c) /*const*/;
+-KOPETE_EXPORT QString nameFromKABC( const QString &id ) /*const*/;
+
+ } //END namespace Kopete
+
+diff --git a/libkopete/kopetepicture.cpp b/libkopete/kopetepicture.cpp
+index c84ab34d2..c5c0e143b 100644
+--- a/libkopete/kopetepicture.cpp
++++ b/libkopete/kopetepicture.cpp
+@@ -18,8 +18,6 @@
+
+ #include <qbuffer.h>
+
+-#include <kabc/picture.h>
+-
+ #include <kcodecs.h>
+ #include <kstandarddirs.h>
+ #include <kdebug.h>
+@@ -56,12 +54,6 @@ Picture::Picture(const QImage &image)
+ setPicture(image);
+ }
+
+-Picture::Picture(const KABC::Picture &picture)
+- : d(new Private)
+-{
+- setPicture(picture);
+-}
+-
+ Picture::Picture(const Picture &other)
+ : d(other.d)
+ {}
+@@ -172,19 +164,6 @@ void Picture::setPicture(const QString &path)
+ d->pictureBase64.clear();
+ }
+
+-void Picture::setPicture(const KABC::Picture &picture)
+-{
+- // No need to call detach() here because setPicture will do it.
+- if ( picture.isIntern())
+- {
+- setPicture( picture.data() );
+- }
+- else
+- {
+- setPicture( picture.url() );
+- }
+-}
+-
+ void Picture::detach()
+ {
+ // there is no detach in KSharedPtr.
+diff --git a/libkopete/ui/addressbooklinkwidget.h b/libkopete/ui/addressbooklinkwidget.h
+index ddb17156d..c33395f60 100644
+--- a/libkopete/ui/addressbooklinkwidget.h
++++ b/libkopete/ui/addressbooklinkwidget.h
+@@ -24,7 +24,6 @@
+ #ifndef ADDRESSBOOKLINKWIDGET_H
+ #define ADDRESSBOOKLINKWIDGET_H
+
+-#include <kabc/addressee.h>
+ #include <kopete_export.h>
+
+ #include "ui_addressbooklinkwidget_base.h"
+@@ -47,10 +46,6 @@ Q_OBJECT
+ public:
+ explicit AddressBookLinkWidget( QWidget * parent = 0, const char * name = 0 );
+ ~AddressBookLinkWidget() {}
+- /**
+- * Set the currently selected addressee
+- */
+- void setAddressee( const KABC::Addressee& addr );
+ /**
+ * Set the current metacontact so that the selector dialog may be preselected
+ */
+@@ -60,11 +55,7 @@ public:
+ */
+ QString uid() const;
+ signals:
+- /**
+- * Emitted when the selected addressee changed. addr is the KABC::Addressee that was selected. If addr.isEmpty() is empty, the clear button was clicked.
+- */
+- void addresseeChanged( const KABC::Addressee& addr );
+-
++
+ /**
+ * Provided so you can perform your own actions instead of opening the AddressBookSelectorWidget.
+ * To do so, QObject::disconnect() btnSelectAddressee and connect your own slot to this signal
+diff --git a/libkopete/ui/contactaddednotifydialog.cpp b/libkopete/ui/contactaddednotifydialog.cpp
+index e5724c42e..d8432e8f8 100644
+--- a/libkopete/ui/contactaddednotifydialog.cpp
++++ b/libkopete/ui/contactaddednotifydialog.cpp
+@@ -26,16 +26,12 @@
+ #include <kpushbutton.h>
+ #include <kiconloader.h>
+
+-#include <kabc/addressee.h>
+-
+ #include "kopetegroup.h"
+ #include "kopeteaccount.h"
+ #include "kopeteuiglobal.h"
+ #include "kopeteprotocol.h"
+ #include "kopetecontactlist.h"
+ #include "kopetemetacontact.h"
+-#include "addressbooklinkwidget.h"
+-#include "addressbookselectordialog.h"
+ #include "ui_contactaddednotifywidget.h"
+
+ namespace Kopete {
+@@ -99,7 +95,6 @@ ContactAddedNotifyDialog::ContactAddedNotifyDialog(const QString& contactId,
+ }
+ d->widget->m_groupList->setEditText(QString()); //default to top-level
+
+- connect( d->widget->widAddresseeLink, SIGNAL(addresseeChanged(KABC::Addressee)), this, SLOT(slotAddresseeSelected(KABC::Addressee)) );
+ connect( d->widget->m_infoButton, SIGNAL(clicked()), this, SLOT(slotInfoClicked()) );
+
+ connect( this, SIGNAL(okClicked()) , this , SLOT(slotFinished()));
+@@ -146,19 +141,9 @@ MetaContact *ContactAddedNotifyDialog::addContact() const
+ if(!metacontact)
+ return 0L;
+
+- metacontact->setKabcId(d->addressbookId);
+-
+ return metacontact;
+ }
+
+-void ContactAddedNotifyDialog::slotAddresseeSelected( const KABC::Addressee & addr )
+-{
+- if ( !addr.isEmpty() )
+- {
+- d->addressbookId = addr.uid();
+- }
+-}
+-
+ void ContactAddedNotifyDialog::slotInfoClicked()
+ {
+ emit infoClicked(d->contactId);
+diff --git a/libkopete/ui/contactaddednotifydialog.h b/libkopete/ui/contactaddednotifydialog.h
+index d0077b160..5bd8c1b7c 100644
+--- a/libkopete/ui/contactaddednotifydialog.h
++++ b/libkopete/ui/contactaddednotifydialog.h
+@@ -20,10 +20,6 @@
+ #include <kdialog.h>
+ #include "kopete_export.h"
+
+-namespace KABC {
+- class Addressee;
+-}
+-
+ namespace Kopete {
+
+ class Group;
+@@ -160,7 +156,6 @@ signals:
+
+
+ private slots:
+- void slotAddresseeSelected( const KABC::Addressee &);
+ void slotInfoClicked();
+ void slotFinished();
+
+diff --git a/libkopete/ui/contactaddednotifywidget.ui b/libkopete/ui/contactaddednotifywidget.ui
+index a754917e5..69496c437 100644
+--- a/libkopete/ui/contactaddednotifywidget.ui
++++ b/libkopete/ui/contactaddednotifywidget.ui
+@@ -196,9 +196,6 @@ Leave it empty if you want to see the contact's nickname as their display name.<
+ </property>
+ </spacer>
+ </item>
+- <item>
+- <widget class="Kopete::UI::AddressBookLinkWidget" name="widAddresseeLink" />
+- </item>
+ </layout>
+ </item>
+ </layout>
+@@ -236,13 +233,6 @@ Leave it empty if you want to see the contact's nickname as their display name.<
+ <header>klineedit.h</header>
+ <container>0</container>
+ <pixmap></pixmap>
+- </customwidget>
+- <customwidget>
+- <class>Kopete::UI::AddressBookLinkWidget</class>
+- <extends></extends>
+- <header>addressbooklinkwidget.h</header>
+- <container>0</container>
+- <pixmap></pixmap>
+ </customwidget>
+ <customwidget>
+ <class>KPushButton</class>
+diff --git a/protocols/bonjour/bonjoureditaccountwidget.cpp b/protocols/bonjour/bonjoureditaccountwidget.cpp
+index 53ee146b5..5b01c5f1e 100644
+--- a/protocols/bonjour/bonjoureditaccountwidget.cpp
++++ b/protocols/bonjour/bonjoureditaccountwidget.cpp
+@@ -28,8 +28,6 @@
+ #include "bonjourprotocol.h"
+ #include <kconfigdialog.h>
+ #include <kuser.h>
+-#include <kpimidentities/identity.h>
+-#include <kpimidentities/identitymanager.h>
+
+ BonjourEditAccountWidget::BonjourEditAccountWidget( QWidget* parent, Kopete::Account* account)
+ : QWidget( parent ), KopeteEditAccountWidget( account )
+@@ -63,19 +61,6 @@ BonjourEditAccountWidget::BonjourEditAccountWidget( QWidget* parent, Kopete::Acc
+ names = user.property(KUser::FullName).toString().split(' ');
+ }
+
+- // Next try via the default identity
+- KPIMIdentities::IdentityManager manager(true);
+- const KPIMIdentities::Identity & ident = manager.defaultIdentity();
+-
+- if (! ident.isNull()) {
+- // Get the full name from identity (only if not available via KUser)
+- if ( names.isEmpty() )
+- names = ident.fullName().split(' ');
+-
+- // Get the email address
+- emailAddress = ident.primaryEmailAddress();
+- }
+-
+ // Split the names array into firstName and lastName
+ if (! names.isEmpty()) {
+ firstName = names.takeFirst();
diff --git a/nonprism/kopete/kopete-pthread-link.patch b/nonprism/kopete/kopete-pthread-link.patch
new file mode 100644
index 000000000..d917fe65e
--- /dev/null
+++ b/nonprism/kopete/kopete-pthread-link.patch
@@ -0,0 +1,12 @@
+diff --git a/protocols/jabber/libjingle/CMakeLists.txt b/protocols/jabber/libjingle/CMakeLists.txt
+index 7ea8c3eb6..4b73085b8 100644
+--- a/protocols/jabber/libjingle/CMakeLists.txt
++++ b/protocols/jabber/libjingle/CMakeLists.txt
+@@ -288,6 +288,7 @@ set ( call_LIBS
+ ${MEDIASTREAMER_LIBRARIES}
+ ${LIBORTP_LIBRARY}
+ ${CMAKE_DL_LIBS}
++ pthread
+ )
+
+ if ( NOT WIN32 )
diff --git a/nonprism/kopete/libre-nonprism.patch b/nonprism/kopete/libre-nonprism.patch
new file mode 100644
index 000000000..712220546
--- /dev/null
+++ b/nonprism/kopete/libre-nonprism.patch
@@ -0,0 +1,109 @@
+diff -Nur kopete-14.12.1.orig/doc/index.docbook kopete-14.12.1/doc/index.docbook
+--- kopete-14.12.1.orig/doc/index.docbook 2014-11-19 21:39:14.000000000 -0200
++++ kopete-14.12.1/doc/index.docbook 2015-01-25 16:44:09.213439141 -0200
+@@ -24,7 +24,6 @@
+ <!ENTITY kopete-chatstyle SYSTEM "chatstyle.docbook">
+ <!ENTITY kopete-pipes SYSTEM "pipes.docbook">
+ <!ENTITY kopete-jabber SYSTEM "jabber.docbook">
+- <!ENTITY kopete-icq SYSTEM "icq.docbook">
+ <!ENTITY kopete-emoticonspec SYSTEM "emoticonspec.docbook">
+ ]>
+ <!--
+@@ -117,15 +116,7 @@
+ <keyword>Messaging</keyword>
+ <keyword>Jabber</keyword>
+ <keyword>IRC</keyword>
+-<keyword>WLM</keyword>
+-<keyword>ICQ</keyword>
+-<keyword>AIM</keyword>
+-<keyword>Yahoo</keyword>
+-<keyword>Gadu-Gadu</keyword>
+-<keyword>GroupWise</keyword>
+-<keyword>Novell</keyword>
+ <keyword>WinPopup</keyword>
+-<keyword>SMS</keyword>
+ </keywordset>
+
+ </bookinfo>
+@@ -179,13 +170,13 @@
+ <para>To use &kopete; you need to set up one or more accounts for the instant messaging services you wish to use.</para>
+ <para>You've probably already chosen a messaging service, either because you already use &im;, or you need to use the same service as your friends. If you don't fit into either of these categories, please consider using a messaging service based on open standards, because these are designed for use by Free Software. Other messaging services are prone to changing the underlying technology without making the details freely available, making them harder for Free Software developers to support.</para>
+ <para>The messaging services that &kopete; supports that are based on open standards are Jabber and IRC.</para>
+-<para>The following section assumes you are registered with an &im; service already. If not, you can register with Gadu-Gadu, Jabber, and <trademark>WLM</trademark> from inside &kopete;; for other services, you'll have to register using their respective web site before creating an account in &kopete;.</para>
++<para>The following section assumes you are registered with an &im; service already. If not, you can register with Jabber from inside &kopete;; for other services, you'll have to register using their respective web site before creating an account in &kopete;.</para>
+ <sect1 id="creating-accounts">
+ <title>Creating Accounts</title>
+ <para>To create an account, use <menuchoice><guimenu>Settings</guimenu> <guimenuitem>Configure...</guimenuitem> </menuchoice> to display the Configure window.</para>
+ <para>The Configure window is the main way to set up and customize &kopete;. On the left a column of icons control which aspect of &kopete; is being configured. Click the <guiicon>Accounts</guiicon> icon. The main pane will change to display the account management pane. This is currently empty, but will soon list your &im; accounts. Click <guibutton>Add Account</guibutton> to display the <interface>Account Wizard</interface>.</para>
+ <para>The <interface>Account Wizard</interface> helps you create an &im; account. On the first page, you are asked to select the messaging service that you'd like to use. Click one of the services shown and then click <guibutton>Next</guibutton>. On the following page, you should enter your registration details for that instant messaging service.</para>
+-<para>Most services just require you to enter a username or unique identifying number (<acronym>UIN</acronym>) and password. The special purpose services Winpopup and <acronym>SMS</acronym> work slightly differently, so please see their specific sections. There are a couple of other options that apply to most services that you should look at:</para>
++<para>Most services just require you to enter a username or unique identifying number (<acronym>UIN</acronym>) and password. The special purpose services Winpopup work slightly differently, so please see their specific sections. There are a couple of other options that apply to most services that you should look at:</para>
+ <variablelist>
+ <varlistentry><term>Remember password</term><listitem><para>When this is checked, &kopete; will store the password for you, so you don't have to enter it every time you connect to the &im; service. If you are security-conscious or want to limit access to the &im; account you can leave this unchecked.</para></listitem></varlistentry>
+ <varlistentry><term>Connect at startup</term><listitem><para>When this is checked, &kopete; will try to connect to the &im; service as when it starts. If you use a <acronym>LAN</acronym>, <acronym>DSL</acronym> or other <quote>always-on</quote> connection, this is appropriate; dial-up modem users should turn this off and connect manually when you have dialed up.</para></listitem></varlistentry>
+@@ -261,7 +252,7 @@
+ <listitem><para>Select Display Name and Group. Here you can enter a Display Name (the name used for this person inside &kopete;), and choose the <link linkend="organise-contacts-grouping">groups</link> they are a member of.</para></listitem>
+ <listitem><para>Select &im; Accounts. Here you can choose which accounts you want to use to chat to the new contact. If you only have one &im; account, you won't see this screen.</para></listitem>
+ <listitem><para>Account-specific Add Contact Pages. For each account, you'll get one page where you can enter the <acronym>UIN</acronym>, buddy name or Email address, depending on the &im; system in use.</para></listitem>
+-<listitem><para>Finish Screen. All done. Except if the &im; system requires authorization (such as <trademark>ICQ</trademark>) to add a contact to your list - in which case, you'll be prompted after the wizard exits.</para></listitem>
++<listitem><para>Finish Screen. All done. Except if the &im; system requires authorization to add a contact to your list - in which case, you'll be prompted after the wizard exits.</para></listitem>
+ </orderedlist>
+
+ <para>You can add contacts to an existing Metacontact using its context menu.</para>
+@@ -706,47 +697,17 @@
+ <para>&kopete; calls different &im; systems 'Protocols'. When you add an account, it is specific to a single protocol. Although &kopete; tries to make instant messaging appear the same, no matter what protocol you use, there are some differences in the level of support for advanced features such as file transfer and multimedia.</para>
+ <sect1 id="protocols-list">
+ <title>Protocols</title>
+- <sect2 id="protocols-aim">
+- <title>AIM</title>
+- <para>AIM supports chatrooms. Use the <guilabel>Join Chat...</guilabel> command on the AIM account menu to join a chatroom. Contact pictures and custom emoticons are also supported.</para>
+- </sect2>
+- <sect2 id="protocols-icq">
+- <title>ICQ</title>
+- <para>ICQ has an Invisibility feature which allows you to hide from selected contacts. You may also search the ICQ user folder when adding a contact. A wide range of contact details can be set using the <guilabel>Properties</guilabel> option.</para>
+- </sect2>
+- <sect2 id="protocols-msn">
+- <title>WLM</title>
+- <para>File transfer and multi user chats work. To transfer a file, drag the file from &dolphin; or the desktop into the chat window. To invite someone else into a chat, drag them from the Contact List into the chat window. The <menuchoice><guimenu>File</guimenu></menuchoice> menu also contains these commands. In addition, WLM supports custom emoticons.</para>
+- <para>To use file transfer, make sure port 6891 is forwarded to your computer.</para>
+- </sect2>
+- <sect2 id="protocols-yahoo">
+- <title>Yahoo</title>
+- <para>Yahoo can send and receive webcam video. It also supports Yahoo mail and the Yahoo address book from the account menu. Conferencing is also possible.</para>
+- </sect2>
+ <sect2 id="protocols-jabber">
+ <title>Jabber</title>
+ <para>Jabber, also known as XMPP, supports file transfer, conferencing and any other services supplied by the Jabber server. For example, many Jabber servers have a user directory, and some provide transports to other messaging systems. To access services, use <menuchoice><guimenu>Services...</guimenu></menuchoice> on the account menu. Jabber file transfer can work without port forwarding, but enjoys better performance where a direct connection is possible. By default, port 8010 is used for port forwarding, but this is configurable in each account's settings.</para>
+ </sect2>
+- <sect2 id="protocols-gtalk">
+- <title>Google Talk</title>
+- <para>Since Google Talk is based upon Jabber, it is well supported in &kopete; with the exception of voice chat, which is worked upon.</para>
+- <para>To configure &kopete; for Google Talk: Use your complete Google Mail address as the user name. Check <guilabel>Use protocol encryption (SSL)</guilabel>, <guilabel>Allow plain-text password authentication</guilabel> and <guilabel>Override default server information</guilabel>. The server is <quote>talk.google.com</quote> or <quote>gmail.com</quote> and ports 443 or 5223 should be used.</para>
+- </sect2>
+- <sect2 id="protocols-groupwise">
+- <title>Novell GroupWise</title>
+- <para>GroupWise Messenger is an enterprise messenging system from Novell Inc. The full range of features are supported, including privacy, group chat, rich text and user search.</para>
+- </sect2>
+- <sect2 id="protocols-gadu-gadu">
+- <title>Gadu-Gadu</title>
+- <para>Gadu-Gadu is a chat system originating from Poland. At present, &kopete; supports basic chat functions.</para>
+- </sect2>
+ <sect2 id="protocols-winpopup">
+ <title>WinPopup</title>
+ <para>WinPopup is a way to use &kopete; to send and receive messages with &Windows; computers on the local network. The WinPopup protocol only supports single, plain-text messages.</para>
+ </sect2>
+ <sect2 id="protocols-others">
+ <title>Other protocols</title>
+- <para>As well as the protocols named above, &kopete; has support for several other protocols. In most cases, this is not enabled by default or an additional plugin must be installed. Meanwhile, SMS and SILC are provided in this way. See &kopetewww; for details, however, the &kopete; team are not responsible for these protocols.</para>
++ <para>As well as the protocols named above, &kopete; has support for several other protocols. In most cases, this is not enabled by default or an additional plugin must be installed. See &kopetewww; for details, however, the &kopete; team are not responsible for these protocols.</para>
+ </sect2>
+ </sect1>
+ </chapter>
+@@ -1245,7 +1206,6 @@
+ &kopete-chatstyle;
+ &kopete-pipes;
+ &kopete-jabber;
+-&kopete-icq;
+ &kopete-emoticonspec;
+
+ &documentation.index;