diff --git a/CMakeLists.txt b/CMakeLists.txt index 4b855543..caf32c9d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,7 +25,7 @@ include(FeatureSummary) find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED Core Gui Widgets Qml Quick Test) -find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS Plasma Service Declarative I18n KIO) +find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS Plasma Service Declarative I18n KIO People) find_package(KF5 REQUIRED COMPONENTS PlasmaQuick DBusAddons Notifications) find_package(TelepathyQt5 REQUIRED) find_package(KF5Wayland CONFIG) diff --git a/dialer/CMakeLists.txt b/dialer/CMakeLists.txt index c4a392e1..0481b8f8 100644 --- a/dialer/CMakeLists.txt +++ b/dialer/CMakeLists.txt @@ -5,3 +5,4 @@ install(FILES package/metadata.desktop DESTINATION ${XDG_APPS_INSTALL_DIR} RENAM include_directories(${TELEPATHY_QT5_INCLUDE_DIR}) add_subdirectory(src) +add_subdirectory(plugin) diff --git a/dialer/plugin/CMakeLists.txt b/dialer/plugin/CMakeLists.txt new file mode 100644 index 00000000..4aefa7b0 --- /dev/null +++ b/dialer/plugin/CMakeLists.txt @@ -0,0 +1,14 @@ +set(kpeoplehelper_SRCS + kpeoplehelper.cpp + kpeoplehelperplugin.cpp + ) + +add_library(kpeoplehelperplugin SHARED ${kpeoplehelper_SRCS}) +target_link_libraries(kpeoplehelperplugin Qt5::Core + Qt5::Qml + KF5::People + KF5::PeopleBackend) + +install(TARGETS kpeoplehelperplugin DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/plasma/private/kpeoplehelper) + +install(FILES qmldir DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/plasma/private/kpeoplehelper) diff --git a/dialer/plugin/kpeoplehelper.cpp b/dialer/plugin/kpeoplehelper.cpp new file mode 100644 index 00000000..1f39f97b --- /dev/null +++ b/dialer/plugin/kpeoplehelper.cpp @@ -0,0 +1,60 @@ +/* + Copyright (C) 2015 Martin Klapetek + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "kpeoplehelper.h" + +#include +#include + +#include +#include + +KPeopleHelper::KPeopleHelper(QObject *parent) + : QIdentityProxyModel(parent) +{ + m_model = new KPeople::PersonsModel(this); + setSourceModel(m_model); +} + +KPeopleHelper::~KPeopleHelper() +{ + delete m_model; +} + +QVariant KPeopleHelper::data(const QModelIndex &index, int role) const +{ + if (!m_model) { + return QVariant(); + } + + if (role == KPeopleHelper::PhoneNumberRole) { + return m_model->contactCustomProperty(index, KPeople::AbstractContact::PhoneNumberProperty); + } + + return m_model->data(index, role); +} + +QHash KPeopleHelper::roleNames() const +{ + QHash roles = QAbstractItemModel::roleNames(); + roles.insert(PersonUriRole, "personUri"); + roles.insert(PersonVCardRole, "personVCard"); + roles.insert(ContactsVCardRole, "contactsVCard"); + roles.insert(PhoneNumberRole, "phoneNumber"); + return roles; +} diff --git a/dialer/plugin/kpeoplehelper.h b/dialer/plugin/kpeoplehelper.h new file mode 100644 index 00000000..7e6528bf --- /dev/null +++ b/dialer/plugin/kpeoplehelper.h @@ -0,0 +1,60 @@ +/* + Copyright (C) 2015 Martin Klapetek + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef KPEOPLEHELPER_H +#define KPEOPLEHELPER_H + +#include +#include + +namespace KPeople { + class PersonsModel; +} + +class QAbstractItemModel; + +class KPeopleHelper : public QIdentityProxyModel +{ + Q_OBJECT + +public: + enum Role { + FormattedNameRole = Qt::DisplayRole,//QString best name for this person + PhotoRole = Qt::DecorationRole, //QPixmap best photo for this person + PersonUriRole = Qt::UserRole, //QString ID of this person + PersonVCardRole, //AbstractContact::Ptr + ContactsVCardRole, //AbstractContact::List (FIXME or map?) + + GroupsRole, ///groups QStringList + PhoneNumberRole, //QString + + UserRole = Qt::UserRole + 0x1000 ///< in case it's needed to extend, use this one to start from + }; + Q_ENUMS(Role) + + KPeopleHelper(QObject *parent = 0); + ~KPeopleHelper(); + + virtual QVariant data(const QModelIndex &index, int role) const Q_DECL_OVERRIDE; + virtual QHash roleNames() const Q_DECL_OVERRIDE; + +private: + KPeople::PersonsModel *m_model; +}; + +#endif // KPEOPLEHELPER_H diff --git a/dialer/plugin/kpeoplehelperplugin.cpp b/dialer/plugin/kpeoplehelperplugin.cpp new file mode 100644 index 00000000..f8daf2c6 --- /dev/null +++ b/dialer/plugin/kpeoplehelperplugin.cpp @@ -0,0 +1,31 @@ +/* + Copyright (C) 2015 Martin Klapetek + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "kpeoplehelperplugin.h" +#include "kpeoplehelper.h" + +#include + +void KPeopleHelperPlugin::registerTypes(const char *uri) +{ + Q_ASSERT(uri == QLatin1String("org.kde.plasma.private.kpeoplehelper")); + + qmlRegisterType(uri, 1, 0, "KPeopleHelper"); +} + +#include "kpeoplehelperplugin.moc" diff --git a/dialer/plugin/kpeoplehelperplugin.h b/dialer/plugin/kpeoplehelperplugin.h new file mode 100644 index 00000000..5808d4b1 --- /dev/null +++ b/dialer/plugin/kpeoplehelperplugin.h @@ -0,0 +1,36 @@ +/* + Copyright (C) 2015 Martin Klapetek + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + + +#ifndef KPEOPLEHELPERPLUGIN_H +#define KPEOPLEHELPERPLUGIN_H + +#include + +class QQmlEngine; +class KPeopleHelperPlugin : public QQmlExtensionPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface") + +public: + void registerTypes(const char *uri); + +}; + +#endif // KPEOPLEHELPERPLUGIN_H diff --git a/dialer/plugin/qmldir b/dialer/plugin/qmldir new file mode 100644 index 00000000..2d510a28 --- /dev/null +++ b/dialer/plugin/qmldir @@ -0,0 +1,2 @@ +module org.kde.plasma.private.kpeoplehelper +plugin kpeoplehelperplugin