23 #include "conversationsengineutility.h" |
23 #include "conversationsengineutility.h" |
24 #include "unidatamodelloader.h" |
24 #include "unidatamodelloader.h" |
25 #include "unidatamodelplugininterface.h" |
25 #include "unidatamodelplugininterface.h" |
26 #include <ccsconversationentry.h> |
26 #include <ccsconversationentry.h> |
27 #include <QFile> |
27 #include <QFile> |
|
28 #include <QFileInfo> |
28 |
29 |
29 // LOCAL CONSTANTS |
30 // LOCAL CONSTANTS |
30 const QString MMSStr("mms"); |
|
31 |
31 |
32 //--------------------------------------------------------------- |
32 //--------------------------------------------------------------- |
33 // ConversationsModel::ConversationsModel |
33 // ConversationsModel::ConversationsModel |
34 // Constructor |
34 // Constructor |
35 //--------------------------------------------------------------- |
35 //--------------------------------------------------------------- |
36 ConversationsModel::ConversationsModel( |
36 ConversationsModel::ConversationsModel(ConversationMsgStoreHandler* msgStoreHandler, |
37 ConversationMsgStoreHandler* msgStoreHandler, |
37 QObject* parent) : |
38 QObject* parent): QStandardItemModel(parent), |
38 QStandardItemModel(parent), mMsgStoreHandler(msgStoreHandler) |
39 mMsgStoreHandler(msgStoreHandler) |
39 { |
40 { |
40 iDataModelPluginLoader = new UniDataModelLoader; |
41 iDataModelPluginLoader = new UniDataModelLoader; |
41 iMmsDataPlugin = iDataModelPluginLoader->getDataModelPlugin(ConvergedMessage::Mms); |
42 iDataModelPluginLoader->loadPlugins(); |
42 iBioMsgPlugin = iDataModelPluginLoader->getDataModelPlugin(ConvergedMessage::BioMsg); |
43 iMmsDataPlugin = iDataModelPluginLoader->getDataModelPlugin(MMSStr); |
43 } |
44 } |
|
45 |
|
46 |
44 |
47 //--------------------------------------------------------------- |
45 //--------------------------------------------------------------- |
48 // ConversationsModel::~ConversationsModel |
46 // ConversationsModel::~ConversationsModel |
49 // Destructor |
47 // Destructor |
50 //--------------------------------------------------------------- |
48 //--------------------------------------------------------------- |
51 ConversationsModel::~ConversationsModel() |
49 ConversationsModel::~ConversationsModel() |
52 { |
50 { |
53 if(iDataModelPluginLoader) |
51 if (iDataModelPluginLoader) { |
54 { |
|
55 delete iDataModelPluginLoader; |
52 delete iDataModelPluginLoader; |
56 iDataModelPluginLoader = NULL; |
53 iDataModelPluginLoader = NULL; |
57 } |
54 } |
58 } |
55 } |
59 |
56 |
60 //--------------------------------------------------------------- |
57 //--------------------------------------------------------------- |
61 // ConversationsModel::data |
58 // ConversationsModel::data |
62 // @see header |
59 // @see header |
63 //--------------------------------------------------------------- |
60 //--------------------------------------------------------------- |
64 QVariant ConversationsModel::data(const QModelIndex & index , int role ) const |
61 QVariant ConversationsModel::data(const QModelIndex & index, int role) const |
65 { |
62 { |
66 QVariant value; |
63 QVariant value; |
67 QStandardItem* item = itemFromIndex(index); |
64 QStandardItem* item = itemFromIndex(index); |
68 switch(role) |
65 switch (role) { |
69 { |
66 case ConversationId: |
70 case ConversationId: |
67 { |
71 { |
68 value = item->data(ConversationId); |
72 value = item->data(ConversationId); |
69 break; |
73 break; |
70 } |
74 } |
71 case UnReadStatus: |
75 case UnReadStatus: |
72 { |
76 { |
73 value = item->data(UnReadStatus); |
77 value = item->data(UnReadStatus); |
74 break; |
78 break; |
75 } |
79 } |
76 case ContactId: |
80 case ContactId: |
77 { |
81 { |
78 value = item->data(ContactId); |
82 value = item->data(ContactId); |
79 break; |
83 break; |
80 } |
84 } |
81 case TimeStamp: |
85 case TimeStamp: |
82 { |
86 { |
83 value = item->data(TimeStamp); |
87 value = item->data(TimeStamp); |
84 break; |
88 break; |
85 } |
89 } |
86 case ConvergedMsgId: |
90 case ConvergedMsgId: |
87 { |
91 { |
88 value = item->data(ConvergedMsgId); |
92 value = item->data(ConvergedMsgId); |
89 break; |
93 break; |
90 } |
94 } |
91 case MessageProperty: |
95 case MessageProperty: |
92 { |
96 { |
93 value = item->data(MessageProperty); |
97 value = item->data(MessageProperty); |
94 break; |
98 break; |
95 } |
99 } |
96 case MessageType: |
100 case MessageType: |
97 { |
101 { |
98 value = item->data(MessageType); |
102 value = item->data(MessageType); |
99 break; |
103 break; |
100 } |
104 } |
101 case MessageSubType: |
105 case Subject: |
102 { |
106 { |
103 value = item->data(MessageSubType); |
107 value = item->data(Subject); |
104 break; |
108 break; |
105 } |
109 } |
106 case Subject: |
110 case BodyText: |
107 { |
111 { |
108 value = item->data(Subject); |
112 value = item->data(BodyText); |
109 break; |
113 break; |
110 } |
114 } |
111 case BodyText: |
115 case ConversationAddress: |
112 { |
116 { |
113 value = item->data(BodyText); |
117 value = item->data(ConversationAddress); |
114 break; |
118 break; |
115 } |
119 } |
116 case ConversationAddress: |
120 case Direction: |
117 { |
121 { |
118 value = item->data(ConversationAddress); |
122 value = item->data(Direction); |
119 break; |
123 break; |
120 } |
124 } |
121 case Direction: |
125 case SendingState: |
122 { |
126 { |
123 value = item->data(Direction); |
127 value = item->data(SendingState); |
124 break; |
128 break; |
125 } |
129 } |
126 case SendingState: |
130 case MessagePriority: |
127 { |
131 { |
128 value = item->data(SendingState); |
132 value = item->data(MessagePriority); |
129 break; |
133 break; |
130 } |
134 } |
131 case MessagePriority: |
135 case Attachments: |
132 { |
136 { |
133 value = item->data(MessagePriority); |
137 value = item->data(Attachments); |
134 break; |
138 break; |
135 } |
139 } |
136 case Attachments: |
140 case MessageLocation: |
137 { |
141 { |
138 value = item->data(Attachments); |
142 value = item->data(MessageLocation); |
139 break; |
143 break; |
140 } |
144 } |
141 case MessageLocation: |
145 case MessageStore: |
142 { |
146 { |
143 value = item->data(MessageLocation); |
147 value = item->data(MessageStore); |
144 break; |
148 break; |
145 } |
149 } |
146 case MessageStore: |
150 case ConversationAlias: |
147 { |
151 { |
148 value = item->data(MessageStore); |
152 value = item->data(ConversationAlias); |
149 break; |
153 break; |
150 } |
154 } |
151 case ConversationAlias: |
155 case UnreadCount: |
152 { |
156 { |
153 value = item->data(ConversationAlias); |
157 |
154 break; |
158 value = item->data(UnreadCount); |
155 } |
159 break; |
156 case UnreadCount: |
160 } |
157 { |
161 case FirstName: // Fall through start |
158 value = item->data(UnreadCount); |
162 value = item->data(FirstName); |
159 break; |
163 break; |
160 } |
164 case LastName: |
161 case DisplayName: // Fall through start |
165 value = item->data(LastName); |
162 value = item->data(DisplayName); |
166 break; |
163 break; |
167 case NickName: |
164 case Avatar: // Fall througn end |
168 value = item->data(NickName); |
165 value = item->data(Avatar); |
169 break; |
166 break; |
170 case Avatar: // Fall througn end |
167 case NotificationStatus: |
171 value = item->data(Avatar); |
168 value = item->data(NotificationStatus); |
172 break; |
169 break; |
173 default: |
170 default: |
174 { |
171 { |
175 //No matching role found, set invalid variant |
172 //No matching role found, set invalid variant |
176 value = QVariant(); |
173 value = QVariant(); |
177 break; |
174 break; |
178 } |
175 } |
179 } |
176 } |
180 return value; |
177 return value; |
181 } |
178 } |
182 |
179 |
183 //--------------------------------------------------------------- |
180 //--------------------------------------------------------------- |
184 // ConversationsModel::addRow |
181 // ConversationsModel::addRow |
185 // @see header |
182 // @see header |
186 //--------------------------------------------------------------- |
183 //--------------------------------------------------------------- |
187 void ConversationsModel::addRow( |
184 void ConversationsModel::addRow(const CCsConversationEntry& entry, bool dynamicUpdate) |
188 const CCsConversationEntry& entry, |
185 { |
189 bool dynamicUpdate) |
186 int msgId = entry.EntryId(); |
190 { |
|
191 int msgId = entry.EntryId(); |
|
192 //match, if found update else add item |
187 //match, if found update else add item |
193 QModelIndexList indexList = this->match(index(0, 0), |
188 QModelIndexList indexList = this->match(index(0, 0), ConvergedMsgId, msgId, -1, |
194 ConvergedMsgId, |
189 Qt::MatchExactly); |
195 msgId, -1, Qt::MatchExactly); |
|
196 |
190 |
197 // if not found, add new item |
191 // if not found, add new item |
198 if ( indexList.count() == 0 ) |
192 if (indexList.count() == 0) { |
199 { |
|
200 QStandardItem* item = new QStandardItem(); |
193 QStandardItem* item = new QStandardItem(); |
201 populateItem(*item,entry); |
194 populateItem(*item, entry); |
202 if(!dynamicUpdate) |
195 if (!dynamicUpdate) { |
203 { |
196 insertRow(0, item); |
204 insertRow(0,item); |
197 } |
205 } |
198 else { |
206 else |
|
207 { |
|
208 int i; |
199 int i; |
209 for( i= rowCount()-1; i >=0 ; --i) |
200 for (i = rowCount() - 1; i >= 0; --i) { |
210 { |
201 QStandardItem* modelItem = this->item(i, 0); |
211 QStandardItem* modelItem = this->item(i,0); |
202 if (modelItem->data(ConvergedMsgId).toInt() < item->data(ConvergedMsgId).toInt()) { |
212 if( modelItem->data(ConvergedMsgId).toInt() < |
203 if (i == rowCount() - 1) { |
213 item->data(ConvergedMsgId).toInt()) |
|
214 { |
|
215 if( i == rowCount()-1) |
|
216 { |
|
217 appendRow(item); |
204 appendRow(item); |
218 } |
205 } |
219 else |
206 else { |
220 { |
207 insertRow(i + 1, item); |
221 insertRow(i+1,item); |
|
222 } |
208 } |
223 return; |
209 return; |
224 } |
210 } |
225 } |
211 } |
226 if( i == 0 ) |
212 if (i == 0) { |
227 { |
213 insertRow(0, item); |
228 insertRow(0,item); |
|
229 } |
214 } |
230 } |
215 } |
231 } |
216 } |
232 else |
217 else { |
233 { |
|
234 // Update an existing item |
218 // Update an existing item |
235 QModelIndex index = indexList[0]; |
219 QModelIndex index = indexList[0]; |
236 QStandardItem* item = this->item(index.row(), 0); |
220 QStandardItem* item = this->item(index.row(), 0); |
237 populateItem(*item,entry); |
221 populateItem(*item, entry); |
238 } |
222 } |
239 } |
223 } |
240 |
224 |
241 //--------------------------------------------------------------- |
225 //--------------------------------------------------------------- |
242 // ConversationsModel::deleteRow |
226 // ConversationsModel::deleteRow |
243 // @see header |
227 // @see header |
244 //--------------------------------------------------------------- |
228 //--------------------------------------------------------------- |
245 void ConversationsModel::deleteRow(int msgId) |
229 void ConversationsModel::deleteRow(int msgId) |
246 { |
230 { |
247 //match, if found remove item |
231 //match, if found remove item |
248 QModelIndexList indexList = this->match(index(0, 0), |
232 QModelIndexList indexList = |
249 ConvergedMsgId, |
233 this->match(index(0, 0), ConvergedMsgId, msgId, 1, Qt::MatchExactly); |
250 msgId, 1, Qt::MatchExactly); |
234 |
251 |
235 if (indexList.count() == 1) { |
252 if( indexList.count() == 1 ) |
|
253 { |
|
254 QModelIndex index = indexList[0]; |
236 QModelIndex index = indexList[0]; |
255 this->removeRow(index.row()); |
237 this->removeRow(index.row()); |
256 } |
238 } |
257 } |
239 } |
258 |
|
259 |
240 |
260 //--------------------------------------------------------------- |
241 //--------------------------------------------------------------- |
261 // ConversationsModel::populateItem |
242 // ConversationsModel::populateItem |
262 // @see header |
243 // @see header |
263 //--------------------------------------------------------------- |
244 //--------------------------------------------------------------- |
264 void ConversationsModel::populateItem(QStandardItem& item, |
245 void ConversationsModel::populateItem(QStandardItem& item, const CCsConversationEntry& entry) |
265 const CCsConversationEntry& entry) |
246 { |
266 { |
|
267 int msgId = entry.EntryId(); |
247 int msgId = entry.EntryId(); |
268 // id |
248 // id |
269 item.setData(msgId, ConvergedMsgId); |
249 item.setData(msgId, ConvergedMsgId); |
270 |
250 |
271 // description |
251 // description |
272 HBufC* description = entry.Description(); |
252 HBufC* description = entry.Description(); |
273 QString subject(""); |
253 QString subject(""); |
274 if( description && description->Length()) |
254 if (description && description->Length()) { |
275 { |
255 subject = (S60QConversions::s60DescToQString(*description)); |
276 subject = (S60QConversions::s60DescToQString(*description)); |
256 } |
277 item.setData(subject, Subject); |
|
278 } |
|
279 |
257 |
280 // time stamp |
258 // time stamp |
281 TTime unixEpoch(KUnixEpoch); |
259 TTime unixEpoch(KUnixEpoch); |
282 TTimeIntervalSeconds seconds; |
260 TTimeIntervalSeconds seconds; |
283 TTime timeStamp(entry.TimeStamp() ); |
261 TTime timeStamp(entry.TimeStamp()); |
284 timeStamp.SecondsFrom(unixEpoch, seconds); |
262 timeStamp.SecondsFrom(unixEpoch, seconds); |
285 item.setData(seconds.Int(), TimeStamp); |
263 item.setData(seconds.Int(), TimeStamp); |
286 |
264 |
287 //contact details |
265 //contact details |
288 HBufC* contact = entry.Contact(); |
266 HBufC* contact = entry.Contact(); |
289 if( contact && contact->Length()) |
267 if (contact && contact->Length()) { |
290 { |
|
291 item.setData(S60QConversions::s60DescToQString(*contact), ConversationAddress); |
268 item.setData(S60QConversions::s60DescToQString(*contact), ConversationAddress); |
292 } |
269 } |
293 |
270 |
294 // message type. |
271 // message type. |
295 item.setData(ConversationsEngineUtility::messageType(entry.GetType()), MessageType); |
272 int msgType = ConversationsEngineUtility::messageType(entry.GetType()); |
|
273 item.setData(msgType, MessageType); |
|
274 |
|
275 //message sub-type |
|
276 item.setData(ConversationsEngineUtility::messageSubType(entry.GetType()), MessageSubType); |
|
277 |
296 // unread status |
278 // unread status |
297 if(entry.IsAttributeSet(ECsAttributeUnread)) |
279 if (entry.IsAttributeSet(ECsAttributeUnread)) { |
298 { |
280 item.setData(true, UnReadStatus); |
299 item.setData(true,UnReadStatus); |
281 } |
300 } |
282 else { |
301 else |
283 item.setData(false, UnReadStatus); |
302 { |
284 } |
303 item.setData(false,UnReadStatus); |
285 |
304 } |
|
305 |
|
306 //sending state |
286 //sending state |
307 item.setData(entry.GetSendState(), SendingState); |
287 item.setData(entry.GetSendState(), SendingState); |
308 // direction |
288 // direction |
309 item.setData(entry.ConversationDir(), Direction); |
289 item.setData(entry.ConversationDir(), Direction); |
310 |
290 |
311 //location |
291 //location |
312 if(entry.ConversationDir() == ECsDirectionIncoming) |
292 if (entry.ConversationDir() == ECsDirectionIncoming) { |
313 { |
|
314 item.setData(ConvergedMessage::Inbox, MessageLocation); |
293 item.setData(ConvergedMessage::Inbox, MessageLocation); |
315 } |
294 } |
316 else if(entry.IsAttributeSet(ECsAttributeDraft)) |
295 else if (entry.IsAttributeSet(ECsAttributeDraft)) { |
317 { |
|
318 item.setData(ConvergedMessage::Draft, MessageLocation); |
296 item.setData(ConvergedMessage::Draft, MessageLocation); |
319 } |
297 } |
320 else if(entry.IsAttributeSet(ECsAttributeSent)) |
298 else if (entry.IsAttributeSet(ECsAttributeSent)) { |
321 { |
|
322 item.setData(ConvergedMessage::Sent, MessageLocation); |
299 item.setData(ConvergedMessage::Sent, MessageLocation); |
323 } |
300 } |
324 else |
301 else { |
325 { |
|
326 item.setData(ConvergedMessage::Outbox, MessageLocation); |
302 item.setData(ConvergedMessage::Outbox, MessageLocation); |
327 } |
303 } |
328 |
304 |
329 //message specific handling |
305 //message specific handling |
330 TCsType msgType = entry.GetType(); |
306 if (msgType == ConvergedMessage::Mms) { |
331 if(msgType == ECsMMS) |
307 handleMMS(item, entry); |
332 { |
308 } |
333 iMmsDataPlugin->setMessageId(entry.EntryId()); |
309 else if(msgType == ConvergedMessage::MmsNotification) { |
334 |
310 item.setData(subject, Subject); |
335 if( iMmsDataPlugin->attachmentCount() > 0 ) |
311 handleMMSNotification(item, entry); |
336 { |
312 } |
337 item.setData(ConvergedMessage::Attachment,MessageProperty); |
313 else if (msgType == ConvergedMessage::BT) { |
338 } |
314 handleBlueToothMessages(item, entry); |
339 |
315 } |
340 int slideCount = iMmsDataPlugin->slideCount(); |
316 else if (msgType == ConvergedMessage::BioMsg) { |
341 bool isBodyTextSet = false; |
317 handleBioMessages(item, entry); |
342 QString textContent; |
318 } |
343 QStringList attachmentPaths; |
319 else { |
344 |
320 // sms bodytext |
345 for( int i=0; i < slideCount; ++i ) |
321 item.setData(subject, BodyText); |
346 { |
322 } |
347 UniMessageInfoList objectList = iMmsDataPlugin->slideContent(i); |
323 } |
348 for( int index=0; index < objectList.count() ; ++index ) |
324 |
349 { |
325 //--------------------------------------------------------------- |
350 attachmentPaths.append(objectList[index]->path()); |
326 // ConversationsModel::handleMMS |
351 if( !isBodyTextSet && objectList[index]->mimetype().contains("text") ) |
327 // @see header |
|
328 //--------------------------------------------------------------- |
|
329 void ConversationsModel::handleMMS(QStandardItem& item, const CCsConversationEntry& entry) |
|
330 { |
|
331 iMmsDataPlugin->setMessageId(entry.EntryId()); |
|
332 if (iMmsDataPlugin->attachmentCount() > 0) { |
|
333 item.setData(ConvergedMessage::Attachment, MessageProperty); |
|
334 } |
|
335 |
|
336 int slideCount = iMmsDataPlugin->slideCount(); |
|
337 bool isBodyTextSet = false; |
|
338 QString textContent; |
|
339 QStringList attachmentPaths; |
|
340 |
|
341 for (int i = 0; i < slideCount; ++i) { |
|
342 UniMessageInfoList objectList = iMmsDataPlugin->slideContent(i); |
|
343 for (int index = 0; index < objectList.count(); ++index) { |
|
344 attachmentPaths.append(objectList[index]->path()); |
|
345 if (!isBodyTextSet && objectList[index]->mimetype().contains("text")) { |
|
346 QFile file(objectList[index]->path()); |
|
347 if(file.open(QIODevice::ReadOnly)) |
352 { |
348 { |
353 QFile file(objectList[index]->path()); |
|
354 file.open(QIODevice::ReadOnly); |
|
355 textContent = file.readAll(); |
349 textContent = file.readAll(); |
356 item.setData(textContent, BodyText); |
350 item.setData(textContent, BodyText); |
357 isBodyTextSet = true; |
351 isBodyTextSet = true; |
358 file.close(); |
352 file.close(); |
359 } |
353 } |
360 } |
354 } |
361 foreach(UniMessageInfo* slide,objectList) |
355 } |
362 { |
356 foreach(UniMessageInfo* slide,objectList) |
|
357 { |
363 delete slide; |
358 delete slide; |
364 } |
359 } |
365 } |
360 } |
366 //populate item with the attachment list |
361 //populate item with the attachment list |
367 item.setData(attachmentPaths.join("|"),Attachments); |
362 item.setData(attachmentPaths.join("|"), Attachments); |
368 if(entry.IsAttributeSet(ECsAttributeHighPriority)) |
363 if (entry.IsAttributeSet(ECsAttributeHighPriority)) { |
|
364 item.setData(ConvergedMessage::High, MessagePriority); |
|
365 } |
|
366 else if (entry.IsAttributeSet(ECsAttributeLowPriority)) { |
|
367 item.setData(ConvergedMessage::Low, MessagePriority); |
|
368 } |
|
369 //subject |
|
370 item.setData(iMmsDataPlugin->subject(), Subject); |
|
371 } |
|
372 |
|
373 //--------------------------------------------------------------- |
|
374 // ConversationsModel::handleMMSNotification |
|
375 // @see header |
|
376 //--------------------------------------------------------------- |
|
377 void ConversationsModel::handleMMSNotification(QStandardItem& item, |
|
378 const CCsConversationEntry& entry) |
|
379 { |
|
380 // set context to current entry |
|
381 mMsgStoreHandler->setNotificationMessageId(entry.EntryId()); |
|
382 |
|
383 // fetch relevent info to show in CV |
|
384 // msg size |
|
385 QString estimatedMsgSizeStr = |
|
386 mMsgStoreHandler->NotificationMsgSize(); |
|
387 |
|
388 // msg class type |
|
389 QString classInfoStr = mMsgStoreHandler->NotificationClass(); |
|
390 |
|
391 // notification expiry date |
|
392 //TODO: Need to do localization of digits used to show expiry time |
|
393 TTime expiryTime; |
|
394 QString expiryTimeStr; |
|
395 mMsgStoreHandler->NotificationExpiryDate(expiryTime, expiryTimeStr); |
|
396 |
|
397 // notification state e.g. waiting, retrieving etc |
|
398 QString statusStr; |
|
399 int status; |
|
400 mMsgStoreHandler->NotificationStatus(status, statusStr); |
|
401 |
|
402 // create data for bodytext role |
|
403 QString dataText; |
|
404 dataText.append("Size: "); // TODO: use logical str name |
|
405 dataText.append(estimatedMsgSizeStr); |
|
406 dataText.append(QChar::LineSeparator); |
|
407 dataText.append("Class: "); // TODO: use logical str name |
|
408 dataText.append(classInfoStr); |
|
409 dataText.append(QChar::LineSeparator); |
|
410 dataText.append("Expiry date: "); //TODO: use logical str name |
|
411 dataText.append(expiryTimeStr); |
|
412 if(!statusStr.isEmpty()) |
|
413 { |
|
414 dataText.append(QChar::LineSeparator); |
|
415 dataText.append(statusStr); |
|
416 dataText.append(QChar::LineSeparator); //Temp fix to be removed |
|
417 } |
|
418 |
|
419 // set fetched data to roles |
|
420 item.setData(status, NotificationStatus); |
|
421 item.setData(dataText, BodyText); |
|
422 |
|
423 if (entry.IsAttributeSet(ECsAttributeHighPriority)) { |
|
424 item.setData(ConvergedMessage::High, MessagePriority); |
|
425 } |
|
426 else if (entry.IsAttributeSet(ECsAttributeLowPriority)) { |
|
427 item.setData(ConvergedMessage::Low, MessagePriority); |
|
428 } |
|
429 } |
|
430 |
|
431 //--------------------------------------------------------------- |
|
432 // ConversationsModel::handleBlueToothMessages |
|
433 // @see header |
|
434 //--------------------------------------------------------------- |
|
435 void ConversationsModel::handleBlueToothMessages(QStandardItem& item, |
|
436 const CCsConversationEntry& entry) |
|
437 { |
|
438 //TODO, needs to be revisited again, once BT team provides the solution for |
|
439 //BT received as Biomsg issue. |
|
440 QString description = S60QConversions::s60DescToQString(*(entry.Description())); |
|
441 |
|
442 if (description.contains(".vcf") || description.contains(".ics")) // "vCard" |
|
443 { |
|
444 //message sub-type |
|
445 item.setData(ConvergedMessage::VCard, MessageSubType); |
|
446 |
|
447 //parse vcf file to get the details |
|
448 QString displayName = ConversationsEngineUtility::getVcardDisplayName(description); |
|
449 item.setData(displayName, BodyText); |
|
450 } |
|
451 else |
|
452 { |
|
453 if (description.contains(".vcs")) // "vCalendar" |
369 { |
454 { |
370 item.setData(ConvergedMessage::High,MessagePriority); |
455 //message sub-type |
371 } |
456 item.setData(ConvergedMessage::VCal, MessageSubType); |
372 else if(entry.IsAttributeSet(ECsAttributeLowPriority)) |
457 } |
|
458 else |
373 { |
459 { |
374 item.setData(ConvergedMessage::Low,MessagePriority); |
460 //message sub-type |
375 } |
461 item.setData(ConvergedMessage::None, MessageSubType); |
376 } |
462 } |
377 else |
463 //for BT messages we show filenames for all other (except vcard) messages |
378 { |
464 //get filename and set as body |
379 // sms bodytext |
465 QFileInfo fileinfo(description); |
380 item.setData(subject, BodyText); |
466 QString filename = fileinfo.fileName(); |
381 } |
467 item.setData(filename, BodyText); |
382 |
468 } |
383 //presence |
469 } |
384 //TODO |
470 |
385 } |
471 //--------------------------------------------------------------- |
|
472 // ConversationsModel::handleBioMessages |
|
473 // @see header |
|
474 //--------------------------------------------------------------- |
|
475 void ConversationsModel::handleBioMessages(QStandardItem& item, const CCsConversationEntry& entry) |
|
476 { |
|
477 iBioMsgPlugin->setMessageId(entry.EntryId()); |
|
478 int msgSubType = ConversationsEngineUtility::messageSubType(entry.GetType()); |
|
479 if (ConvergedMessage::VCard == msgSubType) { |
|
480 if (iBioMsgPlugin->attachmentCount() > 0) { |
|
481 UniMessageInfoList attList = iBioMsgPlugin->attachmentList(); |
|
482 QString attachmentPath = attList[0]->path(); |
|
483 |
|
484 //get display-name and set as bodytext |
|
485 QString displayName = ConversationsEngineUtility::getVcardDisplayName(attachmentPath); |
|
486 item.setData(displayName, BodyText); |
|
487 |
|
488 // clear attachement list : its allocated at data model |
|
489 while (!attList.isEmpty()) { |
|
490 delete attList.takeFirst(); |
|
491 } |
|
492 } |
|
493 } |
|
494 else if (ConvergedMessage::VCal == msgSubType) { |
|
495 //not supported |
|
496 } |
|
497 else { |
|
498 // description |
|
499 HBufC* description = entry.Description(); |
|
500 QString subject(""); |
|
501 if (description && description->Length()) { |
|
502 subject = (S60QConversions::s60DescToQString(*description)); |
|
503 item.setData(subject, BodyText); |
|
504 } |
|
505 } |
|
506 } |
386 |
507 |
387 //EOF |
508 //EOF |