summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarko Minkkinen <marko.minkkinen@digia.com>2011-03-16 15:36:41 +0200
committerMarko Minkkinen <marko.minkkinen@digia.com>2011-03-16 15:36:41 +0200
commitf02ff3e6af0e73ac4d0f86753d7e003f921ec0e4 (patch)
treed9324d861674fda6dd2ac306affb190708ad879c
parent73900e56b193897388d5f8bd18e3e8f9bba80496 (diff)
Configurable possibility to run messageserver in thread (from dll) on Symbian
-rw-r--r--examples/qtmail/app/app.pro7
-rw-r--r--examples/qtmail/app/emailclient.cpp58
-rw-r--r--examples/qtmail/app/emailclient.h23
-rw-r--r--messagingframework.pro2
-rw-r--r--src/tools/messageserver/messageserver.h4
-rw-r--r--src/tools/messageserver/messageserver.pro21
-rw-r--r--symbianoptions.pri1
7 files changed, 114 insertions, 2 deletions
diff --git a/examples/qtmail/app/app.pro b/examples/qtmail/app/app.pro
index f07859a2..9ee0282a 100644
--- a/examples/qtmail/app/app.pro
+++ b/examples/qtmail/app/app.pro
@@ -48,7 +48,14 @@ FORMS += searchviewbasephone.ui
RESOURCES += qtmail.qrc
symbian {
+ include(../../../symbianoptions.pri)
+
TARGET.CAPABILITY += ALL -TCB
+ SERVER_AS_DLL: {
+ DEFINES += SERVER_AS_DLL
+ INCLUDEPATH += ../../../src/tools/messageserver
+ LIBS += -lmessageserver
+ }
}
include(../../../common.pri)
diff --git a/examples/qtmail/app/emailclient.cpp b/examples/qtmail/app/emailclient.cpp
index 30de3532..7e172e5d 100644
--- a/examples/qtmail/app/emailclient.cpp
+++ b/examples/qtmail/app/emailclient.cpp
@@ -82,6 +82,9 @@
#include "statusmonitor.h"
#include <qtmailnamespace.h>
#include <qmaildisconnected.h>
+#if defined(SERVER_AS_DLL)
+#include "messageserver.h"
+#endif
static const unsigned int StatusBarHeight = 20;
#ifdef LOAD_DEBUG_VERSION
@@ -478,7 +481,11 @@ EmailClient::EmailClient(QWidget *parent, Qt::WindowFlags f)
autoGetMail(false),
initialAction(None),
preSearchWidgetId(-1),
+#if defined(SERVER_AS_DLL)
+ m_messageServerThread(0),
+#else
m_messageServerProcess(0),
+#endif
m_contextMenu(0),
m_transmitAction(0),
m_retrievalAction(0),
@@ -567,6 +574,14 @@ void EmailClient::resumeInterruptedComposition()
bool EmailClient::startMessageServer()
{
+#if defined(SERVER_AS_DLL)
+ m_messageServerThread = new MessageServerThread();
+ m_messageServerThread->start();
+ QEventLoop loop;
+ QObject::connect(m_messageServerThread, SIGNAL(messageServerStarted()), &loop, SLOT(quit()));
+ loop.exec();
+ return true;
+#else
qMailLog(Messaging) << "Starting messageserver child process...";
if(m_messageServerProcess) delete m_messageServerProcess;
m_messageServerProcess = new QProcess(this);
@@ -583,10 +598,17 @@ bool EmailClient::startMessageServer()
m_messageServerProcess->start(QMail::messageServerPath() + binary);
return m_messageServerProcess->waitForStarted();
+#endif
}
bool EmailClient::waitForMessageServer()
{
+#if defined(SERVER_AS_DLL)
+ if (m_messageServerThread) {
+ delete m_messageServerThread;
+ m_messageServerThread = 0;
+ }
+#else
if(m_messageServerProcess)
{
qMailLog(Messaging) << "Shutting down messageserver child process..";
@@ -594,6 +616,7 @@ bool EmailClient::waitForMessageServer()
delete m_messageServerProcess; m_messageServerProcess = 0;
return result;
}
+#endif
return true;
}
@@ -2329,6 +2352,12 @@ void EmailClient::quit()
}
}
+#if defined(SERVER_AS_DLL)
+ if (m_messageServerThread) {
+ m_messageServerThread->quit();
+ QTimer::singleShot(0,qApp,SLOT(quit()));
+ }
+#else
if(m_messageServerProcess)
{
//we started the messageserver, direct it to shut down
@@ -2337,6 +2366,7 @@ void EmailClient::quit()
server.shutdown();
QTimer::singleShot(0,qApp,SLOT(quit()));
}
+#endif
else QApplication::quit();
}
@@ -2950,5 +2980,33 @@ void NotificationTray::messagesAdded(const QMailMessageIdList &ids)
}
#endif // QT_NO_SYSTEMTRAYICON
+#if defined(SERVER_AS_DLL)
+MessageServerThread::MessageServerThread()
+{
+}
+
+MessageServerThread::~MessageServerThread()
+{
+ // Tell the thread's event loop to exit
+ // => thread returns from the call to exec()
+ exit();
+
+ // Wait until this thread has finished execution
+ // <=> waits until thread returns from run()
+ wait();
+}
+
+void MessageServerThread::run()
+{
+ // Start messageserver
+ MessageServer server;
+
+ emit messageServerStarted();
+
+ // Enter the thread event loop
+ (void) exec();
+}
+#endif
+
#include <emailclient.moc>
diff --git a/examples/qtmail/app/emailclient.h b/examples/qtmail/app/emailclient.h
index cbe36af1..7824f149 100644
--- a/examples/qtmail/app/emailclient.h
+++ b/examples/qtmail/app/emailclient.h
@@ -52,6 +52,9 @@
#include <QSystemTrayIcon>
#include <QTime>
#include <QTimer>
+#if defined(SERVER_AS_DLL)
+#include <QThread>
+#endif
#include <QProcess>
class EmailFolderModel;
@@ -438,7 +441,11 @@ private:
QMailMessageId lastDraftId;
+#if defined(SERVER_AS_DLL)
+ QThread* m_messageServerThread;
+#else
QProcess* m_messageServerProcess;
+#endif
QSet<QMailMessageId> flagMessageIds;
QMenu* m_contextMenu;
QToolBar* m_toolBar;
@@ -451,6 +458,22 @@ private:
QMailAccountIdList m_queuedExports;
};
+#if defined(SERVER_AS_DLL)
+class MessageServerThread : public QThread
+{
+ Q_OBJECT
+
+public:
+ MessageServerThread();
+ ~MessageServerThread();
+
+ void run();
+
+signals:
+ void messageServerStarted();
+};
+#endif
+
#ifndef QT_NO_SYSTEMTRAYICON
class NotificationTray : public QSystemTrayIcon {
Q_OBJECT
diff --git a/messagingframework.pro b/messagingframework.pro
index a198392e..c88fd7e4 100644
--- a/messagingframework.pro
+++ b/messagingframework.pro
@@ -19,7 +19,9 @@ SUBDIRS = src/libraries/qmfclient \
# disable benchmark test on mac until ported
!macx {
+ !SERVER_AS_DLL {
SUBDIRS += benchmarks
+ }
}
symbian {
diff --git a/src/tools/messageserver/messageserver.h b/src/tools/messageserver/messageserver.h
index 74584d51..2dd71b0c 100644
--- a/src/tools/messageserver/messageserver.h
+++ b/src/tools/messageserver/messageserver.h
@@ -55,7 +55,11 @@ class QMailMessageMetaData;
class QNetworkState;
class NewCountNotifier;
+#if defined(SERVER_AS_DLL)
+class QMFUTIL_EXPORT MessageServer : public QObject
+#else
class MessageServer : public QObject
+#endif
{
Q_OBJECT
diff --git a/src/tools/messageserver/messageserver.pro b/src/tools/messageserver/messageserver.pro
index 28360e97..f24d0ba6 100644
--- a/src/tools/messageserver/messageserver.pro
+++ b/src/tools/messageserver/messageserver.pro
@@ -1,4 +1,14 @@
-TEMPLATE = app
+symbian: {
+ include(../../../symbianoptions.pri)
+}
+
+SERVER_AS_DLL: {
+ DEFINES += SERVER_AS_DLL
+ DEFINES += QMFUTIL_INTERNAL
+ TEMPLATE = lib
+} else {
+ TEMPLATE = app
+}
TARGET = messageserver
CONFIG += qmfmessageserver qmfclient
QT = core
@@ -24,11 +34,13 @@ HEADERS += mailmessageclient.h \
newcountnotifier.h
SOURCES += mailmessageclient.cpp \
- main.cpp \
messageserver.cpp \
prepareaccounts.cpp \
newcountnotifier.cpp \
servicehandler.cpp
+!SERVER_AS_DLL: {
+ SOURCES += main.cpp
+}
TRANSLATIONS += messageserver-ar.ts \
messageserver-de.ts \
@@ -48,6 +60,11 @@ symbian: {
TARGET.CAPABILITY = ALL -TCB
TARGET.UID3 = 0x20034928
TARGET.EPOCHEAPSIZE = 0x20000 0x1000000
+
+ SERVER_AS_DLL: {
+ TARGET.EPOCALLOWDLLDATA = 1
+ MMP_RULES += EXPORTUNFROZEN
+ }
}
include(../../../common.pri)
diff --git a/symbianoptions.pri b/symbianoptions.pri
index 66d28931..4d125b5c 100644
--- a/symbianoptions.pri
+++ b/symbianoptions.pri
@@ -1,6 +1,7 @@
CONFIG += SYMBIAN_USE_IPC_SOCKET
CONFIG += SYMBIAN_USE_DATA_CAGED_DATABASE
CONFIG += SYMBIAN_USE_DATA_CAGED_FILES
+#CONFIG += SERVER_AS_DLL
contains(CONFIG, SYMBIAN_USE_IPC_SOCKET) \
|| contains(CONFIG, SYMBIAN_USE_DATA_CAGED_DATABASE) \