mirror of https://github.com/djcb/mu.git
parent
1a13e4f0fd
commit
4f81f04d24
|
@ -18,6 +18,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "mug-msg-list-view.h"
|
#include "mug-msg-list-view.h"
|
||||||
|
#include "mu-message-flags.hh"
|
||||||
#include "mu-query.hh"
|
#include "mu-query.hh"
|
||||||
#include "utils/mu-str.h"
|
#include "utils/mu-str.h"
|
||||||
#include "utils/mu-date.h"
|
#include "utils/mu-date.h"
|
||||||
|
@ -72,26 +73,26 @@ mug_msg_list_view_class_init(MugMsgListViewClass* klass)
|
||||||
g_type_class_add_private(gobject_class, sizeof(MugMsgListViewPrivate));
|
g_type_class_add_private(gobject_class, sizeof(MugMsgListViewPrivate));
|
||||||
|
|
||||||
signals[MUG_MSG_SELECTED] = g_signal_new("msg-selected",
|
signals[MUG_MSG_SELECTED] = g_signal_new("msg-selected",
|
||||||
G_TYPE_FROM_CLASS(gobject_class),
|
G_TYPE_FROM_CLASS(gobject_class),
|
||||||
G_SIGNAL_RUN_FIRST,
|
G_SIGNAL_RUN_FIRST,
|
||||||
G_STRUCT_OFFSET(MugMsgListViewClass, msg_selected),
|
G_STRUCT_OFFSET(MugMsgListViewClass, msg_selected),
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
g_cclosure_marshal_VOID__STRING,
|
g_cclosure_marshal_VOID__STRING,
|
||||||
G_TYPE_NONE,
|
G_TYPE_NONE,
|
||||||
1,
|
1,
|
||||||
G_TYPE_STRING);
|
G_TYPE_STRING);
|
||||||
signals[MUG_ERROR_OCCURED] =
|
signals[MUG_ERROR_OCCURED] =
|
||||||
g_signal_new("error-occured",
|
g_signal_new("error-occured",
|
||||||
G_TYPE_FROM_CLASS(gobject_class),
|
G_TYPE_FROM_CLASS(gobject_class),
|
||||||
G_SIGNAL_RUN_FIRST,
|
G_SIGNAL_RUN_FIRST,
|
||||||
G_STRUCT_OFFSET(MugMsgListViewClass, error_occured),
|
G_STRUCT_OFFSET(MugMsgListViewClass, error_occured),
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
g_cclosure_marshal_VOID__UINT,
|
g_cclosure_marshal_VOID__UINT,
|
||||||
G_TYPE_NONE,
|
G_TYPE_NONE,
|
||||||
1,
|
1,
|
||||||
G_TYPE_UINT);
|
G_TYPE_UINT);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -116,24 +117,25 @@ on_cursor_changed(GtkTreeView* tview, MugMsgListView* lst)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
treecell_func(GtkTreeViewColumn* tree_column,
|
treecell_func(GtkTreeViewColumn* tree_column,
|
||||||
GtkCellRenderer* renderer,
|
GtkCellRenderer* renderer,
|
||||||
GtkTreeModel* tree_model,
|
GtkTreeModel* tree_model,
|
||||||
GtkTreeIter* iter,
|
GtkTreeIter* iter,
|
||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
MuFlags flags;
|
|
||||||
MuMsgPrio prio;
|
MessageFlags flags;
|
||||||
|
MessagePriority prio;
|
||||||
|
|
||||||
gtk_tree_model_get(tree_model, iter, MUG_COL_FLAGS, &flags, MUG_COL_PRIO, &prio, -1);
|
gtk_tree_model_get(tree_model, iter, MUG_COL_FLAGS, &flags, MUG_COL_PRIO, &prio, -1);
|
||||||
|
|
||||||
g_object_set(G_OBJECT(renderer),
|
g_object_set(G_OBJECT(renderer),
|
||||||
"weight",
|
"weight",
|
||||||
(flags & MU_FLAG_NEW) ? 800 : 400,
|
any_of(flags & MessageFlags::New) ? 800 : 400,
|
||||||
"weight",
|
"weight",
|
||||||
(flags & MU_FLAG_SEEN) ? 400 : 800,
|
any_of(flags & MessageFlags::Seen) ? 400 : 800,
|
||||||
"foreground",
|
"foreground",
|
||||||
prio == MU_MSG_PRIO_HIGH ? "red" : NULL,
|
prio == MessagePriority::High ? "red" : NULL,
|
||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* sortcolidx == -1 means 'sortcolidx = colidx' */
|
/* sortcolidx == -1 means 'sortcolidx = colidx' */
|
||||||
|
@ -163,10 +165,10 @@ append_col(GtkTreeView* treeview, const char* label, int colidx, int sortcolidx,
|
||||||
gtk_tree_view_column_set_expand(col, TRUE);
|
gtk_tree_view_column_set_expand(col, TRUE);
|
||||||
|
|
||||||
gtk_tree_view_column_set_cell_data_func(col,
|
gtk_tree_view_column_set_cell_data_func(col,
|
||||||
renderer,
|
renderer,
|
||||||
(GtkTreeCellDataFunc)treecell_func,
|
(GtkTreeCellDataFunc)treecell_func,
|
||||||
NULL,
|
NULL,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
gtk_tree_view_append_column(treeview, col);
|
gtk_tree_view_append_column(treeview, col);
|
||||||
|
|
||||||
|
@ -184,16 +186,16 @@ mug_msg_list_view_init(MugMsgListView* obj)
|
||||||
|
|
||||||
priv->_xpath = priv->_query = NULL;
|
priv->_xpath = priv->_query = NULL;
|
||||||
priv->_store = gtk_tree_store_new(MUG_N_COLS,
|
priv->_store = gtk_tree_store_new(MUG_N_COLS,
|
||||||
G_TYPE_STRING, /* date */
|
G_TYPE_STRING, /* date */
|
||||||
G_TYPE_STRING, /* folder */
|
G_TYPE_STRING, /* folder */
|
||||||
G_TYPE_STRING, /* flagstr */
|
G_TYPE_STRING, /* flagstr */
|
||||||
G_TYPE_STRING, /* from */
|
G_TYPE_STRING, /* from */
|
||||||
G_TYPE_STRING, /* to */
|
G_TYPE_STRING, /* to */
|
||||||
G_TYPE_STRING, /* subject */
|
G_TYPE_STRING, /* subject */
|
||||||
G_TYPE_STRING, /* path */
|
G_TYPE_STRING, /* path */
|
||||||
G_TYPE_UINT, /* prio */
|
G_TYPE_UINT, /* prio */
|
||||||
G_TYPE_UINT, /* flags */
|
G_TYPE_UINT, /* flags */
|
||||||
G_TYPE_INT); /* timeval */
|
G_TYPE_INT); /* timeval */
|
||||||
|
|
||||||
tview = GTK_TREE_VIEW(obj);
|
tview = GTK_TREE_VIEW(obj);
|
||||||
gtk_tree_view_set_model(tview, GTK_TREE_MODEL(priv->_store));
|
gtk_tree_view_set_model(tview, GTK_TREE_MODEL(priv->_store));
|
||||||
|
@ -304,27 +306,28 @@ static Mu::Option<Mu::QueryResults>
|
||||||
run_query(const char* xpath, const char* expr, MugMsgListView* self)
|
run_query(const char* xpath, const char* expr, MugMsgListView* self)
|
||||||
{
|
{
|
||||||
Mu::Store store{xpath};
|
Mu::Store store{xpath};
|
||||||
Mu::Query query{store};
|
|
||||||
|
|
||||||
return query.run(expr,
|
return store.run_query(expr,
|
||||||
MU_MSG_FIELD_ID_DATE,
|
MU_MSG_FIELD_ID_DATE,
|
||||||
Mu::QueryFlags::Descending | Mu::QueryFlags::SkipUnreadable |
|
Mu::QueryFlags::Descending | Mu::QueryFlags::SkipUnreadable |
|
||||||
Mu::QueryFlags::SkipDuplicates | Mu::QueryFlags::IncludeRelated |
|
Mu::QueryFlags::SkipDuplicates | Mu::QueryFlags::IncludeRelated |
|
||||||
Mu::QueryFlags::Threading);
|
Mu::QueryFlags::Threading);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
add_row(GtkTreeStore* store, MuMsg* msg, GtkTreeIter* treeiter)
|
add_row(GtkTreeStore* store, MuMsg* msg, GtkTreeIter* treeiter)
|
||||||
{
|
{
|
||||||
const gchar *datestr, *flagstr;
|
const gchar *datestr;
|
||||||
gchar * from, *to;
|
gchar * from, *to;
|
||||||
time_t timeval;
|
time_t timeval;
|
||||||
|
std::string flag_str;
|
||||||
|
|
||||||
timeval = mu_msg_get_date(msg);
|
timeval = mu_msg_get_date(msg);
|
||||||
datestr = timeval == 0 ? "-" : mu_date_display_s(timeval);
|
datestr = timeval == 0 ? "-" : mu_date_display_s(timeval);
|
||||||
from = empty_or_display_contact(mu_msg_get_from(msg));
|
from = empty_or_display_contact(mu_msg_get_from(msg));
|
||||||
to = empty_or_display_contact(mu_msg_get_to(msg));
|
to = empty_or_display_contact(mu_msg_get_to(msg));
|
||||||
flagstr = mu_flags_to_str_s(mu_msg_get_flags(msg), MU_FLAG_TYPE_ANY);
|
|
||||||
|
flag_str = message_flags_to_string(mu_msg_get_flags(msg));
|
||||||
|
|
||||||
/* if (0) { */
|
/* if (0) { */
|
||||||
/* GtkTreeIter myiter; */
|
/* GtkTreeIter myiter; */
|
||||||
|
@ -335,28 +338,28 @@ add_row(GtkTreeStore* store, MuMsg* msg, GtkTreeIter* treeiter)
|
||||||
/* } */
|
/* } */
|
||||||
|
|
||||||
gtk_tree_store_set(store,
|
gtk_tree_store_set(store,
|
||||||
treeiter,
|
treeiter,
|
||||||
MUG_COL_DATESTR,
|
MUG_COL_DATESTR,
|
||||||
datestr,
|
datestr,
|
||||||
MUG_COL_MAILDIR,
|
MUG_COL_MAILDIR,
|
||||||
mu_msg_get_maildir(msg),
|
mu_msg_get_maildir(msg),
|
||||||
MUG_COL_FLAGSSTR,
|
MUG_COL_FLAGSSTR,
|
||||||
flagstr,
|
flag_str.c_str(),
|
||||||
MUG_COL_FROM,
|
MUG_COL_FROM,
|
||||||
from,
|
from,
|
||||||
MUG_COL_TO,
|
MUG_COL_TO,
|
||||||
to,
|
to,
|
||||||
MUG_COL_SUBJECT,
|
MUG_COL_SUBJECT,
|
||||||
mu_msg_get_subject(msg),
|
mu_msg_get_subject(msg),
|
||||||
MUG_COL_PATH,
|
MUG_COL_PATH,
|
||||||
mu_msg_get_path(msg),
|
mu_msg_get_path(msg),
|
||||||
MUG_COL_PRIO,
|
MUG_COL_PRIO,
|
||||||
mu_msg_get_prio(msg),
|
mu_msg_get_prio(msg),
|
||||||
MUG_COL_FLAGS,
|
MUG_COL_FLAGS,
|
||||||
mu_msg_get_flags(msg),
|
mu_msg_get_flags(msg),
|
||||||
MUG_COL_TIME,
|
MUG_COL_TIME,
|
||||||
timeval,
|
timeval,
|
||||||
-1);
|
-1);
|
||||||
g_free(from);
|
g_free(from);
|
||||||
g_free(to);
|
g_free(to);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue