39 ** |
39 ** |
40 ****************************************************************************/ |
40 ****************************************************************************/ |
41 |
41 |
42 #include "cntsimdetaildefinitionfetchrequest.h" |
42 #include "cntsimdetaildefinitionfetchrequest.h" |
43 #include "cntsymbiansimengine.h" |
43 #include "cntsymbiansimengine.h" |
44 #include "cntsimstore.h" |
|
45 #include <qcontactdetaildefinitionfetchrequest.h> |
44 #include <qcontactdetaildefinitionfetchrequest.h> |
46 #include <QTimer> |
|
47 |
45 |
48 CntSimDetailDefinitionFetchRequest::CntSimDetailDefinitionFetchRequest(CntSymbianSimEngine *engine, QContactDetailDefinitionFetchRequest *req) |
46 CntSimDetailDefinitionFetchRequest::CntSimDetailDefinitionFetchRequest(CntSymbianSimEngine *engine, QContactDetailDefinitionFetchRequest *req) |
49 :CntAbstractSimRequest(engine), |
47 :CntAbstractSimRequest(engine, req) |
50 m_req(req) |
|
51 { |
48 { |
52 |
49 |
53 } |
50 } |
54 |
51 |
55 CntSimDetailDefinitionFetchRequest::~CntSimDetailDefinitionFetchRequest() |
52 CntSimDetailDefinitionFetchRequest::~CntSimDetailDefinitionFetchRequest() |
56 { |
53 { |
57 cancel(); |
54 cancel(); |
58 } |
55 } |
59 |
56 |
60 bool CntSimDetailDefinitionFetchRequest::start() |
57 void CntSimDetailDefinitionFetchRequest::run() |
61 { |
58 { |
62 singleShotTimer(0, this, SLOT(readDetailDefinitions())); |
59 QContactDetailDefinitionFetchRequest *r = req<QContactDetailDefinitionFetchRequest>(); |
63 QContactManagerEngine::updateRequestState(m_req, QContactAbstractRequest::ActiveState); |
60 |
64 return true; |
61 if (!r->isActive()) |
65 } |
|
66 |
|
67 bool CntSimDetailDefinitionFetchRequest::cancel() |
|
68 { |
|
69 if (m_req->isActive()) { |
|
70 cancelTimer(); |
|
71 QContactManagerEngine::updateRequestState(m_req, QContactAbstractRequest::CanceledState); |
|
72 return true; |
|
73 } |
|
74 return false; |
|
75 } |
|
76 |
|
77 void CntSimDetailDefinitionFetchRequest::readDetailDefinitions() |
|
78 { |
|
79 if (m_req->isCanceled()) |
|
80 return; |
62 return; |
81 |
63 |
82 QContactManager::Error error = QContactManager::NoError; |
64 QContactManager::Error error = QContactManager::NoError; |
83 QMap<QString, QContactDetailDefinition> result; |
65 QMap<QString, QContactDetailDefinition> result; |
84 QMap<int, QContactManager::Error> errorMap; |
66 QMap<int, QContactManager::Error> errorMap; |
85 |
67 |
86 // Get all detail definitions |
68 // Get all detail definitions |
87 QMap<QString, QContactDetailDefinition> allDefs = engine()->detailDefinitions(m_req->contactType(), error); |
69 QMap<QString, QContactDetailDefinition> allDefs = engine()->detailDefinitions(r->contactType(), &error); |
|
70 |
|
71 QStringList defNames = r->definitionNames(); |
88 |
72 |
89 // Check for error |
73 // Check for error |
90 if (error != QContactManager::NoError) |
74 if (error != QContactManager::NoError) |
91 { |
75 { |
92 for (int i=0; i<m_req->definitionNames().count(); i++) |
76 for (int i=0; i<defNames.count(); i++) |
93 errorMap.insert(i, error); |
77 errorMap.insert(i, error); |
94 |
78 |
95 // Complete the request |
79 // Complete the request |
96 QContactManagerEngine::updateRequestState(m_req, QContactAbstractRequest::FinishedState); |
80 QContactManagerEngine::updateDefinitionFetchRequest(r, result, error, errorMap, QContactAbstractRequest::FinishedState); |
97 QContactManagerEngine::updateDefinitionFetchRequest(m_req, result, error, errorMap); |
|
98 return; |
81 return; |
99 } |
82 } |
100 |
83 |
101 // Filter results |
84 // Filter results |
102 if (m_req->definitionNames().count() == 0) |
85 if (r->definitionNames().count() == 0) |
103 { |
86 { |
104 result = allDefs; |
87 result = allDefs; |
105 } |
88 } |
106 else |
89 else |
107 { |
90 { |
108 for (int i=0; i<m_req->definitionNames().count(); i++) |
91 for (int i=0; i<defNames.count(); i++) |
109 { |
92 { |
110 QString defName = m_req->definitionNames().at(i); |
93 QString defName = defNames.at(i); |
111 if (allDefs.contains(defName)) |
94 if (allDefs.contains(defName)) |
112 result.insert(defName, allDefs.value(defName)); |
95 result.insert(defName, allDefs.value(defName)); |
113 else |
96 else |
114 errorMap.insert(i, QContactManager::DoesNotExistError); |
97 errorMap.insert(i, QContactManager::DoesNotExistError); |
115 } |
98 } |