diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,6 +24,7 @@ include(ECMQtDeclareLoggingCategory) include(CheckSymbolExists) include(ECMCoverageOption) +include(KDEPackageAppTemplates) include(AkonadiMacros) @@ -257,6 +258,8 @@ add_subdirectory(src) add_subdirectory(icons) +add_subdirectory(templates) + if(BUILD_TOOLS) # add testrunner (application for managing a self-contained # test environment) diff --git a/ExtraDesktop.sh b/ExtraDesktop.sh new file mode 100644 --- /dev/null +++ b/ExtraDesktop.sh @@ -0,0 +1,4 @@ +#! /usr/bin/env bash +#This file outputs in a separate line each file with a .desktop syntax +#that needs to be translated but has a non .desktop extension +find -name \*.kdevtemplate -print diff --git a/templates/CMakeLists.txt b/templates/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/templates/CMakeLists.txt @@ -0,0 +1,6 @@ +set(apptemplate_DIRS + akonadiresource + akonadiserializer +) + +kde_package_app_templates(TEMPLATES ${apptemplate_DIRS} INSTALL_DIR ${KDE_INSTALL_KTEMPLATESDIR}) diff --git a/templates/akonadiresource/CMakeLists.txt b/templates/akonadiresource/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/templates/akonadiresource/CMakeLists.txt @@ -0,0 +1,34 @@ +cmake_minimum_required(VERSION 3.1) + +project(%{APPNAMELC}) + +set(ECM_MIN_VERSION "5.13.0") +find_package(ECM ${ECM_MIN_VERSION} CONFIG REQUIRED) + +set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules ${ECM_MODULE_PATH} ${CMAKE_MODULE_PATH}) + +include(FeatureSummary) +include(KDEInstallDirs) +include(KDECMakeSettings) +include(KDEFrameworkCompilerSettings NO_POLICY_SCOPE) +include(ECMQtDeclareLoggingCategory) + +set(QT_MIN_VERSION "5.3.0") +find_package(Qt5 ${QT_MIN_VERSION} REQUIRED Core DBus Gui) + +set(KF5_MIN_VERSION "5.13.0") +find_package(KF5Config ${KF5_MIN_VERSION} CONFIG REQUIRED) + +set(AKONADI_MIN_VERSION "5.0") +find_package(KF5Akonadi ${AKONADI_MIN_VERSION} CONFIG REQUIRED) + +find_package(Xsltproc REQUIRED) +set_package_properties(Xsltproc PROPERTIES + DESCRIPTION "XSLT processor from libxslt" + TYPE REQUIRED + PURPOSE "Required to generate a D-Bus interface for the resource." +) + +add_subdirectory(src) + +feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES) diff --git a/templates/akonadiresource/README b/templates/akonadiresource/README new file mode 100644 --- /dev/null +++ b/templates/akonadiresource/README @@ -0,0 +1,89 @@ +How To Build This Template +-=-=-=-=-=-=-=-=-=-=-=-=-= + +--- On Linux & similar: + +cd +mkdir build +cd build +cmake .. -DCMAKE_INSTALL_PREFIX=$MY_PREFIX -DCMAKE_BUILD_TYPE=Debug +make +make install or su -c 'make install' + +(MY_PREFIX is where you install your Akonadi setup, replace it accordingly) + +to uninstall the project: +make uninstall or su -c 'make uninstall' + +Note: you can use another build path. Then cd in your build dir and: +export MY_SRC=path_to_your_src +cmake $MY_SRC -DCMAKE_INSTALL_PREFIX=$MY_PREFIX -DCMAKE_BUILD_TYPE=Debug + +--- On Windows: + +cd +mkdir build +cd build +cmake .. -DCMAKE_INSTALL_PREFIX=%MY_PREFIX% -DCMAKE_BUILD_TYPE=Debug +[n]make +[n]make install + +(MY_PREFIX is where you install your Akonadi setup, replace it accordingly) + +to uninstall the project: +[n]make uninstall + +Note: use nmake if you're building with the Visual Studio compiler, or make +if you're using the minGW compiler + + +Implementation hints +-=-=-=-=-=-=-=-=-=-= + +The code generated by the template can be compiled without any further +changes, so you can start with your own code right away. + +However, there are a couple of things you will need to change outside the +resource's code, i.e. in the resource's .desktop file: + +- Name field: the name of the resource with which it will be displayed in + system settings and applications which can add resources on their own. + E.g. MyBackend Resource + +- Comment field: short description of the resource, also used to be + displayed, e.g. For calendars and contacts stored in MyBackend + +- Icon field: if you are not writing a contact (addressbook) resource, you have + to change this to either an icon for the respective MIME type you are going + to provide or use a resource specific icon which you provide yourself + +- X-Akonadi-MimeTypes field: if you are not writing a contact (addressbook) + resource, you have to change this to either a known MIME type or one you + install together with the resource. + If your resource can provide data of more than one MIME type, you can + specific all possible ones as a comma separate list. + + Common MIME types are: + * text/directory: for contact data + * text/calendar: for calendar data (there are Akonadi defined subtypes + available, e.g. application/x-vnd.akonadi.calendar.event) + * message/rfc822: for e-mails and usenet news + +The template comes with an input file for KDE's KConfigXT framework +for improved configuration file handling. The generated class is called +"Settings", so access to its data is provided through its singleton +instance method Settings::self(). +See https://techbase.kde.org/Development/Tutorials/Using_KConfig_XT + + +Documentation +-=-=-=-=-=-=- + +The Akonadi-KDE API documentation can be found here: +https://api.kde.org/kdepim/akonadi/html/index.html + +General developer information, e.g. tutorials can be found here: +https://techbase.kde.org/KDE_PIM/Akonadi + +The contact site can be found here: +https://community.kde.org/KDE_PIM/Contact diff --git a/templates/akonadiresource/akonadiresource.kdevtemplate b/templates/akonadiresource/akonadiresource.kdevtemplate new file mode 100644 --- /dev/null +++ b/templates/akonadiresource/akonadiresource.kdevtemplate @@ -0,0 +1,6 @@ +[General] +Name=C++ +Comment=Akonadi Resource Template. A template for an Akonadi PIM data resource +Category=Akonadi/Resource +Icon=akonadiresource.png +ShowFilesAfterGeneration=src/akonadi_serializer_%{APPNAMELC}.cpp diff --git a/templates/akonadiresource/akonadiresource.png b/templates/akonadiresource/akonadiresource.png new file mode 100644 index 0000000000000000000000000000000000000000..8513893d7ec8eb0f0a98327d3d985a7dba16eef7 GIT binary patch literal 69059 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 ${CMAKE_CURRENT_BINARY_DIR}/${_name}.xml + DEPENDS + ${KF5Akonadi_DATA_DIR}/kcfg2dbus.xsl + ${_kcfg} + ) + endmacro() +endif() diff --git a/templates/akonadiresource/src/%{APPNAMELC}resource.h b/templates/akonadiresource/src/%{APPNAMELC}resource.h new file mode 100644 --- /dev/null +++ b/templates/akonadiresource/src/%{APPNAMELC}resource.h @@ -0,0 +1,48 @@ +/* + * Copyright (C) %{CURRENT_YEAR} by %{AUTHOR} <%{EMAIL}> + * + * This program 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. + * + * 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, see . + */ + +#ifndef %{APPNAMEUC}RESOURCE_H +#define %{APPNAMEUC}RESOURCE_H + +#include + +class %{APPNAME}Resource : public Akonadi::ResourceBase, + public Akonadi::AgentBase::Observer +{ + Q_OBJECT + +public: + explicit %{APPNAME}Resource(const QString &id); + ~%{APPNAME}Resource() override; + +public Q_SLOTS: + void configure(WId windowId) override; + +protected Q_SLOTS: + void retrieveCollections() override; + void retrieveItems(const Akonadi::Collection &col) override; + bool retrieveItem(const Akonadi::Item &item, const QSet &parts) override; + +protected: + void aboutToQuit() override; + + void itemAdded(const Akonadi::Item &item, const Akonadi::Collection &collection) override; + void itemChanged(const Akonadi::Item &item, const QSet &parts) override; + void itemRemoved(const Akonadi::Item &item) override; +}; + +#endif diff --git a/templates/akonadiresource/src/%{APPNAMELC}resource.cpp b/templates/akonadiresource/src/%{APPNAMELC}resource.cpp new file mode 100644 --- /dev/null +++ b/templates/akonadiresource/src/%{APPNAMELC}resource.cpp @@ -0,0 +1,116 @@ +/* + * Copyright (C) %{CURRENT_YEAR} by %{AUTHOR} <%{EMAIL}> + * + * This program 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. + * + * 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, see . + */ + +#include "%{APPNAMELC}resource.h" + +#include "settings.h" +#include "settingsadaptor.h" +#include "debug.h" + +#include + +using namespace Akonadi; + +%{APPNAME}Resource::%{APPNAME}Resource(const QString &id) + : ResourceBase(id) +{ + new SettingsAdaptor(Settings::self()); + QDBusConnection::sessionBus().registerObject(QStringLiteral("/Settings"), + Settings::self(), + QDBusConnection::ExportAdaptors); + + // TODO: you can put any resource specific initialization code here. + qCDebug(log_%{APPNAMELC}resource) << "Resource started"; +} + +%{APPNAME}Resource::~%{APPNAME}Resource() +{ +} + +void %{APPNAME}Resource::retrieveCollections() +{ + // TODO: this method is called when Akonadi wants to have all the + // collections your resource provides. + // Be sure to set the remote ID and the content MIME types +} + +void %{APPNAME}Resource::retrieveItems(const Akonadi::Collection &collection) +{ + // TODO: this method is called when Akonadi wants to know about all the + // items in the given collection. You can but don't have to provide all the + // data for each item, remote ID and MIME type are enough at this stage. + // Depending on how your resource accesses the data, there are several + // different ways to tell Akonadi when you are done. +} + +bool %{APPNAME}Resource::retrieveItem(const Akonadi::Item &item, const QSet &parts) +{ + // TODO: this method is called when Akonadi wants more data for a given item. + // You can only provide the parts that have been requested but you are allowed + // to provide all in one go + + return true; +} + +void %{APPNAME}Resource::aboutToQuit() +{ + // TODO: any cleanup you need to do while there is still an active + // event loop. The resource will terminate after this method returns +} + +void %{APPNAME}Resource::configure(WId windowId) +{ + // TODO: this method is usually called when a new resource is being + // added to the Akonadi setup. You can do any kind of user interaction here, + // e.g. showing dialogs. + // The given window ID is usually useful to get the correct + // "on top of parent" behavior if the running window manager applies any kind + // of focus stealing prevention technique + // + // If the configuration dialog has been accepted by the user by clicking Ok, + // the signal configurationDialogAccepted() has to be emitted, otherwise, if + // the user canceled the dialog, configurationDialogRejected() has to be emitted. +} + +void %{APPNAME}Resource::itemAdded(const Akonadi::Item &item, const Akonadi::Collection &collection) +{ + // TODO: this method is called when somebody else, e.g. a client application, + // has created an item in a collection managed by your resource. + + // NOTE: There is an equivalent method for collections, but it isn't part + // of this template code to keep it simple +} + +void %{APPNAME}Resource::itemChanged(const Akonadi::Item &item, const QSet &parts) +{ + // TODO: this method is called when somebody else, e.g. a client application, + // has changed an item managed by your resource. + + // NOTE: There is an equivalent method for collections, but it isn't part + // of this template code to keep it simple +} + +void %{APPNAME}Resource::itemRemoved(const Akonadi::Item &item) +{ + // TODO: this method is called when somebody else, e.g. a client application, + // has deleted an item managed by your resource. + + // NOTE: There is an equivalent method for collections, but it isn't part + // of this template code to keep it simple +} + +AKONADI_RESOURCE_MAIN(%{APPNAME}Resource) diff --git a/templates/akonadiresource/src/%{APPNAMELC}resource.desktop b/templates/akonadiresource/src/%{APPNAMELC}resource.desktop new file mode 100644 --- /dev/null +++ b/templates/akonadiresource/src/%{APPNAMELC}resource.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=%{APPNAME} Resource +Comment=An Akonadi resource plugin for %{APPNAME} +Type=AkonadiResource +Exec=akonadi_%{APPNAMELC}_resource +Icon=text-directory + +X-Akonadi-MimeTypes=text/directory +X-Akonadi-Capabilities=Resource +X-Akonadi-Identifier=akonadi_%{APPNAMELC}_resource diff --git a/templates/akonadiresource/src/CMakeLists.txt b/templates/akonadiresource/src/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/templates/akonadiresource/src/CMakeLists.txt @@ -0,0 +1,38 @@ +set(%{APPNAMELC}resource_SRCS + %{APPNAMELC}resource.cpp +) + +ecm_qt_declare_logging_category(%{APPNAMELC}resource_SRCS + HEADER debug.h + IDENTIFIER log_%{APPNAMELC}resource + CATEGORY_NAME log_%{APPNAMELC}resource +) + +kconfig_add_kcfg_files(%{APPNAMELC}resource_SRCS + ${CMAKE_CURRENT_SOURCE_DIR}/settings.kcfgc +) + +kcfg_generate_dbus_interface( + ${CMAKE_CURRENT_SOURCE_DIR}/settings.kcfg + org.kde.Akonadi.%{APPNAME}.Settings +) + +qt5_add_dbus_adaptor(%{APPNAMELC}resource_SRCS + ${CMAKE_CURRENT_BINARY_DIR}/org.kde.Akonadi.%{APPNAME}.Settings.xml + ${CMAKE_CURRENT_BINARY_DIR}/settings.h + Settings +) + +add_executable(akonadi_%{APPNAMELC}_resource ${%{APPNAMELC}resource_SRCS}) + +target_link_libraries(akonadi_%{APPNAMELC}_resource + Qt5::DBus + KF5::AkonadiAgentBase + KF5::ConfigCore +) + +install(TARGETS akonadi_%{APPNAMELC}_resource ${KDE_INSTALL_TARGETS_DEFAULT_ARGS}) + +install(FILES %{APPNAMELC}resource.desktop + DESTINATION ${KDE_INSTALL_DATAROOTDIR}/akonadi/agents +) diff --git a/templates/akonadiresource/src/settings.kcfg b/templates/akonadiresource/src/settings.kcfg new file mode 100644 --- /dev/null +++ b/templates/akonadiresource/src/settings.kcfg @@ -0,0 +1,14 @@ + + + + + + + false + + + diff --git a/templates/akonadiresource/src/settings.kcfgc b/templates/akonadiresource/src/settings.kcfgc new file mode 100644 --- /dev/null +++ b/templates/akonadiresource/src/settings.kcfgc @@ -0,0 +1,8 @@ +File=settings.kcfg +ClassName=Settings +Mutators=true +ItemAccessors=true +SetUserTexts=true +Singleton=true +#IncludeFiles= +GlobalEnums=true diff --git a/templates/akonadiserializer/CMakeLists.txt b/templates/akonadiserializer/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/templates/akonadiserializer/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.1) + +project(%{APPNAMELC}) + +set(ECM_MIN_VERSION "5.13.0") +find_package(ECM ${ECM_MIN_VERSION} CONFIG REQUIRED) + +set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_MODULE_PATH}) + +include(FeatureSummary) +include(KDEInstallDirs) +include(KDECMakeSettings) +include(KDEFrameworkCompilerSettings NO_POLICY_SCOPE) + +set(QT_MIN_VERSION "5.3.0") +find_package(Qt5 ${QT_MIN_VERSION} REQUIRED Core Network Gui) + +set(KF5_MIN_VERSION "5.13.0") +find_package(KF5Config ${KF5_MIN_VERSION} CONFIG REQUIRED) + +set(AKONADI_MIN_VERSION "5.0") +find_package(KF5Akonadi ${AKONADI_MIN_VERSION} CONFIG REQUIRED) + +add_subdirectory(src) + +feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES) diff --git a/templates/akonadiserializer/README b/templates/akonadiserializer/README new file mode 100644 --- /dev/null +++ b/templates/akonadiserializer/README @@ -0,0 +1,66 @@ +How To Build This Template +-=-=-=-=-=-=-=-=-=-=-=-=-= + +--- On Linux & similar: + +cd +mkdir build +cd build +cmake .. -DCMAKE_INSTALL_PREFIX=$MY_PREFIX -DCMAKE_BUILD_TYPE=Debug +make +make install or su -c 'make install' + +(MY_PREFIX is where you install your Akonadi setup, replace it accordingly) + +to uninstall the project: +make uninstall or su -c 'make uninstall' + +Note: you can use another build path. Then cd in your build dir and: +export MY_SRC=path_to_your_src +cmake $MY_SRC -DCMAKE_INSTALL_PREFIX=$MY_PREFIX -DCMAKE_BUILD_TYPE=Debug + +--- On Windows: + +cd +mkdir build +cd build +cmake .. -DCMAKE_INSTALL_PREFIX=%MY_PREFIX% -DCMAKE_BUILD_TYPE=Debug +[n]make +[n]make install + +(MY_PREFIX is where you install your Akonadi setup, replace it accordingly) + +to uninstall the project: +[n]make uninstall + +Note: use nmake if you're building with the Visual Studio compiler, or make +if you're using the minGW compiler + + +Implementation hints +-=-=-=-=-=-=-=-=-=-= + +The code generated by the template can be compiled without any further +changes, so you can start with your own code right away. + +However, there are a couple of things you will need to change outside the +serialzer's code, i.e. in the serializer's .desktop file: + +- Name field + +- Comment field + +- Type field: MIME type of your data type + + +Documentation +-=-=-=-=-=-=- + +The Akonadi-KDE API documentation can be found here: +https://api.kde.org/kdepim/akonadi/html/index.html + +General developer information, e.g. tutorials can be found here: +https://techbase.kde.org/KDE_PIM/Akonadi + +The contact site can be found here: +https://community.kde.org/KDE_PIM/Contact diff --git a/templates/akonadiserializer/akonadiserializer.kdevtemplate b/templates/akonadiserializer/akonadiserializer.kdevtemplate new file mode 100644 --- /dev/null +++ b/templates/akonadiserializer/akonadiserializer.kdevtemplate @@ -0,0 +1,6 @@ +[General] +Name=C++ +Comment=Akonadi Serializer Template. A template for an Akonadi data serializer plugin +Category=Akonadi/Serializer +Icon=akonadiserializer.png +ShowFilesAfterGeneration=src/%{APPNAMELC}resource.cpp diff --git a/templates/akonadiserializer/akonadiserializer.png b/templates/akonadiserializer/akonadiserializer.png new file mode 100644 index 0000000000000000000000000000000000000000..bad28b7b9826fa3b2c2dfe60ff5099e99803944a GIT binary patch literal 14537 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 literal 0 Hc$@ + * + * This program 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. + * + * 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, see . + */ + +#ifndef AKONADI_SERIALIZER_%{APPNAMEUC}_H +#define AKONADI_SERIALIZER_%{APPNAMEUC}_H + +#include + +#include + +namespace Akonadi +{ + +class SerializerPlugin%{APPNAME} : public QObject + , public ItemSerializerPlugin +{ + Q_OBJECT + Q_INTERFACES(Akonadi::ItemSerializerPlugin) + Q_PLUGIN_METADATA(IID "org.kde.akonadi.SerializerPlugin%{APPNAME}") + +public: + bool deserialize(Item &item, const QByteArray &label, QIODevice &data, int version) override; + void serialize(const Item &item, const QByteArray &label, QIODevice &data, int &version) override; + + QSet parts(const Item &item) const; +}; + +} + +#endif diff --git a/templates/akonadiserializer/src/akonadi_serializer_%{APPNAMELC}.cpp b/templates/akonadiserializer/src/akonadi_serializer_%{APPNAMELC}.cpp new file mode 100644 --- /dev/null +++ b/templates/akonadiserializer/src/akonadi_serializer_%{APPNAMELC}.cpp @@ -0,0 +1,51 @@ +/* + * Copyright (C) %{CURRENT_YEAR} by %{AUTHOR} <%{EMAIL}> + * + * This program 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. + * + * 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, see . + */ + +#include "akonadi_serializer_%{APPNAMELC}.h" + +#include + +using namespace Akonadi; + +bool SerializerPlugin%{APPNAME}::deserialize(Item &item, const QByteArray &label, QIODevice &data, int version) +{ + Q_UNUSED(item); + Q_UNUSED(label); + Q_UNUSED(data); + Q_UNUSED(version); + + // TODO Implement this + + return false; +} + +void SerializerPlugin%{APPNAME}::serialize(const Item &item, const QByteArray &label, QIODevice &data, int &version) +{ + Q_UNUSED(item); + Q_UNUSED(label); + Q_UNUSED(data); + Q_UNUSED(version); + + // TODO Implement this +} + +QSet SerializerPlugin%{APPNAME}::parts(const Item &item) const +{ + // only need to reimplement this when implementing partial serialization + // i.e. when using the "label" parameter of the other two methods + return ItemSerializerPlugin::parts(item); +} diff --git a/templates/akonadiserializer/src/akonadi_serializer_%{APPNAMELC}.desktop b/templates/akonadiserializer/src/akonadi_serializer_%{APPNAMELC}.desktop new file mode 100644 --- /dev/null +++ b/templates/akonadiserializer/src/akonadi_serializer_%{APPNAMELC}.desktop @@ -0,0 +1,7 @@ +[Misc] +Name=%{APPNAME} Serializer +Comment=An Akonadi serializer plugin for %{APPNAMELC} + +[Plugin] +Type=application/x-vnd.kde.%{APPNAMELC} +X-KDE-Library=akonadi_serializer_%{APPNAMELC}