diff --git a/doomsday/engine/portable/src/updater.cpp b/doomsday/engine/portable/src/updater.cpp
index 68a3625a78..4c537f0eba 100644
--- a/doomsday/engine/portable/src/updater.cpp
+++ b/doomsday/engine/portable/src/updater.cpp
@@ -572,7 +572,7 @@ void Updater_ShowSettings(void)
void Updater_PrintLastUpdated(void)
{
- UpdaterSettings st;
- Con_Message("Latest update check was made on %s.\n",
- st.lastCheckTime().asText(de::Time::FriendlyFormat).toAscii().constData());
+ de::Time when = UpdaterSettings().lastCheckTime();
+ Con_Message("Latest update check was made %s.\n",
+ UpdaterSettings().lastCheckAgo().toAscii().constData());
}
diff --git a/doomsday/engine/portable/src/updater/updatersettings.cpp b/doomsday/engine/portable/src/updater/updatersettings.cpp
index 144d584fcd..6ef1e02200 100644
--- a/doomsday/engine/portable/src/updater/updatersettings.cpp
+++ b/doomsday/engine/portable/src/updater/updatersettings.cpp
@@ -147,3 +147,30 @@ de::String UpdaterSettings::defaultDownloadPath()
{
return QDesktopServices::storageLocation(QDesktopServices::TempLocation);
}
+
+de::String UpdaterSettings::lastCheckAgo() const
+{
+ de::Time when = lastCheckTime();
+ de::Time::Delta delta = when.since();
+
+ int t;
+ if(delta < 60.0)
+ {
+ t = delta.asMilliSeconds() / 1000;
+ return de::String("%1 second%2 ago").arg(t).arg(t != 1? "s" : "");
+ }
+
+ t = delta.asMinutes();
+ if(t <= 60)
+ {
+ return de::String("%1 minute%2 ago").arg(t).arg(t != 1? "s" : "");
+ }
+
+ t = delta.asHours();
+ if(t <= 24)
+ {
+ return de::String("%1 hour%2 ago").arg(t).arg(t != 1? "s" : "");
+ }
+
+ return de::String("on " + when.asText(de::Time::FriendlyFormat));
+}
diff --git a/doomsday/engine/portable/src/updater/updatersettings.h b/doomsday/engine/portable/src/updater/updatersettings.h
index 87f955671f..10a6939671 100644
--- a/doomsday/engine/portable/src/updater/updatersettings.h
+++ b/doomsday/engine/portable/src/updater/updatersettings.h
@@ -62,6 +62,12 @@ class UpdaterSettings
de::String downloadPath() const;
de::String pathToDeleteAtStartup() const;
+ /**
+ * @return Human-readable description of when the latest update
+ * check was made.
+ */
+ de::String lastCheckAgo() const;
+
void setFrequency(Frequency freq);
void setChannel(Channel channel);
void setLastCheckTime(const de::Time& time);
diff --git a/doomsday/engine/portable/src/updater/updatersettingsdialog.cpp b/doomsday/engine/portable/src/updater/updatersettingsdialog.cpp
index f84d05c8ca..5824618140 100644
--- a/doomsday/engine/portable/src/updater/updatersettingsdialog.cpp
+++ b/doomsday/engine/portable/src/updater/updatersettingsdialog.cpp
@@ -113,8 +113,8 @@ struct UpdaterSettingsDialog::Instance
{
UpdaterSettings st;
- lastChecked->setText(tr("Last checked on %1.")
- .arg(st.lastCheckTime().asText(de::Time::FriendlyFormat)));
+ lastChecked->setText(tr("Last checked %1.")
+ .arg(st.lastCheckAgo()));
autoCheck->setChecked(!st.onlyCheckManually());
freqList->setEnabled(!st.onlyCheckManually());