calendar: Use relative times for notification timestamps
For notifications in the message list, it is usually less relevant when exactly it occurred, but how long ago. So rather than showing the exact time and expecting the user to figuring out the timespan themselves, change the format to something human readable. https://bugzilla.gnome.org/show_bug.cgi?id=775763
This commit is contained in:
parent
c4f2bb5fe0
commit
f3d1c78c7d
@ -1,6 +1,7 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
|
||||||
const Clutter = imports.gi.Clutter;
|
const Clutter = imports.gi.Clutter;
|
||||||
|
const Gettext = imports.gettext;
|
||||||
const Gio = imports.gi.Gio;
|
const Gio = imports.gi.Gio;
|
||||||
const GLib = imports.gi.GLib;
|
const GLib = imports.gi.GLib;
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
@ -163,6 +164,41 @@ function _handleSpawnError(command, err) {
|
|||||||
Main.notifyError(title, err.message);
|
Main.notifyError(title, err.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function formatTimeSpan(date) {
|
||||||
|
let now = GLib.DateTime.new_now_local();
|
||||||
|
|
||||||
|
let timespan = now.difference(date);
|
||||||
|
|
||||||
|
let minutesAgo = timespan / GLib.TIME_SPAN_MINUTE;
|
||||||
|
let hoursAgo = timespan / GLib.TIME_SPAN_HOUR;
|
||||||
|
let daysAgo = timespan / GLib.TIME_SPAN_DAY;
|
||||||
|
let weeksAgo = daysAgo / 7;
|
||||||
|
let monthsAgo = daysAgo / 30;
|
||||||
|
let yearsAgo = weeksAgo / 52;
|
||||||
|
|
||||||
|
if (minutesAgo < 5)
|
||||||
|
return _("Just now");
|
||||||
|
if (hoursAgo < 1)
|
||||||
|
return Gettext.ngettext("%d minute ago",
|
||||||
|
"%d minutes ago", minutesAgo).format(minutesAgo);
|
||||||
|
if (daysAgo < 1)
|
||||||
|
return Gettext.ngettext("%d hour ago",
|
||||||
|
"%d hours ago", hoursAgo).format(hoursAgo);
|
||||||
|
if (daysAgo < 2)
|
||||||
|
return _("Yesterday");
|
||||||
|
if (daysAgo < 15)
|
||||||
|
return Gettext.ngettext("%d day ago",
|
||||||
|
"%d days ago", daysAgo).format(daysAgo);
|
||||||
|
if (weeksAgo < 8)
|
||||||
|
return Gettext.ngettext("%d week ago",
|
||||||
|
"%d weeks ago", weeksAgo).format(weeksAgo);
|
||||||
|
if (yearsAgo < 1)
|
||||||
|
return Gettext.ngettext("%d month ago",
|
||||||
|
"%d months ago", monthsAgo).format(monthsAgo);
|
||||||
|
return Gettext.ngettext("%d year ago",
|
||||||
|
"%d years ago", yearsAgo).format(yearsAgo);
|
||||||
|
}
|
||||||
|
|
||||||
function formatTime(time, params) {
|
function formatTime(time, params) {
|
||||||
let date;
|
let date;
|
||||||
// HACK: The built-in Date type sucks at timezones, which we need for the
|
// HACK: The built-in Date type sucks at timezones, which we need for the
|
||||||
|
@ -957,9 +957,12 @@ const NotificationSection = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_createTimeLabel: function(datetime) {
|
_createTimeLabel: function(datetime) {
|
||||||
let label = Util.createTimeLabel(datetime);
|
let label = new St.Label({ style_class: 'event-time',
|
||||||
label.style_class = 'event-time',
|
x_align: Clutter.ActorAlign.START });
|
||||||
label.x_align = Clutter.ActorAlign.START;
|
label.connect('notify::mapped', () => {
|
||||||
|
if (label.mapped)
|
||||||
|
label.text = Util.formatTimeSpan(datetime);
|
||||||
|
});
|
||||||
return label;
|
return label;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user