1 /*
2     This file is part of the KDE project
3     SPDX-FileCopyrightText: 1997, 2001 Stephan Kulow <coolo@kde.org>
4     SPDX-FileCopyrightText: 1999 Preston Brown <pbrown@kde.org>
5     SPDX-FileCopyrightText: 1999-2002 Hans Petter Bieker <bieker@kde.org>
6     SPDX-FileCopyrightText: 2002 Lukas Tinkl <lukas@kde.org>
7     SPDX-FileCopyrightText: 2007 Bernhard Loos <nhuh.put@web.de>
8     SPDX-FileCopyrightText: 2009, 2010 John Layt <john@layt.net>
9 
10     SPDX-License-Identifier: LGPL-2.0-only
11 */
12 
13 #include "kjobtrackerformatters_p.h"
14 #include <KFormat>
15 
16 #include <QCoreApplication>
17 
byteSize(double size)18 QString KJobTrackerFormatters::byteSize(double size)
19 {
20     return KFormat().formatByteSize(size);
21 }
22 
daysDuration(int n)23 QString KJobTrackerFormatters::daysDuration(int n)
24 {
25     //~ singular %n day
26     //~ plural %n days
27     return QCoreApplication::translate("KJobTrackerFormatters", "%n day(s)", "@item:intext", n);
28 }
29 
hoursDuration(int n)30 QString KJobTrackerFormatters::hoursDuration(int n)
31 {
32     //~ singular %n hour
33     //~ plural %n hours
34     return QCoreApplication::translate("KJobTrackerFormatters", "%n hour(s)", "@item:intext", n);
35 }
36 
minutesDuration(int n)37 QString KJobTrackerFormatters::minutesDuration(int n)
38 {
39     //~ singular %n minute
40     //~ plural %n minutes
41     return QCoreApplication::translate("KJobTrackerFormatters", "%n minute(s)", "@item:intext", n);
42 }
43 
secondsDuration(int n)44 QString KJobTrackerFormatters::secondsDuration(int n)
45 {
46     //~ singular %n second
47     //~ plural %n seconds
48     return QCoreApplication::translate("KJobTrackerFormatters", "%n second(s)", "@item:intext", n);
49 }
50 
duration(unsigned long mSec)51 QString KJobTrackerFormatters::duration(unsigned long mSec)
52 {
53     unsigned long ms = mSec;
54     int days = ms / (24 * 3600000);
55     ms = ms % (24 * 3600000);
56     int hours = ms / 3600000;
57     ms = ms % 3600000;
58     int minutes = ms / 60000;
59     ms = ms % 60000;
60     int seconds = qRound(ms / 1000.0);
61 
62     // Handle correctly problematic case #1 (look at KLocaleTest::prettyFormatDuration()
63     // at klocaletest.cpp)
64     if (seconds == 60) {
65         return duration(mSec - ms + 60000);
66     }
67 
68     if (days && hours) {
69         return QCoreApplication::translate("KJobTrackerFormatters", "%1 and %2", "@item:intext days and hours.").arg(daysDuration(days), hoursDuration(hours));
70     } else if (days) {
71         return daysDuration(days);
72     } else if (hours && minutes) {
73         return QCoreApplication::translate("KJobTrackerFormatters", "%1 and %2", "@item:intext hours and minutes.")
74             .arg(hoursDuration(hours), minutesDuration(minutes));
75     } else if (hours) {
76         return hoursDuration(hours);
77     } else if (minutes && seconds) {
78         return QCoreApplication::translate("KJobTrackerFormatters", "%1 and %2", "@item:intext minutes and seconds.")
79             .arg(minutesDuration(minutes), secondsDuration(seconds));
80     } else if (minutes) {
81         return minutesDuration(minutes);
82     } else {
83         return secondsDuration(seconds);
84     }
85 }
86