summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorrbuj <[email protected]>2019-04-19 21:01:10 +0200
committerraveit65 <[email protected]>2019-04-29 15:07:26 +0200
commitc09e5228537e4bcf5c9a074c696b698ff8ead1a5 (patch)
tree4d7c5ed14dee43c2a517a294ebe74724ffddc29d /src
parentfc1f63b1c04cb6101f3a780e104a7f295c4d307a (diff)
downloadmate-system-monitor-c09e5228537e4bcf5c9a074c696b698ff8ead1a5.tar.bz2
mate-system-monitor-c09e5228537e4bcf5c9a074c696b698ff8ead1a5.tar.xz
Use g_date_time_format instead of filter_date
https://developer.gnome.org/glib/stable/glib-GDateTime.html#g-date-time-format
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am1
-rw-r--r--src/e_date.c207
-rw-r--r--src/e_date.h14
-rw-r--r--src/procproperties.cpp1
-rw-r--r--src/util.cpp35
-rw-r--r--src/util.h4
6 files changed, 35 insertions, 227 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index b32983d..0518134 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -38,7 +38,6 @@ mate_system_monitor_cpp_files = \
iconthemewrapper.cpp
mate_system_monitor_c_files = \
- e_date.c \
gsm_color_button.c
mate_system_monitor_h_files = \
diff --git a/src/e_date.c b/src/e_date.c
deleted file mode 100644
index c145c8b..0000000
--- a/src/e_date.c
+++ /dev/null
@@ -1,207 +0,0 @@
-#include <config.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-
-#include <string.h>
-
-#include "e_date.h"
-
-/*
- all this code comes from evolution
- - e-util.c
- - message-list.c
-*/
-
-
-static size_t e_strftime(char *s, size_t max, const char *fmt, const struct tm *tm)
-{
-#ifdef HAVE_LKSTRFTIME
- return strftime(s, max, fmt, tm);
-#else
- char *c, *ffmt, *ff;
- size_t ret;
-
- ffmt = g_strdup(fmt);
- ff = ffmt;
- while ((c = strstr(ff, "%l")) != NULL) {
- c[1] = 'I';
- ff = c;
- }
-
- ff = ffmt;
- while ((c = strstr(ff, "%k")) != NULL) {
- c[1] = 'H';
- ff = c;
- }
-
- ret = strftime(s, max, ffmt, tm);
- g_free(ffmt);
- return ret;
-#endif
-}
-
-
-/**
- * Function to do a last minute fixup of the AM/PM stuff if the locale
- * and gettext haven't done it right. Most English speaking countries
- * except the USA use the 24 hour clock (UK, Australia etc). However
- * since they are English nobody bothers to write a language
- * translation (gettext) file. So the locale turns off the AM/PM, but
- * gettext does not turn on the 24 hour clock. Leaving a mess.
- *
- * This routine checks if AM/PM are defined in the locale, if not it
- * forces the use of the 24 hour clock.
- *
- * The function itself is a front end on strftime and takes exactly
- * the same arguments.
- *
- * TODO: Actually remove the '%p' from the fixed up string so that
- * there isn't a stray space.
- **/
-
-static size_t e_strftime_fix_am_pm(char *s, size_t max, const char *fmt, const struct tm *tm)
-{
- char buf[10];
- char *sp;
- char *ffmt;
- size_t ret;
-
- if (strstr(fmt, "%p")==NULL && strstr(fmt, "%P")==NULL) {
- /* No AM/PM involved - can use the fmt string directly */
- ret=e_strftime(s, max, fmt, tm);
- } else {
- /* Get the AM/PM symbol from the locale */
- e_strftime (buf, 10, "%p", tm);
-
- if (buf[0]) {
- /**
- * AM/PM have been defined in the locale
- * so we can use the fmt string directly
- **/
- ret=e_strftime(s, max, fmt, tm);
- } else {
- /**
- * No AM/PM defined by locale
- * must change to 24 hour clock
- **/
- ffmt=g_strdup(fmt);
- for (sp=ffmt; (sp=strstr(sp, "%l")); sp++) {
- /**
- * Maybe this should be 'k', but I have never
- * seen a 24 clock actually use that format
- **/
- sp[1]='H';
- }
- for (sp=ffmt; (sp=strstr(sp, "%I")); sp++) {
- sp[1]='H';
- }
- ret=e_strftime(s, max, ffmt, tm);
- g_free(ffmt);
- }
- }
- return(ret);
-}
-
-static size_t
-e_utf8_strftime_fix_am_pm(char *s, size_t max, const char *fmt, const struct tm *tm)
-{
- size_t sz, ret;
- char *locale_fmt, *buf;
-
- locale_fmt = g_locale_from_utf8(fmt, -1, NULL, &sz, NULL);
- if (!locale_fmt)
- return 0;
-
- ret = e_strftime_fix_am_pm(s, max, locale_fmt, tm);
- if (!ret) {
- g_free (locale_fmt);
- return 0;
- }
-
- buf = g_locale_to_utf8(s, ret, NULL, &sz, NULL);
- if (!buf) {
- g_free (locale_fmt);
- return 0;
- }
-
- if (sz >= max) {
- char *tmp = buf + max - 1;
- tmp = g_utf8_find_prev_char(buf, tmp);
- if (tmp)
- sz = tmp - buf;
- else
- sz = 0;
- }
- memcpy(s, buf, sz);
- s[sz] = '\0';
- g_free(locale_fmt);
- g_free(buf);
- return sz;
-}
-
-
-static char *
-filter_date (time_t date)
-{
- time_t nowdate = time(NULL);
- time_t yesdate;
- struct tm then, now, yesterday;
- char buf[26];
- gboolean done = FALSE;
-
- if (date == 0)
- // xgettext: ? stands for unknown
- return g_strdup (_("?"));
-
- localtime_r (&date, &then);
- localtime_r (&nowdate, &now);
- if (then.tm_mday == now.tm_mday &&
- then.tm_mon == now.tm_mon &&
- then.tm_year == now.tm_year) {
- e_utf8_strftime_fix_am_pm (buf, 26, _("Today %l:%M %p"), &then);
- done = TRUE;
- }
- if (!done) {
- yesdate = nowdate - 60 * 60 * 24;
- localtime_r (&yesdate, &yesterday);
- if (then.tm_mday == yesterday.tm_mday &&
- then.tm_mon == yesterday.tm_mon &&
- then.tm_year == yesterday.tm_year) {
- e_utf8_strftime_fix_am_pm (buf, 26, _("Yesterday %l:%M %p"), &then);
- done = TRUE;
- }
- }
- if (!done) {
- int i;
- for (i = 2; i < 7; i++) {
- yesdate = nowdate - 60 * 60 * 24 * i;
- localtime_r (&yesdate, &yesterday);
- if (then.tm_mday == yesterday.tm_mday &&
- then.tm_mon == yesterday.tm_mon &&
- then.tm_year == yesterday.tm_year) {
- e_utf8_strftime_fix_am_pm (buf, 26, _("%a %l:%M %p"), &then);
- done = TRUE;
- break;
- }
- }
- }
- if (!done) {
- if (then.tm_year == now.tm_year) {
- e_utf8_strftime_fix_am_pm (buf, 26, _("%b %d %l:%M %p"), &then);
- } else {
- e_utf8_strftime_fix_am_pm (buf, 26, _("%b %d %Y"), &then);
- }
- }
-
- return g_strdup (buf);
-}
-
-
-
-
-char *
-procman_format_date_for_display(time_t d)
-{
- return filter_date(d);
-}
diff --git a/src/e_date.h b/src/e_date.h
deleted file mode 100644
index 2332612..0000000
--- a/src/e_date.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef H_PROCMAN_E_DATE_1135695432
-#define H_PROCMAN_E_DATE_1135695432
-
-#include <time.h>
-#include <glib.h>
-
-G_BEGIN_DECLS
-
-char *
-procman_format_date_for_display(time_t d);
-
-G_END_DECLS
-
-#endif /* H_PROCMAN_E_DATE_1135695432 */
diff --git a/src/procproperties.cpp b/src/procproperties.cpp
index d07da69..69266d7 100644
--- a/src/procproperties.cpp
+++ b/src/procproperties.cpp
@@ -29,7 +29,6 @@
#include "procproperties.h"
#include "proctable.h"
#include "util.h"
-#include "e_date.h"
enum
{
diff --git a/src/util.cpp b/src/util.cpp
index 14c559d..8548249 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -1,5 +1,6 @@
#include <config.h>
+#include <glib/gprintf.h>
#include <glib/gi18n.h>
#include <glib.h>
#include <gtk/gtk.h>
@@ -14,10 +15,36 @@
#include "util.h"
#include "procman.h"
-extern "C" {
-#include "e_date.h"
-}
+gchar *
+procman_format_date_for_display(time_t time_raw)
+{
+ gchar *result = NULL;
+ const char *format;
+ GDateTime *date_time, *today;
+ GTimeSpan date_age;
+
+ date_time = g_date_time_new_from_unix_local (time_raw);
+ today = g_date_time_new_now_local ();
+
+ date_age = g_date_time_difference (today, date_time);
+ if (date_age < G_TIME_SPAN_DAY) {
+ format = _("Today %l:%M %p");
+ } else if (date_age < 2 * G_TIME_SPAN_DAY) {
+ format = _("Yesterday %l:%M %p");
+ } else if (date_age < 7 * G_TIME_SPAN_DAY) {
+ format = _("%a %l:%M %p");
+ } else if (g_date_time_get_year (date_time) == g_date_time_get_year (today)) {
+ format = _("%b %d %l:%M %p");
+ } else {
+ format = _("%b %d %Y");
+ }
+
+ g_date_time_unref (today);
+ result = g_date_time_format (date_time, format);
+ g_date_time_unref (date_time);
+ return result;
+}
const char*
format_process_state(guint state)
@@ -518,7 +545,7 @@ namespace procman
g_value_unset(&value);
- char *str = procman_format_date_for_display(time);
+ gchar *str = procman_format_date_for_display(time);
g_object_set(renderer, "text", str, NULL);
g_free(str);
}
diff --git a/src/util.h b/src/util.h
index 0381698..75975d7 100644
--- a/src/util.h
+++ b/src/util.h
@@ -5,6 +5,7 @@
#include <glib.h>
#include <gtk/gtk.h>
+#include <time.h>
#include <string>
using std::string;
@@ -20,6 +21,9 @@ procman_make_label_for_mmaps_or_ofiles(const char *format,
gboolean
load_symbols(const char *module, ...) G_GNUC_NULL_TERMINATED;
+gchar *
+procman_format_date_for_display(time_t time_raw);
+
const char*
format_process_state(guint state);