File indexing completed on 2024-04-28 04:49:05
0001 /* 0002 SPDX-FileCopyrightText: 2015 (c) Matthieu Gallien <matthieu_gallien@yahoo.fr> 0003 0004 SPDX-License-Identifier: LGPL-3.0-or-later 0005 */ 0006 0007 #include "upnpcontrolcontentdirectory.h" 0008 0009 #include "upnpLogging.h" 0010 0011 #include "upnpcontrolabstractservicereply.h" 0012 0013 #include <KDSoapClient/KDSoapPendingCall.h> 0014 #include <KDSoapClient/KDSoapPendingCallWatcher.h> 0015 0016 #include <QLoggingCategory> 0017 0018 class UpnpControlContentDirectoryPrivate 0019 { 0020 public: 0021 0022 QString mSearchCapabilities; 0023 0024 QString mTransferIDs; 0025 0026 QString mSortCapabilities; 0027 0028 int mSystemUpdateID; 0029 0030 bool mHasTransferIDs; 0031 0032 }; 0033 0034 UpnpControlContentDirectory::UpnpControlContentDirectory(QObject *parent) : UpnpControlAbstractService(parent), d(new UpnpControlContentDirectoryPrivate) 0035 { 0036 } 0037 0038 UpnpControlContentDirectory::~UpnpControlContentDirectory() 0039 = default; 0040 0041 const QString &UpnpControlContentDirectory::searchCapabilities() const 0042 { 0043 return d->mSearchCapabilities; 0044 } 0045 0046 const QString &UpnpControlContentDirectory::transferIDs() const 0047 { 0048 return d->mTransferIDs; 0049 } 0050 0051 bool UpnpControlContentDirectory::hasTransferIDs() const 0052 { 0053 return d->mHasTransferIDs; 0054 } 0055 0056 const QString &UpnpControlContentDirectory::sortCapabilities() const 0057 { 0058 return d->mSortCapabilities; 0059 } 0060 0061 int UpnpControlContentDirectory::systemUpdateID() const 0062 { 0063 return d->mSystemUpdateID; 0064 } 0065 0066 UpnpControlAbstractServiceReply *UpnpControlContentDirectory::getSearchCapabilities() 0067 { 0068 auto pendingAnswer = callAction(QStringLiteral("GetSearchCapabilities"), {}); 0069 0070 return pendingAnswer; 0071 } 0072 0073 UpnpControlAbstractServiceReply *UpnpControlContentDirectory::getSortCapabilities() 0074 { 0075 auto pendingAnswer = callAction(QStringLiteral("GetSortCapabilities"), {}); 0076 0077 return pendingAnswer; 0078 } 0079 0080 UpnpControlAbstractServiceReply *UpnpControlContentDirectory::getSystemUpdateID() 0081 { 0082 auto pendingAnswer = callAction(QStringLiteral("GetSystemUpdateID"), {}); 0083 0084 return pendingAnswer; 0085 } 0086 0087 UpnpControlAbstractServiceReply *UpnpControlContentDirectory::search(const QString &objectID, const QString &searchCriteria, 0088 const QString &filter, int startingIndex, 0089 int requestedCount, const QString &sortCriteria) 0090 { 0091 qDebug() << "UpnpControlContentDirectory::search" << objectID << searchCriteria << filter << startingIndex << requestedCount << sortCriteria; 0092 auto pendingAnswer = callAction(QStringLiteral("Search"), {{{}, objectID}, 0093 {{}, searchCriteria}, 0094 {{}, filter}, 0095 {{}, startingIndex}, 0096 {{}, requestedCount}, 0097 {{}, sortCriteria}}); 0098 0099 return pendingAnswer; 0100 } 0101 0102 UpnpControlAbstractServiceReply *UpnpControlContentDirectory::browse(const QString &objectID, const QString &browseFlag, 0103 const QString &filter, int startingIndex, 0104 int requestedCount, const QString &sortCriteria) 0105 { 0106 auto pendingAnswer = callAction(QStringLiteral("Browse"), {{QStringLiteral("ObjectID"), objectID}, 0107 {QStringLiteral("BrowseFlag"), browseFlag}, 0108 {QStringLiteral("Filter"), filter}, 0109 {QStringLiteral("StartingIndex"), startingIndex}, 0110 {QStringLiteral("RequestedCount"), requestedCount}, 0111 {QStringLiteral("SortCriteria"), sortCriteria}}); 0112 0113 return pendingAnswer; 0114 } 0115 0116 #if 0 0117 void UpnpControlContentDirectory::finishedGetSearchCapabilitiesCall(KDSoapPendingCallWatcher *self) 0118 { 0119 self->deleteLater(); 0120 0121 auto answer = self->returnMessage(); 0122 auto allValues = answer.childValues(); 0123 QString searchCaps; 0124 0125 for (KDSoapValue oneValue : allValues) { 0126 if (oneValue.name() == QLatin1String("SearchCaps")) { 0127 searchCaps = oneValue.value().toString(); 0128 } 0129 } 0130 0131 qCDebug(orgKdeElisaUpnp()) << "SearchCaps:" << searchCaps; 0132 0133 //Q_EMIT getSearchCapabilitiesFinished(searchCaps, !self->returnMessage().isFault()); 0134 } 0135 0136 void UpnpControlContentDirectory::finishedGetSortCapabilitiesCall(KDSoapPendingCallWatcher *self) 0137 { 0138 self->deleteLater(); 0139 0140 auto answer = self->returnMessage(); 0141 auto allValues = answer.childValues(); 0142 QString sortCaps; 0143 0144 for (KDSoapValue oneValue : allValues) { 0145 if (oneValue.name() == QLatin1String("SortCaps")) { 0146 sortCaps = oneValue.value().toString(); 0147 } 0148 } 0149 0150 qCDebug(orgKdeElisaUpnp()) << "SortCaps:" << sortCaps; 0151 0152 //Q_EMIT getSortCapabilitiesFinished(sortCaps, !self->returnMessage().isFault()); 0153 } 0154 0155 void UpnpControlContentDirectory::finishedGetSystemUpdateIDCall(KDSoapPendingCallWatcher *self) 0156 { 0157 self->deleteLater(); 0158 0159 auto answer = self->returnMessage(); 0160 auto allValues = answer.childValues(); 0161 0162 for (KDSoapValue oneValue : allValues) { 0163 if (oneValue.name() == QLatin1String("Id")) { 0164 d->mSystemUpdateID = oneValue.value().toInt(); 0165 } 0166 } 0167 0168 qCDebug(orgKdeElisaUpnp()) << "Id:" << d->mSystemUpdateID; 0169 0170 //Q_EMIT getSystemUpdateIDFinished(d->mSystemUpdateID, !self->returnMessage().isFault()); 0171 } 0172 0173 void UpnpControlContentDirectory::finishedSearchCall(KDSoapPendingCallWatcher *self) 0174 { 0175 qCDebug(orgKdeElisaUpnp()) << "UpnpControlContentDirectory::finishedSearchCall"; 0176 self->deleteLater(); 0177 0178 auto answer = self->returnMessage(); 0179 auto allValues = answer.childValues(); 0180 QString result; 0181 int numberReturned = 0; 0182 int totalMatches = 0; 0183 0184 for (KDSoapValue oneValue : allValues) { 0185 if (oneValue.name() == QLatin1String("Result")) { 0186 result = oneValue.value().toString(); 0187 } 0188 if (oneValue.name() == QLatin1String("NumberReturned")) { 0189 numberReturned = oneValue.value().toInt(); 0190 } 0191 if (oneValue.name() == QLatin1String("TotalMatches")) { 0192 totalMatches = oneValue.value().toInt(); 0193 } 0194 if (oneValue.name() == QLatin1String("UpdateID")) { 0195 d->mSystemUpdateID = oneValue.value().toInt(); 0196 } 0197 } 0198 0199 //qCDebug(orgKdeElisaUpnp()) << "Result:" << result; 0200 qCDebug(orgKdeElisaUpnp()) << "NumberReturned:" << numberReturned; 0201 qCDebug(orgKdeElisaUpnp()) << "TotalMatches:" << totalMatches; 0202 qCDebug(orgKdeElisaUpnp()) << "UpdateID:" << d->mSystemUpdateID; 0203 0204 //Q_EMIT searchFinished(result, numberReturned, totalMatches, d->mSystemUpdateID, !self->returnMessage().isFault()); 0205 } 0206 0207 void UpnpControlContentDirectory::finishedBrowseCall(KDSoapPendingCallWatcher *self) 0208 { 0209 self->deleteLater(); 0210 0211 auto answer = self->returnMessage(); 0212 auto allValues = answer.childValues(); 0213 QString result; 0214 int numberReturned = 0; 0215 int totalMatches = 0; 0216 0217 for (KDSoapValue oneValue : allValues) { 0218 if (oneValue.name() == QLatin1String("Result")) { 0219 result = oneValue.value().toString(); 0220 } 0221 if (oneValue.name() == QLatin1String("NumberReturned")) { 0222 numberReturned = oneValue.value().toInt(); 0223 } 0224 if (oneValue.name() == QLatin1String("TotalMatches")) { 0225 totalMatches = oneValue.value().toInt(); 0226 } 0227 if (oneValue.name() == QLatin1String("UpdateID")) { 0228 d->mSystemUpdateID = oneValue.value().toInt(); 0229 } 0230 } 0231 0232 //qCDebug(orgKdeElisaUpnp()) << "Result:" << result; 0233 //qCDebug(orgKdeElisaUpnp()) << "NumberReturned:" << numberReturned; 0234 //qCDebug(orgKdeElisaUpnp()) << "TotalMatches:" << totalMatches; 0235 //qCDebug(orgKdeElisaUpnp()) << "UpdateID:" << d->mSystemUpdateID; 0236 0237 //Q_EMIT browseFinished(result, numberReturned, totalMatches, d->mSystemUpdateID, !self->returnMessage().isFault()); 0238 } 0239 #endif 0240 0241 void UpnpControlContentDirectory::parseServiceDescription(QIODevice *serviceDescriptionContent) 0242 { 0243 UpnpControlAbstractService::parseServiceDescription(serviceDescriptionContent); 0244 0245 const QList<QString> &allVariables(stateVariables()); 0246 0247 d->mHasTransferIDs = allVariables.contains(QStringLiteral("TransferIDs")); 0248 Q_EMIT hasTransferIDsChanged(); 0249 0250 //const QList<QString> &allActions(actions()); 0251 } 0252 0253 void UpnpControlContentDirectory::parseEventNotification(const QString &eventName, const QString &eventValue) 0254 { 0255 if (eventName == QLatin1String("TransferIDs")) { 0256 d->mTransferIDs = eventValue; 0257 Q_EMIT transferIDsChanged(d->mTransferIDs); 0258 } 0259 if (eventName == QLatin1String("SystemUpdateID")) { 0260 d->mSystemUpdateID = eventValue.toInt(); 0261 Q_EMIT systemUpdateIDChanged(d->mSystemUpdateID); 0262 } 0263 } 0264 0265 #include "moc_upnpcontrolcontentdirectory.cpp"