import QtQuick import QtQuick.Controls import QtQuick.Layouts import "qml/components" as Components import "qml/pages" as Pages import "qml/buttons" as Buttons import "qml/dialogs" as Dialogs ApplicationWindow { id: root title: "Arch Linux Updater" width: 740 height: 960 minimumWidth: 740 minimumHeight: 560 maximumWidth: 1080 maximumHeight: 1460 visible: true color: Theme.color1 property string packageManager: "yay" property string sessionPassword: "" property bool consoleOpen: false Component.onCompleted: UpdateManager.checkUpdates() ColumnLayout { id: mainLayout anchors.fill: parent anchors.margins: Theme.baseMargins anchors.bottomMargin: Theme.baseMargins + consoleBar.height spacing: Theme.baseSpacing RowLayout { id: headerLayout Layout.maximumWidth: Number.POSITIVE_INFINITY Components.Title { id: title Layout.maximumWidth: Number.POSITIVE_INFINITY Layout.alignment: Qt.AlignBottom isChecking: UpdateManager.isChecking packageCount: UpdateManager.packageCount } Buttons.SettingsBtn { id: settingsButton Layout.alignment: Qt.AlignBottom } } Components.Line { id: line } Components.Tabs { id: tabs parentWidth: mainLayout.width } StackLayout { id: pages Layout.fillWidth: true Layout.fillHeight: true currentIndex: tabs.currentIndex Pages.UpdatePg { id: pgUpdate packageCount: UpdateManager.packageCount isChecking: UpdateManager.isChecking isUpdating: UpdateManager.isUpdating isInstalling: UpdateManager.isInstalling packages: UpdateManager.packages onUpdateRequested: { root.requestPrivileged("update", "") } } Pages.InstallPg { id: pgInstall } Pages.DeletePg { id: pgDelete } } } readonly property string consoleTitle: tabs.currentIndex === 0 ? "Консоль обновления" : tabs.currentIndex === 1 ? "Консоль установки" : "Консоль удаления" readonly property string consoleStatus: Utils.statusConsole(tabs.currentIndex, UpdateManager.isUpdating, UpdateManager.isInstalling, UpdateManager.isRemoving) readonly property var consoleLog: tabs.currentIndex === 0 ? UpdateManager.updateLog : tabs.currentIndex === 1 ? UpdateManager.installLog : UpdateManager.removalLog Components.ConsoleBar { id: consoleBar title: root.consoleTitle consoleOpen: root.consoleOpen status: root.consoleStatus onToggled: root.consoleOpen = !root.consoleOpen } Components.ConsolePanel { id: consolePanel anchors.bottom: consoleBar.top consoleOpen: root.consoleOpen status: root.consoleStatus title: root.consoleTitle consoleLogData: root.consoleLog } Dialogs.PasswordDialog { id: passwordDialog onPasswordEntered: (password) => { root.sessionPassword = password root.runPrivileged(passwordDialog.action, passwordDialog.packageName) } } function requestPrivileged(action, packageName) { if (root.sessionPassword !== "") { root.runPrivileged(action, packageName) return } passwordDialog.action = action passwordDialog.packageName = packageName passwordDialog.open() } function runPrivileged(action, packageName) { console.log("runPrivileged", root.sessionPassword) if (action == "update") UpdateManager.update(root.sessionPassword, root.packageManager) // else if (action === "install") UpdateManager.installPackage(packageName, password) // else UpdateManager.removePackage(packageName, password) } }