Hello community, here is the log from the commit of package kdepim4-runtime for openSUSE:Factory checked in at 2014-11-19 20:24:25 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/kdepim4-runtime (Old) and /work/SRC/openSUSE:Factory/.kdepim4-runtime.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kdepim4-runtime" Changes: -------- --- /work/SRC/openSUSE:Factory/kdepim4-runtime/kdepim4-runtime.changes 2014-10-16 18:11:43.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.kdepim4-runtime.new/kdepim4-runtime.changes 2014-11-19 20:27:04.000000000 +0100 @@ -1,0 +2,12 @@ +Mon Nov 10 02:31:00 UTC 2014 - Led <led...@gmail.com> + +- fix bashisms in post/postun scripts + +------------------------------------------------------------------- +Sun Nov 9 20:27:38 UTC 2014 - tittiatc...@gmail.com + +- Update to 4.14.3 + * KDE 4.14.3 SC Bugfix Release + * See http://www.kde.org/announcements/announce-4.14.3.php + +------------------------------------------------------------------- Old: ---- kdepim-runtime-4.14.2.tar.xz New: ---- kdepim-runtime-4.14.3.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ kdepim4-runtime.spec ++++++ --- /var/tmp/diff_new_pack.45Qhmu/_old 2014-11-19 20:27:05.000000000 +0100 +++ /var/tmp/diff_new_pack.45Qhmu/_new 2014-11-19 20:27:05.000000000 +0100 @@ -17,7 +17,7 @@ Name: kdepim4-runtime -Version: 4.14.2 +Version: 4.14.3 Release: 0 Summary: Base package of kdepim License: LGPL-2.1+ @@ -74,11 +74,11 @@ %post /sbin/ldconfig -%{_kde4_bindir}/update-mime-database %{_kde4_datadir}/mime &> /dev/null || : +%{_kde4_bindir}/update-mime-database %{_kde4_datadir}/mime > /dev/null 2>&1 || : %postun /sbin/ldconfig -%{_kde4_bindir}/update-mime-database %{_kde4_datadir}/mime &> /dev/null || : +%{_kde4_bindir}/update-mime-database %{_kde4_datadir}/mime > /dev/null 2>&1 || : %files %defattr(-,root,root) ++++++ kdepim-runtime-4.14.2.tar.xz -> kdepim-runtime-4.14.3.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/CMakeLists.txt new/kdepim-runtime-4.14.3/CMakeLists.txt --- old/kdepim-runtime-4.14.2/CMakeLists.txt 2014-10-09 18:42:34.000000000 +0200 +++ new/kdepim-runtime-4.14.3/CMakeLists.txt 2014-11-04 08:55:43.000000000 +0100 @@ -36,7 +36,7 @@ set(KDEPIM_RUNTIME_DEV_VERSION "") endif() -set(KDEPIM_RUNTIME_VERSION "4.14.2${KDEPIM_RUNTIME_DEV_VERSION}") +set(KDEPIM_RUNTIME_VERSION "4.14.3${KDEPIM_RUNTIME_DEV_VERSION}") configure_file(kdepim-runtime-version.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/kdepim-runtime-version.h @ONLY) @@ -53,7 +53,7 @@ include(KDE4Defaults) # KdepimLibs -find_package(KdepimLibs 4.14.2) +find_package(KdepimLibs 4.14.3) set_package_properties(KdepimLibs PROPERTIES DESCRIPTION "The KDEPIM libraries" URL "http://www.kde.org" TYPE REQUIRED) #Boost diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/agents/newmailnotifier/newmailnotifiersettingsdialog.cpp new/kdepim-runtime-4.14.3/agents/newmailnotifier/newmailnotifiersettingsdialog.cpp --- old/kdepim-runtime-4.14.2/agents/newmailnotifier/newmailnotifiersettingsdialog.cpp 2014-10-09 18:42:34.000000000 +0200 +++ new/kdepim-runtime-4.14.3/agents/newmailnotifier/newmailnotifiersettingsdialog.cpp 2014-11-04 08:55:43.000000000 +0100 @@ -117,6 +117,7 @@ QLabel *howIsItWork = new QLabel(i18n( "<a href=\"whatsthis\">How does this work?</a>" )); howIsItWork->setTextInteractionFlags(Qt::LinksAccessibleByMouse); + howIsItWork->setContextMenuPolicy(Qt::NoContextMenu); vbox->addWidget(howIsItWork); connect(howIsItWork, SIGNAL(linkActivated(QString)),SLOT(slotHelpLinkClicked(QString)) ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/agents/newmailnotifier/specialnotifierjob.cpp new/kdepim-runtime-4.14.3/agents/newmailnotifier/specialnotifierjob.cpp --- old/kdepim-runtime-4.14.2/agents/newmailnotifier/specialnotifierjob.cpp 2014-10-09 18:42:34.000000000 +0200 +++ new/kdepim-runtime-4.14.3/agents/newmailnotifier/specialnotifierjob.cpp 2014-11-04 08:55:43.000000000 +0100 @@ -85,7 +85,7 @@ deleteLater(); } } else { - kdWarning()<<" Found item different from 1: "<<lst.count(); + kWarning()<<" Found item different from 1: "<<lst.count(); deleteLater(); return; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/resources/facebook/serializer/akonadi_serializer_socialnotification.desktop new/kdepim-runtime-4.14.3/resources/facebook/serializer/akonadi_serializer_socialnotification.desktop --- old/kdepim-runtime-4.14.2/resources/facebook/serializer/akonadi_serializer_socialnotification.desktop 2014-10-09 18:42:34.000000000 +0200 +++ new/kdepim-runtime-4.14.3/resources/facebook/serializer/akonadi_serializer_socialnotification.desktop 2014-11-04 08:55:43.000000000 +0100 @@ -3,7 +3,7 @@ Name[bs]=Serializator Facebook poruka Name[ca]=Serialitzador de notificacions de Facebook Name[ca@valencia]=Serialitzador de notificacions de Facebook -Name[cs]=Seřazovač upomínek Facebooku +Name[cs]=Řadič upomínek Facebooku Name[da]=Facebook-notifikation-serializer Name[de]=Facebook-Benachrichtigungs-Serialisierung Name[el]=Σειριακοποιητής ειδοποιήσεων Facebook diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/resources/folderarchivesettings/CMakeLists.txt new/kdepim-runtime-4.14.3/resources/folderarchivesettings/CMakeLists.txt --- old/kdepim-runtime-4.14.2/resources/folderarchivesettings/CMakeLists.txt 2014-10-09 18:42:34.000000000 +0200 +++ new/kdepim-runtime-4.14.3/resources/folderarchivesettings/CMakeLists.txt 2014-11-04 08:55:43.000000000 +0100 @@ -27,4 +27,5 @@ set_target_properties(folderarchivesettings PROPERTIES VERSION ${GENERIC_LIB_VERSION} SOVERSION ${GENERIC_LIB_SOVERSION} ) install(TARGETS folderarchivesettings ${INSTALL_TARGETS_DEFAULT_ARGS}) +add_subdirectory(autotests) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/resources/folderarchivesettings/autotests/CMakeLists.txt new/kdepim-runtime-4.14.3/resources/folderarchivesettings/autotests/CMakeLists.txt --- old/kdepim-runtime-4.14.2/resources/folderarchivesettings/autotests/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/kdepim-runtime-4.14.3/resources/folderarchivesettings/autotests/CMakeLists.txt 2014-11-04 08:55:43.000000000 +0100 @@ -0,0 +1,10 @@ + +# Convenience macro to add unit tests. +macro( folderarchive_kmail _source ) + set( _test ${_source} ../folderarchiveaccountinfo.cpp ) + get_filename_component( _name ${_source} NAME_WE ) + kde4_add_unit_test( ${_name} TESTNAME folderarchive-${_name} ${_test} ) + target_link_libraries( ${_name} ${QT_QTTEST_LIBRARY} ${QT_QTCORE_LIBRARY} ${KDE4_KDEUI_LIBS} ${KDEPIMLIBS_AKONADI_LIBS}) +endmacro() + +folderarchive_kmail(folderarchiveaccountinfotest.cpp) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/resources/folderarchivesettings/autotests/folderarchiveaccountinfotest.cpp new/kdepim-runtime-4.14.3/resources/folderarchivesettings/autotests/folderarchiveaccountinfotest.cpp --- old/kdepim-runtime-4.14.2/resources/folderarchivesettings/autotests/folderarchiveaccountinfotest.cpp 1970-01-01 01:00:00.000000000 +0100 +++ new/kdepim-runtime-4.14.3/resources/folderarchivesettings/autotests/folderarchiveaccountinfotest.cpp 2014-11-04 08:55:43.000000000 +0100 @@ -0,0 +1,74 @@ +/* + Copyright (c) 2014 Montel Laurent <mon...@kde.org> + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License, version 2, as + published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "folderarchiveaccountinfotest.h" +#include "../folderarchiveaccountinfo.h" +#include <KGlobal> +#include <Akonadi/Collection> +#include <qtest_kde.h> + + +FolderArchiveAccountInfoTest::FolderArchiveAccountInfoTest(QObject *parent) + : QObject(parent) +{ + +} + +FolderArchiveAccountInfoTest::~FolderArchiveAccountInfoTest() +{ + +} + +void FolderArchiveAccountInfoTest::shouldHaveDefaultValue() +{ + FolderArchiveAccountInfo info; + QVERIFY(info.instanceName().isEmpty()); + QCOMPARE(info.archiveTopLevel(), Akonadi::Collection(-1).id()); + QCOMPARE(info.folderArchiveType(), FolderArchiveAccountInfo::UniqueFolder); + QCOMPARE(info.enabled(), false); + QCOMPARE(info.keepExistingStructure(), false); + QCOMPARE(info.isValid(), false); + +} + +void FolderArchiveAccountInfoTest::shouldBeValid() +{ + FolderArchiveAccountInfo info; + QVERIFY(!info.isValid()); + info.setArchiveTopLevel(Akonadi::Collection(42).id()); + QVERIFY(!info.isValid()); + info.setInstanceName(QLatin1String("FOO")); + QVERIFY(info.isValid()); +} + +void FolderArchiveAccountInfoTest::shouldRestoreFromSettings() +{ + FolderArchiveAccountInfo info; + info.setInstanceName(QLatin1String("FOO1")); + info.setArchiveTopLevel(Akonadi::Collection(42).id()); + info.setFolderArchiveType(FolderArchiveAccountInfo::FolderByMonths); + info.setEnabled(true); + info.setKeepExistingStructure(true); + + KConfigGroup grp(KGlobal::config(), "testsettings"); + info.writeConfig(grp); + + FolderArchiveAccountInfo restoreInfo(grp); + QCOMPARE(info, restoreInfo); +} + +QTEST_KDEMAIN(FolderArchiveAccountInfoTest, NoGUI) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/resources/folderarchivesettings/autotests/folderarchiveaccountinfotest.h new/kdepim-runtime-4.14.3/resources/folderarchivesettings/autotests/folderarchiveaccountinfotest.h --- old/kdepim-runtime-4.14.2/resources/folderarchivesettings/autotests/folderarchiveaccountinfotest.h 1970-01-01 01:00:00.000000000 +0100 +++ new/kdepim-runtime-4.14.3/resources/folderarchivesettings/autotests/folderarchiveaccountinfotest.h 2014-11-04 08:55:43.000000000 +0100 @@ -0,0 +1,40 @@ +/* + Copyright (c) 2014 Montel Laurent <mon...@kde.org> + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License, version 2, as + published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef FOLDERARCHIVEACCOUNTINFOTEST_H +#define FOLDERARCHIVEACCOUNTINFOTEST_H + +#include <QObject> + + +class FolderArchiveAccountInfoTest : public QObject +{ + Q_OBJECT +public: + explicit FolderArchiveAccountInfoTest(QObject *parent = 0); + ~FolderArchiveAccountInfoTest(); + +private Q_SLOTS: + void shouldHaveDefaultValue(); + void shouldBeValid(); + void shouldRestoreFromSettings(); +}; + + + +#endif // FOLDERARCHIVEACCOUNTINFOTEST_H + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/resources/folderarchivesettings/folderarchiveaccountinfo.cpp new/kdepim-runtime-4.14.3/resources/folderarchivesettings/folderarchiveaccountinfo.cpp --- old/kdepim-runtime-4.14.2/resources/folderarchivesettings/folderarchiveaccountinfo.cpp 2014-10-09 18:42:34.000000000 +0200 +++ new/kdepim-runtime-4.14.3/resources/folderarchivesettings/folderarchiveaccountinfo.cpp 2014-11-04 08:55:43.000000000 +0100 @@ -42,7 +42,7 @@ bool FolderArchiveAccountInfo::isValid() const { - return (mArchiveTopLevelCollectionId > -1); + return (mArchiveTopLevelCollectionId > -1) && (!mInstanceName.isEmpty()); } void FolderArchiveAccountInfo::setFolderArchiveType(FolderArchiveAccountInfo::FolderArchiveType type) @@ -116,3 +116,12 @@ config.writeEntry(QLatin1String("enabled"), mEnabled); config.writeEntry("keepExistingStructure", mKeepExistingStructure); } + +bool FolderArchiveAccountInfo::operator==( const FolderArchiveAccountInfo& other ) const +{ + return (mInstanceName == other.instanceName()) + && (mArchiveTopLevelCollectionId == other.archiveTopLevel()) + && (mArchiveType == other.folderArchiveType()) + && (mEnabled == other.enabled()) + && (mKeepExistingStructure == other.keepExistingStructure()); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/resources/folderarchivesettings/folderarchiveaccountinfo.h new/kdepim-runtime-4.14.3/resources/folderarchivesettings/folderarchiveaccountinfo.h --- old/kdepim-runtime-4.14.2/resources/folderarchivesettings/folderarchiveaccountinfo.h 2014-10-09 18:42:34.000000000 +0200 +++ new/kdepim-runtime-4.14.3/resources/folderarchivesettings/folderarchiveaccountinfo.h 2014-11-04 08:55:43.000000000 +0100 @@ -54,6 +54,8 @@ void writeConfig(KConfigGroup &config ); void readConfig(const KConfigGroup &config); + bool operator==( const FolderArchiveAccountInfo& other ) const; + private: FolderArchiveAccountInfo::FolderArchiveType mArchiveType; Akonadi::Collection::Id mArchiveTopLevelCollectionId; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/resources/folderarchivesettings/folderarchivesettingpage.cpp new/kdepim-runtime-4.14.3/resources/folderarchivesettings/folderarchivesettingpage.cpp --- old/kdepim-runtime-4.14.2/resources/folderarchivesettings/folderarchivesettingpage.cpp 2014-10-09 18:42:34.000000000 +0200 +++ new/kdepim-runtime-4.14.3/resources/folderarchivesettings/folderarchivesettingpage.cpp 2014-11-04 08:55:43.000000000 +0100 @@ -32,6 +32,9 @@ #include <QHBoxLayout> #include <QLabel> #include <QComboBox> +#include <QDBusReply> +#include <QDBusInterface> +#include <QDBusConnectionInterface> static const KCatalogLoader loader( QLatin1String("libfolderarchivesettings") ); @@ -146,5 +149,14 @@ mInfo->setFolderArchiveType(mArchiveNamed->type()); mInfo->writeConfig(grp); + + //Update cache from KMail + const QString kmailInterface = QLatin1String("org.kde.kmail"); + QDBusReply<bool> reply = QDBusConnection::sessionBus().interface()->isServiceRegistered(kmailInterface); + if (!reply.isValid() || !reply.value()) { + return; + } + QDBusInterface kmail(kmailInterface, QLatin1String("/KMail"), QLatin1String("org.kde.kmail.kmail")); + kmail.asyncCall(QLatin1String("reloadFolderArchiveConfig")); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/resources/folderarchivesettings/folderarchiveutil.cpp new/kdepim-runtime-4.14.3/resources/folderarchivesettings/folderarchiveutil.cpp --- old/kdepim-runtime-4.14.2/resources/folderarchivesettings/folderarchiveutil.cpp 2014-10-09 18:42:34.000000000 +0200 +++ new/kdepim-runtime-4.14.3/resources/folderarchivesettings/folderarchiveutil.cpp 2014-11-04 08:55:43.000000000 +0100 @@ -26,5 +26,5 @@ QString FolderArchiveUtil::configFileName() { - return QLatin1String(QLatin1String("foldermailarchiverc")); + return QLatin1String("foldermailarchiverc"); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/resources/ical/icalresource.desktop new/kdepim-runtime-4.14.3/resources/ical/icalresource.desktop --- old/kdepim-runtime-4.14.2/resources/ical/icalresource.desktop 2014-10-09 18:42:34.000000000 +0200 +++ new/kdepim-runtime-4.14.3/resources/ical/icalresource.desktop 2014-11-04 08:55:43.000000000 +0100 @@ -5,7 +5,7 @@ Name[bs]=ICal kalendar datoteka Name[ca]=Fitxer de calendari ICal Name[ca@valencia]=Fitxer de calendari ICal -Name[cs]=Soubor s iCal kalendářem +Name[cs]=Soubor s kalendářem iCal Name[da]=iCal-kalenderfil Name[de]=ICal-Kalenderdatei Name[el]=Αρχείο ημερολογίου ICal diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/resources/ical/wizard/icalwizard.desktop new/kdepim-runtime-4.14.3/resources/ical/wizard/icalwizard.desktop --- old/kdepim-runtime-4.14.2/resources/ical/wizard/icalwizard.desktop 2014-10-09 18:42:34.000000000 +0200 +++ new/kdepim-runtime-4.14.3/resources/ical/wizard/icalwizard.desktop 2014-11-04 08:55:43.000000000 +0100 @@ -5,7 +5,7 @@ Name[bs]=ICal kalendar datoteka Name[ca]=Fitxer de calendari ICal Name[ca@valencia]=Fitxer de calendari ICal -Name[cs]=Soubor s iCal kalendářem +Name[cs]=Soubor s kalendářem iCal Name[da]=iCal-kalenderfil Name[de]=ICal-Kalenderdatei Name[el]=Αρχείο ημερολογίου ICal diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/resources/imap/batchfetcher.cpp new/kdepim-runtime-4.14.3/resources/imap/batchfetcher.cpp --- old/kdepim-runtime-4.14.2/resources/imap/batchfetcher.cpp 2014-10-09 18:42:34.000000000 +0200 +++ new/kdepim-runtime-4.14.3/resources/imap/batchfetcher.cpp 2014-11-04 08:55:43.000000000 +0100 @@ -36,7 +36,8 @@ m_messageHelper(messageHelper), m_fetchInProgress(false), m_continuationRequested(false), - m_gmailEnabled(false) + m_gmailEnabled(false), + m_searchInChunks(false) { } @@ -49,9 +50,15 @@ m_uidBased = uidBased; } -void BatchFetcher::setSearchTerm(const KIMAP::Term &searchTerm) +void BatchFetcher::setSearchUids(const KIMAP::ImapInterval &intervall) { - m_searchTerm = searchTerm; + m_searchUidInterval = intervall; + + //We look up the UIDs ourselves + m_currentSet = KIMAP::ImapSet(); + + //MS Exchange can't handle big results so we have to split the search into small chunks + m_searchInChunks = m_session->serverGreeting().contains("Microsoft Exchange"); } void BatchFetcher::setGmailExtensionsEnabled(bool enable) @@ -59,13 +66,30 @@ m_gmailEnabled = enable; } +static const int maxAmountOfUidToSearchInOneTime = 2000; + void BatchFetcher::start() { - if (!m_searchTerm.isNull()) { + if (m_searchUidInterval.size()) { + //Search in chunks also Exchange can handle + const KIMAP::ImapInterval::Id firstUidToSearch = m_searchUidInterval.begin(); + const KIMAP::ImapInterval::Id lastUidToSearch = m_searchInChunks + ? qMin(firstUidToSearch + maxAmountOfUidToSearchInOneTime - 1, m_searchUidInterval.end()) + : m_searchUidInterval.end(); + + //Prepare next chunk + const KIMAP::ImapInterval::Id intervalBegin = lastUidToSearch + 1; + //Or are we already done? + if (intervalBegin > m_searchUidInterval.end()) { + m_searchUidInterval = KIMAP::ImapInterval(); + } else { + m_searchUidInterval.setBegin(intervalBegin); + } + //Resolve the uid to sequence numbers KIMAP::SearchJob *search = new KIMAP::SearchJob(m_session); search->setUidBased(true); - search->setTerm(m_searchTerm); + search->setTerm(KIMAP::Term(KIMAP::Term::Uid, KIMAP::ImapSet(firstUidToSearch, lastUidToSearch))); connect(search, SIGNAL(result(KJob*)), this, SLOT(onUidSearchDone(KJob*))); search->start(); } else { @@ -81,13 +105,13 @@ emitResult(); return; } + KIMAP::SearchJob *search = static_cast<KIMAP::SearchJob*>(job); m_uidBased = search->isUidBased(); + m_currentSet.add(search->results()); - KIMAP::ImapSet set; - set.add(search->results()); - m_currentSet = set; - fetchNextBatch(); + //More to search? + start(); } void BatchFetcher::fetchNextBatch() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/resources/imap/batchfetcher.h new/kdepim-runtime-4.14.3/resources/imap/batchfetcher.h --- old/kdepim-runtime-4.14.2/resources/imap/batchfetcher.h 2014-10-09 18:42:34.000000000 +0200 +++ new/kdepim-runtime-4.14.3/resources/imap/batchfetcher.h 2014-11-04 08:55:43.000000000 +0100 @@ -43,7 +43,7 @@ virtual void start(); void fetchNextBatch(); void setUidBased(bool); - void setSearchTerm(const KIMAP::Term &); + void setSearchUids(const KIMAP::ImapInterval &); void setGmailExtensionsEnabled(bool enable); Q_SIGNALS: @@ -70,8 +70,9 @@ const MessageHelper::Ptr m_messageHelper; bool m_fetchInProgress; bool m_continuationRequested; - KIMAP::Term m_searchTerm; + KIMAP::ImapInterval m_searchUidInterval; bool m_gmailEnabled; + bool m_searchInChunks; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/resources/imap/imapresource.cpp new/kdepim-runtime-4.14.3/resources/imap/imapresource.cpp --- old/kdepim-runtime-4.14.2/resources/imap/imapresource.cpp 2014-10-09 18:42:34.000000000 +0200 +++ new/kdepim-runtime-4.14.3/resources/imap/imapresource.cpp 2014-11-04 08:55:43.000000000 +0100 @@ -70,3 +70,8 @@ } dlg->deleteLater(); } + +void ImapResource::cleanup() +{ + settings()->cleanup(); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/resources/imap/imapresource.h new/kdepim-runtime-4.14.3/resources/imap/imapresource.h --- old/kdepim-runtime-4.14.2/resources/imap/imapresource.h 2014-10-09 18:42:34.000000000 +0200 +++ new/kdepim-runtime-4.14.3/resources/imap/imapresource.h 2014-11-04 08:55:43.000000000 +0100 @@ -38,6 +38,7 @@ virtual ~ImapResource(); virtual KDialog *createConfigureDialog ( WId windowId ); + virtual void cleanup(); protected: virtual QString defaultName() const; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/resources/imap/imapresourcebase.cpp new/kdepim-runtime-4.14.3/resources/imap/imapresourcebase.cpp --- old/kdepim-runtime-4.14.2/resources/imap/imapresourcebase.cpp 2014-10-09 18:42:34.000000000 +0200 +++ new/kdepim-runtime-4.14.3/resources/imap/imapresourcebase.cpp 2014-11-04 08:55:43.000000000 +0100 @@ -321,6 +321,9 @@ case SessionPool::NoAvailableSessionError: kFatal() << "Shouldn't happen"; return; + case SessionPool::CancelledError: + kWarning() << "Session login cancelled"; + return; } } @@ -424,63 +427,19 @@ startTask(new RetrieveCollectionsTask( createResourceState(TaskArguments()), this )); } -void ImapResourceBase::triggerCollectionExtraInfoJobs( const QVariant &collectionVariant ) +void ImapResourceBase::retrieveCollectionAttributes( const Akonadi::Collection &col ) { - const Collection collection( collectionVariant.value<Collection>() ); - emit status( AgentBase::Running, i18nc( "@info:status", "Retrieving extra folder information for '%1'", collection.name() ) ); - - //The collection that we received is potentially outdated. - //Using it would overwrite attributes with old values. - //FIXME: because this is async and not part of the resourcetask, it can't be killed. ResourceBase should just provide an up-to date copy of the collection. - Akonadi::CollectionFetchJob *fetchJob = new Akonadi::CollectionFetchJob(collection, CollectionFetchJob::Base, this); - fetchJob->fetchScope().setAncestorRetrieval( CollectionFetchScope::All ); - fetchJob->fetchScope().setIncludeStatistics( true ); - fetchJob->fetchScope().setIncludeUnsubscribed( true ); - connect(fetchJob, SIGNAL(result(KJob*)), this, SLOT(onMetadataCollectionFetchDone(KJob*))); -} - -void ImapResourceBase::onMetadataCollectionFetchDone(KJob *job) -{ - if (job->error()) { - kWarning() << "Failed to retrieve collection before RetrieveCollectionMetadataTask " << job->errorString(); - cancelTask(i18n("Failed to collect metadata.")); - return; - } - - Akonadi::CollectionFetchJob *fetchJob = static_cast<Akonadi::CollectionFetchJob*>(job); - Q_ASSERT(fetchJob->collections().size() == 1); - - startTask(new RetrieveCollectionMetadataTask( createResourceState(TaskArguments(fetchJob->collections().first())), this )); + emit status( AgentBase::Running, i18nc( "@info:status", "Retrieving extra folder information for '%1'", col.name() ) ); + startTask(new RetrieveCollectionMetadataTask( createResourceState(TaskArguments(col)), this )); } void ImapResourceBase::retrieveItems( const Collection &col ) { - scheduleCustomTask( this, "triggerCollectionExtraInfoJobs", QVariant::fromValue( col ), ResourceBase::Append ); - - //The collection that we receive was fetched when the task was scheduled, it is therefore possible that it is outdated. - //We refetch the collection since we rely on up-to-date annotations. - //FIXME: because this is async and not part of the resourcetask, it can't be killed. ResourceBase should just provide an up-to date copy of the collection. - Akonadi::CollectionFetchJob *fetchJob = new Akonadi::CollectionFetchJob(col, CollectionFetchJob::Base, this); - fetchJob->fetchScope().setAncestorRetrieval( CollectionFetchScope::All ); - fetchJob->fetchScope().setIncludeStatistics( true ); - fetchJob->fetchScope().setIncludeUnsubscribed( true ); - connect(fetchJob, SIGNAL(result(KJob*)), this, SLOT(onItemRetrievalCollectionFetchDone(KJob*))); -} - -void ImapResourceBase::onItemRetrievalCollectionFetchDone(KJob *job) -{ - if (job->error()) { - kWarning() << "Failed to retrieve collection before RetrieveItemsTask: " << job->errorString(); - cancelTask(i18n("Failed to retrieve items.")); - return; - } - - Akonadi::CollectionFetchJob *fetchJob = static_cast<Akonadi::CollectionFetchJob*>(job); - Q_ASSERT(fetchJob->collections().size() == 1); + synchronizeCollectionAttributes(col.id()); setItemStreamingEnabled( true ); - RetrieveItemsTask *task = new RetrieveItemsTask( createResourceState(TaskArguments(fetchJob->collections().first())), this); + RetrieveItemsTask *task = new RetrieveItemsTask( createResourceState(TaskArguments(col)), this); connect(task, SIGNAL(status(int,QString)), SIGNAL(status(int,QString))); connect(this, SIGNAL(retrieveNextItemSyncBatch(int)), task, SLOT(onReadyForNextBatch(int))); startTask(task); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/resources/imap/imapresourcebase.h new/kdepim-runtime-4.14.3/resources/imap/imapresourcebase.h --- old/kdepim-runtime-4.14.2/resources/imap/imapresourcebase.h 2014-10-09 18:42:34.000000000 +0200 +++ new/kdepim-runtime-4.14.3/resources/imap/imapresourcebase.h 2014-11-04 08:55:43.000000000 +0100 @@ -84,6 +84,7 @@ void abortActivity(); virtual void retrieveCollections(); + void retrieveCollectionAttributes( const Akonadi::Collection &col ); virtual void retrieveItems( const Akonadi::Collection &col ); virtual bool retrieveItem( const Akonadi::Item &item, const QSet<QByteArray> &parts ); @@ -129,15 +130,11 @@ void onIdleCollectionFetchDone( KJob *job ); - void onItemRetrievalCollectionFetchDone( KJob *job ); - void onMetadataCollectionFetchDone( KJob *job ); void onExpungeCollectionFetchDone( KJob *job ); void triggerCollectionExpunge( const QVariant &collectionVariant ); - void triggerCollectionExtraInfoJobs( const QVariant &collection ); - void taskDestroyed( QObject *task ); void showError( const QString &message ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/resources/imap/resourcestate.cpp new/kdepim-runtime-4.14.3/resources/imap/resourcestate.cpp --- old/kdepim-runtime-4.14.2/resources/imap/resourcestate.cpp 2014-10-09 18:42:34.000000000 +0200 +++ new/kdepim-runtime-4.14.3/resources/imap/resourcestate.cpp 2014-11-04 08:55:43.000000000 +0100 @@ -161,12 +161,7 @@ void ResourceState::collectionAttributesRetrieved( const Akonadi::Collection &collection ) { - //TODO use collection attributes retrieved properly. (Currently we're only emulating the behaviour) -// m_resource->collectionAttributesRetrieved( collection ); - if (collection.isValid() || !collection.remoteId().isEmpty()) { - applyCollectionChanges(collection); - } - taskDone(); + m_resource->collectionAttributesRetrieved( collection ); } void ResourceState::itemRetrieved( const Akonadi::Item &item ) @@ -218,10 +213,7 @@ if ( !c.hasAttribute<NoSelectAttribute>() && !oldMailBoxes.contains( mailBox ) ) { - m_resource->scheduleCustomTask( m_resource, - "triggerCollectionExtraInfoJobs", - QVariant::fromValue( c ), - Akonadi::ResourceBase::Append ); + m_resource->synchronizeCollectionAttributes(c.id()); } newMailBoxes << mailBox; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/resources/imap/resourcetask.cpp new/kdepim-runtime-4.14.3/resources/imap/resourcetask.cpp --- old/kdepim-runtime-4.14.2/resources/imap/resourcetask.cpp 2014-10-09 18:42:34.000000000 +0200 +++ new/kdepim-runtime-4.14.3/resources/imap/resourcetask.cpp 2014-11-04 08:55:43.000000000 +0100 @@ -36,7 +36,8 @@ m_sessionRequestId( 0 ), m_session( 0 ), m_actionIfNoSession( action ), - m_resource( resource ) + m_resource( resource ), + mCancelled( false ) { } @@ -247,100 +248,136 @@ void ResourceTask::setIdleCollection( const Akonadi::Collection &collection ) { - m_resource->setIdleCollection( collection ); + if (!mCancelled) { + m_resource->setIdleCollection( collection ); + } } void ResourceTask::applyCollectionChanges( const Akonadi::Collection &collection ) { - m_resource->applyCollectionChanges( collection ); + if (!mCancelled) { + m_resource->applyCollectionChanges( collection ); + } } void ResourceTask::itemRetrieved( const Akonadi::Item &item ) { - m_resource->itemRetrieved( item ); - emitPercent(100); + if (!mCancelled) { + m_resource->itemRetrieved( item ); + emitPercent(100); + } deleteLater(); } void ResourceTask::itemsRetrieved( const Akonadi::Item::List &items ) { - m_resource->itemsRetrieved( items ); + if (!mCancelled) { + m_resource->itemsRetrieved( items ); + } } void ResourceTask::itemsRetrievedIncremental( const Akonadi::Item::List &changed, const Akonadi::Item::List &removed ) { - m_resource->itemsRetrievedIncremental( changed, removed ); + if (!mCancelled) { + m_resource->itemsRetrievedIncremental( changed, removed ); + } } void ResourceTask::itemsRetrievalDone() { - m_resource->itemsRetrievalDone(); + if (!mCancelled) { + m_resource->itemsRetrievalDone(); + } deleteLater(); } void ResourceTask::setTotalItems(int totalItems) { - m_resource->setTotalItems(totalItems); + if (!mCancelled) { + m_resource->setTotalItems(totalItems); + } } void ResourceTask::changeCommitted( const Akonadi::Item &item ) { - m_resource->itemChangeCommitted( item ); + if (!mCancelled) { + m_resource->itemChangeCommitted( item ); + } deleteLater(); } void ResourceTask::changesCommitted(const Akonadi::Item::List& items) { - m_resource->itemsChangesCommitted( items ); + if (!mCancelled) { + m_resource->itemsChangesCommitted( items ); + } deleteLater(); } void ResourceTask::searchFinished( const QVector<qint64> &result, bool isRid ) { - m_resource->searchFinished( result, isRid ); + if (!mCancelled) { + m_resource->searchFinished( result, isRid ); + } deleteLater(); } void ResourceTask::collectionsRetrieved( const Akonadi::Collection::List &collections ) { - m_resource->collectionsRetrieved( collections ); + if (!mCancelled) { + m_resource->collectionsRetrieved( collections ); + } deleteLater(); } void ResourceTask::collectionAttributesRetrieved(const Akonadi::Collection& col) { - m_resource->collectionAttributesRetrieved( col ); + if (!mCancelled) { + m_resource->collectionAttributesRetrieved( col ); + } deleteLater(); } void ResourceTask::changeCommitted( const Akonadi::Collection &collection ) { - m_resource->collectionChangeCommitted( collection ); + if (!mCancelled) { + m_resource->collectionChangeCommitted( collection ); + } deleteLater(); } void ResourceTask::changeProcessed() { - m_resource->changeProcessed(); + if (!mCancelled) { + m_resource->changeProcessed(); + } deleteLater(); } void ResourceTask::cancelTask( const QString &errorString ) { - m_resource->cancelTask( errorString ); + if (!mCancelled) { + mCancelled = true; + m_resource->cancelTask( errorString ); + } deleteLater(); } void ResourceTask::deferTask() { - m_resource->deferTask(); + if (!mCancelled) { + mCancelled = true; + m_resource->deferTask(); + } deleteLater(); } void ResourceTask::restartItemRetrieval(Akonadi::Entity::Id col) { - m_resource->restartItemRetrieval(col); + if (!mCancelled) { + m_resource->restartItemRetrieval(col); + } deleteLater(); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/resources/imap/resourcetask.h new/kdepim-runtime-4.14.3/resources/imap/resourcetask.h --- old/kdepim-runtime-4.14.2/resources/imap/resourcetask.h 2014-10-09 18:42:34.000000000 +0200 +++ new/kdepim-runtime-4.14.3/resources/imap/resourcetask.h 2014-11-04 08:55:43.000000000 +0100 @@ -158,6 +158,7 @@ KIMAP::Session *m_session; ActionIfNoSession m_actionIfNoSession; ResourceStateInterface::Ptr m_resource; + bool mCancelled; }; #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/resources/imap/retrieveitemstask.cpp new/kdepim-runtime-4.14.3/resources/imap/retrieveitemstask.cpp --- old/kdepim-runtime-4.14.2/resources/imap/retrieveitemstask.cpp 2014-10-09 18:42:34.000000000 +0200 +++ new/kdepim-runtime-4.14.3/resources/imap/retrieveitemstask.cpp 2014-11-04 08:55:43.000000000 +0100 @@ -467,7 +467,7 @@ m_batchFetcher = createBatchFetcher(resourceState()->messageHelper(), set, scope, batchSize(), m_session); m_batchFetcher->setUidBased(m_uidBasedFetch); if (m_uidBasedFetch && set.intervals().size() == 1) { - m_batchFetcher->setSearchTerm(KIMAP::Term(KIMAP::Term::Uid, set)); + m_batchFetcher->setSearchUids(set.intervals().front()); } m_batchFetcher->setProperty("alreadyFetched", set.intervals().first().begin()); connect(m_batchFetcher, SIGNAL(itemsRetrieved(Akonadi::Item::List)), @@ -551,7 +551,7 @@ m_batchFetcher = createBatchFetcher(resourceState()->messageHelper(), set, scope, 10 * batchSize(), m_session); m_batchFetcher->setUidBased(m_uidBasedFetch); if (m_uidBasedFetch && scope.changedSince == 0 && set.intervals().size() == 1) { - m_batchFetcher->setSearchTerm(KIMAP::Term(KIMAP::Term::Uid, set)); + m_batchFetcher->setSearchUids(set.intervals().front()); } connect(m_batchFetcher, SIGNAL(itemsRetrieved(Akonadi::Item::List)), this, SLOT(onItemsRetrieved(Akonadi::Item::List))); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/resources/imap/sessionpool.cpp new/kdepim-runtime-4.14.3/resources/imap/sessionpool.cpp --- old/kdepim-runtime-4.14.2/resources/imap/sessionpool.cpp 2014-10-09 18:42:34.000000000 +0200 +++ new/kdepim-runtime-4.14.3/resources/imap/sessionpool.cpp 2014-11-04 08:55:43.000000000 +0100 @@ -197,6 +197,13 @@ void SessionPool::declareSessionReady( KIMAP::Session *session ) { + //This can happen if we happen to disconnect while capabilities and namespace are being retrieved, + //resulting in us keeping a dangling pointer to a deleted session + if (!m_connectingPool.contains( session )) { + kWarning() << "Tried to declare a removed session ready"; + return; + } + m_pendingInitialSession = 0; if ( !m_initialConnectDone ) { @@ -331,6 +338,7 @@ session = m_pendingInitialSession; } else { session = new KIMAP::Session( m_account->server(), m_account->port(), this ); + QObject::connect(session, SIGNAL(destroyed(QObject*)), this, SLOT(onSessionDestroyed(QObject*))); session->setUiProxy( m_sessionUiProxy ); session->setTimeout( m_account->timeout() ); m_connectingPool << session; @@ -353,6 +361,11 @@ void SessionPool::onLoginDone( KJob *job ) { KIMAP::LoginJob *login = static_cast<KIMAP::LoginJob*>( job ); + //Can happen if we disonnected meanwhile + if (!m_connectingPool.contains(login->session())) { + emit connectDone( CancelledError, i18n( "Disconnected from server during login.") ); + return; + } if ( job->error() == 0 ) { if ( m_initialConnectDone ) { @@ -389,6 +402,11 @@ void SessionPool::onCapabilitiesTestDone( KJob *job ) { KIMAP::CapabilitiesJob *capJob = qobject_cast<KIMAP::CapabilitiesJob*>( job ); + //Can happen if we disonnected meanwhile + if (!m_connectingPool.contains(capJob->session())) { + emit connectDone( CancelledError, i18n( "Disconnected from server during login.") ); + return; + } if ( job->error() ) { if ( m_account ) { @@ -443,6 +461,11 @@ void SessionPool::onNamespacesTestDone( KJob *job ) { KIMAP::NamespaceJob *nsJob = qobject_cast<KIMAP::NamespaceJob*>( job ); + // Can happen if we disconnect meanwhile + if (!m_connectingPool.contains(nsJob->session())) { + emit connectDone( CancelledError, i18n( "Disconnected from server during login.") ); + return; + } if ( nsJob->containsEmptyNamespace() ) { // When we got the empty namespace here, we assume that the other @@ -495,3 +518,16 @@ m_pendingInitialSession = 0; } +void SessionPool::onSessionDestroyed(QObject *object) +{ + //Safety net for bugs that cause dangling session pointers + KIMAP::Session *session = static_cast<KIMAP::Session*>(object); + if (m_unusedPool.contains(session) || m_reservedPool.contains(session) || m_connectingPool.contains(session)) { + kWarning() << "Session destroyed while still in pool" << session; + m_unusedPool.removeAll(session); + m_reservedPool.removeAll(session); + m_connectingPool.removeAll(session); + Q_ASSERT(false); + } +} + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/resources/imap/sessionpool.h new/kdepim-runtime-4.14.3/resources/imap/sessionpool.h --- old/kdepim-runtime-4.14.2/resources/imap/sessionpool.h 2014-10-09 18:42:34.000000000 +0200 +++ new/kdepim-runtime-4.14.3/resources/imap/sessionpool.h 2014-11-04 08:55:43.000000000 +0100 @@ -52,7 +52,8 @@ CapabilitiesTestError, IncompatibleServerError, NoAvailableSessionError, - CouldNotConnectError + CouldNotConnectError, + CancelledError }; enum SessionTermination { @@ -99,6 +100,7 @@ void onNamespacesTestDone( KJob *job ); void onSessionStateChanged(KIMAP::Session::State newState, KIMAP::Session::State oldState); + void onSessionDestroyed(QObject*); private: void onConnectionLost(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/resources/imap/tests/testsessionpool.cpp new/kdepim-runtime-4.14.3/resources/imap/tests/testsessionpool.cpp --- old/kdepim-runtime-4.14.2/resources/imap/tests/testsessionpool.cpp 2014-10-09 18:42:34.000000000 +0200 +++ new/kdepim-runtime-4.14.3/resources/imap/tests/testsessionpool.cpp 2014-11-04 08:55:43.000000000 +0100 @@ -461,13 +461,45 @@ server.quit(); } + void shouldCleanupOnClosingDuringLogin_data() + { + QTest::addColumn< QList<QByteArray> >( "scenario" ); + + { + QList<QByteArray> scenario; + scenario << FakeServer::greeting() + << "C: A000001 LOGIN \"t...@kdab.com\" \"foobar\""; + + QTest::newRow( "during login" ) << scenario; + } + { + QList<QByteArray> scenario; + scenario << FakeServer::greeting() + << "C: A000001 LOGIN \"t...@kdab.com\" \"foobar\"" + << "S: A000001 OK User Logged in" + << "C: A000002 CAPABILITY"; + + QTest::newRow( "during capability" ) << scenario; + } + { + QList<QByteArray> scenario; + scenario << FakeServer::greeting() + << "C: A000001 LOGIN \"t...@kdab.com\" \"foobar\"" + << "S: A000001 OK User Logged in" + << "C: A000002 CAPABILITY" + << "S: * CAPABILITY IMAP4 IMAP4rev1 NAMESPACE UIDPLUS IDLE" + << "S: A000002 OK Completed" + << "C: A000003 NAMESPACE"; + QTest::newRow( "during namespace" ) << scenario; + } + } + void shouldCleanupOnClosingDuringLogin() { + QFETCH( QList<QByteArray>, scenario ); + FakeServer server; - server.addScenario( QList<QByteArray>() - << FakeServer::greeting() - << "C: A000001 LOGIN \"t...@kdab.com\" \"foobar\"" - ); + server.addScenario(scenario); server.startAndWait(); @@ -493,7 +525,7 @@ QTest::qWait( 100 ); QCOMPARE( connectSpy.count(), 1 ); // We're informed that connect failed - QCOMPARE( connectSpy.at( 0 ).at( 0 ).toInt(), int(SessionPool::CouldNotConnectError) ); + QCOMPARE( connectSpy.at( 0 ).at( 0 ).toInt(), int(SessionPool::CancelledError) ); QCOMPARE( lostSpy.count(), 0 ); // We're not supposed to know the session pointer, so no connectionLost emitted // Make the session->deleteLater work, it can't happen in qWait (nested event loop) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/resources/imap/wizard/imapwizard.desktop new/kdepim-runtime-4.14.3/resources/imap/wizard/imapwizard.desktop --- old/kdepim-runtime-4.14.2/resources/imap/wizard/imapwizard.desktop 2014-10-09 18:42:34.000000000 +0200 +++ new/kdepim-runtime-4.14.3/resources/imap/wizard/imapwizard.desktop 2014-11-04 08:55:43.000000000 +0100 @@ -50,7 +50,7 @@ Comment[bs]=Imap nalog Comment[ca]=Compte Imap Comment[ca@valencia]=Compte Imap -Comment[cs]=Imap účet +Comment[cs]=Účet IMAP Comment[da]=IMAP-konto Comment[de]=IMAP-Zugang Comment[el]=Λογαριασμός imap diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/resources/kalarm/kalarmdir/kalarmdirresource.cpp new/kdepim-runtime-4.14.3/resources/kalarm/kalarmdir/kalarmdirresource.cpp --- old/kdepim-runtime-4.14.2/resources/kalarm/kalarmdir/kalarmdirresource.cpp 2014-10-09 18:42:34.000000000 +0200 +++ new/kdepim-runtime-4.14.3/resources/kalarm/kalarmdir/kalarmdirresource.cpp 2014-11-04 08:55:43.000000000 +0100 @@ -482,6 +482,11 @@ return KAEvent(); } const Event::List events = calendar->events(); + if ( events.isEmpty() ) + { + kDebug() << "Empty calendar in file" << path; + return KAEvent(); + } if (events.count() > 1) { kWarning() << "Deleting" << events.count() - 1 << "excess events found in file" << path; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/resources/kolab/kolabresource.cpp new/kdepim-runtime-4.14.3/resources/kolab/kolabresource.cpp --- old/kdepim-runtime-4.14.2/resources/kolab/kolabresource.cpp 2014-10-09 18:42:34.000000000 +0200 +++ new/kdepim-runtime-4.14.3/resources/kolab/kolabresource.cpp 2014-11-04 08:55:43.000000000 +0100 @@ -95,7 +95,7 @@ (!col.attribute<TimestampAttribute>() || col.attribute<TimestampAttribute>()->timestamp() < QDateTime::currentDateTime().addSecs(-60).toTime_t())) { updatedCollections.insert(col.id()); - scheduleCustomTask(this, "triggerCollectionExtraInfoJobs", QVariant::fromValue(col), Akonadi::ResourceBase::Prepend); + synchronizeCollectionAttributes(col.id()); deferTask(); return; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/resources/mbox/mboxresource.desktop new/kdepim-runtime-4.14.3/resources/mbox/mboxresource.desktop --- old/kdepim-runtime-4.14.2/resources/mbox/mboxresource.desktop 2014-10-09 18:42:34.000000000 +0200 +++ new/kdepim-runtime-4.14.3/resources/mbox/mboxresource.desktop 2014-11-04 08:55:43.000000000 +0100 @@ -4,7 +4,7 @@ Name[bs]=Mbox Name[ca]=Mbox Name[ca@valencia]=Mbox -Name[cs]=Mbox +Name[cs]=MBox Name[da]=Mbox Name[de]=Mbox Name[el]=Mbox diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/resources/mixedmaildir/mixedmaildirresource.desktop new/kdepim-runtime-4.14.3/resources/mixedmaildir/mixedmaildirresource.desktop --- old/kdepim-runtime-4.14.2/resources/mixedmaildir/mixedmaildirresource.desktop 2014-10-09 18:42:34.000000000 +0200 +++ new/kdepim-runtime-4.14.3/resources/mixedmaildir/mixedmaildirresource.desktop 2014-11-04 08:55:43.000000000 +0100 @@ -45,7 +45,7 @@ Comment[bs]=Učitava podatke iz lokalne fascikle KMail pošte Comment[ca]=Carrega les dades des d'una carpeta local de correu del KMail Comment[ca@valencia]=Carrega dades des d'una carpeta local de correu del KMail -Comment[cs]=Načítá data z místní složky pošty KMail +Comment[cs]=Načítá data z místní složky pošty KMail Comment[da]=Indlæser data fra en lokal KMail mail-mappe Comment[de]=Daten werden aus einem lokalen KMail-Mailordner geladen Comment[el]=Φορτώνει δεδομένα από έναν τοπικό φάκελο αλληλογραφίας του KMail diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/resources/vcard/vcardresource.desktop new/kdepim-runtime-4.14.3/resources/vcard/vcardresource.desktop --- old/kdepim-runtime-4.14.2/resources/vcard/vcardresource.desktop 2014-10-09 18:42:34.000000000 +0200 +++ new/kdepim-runtime-4.14.3/resources/vcard/vcardresource.desktop 2014-11-04 08:55:43.000000000 +0100 @@ -43,7 +43,7 @@ Comment[bs]=Učitava podatke iz VCard datoteke Comment[ca]=Carrega les dades des d'un fitxer vCard Comment[ca@valencia]=Carrega dades des d'un fitxer vCard -Comment[cs]=Načítá data ze souboru vizitek (vCard) +Comment[cs]=Načítá data ze souboru vizitek Comment[da]=Indlæser data fra en vCard-fil Comment[de]=Daten werden aus einer vCard-Datei geladen Comment[el]=Φορτώνει δεδομένα από ένα αρχείο VCard diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/resources/vcard/wizard/vcardwizard.desktop new/kdepim-runtime-4.14.3/resources/vcard/wizard/vcardwizard.desktop --- old/kdepim-runtime-4.14.2/resources/vcard/wizard/vcardwizard.desktop 2014-10-09 18:42:34.000000000 +0200 +++ new/kdepim-runtime-4.14.3/resources/vcard/wizard/vcardwizard.desktop 2014-11-04 08:55:43.000000000 +0100 @@ -36,7 +36,7 @@ Comment=Loads contact from VCard File Comment[ca]=Carrega contactes des d'un fitxer vCard Comment[ca@valencia]=Carrega contactes des d'un fitxer vCard -Comment[cs]=Načítá data ze souboru vizitek (vCard) +Comment[cs]=Načítá data ze souboru vizitek Comment[da]=Indlæs kontakt fra VCard-fil Comment[de]=Lädt Kontakte aus einer vCard-Datei Comment[en_GB]=Loads contact from VCard File diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/resources/vcarddir/vcarddirresource.desktop new/kdepim-runtime-4.14.3/resources/vcarddir/vcarddirresource.desktop --- old/kdepim-runtime-4.14.2/resources/vcarddir/vcarddirresource.desktop 2014-10-09 18:42:34.000000000 +0200 +++ new/kdepim-runtime-4.14.3/resources/vcarddir/vcarddirresource.desktop 2014-11-04 08:55:43.000000000 +0100 @@ -42,7 +42,7 @@ Comment[bs]=Učitava podakte iz direktorija sa VCards Comment[ca]=Carrega les dades des d'un directori amb vCard Comment[ca@valencia]=Carrega dades des d'un directori amb vCard -Comment[cs]=Načítá data z adresáře vizitek (vCard) +Comment[cs]=Načítá data z adresáře vizitek Comment[da]=Indlæser data fra en mappe med vCards Comment[de]=Daten werden aus einem Ordner mit vCard-Dateien geladen Comment[el]=Φορτώνει δεδομένα από έναν κατάλογο που περιέχει κάρτες VCard diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdepim-runtime-4.14.2/resources/vcarddir/wizard/vcarddirwizard.desktop new/kdepim-runtime-4.14.3/resources/vcarddir/wizard/vcarddirwizard.desktop --- old/kdepim-runtime-4.14.2/resources/vcarddir/wizard/vcarddirwizard.desktop 2014-10-09 18:42:34.000000000 +0200 +++ new/kdepim-runtime-4.14.3/resources/vcarddir/wizard/vcarddirwizard.desktop 2014-11-04 08:55:43.000000000 +0100 @@ -36,7 +36,7 @@ Comment=Loads contact from VCard Directory Comment[ca]=Carrega contactes des d'un directori amb vCard Comment[ca@valencia]=Carrega contactes des d'un directori amb vCard -Comment[cs]=Načítá data z adresáře vizitek (vCard) +Comment[cs]=Načítá data z adresáře vizitek Comment[da]=Indlæser kontakt fra VCard-mappe Comment[de]=Lädt Kontakte aus einem vCard-Ordner Comment[en_GB]=Loads contact from VCard Directory -- To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org For additional commands, e-mail: opensuse-commit+h...@opensuse.org