diff options
Diffstat (limited to 'libre/kopete')
-rw-r--r-- | libre/kopete/PKGBUILD | 77 | ||||
-rw-r--r-- | libre/kopete/kopete-mediastreamer2.14.patch | 83 | ||||
-rw-r--r-- | libre/kopete/kopete-no-kdepimlibs.patch | 1280 | ||||
-rw-r--r-- | libre/kopete/kopete-openssl-1.1.patch | 300 | ||||
-rw-r--r-- | libre/kopete/kopete-pthread-link.patch | 12 |
5 files changed, 1752 insertions, 0 deletions
diff --git a/libre/kopete/PKGBUILD b/libre/kopete/PKGBUILD new file mode 100644 index 000000000..bf2ffdd71 --- /dev/null +++ b/libre/kopete/PKGBUILD @@ -0,0 +1,77 @@ +# Maintainer: Andreas Grapentin <andreas@grapentin.org> +# Maintainer (Arch): Felix Yan <felixonmars@archlinux.org> +# Maintainer (Arch): Antonio Rojas <arojas@archlinux.org> +# Contributor: André Silva <emulatorman@hyperbola.info> +# Contributor: jc_gargma <jc_gargma@iserlohn-fortress.net> +# Contributor (Arch): Andrea Scarpino <andrea@archlinux.org> + +pkgname=kopete + +pkgver=17.08.3 +pkgrel=1.parabola2 +arch=(i686 x86_64 armv7h) + +pkgdesc="Instant Messenger, without nonfree Skype support" +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' + 'libgadu: Gadu-Gadu protocol' + 'openssl-1.0: 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) +sha256sums=('f86ccc1ca809c723d1baf2eed745f158337059263555f6fafa23ea200aacafec' + 'SKIP' + 'c34a268aaa058e563174581dbe37c15fed91e82326ec704d2a872463139865e0' + 'a7ebdd8dd4336b7ec085ef254bf18040f473b73379a8cd84569b28441a6c71df' + 'b9e7f0029dabe6a738114b11a093eb7d24aaf1e71b26d089901246e56cbeacf5') +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 + + # 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 \ + -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 \ + -DWITH_skype=OFF + make +} + +package() { + cd build + + make DESTDIR="$pkgdir" install +} diff --git a/libre/kopete/kopete-mediastreamer2.14.patch b/libre/kopete/kopete-mediastreamer2.14.patch new file mode 100644 index 000000000..f4ee1a096 --- /dev/null +++ b/libre/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/libre/kopete/kopete-no-kdepimlibs.patch b/libre/kopete/kopete-no-kdepimlibs.patch new file mode 100644 index 000000000..e4d3609f8 --- /dev/null +++ b/libre/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&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>&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 &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&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/libre/kopete/kopete-openssl-1.1.patch b/libre/kopete/kopete-openssl-1.1.patch new file mode 100644 index 000000000..ed09a6a1e --- /dev/null +++ b/libre/kopete/kopete-openssl-1.1.patch @@ -0,0 +1,300 @@ +diff -up libjingle-0.6.14/talk/base/openssladapter.cc.openssl11 libjingle-0.6.14/talk/base/openssladapter.cc +--- libjingle-0.6.14/talk/base/openssladapter.cc.openssl11 2017-02-20 15:00:27.678103635 -0500 ++++ libjingle-0.6.14/talk/base/openssladapter.cc 2017-02-20 15:57:36.884341533 -0500 +@@ -84,6 +84,7 @@ static long socket_ctrl(BIO* h, int cmd, + static int socket_new(BIO* h); + static int socket_free(BIO* data); + ++#if OPENSSL_VERSION_NUMBER < 0x10100000L + static BIO_METHOD methods_socket = { + BIO_TYPE_BIO, + "socket", +@@ -98,16 +99,36 @@ static BIO_METHOD methods_socket = { + }; + + BIO_METHOD* BIO_s_socket2() { return(&methods_socket); } ++#else ++static BIO_METHOD *methods_socket = NULL; ++ ++static const BIO_METHOD * BIO_s_socket2(void) { ++ if (methods_socket == NULL) { ++ methods_socket = BIO_meth_new (BIO_TYPE_BIO | BIO_get_new_index (), "socket"); ++ if (methods_socket == NULL || ++ BIO_meth_set_write (methods_socket, socket_write) || ++ BIO_meth_set_read (methods_socket, socket_read) || ++ BIO_meth_set_puts (methods_socket, socket_puts) || ++ BIO_meth_set_gets (methods_socket, 0) || ++ BIO_meth_set_ctrl (methods_socket, socket_ctrl) || ++ BIO_meth_set_create (methods_socket, socket_new) || ++ BIO_meth_set_destroy (methods_socket, socket_free)) ++ return NULL; ++ } ++ return methods_socket; ++} ++#endif + + BIO* BIO_new_socket(talk_base::AsyncSocket* socket) { + BIO* ret = BIO_new(BIO_s_socket2()); + if (ret == NULL) { + return NULL; + } +- ret->ptr = socket; ++ BIO_set_data(ret, socket); + return ret; + } + ++#if OPENSSL_VERSION_NUMBER < 0x10100000L + static int socket_new(BIO* b) { + b->shutdown = 0; + b->init = 1; +@@ -115,6 +136,14 @@ static int socket_new(BIO* b) { + b->ptr = 0; + return 1; + } ++#else ++static int socket_new(BIO* b) { ++ BIO_set_shutdown(b, 0); ++ BIO_set_init(b, 1); ++ BIO_set_data(b, 0); ++ return 1; ++} ++#endif + + static int socket_free(BIO* b) { + if (b == NULL) +@@ -125,13 +154,11 @@ static int socket_free(BIO* b) { + static int socket_read(BIO* b, char* out, int outl) { + if (!out) + return -1; +- talk_base::AsyncSocket* socket = static_cast<talk_base::AsyncSocket*>(b->ptr); ++ talk_base::AsyncSocket* socket = static_cast<talk_base::AsyncSocket*>(BIO_get_data(b)); + BIO_clear_retry_flags(b); + int result = socket->Recv(out, outl); + if (result > 0) { + return result; +- } else if (result == 0) { +- b->num = 1; + } else if (socket->IsBlocking()) { + BIO_set_retry_read(b); + } +@@ -141,7 +168,7 @@ static int socket_read(BIO* b, char* out + static int socket_write(BIO* b, const char* in, int inl) { + if (!in) + return -1; +- talk_base::AsyncSocket* socket = static_cast<talk_base::AsyncSocket*>(b->ptr); ++ talk_base::AsyncSocket* socket = static_cast<talk_base::AsyncSocket*>(BIO_get_data(b)); + BIO_clear_retry_flags(b); + int result = socket->Send(in, inl); + if (result > 0) { +@@ -164,7 +191,6 @@ static long socket_ctrl(BIO* b, int cmd, + case BIO_CTRL_RESET: + return 0; + case BIO_CTRL_EOF: +- return b->num; + case BIO_CTRL_WPENDING: + case BIO_CTRL_PENDING: + return 0; +@@ -696,7 +722,9 @@ bool OpenSSLAdapter::VerifyServerName(SS + // We assign this to a local variable, instead of passing the address + // directly to ASN1_item_d2i. + // See http://readlist.com/lists/openssl.org/openssl-users/0/4761.html. +- unsigned char* ext_value_data = extension->value->data; ++ ASN1_OCTET_STRING *extension_data = X509_EXTENSION_get_data(extension); ++ unsigned char* ext_value_data = extension_data->data; ++ long length = extension_data->length; + + #if OPENSSL_VERSION_NUMBER >= 0x0090800fL + const unsigned char **ext_value_data_ptr = +@@ -707,10 +735,10 @@ bool OpenSSLAdapter::VerifyServerName(SS + + if (meth->it) { + ext_str = ASN1_item_d2i(NULL, ext_value_data_ptr, +- extension->value->length, ++ length, + ASN1_ITEM_ptr(meth->it)); + } else { +- ext_str = meth->d2i(NULL, ext_value_data_ptr, extension->value->length); ++ ext_str = meth->d2i(NULL, ext_value_data_ptr, length); + } + + STACK_OF(CONF_VALUE)* value = meth->i2v(meth, ext_str, NULL); +diff -up libjingle-0.6.14/talk/base/opensslidentity.cc.openssl11 libjingle-0.6.14/talk/base/opensslidentity.cc +--- libjingle-0.6.14/talk/base/opensslidentity.cc.openssl11 2017-02-20 15:58:26.642105790 -0500 ++++ libjingle-0.6.14/talk/base/opensslidentity.cc 2017-02-20 16:04:05.130707597 -0500 +@@ -168,7 +168,12 @@ OpenSSLKeyPair::~OpenSSLKeyPair() { + } + + void OpenSSLKeyPair::AddReference() { ++#if OPENSSL_VERSION_NUMBER < 0x10100000L + CRYPTO_add(&pkey_->references, 1, CRYPTO_LOCK_EVP_PKEY); ++#else ++ EVP_PKEY_up_ref(pkey_); ++#endif ++ + } + + #ifdef _DEBUG +@@ -314,7 +319,11 @@ std::string OpenSSLCertificate::ToPEMStr + } + + void OpenSSLCertificate::AddReference() { ++#if OPENSSL_VERSION_NUMBER < 0x10100000L + CRYPTO_add(&x509_->references, 1, CRYPTO_LOCK_X509); ++#else ++ X509_up_ref(x509_); ++#endif + } + + OpenSSLIdentity* OpenSSLIdentity::Generate(const std::string& common_name) { +diff -up libjingle-0.6.14/talk/base/opensslstreamadapter.cc.openssl11 libjingle-0.6.14/talk/base/opensslstreamadapter.cc +--- libjingle-0.6.14/talk/base/opensslstreamadapter.cc.openssl11 2017-02-20 16:05:03.402259071 -0500 ++++ libjingle-0.6.14/talk/base/opensslstreamadapter.cc 2017-02-20 16:12:45.682795913 -0500 +@@ -86,6 +86,7 @@ static long stream_ctrl(BIO* h, int cmd, + static int stream_new(BIO* h); + static int stream_free(BIO* data); + ++#if OPENSSL_VERSION_NUMBER < 0x10100000L + static BIO_METHOD methods_stream = { + BIO_TYPE_BIO, + "stream", +@@ -100,17 +101,37 @@ static BIO_METHOD methods_stream = { + }; + + static BIO_METHOD* BIO_s_stream() { return(&methods_stream); } ++#else ++static BIO_METHOD *methods_stream = NULL; ++ ++static const BIO_METHOD * BIO_s_stream(void) { ++ if (methods_stream == NULL) { ++ methods_stream = BIO_meth_new (BIO_TYPE_BIO | BIO_get_new_index (), "stream"); ++ if (methods_stream == NULL || ++ BIO_meth_set_write (methods_stream, stream_write) || ++ BIO_meth_set_read (methods_stream, stream_read) || ++ BIO_meth_set_puts (methods_stream, stream_puts) || ++ BIO_meth_set_gets (methods_stream, 0) || ++ BIO_meth_set_ctrl (methods_stream, stream_ctrl) || ++ BIO_meth_set_create (methods_stream, stream_new) || ++ BIO_meth_set_destroy (methods_stream, stream_free)) ++ return NULL; ++ } ++ return methods_stream; ++} ++#endif + + static BIO* BIO_new_stream(StreamInterface* stream) { + BIO* ret = BIO_new(BIO_s_stream()); + if (ret == NULL) + return NULL; +- ret->ptr = stream; ++ BIO_set_data(ret, stream); + return ret; + } + + // bio methods return 1 (or at least non-zero) on success and 0 on failure. + ++#if OPENSSL_VERSION_NUMBER < 0x10100000L + static int stream_new(BIO* b) { + b->shutdown = 0; + b->init = 1; +@@ -118,6 +139,14 @@ static int stream_new(BIO* b) { + b->ptr = 0; + return 1; + } ++#else ++static int stream_new(BIO* b) { ++ BIO_set_shutdown(b, 0); ++ BIO_set_init(b, 1); ++ BIO_set_data(b, 0); ++ return 1; ++} ++#endif + + static int stream_free(BIO* b) { + if (b == NULL) +@@ -128,15 +157,13 @@ static int stream_free(BIO* b) { + static int stream_read(BIO* b, char* out, int outl) { + if (!out) + return -1; +- StreamInterface* stream = static_cast<StreamInterface*>(b->ptr); ++ StreamInterface* stream = static_cast<StreamInterface*>(BIO_get_data(b)); + BIO_clear_retry_flags(b); + size_t read; + int error; + StreamResult result = stream->Read(out, outl, &read, &error); + if (result == SR_SUCCESS) { + return read; +- } else if (result == SR_EOS) { +- b->num = 1; + } else if (result == SR_BLOCK) { + BIO_set_retry_read(b); + } +@@ -146,7 +173,7 @@ static int stream_read(BIO* b, char* out + static int stream_write(BIO* b, const char* in, int inl) { + if (!in) + return -1; +- StreamInterface* stream = static_cast<StreamInterface*>(b->ptr); ++ StreamInterface* stream = static_cast<StreamInterface*>(BIO_get_data(b)); + BIO_clear_retry_flags(b); + size_t written; + int error; +@@ -171,7 +198,6 @@ static long stream_ctrl(BIO* b, int cmd, + case BIO_CTRL_RESET: + return 0; + case BIO_CTRL_EOF: +- return b->num; + case BIO_CTRL_WPENDING: + case BIO_CTRL_PENDING: + return 0; +--- libjingle/talk/base/openssldigest.cc.orig 2017-05-11 15:33:00.221086766 +0000 ++++ libjingle/talk/base/openssldigest.cc 2017-05-11 15:33:52.414339449 +0000 +@@ -32,16 +32,16 @@ + namespace talk_base { + + OpenSSLDigest::OpenSSLDigest(const std::string& algorithm) { +- EVP_MD_CTX_init(&ctx_); ++ EVP_MD_CTX_init(ctx_); + if (GetDigestEVP(algorithm, &md_)) { +- EVP_DigestInit_ex(&ctx_, md_, NULL); ++ EVP_DigestInit_ex(ctx_, md_, NULL); + } else { + md_ = NULL; + } + } + + OpenSSLDigest::~OpenSSLDigest() { +- EVP_MD_CTX_cleanup(&ctx_); ++ EVP_MD_CTX_destroy(ctx_); + } + + size_t OpenSSLDigest::Size() const { +@@ -55,16 +55,16 @@ + if (!md_) { + return; + } +- EVP_DigestUpdate(&ctx_, buf, len); ++ EVP_DigestUpdate(ctx_, buf, len); + } + + size_t OpenSSLDigest::Finish(void* buf, size_t len) { + if (!md_ || len < Size()) { + return 0; + } + unsigned int md_len; +- EVP_DigestFinal_ex(&ctx_, static_cast<unsigned char*>(buf), &md_len); +- EVP_DigestInit_ex(&ctx_, md_, NULL); // prepare for future Update()s ++ EVP_DigestFinal_ex(ctx_, static_cast<unsigned char*>(buf), &md_len); ++ EVP_DigestInit_ex(ctx_, md_, NULL); // prepare for future Update()s + ASSERT(md_len == Size()); + return md_len; + } +--- libjingle/talk/base/openssldigest.h.orig 2017-05-11 15:31:56.341185527 +0000 ++++ libjingle/talk/base/openssldigest.h 2017-05-11 15:32:49.631103132 +0000 +@@ -55,7 +55,7 @@ + size_t* len); + + private: +- EVP_MD_CTX ctx_; ++ EVP_MD_CTX* ctx_ = EVP_MD_CTX_create(); + const EVP_MD* md_; + }; + diff --git a/libre/kopete/kopete-pthread-link.patch b/libre/kopete/kopete-pthread-link.patch new file mode 100644 index 000000000..d917fe65e --- /dev/null +++ b/libre/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 ) |