mirror of
https://invent.kde.org/marcoa/shift-shell.git
synced 2026-04-26 14:23:09 +00:00
Move from a C++ library + QML plugin to a QML plugin only for simplicity, since the homescreen switching architecture will be done from Plasma, and so use of the shell library only needs to be from QML.
91 lines
3.7 KiB
JavaScript
91 lines
3.7 KiB
JavaScript
/*
|
|
* SPDX-FileCopyrightText: 2021 Devin Lin <devin@kde.org>
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
|
*/
|
|
|
|
.import org.kde.notificationmanager 1.0 as NotificationManager
|
|
.import QtQml 2.15 as QtQml
|
|
|
|
function determineNotificationHeadingText(notificationItem) {
|
|
if (notificationItem.notificationType === NotificationManager.Notifications.JobType) {
|
|
if (notificationItem.jobState === NotificationManager.Notifications.JobStateSuspended) {
|
|
if (notificationItem.summary) {
|
|
return i18nc("Job name, e.g. Copying is paused", "%1 (Paused)", notificationItem.summary);
|
|
}
|
|
} else if (notificationItem.jobState === NotificationManager.Notifications.JobStateStopped) {
|
|
if (notificationItem.jobError) {
|
|
if (notificationItem.summary) {
|
|
return i18nc("Job name, e.g. Copying has failed", "%1 (Failed)", notificationItem.summary);
|
|
} else {
|
|
return i18n("Job Failed");
|
|
}
|
|
} else if (notificationItem.summary) {
|
|
return i18ndc("plasma_applet_org.kde.plasma.notifications", "Job name, e.g. Copying has finished", "%1 (Finished)", notificationItem.summary);
|
|
}
|
|
return i18nd("plasma_applet_org.kde.plasma.notifications", "Job Finished");
|
|
}
|
|
}
|
|
// some apps use their app name as summary, avoid showing the same text twice
|
|
// try very hard to match the two
|
|
if (notificationItem.summary && notificationItem.summary.toLocaleLowerCase().trim() !== notificationItem.applicationName.toLocaleLowerCase().trim()) {
|
|
return notificationItem.summary;
|
|
}
|
|
return "";
|
|
}
|
|
|
|
function generateNotificationHeaderAgoText(time, jobState) {
|
|
if (!time || isNaN(time.getTime()) || jobState === NotificationManager.Notifications.JobStateRunning) {
|
|
return "";
|
|
}
|
|
|
|
const deltaMinutes = Math.floor((Date.now() - time.getTime()) / 1000 / 60);
|
|
if (deltaMinutes < 1) {
|
|
return "";
|
|
}
|
|
|
|
// Received less than an hour ago, show relative minutes
|
|
if (deltaMinutes < 60) {
|
|
return i18nc("Notification was added minutes ago, keep short", "%1m ago", deltaMinutes);
|
|
}
|
|
// Received less than a day ago, show time, 22 hours so the time isn't as ambiguous between today and yesterday
|
|
if (deltaMinutes < 60 * 22) {
|
|
return Qt.formatTime(time, Qt.locale().timeFormat(QtQml.Locale.ShortFormat).replace(/.ss?/i, ""));
|
|
}
|
|
|
|
// Otherwise show relative date (Yesterday, "Last Sunday", or just date if too far in the past)
|
|
return KCoreAddons.Format.formatRelativeDate(time, QtQml.Locale.ShortFormat);
|
|
}
|
|
|
|
function generateNotificationHeaderRemainingText(notificationType, jobState, jobDetails) {
|
|
if (notificationType !== NotificationManager.Notifications.JobType || jobState !== NotificationManager.Notifications.JobStateRunning) {
|
|
return "";
|
|
}
|
|
|
|
const details = jobDetails;
|
|
if (!details || !details.speed) {
|
|
return "";
|
|
}
|
|
|
|
var remaining = details.totalBytes - details.processedBytes;
|
|
if (remaining <= 0) {
|
|
return "";
|
|
}
|
|
|
|
var eta = remaining / details.speed;
|
|
if (eta < 0.5) { // Avoid showing "0 seconds remaining"
|
|
return "";
|
|
}
|
|
|
|
if (eta < 60) { // 1 minute
|
|
return i18nc("seconds remaining, keep short", "%1 s remaining", Math.round(eta));
|
|
}
|
|
if (eta < 60 * 60) {// 1 hour
|
|
return i18nc("minutes remaining, keep short", "%1m remaining", Math.round(eta / 60));
|
|
}
|
|
if (eta < 60 * 60 * 5) { // 5 hours max, if it takes even longer there's no real point in showing that
|
|
return i18nc("hours remaining, keep short", "%1h remaining", Math.round(eta / 60 / 60));
|
|
}
|
|
|
|
return "";
|
|
}
|