Hello community, here is the log from the commit of package libkpeople for openSUSE:Factory checked in at 2014-04-26 10:05:50 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libkpeople (Old) and /work/SRC/openSUSE:Factory/.libkpeople.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libkpeople" Changes: -------- --- /work/SRC/openSUSE:Factory/libkpeople/libkpeople.changes 2014-02-21 20:54:18.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.libkpeople.new/libkpeople.changes 2014-04-26 10:05:52.000000000 +0200 @@ -1,0 +2,6 @@ +Sat Apr 26 00:21:20 UTC 2014 - [email protected] + +- Update to 0.2.2 + * New bugfix release, no changelog provided + +------------------------------------------------------------------- Old: ---- libkpeople-0.2.1.tar.bz2 New: ---- libkpeople-0.2.2.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libkpeople.spec ++++++ --- /var/tmp/diff_new_pack.fa0XFu/_old 2014-04-26 10:05:52.000000000 +0200 +++ /var/tmp/diff_new_pack.fa0XFu/_new 2014-04-26 10:05:52.000000000 +0200 @@ -19,13 +19,13 @@ %define soversion 3 Name: libkpeople -Version: 0.2.1 +Version: 0.2.2 Release: 0 Summary: Provides access to all contacts and the people who hold them License: LGPL-2.1+ Group: Development/Libraries/Other Url: https://projects.kde.org/projects/playground/network/libkpeople -Source0: http://download.kde.org/unstable/%{name}/%{version}/%{name}-%{version}.tar.bz2 +Source0: http://download.kde.org/unstable/%{name}/%{version}/src/%{name}-%{version}.tar.bz2 BuildRequires: libkde4-devel >= 4.10.1 BuildRequires: libkdepimlibs4-devel BuildRoot: %{_tmppath}/%{name}-%{version}-build ++++++ libkpeople-0.2.1.tar.bz2 -> libkpeople-0.2.2.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkpeople-0.2.1/CMakeLists.txt new/libkpeople-0.2.2/CMakeLists.txt --- old/libkpeople-0.2.1/CMakeLists.txt 2014-02-20 17:06:50.000000000 +0100 +++ new/libkpeople-0.2.2/CMakeLists.txt 2014-04-26 01:58:25.000000000 +0200 @@ -12,7 +12,7 @@ set(KPEOPLE_VERSION_MAJOR 0) set(KPEOPLE_VERSION_MINOR 2) -set(KPEOPLE_VERSION_PATCH 1) +set(KPEOPLE_VERSION_PATCH 2) set(KPEOPLE_VERSION "${KPEOPLE_VERSION_MAJOR}.${KPEOPLE_VERSION_MINOR}.${KPEOPLE_VERSION_PATCH}") set(KPEOPLE_SOVERSION 3) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkpeople-0.2.1/po/CMakeLists.txt new/libkpeople-0.2.2/po/CMakeLists.txt --- old/libkpeople-0.2.1/po/CMakeLists.txt 2014-02-20 17:06:50.000000000 +0100 +++ new/libkpeople-0.2.2/po/CMakeLists.txt 2014-04-26 01:58:25.000000000 +0200 @@ -2,13 +2,15 @@ add_subdirectory( cs ) add_subdirectory( da ) add_subdirectory( de ) -add_subdirectory( el ) +add_subdirectory( fi ) add_subdirectory( fr ) add_subdirectory( hu ) add_subdirectory( lt ) add_subdirectory( nl ) +add_subdirectory( pl ) add_subdirectory( pt ) add_subdirectory( pt_BR ) +add_subdirectory( ro ) add_subdirectory( ru ) add_subdirectory( sk ) add_subdirectory( sl ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkpeople-0.2.1/po/da/libkpeople.po new/libkpeople-0.2.2/po/da/libkpeople.po --- old/libkpeople-0.2.1/po/da/libkpeople.po 2014-02-20 17:05:56.000000000 +0100 +++ new/libkpeople-0.2.2/po/da/libkpeople.po 2014-04-26 01:57:50.000000000 +0200 @@ -1,13 +1,13 @@ # Copyright (C) YEAR This_file_is_part_of_KDE # This file is distributed under the same license as the PACKAGE package. # -# Martin Schlander <[email protected]>, 2013. +# Martin Schlander <[email protected]>, 2013, 2014. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2014-02-18 01:50+0000\n" -"PO-Revision-Date: 2013-09-23 19:40+0200\n" +"PO-Revision-Date: 2014-02-23 14:40+0100\n" "Last-Translator: Martin Schlander <[email protected]>\n" "Language-Team: Danish <[email protected]>\n" "Language: da\n" @@ -32,7 +32,7 @@ #. i18n: ectx: property (text), widget (QLabel, avatarPixmapLabel) #: widgets/person-details-presentation.ui:43 msgid "Avatar" -msgstr "" +msgstr "Avatar" #: widgets/plugins/emaildetailswidget.cpp:51 msgid "Email" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkpeople-0.2.1/po/el/CMakeLists.txt new/libkpeople-0.2.2/po/el/CMakeLists.txt --- old/libkpeople-0.2.1/po/el/CMakeLists.txt 2014-02-20 17:05:57.000000000 +0100 +++ new/libkpeople-0.2.2/po/el/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 @@ -1,2 +0,0 @@ -file(GLOB _po_files *.po) -GETTEXT_PROCESS_PO_FILES( el ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkpeople-0.2.1/po/el/libkpeople.po new/libkpeople-0.2.2/po/el/libkpeople.po --- old/libkpeople-0.2.1/po/el/libkpeople.po 2014-02-20 17:05:57.000000000 +0100 +++ new/libkpeople-0.2.2/po/el/libkpeople.po 1970-01-01 01:00:00.000000000 +0100 @@ -1,51 +0,0 @@ -# Copyright (C) YEAR This_file_is_part_of_KDE -# This file is distributed under the same license as the PACKAGE package. -# -# Antonis Geralis <[email protected]>, 2014. -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: http://bugs.kde.org\n" -"POT-Creation-Date: 2014-02-18 01:50+0000\n" -"PO-Revision-Date: 2014-02-04 21:37+0200\n" -"Last-Translator: Antonis Geralis <[email protected]>\n" -"Language-Team: Greek <[email protected]>\n" -"Language: el\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Lokalize 1.5\n" - -#: examples/contactlistqml.cpp:29 -msgid "SweetPeople - KPeople Example" -msgstr "SweetPeople - Παράδειγμα KPeople" - -#: widgets/mergedialog.cpp:65 -msgid "Duplicates Manager" -msgstr "Διαχειριστής διπλότυπων" - -#: widgets/mergedialog.cpp:74 -msgid "Select contacts to be merged" -msgstr "Επιλέξτε επαφές για συγχώνευση" - -#. i18n: ectx: property (text), widget (QLabel, avatarPixmapLabel) -#: widgets/person-details-presentation.ui:43 -msgid "Avatar" -msgstr "" - -#: widgets/plugins/emaildetailswidget.cpp:51 -msgid "Email" -msgstr "Email" - -#: widgets/plugins/mergecontactswidget.cpp:51 -msgid "Show Merge Suggestions..." -msgstr "Εμφάνιση προτάσεων για συγχώνευση..." - -#: widgets/plugins/mergecontactswidget.cpp:89 -msgid "Merge with Selected Contacts" -msgstr "Συγχώνευση με επιλεγμένες επαφές" - -#: widgets/plugins/phonedetailswidget.cpp:40 -msgid "Phone" -msgstr "Τηλέφωνο" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkpeople-0.2.1/po/fi/CMakeLists.txt new/libkpeople-0.2.2/po/fi/CMakeLists.txt --- old/libkpeople-0.2.1/po/fi/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/libkpeople-0.2.2/po/fi/CMakeLists.txt 2014-04-26 01:57:53.000000000 +0200 @@ -0,0 +1,2 @@ +file(GLOB _po_files *.po) +GETTEXT_PROCESS_PO_FILES( fi ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkpeople-0.2.1/po/fi/libkpeople.po new/libkpeople-0.2.2/po/fi/libkpeople.po --- old/libkpeople-0.2.1/po/fi/libkpeople.po 1970-01-01 01:00:00.000000000 +0100 +++ new/libkpeople-0.2.2/po/fi/libkpeople.po 2014-04-26 01:57:53.000000000 +0200 @@ -0,0 +1,51 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# Lasse Liehu <[email protected]>, 2014. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2014-02-18 01:50+0000\n" +"PO-Revision-Date: 2014-02-17 17:02+0200\n" +"Last-Translator: Lasse Liehu <[email protected]>\n" +"Language-Team: Finnish <[email protected]>\n" +"Language: fi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Lokalize 1.5\n" + +#: examples/contactlistqml.cpp:29 +msgid "SweetPeople - KPeople Example" +msgstr "SweetPeople – KPeople-esimerkki" + +#: widgets/mergedialog.cpp:65 +msgid "Duplicates Manager" +msgstr "Kaksoiskappaleiden hallinta" + +#: widgets/mergedialog.cpp:74 +msgid "Select contacts to be merged" +msgstr "Valitse yhdistettävät yhteystiedot" + +#. i18n: ectx: property (text), widget (QLabel, avatarPixmapLabel) +#: widgets/person-details-presentation.ui:43 +msgid "Avatar" +msgstr "Avatar" + +#: widgets/plugins/emaildetailswidget.cpp:51 +msgid "Email" +msgstr "Sähköposti" + +#: widgets/plugins/mergecontactswidget.cpp:51 +msgid "Show Merge Suggestions..." +msgstr "Näytä yhdistämisehdotukset…" + +#: widgets/plugins/mergecontactswidget.cpp:89 +msgid "Merge with Selected Contacts" +msgstr "Yhdistä valitut yhteystiedot" + +#: widgets/plugins/phonedetailswidget.cpp:40 +msgid "Phone" +msgstr "Puhelin" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkpeople-0.2.1/po/fr/libkpeople.po new/libkpeople-0.2.2/po/fr/libkpeople.po --- old/libkpeople-0.2.1/po/fr/libkpeople.po 2014-02-20 17:06:06.000000000 +0100 +++ new/libkpeople-0.2.2/po/fr/libkpeople.po 2014-04-26 01:57:54.000000000 +0200 @@ -1,13 +1,13 @@ # Copyright (C) YEAR This_file_is_part_of_KDE # This file is distributed under the same license as the PACKAGE package. -# Sebastien Renard <[email protected]>, 2013. +# Sebastien Renard <[email protected]>, 2013, 2014. # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2014-02-18 01:50+0000\n" -"PO-Revision-Date: 2013-12-01 14:55+0100\n" +"PO-Revision-Date: 2014-03-16 18:45+0100\n" "Last-Translator: Sebastien Renard <[email protected]>\n" "Language-Team: French <[email protected]>\n" "Language: fr\n" @@ -35,7 +35,7 @@ #. i18n: ectx: property (text), widget (QLabel, avatarPixmapLabel) #: widgets/person-details-presentation.ui:43 msgid "Avatar" -msgstr "" +msgstr "Avatar" #: widgets/plugins/emaildetailswidget.cpp:51 msgid "Email" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkpeople-0.2.1/po/pl/CMakeLists.txt new/libkpeople-0.2.2/po/pl/CMakeLists.txt --- old/libkpeople-0.2.1/po/pl/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/libkpeople-0.2.2/po/pl/CMakeLists.txt 2014-04-26 01:58:11.000000000 +0200 @@ -0,0 +1,2 @@ +file(GLOB _po_files *.po) +GETTEXT_PROCESS_PO_FILES( pl ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkpeople-0.2.1/po/pl/libkpeople.po new/libkpeople-0.2.2/po/pl/libkpeople.po --- old/libkpeople-0.2.1/po/pl/libkpeople.po 1970-01-01 01:00:00.000000000 +0100 +++ new/libkpeople-0.2.2/po/pl/libkpeople.po 2014-04-26 01:58:11.000000000 +0200 @@ -0,0 +1,52 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Łukasz Wojniłowicz <[email protected]>, 2014. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2014-02-18 01:50+0000\n" +"PO-Revision-Date: 2014-03-22 15:03+0100\n" +"Last-Translator: Łukasz Wojniłowicz <[email protected]>\n" +"Language-Team: Polish <[email protected]>\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Lokalize 1.5\n" + +#: examples/contactlistqml.cpp:29 +msgid "SweetPeople - KPeople Example" +msgstr "SweetPeople - Przykład KPeople" + +#: widgets/mergedialog.cpp:65 +msgid "Duplicates Manager" +msgstr "Zarządca powieleń" + +#: widgets/mergedialog.cpp:74 +msgid "Select contacts to be merged" +msgstr "Wybierz kontakty do scalenia" + +#. i18n: ectx: property (text), widget (QLabel, avatarPixmapLabel) +#: widgets/person-details-presentation.ui:43 +msgid "Avatar" +msgstr "Awatar" + +#: widgets/plugins/emaildetailswidget.cpp:51 +msgid "Email" +msgstr "E-mail" + +#: widgets/plugins/mergecontactswidget.cpp:51 +msgid "Show Merge Suggestions..." +msgstr "Pokaż sugestie scalania..." + +#: widgets/plugins/mergecontactswidget.cpp:89 +msgid "Merge with Selected Contacts" +msgstr "Scal z wybranymi kontaktami" + +#: widgets/plugins/phonedetailswidget.cpp:40 +msgid "Phone" +msgstr "Telefon" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkpeople-0.2.1/po/ro/CMakeLists.txt new/libkpeople-0.2.2/po/ro/CMakeLists.txt --- old/libkpeople-0.2.1/po/ro/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/libkpeople-0.2.2/po/ro/CMakeLists.txt 2014-04-26 01:58:13.000000000 +0200 @@ -0,0 +1,2 @@ +file(GLOB _po_files *.po) +GETTEXT_PROCESS_PO_FILES( ro ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkpeople-0.2.1/po/ro/libkpeople.po new/libkpeople-0.2.2/po/ro/libkpeople.po --- old/libkpeople-0.2.1/po/ro/libkpeople.po 1970-01-01 01:00:00.000000000 +0100 +++ new/libkpeople-0.2.2/po/ro/libkpeople.po 2014-04-26 01:58:13.000000000 +0200 @@ -0,0 +1,52 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Sergiu Bivol <[email protected]>, 2014. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2014-02-18 01:50+0000\n" +"PO-Revision-Date: 2014-03-25 16:18+0200\n" +"Last-Translator: Sergiu Bivol <[email protected]>\n" +"Language-Team: Romanian <[email protected]>\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2;\n" +"X-Generator: Lokalize 1.5\n" + +#: examples/contactlistqml.cpp:29 +msgid "SweetPeople - KPeople Example" +msgstr "" + +#: widgets/mergedialog.cpp:65 +msgid "Duplicates Manager" +msgstr "Gestionar de duplicate" + +#: widgets/mergedialog.cpp:74 +msgid "Select contacts to be merged" +msgstr "Alegeți contactele de îmbinat" + +#. i18n: ectx: property (text), widget (QLabel, avatarPixmapLabel) +#: widgets/person-details-presentation.ui:43 +msgid "Avatar" +msgstr "Avatar" + +#: widgets/plugins/emaildetailswidget.cpp:51 +msgid "Email" +msgstr "Email" + +#: widgets/plugins/mergecontactswidget.cpp:51 +msgid "Show Merge Suggestions..." +msgstr "Arată sugestii de îmbinare..." + +#: widgets/plugins/mergecontactswidget.cpp:89 +msgid "Merge with Selected Contacts" +msgstr "Îmbină cu contactele alese" + +#: widgets/plugins/phonedetailswidget.cpp:40 +msgid "Phone" +msgstr "Telefon" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkpeople-0.2.1/po/sl/libkpeople.po new/libkpeople-0.2.2/po/sl/libkpeople.po --- old/libkpeople-0.2.1/po/sl/libkpeople.po 2014-02-20 17:06:39.000000000 +0100 +++ new/libkpeople-0.2.2/po/sl/libkpeople.po 2014-04-26 01:58:16.000000000 +0200 @@ -1,13 +1,13 @@ # Copyright (C) YEAR This_file_is_part_of_KDE # This file is distributed under the same license as the PACKAGE package. # -# Andrej Mernik <[email protected]>, 2013. +# Andrej Mernik <[email protected]>, 2013, 2014. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2014-02-18 01:50+0000\n" -"PO-Revision-Date: 2013-12-02 22:15+0100\n" +"PO-Revision-Date: 2014-02-21 10:13+0100\n" "Last-Translator: Andrej Mernik <[email protected]>\n" "Language-Team: Slovenian <[email protected]>\n" "Language: sl\n" @@ -33,7 +33,7 @@ #. i18n: ectx: property (text), widget (QLabel, avatarPixmapLabel) #: widgets/person-details-presentation.ui:43 msgid "Avatar" -msgstr "" +msgstr "Podoba" #: widgets/plugins/emaildetailswidget.cpp:51 msgid "Email" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkpeople-0.2.1/src/global.h new/libkpeople-0.2.2/src/global.h --- old/libkpeople-0.2.1/src/global.h 2014-02-20 17:05:46.000000000 +0100 +++ new/libkpeople-0.2.2/src/global.h 2014-04-26 01:57:41.000000000 +0200 @@ -34,11 +34,12 @@ namespace KPeople { /** - * Merge all ids (person IDs and contactIds into a single person) - * returns the ID that will be created. + * Merge all ids into a single person. + * Ids can be a mix of person Ids and contact IDs. + * * @arg ids a list of all identifiers to be merged * - * @return the identifier of the new person + * @return the identifier of the new person or an empty string upon failure */ KPEOPLE_EXPORT QString mergeContacts(const QStringList &ids); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkpeople-0.2.1/src/personmanager.cpp new/libkpeople-0.2.2/src/personmanager.cpp --- old/libkpeople-0.2.1/src/personmanager.cpp 2014-02-20 17:05:46.000000000 +0100 +++ new/libkpeople-0.2.2/src/personmanager.cpp 2014-04-26 01:57:41.000000000 +0200 @@ -136,6 +136,10 @@ QStringList metacontacts; QStringList contacts; + bool rc = true; + + QList<QDBusMessage> pendingMessages; + // separate the passed ids to metacontacts and simple contacts Q_FOREACH (const QString &id, ids) { if (id.startsWith(QLatin1String("kpeople://"))) { @@ -182,32 +186,38 @@ updateQuery.prepare("UPDATE persons SET personID = ? WHERE contactID = ?"); updateQuery.bindValue(0, personIdString.mid(strlen("kpeople://"))); updateQuery.bindValue(1, id); - updateQuery.exec(); + if (!updateQuery.exec()) { + rc = false; + } QDBusMessage message = QDBusMessage::createSignal(QLatin1String("/KPeople"), QLatin1String("org.kde.KPeople"), QLatin1String("ContactRemovedFromPerson")); message.setArguments(QVariantList() << id); - QDBusConnection::sessionBus().send(message); + pendingMessages << message; message = QDBusMessage::createSignal(QLatin1String("/KPeople"), QLatin1String("org.kde.KPeople"), QLatin1String("ContactAddedToPerson")); message.setArguments(QVariantList() << id << personIdString); - QDBusConnection::sessionBus().send(message); + } } // process passed contacts if (contacts.size() > 0) { + + Q_FOREACH (const QString &id, contacts) { QSqlQuery insertQuery(m_db); insertQuery.prepare("INSERT INTO persons VALUES (?, ?)"); insertQuery.bindValue(0, id); insertQuery.bindValue(1, personIdString.mid(strlen("kpeople://"))); //strip kpeople:// - insertQuery.exec(); + if (!insertQuery.exec()) { + rc = false; + } //FUTURE OPTIMIZATION - this would be best as one signal, but arguments become complex QDBusMessage message = QDBusMessage::createSignal(QLatin1String("/KPeople"), @@ -215,8 +225,19 @@ QLatin1String("ContactAddedToPerson")); message.setArguments(QVariantList() << id << personIdString); + pendingMessages << message; + } + } + + //if success send all messages to other clients + //otherwise roll back our database changes and return an empty string + if (rc) { + Q_FOREACH(const QDBusMessage &message, pendingMessages) { QDBusConnection::sessionBus().send(message); } + } else { + t.cancel(); + personIdString.clear(); } return personIdString; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkpeople-0.2.1/src/personmanager_p.h new/libkpeople-0.2.2/src/personmanager_p.h --- old/libkpeople-0.2.1/src/personmanager_p.h 2014-02-20 17:05:46.000000000 +0100 +++ new/libkpeople-0.2.2/src/personmanager_p.h 2014-04-26 01:57:41.000000000 +0200 @@ -74,10 +74,11 @@ public Q_SLOTS: //merge all ids (person IDs and contactIds into a single person) //returns the ID that will be created + //users should KPeople::mergeContacts from global.h QString mergeContacts(const QStringList &ids); //unmerge a contact. Either remove a contact from a given person or remove a person - // + //users should KPeople::unmergeContact from global.h bool unmergeContact(const QString &id); Q_SIGNALS: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkpeople-0.2.1/src/personsmodel.cpp new/libkpeople-0.2.2/src/personsmodel.cpp --- old/libkpeople-0.2.1/src/personsmodel.cpp 2014-02-20 17:05:46.000000000 +0100 +++ new/libkpeople-0.2.2/src/personsmodel.cpp 2014-04-26 01:57:41.000000000 +0200 @@ -9,7 +9,6 @@ #include <KStandardDirs> #include <KDebug> -#include <QDebug> #include <QPixmap> #include <QTimer> @@ -20,9 +19,10 @@ QHash<QString /*contactId*/, QString /*PersonId*/> contactToPersons; //hash of person objects indexed by ID - QHash<QString /*Person ID*/, MetaContact> metacontacts; + QHash<QString /*Person ID*/, QPersistentModelIndex /*Row*/> personIndex; + //a list so we have an order in the model - QStringList personIds; + QList<MetaContact> metacontacts; QString genericAvatarImagePath; QList<AllContactsMonitorPtr> m_sourceMonitors; @@ -43,10 +43,15 @@ d->initialFetchesDoneCount = 0; Q_FOREACH (BasePersonsDataSource* dataSource, PersonPluginManager::dataSourcePlugins()) { const AllContactsMonitorPtr monitor = dataSource->allContactsMonitor(); - connect(monitor.data(), SIGNAL(initialFetchComplete()), - this, SLOT(onMonitorInitialFetchComplete())); + if (monitor.data()->isInitialFetchComplete()) { + QTimer::singleShot(0, this, SLOT(onMonitorInitialFetchComplete())); + } else { + connect(monitor.data(), SIGNAL(initialFetchComplete()), + this, SLOT(onMonitorInitialFetchComplete())); + } d->m_sourceMonitors << monitor; } + onContactsFetched(); connect(PersonManager::instance(), SIGNAL(contactAddedToPerson(QString,QString)), SLOT(onAddContactToPerson(QString,QString))); connect(PersonManager::instance(), SIGNAL(contactRemovedFromPerson(QString)), SLOT(onRemoveContactsFromPerson(QString))); @@ -63,6 +68,7 @@ QVariant PersonsModel::data(const QModelIndex &index, int role) const { + Q_D(const PersonsModel); //optimization - if we don't cover this role, ignore it @@ -78,13 +84,12 @@ if (role == ContactsVCardRole) { return QVariant::fromValue<KABC::AddresseeList>(KABC::AddresseeList()); } - const QString &personId = d->personIds[index.parent().row()]; - const MetaContact &mc = d->metacontacts[personId]; + const MetaContact &mc = d->metacontacts.at(index.parent().row()); - return dataForAddressee(personId, mc.contacts().at(index.row()), role); + return dataForAddressee(mc.id(), mc.contacts().at(index.row()), role); } else { - const QString &personId = d->personIds[index.row()]; - return dataForAddressee(personId, d->metacontacts[personId].personAddressee(), role); + const MetaContact &mc = d->metacontacts.at(index.row()); + return dataForAddressee(mc.id(), mc.personAddressee(), role); } } @@ -108,7 +113,7 @@ case PersonVCardRole: return QVariant::fromValue<KABC::Addressee>(person); case ContactsVCardRole: - return QVariant::fromValue<KABC::AddresseeList>(d->metacontacts[personId].contacts()); + return QVariant::fromValue<KABC::AddresseeList>(d->metacontacts[d->personIndex[personId].row()].contacts()); case GroupsRole: return person.categories(); } @@ -127,11 +132,11 @@ Q_D(const PersonsModel); if (!parent.isValid()) { - return d->personIds.size(); + return d->metacontacts.size(); } if (parent.isValid() && !parent.parent().isValid()) { - return d->metacontacts[d->personIds.at(parent.row())].contacts().count(); + return d->metacontacts.at(parent.row()).contacts().count(); } return 0; @@ -166,8 +171,6 @@ d->initialFetchesDoneCount++; Q_ASSERT(d->initialFetchesDoneCount <= d->m_sourceMonitors.count()); if (d->initialFetchesDoneCount == d->m_sourceMonitors.count()) { - - onContactsFetched(); Q_EMIT modelInitialized(); } } @@ -175,10 +178,10 @@ void PersonsModel::onContactsFetched() { Q_D(PersonsModel); + KABC::Addressee::Map addresseeMap; //fetch all already loaded contacts from plugins - KABC::AddresseeList contactList; Q_FOREACH (const AllContactsMonitorPtr &contactWatcher, d->m_sourceMonitors) { addresseeMap.unite(contactWatcher->contacts()); } @@ -218,8 +221,9 @@ const QString &personId = personIdForContact(contactId); - if (d->personIds.contains(personId)) { - MetaContact &mc = d->metacontacts[personId]; + if (d->personIndex.contains(personId)) { + int personRow = d->personIndex[personId].row(); + MetaContact &mc = d->metacontacts[personRow]; //if the MC object already contains this object, we want to update the row, not do an insert if (mc.contactIds().contains(contactId)) { @@ -227,7 +231,7 @@ onContactChanged(contactId, contact); } else { int newContactPos = mc.contacts().size(); - beginInsertRows(index(d->personIds.indexOf(personId)), newContactPos, newContactPos); + beginInsertRows(index(personRow), newContactPos, newContactPos); mc.insertContact(contactId, contact); endInsertRows(); personChanged(personId); @@ -244,11 +248,12 @@ Q_D(PersonsModel); const QString &personId = personIdForContact(contactId); - int row = d->metacontacts[personId].updateContact(contactId, contact); + int personRow = d->personIndex[personId].row(); + int contactRow = d->metacontacts[personRow].updateContact(contactId, contact); - const QModelIndex contactIndex = index(row, + const QModelIndex contactIndex = index(contactRow, 0, - index(d->personIds.indexOf(personId))); + index(personRow)); Q_EMIT dataChanged(contactIndex, contactIndex); @@ -261,10 +266,12 @@ const QString &personId = personIdForContact(contactId); - MetaContact &mc = d->metacontacts[personId]; - int contactPosition = d->metacontacts[personId].contactIds().indexOf(contactId); - beginRemoveRows(index(d->personIds.indexOf(personId), 0), contactPosition, contactPosition); - d->metacontacts[personId].removeContact(contactId); + int personRow = d->personIndex[personId].row(); + + MetaContact &mc = d->metacontacts[personRow]; + int contactPosition = mc.contactIds().indexOf(contactId); + beginRemoveRows(index(personRow, 0), contactPosition, contactPosition); + mc.removeContact(contactId); endRemoveRows(); //if MC object is now invalid remove the person from the list @@ -279,26 +286,38 @@ Q_D(PersonsModel); const QString oldPersonId = personIdForContact(contactId); + d->contactToPersons.insert(contactId, newPersonId); + int oldPersonRow = d->personIndex[oldPersonId].row(); + + if (oldPersonRow < 0) { + return; + } + + MetaContact &oldMc = d->metacontacts[oldPersonRow]; + //get contact already in the model, remove it from the previous contact - const KABC::Addressee &contact = d->metacontacts[oldPersonId].contact(contactId); - int contactPosition = d->metacontacts[oldPersonId].contacts().indexOf(contact); - beginRemoveRows(index(d->personIds.indexOf(oldPersonId), 0), contactPosition, contactPosition); - d->metacontacts[oldPersonId].removeContact(contactId); + int contactPosition = oldMc.contactIds().indexOf(contactId); + const KABC::Addressee contact = oldMc.contacts().at(contactPosition); + + beginRemoveRows(index(oldPersonRow), contactPosition, contactPosition); + oldMc.removeContact(contactId); endRemoveRows(); - if (!d->metacontacts[oldPersonId].isValid()) { + if (!oldMc.isValid()) { removePerson(oldPersonId); } else { personChanged(oldPersonId); } //if the new person is already in the model, add the contact to it - if (d->personIds.contains(newPersonId)) { - int newContactPos = d->metacontacts[newPersonId].contacts().size(); - beginInsertRows(index(d->personIds.indexOf(newPersonId), 0), newContactPos, newContactPos); - d->metacontacts[newPersonId].insertContact(contactId, contact); + if (d->personIndex.contains(newPersonId)) { + int newPersonRow = d->personIndex[newPersonId].row(); + MetaContact &newMc = d->metacontacts[newPersonRow]; + int newContactPos = newMc.contacts().size(); + beginInsertRows(index(newPersonRow), newContactPos, newContactPos); + newMc.insertContact(contactId, contact); endInsertRows(); personChanged(newPersonId); } else { //if the person is not in the model, create a new person and insert it @@ -314,12 +333,15 @@ Q_D(PersonsModel); const QString personId = personIdForContact(contactId); - const KABC::Addressee &contact = d->metacontacts[personId].contact(contactId); - d->metacontacts[personId].removeContact(contactId); + int personRow = d->personIndex[personId].row(); + MetaContact &mc = d->metacontacts[personRow]; + + const KABC::Addressee &contact = mc.contact(contactId); + mc.removeContact(contactId); d->contactToPersons.remove(contactId); //if we don't want the person object anymore - if (!d->metacontacts[personId].isValid()) { + if (!mc.isValid()) { removePerson(personId); } else { personChanged(personId); @@ -336,9 +358,10 @@ const QString &id = mc.id(); - beginInsertRows(QModelIndex(), d->personIds.size(), d->personIds.size()); - d->metacontacts[id] = mc; - d->personIds << id; + int row = d->metacontacts.size(); + beginInsertRows(QModelIndex(), row, row); + d->metacontacts.append(mc); + d->personIndex[id] = index(row); endInsertRows(); } @@ -346,21 +369,22 @@ { Q_D(PersonsModel); - int row = d->personIds.indexOf(id); - if (row < 0) { //item not found + QPersistentModelIndex index = d->personIndex.value(id); + if (!index.isValid()) { //item not found return; } - beginRemoveRows(QModelIndex(), row, row); - d->metacontacts.remove(id); - d->personIds.removeOne(id); + beginRemoveRows(QModelIndex(), index.row(), index.row()); + d->personIndex.remove(id); + d->metacontacts.removeAt(index.row()); endRemoveRows(); } void PersonsModel::personChanged(const QString &personId) { Q_D(const PersonsModel); - int row = d->personIds.indexOf(personId); + + int row = d->personIndex[personId].row(); if (row >= 0) { const QModelIndex personIndex = index(row); dataChanged(personIndex, personIndex); @@ -370,6 +394,7 @@ QString PersonsModel::personIdForContact(const QString &contactId) const { Q_D(const PersonsModel); + //TODO optimize with constFind() if (d->contactToPersons.contains(contactId)) { return d->contactToPersons[contactId]; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkpeople-0.2.1/src/plugins/akonadi/akonadidatasource.cpp new/libkpeople-0.2.2/src/plugins/akonadi/akonadidatasource.cpp --- old/libkpeople-0.2.1/src/plugins/akonadi/akonadidatasource.cpp 2014-02-20 17:05:46.000000000 +0100 +++ new/libkpeople-0.2.2/src/plugins/akonadi/akonadidatasource.cpp 2014-04-26 01:57:41.000000000 +0200 @@ -27,6 +27,7 @@ #include <Akonadi/Collection> #include <Akonadi/CollectionFetchJob> #include <Akonadi/CollectionFetchScope> +#include <Akonadi/ServerManager> #include <KABC/Addressee> @@ -50,6 +51,7 @@ void onItemAdded(const Akonadi::Item &item); void onItemChanged(const Akonadi::Item &item); void onItemRemoved(const Akonadi::Item &item); + void onServerStateChanged(Akonadi::ServerManager::State); private: Akonadi::Monitor *m_monitor; KABC::Addressee::Map m_contacts; @@ -60,6 +62,9 @@ m_monitor(new Akonadi::Monitor(this)), m_activeFetchJobsCount(0) { + connect(Akonadi::ServerManager::self(), SIGNAL(stateChanged(Akonadi::ServerManager::State)), SLOT(onServerStateChanged(Akonadi::ServerManager::State))); + onServerStateChanged(Akonadi::ServerManager::state()); + connect(m_monitor, SIGNAL(itemAdded(Akonadi::Item,Akonadi::Collection)), SLOT(onItemAdded(Akonadi::Item))); connect(m_monitor, SIGNAL(itemChanged(Akonadi::Item,QSet<QByteArray>)), SLOT(onItemChanged(Akonadi::Item))); connect(m_monitor, SIGNAL(itemRemoved(Akonadi::Item)), SLOT(onItemRemoved(Akonadi::Item))); @@ -131,7 +136,7 @@ onItemAdded(item); } - if (--m_activeFetchJobsCount == 0) { + if (--m_activeFetchJobsCount == 0 && !isInitialFetchComplete()) { emitInitialFetchComplete(); } } @@ -153,11 +158,21 @@ ++m_activeFetchJobsCount; } } - if (m_activeFetchJobsCount == 0) { + if (m_activeFetchJobsCount == 0 && !isInitialFetchComplete()) { emitInitialFetchComplete(); + } } +void AkonadiAllContacts::onServerStateChanged(ServerManager::State state) +{ + //if we're broken tell kpeople we've loaded so kpeople doesn't block + if(state == Akonadi::ServerManager::Broken && !isInitialFetchComplete()) { + emitInitialFetchComplete(); + qWarning() << "Akonadi failed to load, some metacontact features may not be available"; + qWarning() << "For more information please load akonadi_console" ; + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkpeople-0.2.1/src/widgets/persondetailsdialog.cpp new/libkpeople-0.2.2/src/widgets/persondetailsdialog.cpp --- old/libkpeople-0.2.1/src/widgets/persondetailsdialog.cpp 2014-02-20 17:05:46.000000000 +0100 +++ new/libkpeople-0.2.2/src/widgets/persondetailsdialog.cpp 2014-04-26 01:57:41.000000000 +0200 @@ -61,6 +61,8 @@ { Q_D(PersonDetailsDialog); d->view->setPerson(person); + + setWindowTitle(person->person().formattedName()); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkpeople-0.2.1/src/widgets/persondetailsview.cpp new/libkpeople-0.2.2/src/widgets/persondetailsview.cpp --- old/libkpeople-0.2.1/src/widgets/persondetailsview.cpp 2014-02-20 17:05:46.000000000 +0100 +++ new/libkpeople-0.2.2/src/widgets/persondetailsview.cpp 2014-04-26 01:57:41.000000000 +0200 @@ -88,7 +88,7 @@ { Q_UNUSED(contacts) //don't handle emails here - KABC::Field just lists one which is rubbish. Instead use a custom plugin that lists everything - if (m_field->category() == KABC::Field::Email) { + if (m_field->category() & KABC::Field::Email) { return 0; } -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
