diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d5df812..931881a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,288 +1,290 @@ # target_include_directories does not handle empty include paths include_directories(${GPGME_INCLUDES}) add_definitions(-DTRANSLATION_DOMAIN=\"libkleopatra\") #add_definitions( -DQT_NO_CAST_FROM_ASCII ) #add_definitions( -DQT_NO_CAST_TO_ASCII ) kde_enable_exceptions() add_definitions( -DGPGMEPP_ERR_SOURCE_DEFAULT=13 ) # 13 is GPG_ERR_SOURCE_KLEO, even if gpg-error's too old to know about #parts of Boost don't build with the gcc pedantic option, so remove that option string(REPLACE "-pedantic" "" FOO "${CMAKE_CXX_FLAGS}") set(CMAKE_CXX_FLAGS "${FOO}") add_subdirectory( pics ) add_subdirectory( backends ) if (BUILD_TESTING) add_subdirectory( tests ) endif() ########### next target ############### set(libkleo_backend_qgpgme_SRCS backends/qgpgme/gnupgprocessbase.cpp backends/qgpgme/qgpgmeprogresstokenmapper.cpp backends/qgpgme/qgpgmebackend.cpp backends/qgpgme/threadedjobmixin.cpp backends/qgpgme/qgpgmekeylistjob.cpp backends/qgpgme/qgpgmelistallkeysjob.cpp backends/qgpgme/qgpgmekeygenerationjob.cpp backends/qgpgme/qgpgmeimportjob.cpp backends/qgpgme/qgpgmeimportfromkeyserverjob.cpp backends/qgpgme/qgpgmeexportjob.cpp backends/qgpgme/qgpgmesecretkeyexportjob.cpp backends/qgpgme/qgpgmechangeexpiryjob.cpp backends/qgpgme/qgpgmechangeownertrustjob.cpp backends/qgpgme/qgpgmechangepasswdjob.cpp backends/qgpgme/qgpgmedownloadjob.cpp backends/qgpgme/qgpgmedeletejob.cpp backends/qgpgme/qgpgmeencryptjob.cpp backends/qgpgme/qgpgmedecryptjob.cpp backends/qgpgme/qgpgmesignjob.cpp backends/qgpgme/qgpgmesignkeyjob.cpp backends/qgpgme/qgpgmeadduseridjob.cpp backends/qgpgme/qgpgmeverifydetachedjob.cpp backends/qgpgme/qgpgmeverifyopaquejob.cpp backends/qgpgme/qgpgmesignencryptjob.cpp backends/qgpgme/qgpgmedecryptverifyjob.cpp backends/qgpgme/qgpgmecryptoconfig.cpp backends/qgpgme/qgpgmenewcryptoconfig.cpp backends/qgpgme/qgpgmerefreshkeysjob.cpp backends/qgpgme/qgpgmekeyformailboxjob.cpp ) ecm_qt_declare_logging_category(libkleo_backend_qgpgme_SRCS HEADER gpgme_backend_debug.h IDENTIFIER GPGPME_BACKEND_LOG CATEGORY_NAME log_gpgme_backend) set(libkleo_backend_chiasmus_SRCS backends/chiasmus/config_data.c backends/chiasmus/obtainkeysjob.cpp backends/chiasmus/symcryptrunprocessbase.cpp backends/chiasmus/chiasmusjob.cpp backends/chiasmus/chiasmuslibrary.cpp backends/chiasmus/chiasmusbackend.cpp ) set(libkleo_core_SRCS kleo/checksumdefinition.cpp kleo/cryptobackend.cpp kleo/cryptobackendfactory.cpp kleo/enum.cpp kleo/exception.cpp kleo/dn.cpp kleo/job.cpp kleo/multideletejob.cpp kleo/hierarchicalkeylistjob.cpp kleo/defaultkeyfilter.cpp kleo/kconfigbasedkeyfilter.cpp kleo/keyfiltermanager.cpp models/keycache.cpp models/keylistmodel.cpp models/keylistsortfilterproxymodel.cpp models/keyrearrangecolumnsproxymodel.cpp models/modeltest.cpp models/subkeylistmodel.cpp models/useridlistmodel.cpp utils/filesystemwatcher.cpp utils/formatting.cpp ) ecm_qt_declare_logging_category(libkleo_core_SRCS HEADER libkleo_debug.h IDENTIFIER LIBKLEO_LOG CATEGORY_NAME log_libkleo) set(libkleo_ui_common_SRCS ui/dnattributeorderconfigwidget.cpp ui/kdhorizontalline.cpp ui/filenamerequester.cpp ui/messagebox.cpp ui/cryptoconfigmodule.cpp ui/cryptoconfigdialog.cpp ui/directoryserviceswidget.cpp ui/progressbar.cpp ui/progressdialog.cpp ui/auditlogviewer.cpp ) ecm_qt_declare_logging_category(libkleo_ui_common_SRCS HEADER kleo_ui_debug.h IDENTIFIER KLEO_UI_LOG CATEGORY_NAME log_kleo_ui) set(libkleo_ui_SRCS # make this a separate lib. ui/keylistview.cpp ui/keyselectiondialog.cpp ui/keyrequester.cpp ui/keyapprovaldialog.cpp + ui/keyselectioncombo.cpp ) ki18n_wrap_ui(libkleo_ui_common_SRCS ui/directoryserviceswidget.ui ) set(kleo_LIB_SRCS ${libkleo_core_SRCS} ${libkleo_backend_chiasmus_SRCS} ${libkleo_ui_SRCS} ${libkleo_ui_common_SRCS} ${libkleo_backend_qgpgme_SRCS}) set(kleo_LIB_LIBS PUBLIC KF5::QGpgme PRIVATE Qt5::Widgets KF5::I18n KF5::Completion KF5::ConfigCore KF5::CoreAddons KF5::WindowSystem KF5::WidgetsAddons KF5::Codecs KF5::ItemModels) if (WIN32) set(kleo_LIB_LIBS ${kleo_LIB_LIBS} PUBLIC KF5::Gpgmepp) else() set(kleo_LIB_LIBS ${kleo_LIB_LIBS} PUBLIC KF5::Gpgmepp-pthread) endif() if (KF5PimTextEdit_FOUND) add_definitions(-DHAVE_PIMTEXTEDIT) set(kleo_LIB_LIBS ${kleo_LIB_LIBS} PRIVATE KF5::PimTextEdit) endif() add_library(KF5Libkleo ${kleo_LIB_SRCS}) generate_export_header(KF5Libkleo BASE_NAME kleo) add_library(KF5::Libkleo ALIAS KF5Libkleo) if(WIN32) target_link_libraries(KF5Libkleo ${kleo_LIB_LIBS} ${GPGME_VANILLA_LIBRARIES} ) else() target_link_libraries(KF5Libkleo ${kleo_LIB_LIBS} ) endif() set_target_properties(KF5Libkleo PROPERTIES VERSION ${LIBKLEO_VERSION_STRING} SOVERSION ${LIBKLEO_SOVERSION} EXPORT_NAME Libkleo ) install(TARGETS KF5Libkleo EXPORT KF5LibkleoTargets ${KF5_INSTALL_TARGETS_DEFAULT_ARGS} ${LIBRARY_NAMELINK} ) target_include_directories(KF5Libkleo PUBLIC "$") target_include_directories(KF5Libkleo INTERFACE "$") ecm_generate_headers(libkleo_CamelCase_HEADERS HEADER_NAMES DecryptJob CryptoBackendFactory Enum CryptoBackend ChangeOwnerTrustJob Stl_Util CryptoConfig CryptoBackend SignKeyJob DecryptVerifyJob VerifyOpaqueJob SpecialJob SignJob Dn ImportJob Exception KeyFilter KeyListJob ExportJob SignEncryptJob ChecksumDefinition KeyFilterManager EncryptJob VerifyDetachedJob ImportFromKeyserverJob AddUserIDJob ChangeExpiryJob ChangePasswdJob MultiDeleteJob DeleteJob DecryptJob KeyGenerationJob Job OidMap ListAllKeysJob Predicates AbstractImportJob DefaultKeyFilter KeyForMailboxJob REQUIRED_HEADERS libkleo_HEADERS PREFIX Libkleo RELATIVE kleo ) ecm_generate_headers(libkleo_CamelCase_models_HEADERS HEADER_NAMES KeyCache KeyListModel KeyListModelInterface KeyListSortFilterProxyModel KeyRearrangeColumnsProxyModel SubkeyListModel UserIDListModel REQUIRED_HEADERS libkleo_models_HEADERS PREFIX Libkleo RELATIVE models ) ecm_generate_headers(libkleo_CamelCase_utils_HEADERS HEADER_NAMES FileSystemWatcher Formatting REQUIRED_HEADERS libkleo_utils_HEADERS PREFIX Libkleo RELATIVE utils ) ecm_generate_headers(libkleo_CamelCase_ui_HEADERS HEADER_NAMES ProgressDialog KeyApprovalDialog KeySelectionDialog + KeySelectionCombo FileNameRequester KeyRequester MessageBox KDHorizontalLine CryptoConfigDialog CryptoConfigModule DirectoryServicesWidget DNAttributeOrderConfigWidget REQUIRED_HEADERS libkleo_ui_HEADERS PREFIX Libkleo RELATIVE ui ) ecm_generate_pri_file(BASE_NAME Libkleo LIB_NAME KF5Libkleo DEPS "QGpgme" FILENAME_VAR PRI_FILENAME INCLUDE_INSTALL_DIR ${KDE_INSTALL_INCLUDEDIR_KF5}/Libkleo ) install(FILES ${libkleo_CamelCase_HEADERS} ${libkleo_CamelCase_models_HEADERS} ${libkleo_CamelCase_utils_HEADERS} ${libkleo_CamelCase_ui_HEADERS} DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/Libkleo COMPONENT Devel ) install(FILES ${libkleo_HEADERS} ${CMAKE_CURRENT_BINARY_DIR}/kleo_export.h ${libkleo_HEADERS} ${libkleo_models_HEADERS} ${libkleo_utils_HEADERS} ${libkleo_ui_HEADERS} DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/libkleo COMPONENT Devel ) install(FILES ${PRI_FILENAME} DESTINATION ${ECM_MKSPECS_INSTALL_DIR}) if ( WIN32 ) install ( FILES libkleopatrarc-win32.desktop DESTINATION ${KDE_INSTALL_CONFDIR} RENAME libkleopatrarc ) else () install ( FILES libkleopatrarc.desktop DESTINATION ${KDE_INSTALL_CONFDIR} RENAME libkleopatrarc ) endif () diff --git a/src/models/keycache.cpp b/src/models/keycache.cpp index 5a01531..63d14be 100644 --- a/src/models/keycache.cpp +++ b/src/models/keycache.cpp @@ -1,1095 +1,1095 @@ /* -*- mode: c++; c-basic-offset:4 -*- models/keycache.cpp This file is part of Kleopatra, the KDE keymanager Copyright (c) 2007,2008 Klarälvdalens Datakonsult AB Kleopatra is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Kleopatra 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 In addition, as a special exception, the copyright holders give permission to link the code of this program with any edition of the Qt library by Trolltech AS, Norway (or with modified versions of Qt that use the same license as Qt), and distribute linked combinations including the two. You must obey the GNU General Public License in all respects for all of the code used other than Qt. If you modify this file, you may extend this exception to your version of the file, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. */ #include "keycache.h" #include "keycache_p.h" #include "libkleo_debug.h" #include "kleo/predicates.h" #include "kleo/stl_util.h" #include "kleo/cryptobackendfactory.h" #include "kleo/dn.h" #include "kleo/keylistjob.h" #include "kleo/listallkeysjob.h" #include "utils/filesystemwatcher.h" #include #include #include #include #include #include //#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace Kleo; using namespace GpgME; using namespace boost; using namespace KMime::Types; static const unsigned int hours2ms = 1000 * 60 * 60; // // // KeyCache // // namespace { make_comparator_str(ByEMail, .first.c_str()); struct is_string_empty : std::unary_function { bool operator()(const char *s) const { return !s || !*s; } }; } class KeyCache::Private { friend class ::Kleo::KeyCache; KeyCache *const q; public: explicit Private(KeyCache *qq) : q(qq), m_refreshInterval(1), m_initalized(false) { connect(&m_autoKeyListingTimer, SIGNAL(timeout()), q, SLOT(startKeyListing())); updateAutoKeyListingTimer(); } template < template