File indexing completed on 2024-04-14 05:29:59

0001 /*
0002     SPDX-FileCopyrightText: 2013 Reza Fatahilah Shah <rshah0385@kireihana.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 #include "usersmodel.h"
0007 
0008 #include <KLocalizedString>
0009 #include <KUser>
0010 
0011 UsersModel::UsersModel(QObject *parent)
0012     : QAbstractListModel(parent)
0013 {
0014     populate();
0015 }
0016 
0017 UsersModel::~UsersModel()
0018 {
0019 }
0020 
0021 int UsersModel::rowCount(const QModelIndex &parent) const
0022 {
0023     Q_UNUSED(parent)
0024 
0025     return mUserList.size();
0026 }
0027 
0028 QVariant UsersModel::data(const QModelIndex &index, int role) const
0029 {
0030     auto row = index.row();
0031     if (row < 0 || row >= mUserList.count()) {
0032         return QVariant();
0033     }
0034     const KUser &user = mUserList[row];
0035 
0036     switch (role) {
0037     case Qt::DisplayRole:
0038         return user.loginName();
0039     case UidRole:
0040         return user.userId().nativeId();
0041     }
0042 
0043     return QVariant();
0044 }
0045 
0046 void UsersModel::add(const KUser &user)
0047 {
0048     beginInsertRows(QModelIndex(), mUserList.count(), mUserList.count());
0049 
0050     mUserList.append(KUser(user));
0051 
0052     endInsertRows();
0053 }
0054 
0055 void UsersModel::populate()
0056 {
0057     mUserList.clear();
0058 
0059     QList<KUser> userList = KUser::allUsers();
0060 
0061     KUser user;
0062 
0063     foreach (user, userList) {
0064         K_UID uuid = user.userId().nativeId();
0065 
0066         // invalid user
0067         if (uuid == (uid_t)-1) {
0068             continue;
0069         }
0070 
0071         add(user);
0072         /*qDebug() << user.loginName() << ",uid" << uuid;
0073         qDebug() << " home:" << user.homeDir();
0074         qDebug() << " isSuperUser:" << user.isSuperUser() << ",isValid:" << user.isValid();
0075         qDebug() << " faceIconPath:" << user.faceIconPath();*/
0076     }
0077 }
0078 
0079 int UsersModel::indexOf(const QString &user)
0080 {
0081     if (user.isEmpty()) {
0082         return 0;
0083     }
0084     // find user index
0085     for (int i = 0; i < mUserList.size(); ++i) {
0086         if (mUserList.at(i).loginName() == user) {
0087             return i;
0088         }
0089     }
0090     // user not found
0091     return 0;
0092 }