diff options
author | Marko Minkkinen <marko.minkkinen@digia.com> | 2011-03-16 15:36:41 +0200 |
---|---|---|
committer | Marko Minkkinen <marko.minkkinen@digia.com> | 2011-03-16 15:36:41 +0200 |
commit | f02ff3e6af0e73ac4d0f86753d7e003f921ec0e4 (patch) | |
tree | d9324d861674fda6dd2ac306affb190708ad879c | |
parent | 73900e56b193897388d5f8bd18e3e8f9bba80496 (diff) |
Configurable possibility to run messageserver in thread (from dll) on Symbian
-rw-r--r-- | examples/qtmail/app/app.pro | 7 | ||||
-rw-r--r-- | examples/qtmail/app/emailclient.cpp | 58 | ||||
-rw-r--r-- | examples/qtmail/app/emailclient.h | 23 | ||||
-rw-r--r-- | messagingframework.pro | 2 | ||||
-rw-r--r-- | src/tools/messageserver/messageserver.h | 4 | ||||
-rw-r--r-- | src/tools/messageserver/messageserver.pro | 21 | ||||
-rw-r--r-- | symbianoptions.pri | 1 |
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) \ |