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"