9 * Initial Contributors: |
9 * Initial Contributors: |
10 * Nokia Corporation - initial contribution. |
10 * Nokia Corporation - initial contribution. |
11 * |
11 * |
12 * Contributors: |
12 * Contributors: |
13 * |
13 * |
14 * Description: |
14 * Description: |
15 * |
15 * |
16 */ |
16 */ |
17 #include "activityclient_p.h" |
17 #include "activityclient_p.h" |
18 #include "activityclient.h" |
18 #include "activityclient.h" |
19 #include "activitydatastorage.h" |
19 #include "activitydatastorage.h" |
20 #include <hsactivitydbclient.h> |
20 #include <hsactivitydbclient.h> |
21 |
21 |
|
22 #include <QCoreApplication> |
22 #include <QStringList> |
23 #include <QStringList> |
23 #include <QTimer> |
24 #include <QTimer> |
|
25 #include <QUrl> |
|
26 #include <QDebug> |
|
27 #include <QDir> |
24 |
28 |
25 ActivityClientPrivate::ActivityClientPrivate(ActivityClient *q) : QObject(q) |
29 ActivityClientPrivate::ActivityClientPrivate(ActivityClient *q) : QObject(q), isconnected(false) |
26 { |
30 { |
27 mDataStorage = new ActivityDataStorage(); |
31 mDataStorage = new ActivityDataStorage(); |
28 mServerClient = new HsActivityDbClient(); |
32 mServerClient = new HsActivityDbClient(); |
29 mServerClient->connect(); |
33 isconnected = ( KErrNone == mServerClient->connect()); |
30 connect(mServerClient, SIGNAL(activityRequested(QString)), q, SIGNAL(activityRequested(QString))); |
34 connect(mServerClient, SIGNAL(activityRequested(QString)), q, SIGNAL(activityRequested(QString))); |
31 } |
35 } |
32 |
36 |
33 ActivityClientPrivate::~ActivityClientPrivate() |
37 ActivityClientPrivate::~ActivityClientPrivate() |
34 { |
38 { |
36 delete mDataStorage; |
40 delete mDataStorage; |
37 } |
41 } |
38 |
42 |
39 bool ActivityClientPrivate::addActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters) |
43 bool ActivityClientPrivate::addActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters) |
40 { |
44 { |
41 QVariantHash activity(parameters); |
45 if (isconnected) { |
42 mDataStorage->addActivity(activityId, data); |
46 mDataStorage->addActivity(activityId, data); |
43 RProcess process; |
47 QVariantHash activity(parameters); |
44 |
48 RProcess process; |
45 activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId)); |
49 registerThumbnail(activityId, activity); |
46 activity.insert(ActivityActivityKeyword, activityId); |
50 activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId)); |
47 mServerClient->addActivity(activity); |
51 activity.insert(ActivityActivityKeyword, activityId); |
48 |
52 mServerClient->addActivity(activity); |
|
53 } |
49 // @todo make those operations atomic |
54 // @todo make those operations atomic |
50 // @todo return real result |
55 // @todo return real result |
51 return true; |
56 return isconnected; |
52 } |
57 } |
53 |
58 |
54 bool ActivityClientPrivate::removeActivity(const QString &activityId) |
59 bool ActivityClientPrivate::removeActivity(const QString &activityId) |
55 { |
60 { |
56 QVariantHash activity; |
61 if (isconnected) { |
57 RProcess process; |
62 mDataStorage->removeActivity(activityId); |
58 activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId)); |
63 QVariantHash activity; |
59 activity.insert(ActivityActivityKeyword, activityId); |
64 RProcess process; |
60 mDataStorage->removeActivity(activityId); |
65 activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId)); |
61 mServerClient->removeActivity(activity); |
66 activity.insert(ActivityActivityKeyword, activityId); |
|
67 mServerClient->removeActivity(activity); |
|
68 } |
62 // @todo make those operations atomic |
69 // @todo make those operations atomic |
63 // @todo return real result |
70 // @todo return real result |
64 return true; |
71 return isconnected; |
65 } |
72 } |
66 |
73 |
67 bool ActivityClientPrivate::updateActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters) |
74 bool ActivityClientPrivate::updateActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters) |
68 { |
75 { |
69 QVariantHash activity(parameters); |
76 if (isconnected) { |
70 RProcess process; |
77 mDataStorage->updateActivity(activityId, data); |
71 activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId)); |
78 QVariantHash activity(parameters); |
72 activity.insert(ActivityActivityKeyword, activityId); |
79 RProcess process; |
73 mDataStorage->updateActivity(activityId, data); |
80 registerThumbnail(activityId, activity); |
74 mServerClient->updateActivity(activity); |
81 activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId)); |
|
82 activity.insert(ActivityActivityKeyword, activityId); |
|
83 mServerClient->updateActivity(activity); |
|
84 } |
75 // @todo make those operations atomic |
85 // @todo make those operations atomic |
76 // @todo return real result |
86 // @todo return real result |
77 return true; |
87 return isconnected; |
78 } |
88 } |
79 |
89 |
80 QList<QVariantHash> ActivityClientPrivate::activities() const |
90 QList<QVariantHash> ActivityClientPrivate::activities() const |
81 { |
91 { |
82 QVariantHash activity; |
|
83 RProcess process; |
|
84 activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId)); |
|
85 |
|
86 QList<QVariantHash> activities; |
92 QList<QVariantHash> activities; |
87 |
93 if (isconnected) { |
88 mServerClient->applicationActivities(activities, activity); |
94 QVariantHash activity; |
|
95 RProcess process; |
|
96 activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId)); |
|
97 mServerClient->applicationActivities(activities, activity); |
|
98 } |
89 return activities; |
99 return activities; |
90 } |
100 } |
91 |
101 |
92 QVariant ActivityClientPrivate::activityData(const QString &activityId) const |
102 QVariant ActivityClientPrivate::activityData(const QString &activityId) const |
93 { |
103 { |
94 return mDataStorage->activityData(activityId); |
104 return isconnected ? mDataStorage->activityData(activityId) : QVariant(); |
95 } |
105 } |
96 |
106 |
97 bool ActivityClientPrivate::waitActivity() |
107 bool ActivityClientPrivate::waitActivity() |
98 { |
108 { |
99 RProcess process; |
109 bool retVal(isconnected); |
100 QVariantHash activity; |
110 if (isconnected) { |
101 activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId)); |
111 RProcess process; |
102 return !mServerClient->waitActivity(activity); |
112 QVariantHash activity; |
|
113 activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId)); |
|
114 retVal = !mServerClient->waitActivity(activity); |
|
115 } |
|
116 return retVal; |
103 } |
117 } |
|
118 |
|
119 QVariantHash ActivityClientPrivate::parseCommandLine(const QStringList &commandLineParams) const |
|
120 { |
|
121 QVariantHash activityParams; |
|
122 int activityMarkerIndex = commandLineParams.indexOf("-activity"); |
|
123 if (activityMarkerIndex != -1 && commandLineParams.count() - 1 > activityMarkerIndex) { |
|
124 QUrl activityUri(commandLineParams.at(activityMarkerIndex+1)); |
|
125 if (activityUri.scheme() == "appto") { |
|
126 QList<QPair<QString, QString> > parameters = activityUri.queryItems(); |
|
127 for (QList<QPair<QString, QString> >::const_iterator i = parameters.constBegin(); i != parameters.constEnd(); ++i) { |
|
128 activityParams.insert(i->first, i->second); |
|
129 } |
|
130 |
|
131 if (activityParams.contains("activityname") && !activityParams.value("activityname").toString().isEmpty()) { |
|
132 return activityParams; |
|
133 } |
|
134 } |
|
135 } |
|
136 return QVariantHash(); |
|
137 } |
|
138 |
|
139 void ActivityClientPrivate::registerThumbnail(const QString &name, QVariantHash &activity) |
|
140 { |
|
141 QVariantHash::const_iterator findIterator(activity.constFind(ActivityScreenshotKeyword)); |
|
142 if (activity.constEnd() != findIterator && |
|
143 findIterator.value().canConvert<QPixmap>()) { |
|
144 const QString thumbnailManagerName = thumbnailName(name); |
|
145 if (findIterator.value().value<QPixmap>().save(thumbnailManagerName)) { |
|
146 activity.insert(ActivityScreenshotKeyword, thumbnailManagerName); |
|
147 } else { |
|
148 activity.remove(ActivityScreenshotKeyword); |
|
149 } |
|
150 } |
|
151 } |
|
152 |
|
153 QString ActivityClientPrivate::thumbnailName(const QString &activityId) const |
|
154 { |
|
155 return QDir::toNativeSeparators(qApp->applicationDirPath() + |
|
156 "/" + |
|
157 QString::number(qHash(activityId), 16) + |
|
158 ".png"); |
|
159 } |