89 lines
1.9 KiB
QML
89 lines
1.9 KiB
QML
pragma Singleton
|
|
|
|
import Quickshell
|
|
import Quickshell.Io
|
|
import QtQuick
|
|
|
|
Singleton {
|
|
id: root
|
|
|
|
readonly property string defaultUserFile: "/etc/zshell-greeter/default-user"
|
|
property int selectedIndex: 0
|
|
readonly property var selectedUser: selectedIndex >= 0 && selectedIndex < users.length ? users[selectedIndex] : null
|
|
readonly property string selectedUsername: selectedUser ? selectedUser.username : ""
|
|
property var users: []
|
|
|
|
function saveDefaultUser(): void {
|
|
if (selectedUser) {
|
|
defaultUserStorage.setText(selectedUser.username);
|
|
}
|
|
}
|
|
|
|
function selectNext(): void {
|
|
if (users.length === 0)
|
|
return;
|
|
selectedIndex = (selectedIndex + 1) % users.length;
|
|
}
|
|
|
|
function selectPrevious(): void {
|
|
if (users.length === 0)
|
|
return;
|
|
selectedIndex = (selectedIndex - 1 + users.length) % users.length;
|
|
}
|
|
|
|
function selectUser(username: string): bool {
|
|
for (let i = 0; i < users.length; i++) {
|
|
if (users[i].username === username) {
|
|
selectedIndex = i;
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
Process {
|
|
id: userLister
|
|
|
|
command: ["python3", Quickshell.shellDir + "/scripts/get-users"]
|
|
running: true
|
|
|
|
stdout: StdioCollector {
|
|
onStreamFinished: {
|
|
try {
|
|
root.users = JSON.parse(text);
|
|
|
|
if (root.users.length > 0) {
|
|
if (defaultUserStorage.loaded) {
|
|
const defaultUsername = defaultUserStorage.text().trim();
|
|
if (defaultUsername && !root.selectUser(defaultUsername)) {
|
|
root.selectedIndex = 0;
|
|
}
|
|
} else {
|
|
root.selectedIndex = 0;
|
|
}
|
|
}
|
|
} catch (e) {
|
|
console.error("Failed to parse users:", e);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
FileView {
|
|
id: defaultUserStorage
|
|
|
|
path: root.defaultUserFile
|
|
preload: true
|
|
|
|
onLoadFailed: {}
|
|
onLoaded: {
|
|
if (root.users.length > 0) {
|
|
const defaultUsername = text().trim();
|
|
if (defaultUsername) {
|
|
root.selectUser(defaultUsername);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|