static void log_window_calendar_chats_month_changed_cb (GtkWidget *calendar, EmpathyLogWindow *window) { EmpathyAccount *account; gchar *chat_id; gboolean is_chatroom; guint year_selected; guint month_selected; GList *dates; GList *l; gtk_calendar_clear_marks (GTK_CALENDAR (calendar)); if (!log_window_chats_get_selected (window, &account, &chat_id, &is_chatroom)) { DEBUG ("No chat selected to get dates for..."); return; } g_object_get (calendar, "month", &month_selected, "year", &year_selected, NULL); /* We need this hear because it appears that the months start from 0 */ month_selected++; /* Get the log object for this contact */ dates = empathy_log_manager_get_dates (window->log_manager, account, chat_id, is_chatroom); g_object_unref (account); g_free (chat_id); for (l = dates; l; l = l->next) { const gchar *str; guint year; guint month; guint day; str = l->data; if (!str) { continue; } sscanf (str, "%4d%2d%2d", &year, &month, &day); if (year == year_selected && month == month_selected) { DEBUG ("Marking date:'%s'", str); gtk_calendar_mark_day (GTK_CALENDAR (window->calendar_chats), day); } } g_list_foreach (dates, (GFunc) g_free, NULL); g_list_free (dates); DEBUG ("Currently showing month %d and year %d", month_selected, year_selected); }
static void log_window_get_messages_for_date (EmpathyLogWindow *window, GDate *date) { TpAccount *account; gchar *chat_id; gboolean is_chatroom; if (!log_window_chats_get_selected (window, &account, &chat_id, &is_chatroom)) { return; } /* 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 */ tpl_log_manager_get_messages_for_date_async (window->log_manager, account, chat_id, is_chatroom, date, log_window_got_messages_for_date_cb, (gpointer) window); }
static void log_window_calendar_chats_month_changed_cb (GtkWidget *calendar, EmpathyLogWindow *window) { TpAccount *account; gchar *chat_id; gboolean is_chatroom; gtk_calendar_clear_marks (GTK_CALENDAR (calendar)); if (!log_window_chats_get_selected (window, &account, &chat_id, &is_chatroom)) { DEBUG ("No chat selected to get dates for..."); return; } /* Get the log object for this contact */ tpl_log_manager_get_dates_async (window->log_manager, account, chat_id, is_chatroom, log_window_updating_calendar_month_cb, (gpointer) window); g_object_unref (account); g_free (chat_id); }
static void log_window_chats_get_messages (EmpathyLogWindow *window, const gchar *date_to_show) { TpAccount *account; gchar *chat_id; gboolean is_chatroom; 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) { /* Get a list of dates and show them on the calendar */ tpl_log_manager_get_dates_async (window->log_manager, account, chat_id, is_chatroom, log_manager_got_dates_cb, (gpointer) window); /* signal unblocked at the end of the CB flow */ } 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) { log_window_get_messages_for_date (window, date); } g_object_unref (account); g_free (chat_id); }
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); }