1 /*
2 SPDX-FileCopyrightText: 2015 (c) Matthieu Gallien <matthieu_gallien@yahoo.fr>
3
4 SPDX-License-Identifier: LGPL-3.0-or-later
5 */
6
7 #include "upnpcontrolcontentdirectory.h"
8
9 #include "upnpLogging.h"
10
11 #include "upnpcontrolabstractservicereply.h"
12
13 #include <KDSoapClient/KDSoapPendingCall.h>
14 #include <KDSoapClient/KDSoapPendingCallWatcher.h>
15
16 #include <QLoggingCategory>
17
18 class UpnpControlContentDirectoryPrivate
19 {
20 public:
21
22 QString mSearchCapabilities;
23
24 QString mTransferIDs;
25
26 QString mSortCapabilities;
27
28 int mSystemUpdateID;
29
30 bool mHasTransferIDs;
31
32 };
33
UpnpControlContentDirectory(QObject * parent)34 UpnpControlContentDirectory::UpnpControlContentDirectory(QObject *parent) : UpnpControlAbstractService(parent), d(new UpnpControlContentDirectoryPrivate)
35 {
36 }
37
38 UpnpControlContentDirectory::~UpnpControlContentDirectory()
39 = default;
40
searchCapabilities() const41 const QString &UpnpControlContentDirectory::searchCapabilities() const
42 {
43 return d->mSearchCapabilities;
44 }
45
transferIDs() const46 const QString &UpnpControlContentDirectory::transferIDs() const
47 {
48 return d->mTransferIDs;
49 }
50
hasTransferIDs() const51 bool UpnpControlContentDirectory::hasTransferIDs() const
52 {
53 return d->mHasTransferIDs;
54 }
55
sortCapabilities() const56 const QString &UpnpControlContentDirectory::sortCapabilities() const
57 {
58 return d->mSortCapabilities;
59 }
60
systemUpdateID() const61 int UpnpControlContentDirectory::systemUpdateID() const
62 {
63 return d->mSystemUpdateID;
64 }
65
getSearchCapabilities()66 UpnpControlAbstractServiceReply *UpnpControlContentDirectory::getSearchCapabilities()
67 {
68 auto pendingAnswer = callAction(QStringLiteral("GetSearchCapabilities"), {});
69
70 return pendingAnswer;
71 }
72
getSortCapabilities()73 UpnpControlAbstractServiceReply *UpnpControlContentDirectory::getSortCapabilities()
74 {
75 auto pendingAnswer = callAction(QStringLiteral("GetSortCapabilities"), {});
76
77 return pendingAnswer;
78 }
79
getSystemUpdateID()80 UpnpControlAbstractServiceReply *UpnpControlContentDirectory::getSystemUpdateID()
81 {
82 auto pendingAnswer = callAction(QStringLiteral("GetSystemUpdateID"), {});
83
84 return pendingAnswer;
85 }
86
search(const QString & objectID,const QString & searchCriteria,const QString & filter,int startingIndex,int requestedCount,const QString & sortCriteria)87 UpnpControlAbstractServiceReply *UpnpControlContentDirectory::search(const QString &objectID, const QString &searchCriteria,
88 const QString &filter, int startingIndex,
89 int requestedCount, const QString &sortCriteria)
90 {
91 qDebug() << "UpnpControlContentDirectory::search" << objectID << searchCriteria << filter << startingIndex << requestedCount << sortCriteria;
92 auto pendingAnswer = callAction(QStringLiteral("Search"), {{{}, objectID},
93 {{}, searchCriteria},
94 {{}, filter},
95 {{}, startingIndex},
96 {{}, requestedCount},
97 {{}, sortCriteria}});
98
99 return pendingAnswer;
100 }
101
browse(const QString & objectID,const QString & browseFlag,const QString & filter,int startingIndex,int requestedCount,const QString & sortCriteria)102 UpnpControlAbstractServiceReply *UpnpControlContentDirectory::browse(const QString &objectID, const QString &browseFlag,
103 const QString &filter, int startingIndex,
104 int requestedCount, const QString &sortCriteria)
105 {
106 auto pendingAnswer = callAction(QStringLiteral("Browse"), {{QStringLiteral("ObjectID"), objectID},
107 {QStringLiteral("BrowseFlag"), browseFlag},
108 {QStringLiteral("Filter"), filter},
109 {QStringLiteral("StartingIndex"), startingIndex},
110 {QStringLiteral("RequestedCount"), requestedCount},
111 {QStringLiteral("SortCriteria"), sortCriteria}});
112
113 return pendingAnswer;
114 }
115
116 #if 0
117 void UpnpControlContentDirectory::finishedGetSearchCapabilitiesCall(KDSoapPendingCallWatcher *self)
118 {
119 self->deleteLater();
120
121 auto answer = self->returnMessage();
122 auto allValues = answer.childValues();
123 QString searchCaps;
124
125 for (KDSoapValue oneValue : allValues) {
126 if (oneValue.name() == QLatin1String("SearchCaps")) {
127 searchCaps = oneValue.value().toString();
128 }
129 }
130
131 qCDebug(orgKdeElisaUpnp()) << "SearchCaps:" << searchCaps;
132
133 //Q_EMIT getSearchCapabilitiesFinished(searchCaps, !self->returnMessage().isFault());
134 }
135
136 void UpnpControlContentDirectory::finishedGetSortCapabilitiesCall(KDSoapPendingCallWatcher *self)
137 {
138 self->deleteLater();
139
140 auto answer = self->returnMessage();
141 auto allValues = answer.childValues();
142 QString sortCaps;
143
144 for (KDSoapValue oneValue : allValues) {
145 if (oneValue.name() == QLatin1String("SortCaps")) {
146 sortCaps = oneValue.value().toString();
147 }
148 }
149
150 qCDebug(orgKdeElisaUpnp()) << "SortCaps:" << sortCaps;
151
152 //Q_EMIT getSortCapabilitiesFinished(sortCaps, !self->returnMessage().isFault());
153 }
154
155 void UpnpControlContentDirectory::finishedGetSystemUpdateIDCall(KDSoapPendingCallWatcher *self)
156 {
157 self->deleteLater();
158
159 auto answer = self->returnMessage();
160 auto allValues = answer.childValues();
161
162 for (KDSoapValue oneValue : allValues) {
163 if (oneValue.name() == QLatin1String("Id")) {
164 d->mSystemUpdateID = oneValue.value().toInt();
165 }
166 }
167
168 qCDebug(orgKdeElisaUpnp()) << "Id:" << d->mSystemUpdateID;
169
170 //Q_EMIT getSystemUpdateIDFinished(d->mSystemUpdateID, !self->returnMessage().isFault());
171 }
172
173 void UpnpControlContentDirectory::finishedSearchCall(KDSoapPendingCallWatcher *self)
174 {
175 qCDebug(orgKdeElisaUpnp()) << "UpnpControlContentDirectory::finishedSearchCall";
176 self->deleteLater();
177
178 auto answer = self->returnMessage();
179 auto allValues = answer.childValues();
180 QString result;
181 int numberReturned = 0;
182 int totalMatches = 0;
183
184 for (KDSoapValue oneValue : allValues) {
185 if (oneValue.name() == QLatin1String("Result")) {
186 result = oneValue.value().toString();
187 }
188 if (oneValue.name() == QLatin1String("NumberReturned")) {
189 numberReturned = oneValue.value().toInt();
190 }
191 if (oneValue.name() == QLatin1String("TotalMatches")) {
192 totalMatches = oneValue.value().toInt();
193 }
194 if (oneValue.name() == QLatin1String("UpdateID")) {
195 d->mSystemUpdateID = oneValue.value().toInt();
196 }
197 }
198
199 //qCDebug(orgKdeElisaUpnp()) << "Result:" << result;
200 qCDebug(orgKdeElisaUpnp()) << "NumberReturned:" << numberReturned;
201 qCDebug(orgKdeElisaUpnp()) << "TotalMatches:" << totalMatches;
202 qCDebug(orgKdeElisaUpnp()) << "UpdateID:" << d->mSystemUpdateID;
203
204 //Q_EMIT searchFinished(result, numberReturned, totalMatches, d->mSystemUpdateID, !self->returnMessage().isFault());
205 }
206
207 void UpnpControlContentDirectory::finishedBrowseCall(KDSoapPendingCallWatcher *self)
208 {
209 self->deleteLater();
210
211 auto answer = self->returnMessage();
212 auto allValues = answer.childValues();
213 QString result;
214 int numberReturned = 0;
215 int totalMatches = 0;
216
217 for (KDSoapValue oneValue : allValues) {
218 if (oneValue.name() == QLatin1String("Result")) {
219 result = oneValue.value().toString();
220 }
221 if (oneValue.name() == QLatin1String("NumberReturned")) {
222 numberReturned = oneValue.value().toInt();
223 }
224 if (oneValue.name() == QLatin1String("TotalMatches")) {
225 totalMatches = oneValue.value().toInt();
226 }
227 if (oneValue.name() == QLatin1String("UpdateID")) {
228 d->mSystemUpdateID = oneValue.value().toInt();
229 }
230 }
231
232 //qCDebug(orgKdeElisaUpnp()) << "Result:" << result;
233 //qCDebug(orgKdeElisaUpnp()) << "NumberReturned:" << numberReturned;
234 //qCDebug(orgKdeElisaUpnp()) << "TotalMatches:" << totalMatches;
235 //qCDebug(orgKdeElisaUpnp()) << "UpdateID:" << d->mSystemUpdateID;
236
237 //Q_EMIT browseFinished(result, numberReturned, totalMatches, d->mSystemUpdateID, !self->returnMessage().isFault());
238 }
239 #endif
240
parseServiceDescription(QIODevice * serviceDescriptionContent)241 void UpnpControlContentDirectory::parseServiceDescription(QIODevice *serviceDescriptionContent)
242 {
243 UpnpControlAbstractService::parseServiceDescription(serviceDescriptionContent);
244
245 const QList<QString> &allVariables(stateVariables());
246
247 d->mHasTransferIDs = allVariables.contains(QStringLiteral("TransferIDs"));
248 Q_EMIT hasTransferIDsChanged();
249
250 //const QList<QString> &allActions(actions());
251 }
252
parseEventNotification(const QString & eventName,const QString & eventValue)253 void UpnpControlContentDirectory::parseEventNotification(const QString &eventName, const QString &eventValue)
254 {
255 if (eventName == QLatin1String("TransferIDs")) {
256 d->mTransferIDs = eventValue;
257 Q_EMIT transferIDsChanged(d->mTransferIDs);
258 }
259 if (eventName == QLatin1String("SystemUpdateID")) {
260 d->mSystemUpdateID = eventValue.toInt();
261 Q_EMIT systemUpdateIDChanged(d->mSystemUpdateID);
262 }
263 }
264
265 #include "moc_upnpcontrolcontentdirectory.cpp"
266