+ modest_text_utils_strftime (date_buf, BUF_SIZE, _("%X"), date);
+
+ return g_strdup(date_buf);
+}
+
+gboolean
+modest_text_utils_validate_email_address (const gchar *email_address)
+{
+ int count = 0;
+ const gchar *c = NULL, *domain = NULL;
+ static gchar *rfc822_specials = "()<>@,;:\\\"[]";
+
+ /* first we validate the name portion (name@domain) */
+ for (c = email_address; *c; c++) {
+ if (*c == '\"' &&
+ (c == email_address ||
+ *(c - 1) == '.' ||
+ *(c - 1) == '\"')) {
+ while (*++c) {
+ if (*c == '\"')
+ break;
+ if (*c == '\\' && (*++c == ' '))
+ continue;
+ if (*c <= ' ' || *c >= 127)
+ return FALSE;
+ }
+ if (!*c++)
+ return FALSE;
+ if (*c == '@')
+ break;
+ if (*c != '.')
+ return FALSE;
+ continue;
+ }
+ if (*c == '@')
+ break;
+ if (*c <= ' ' || *c >= 127)
+ return FALSE;
+ if (strchr(rfc822_specials, *c))
+ return FALSE;
+ }
+ if (c == email_address || *(c - 1) == '.')
+ return FALSE;
+
+ /* next we validate the domain portion (name@domain) */
+ if (!*(domain = ++c))
+ return FALSE;
+ do {
+ if (*c == '.') {
+ if (c == domain || *(c - 1) == '.')
+ return FALSE;
+ count++;
+ }
+ if (*c <= ' ' || *c >= 127)
+ return FALSE;
+ if (strchr(rfc822_specials, *c))
+ return FALSE;
+ } while (*++c);
+
+ return (count >= 1) ? TRUE : FALSE;
+}
+
+
+
+
+gchar *
+modest_text_utils_get_display_size (guint size)
+{
+ const guint KB=1024;
+ const guint MB=1024 * KB;
+ const guint GB=1024 * MB;
+ const guint TB=1024 * GB;
+
+ if (size < KB)
+ return g_strdup_printf (_("%0.1f Kb"), (double)size / KB);
+ else if (size < MB)
+ return g_strdup_printf (_("%d Kb"), size / KB);
+ else if (size < GB)
+ return g_strdup_printf (_("%d Mb"), size / MB);
+ else if (size < TB)
+ return g_strdup_printf (_("%d Gb"), size/ GB);
+ else
+ return g_strdup_printf (_("Very big"));