File indexing completed on 2024-04-21 05:01:41

0001 /*
0002     Smb4K's container class for information about a workgroup.
0003 
0004     SPDX-FileCopyrightText: 2008-2023 Alexander Reinholdt <alexander.reinholdt@kdemail.net>
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 // application specific includes
0009 #include "smb4kworkgroup.h"
0010 #include "smb4kglobal.h"
0011 
0012 // Qt includes
0013 #include <QAbstractSocket>
0014 #include <QUrl>
0015 
0016 // KDE includes
0017 #include <KIconLoader>
0018 
0019 using namespace Smb4KGlobal;
0020 
0021 class Smb4KWorkgroupPrivate
0022 {
0023 public:
0024     QUrl masterURL;
0025     QHostAddress masterIP;
0026 };
0027 
0028 Smb4KWorkgroup::Smb4KWorkgroup(const QString &name)
0029     : Smb4KBasicNetworkItem(Workgroup)
0030     , d(new Smb4KWorkgroupPrivate)
0031 {
0032     //
0033     // Set the URL of the workgroup
0034     //
0035     pUrl->setScheme(QStringLiteral("smb"));
0036     pUrl->setHost(name);
0037 
0038     //
0039     // Set the icon
0040     //
0041     *pIcon = KDE::icon(QStringLiteral("network-workgroup"));
0042 }
0043 
0044 Smb4KWorkgroup::Smb4KWorkgroup(const Smb4KWorkgroup &workgroup)
0045     : Smb4KBasicNetworkItem(workgroup)
0046     , d(new Smb4KWorkgroupPrivate)
0047 {
0048     // Copy the private variables
0049     //
0050     *d = *workgroup.d;
0051 
0052     //
0053     // Set the icon if necessary
0054     //
0055     if (pIcon->isNull()) {
0056         *pIcon = KDE::icon(QStringLiteral("network-workgroup"));
0057     }
0058 }
0059 
0060 Smb4KWorkgroup::Smb4KWorkgroup()
0061     : Smb4KBasicNetworkItem(Workgroup)
0062     , d(new Smb4KWorkgroupPrivate)
0063 {
0064     //
0065     // Set the URL
0066     //
0067     pUrl->setScheme(QStringLiteral("smb"));
0068 
0069     //
0070     // Set the icon
0071     //
0072     *pIcon = KDE::icon(QStringLiteral("network-workgroup"));
0073 }
0074 
0075 Smb4KWorkgroup::~Smb4KWorkgroup()
0076 {
0077 }
0078 
0079 void Smb4KWorkgroup::setWorkgroupName(const QString &name)
0080 {
0081     pUrl->setHost(name);
0082     pUrl->setScheme(QStringLiteral("smb"));
0083 }
0084 
0085 QString Smb4KWorkgroup::workgroupName() const
0086 {
0087     return pUrl->host().toUpper();
0088 }
0089 
0090 void Smb4KWorkgroup::setMasterBrowserName(const QString &name)
0091 {
0092     d->masterURL.setHost(name);
0093     d->masterURL.setScheme(QStringLiteral("smb"));
0094 }
0095 
0096 QString Smb4KWorkgroup::masterBrowserName() const
0097 {
0098     return d->masterURL.host().toUpper();
0099 }
0100 
0101 bool Smb4KWorkgroup::hasMasterBrowser() const
0102 {
0103     return !d->masterURL.host().isEmpty();
0104 }
0105 
0106 void Smb4KWorkgroup::setMasterBrowserIpAddress(const QString &ip)
0107 {
0108     d->masterIP.setAddress(ip);
0109 }
0110 
0111 void Smb4KWorkgroup::setMasterBrowserIpAddress(const QHostAddress &address)
0112 {
0113     if (!address.isNull() && address.protocol() != QAbstractSocket::UnknownNetworkLayerProtocol) {
0114         d->masterIP = address;
0115     }
0116 }
0117 
0118 QString Smb4KWorkgroup::masterBrowserIpAddress() const
0119 {
0120     return d->masterIP.toString();
0121 }
0122 
0123 bool Smb4KWorkgroup::hasMasterBrowserIpAddress() const
0124 {
0125     return !d->masterIP.isNull();
0126 }
0127 
0128 void Smb4KWorkgroup::update(Smb4KWorkgroup *workgroup)
0129 {
0130     if (QString::compare(workgroupName(), workgroup->workgroupName()) == 0) {
0131         setMasterBrowserName(workgroup->masterBrowserName());
0132         setMasterBrowserIpAddress(workgroup->masterBrowserIpAddress());
0133     }
0134 }
0135 
0136 Smb4KWorkgroup &Smb4KWorkgroup::operator=(const Smb4KWorkgroup &other)
0137 {
0138     *d = *other.d;
0139     return *this;
0140 }