Render history dates directly without age column or render callback
Resurrect sokoke_days_between for calculating age in days.
This commit is contained in:
parent
b4a414f371
commit
bee4615d10
3 changed files with 94 additions and 92 deletions
|
@ -1145,6 +1145,37 @@ sokoke_time_t_to_julian (const time_t* timestamp)
|
||||||
return julian;
|
return julian;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sokoke_days_between:
|
||||||
|
* @day1: a time_t timestamp value
|
||||||
|
* @day2: a time_t timestamp value
|
||||||
|
*
|
||||||
|
* Calculates the number of days between two timestamps.
|
||||||
|
*
|
||||||
|
* Return value: an integer.
|
||||||
|
**/
|
||||||
|
gint
|
||||||
|
sokoke_days_between (const time_t* day1,
|
||||||
|
const time_t* day2)
|
||||||
|
{
|
||||||
|
GDate* date1;
|
||||||
|
GDate* date2;
|
||||||
|
gint age;
|
||||||
|
|
||||||
|
date1 = g_date_new ();
|
||||||
|
date2 = g_date_new ();
|
||||||
|
|
||||||
|
g_date_set_time_t (date1, *day1);
|
||||||
|
g_date_set_time_t (date2, *day2);
|
||||||
|
|
||||||
|
age = g_date_days_between (date1, date2);
|
||||||
|
|
||||||
|
g_date_free (date1);
|
||||||
|
g_date_free (date2);
|
||||||
|
|
||||||
|
return age;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* sokoke_register_stock_items:
|
* sokoke_register_stock_items:
|
||||||
*
|
*
|
||||||
|
|
|
@ -182,6 +182,10 @@ sokoke_action_create_popup_menu_item (GtkAction* action);
|
||||||
gint64
|
gint64
|
||||||
sokoke_time_t_to_julian (const time_t* timestamp);
|
sokoke_time_t_to_julian (const time_t* timestamp);
|
||||||
|
|
||||||
|
gint
|
||||||
|
sokoke_days_between (const time_t* day1,
|
||||||
|
const time_t* day2);
|
||||||
|
|
||||||
void
|
void
|
||||||
sokoke_register_stock_items (void);
|
sokoke_register_stock_items (void);
|
||||||
|
|
||||||
|
|
|
@ -142,8 +142,7 @@ midori_history_clear_db (MidoriHistory* history)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
midori_history_remove_item_from_db (MidoriHistory* history,
|
midori_history_remove_item_from_db (MidoriHistory* history,
|
||||||
KatzeItem* item,
|
KatzeItem* item)
|
||||||
int age)
|
|
||||||
{
|
{
|
||||||
gchar* sqlcmd;
|
gchar* sqlcmd;
|
||||||
sqlite3* db;
|
sqlite3* db;
|
||||||
|
@ -173,7 +172,7 @@ midori_history_remove_item_from_db (MidoriHistory* history,
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
midori_history_read_from_db (MidoriHistory* history,
|
midori_history_read_from_db (MidoriHistory* history,
|
||||||
GtkTreeModel* model,
|
GtkTreeStore* model,
|
||||||
GtkTreeIter* parent,
|
GtkTreeIter* parent,
|
||||||
int req_day)
|
int req_day)
|
||||||
{
|
{
|
||||||
|
@ -188,9 +187,8 @@ midori_history_read_from_db (MidoriHistory* history,
|
||||||
db = g_object_get_data (G_OBJECT (history->array), "db");
|
db = g_object_get_data (G_OBJECT (history->array), "db");
|
||||||
|
|
||||||
if (req_day == 0)
|
if (req_day == 0)
|
||||||
sqlcmd = g_strdup ("SELECT day, date, "
|
sqlcmd = g_strdup ("SELECT day, date "
|
||||||
"(strftime ('%s','now') - date) / 86400 as age "
|
"FROM history GROUP BY day ORDER BY day ASC");
|
||||||
" FROM history GROUP BY day ORDER BY day ASC");
|
|
||||||
else
|
else
|
||||||
sqlcmd = g_strdup_printf ("SELECT uri, title, date, day "
|
sqlcmd = g_strdup_printf ("SELECT uri, title, date, day "
|
||||||
" FROM history WHERE day = '%d' "
|
" FROM history WHERE day = '%d' "
|
||||||
|
@ -210,24 +208,59 @@ midori_history_read_from_db (MidoriHistory* history,
|
||||||
const unsigned char* title;
|
const unsigned char* title;
|
||||||
sqlite3_int64 date;
|
sqlite3_int64 date;
|
||||||
sqlite3_int64 day;
|
sqlite3_int64 day;
|
||||||
sqlite3_int64 age;
|
|
||||||
gchar token[50];
|
|
||||||
|
|
||||||
if (req_day == 0)
|
if (req_day == 0)
|
||||||
{
|
{
|
||||||
|
time_t current_time;
|
||||||
|
gint age;
|
||||||
|
gchar token[50];
|
||||||
|
gchar* sdate;
|
||||||
|
|
||||||
day = sqlite3_column_int64 (statement, 0);
|
day = sqlite3_column_int64 (statement, 0);
|
||||||
date = sqlite3_column_int64 (statement, 1);
|
date = sqlite3_column_int64 (statement, 1);
|
||||||
age = sqlite3_column_int64 (statement, 2);
|
|
||||||
|
|
||||||
item = katze_item_new ();
|
item = katze_item_new ();
|
||||||
katze_item_set_added (item, day);
|
katze_item_set_added (item, day);
|
||||||
strftime (token, sizeof (token), "%x", localtime ((time_t *)&date));
|
current_time = time (NULL);
|
||||||
katze_item_set_name (item, token);
|
age = sokoke_days_between ((time_t*)&date, ¤t_time);
|
||||||
gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &root_iter, NULL,
|
|
||||||
0, 0, item, 1, age, -1);
|
/* A negative age is a date in the future, the clock is probably off */
|
||||||
|
if (age < -1)
|
||||||
|
{
|
||||||
|
static gboolean clock_warning = FALSE;
|
||||||
|
if (!clock_warning)
|
||||||
|
{
|
||||||
|
midori_app_send_notification (history->app,
|
||||||
|
_("Erroneous clock time"),
|
||||||
|
_("The clock time lies in the past. "
|
||||||
|
"Please check the current date and time."));
|
||||||
|
clock_warning = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (age > 7 || age < 0)
|
||||||
|
{
|
||||||
|
strftime (token, sizeof (token), "%x", localtime ((time_t*)&date));
|
||||||
|
sdate = token;
|
||||||
|
}
|
||||||
|
else if (age > 6)
|
||||||
|
sdate = _("A week ago");
|
||||||
|
else if (age > 1)
|
||||||
|
sdate = g_strdup_printf (ngettext ("%d day ago",
|
||||||
|
"%d days ago", (gint)age), (gint)age);
|
||||||
|
else if (age == 0)
|
||||||
|
sdate = _("Today");
|
||||||
|
else
|
||||||
|
sdate = _("Yesterday");
|
||||||
|
|
||||||
|
gtk_tree_store_insert_with_values (model, &root_iter, NULL,
|
||||||
|
0, 0, item, 1, sdate, -1);
|
||||||
/* FIXME: Always show expanders even if no child nodes? */
|
/* FIXME: Always show expanders even if no child nodes? */
|
||||||
gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter, &root_iter,
|
gtk_tree_store_insert_with_values (model, &iter, &root_iter,
|
||||||
0, 0, item, 1, -1, -1);
|
0, 0, item, 1, katze_item_get_name (item), -1);
|
||||||
|
|
||||||
|
if (age > 1 && age < 7)
|
||||||
|
g_free (sdate);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -242,11 +275,8 @@ midori_history_read_from_db (MidoriHistory* history,
|
||||||
katze_item_set_added (item, date);
|
katze_item_set_added (item, date);
|
||||||
katze_item_set_uri (item, (gchar*)uri);
|
katze_item_set_uri (item, (gchar*)uri);
|
||||||
katze_item_set_name (item, (gchar*)title);
|
katze_item_set_name (item, (gchar*)title);
|
||||||
/* FIXME: Gtk-WARNING **: gtk/gtktreestore.c:946: Invalid column
|
gtk_tree_store_insert_with_values (model, NULL, parent,
|
||||||
number -1076101456 added to iter (remember to end your list
|
0, 0, item, 1, katze_item_get_name (item), -1);
|
||||||
of columns with a -1) */
|
|
||||||
gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), NULL, parent,
|
|
||||||
0, 0, item, 1, -1, -1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -277,10 +307,9 @@ midori_history_delete_clicked_cb (GtkWidget* toolitem,
|
||||||
&model, &iter))
|
&model, &iter))
|
||||||
{
|
{
|
||||||
KatzeItem* item;
|
KatzeItem* item;
|
||||||
gint64 age;
|
|
||||||
|
|
||||||
gtk_tree_model_get (model, &iter, 0, &item, 1, &age, -1);
|
gtk_tree_model_get (model, &iter, 0, &item, -1);
|
||||||
midori_history_remove_item_from_db (history, item, age);
|
midori_history_remove_item_from_db (history, item);
|
||||||
gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
|
gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
|
||||||
g_object_unref (item);
|
g_object_unref (item);
|
||||||
}
|
}
|
||||||
|
@ -423,7 +452,7 @@ midori_history_set_app (MidoriHistory* history,
|
||||||
history->array = katze_object_get_object (app, "history");
|
history->array = katze_object_get_object (app, "history");
|
||||||
model = gtk_tree_view_get_model (GTK_TREE_VIEW (history->treeview));
|
model = gtk_tree_view_get_model (GTK_TREE_VIEW (history->treeview));
|
||||||
#if HAVE_SQLITE
|
#if HAVE_SQLITE
|
||||||
midori_history_read_from_db (history, model, NULL, 0);
|
midori_history_read_from_db (history, GTK_TREE_STORE (model), NULL, 0);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -473,10 +502,9 @@ midori_history_treeview_render_icon_cb (GtkTreeViewColumn* column,
|
||||||
GtkWidget* treeview)
|
GtkWidget* treeview)
|
||||||
{
|
{
|
||||||
KatzeItem* item;
|
KatzeItem* item;
|
||||||
gint64 age;
|
|
||||||
GdkPixbuf* pixbuf = NULL;
|
GdkPixbuf* pixbuf = NULL;
|
||||||
|
|
||||||
gtk_tree_model_get (model, iter, 0, &item, 1, &age, -1);
|
gtk_tree_model_get (model, iter, 0, &item, -1);
|
||||||
|
|
||||||
if (katze_item_get_uri (item))
|
if (katze_item_get_uri (item))
|
||||||
pixbuf = katze_load_cached_icon (katze_item_get_uri (item), treeview);
|
pixbuf = katze_load_cached_icon (katze_item_get_uri (item), treeview);
|
||||||
|
@ -492,67 +520,6 @@ midori_history_treeview_render_icon_cb (GtkTreeViewColumn* column,
|
||||||
g_object_unref (item);
|
g_object_unref (item);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
midori_history_treeview_render_text_cb (GtkTreeViewColumn* column,
|
|
||||||
GtkCellRenderer* renderer,
|
|
||||||
GtkTreeModel* model,
|
|
||||||
GtkTreeIter* iter,
|
|
||||||
MidoriHistory* history)
|
|
||||||
{
|
|
||||||
KatzeItem* item;
|
|
||||||
gint64 age;
|
|
||||||
|
|
||||||
gtk_tree_model_get (model, iter, 0, &item, 1, &age, -1);
|
|
||||||
|
|
||||||
if (age != -1)
|
|
||||||
{
|
|
||||||
gchar* sdate;
|
|
||||||
|
|
||||||
/* A negative age is a date in the future, the clock is probably off */
|
|
||||||
if (age < -1)
|
|
||||||
{
|
|
||||||
static gboolean clock_warning = FALSE;
|
|
||||||
if (!clock_warning)
|
|
||||||
{
|
|
||||||
midori_app_send_notification (history->app,
|
|
||||||
_("Erroneous clock time"),
|
|
||||||
_("The clock time lies in the past. "
|
|
||||||
"Please check the current date and time."));
|
|
||||||
clock_warning = TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (age > 7 || age < 0)
|
|
||||||
{
|
|
||||||
g_object_set (renderer, "text", katze_item_get_name (item), NULL);
|
|
||||||
}
|
|
||||||
else if (age > 6)
|
|
||||||
{
|
|
||||||
sdate = _("A week ago");
|
|
||||||
g_object_set (renderer, "text", sdate, NULL);
|
|
||||||
}
|
|
||||||
else if (age > 1)
|
|
||||||
{
|
|
||||||
sdate = g_strdup_printf (ngettext ("%d day ago",
|
|
||||||
"%d days ago", (gint)age), (gint)age);
|
|
||||||
g_object_set (renderer, "text", sdate, NULL);
|
|
||||||
g_free (sdate);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (age == 0)
|
|
||||||
sdate = _("Today");
|
|
||||||
else
|
|
||||||
sdate = _("Yesterday");
|
|
||||||
g_object_set (renderer, "text", sdate, NULL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
g_object_set (renderer, "text", katze_item_get_name (item), NULL);
|
|
||||||
|
|
||||||
g_object_unref (item);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if HAVE_SQLITE
|
#if HAVE_SQLITE
|
||||||
static void
|
static void
|
||||||
midori_history_row_activated_cb (GtkTreeView* treeview,
|
midori_history_row_activated_cb (GtkTreeView* treeview,
|
||||||
|
@ -842,7 +809,8 @@ midori_history_row_expanded_cb (GtkTreeView* treeview,
|
||||||
gtk_tree_model_get (model, iter, 0, &item, -1);
|
gtk_tree_model_get (model, iter, 0, &item, -1);
|
||||||
/* FIXME: We need always repopulate parent. Now ignoring dupes */
|
/* FIXME: We need always repopulate parent. Now ignoring dupes */
|
||||||
if (gtk_tree_model_iter_n_children (model, iter) < 2)
|
if (gtk_tree_model_iter_n_children (model, iter) < 2)
|
||||||
midori_history_read_from_db (history, model, iter, katze_item_get_added (item));
|
midori_history_read_from_db (history, GTK_TREE_STORE (model),
|
||||||
|
iter, katze_item_get_added (item));
|
||||||
g_object_unref (item);
|
g_object_unref (item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -869,7 +837,7 @@ midori_history_init (MidoriHistory* history)
|
||||||
/* FIXME: Dereference the net on finalization */
|
/* FIXME: Dereference the net on finalization */
|
||||||
|
|
||||||
/* Create the treeview */
|
/* Create the treeview */
|
||||||
model = gtk_tree_store_new (2, KATZE_TYPE_ITEM, G_TYPE_INT64);
|
model = gtk_tree_store_new (2, KATZE_TYPE_ITEM, G_TYPE_STRING);
|
||||||
treeview = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model));
|
treeview = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model));
|
||||||
gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview), FALSE);
|
gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview), FALSE);
|
||||||
column = gtk_tree_view_column_new ();
|
column = gtk_tree_view_column_new ();
|
||||||
|
@ -880,9 +848,8 @@ midori_history_init (MidoriHistory* history)
|
||||||
treeview, NULL);
|
treeview, NULL);
|
||||||
renderer_text = gtk_cell_renderer_text_new ();
|
renderer_text = gtk_cell_renderer_text_new ();
|
||||||
gtk_tree_view_column_pack_start (column, renderer_text, FALSE);
|
gtk_tree_view_column_pack_start (column, renderer_text, FALSE);
|
||||||
gtk_tree_view_column_set_cell_data_func (column, renderer_text,
|
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (column), renderer_text,
|
||||||
(GtkTreeCellDataFunc)midori_history_treeview_render_text_cb,
|
"text", 1, NULL);
|
||||||
history, NULL);
|
|
||||||
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
|
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
|
||||||
g_object_unref (model);
|
g_object_unref (model);
|
||||||
#if HAVE_SQLITE
|
#if HAVE_SQLITE
|
||||||
|
|
Loading…
Reference in a new issue