/* * SPDX-FileCopyrightText: 2021 Devin Lin * * SPDX-License-Identifier: GPL-2.0-or-later */ .import org.kde.notificationmanager as NotificationManager .import QtQml 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 i18n("now"); } // 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 ""; }