melawy-plasma-plasmoid-arch.../com.github.Melawy.ArchUpdate/contents/ui/main.qml

233 lines
6.3 KiB
QML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Controls 2.15
import org.kde.plasma.plasmoid 2.0
import org.kde.plasma.core 2.1 as PlasmaCore
import "../_toolbox" as Tb
import "../service" as Sv
// Корневой элемент
Item {
id: root
property string appTitle: Plasmoid.configuration.title
property string iconDefault: "../assets/default.svg"
property string iconRefresh: "../assets/refresh.svg"
property string iconReadyToUpgrade: "../assets/ready.svg"
property string iconError: "../assets/error.svg"
property string mainIcon: iconDefault
property string total: "0"
property bool showNotification: Plasmoid.configuration.showNotification
property string notifyText: ""
property string errorText: ""
property int defaultStatus: -1
property int normalStatus: 0
property int checkingUpdatesStatus: 1
property int readyStatus: 2
property int errorStatus: 3
property int upgradeStatus: defaultStatus
property string listOfPackages: ""
Plasmoid.preferredRepresentation: Plasmoid.compactRepresentation
Plasmoid.compactRepresentation: Compact {}
Plasmoid.fullRepresentation: Full {}
// load one instance of each needed service
Sv.Updater{ id: updater }
Tb.Cmd { id: cmd }
PlasmaCore.DataSource {
id: notificationSource
engine: "notifications"
connectedSources: "org.freedesktop.Notifications"
}
function strip(text) {
return text.replace(/[^a-zA-Z0-9 \(\)\[\]:;\.,\_\-><\n\t]/g, "")
//return text.replace(/[^a-zA-Z0-9 \n\t]/g, "")
}
function createNotification(text) {
var service = notificationSource.serviceForSource("notification");
var operation = service.operationDescription("createNotification");
operation.appName = i18n(appTitle);
operation["appIcon"] = iconDefault;
operation.summary = text || i18n("Some text")
operation["body"] = "";
operation["timeout"] = 10000;
service.startOperationCall(operation);
}
// updates the icon according to the refresh status
function updateUi() {
switch (upgradeStatus) {
case normalStatus:
mainIcon = iconDefault
break
case checkingUpdatesStatus:
mainIcon = iconRefresh
//total = 0
total = "↻"
break
case readyStatus:
mainIcon = iconReadyToUpgrade
break
case errorStatus:
mainIcon=iconError
total = 0
break
default:
mainIcon = iconDefault
total = 0
}
}
// map the cmd signal with the widget
Connections {
target: cmd
function onExited(cmd, exitCode, exitStatus, stdout, stderr) {
// Если запущена проверка обновлений
if (cmd == Plasmoid.configuration.commandForCheckingUpdates) {
// Если ошибок при проверке обновлений нет
if (exitCode == 0) {
var stdoutText = strip(stdout)
var lines = parseInt(stdoutText.trim().split('\n').length, 10)
// Если стандарный вывод можно подсчитать по строкам
if (lines) {
total = lines
listOfPackages = stdoutText
if (showNotification) {
notifyText = "Найдено " + total + " пакетов для обновления"
createNotification(notifyText)
}
upgradeStatus = readyStatus
updateUi()
}
// Иначе
else {
total = 0
upgradeStatus = normalStatus
updateUi()
upgradeStatus = defaultStatus
}
}
// Если есть ошибки при проверке обновлений
else if (exitCode == 1) {
if (stderr.length > 0) {
errorText = strip(stderr).trim()
if (showNotification) {
notifyText = "Ошибка обновления: \n" + errorText
createNotification(notifyText)
}
}
upgradeStatus = errorStatus
updateUi()
upgradeStatus = defaultStatus
}
// Если нет пакетов для обновлений
else if (exitCode == 2) {
upgradeStatus = defaultStatus
updateUi()
}
// Неправильно указана программа в настройках
else if (exitCode == 127) {
if (showNotification) {
notifyText = "Возможно программа, указанная в настройках, не существует на этом компьютере"
createNotification(notifyText)
}
upgradeStatus = defaultStatus
updateUi()
}
// Иначе
else {
upgradeStatus = defaultStatus
updateUi()
}
}
// Если запущено обновление пакетов
else if (cmd == Plasmoid.configuration.commandForUpgrade) {
// Если обновление было успешно
if (exitCode == 0) {
total = 0
listOfPackages = ""
if (showNotification) {
notifyText = "Обновление успешно завершено"
createNotification(notifyText)
}
upgradeStatus = normalStatus
updateUi()
upgradeStatus = defaultStatus
}
// Неправильно указана программа в настройках
else if (exitCode == 127) {
if (showNotification) {
notifyText = "Возможно программа, указанная в настройках, не существует на этом компьютере"
createNotification(notifyText)
}
upgradeStatus = defaultStatus
updateUi()
}
// Если есть ошибки при обновлении пакетов
else {
if (showNotification) {
notifyText = "Обновление завершено с ошибками"
createNotification(notifyText)
}
upgradeStatus = errorStatus
updateUi()
upgradeStatus = defaultStatus
}
}
}
function onConnected(source) {
upgradeStatus = checkingUpdatesStatus
updateUi()
}
}
}