File indexing completed on 2024-04-14 03:52:58

0001 /*
0002     SPDX-FileCopyrightText: 2010 Rodrigo Belem <rclbelem@gmail.com>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005 */
0006 
0007 #include "ksambasharedata.h"
0008 #include "ksambasharedata_p.h"
0009 
0010 #include "ksambashare.h"
0011 #include "ksambashare_p.h"
0012 
0013 // TODO: add support for this samba options
0014 // usershare allow guests=P_BOOL,FLAG_ADVANCED
0015 // usershare max shares=P_INTEGER,FLAG_ADVANCED
0016 // usershare owner only=P_BOOL,FLAG_ADVANCED
0017 // usershare path=P_STRING,FLAG_ADVANCED
0018 // usershare prefix allow list=P_LIST,FLAG_ADVANCED
0019 // usershare prefix deny list=P_LIST,FLAG_ADVANCED
0020 // usershare template share=P_STRING,FLAG_ADVANCED
0021 
0022 KSambaShareData::KSambaShareData()
0023     : dd(new KSambaShareDataPrivate)
0024 {
0025 }
0026 
0027 KSambaShareData::KSambaShareData(const KSambaShareData &other)
0028     : dd(other.dd)
0029 {
0030 }
0031 
0032 KSambaShareData::~KSambaShareData()
0033 {
0034 }
0035 
0036 QString KSambaShareData::name() const
0037 {
0038     return dd->name;
0039 }
0040 
0041 QString KSambaShareData::path() const
0042 {
0043     return dd->path;
0044 }
0045 
0046 QString KSambaShareData::comment() const
0047 {
0048     return dd->comment;
0049 }
0050 
0051 QString KSambaShareData::acl() const
0052 {
0053     return dd->acl;
0054 }
0055 
0056 KSambaShareData::GuestPermission KSambaShareData::guestPermission() const
0057 {
0058     return (dd->guestPermission == QLatin1Char('n')) ? GuestsNotAllowed : GuestsAllowed;
0059 }
0060 
0061 KSambaShareData::UserShareError KSambaShareData::setName(const QString &name)
0062 {
0063     if (!KSambaShare::instance()->d_func()->isShareNameValid(name)) {
0064         return UserShareNameInvalid;
0065     }
0066 
0067     if (!KSambaShare::instance()->d_func()->isShareNameAvailable(name)) {
0068         return UserShareNameInUse;
0069     }
0070 
0071     if (!dd->name.isEmpty()) {
0072         dd.detach();
0073     }
0074 
0075     dd->name = name;
0076 
0077     return UserShareNameOk;
0078 }
0079 
0080 KSambaShareData::UserShareError KSambaShareData::setPath(const QString &path)
0081 {
0082     UserShareError result = KSambaShare::instance()->d_func()->isPathValid(path);
0083     if (result == UserSharePathOk) {
0084         dd->path = path;
0085     }
0086 
0087     return result;
0088 }
0089 
0090 KSambaShareData::UserShareError KSambaShareData::setComment(const QString &comment)
0091 {
0092     dd->comment = comment;
0093 
0094     return UserShareCommentOk;
0095 }
0096 
0097 KSambaShareData::UserShareError KSambaShareData::setAcl(const QString &acl)
0098 {
0099     UserShareError result = KSambaShare::instance()->d_func()->isAclValid(acl);
0100     if (result == UserShareAclOk) {
0101         dd->acl = acl;
0102     }
0103 
0104     return result;
0105 }
0106 
0107 KSambaShareData::UserShareError KSambaShareData::setGuestPermission(const GuestPermission &permission)
0108 {
0109     UserShareError result = KSambaShare::instance()->d_func()->guestsAllowed(permission);
0110     if (result == UserShareGuestsOk) {
0111         dd->guestPermission = (permission == GuestsNotAllowed) ? QStringLiteral("n") : QStringLiteral("y");
0112     }
0113 
0114     return result;
0115 }
0116 
0117 KSambaShareData::UserShareError KSambaShareData::save()
0118 {
0119     if (dd->name.isEmpty()) {
0120         return UserShareNameInvalid;
0121     } else if (dd->path.isEmpty()) {
0122         return UserSharePathInvalid;
0123     } else {
0124         return KSambaShare::instance()->d_func()->add(*this);
0125     }
0126 }
0127 
0128 KSambaShareData::UserShareError KSambaShareData::remove()
0129 {
0130     if (dd->name.isEmpty()) {
0131         return UserShareNameInvalid;
0132     } else {
0133         return KSambaShare::instance()->d_func()->remove(*this);
0134     }
0135 }
0136 
0137 KSambaShareData &KSambaShareData::operator=(const KSambaShareData &other)
0138 {
0139     if (&other != this) {
0140         dd = other.dd;
0141     }
0142 
0143     return *this;
0144 }
0145 
0146 bool KSambaShareData::operator==(const KSambaShareData &other) const
0147 {
0148     return other.dd == dd;
0149 }
0150 
0151 bool KSambaShareData::operator!=(const KSambaShareData &other) const
0152 {
0153     return !(&other == this);
0154 }