8#include <QRecursiveMutex>
9#include <QNetworkAccessManager>
10#include <QNetworkReply>
11#include <QNetworkRequest>
29 QString name, QString url)
82 void AddServer(
const QString &usn,
const QString &url);
87 void ParseBrowse(
const QUrl &url, QNetworkReply *reply);
95 static void ParseDevice(QDomElement &element, QString &controlURL,
96 QString &eventURL, QString &friendlyName);
99 static void ParseService(QDomElement &element, QString &controlURL,
This is a wrapper around QThread that does several additional things.
UPnPScanner detects UPnP Media Servers available on the local network (via the UPnP SSDP cache),...
static UPNPScanner * Instance(UPNPSubscription *sub=nullptr)
Returns the global UPNPScanner instance if it has been enabled or nullptr if UPNPScanner is currently...
void replyFinished(QNetworkReply *reply)
Validates network responses against known requests and parses expected responses for the required dat...
static QRecursiveMutex * gUPNPScannerLock
static bool gUPNPScannerEnabled
static void ParseDevice(QDomElement &element, QString &controlURL, QString &eventURL, QString &friendlyName)
void CheckStatus(void)
Removes media servers that can no longer be found in the SSDP cache.
void AddServer(const QString &usn, const QString &url)
Adds the server identified by usn and reachable via url to the list of known media servers and schedu...
void FindItems(const QDomNode &n, MediaServerItem &content, bool &resetparent)
QMultiMap< QUrl, QNetworkReply * > m_descriptionRequests
void RemoveServer(const QString &usn)
QHash< QString, UpnpMediaServer * > m_servers
bool ParseDescription(const QUrl &url, QNetworkReply *reply)
Parse the device description XML return my a media server.
void Start()
Initialises the scanner, hooks it up to the subscription service and the SSDP cache and starts scanni...
void ScheduleRenewal(const QString &usn, std::chrono::seconds timeout)
Creates a QTimer to trigger a subscription renewal for a given media server.
QMap< QString, QString > ServerList(void)
Returns a list of valid Media Servers discovered on the network.
static MThread * gUPNPScannerThread
void GetMetadata(VideoMetadataListManager::metadata_list *list, meta_dir_node *node)
Fill the given metadata_list and meta_dir_node with the metadata of content retrieved from known medi...
QNetworkAccessManager * m_network
UPNPSubscription * m_subscription
void Stop(void)
Stops scanning.
void BrowseNextContainer(void)
For each known media server, find the next container which needs to be browsed and trigger sending of...
void customEvent(QEvent *event) override
Processes subscription and SSDP cache update events.
void ParseBrowse(const QUrl &url, QNetworkReply *reply)
Parse the XML returned from Content Directory Service browse request.
static UPNPScanner * gUPNPScanner
UPNPScanner(UPNPSubscription *sub)
void ScheduleUpdate(void)
static void Enable(bool enable, UPNPSubscription *sub=nullptr)
Creates or destroys the global UPNPScanner instance.
QDomDocument * FindResult(const QDomNode &n, uint &num, uint &total, uint &updateid)
static void ParseServiceList(QDomElement &element, QString &controlURL, QString &eventURL)
void Update(void)
Iterates through the list of known servers and initialises a connection by requesting the device desc...
QMultiMap< QUrl, QNetworkReply * > m_browseRequests
void GetServerContent(QString &usn, MediaServerItem *content, VideoMetadataListManager::metadata_list *list, meta_dir_node *node)
Recursively search a MediaServerItem for video metadata and add it to the metadata_list and meta_dir_...
void SendBrowseRequest(const QUrl &url, const QString &objectid)
Formulates and sends a ContentDirectory Service Browse Request to the given control URL,...
void CheckFailure(const QUrl &url)
Updates the logs for failed server connections.
static void ParseService(QDomElement &element, QString &controlURL, QString &eventURL)
void GetInitialMetadata(VideoMetadataListManager::metadata_list *list, meta_dir_node *node)
Fill the given metadata_list and meta_dir_node with the root media server metadata (i....
void timerEvent(QTimerEvent *event) override
Handles subscription renewal timer events.
void StartFullScan(void)
Instruct the UPNPScanner thread to start a full scan of metadata from known media servers.