#define BOOKMARK_NAME_ATTRIBUTE "name"
#define BOOKMARK_EXEC_ATTRIBUTE "exec"
#define BOOKMARK_COUNT_ATTRIBUTE "count"
-#define BOOKMARK_TIMESTAMP_ATTRIBUTE "timestamp"
+#define BOOKMARK_TIMESTAMP_ATTRIBUTE "timestamp" /* deprecated by "modified" */
+#define BOOKMARK_MODIFIED_ATTRIBUTE "modified"
#define BOOKMARK_HREF_ATTRIBUTE "href"
#define BOOKMARK_TYPE_ATTRIBUTE "type"
retval->name = g_strdup (name);
retval->exec = NULL;
retval->count = 0;
- retval->stamp = time (NULL);
+ retval->stamp = 0;
return retval;
}
bookmark_app_info_dump (BookmarkAppInfo *app_info)
{
gchar *retval;
- gchar *name, *exec;
+ gchar *name, *exec, *modified, *count;
g_warn_if_fail (app_info != NULL);
name = g_markup_escape_text (app_info->name, -1);
exec = g_markup_escape_text (app_info->exec, -1);
-
- retval = g_strdup_printf (" <%s:%s %s=\"%s\" %s=\"%s\" %s=\"%ld\" %s=\"%u\"/>\n",
- BOOKMARK_NAMESPACE_NAME,
- BOOKMARK_APPLICATION_ELEMENT,
- BOOKMARK_NAME_ATTRIBUTE, name,
- BOOKMARK_EXEC_ATTRIBUTE, exec,
- BOOKMARK_TIMESTAMP_ATTRIBUTE, (time_t) app_info->stamp,
- BOOKMARK_COUNT_ATTRIBUTE, app_info->count);
+ modified = timestamp_to_iso8601 (app_info->stamp);
+ count = g_strdup_printf ("%u", app_info->count);
+
+ retval = g_strconcat (" "
+ "<" BOOKMARK_NAMESPACE_NAME ":" BOOKMARK_APPLICATION_ELEMENT
+ " " BOOKMARK_NAME_ATTRIBUTE "=\"", name, "\""
+ " " BOOKMARK_EXEC_ATTRIBUTE "=\"", exec, "\""
+ " " BOOKMARK_MODIFIED_ATTRIBUTE "=\"", modified, "\""
+ " " BOOKMARK_COUNT_ATTRIBUTE "=\"", count, "\"/>\n",
+ NULL);
g_free (name);
g_free (exec);
+ g_free (modified);
+ g_free (count);
return retval;
}
add_error = NULL;
g_bookmark_file_add_item (parse_data->bookmark_file,
- item,
- &add_error);
+ item,
+ &add_error);
if (add_error)
{
bookmark_item_free (item);
const gchar **attribute_values,
GError **error)
{
- const gchar *name, *exec, *count, *stamp;
+ const gchar *name, *exec, *count, *stamp, *modified;
const gchar *attr;
gint i;
BookmarkItem *item;
g_warn_if_fail ((parse_data != NULL) && (parse_data->state == STATE_APPLICATION));
i = 0;
- name = exec = count = stamp = NULL;
+ name = exec = count = stamp = modified = NULL;
for (attr = attribute_names[i]; attr != NULL; attr = attribute_names[++i])
{
if (IS_ATTRIBUTE (attr, BOOKMARK_NAME_ATTRIBUTE))
count = attribute_values[i];
else if (IS_ATTRIBUTE (attr, BOOKMARK_TIMESTAMP_ATTRIBUTE))
stamp = attribute_values[i];
+ else if (IS_ATTRIBUTE (attr, BOOKMARK_MODIFIED_ATTRIBUTE))
+ modified = attribute_values[i];
else
{
g_set_error (error, G_MARKUP_ERROR,
ai->count = atoi (count);
else
ai->count = 1;
-
- if (stamp)
- ai->stamp = (time_t) atol (stamp);
+
+ if (modified)
+ ai->stamp = timestamp_from_iso8601 (modified);
else
- ai->stamp = time (NULL);
+ {
+ /* the timestamp attribute has been deprecated but we still parse
+ * it for backward compatibility
+ */
+ if (stamp)
+ ai->stamp = (time_t) atol (stamp);
+ else
+ ai->stamp = time (NULL);
+ }
}
static void
goto out;
else
retval = g_string_append (retval, "\n");
-
+
+ /* the items are stored in reverse order */
for (l = g_list_last (bookmark->items);
l != NULL;
l = l->prev)
retval = g_string_append (retval, item_dump);
- g_free (item_dump);
+ g_free (item_dump);
}
out:
GQuark
g_bookmark_file_error_quark (void)
{
- return g_quark_from_static_string ("egg-bookmark-file-error-quark");
+ return g_quark_from_static_string ("g-bookmark-file-error-quark");
}
n_items = g_list_length (bookmark->items);
uris = g_new0 (gchar *, n_items + 1);
-
+
+ /* the items are stored in reverse order, so we walk the list backward */
for (l = g_list_last (bookmark->items), i = 0; l != NULL; l = l->prev)
{
BookmarkItem *item = (BookmarkItem *) l->data;
* @href: the URI of the icon for the bookmark, or %NULL
* @mime_type: the MIME type of the icon for the bookmark
*
- * Sets the icon for the bookmark for @uri. If @href is %NULL, unsets
- * the currently set icon.
+ * Sets the icon for the bookmark for @uri. If @href is %NULL, unsets
+ * the currently set icon. @href can either be a full URL for the icon
+ * file or the icon name following the Icon Naming specification.
*
- * If no bookmark for @uri is found it is created.
+ * If no bookmark for @uri is found one is created.
*
* Since: 2.12
*/
if (time_->tv_usec != 0)
{
-#define ISO_8601_FRAC_LEN 28
-#define ISO_8601_FRAC_FORMAT "%%Y-%%m-%%dT%%H:%%M:%%S.%06ldZ"
- gchar *format = g_strdup_printf (ISO_8601_FRAC_FORMAT, time_->tv_usec);
-
- retval = g_new0 (gchar, ISO_8601_FRAC_LEN + 1);
- strftime (retval, ISO_8601_FRAC_LEN, format, tm);
- g_free (format);
+ /* ISO 8601 date and time format, with fractionary seconds:
+ * YYYY-MM-DDTHH:MM:SS.MMMMMMZ
+ */
+ retval = g_strdup_printf ("%d-%d-%dT%d:%d:%d.%06ldZ",
+ tm->tm_year + 1900,
+ tm->tm_mon + 1,
+ tm->tm_mday,
+ tm->tm_hour,
+ tm->tm_min,
+ tm->tm_sec,
+ time_->tv_usec);
}
else
{
-#define ISO_8601_LEN 21
-#define ISO_8601_FORMAT "%Y-%m-%dT%H:%M:%SZ"
- retval = g_new0 (gchar, ISO_8601_LEN + 1);
- strftime (retval, ISO_8601_LEN, ISO_8601_FORMAT, tm);
+ /* ISO 8601 date and time format:
+ * YYYY-MM-DDTHH:MM:SSZ
+ */
+ retval = g_strdup_printf ("%d-%d-%dT%d:%d:%dZ",
+ tm->tm_year + 1900,
+ tm->tm_mon + 1,
+ tm->tm_mday,
+ tm->tm_hour,
+ tm->tm_min,
+ tm->tm_sec);
}
return retval;