File indexing completed on 2024-05-19 05:00:42

0001 /*
0002     SPDX-FileCopyrightText: 2004 Jakub Stachowski <qbast@go2.pl>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-only
0005 */
0006 
0007 #include "watcher.h"
0008 
0009 // KF
0010 #include <KDirNotify>
0011 #include <KDNSSD/ServiceBrowser>
0012 #include <KDNSSD/ServiceTypeBrowser>
0013 // Qt
0014 #include <QUrl>
0015 
0016 Watcher::Watcher() 
0017     : refcount(1), updateNeeded(false)
0018 {
0019 }
0020 
0021 ServiceWatcher::ServiceWatcher(const QString& type) : Watcher(), m_type(type)
0022 {
0023     browser = new KDNSSD::ServiceBrowser(type);
0024     browser->setParent(this);
0025     connect(browser, &KDNSSD::ServiceBrowser::serviceAdded,
0026         this, &ServiceWatcher::scheduleUpdate);
0027     connect(browser, &KDNSSD::ServiceBrowser::serviceRemoved,
0028         this, &ServiceWatcher::scheduleUpdate);
0029     connect(browser, &KDNSSD::ServiceBrowser::finished,
0030         this, &ServiceWatcher::finished);
0031     browser->startBrowse();
0032     
0033 }
0034 
0035 TypeWatcher::TypeWatcher() : Watcher()
0036 {
0037     typebrowser = new KDNSSD::ServiceTypeBrowser();
0038     typebrowser->setParent(this);
0039     connect(typebrowser, &KDNSSD::ServiceTypeBrowser::serviceTypeAdded,
0040         this, &TypeWatcher::scheduleUpdate);
0041     connect(typebrowser, &KDNSSD::ServiceTypeBrowser::serviceTypeRemoved,
0042         this, &TypeWatcher::scheduleUpdate);
0043     connect(typebrowser, &KDNSSD::ServiceTypeBrowser::finished, this, &TypeWatcher::finished);
0044     typebrowser->startBrowse();
0045 }
0046 
0047 QUrl TypeWatcher::constructUrl() const
0048 {
0049     return QUrl(QStringLiteral("zeroconf:/"));
0050 }
0051 
0052 QUrl ServiceWatcher::constructUrl() const
0053 {
0054     QUrl url(QStringLiteral("zeroconf:/"));
0055     url.setPath(m_type + QChar::fromLatin1('/'));
0056     return url;
0057 }
0058 
0059 void Watcher::scheduleUpdate()
0060 {
0061     updateNeeded=true;
0062 }
0063 
0064 void Watcher::finished() 
0065 {
0066     if (updateNeeded) org::kde::KDirNotify::emitFilesAdded( constructUrl() );
0067     updateNeeded=false;
0068 }
0069 
0070 #include "moc_watcher.cpp"