diff options
author | John Sullivan <sullivan@src.gnome.org> | 2000-01-25 23:38:46 +0000 |
---|---|---|
committer | John Sullivan <sullivan@src.gnome.org> | 2000-01-25 23:38:46 +0000 |
commit | c1e840df79970774e319916befafa4e905ed0881 (patch) | |
tree | edce1122a3d813d9504b69fb7fcc9baa5bfbc4a1 /libnautilus-private | |
parent | 961f18d60052151784eaf6244a22cfc57ee30cc5 (diff) | |
download | nautilus-c1e840df79970774e319916befafa4e905ed0881.tar.gz |
Better text for date column in list view.
Diffstat (limited to 'libnautilus-private')
-rw-r--r-- | libnautilus-private/Makefile.am | 2 | ||||
-rw-r--r-- | libnautilus-private/nautilus-directory.c | 71 | ||||
-rw-r--r-- | libnautilus-private/nautilus-glib-extensions.c | 112 | ||||
-rw-r--r-- | libnautilus-private/nautilus-glib-extensions.h | 39 | ||||
-rw-r--r-- | libnautilus-private/nautilus-lib-self-check-functions.h | 1 |
5 files changed, 216 insertions, 9 deletions
diff --git a/libnautilus-private/Makefile.am b/libnautilus-private/Makefile.am index ac1553286..cb8f4ab4f 100644 --- a/libnautilus-private/Makefile.am +++ b/libnautilus-private/Makefile.am @@ -34,6 +34,7 @@ libnautilusinclude_HEADERS= \ nautilus-debug.h \ nautilus-directory.h \ nautilus-file-utilities.h \ + nautilus-glib-extensions.h \ nautilus-gtk-extensions.h \ nautilus-icons-controller.h \ nautilus-icons-view-icon-item.h \ @@ -55,6 +56,7 @@ libnautilus_la_SOURCES=$(nautilus_idl_sources) \ nautilus-debug.c \ nautilus-directory.c \ nautilus-file-utilities.c \ + nautilus-glib-extensions.c \ nautilus-gtk-extensions.c \ nautilus-icons-controller.c \ nautilus-icons-view-icon-item.c \ diff --git a/libnautilus-private/nautilus-directory.c b/libnautilus-private/nautilus-directory.c index e90043ca3..a546600d9 100644 --- a/libnautilus-private/nautilus-directory.c +++ b/libnautilus-private/nautilus-directory.c @@ -43,6 +43,7 @@ #include <gnome-xml/tree.h> #include <gnome-xml/xmlmemory.h> +#include "nautilus-glib-extensions.h" #include "nautilus-gtk-macros.h" #include "nautilus-lib-self-check-functions.h" #include "nautilus-string.h" @@ -845,20 +846,72 @@ nautilus_file_get_uri (NautilusFile *file) gchar * nautilus_file_get_date_as_string (NautilusFile *file) { - /* Note: There's also accessed time and changed time. - * Accessed time doesn't seem worth showing to the user. + time_t now_secs; + struct tm *now; + struct tm *file_time; + GDate *today; + GDate *file_date; + gchar *result; + guint32 file_date_age; + + /* Note: This uses modified time. There's also accessed time and + * changed time. Accessed time doesn't seem worth showing to the user. * Changed time is only subtly different from modified time * (changed time includes "metadata" changes like file permissions). * We should not display both, but we might change our minds as to * which one is better. */ - g_return_val_if_fail (file != NULL, NULL); - /* Note that ctime is a funky function that returns a - * string that you're not supposed to free. + /* Each call to localtime clobbers a static variable. So to compare two + * time structures, one of the calls needs to use localtime_r to + * fill in a locally created time structure. This call still clobbers + * the static variable, so the other localtime call must be later. + */ + file_time = g_new0 (struct tm, 1); + localtime_r (&file->info->mtime, file_time); + file_date = nautilus_g_date_new_tm (file_time); + + now_secs = time (NULL); + now = localtime (&now_secs); + today = nautilus_g_date_new_tm (now); + + file_date_age = g_date_julian (today) - g_date_julian (file_date); + + g_date_free (file_date); + g_date_free (today); + + /* Format varies depending on how old the date is. This minimizes + * the length (and thus clutter & complication) of typical dates + * while providing sufficient detail for recent dates to make + * them maximally understandable at a glance. Keep all format + * strings separate rather than combining bits & pieces for + * internationalization's sake. */ - return g_strdup (ctime (&file->info->mtime)); + + if (file_date_age == 0) + { + /* today, use special word */ + result = nautilus_strdup_strftime (_("today %-I:%M %p"), file_time); + } + else if (file_date_age == 1) + { + /* yesterday, use special word */ + result = nautilus_strdup_strftime (_("yesterday %-I:%M %p"), file_time); + } + else if (file_date_age < 7) + { + /* current week, include day of week */ + result = nautilus_strdup_strftime (_("%A %-m/%-d/%y %-I:%M %p"), file_time); + } + else + { + result = nautilus_strdup_strftime (_("%-m/%-d/%y %-I:%M %p"), file_time); + } + + g_free (file_time); + + return result; } /** @@ -1015,7 +1068,7 @@ nautilus_self_check_directory (void) directory = nautilus_directory_get ("file:///etc"); - g_assert (g_hash_table_size (directory_objects) == 1); + NAUTILUS_CHECK_INTEGER_RESULT (g_hash_table_size (directory_objects), 1); file_count = 0; nautilus_directory_get_files (directory, get_files_cb, &data_dummy); @@ -1025,11 +1078,11 @@ nautilus_self_check_directory (void) gtk_object_unref (GTK_OBJECT (directory)); - g_assert (g_hash_table_size (directory_objects) == 0); + NAUTILUS_CHECK_INTEGER_RESULT (g_hash_table_size (directory_objects), 0); directory = nautilus_directory_get ("file:///etc"); - g_assert (g_hash_table_size (directory_objects) == 1); + NAUTILUS_CHECK_INTEGER_RESULT (g_hash_table_size (directory_objects), 1); NAUTILUS_CHECK_STRING_RESULT (nautilus_directory_get_metadata (directory, "TEST", "default"), "value"); diff --git a/libnautilus-private/nautilus-glib-extensions.c b/libnautilus-private/nautilus-glib-extensions.c new file mode 100644 index 000000000..d2cd91c36 --- /dev/null +++ b/libnautilus-private/nautilus-glib-extensions.c @@ -0,0 +1,112 @@ +/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ + +/* nautilus-glib-extensions.c - implementation of new functions that conceptually + belong in glib. Perhaps some of these will be + actually rolled into glib someday. + + Copyright (C) 2000 Eazel, Inc. + + The Gnome Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The Gnome Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the Gnome Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + + Authors: John Sullivan <sullivan@eazel.com> +*/ + +#include "nautilus-glib-extensions.h" + +#include "nautilus-lib-self-check-functions.h" + + +/** + * nautilus_g_date_new_tm: + * + * Get a new GDate * for the date represented by a tm struct. + * The caller is responsible for g_free-ing the result. + * @time_pieces: Pointer to a tm struct representing the date to be converted. + * + * Returns: Newly allocated date. + * + **/ +GDate * +nautilus_g_date_new_tm (struct tm *time_pieces) +{ + /* tm uses 0-based months; GDate uses 1-based months. + * tm_year needs 1900 added to get the full year. + */ + return g_date_new_dmy (time_pieces->tm_mday, + time_pieces->tm_mon + 1, + time_pieces->tm_year + 1900); +} + +/** + * nautilus_strdup_strftime: + * + * Cover for standard date-and-time-formatting routine strftime that returns + * a newly-allocated string of the correct size. The caller is responsible + * for g_free-ing the returned string. + * @format: format string to pass to strftime. See strftime documentation + * for details. + * @time_pieces: date/time, in struct format. + * + * Return value: Newly allocated string containing the formatted time. + **/ +char * +nautilus_strdup_strftime (const char *format, struct tm *time_pieces) +{ + char *result; + size_t string_length; + + string_length = strftime (NULL, UINT_MAX, format, time_pieces); + result = g_malloc (string_length + 1); + strftime (result, string_length + 1, format, time_pieces); + + return result; +} + +#if !defined (NAUTILUS_OMIT_SELF_CHECK) + +static void +check_tm_to_g_date (time_t time) +{ + struct tm *before_conversion; + struct tm *after_conversion; + GDate *date; + + before_conversion = localtime (&time); + date = nautilus_g_date_new_tm (before_conversion); + + after_conversion = g_new0 (struct tm, 1); + g_date_to_struct_tm (date, after_conversion); + + NAUTILUS_CHECK_INTEGER_RESULT (after_conversion->tm_mday, + before_conversion->tm_mday); + NAUTILUS_CHECK_INTEGER_RESULT (after_conversion->tm_mon, + before_conversion->tm_mon); + NAUTILUS_CHECK_INTEGER_RESULT (after_conversion->tm_year, + before_conversion->tm_year); + + g_free (after_conversion); +} + +void +nautilus_self_check_glib_extensions (void) +{ + check_tm_to_g_date (0); /* lower limit */ + check_tm_to_g_date ((time_t) -1); /* upper limit */ + check_tm_to_g_date (time (NULL)); /* current time */ +} + +#endif /* !NAUTILUS_OMIT_SELF_CHECK */ + diff --git a/libnautilus-private/nautilus-glib-extensions.h b/libnautilus-private/nautilus-glib-extensions.h new file mode 100644 index 000000000..6725f7b86 --- /dev/null +++ b/libnautilus-private/nautilus-glib-extensions.h @@ -0,0 +1,39 @@ +/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ + +/* nautilus-glib-extensions.h - interface for new functions that conceptually + belong in glib. Perhaps some of these will be + actually rolled into glib someday. + + Copyright (C) 2000 Eazel, Inc. + + The Gnome Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The Gnome Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the Gnome Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + + Authors: John Sullivan <sullivan@eazel.com> +*/ + +#ifndef NAUTILUS_GLIB_EXTENSIONS_H +#define NAUTILUS_GLIB_EXTENSIONS_H 1 + +#include <time.h> +#include <glib.h> + +/* Date & time functions */ + +GDate * nautilus_g_date_new_tm (struct tm *time_pieces); +char * nautilus_strdup_strftime (const char *format, + struct tm *time_pieces); + +#endif /* NAUTILUS_GLIB_EXTENSIONS_H */ diff --git a/libnautilus-private/nautilus-lib-self-check-functions.h b/libnautilus-private/nautilus-lib-self-check-functions.h index eff8b1312..ebcc32be1 100644 --- a/libnautilus-private/nautilus-lib-self-check-functions.h +++ b/libnautilus-private/nautilus-lib-self-check-functions.h @@ -42,6 +42,7 @@ void nautilus_run_lib_self_checks (void); macro(nautilus_self_check_background) \ macro(nautilus_self_check_directory) \ macro(nautilus_self_check_gdk_extensions) \ + macro(nautilus_self_check_glib_extensions) \ /* Add new self-check functions to the list above this line. */ /* Generate prototypes for all the functions. */ |