1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia. For licensing terms and
** conditions see http://qt.digia.com/licensing. For further information
** use the contact form at http://qt.digia.com/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: http://www.gnu.org/copyleft/fdl.html.
** $QT_END_LICENSE$
**
****************************************************************************/
/*!
\example keepintouch
\title 'Keep in Touch' Example
This example demonstrates using the QtMobility Messaging API to
extract useful information from the messages stored by the system.
\image keepintouch-example.png
The 'Keep in Touch' application locates people you have sent messages
to in the past, but with whom you have not communicated recently. It
defines a user-selected date range in the past, beginning a certain
amount of time ago and finishing more recently. Any address that you
sent a message to in this period is located. Any address that you
sent a message to more recently than this period will not be displayed.
So, now might be a good time to say hello to the people whose addresses
are reported!
We find addresses when the user clicks the Search button. First of all
we find the dates that define the period that the user has selected.
\snippet ../../examples/keepintouch/addressfinder.cpp create-date-range
We create filter objects that will constrain our message search to
the date range that the user has selected:
\snippet ../../examples/keepintouch/addressfinder.cpp create-simple-filters
Now we combine our filters to precisely specify the messages that we
would like to inspect to perform our address search:
\snippet ../../examples/keepintouch/addressfinder.cpp create-composite-filters
Now that we know what messages to search for, we use an instance of
QMessageService to perform our first search:
\snippet ../../examples/keepintouch/addressfinder.cpp begin-search
We could have queried the QMessageManager instance directly using the
\l{QMessageManager::queryMessages()}{queryMessages} function, but that
would keep our UI thread busy, and we wouldn't be able to keep our UI
functioning at the same time. Using the QMessageService interface
allows us to process the search asynchronously.
We receive the notification of matching messages by responding to the
QMessageService::messagesFound() signal:
\snippet ../../examples/keepintouch/addressfinder.cpp accumulate-matches
When the search is completed, the QMessageService::stateChanged()
signal is emitted. If the user specified an exclusion period then we have
to perform two searches, so when the first finishes our handler initiates
the second; when the second finishes, we begin processing the results:
\snippet ../../examples/keepintouch/addressfinder.cpp handle-search-result
The \c continueSearch function processes the results of our searches, one
message at a time. Each address we sent a message to in the excluded
time period is added to our exclusion list. For each address we sent a
message to in our included time period, and which is not in the exclusion
list, we create a set of the messages that we sent to that address.
\snippet ../../examples/keepintouch/addressfinder.cpp continue-search
We will display the resulting list of contacts in our Contacts pane. If the
system contains a contact definition that matches the address information
we extracted, we will display the label for that contact - this matching
process can be accomplished using the QtMobility Contacts API. If we can't
find a matching contact, we fall back to using the raw address information
for display:
\snippet ../../examples/keepintouch/addressfinder.cpp contact-lookup
If the user selects one of these contact addresses, we fill the Messages
combo box with the list of messages that were previously sent to that contact:
\snippet ../../examples/keepintouch/addressfinder.cpp address-selected
When the user has selected a message, two further actions become possible.
We can use the QMessageService facility to either view the message
or to compose a new message to the recipient of the earlier message. To
view the message we only need to invoke the
\l {QMessageService::show()}{show} function for the relevant QMessageId:
\snippet ../../examples/keepintouch/addressfinder.cpp show-message
To compose a response, we will create a new message that forwards the
existing message content to the same recipient, and requests that the
system display a message composer prepared with the message content we
have prepared:
\snippet ../../examples/keepintouch/addressfinder.cpp compose-message
*/
|