diff -r cb885ee44618 -r 2b1824e138b1 maemo-ui-old/src/mmyth_recordui.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/maemo-ui-old/src/mmyth_recordui.c Mon Aug 13 22:29:00 2007 +0100 @@ -0,0 +1,433 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "mmyth_ui.h" +#include "mmyth_recordui.h" + +/* + * GMyth library includes + */ +#include +#include + +enum { + START_DATE_COLUMN = 0, + TITLE_COLUMN, + CHAN_ID_COLUMN, + END_TIME_COLUMN, + RECORD_ID_COLUMN, + BASENAME_COLUMN, + N_COLUMNS +}; + +gboolean +mmyth_recordui_reload_all(MMythRecordUI * recordui) +{ + gboolean res = FALSE; + + res = mmyth_recordui_reload_schedule(recordui); + + res = res & mmyth_recordui_reload_record(recordui); + + + if (!res) + g_warning + ("[%s] Error while reloading schedule and recording content", + __FUNCTION__); + + return res; +} + +gboolean +mmyth_recordui_reload_schedule(MMythRecordUI * recordui) +{ + gint new_row = 0; + ScheduleInfo *schedule_info; + GList *schedule_list; + GtkTreeIter iter; + gchar *start_date_time = NULL; + gchar *end_date_time = NULL; + GString *str_aux = g_string_new(""); + gint res; + + gtk_tree_store_clear(recordui->sch_tree_store); + + res = + gmyth_scheduler_get_schedule_list(recordui->scheduler, + &(schedule_list)); + if (res < 0) { + g_warning + ("[%s] Retrieved NULL list of scheduled data from database", + __FUNCTION__); + return FALSE; + } + + for (; schedule_list; schedule_list = schedule_list->next) { + schedule_info = (ScheduleInfo *) schedule_list->data; + + gtk_tree_store_insert(recordui->sch_tree_store, &iter, NULL, + new_row++); + + start_date_time = + gmyth_util_time_to_string_from_time_val(schedule_info-> + start_time); + end_date_time = + gmyth_util_time_to_string_from_time_val(schedule_info-> + end_time); + + g_string_printf(str_aux, "%d", schedule_info->channel_id); + + gtk_tree_store_set(recordui->sch_tree_store, &iter, START_DATE_COLUMN, start_date_time, TITLE_COLUMN, schedule_info->title->str, CHAN_ID_COLUMN, str_aux->str, END_TIME_COLUMN, end_date_time, // It + // doesn't + // appear + RECORD_ID_COLUMN, schedule_info->record_id, -1); // the + // last + // line + // is + // a + // hidden + // item + // to + // be + // used + // in + // searching + // tasks + } + + g_debug("[%s] %d lines added to schedule list UI", __FUNCTION__, + new_row); + + /* + * free allocated memory + */ + if (!start_date_time) + g_free(start_date_time); + if (!end_date_time) + g_free(end_date_time); + g_string_free(str_aux, FALSE); + + return TRUE; +} + +gboolean +mmyth_recordui_reload_record(MMythRecordUI * recordui) +{ + gint new_row = 0; + RecordedInfo *recorded_info; + GList *record_list = NULL; + GtkTreeIter iter; + gchar *start_date_time = NULL; + gchar *end_date_time = NULL; + GString *str_aux = g_string_new(""); + gint res; + + gtk_tree_store_clear(recordui->rec_tree_store); + + res = + gmyth_scheduler_get_recorded_list(recordui->scheduler, + &record_list); + if (res < 0) { + g_warning + ("[%s] Retrieved NULL list of recorded data from database", + __FUNCTION__); + return FALSE; + } + + for (; record_list; record_list = record_list->next) { + recorded_info = (RecordedInfo *) record_list->data; + + gtk_tree_store_insert(recordui->rec_tree_store, &iter, NULL, + new_row++); + + start_date_time = + gmyth_util_time_to_string_from_time_val(recorded_info-> + start_time); + end_date_time = + gmyth_util_time_to_string_from_time_val(recorded_info-> + end_time); + + g_string_printf(str_aux, "%d", recorded_info->channel_id); + + gtk_tree_store_set(recordui->rec_tree_store, &iter, START_DATE_COLUMN, start_date_time, TITLE_COLUMN, recorded_info->title->str, CHAN_ID_COLUMN, str_aux->str, END_TIME_COLUMN, end_date_time, // It + // doesn't + // appear + RECORD_ID_COLUMN, recorded_info->record_id, + BASENAME_COLUMN, recorded_info->basename->str, + -1); + // the last line is a hidden item to be used in searching tasks + } + + g_debug("[%s] %d lines added to record list UI", __FUNCTION__, + new_row); + + /* + * free allocated memory + */ + if (NULL != start_date_time) + g_free(start_date_time); + if (NULL != end_date_time) + g_free(end_date_time); + g_string_free(str_aux, FALSE); + + return TRUE; +} + + +MMythRecordUI * +mmyth_recordui_new(GMythBackendInfo * backend_info) +{ + MMythRecordUI *recordui = g_new0(MMythRecordUI, 1); + + g_return_val_if_fail(backend_info != NULL, NULL); + + recordui->backend_info = backend_info; + + recordui->scrolled_window = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW + (recordui->scrolled_window), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC); + + recordui->viewport = gtk_viewport_new(NULL, NULL); + gtk_container_add(GTK_CONTAINER(recordui->scrolled_window), + recordui->viewport); + + recordui->notebook = gtk_notebook_new(); + gtk_container_set_border_width(GTK_CONTAINER(recordui->notebook), 1); + gtk_notebook_set_scrollable(GTK_NOTEBOOK(recordui->notebook), TRUE); + gtk_notebook_popup_enable(GTK_NOTEBOOK(recordui->notebook)); + gtk_container_add(GTK_CONTAINER(recordui->viewport), + recordui->notebook); + gtk_notebook_popup_disable(GTK_NOTEBOOK(recordui->notebook)); + + /* + * Schedule tab + */ + recordui->sch_scrolled_window = gtk_scrolled_window_new(NULL, NULL); + gtk_container_add(GTK_CONTAINER(recordui->notebook), + recordui->sch_scrolled_window); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW + (recordui->sch_scrolled_window), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC); + gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW + (recordui->sch_scrolled_window), + GTK_SHADOW_IN); + + /* + * The basename column in the sched_tree_store is not being used + */ + recordui->sch_tree_store = + gtk_tree_store_new(N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, + G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, + G_TYPE_STRING); + + recordui->sch_treeview = + gtk_tree_view_new_with_model(GTK_TREE_MODEL + (recordui->sch_tree_store)); + gtk_container_add(GTK_CONTAINER(recordui->sch_scrolled_window), + recordui->sch_treeview); + recordui->sch_renderer = gtk_cell_renderer_text_new(); + // g_object_set(G_OBJECT(renderer1), "foreground", "green", + // "background", "black", NULL); + recordui->sch_column1 = + gtk_tree_view_column_new_with_attributes("Start time", + recordui->sch_renderer, + "text", START_DATE_COLUMN, + NULL); + gtk_tree_view_append_column(GTK_TREE_VIEW(recordui->sch_treeview), + recordui->sch_column1); + recordui->sch_column2 = + gtk_tree_view_column_new_with_attributes("Title", + recordui->sch_renderer, + "text", TITLE_COLUMN, + NULL); + gtk_tree_view_append_column(GTK_TREE_VIEW(recordui->sch_treeview), + recordui->sch_column2); + recordui->sch_column3 = + gtk_tree_view_column_new_with_attributes("Channel", + recordui->sch_renderer, + "text", CHAN_ID_COLUMN, + NULL); + gtk_tree_view_append_column(GTK_TREE_VIEW(recordui->sch_treeview), + recordui->sch_column3); + gtk_tree_view_column_set_resizable(recordui->sch_column1, TRUE); + gtk_tree_view_column_set_resizable(recordui->sch_column2, TRUE); + gtk_tree_view_column_set_resizable(recordui->sch_column3, TRUE); + gtk_tree_view_column_set_reorderable(recordui->sch_column1, TRUE); + gtk_tree_view_column_set_reorderable(recordui->sch_column2, TRUE); + gtk_tree_view_column_set_reorderable(recordui->sch_column3, TRUE); + // recordui->sch_column4 = + // gtk_tree_view_column_new_with_attributes("", + // recordui->sch_renderer, "text", END_TIME_COLUMN, NULL); + // gtk_tree_view_append_column(GTK_TREE_VIEW(recordui->sch_treeview), + // recordui->sch_column4); + + recordui->sch_label = gtk_label_new(("Schedule")); + gtk_notebook_set_tab_label(GTK_NOTEBOOK(recordui->notebook), + gtk_notebook_get_nth_page(GTK_NOTEBOOK + (recordui-> + notebook), 0), + recordui->sch_label); + + // Record items tab + // g_object_set(G_OBJECT(renderer2), "foreground", "blue", NULL); + recordui->rec_scrolled_window = gtk_scrolled_window_new(NULL, NULL); + gtk_container_add(GTK_CONTAINER(recordui->notebook), + recordui->rec_scrolled_window); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW + (recordui->rec_scrolled_window), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC); + gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW + (recordui->rec_scrolled_window), + GTK_SHADOW_IN); + + recordui->rec_tree_store = + gtk_tree_store_new(N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, + G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, + G_TYPE_STRING); + recordui->rec_treeview = + gtk_tree_view_new_with_model(GTK_TREE_MODEL + (recordui->rec_tree_store)); + gtk_container_add(GTK_CONTAINER(recordui->rec_scrolled_window), + recordui->rec_treeview); + recordui->rec_renderer = gtk_cell_renderer_text_new(); + // g_object_set(G_OBJECT(renderer1), "foreground", "green", + // "background", "black", NULL); + + recordui->rec_column1 = + gtk_tree_view_column_new_with_attributes("Start time", + recordui->rec_renderer, + "text", START_DATE_COLUMN, + NULL); + gtk_tree_view_append_column(GTK_TREE_VIEW(recordui->rec_treeview), + recordui->rec_column1); + recordui->rec_column2 = + gtk_tree_view_column_new_with_attributes("Title", + recordui->rec_renderer, + "text", TITLE_COLUMN, + NULL); + gtk_tree_view_append_column(GTK_TREE_VIEW(recordui->rec_treeview), + recordui->rec_column2); + recordui->rec_column3 = + gtk_tree_view_column_new_with_attributes("Channel", + recordui->rec_renderer, + "text", CHAN_ID_COLUMN, + NULL); + gtk_tree_view_append_column(GTK_TREE_VIEW(recordui->rec_treeview), + recordui->rec_column3); + gtk_tree_view_column_set_resizable(recordui->rec_column1, TRUE); + gtk_tree_view_column_set_resizable(recordui->rec_column2, TRUE); + gtk_tree_view_column_set_resizable(recordui->rec_column3, TRUE); + gtk_tree_view_column_set_reorderable(recordui->rec_column1, TRUE); + gtk_tree_view_column_set_reorderable(recordui->rec_column2, TRUE); + gtk_tree_view_column_set_reorderable(recordui->rec_column3, TRUE); + // recordui->rec_column4 = + // gtk_tree_view_column_new_with_attributes("", + // recordui->rec_renderer, "text", END_TIME_COLUMN, NULL); + // gtk_tree_view_append_column(GTK_TREE_VIEW(recordui->rec_treeview), + // recordui->rec_column4); + + recordui->rec_label = gtk_label_new(("Recorded")); + gtk_notebook_set_tab_label(GTK_NOTEBOOK(recordui->notebook), + gtk_notebook_get_nth_page(GTK_NOTEBOOK + (recordui-> + notebook), 1), + recordui->rec_label); + + // Gets the mmyth scheduler manager + recordui->scheduler = gmyth_scheduler_new(backend_info); + + /* + * init connection to the backend + */ + gmyth_scheduler_connect(recordui->scheduler, + recordui->scheduler->backend_info); + + return recordui; +} + +void +mmyth_recordui_free(MMythRecordUI * recordui) +{ + // FIXME: Release memory here! + /* + * close connection to the backend + */ + gmyth_scheduler_disconnect(recordui->scheduler); +} + +void +mmyth_recordui_delete_selected(GtkButton * button, + MMythRecordUI * recordui) +{ + GtkTreeSelection *selection; + GtkTreeModel *list_store; + GtkTreeIter iter; + int index; + int curr_page = 0; + + curr_page = + gtk_notebook_get_current_page(GTK_NOTEBOOK(recordui->notebook)); + + if (curr_page == 0) { + selection = + gtk_tree_view_get_selection(GTK_TREE_VIEW + (recordui->sch_treeview)); + if (selection != NULL) { + gtk_tree_selection_get_selected(selection, &list_store, &iter); + gtk_tree_model_get(list_store, &iter, RECORD_ID_COLUMN, &index, + -1); + gmyth_scheduler_delete_schedule(recordui->scheduler, index); + mmyth_recordui_reload_schedule(recordui); + return; + } + + } else if (curr_page == 1) { + selection = + gtk_tree_view_get_selection(GTK_TREE_VIEW + (recordui->rec_treeview)); + if (selection != NULL) { + gtk_tree_selection_get_selected(selection, &list_store, &iter); + gtk_tree_model_get(list_store, &iter, RECORD_ID_COLUMN, &index, + -1); + gmyth_scheduler_delete_recorded(recordui->scheduler, index); + mmyth_recordui_reload_record(recordui); + return; + } + } + + g_warning("[%s] None element was removed from the list", __FUNCTION__); +} + +/* + * FIXME: change this function name, it is returning the basename_column + * that represents the nuv filename of the recorded content + */ +gchar * +mmyth_recordui_get_selected_recorded(MMythRecordUI * recordui) +{ + GtkTreeSelection *selection = NULL; + GtkTreeModel *list_store = NULL; + GtkTreeIter iter; + gchar *path = NULL; + + /* + * returning nuv filename, basename_column + */ + selection = + gtk_tree_view_get_selection(GTK_TREE_VIEW(recordui->rec_treeview)); + if (gtk_tree_selection_get_selected(selection, &list_store, &iter)) { + gtk_tree_model_get(list_store, &iter, BASENAME_COLUMN, &path, -1); + } + // FIXME: MOVE THIS TO OTHER PLACE + return path; +}