--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/qtmobility/src/messaging/modestengine_maemo.cpp Fri Apr 16 15:51:22 2010 +0300
@@ -0,0 +1,293 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "modestengine_maemo_p.h"
+#include "maemohelpers_p.h"
+#include "qmessageaccount.h"
+#include "qmessageaccount_p.h"
+#include "qmessageaccountfilter.h"
+#include "qmessageaccountfilter_p.h"
+#include "qmessageservice.h"
+#include <libmodest-dbus-client/libmodest-dbus-client.h>
+#include <libmodest-dbus-client/libmodest-dbus-api.h>
+#include <QUrl>
+#include <QtDBus/QtDBus>
+#include <dbus/dbus.h>
+
+#include <QDebug>
+
+QTM_BEGIN_NAMESPACE
+
+/* configuration key definitions for modest */
+#define MODESTENGINE_ACCOUNT_NAMESPACE "/apps/modest/accounts"
+#define MODESTENGINE_SERVER_ACCOUNT_NAMESPACE "/apps/modest/server_accounts"
+#define MODESTENGINE_DEFAULT_ACCOUNT "/apps/modest/default_account"
+#define MODESTENGINE_ACCOUNT_ENABLED "enabled"
+#define MODESTENGINE_ACCOUNT_DISPLAY_NAME "display_name"
+#define MODESTENGINE_ACCOUNT_FULLNAME "fullname"
+#define MODESTENGINE_ACCOUNT_EMAIL "email"
+#define MODESTENGINE_ACCOUNT_STORE_ACCOUNT "store_account"
+#define MODESTENGINE_ACCOUNT_TRANSPORT_ACCOUNT "transport_account"
+
+Q_GLOBAL_STATIC(ModestEngine,modestEngine);
+
+ModestEngine::ModestEngine()
+{
+ g_type_init();
+ m_gconfclient = gconf_client_get_default();
+ if (!m_gconfclient) {
+ qWarning("qtmessaging: could not get gconf client");
+ } else {
+ updateEmailAccounts();
+ }
+}
+
+ModestEngine::~ModestEngine()
+{
+ g_object_unref(m_gconfclient);
+ m_gconfclient=NULL;
+}
+
+ModestEngine* ModestEngine::instance()
+{
+ return modestEngine();
+}
+
+void ModestEngine::updateEmailAccounts() const
+{
+ iDefaultEmailAccountId = QMessageAccountId();
+ iAccounts.clear();
+
+ GSList *accounts;
+ GError *error = NULL;
+
+ accounts = gconf_client_all_dirs(m_gconfclient, MODESTENGINE_ACCOUNT_NAMESPACE, &error);
+ if (error) {
+#ifdef MESSAGING_DEBUG
+ qDebug("qtmessaging: failed to list '%s': '%s'", MODESTENGINE_ACCOUNT_NAMESPACE, error->message);
+#endif
+ g_error_free(error);
+ } else {
+ gchar *default_account = gconf_client_get_string(m_gconfclient, MODESTENGINE_DEFAULT_ACCOUNT, &error);
+ if (error) {
+ qWarning("qtmessaging: failed to get '%s': %s", MODESTENGINE_DEFAULT_ACCOUNT, error->message);
+ g_error_free(error);
+ }
+
+ GSList *iter = accounts;
+ while (iter) {
+ if (!(iter->data)) {
+ iter = iter->next;
+ continue;
+ }
+
+ const gchar* account_name_key = (const gchar*)iter->data;
+
+ gboolean account_ok = FALSE;
+ // Check if account is enabled
+ if (account_name_key) {
+ gchar* key = g_strconcat(account_name_key, "/", MODESTENGINE_ACCOUNT_ENABLED, NULL);
+ account_ok = gconf_client_get_bool(m_gconfclient, key, NULL);
+ g_free(key);
+ }
+ // Check if account store is defined
+ if (account_ok) {
+ gchar* key = g_strconcat(account_name_key, "/", MODESTENGINE_ACCOUNT_STORE_ACCOUNT, NULL);
+ gchar* server_account_name = gconf_client_get_string(m_gconfclient, key, NULL);
+ if (server_account_name) {
+ gchar* key = g_strconcat(MODESTENGINE_SERVER_ACCOUNT_NAMESPACE, "/", server_account_name, NULL);
+ if (!gconf_client_dir_exists(m_gconfclient, key, NULL)) {
+ account_ok = FALSE;
+ }
+ g_free(server_account_name);
+ }
+ g_free(key);
+ }
+ // Check if account transport is defined
+ if (account_ok) {
+ gchar* key = g_strconcat(account_name_key, "/", MODESTENGINE_ACCOUNT_TRANSPORT_ACCOUNT, NULL);
+ gchar* server_account_name = gconf_client_get_string(m_gconfclient, key, NULL);
+ if (server_account_name) {
+ gchar* key = g_strconcat(MODESTENGINE_SERVER_ACCOUNT_NAMESPACE, "/", server_account_name, NULL);
+ if (!gconf_client_dir_exists(m_gconfclient, key, NULL)) {
+ account_ok = FALSE;
+ }
+ g_free(server_account_name);
+ }
+ g_free(key);
+ }
+
+ if (account_ok) {
+ QString accountId = QString::fromUtf8(account_name_key);
+ gchar* name_key = g_strconcat(account_name_key, "/", MODESTENGINE_ACCOUNT_DISPLAY_NAME, NULL);
+ QString accountName = QString::fromUtf8(gconf_client_get_string(m_gconfclient, name_key, NULL));
+ g_free(name_key);
+ gchar* email_key = g_strconcat(account_name_key, "/", MODESTENGINE_ACCOUNT_EMAIL, NULL);
+ QString accountAddress = QString::fromUtf8(gconf_client_get_string(m_gconfclient, email_key, NULL));
+ g_free(email_key);
+ QMessageAccount account = QMessageAccountPrivate::from(QMessageAccountId(accountId),
+ accountName,
+ QMessageAddress(QMessageAddress::Email, accountAddress),
+ QMessage::Email);
+ iAccounts.insert(accountId, account);
+
+ if (strncmp(account_name_key, default_account, strlen(default_account))) {
+ iDefaultEmailAccountId = accountId;
+ }
+ }
+
+ g_free(iter->data);
+ iter->data = NULL;
+ iter = g_slist_next(iter);
+ }
+ // strings were freed in while loop
+ // => it's enough to just free accounts list
+ g_slist_free(accounts);
+ g_free(default_account);
+ }
+}
+
+QMessageAccountIdList ModestEngine::queryAccounts(const QMessageAccountFilter &filter, const QMessageAccountSortOrder &sortOrder,
+ uint limit, uint offset, bool &isFiltered, bool &isSorted) const
+{
+ QMessageAccountIdList accountIds;
+
+ updateEmailAccounts();
+ foreach (QMessageAccount value, iAccounts) {
+ accountIds.append(value.id());
+ }
+
+ MessagingHelper::filterAccounts(accountIds, filter);
+ isFiltered = true;
+
+ isSorted = false;
+
+ return accountIds;
+}
+
+int ModestEngine::countAccounts(const QMessageAccountFilter &filter) const
+{
+ bool isFiltered, isSorted;
+ return queryAccounts(filter, QMessageAccountSortOrder(), 0, 0, isFiltered, isSorted).count();
+}
+
+QMessageAccount ModestEngine::account(const QMessageAccountId &id) const
+{
+ updateEmailAccounts();
+ return iAccounts[id.toString()];
+}
+
+QMessageAccountId ModestEngine::defaultAccount(QMessage::Type type) const
+{
+ updateEmailAccounts();
+ return iDefaultEmailAccountId;
+}
+
+bool ModestEngine::sendEmail(QMessage &message)
+{
+ return composeEmail(message);
+}
+
+bool ModestEngine::composeEmail(const QMessage &message)
+{
+ QString mailString("mailto:");
+ QList<QMessageAddress> list(message.to());
+ if (!list.empty()){
+ for (int i = 0; i < list.size(); ++i) {
+ if (i == 0) {
+ mailString += list.at(i).recipient();
+ } else {
+ mailString += QString("%2C%20");
+ mailString += list.at(i).recipient();
+ }
+ }
+ }
+
+ bool firstParameter = true;
+
+ QString subject = message.subject();
+ if (!subject.isEmpty()) {
+ if (firstParameter) {
+ mailString += QString("?");
+ firstParameter = false;
+ } else {
+ mailString += QString("&");
+ }
+ mailString += QString("subject=");
+ mailString += subject;
+ }
+
+ QString body = message.textContent();
+ if (!body.isEmpty()) {
+ if (firstParameter) {
+ mailString += QString("?");
+ firstParameter = false;
+ } else {
+ mailString += QString("&");
+ }
+ mailString += QString("body=");
+ mailString += QString(body);
+ }
+
+ QUrl url(mailString);
+
+ QDBusInterface dbusif(MODEST_DBUS_SERVICE, MODEST_DBUS_OBJECT, MODEST_DBUS_IFACE);
+ QDBusMessage msg = dbusif.call(MODEST_DBUS_METHOD_MAIL_TO, url.toString());
+
+ return true;
+}
+
+bool ModestEngine::queryMessages(QMessageService& messageService, const QMessageFilter &filter, const QMessageSortOrder &sortOrder, uint limit, uint offset) const
+{
+ return true;
+}
+
+bool ModestEngine::queryMessages(QMessageService& messageService, const QMessageFilter &filter, const QString &body, QMessageDataComparator::MatchFlags matchFlags, const QMessageSortOrder &sortOrder, uint limit, uint offset) const
+{
+ return true;
+}
+
+bool ModestEngine::countMessages(QMessageService& messageService, const QMessageFilter &filter)
+{
+ return true;
+}
+
+
+QTM_END_NAMESPACE