static void got_messages_for_date_cb (GObject *manager, GAsyncResult *result, gpointer user_data) { EmpathyLogWindow *window = user_data; GList *messages; GList *l; gboolean can_do_previous; gboolean can_do_next; GError *error = NULL; if (log_window == NULL) return; if (!tpl_log_manager_get_messages_for_date_finish (TPL_LOG_MANAGER (manager), result, &messages, &error)) { DEBUG ("Unable to retrieve messages for the selected date: %s. Aborting", error->message); empathy_chat_view_append_event (window->chatview_find, "Unable to retrieve messages for the selected date"); g_error_free (error); return; } for (l = messages; l; l = l->next) { EmpathyMessage *message; g_assert (TPL_IS_ENTRY (l->data)); message = empathy_message_from_tpl_log_entry (l->data); g_object_unref (l->data); empathy_chat_view_append_message (window->chatview_find, message); g_object_unref (message); } g_list_free (messages); /* Scroll to the most recent messages */ empathy_chat_view_scroll (window->chatview_find, TRUE); /* Highlight and find messages */ empathy_chat_view_highlight (window->chatview_find, window->last_find, FALSE); empathy_chat_view_find_next (window->chatview_find, window->last_find, TRUE, FALSE); empathy_chat_view_find_abilities (window->chatview_find, window->last_find, FALSE, &can_do_previous, &can_do_next); gtk_widget_set_sensitive (window->button_previous, can_do_previous); gtk_widget_set_sensitive (window->button_next, can_do_next); gtk_widget_set_sensitive (window->button_find, FALSE); }
static void preferences_preview_theme_append_message (EmpathyChatView *view, EmpathyContact *sender, EmpathyContact *receiver, const gchar *text) { EmpathyMessage *message; message = g_object_new (EMPATHY_TYPE_MESSAGE, "sender", sender, "receiver", receiver, "body", text, NULL); empathy_chat_view_append_message (view, message); g_object_unref (message); }
static void log_window_got_messages_for_date_cb (GObject *manager, GAsyncResult *result, gpointer user_data) { EmpathyLogWindow *window = user_data; GList *messages; GList *l; GError *error = NULL; if (log_window == NULL) return; if (!tpl_log_manager_get_messages_for_date_finish (TPL_LOG_MANAGER (manager), result, &messages, &error)) { DEBUG ("Unable to retrieve messages for the selected date: %s. Aborting", error->message); empathy_chat_view_append_event (window->chatview_find, "Unable to retrieve messages for the selected date"); g_error_free (error); return; } for (l = messages; l; l = l->next) { EmpathyMessage *message = empathy_message_from_tpl_log_entry (l->data); g_object_unref (l->data); empathy_chat_view_append_message (window->chatview_chats, message); g_object_unref (message); } g_list_free (messages); /* Turn back on scrolling */ empathy_chat_view_scroll (window->chatview_find, TRUE); /* Give the search entry main focus */ gtk_widget_grab_focus (window->entry_chats); }
static void log_window_chats_get_messages (EmpathyLogWindow *window, const gchar *date_to_show) { EmpathyAccount *account; gchar *chat_id; gboolean is_chatroom; EmpathyMessage *message; GList *messages; GList *dates = NULL; GList *l; const gchar *date; guint year_selected; guint year; guint month; guint month_selected; guint day; if (!log_window_chats_get_selected (window, &account, &chat_id, &is_chatroom)) { return; } g_signal_handlers_block_by_func (window->calendar_chats, log_window_calendar_chats_day_selected_cb, window); /* Either use the supplied date or get the last */ date = date_to_show; if (!date) { gboolean day_selected = FALSE; /* Get a list of dates and show them on the calendar */ dates = empathy_log_manager_get_dates (window->log_manager, account, chat_id, is_chatroom); for (l = dates; l; l = l->next) { const gchar *str; str = l->data; if (!str) { continue; } sscanf (str, "%4d%2d%2d", &year, &month, &day); gtk_calendar_get_date (GTK_CALENDAR (window->calendar_chats), &year_selected, &month_selected, NULL); month_selected++; if (!l->next) { date = str; } if (year != year_selected || month != month_selected) { continue; } DEBUG ("Marking date:'%s'", str); gtk_calendar_mark_day (GTK_CALENDAR (window->calendar_chats), day); if (l->next) { continue; } day_selected = TRUE; gtk_calendar_select_day (GTK_CALENDAR (window->calendar_chats), day); } if (!day_selected) { /* Unselect the day in the calendar */ gtk_calendar_select_day (GTK_CALENDAR (window->calendar_chats), 0); } } else { sscanf (date, "%4d%2d%2d", &year, &month, &day); gtk_calendar_get_date (GTK_CALENDAR (window->calendar_chats), &year_selected, &month_selected, NULL); month_selected++; if (year != year_selected && month != month_selected) { day = 0; } gtk_calendar_select_day (GTK_CALENDAR (window->calendar_chats), day); } g_signal_handlers_unblock_by_func (window->calendar_chats, log_window_calendar_chats_day_selected_cb, window); if (!date) { goto OUT; } /* Clear all current messages shown in the textview */ empathy_chat_view_clear (window->chatview_chats); /* Turn off scrolling temporarily */ empathy_chat_view_scroll (window->chatview_find, FALSE); /* Get messages */ messages = empathy_log_manager_get_messages_for_date (window->log_manager, account, chat_id, is_chatroom, date); for (l = messages; l; l = l->next) { message = l->data; empathy_chat_view_append_message (window->chatview_chats, message); g_object_unref (message); } g_list_free (messages); /* Turn back on scrolling */ empathy_chat_view_scroll (window->chatview_find, TRUE); /* Give the search entry main focus */ gtk_widget_grab_focus (window->entry_chats); OUT: g_list_foreach (dates, (GFunc) g_free, NULL); g_list_free (dates); g_object_unref (account); g_free (chat_id); }
static void log_window_find_changed_cb (GtkTreeSelection *selection, EmpathyLogWindow *window) { GtkTreeView *view; GtkTreeModel *model; GtkTreeIter iter; EmpathyAccount *account; gchar *chat_id; gboolean is_chatroom; gchar *date; EmpathyMessage *message; GList *messages; GList *l; gboolean can_do_previous; gboolean can_do_next; /* Get selected information */ view = GTK_TREE_VIEW (window->treeview_find); model = gtk_tree_view_get_model (view); if (!gtk_tree_selection_get_selected (selection, NULL, &iter)) { gtk_widget_set_sensitive (window->button_previous, FALSE); gtk_widget_set_sensitive (window->button_next, FALSE); empathy_chat_view_clear (window->chatview_find); return; } gtk_widget_set_sensitive (window->button_previous, TRUE); gtk_widget_set_sensitive (window->button_next, TRUE); gtk_tree_model_get (model, &iter, COL_FIND_ACCOUNT, &account, COL_FIND_CHAT_ID, &chat_id, COL_FIND_IS_CHATROOM, &is_chatroom, COL_FIND_DATE, &date, -1); /* Clear all current messages shown in the textview */ empathy_chat_view_clear (window->chatview_find); /* Turn off scrolling temporarily */ empathy_chat_view_scroll (window->chatview_find, FALSE); /* Get messages */ messages = empathy_log_manager_get_messages_for_date (window->log_manager, account, chat_id, is_chatroom, date); g_object_unref (account); g_free (date); g_free (chat_id); for (l = messages; l; l = l->next) { message = l->data; empathy_chat_view_append_message (window->chatview_find, message); g_object_unref (message); } g_list_free (messages); /* Scroll to the most recent messages */ empathy_chat_view_scroll (window->chatview_find, TRUE); /* Highlight and find messages */ empathy_chat_view_highlight (window->chatview_find, window->last_find); empathy_chat_view_find_next (window->chatview_find, window->last_find, TRUE); empathy_chat_view_find_abilities (window->chatview_find, window->last_find, &can_do_previous, &can_do_next); gtk_widget_set_sensitive (window->button_previous, can_do_previous); gtk_widget_set_sensitive (window->button_next, can_do_next); gtk_widget_set_sensitive (window->button_find, FALSE); }