File indexing completed on 2024-05-12 04:46:01
0001 #include "fileproperties.h" 0002 #include <QFile> 0003 #include <QFileInfo> 0004 0005 #include <KUser> 0006 #include <QDebug> 0007 0008 // Only maxentries users are listed in the plugin 0009 // increase if you need more 0010 #define MAXENTRIES 1000 0011 0012 FileProperties::FileProperties(QObject *parent) : QObject(parent) 0013 { 0014 connect(this, &FileProperties::urlChanged, [this]() 0015 { 0016 this->setData (); 0017 }); 0018 } 0019 0020 const QUrl &FileProperties::url() const 0021 { 0022 return m_url; 0023 } 0024 0025 void FileProperties::setUrl(const QUrl &newUrl) 0026 { 0027 if (m_url == newUrl) 0028 return; 0029 m_url = newUrl; 0030 emit urlChanged(); 0031 } 0032 0033 bool Permission::checkPermission(const QUrl &url, const Permission::UserType &user, const Permission::PermissionType &type) 0034 { 0035 qDebug() << "Checkign permissions" <<url << user << type; 0036 0037 if(!url.isValid () || url.isEmpty () || !url.isLocalFile ()) 0038 { 0039 return false; 0040 } 0041 0042 qDebug() << "Checkign permissions" << user << type; 0043 0044 QFile file(url.toLocalFile ()); 0045 0046 auto permissions = file.permissions (); 0047 0048 switch(user) 0049 { 0050 case UserType::OWNER: 0051 switch(type) 0052 { 0053 case WRITE: 0054 return permissions & QFileDevice::WriteOwner; 0055 case READ: 0056 return permissions & QFileDevice::ReadOwner; 0057 case EXECUTE: 0058 return permissions & QFileDevice::ExeOwner; 0059 default: return false; 0060 } 0061 break; 0062 case UserType::GROUP: 0063 switch(type) 0064 { 0065 case WRITE: 0066 return permissions & QFileDevice::WriteGroup; 0067 case READ: 0068 return permissions & QFileDevice::ReadGroup; 0069 case EXECUTE: 0070 return permissions & QFileDevice::ExeGroup; 0071 default: return false; 0072 } 0073 break; 0074 case UserType::OTHER: 0075 switch(type) 0076 { 0077 case WRITE: 0078 return permissions & QFileDevice::WriteOther; 0079 case READ: 0080 return permissions & QFileDevice::ReadOther; 0081 case EXECUTE: 0082 return permissions & QFileDevice::ExeOther; 0083 default: return false; 0084 } 0085 break; 0086 } 0087 0088 return false; 0089 } 0090 0091 bool Permission::setPermission(const QUrl &url, const UserType &user, const PermissionType &key, const bool &state) 0092 { 0093 qDebug() << "Setting permissions" <<url << user << key << state; 0094 0095 if(!url.isValid () || url.isEmpty () || !url.isLocalFile ()) 0096 { 0097 return false; 0098 } 0099 0100 qDebug() << "Setting permissions" <<url << user << key << state; 0101 0102 QFile file(url.toLocalFile ()); 0103 auto permissions = file.permissions (); 0104 qDebug() << "Setting permissions" <<url << user << key << state << permissions; 0105 0106 switch(user) 0107 { 0108 case UserType::OWNER: 0109 switch(key) 0110 { 0111 case WRITE: 0112 permissions = state ? (permissions | QFileDevice::WriteOwner) : (permissions & (~QFileDevice::WriteOwner)); 0113 break; 0114 case READ: 0115 if(state) 0116 { 0117 permissions = permissions | QFileDevice::ReadOwner; 0118 }else 0119 { 0120 permissions = permissions & (~QFileDevice::ReadOwner); 0121 qDebug() << "Setting permissions" <<permissions; 0122 0123 } 0124 break; 0125 case EXECUTE: 0126 permissions = state ? (permissions | QFileDevice::ExeOwner) : (permissions & (~QFileDevice::ExeOwner)); 0127 break; 0128 default: return false; 0129 } 0130 break; 0131 0132 case UserType::GROUP: 0133 switch(key) 0134 { 0135 case WRITE: 0136 permissions = state ? (permissions | QFileDevice::WriteGroup) : (permissions & (~QFileDevice::WriteGroup)); 0137 break; 0138 case READ: 0139 permissions = state ? (permissions | QFileDevice::ReadGroup) : (permissions & (~QFileDevice::ReadGroup)); 0140 break; 0141 case EXECUTE: 0142 permissions = state ? (permissions | QFileDevice::ExeGroup) : (permissions & (~QFileDevice::ExeGroup)); 0143 break; 0144 default: return false; 0145 } 0146 break; 0147 0148 case UserType::OTHER: 0149 switch(key) 0150 { 0151 case WRITE: 0152 permissions = state ? (permissions | QFileDevice::WriteOther) : (permissions & (~QFileDevice::WriteOther)); 0153 break; 0154 case READ: 0155 permissions = state ? (permissions | QFileDevice::ReadOther) : (permissions & (~QFileDevice::ReadOther)); 0156 break; 0157 case EXECUTE: 0158 permissions = state ? (permissions | QFileDevice::ExeOther) : (permissions & (~QFileDevice::ExeOther)); 0159 break; 0160 default: return false; 0161 } 0162 break; 0163 } 0164 0165 return file.setPermissions (permissions); 0166 } 0167 0168 void FileProperties::setData() 0169 { 0170 if(!m_url.isValid () || m_url.isEmpty () || !m_url.isLocalFile ()) 0171 { 0172 return; 0173 } 0174 0175 QFileInfo file(m_url.toLocalFile ()); 0176 m_group = file.group (); 0177 m_owner = file.owner (); 0178 0179 emit groupChanged (); 0180 emit ownerChanged (); 0181 0182 0183 m_users = KUser::allUserNames (MAXENTRIES); 0184 m_groups = KUser().groupNames (MAXENTRIES); 0185 // sort both lists 0186 m_users.sort(); 0187 m_groups.sort(); 0188 0189 emit groupsChanged (); 0190 emit usersChanged (); 0191 } 0192 0193 const QString &FileProperties::group() const 0194 { 0195 return m_group; 0196 } 0197 0198 void FileProperties::setGroup(const QString &newGroup) 0199 { 0200 if (m_group == newGroup) 0201 return; 0202 m_group = newGroup; 0203 emit groupChanged(); 0204 } 0205 0206 const QStringList &FileProperties::groups() const 0207 { 0208 return m_groups; 0209 } 0210 0211 const QString &FileProperties::owner() const 0212 { 0213 return m_owner; 0214 } 0215 0216 void FileProperties::setOwner(const QString &newOwner) 0217 { 0218 if (m_owner == newOwner) 0219 return; 0220 m_owner = newOwner; 0221 emit ownerChanged(); 0222 } 0223 0224 const QStringList &FileProperties::users() const 0225 { 0226 return m_users; 0227 } 0228 0229 Permission::Permission(QObject *parent) : QObject(parent) 0230 { 0231 connect(this, &Permission::urlChanged, [this]() 0232 { 0233 this->setData(); 0234 }); 0235 0236 connect(this, &Permission::userChanged, [this]() 0237 { 0238 this->setData(); 0239 }); 0240 } 0241 0242 const QUrl &Permission::url() const 0243 { 0244 return m_url; 0245 } 0246 0247 void Permission::setUrl(const QUrl &newUrl) 0248 { 0249 if (m_url == newUrl) 0250 return; 0251 m_url = newUrl; 0252 emit urlChanged(); 0253 } 0254 0255 Permission::PermissionType Permission::type() const 0256 { 0257 return m_type; 0258 } 0259 0260 void Permission::setType(PermissionType newType) 0261 { 0262 if (m_type == newType) 0263 return; 0264 m_type = newType; 0265 emit typeChanged(); 0266 } 0267 0268 Permission::UserType Permission::user() const 0269 { 0270 return m_user; 0271 } 0272 0273 void Permission::setUser(UserType newUser) 0274 { 0275 if (m_user == newUser) 0276 return; 0277 m_user = newUser; 0278 emit userChanged(); 0279 } 0280 0281 bool Permission::read() const 0282 { 0283 return m_read; 0284 } 0285 0286 void Permission::setRead(bool newRead) 0287 { 0288 if (m_read == newRead) 0289 return; 0290 0291 if(!Permission::setPermission (m_url, m_user, PermissionType::READ, newRead)) 0292 { 0293 qDebug() << "Setting permissions failed"; 0294 0295 return; 0296 } 0297 0298 qDebug() << "Setting permissions?"; 0299 0300 m_read = newRead; 0301 emit readChanged(); 0302 0303 } 0304 0305 bool Permission::write() const 0306 { 0307 return m_write; 0308 } 0309 0310 void Permission::setWrite(bool newWrite) 0311 { 0312 if (m_write == newWrite) 0313 return; 0314 0315 if(!Permission::setPermission (m_url, m_user, PermissionType::WRITE, newWrite)) 0316 { 0317 return; 0318 } 0319 0320 m_write = newWrite; 0321 emit writeChanged(); 0322 } 0323 0324 bool Permission::execute() const 0325 { 0326 return m_execute; 0327 } 0328 0329 void Permission::setExecute(bool newExecute) 0330 { 0331 if (m_execute == newExecute) 0332 return; 0333 0334 if(!Permission::setPermission (m_url, m_user, PermissionType::EXECUTE, newExecute)) 0335 { 0336 return; 0337 } 0338 0339 m_execute = newExecute; 0340 emit executeChanged(); 0341 } 0342 0343 void Permission::setData() 0344 { 0345 m_read = Permission::checkPermission (m_url, m_user, PermissionType::READ); 0346 m_write = Permission::checkPermission (m_url, m_user, PermissionType::WRITE); 0347 m_execute = Permission::checkPermission (m_url, m_user, PermissionType::EXECUTE); 0348 emit this->readChanged (); 0349 emit this->writeChanged (); 0350 emit this->executeChanged (); 0351 }