]> sjero.net Git - linphone/blobdiff - gtk/calllogs.c
update ms2 and cleanup dead function
[linphone] / gtk / calllogs.c
index 2ca86beab47bf6e285311c8d7accb9851f72fdc0..466541006c3bd0c664974ab142abdbbad5203a82 100644 (file)
@@ -19,7 +19,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 #include "linphone.h"
 
-
 static void fill_renderers(GtkTreeView *v){
        GtkTreeViewColumn *c;
        GtkCellRenderer *r;
@@ -36,14 +35,16 @@ static void fill_renderers(GtkTreeView *v){
 void call_log_selection_changed(GtkTreeView *v){
        GtkTreeSelection *select;
        GtkTreeIter iter;
-       GtkTreeModel *model;
+       GtkTreeModel *model=NULL;
        
        select = gtk_tree_view_get_selection(v);
-       if (gtk_tree_selection_get_selected (select, &model, &iter)){
-               GtkTreePath *path=gtk_tree_model_get_path(model,&iter);
-               gtk_tree_view_collapse_all(v);
-               gtk_tree_view_expand_row(v,path,TRUE);
-               gtk_tree_path_free(path);
+       if (select!=NULL){
+               if (gtk_tree_selection_get_selected (select, &model, &iter)){
+                       GtkTreePath *path=gtk_tree_model_get_path(model,&iter);
+                       gtk_tree_view_collapse_all(v);
+                       gtk_tree_view_expand_row(v,path,TRUE);
+                       gtk_tree_path_free(path);
+               }
        }
 }
 
@@ -60,7 +61,7 @@ void linphone_gtk_call_log_chat_selected(GtkWidget *w){
                        gtk_tree_model_get(model,&iter,2,&pla,-1);
                        la=(LinphoneAddress*)pla;
                        if (la!=NULL){
-                               linphone_gtk_tree_view_set_chat_conversation(la);
+                               linphone_gtk_friend_list_set_chat_conversation(la);
                        }
                }
        }
@@ -91,19 +92,18 @@ void linphone_gtk_call_log_add_contact(GtkWidget *w){
 
 static bool_t put_selection_to_uribar(GtkWidget *treeview){
        GtkTreeSelection *sel;
-
+       
        sel=gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
        if (sel!=NULL){
                GtkTreeModel *model=NULL;
                GtkTreeIter iter;
                if (gtk_tree_selection_get_selected (sel,&model,&iter)){
-                       gpointer pla;
-                       LinphoneAddress *la;
                        char *tmp;
-                       gtk_tree_model_get(model,&iter,2,&pla,-1);
-                       la=(LinphoneAddress*)pla;
-                       tmp=linphone_address_as_string (la);
-                       gtk_entry_set_text(GTK_ENTRY(linphone_gtk_get_widget(linphone_gtk_get_main_window(),"uribar")),tmp);
+                       LinphoneAddress *la;
+                       gtk_tree_model_get(model,&iter,2,&la,-1);
+                       tmp=linphone_address_as_string(la);
+                       if(tmp!=NULL) 
+                               gtk_entry_set_text(GTK_ENTRY(linphone_gtk_get_widget(linphone_gtk_get_main_window(),"uribar")),tmp);
                        ms_free(tmp);
                        return TRUE;
                }
@@ -159,7 +159,6 @@ static GtkWidget *linphone_gtk_create_call_log_menu(GtkWidget *call_log){
                gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item);
                g_signal_connect_swapped(G_OBJECT(menu_item),"activate",(GCallback)linphone_gtk_call_log_chat_selected,call_log);
        }
-       
        menu_item=gtk_image_menu_item_new_from_stock(GTK_STOCK_ADD,NULL);
        gtk_widget_show(menu_item);
        gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item);
@@ -186,37 +185,91 @@ gboolean linphone_gtk_call_log_button_pressed(GtkWidget *widget, GdkEventButton
        return FALSE;
 }
 
+void linphone_gtk_call_log_clear_missed_call(){
+       GtkWidget *mw=linphone_gtk_get_main_window();
+       GtkNotebook *notebook=GTK_NOTEBOOK(linphone_gtk_get_widget(mw,"viewswitch"));
+       GtkWidget *page=gtk_notebook_get_nth_page(notebook,0);
+       GtkWidget *box=gtk_hbox_new(FALSE,0);
+       GtkWidget *image=gtk_image_new_from_stock(GTK_STOCK_REFRESH,GTK_ICON_SIZE_MENU);
+       GtkWidget *l;
+       const gchar*text=gtk_label_get_text(GTK_LABEL(linphone_gtk_get_widget(mw,"label3")));
+       
+       l=gtk_label_new(text);
+       gtk_box_pack_start(GTK_BOX(box),image,FALSE,FALSE,0);
+       gtk_box_pack_start(GTK_BOX(box),l,FALSE,FALSE,0);
+       gtk_notebook_set_tab_label(notebook,page,box);
+       gtk_widget_show_all(box);
+}
+
+gboolean linphone_gtk_call_log_reset_missed_call(GtkWidget *w, GdkEvent *event,gpointer user_data){
+       GtkWidget *mw=linphone_gtk_get_main_window();
+       GtkNotebook *notebook=GTK_NOTEBOOK(linphone_gtk_get_widget(mw,"viewswitch"));
+       gtk_notebook_set_current_page(notebook,0);
+       linphone_core_reset_missed_calls_count(linphone_gtk_get_core());
+       linphone_gtk_call_log_clear_missed_call();
+       return TRUE;
+}
+
+void linphone_gtk_call_log_display_missed_call(int nb){
+       GtkWidget *mw=linphone_gtk_get_main_window();
+       GtkNotebook *notebook=GTK_NOTEBOOK(linphone_gtk_get_widget(mw,"viewswitch"));
+       GtkWidget *page=gtk_notebook_get_nth_page(notebook,0);
+       GtkWidget *ebox=gtk_event_box_new();
+       GtkWidget *box=gtk_hbox_new(FALSE,0);
+       GtkWidget *image=gtk_image_new_from_stock(GTK_STOCK_REFRESH,GTK_ICON_SIZE_MENU);
+       GtkWidget *l;
+       gchar *buf;
+       
+       buf=g_markup_printf_escaped(_("<b>Recent calls (%i)</b>"),nb);
+       l=gtk_label_new(NULL);
+       gtk_label_set_markup(GTK_LABEL(l),buf);
+       gtk_box_pack_start(GTK_BOX(box),image,FALSE,FALSE,0);
+       gtk_box_pack_start(GTK_BOX(box),l,FALSE,FALSE,0);
+       gtk_container_add(GTK_CONTAINER(ebox),box);
+       gtk_notebook_set_tab_label(notebook,page,ebox);
+       gtk_widget_add_events(ebox,GDK_BUTTON_PRESS_MASK);
+       g_signal_connect(G_OBJECT(ebox),"button_press_event",(GCallback)linphone_gtk_call_log_reset_missed_call,NULL);
+       gtk_widget_show_all(ebox);
+}
+
 void linphone_gtk_call_log_update(GtkWidget *w){
        GtkTreeView *v=GTK_TREE_VIEW(linphone_gtk_get_widget(w,"logs_view"));
        GtkTreeStore *store;
        const MSList *logs;
        GtkTreeSelection *select;
+       GtkWidget *notebook=linphone_gtk_get_widget(w,"viewswitch");
+       gint nb;
 
        store=(GtkTreeStore*)gtk_tree_view_get_model(v);
        if (store==NULL){
-               store=gtk_tree_store_new(3,GDK_TYPE_PIXBUF,G_TYPE_STRING,G_TYPE_POINTER);
+               store=gtk_tree_store_new(3,GDK_TYPE_PIXBUF,G_TYPE_STRING,G_TYPE_POINTER,G_TYPE_STRING);
                gtk_tree_view_set_model(v,GTK_TREE_MODEL(store));
                g_object_unref(G_OBJECT(store));
                fill_renderers(GTK_TREE_VIEW(linphone_gtk_get_widget(w,"logs_view")));
                select=gtk_tree_view_get_selection(v);
                gtk_tree_selection_set_mode(select, GTK_SELECTION_SINGLE);
                g_signal_connect_swapped(G_OBJECT(select),"changed",(GCallback)call_log_selection_changed,v);
+               g_signal_connect(G_OBJECT(notebook),"focus-tab",(GCallback)linphone_gtk_call_log_reset_missed_call,NULL);
                g_signal_connect(G_OBJECT(v),"button-press-event",(GCallback)linphone_gtk_call_log_button_pressed,NULL);
 //             gtk_button_set_image(GTK_BUTTON(linphone_gtk_get_widget(w,"call_back_button")),
 //                                  create_pixmap (linphone_gtk_get_ui_config("callback_button","status-green.png")));
        }
+       nb=linphone_core_get_missed_calls_count(linphone_gtk_get_core());
+       if(nb > 0)
+               linphone_gtk_call_log_display_missed_call(nb);
        gtk_tree_store_clear (store);
 
        for (logs=linphone_core_get_call_logs(linphone_gtk_get_core());logs!=NULL;logs=logs->next){
                LinphoneCallLog *cl=(LinphoneCallLog*)logs->data;
                GtkTreeIter iter, iter2;
-               LinphoneAddress *la=linphone_call_log_get_dir(cl)==LinphoneCallIncoming ? linphone_call_log_get_from(cl) : linphone_call_log_get_to(cl);
-               char *addr= linphone_address_as_string_uri_only (la);
+               const LinphoneAddress *la=linphone_call_log_get_dir(cl)==LinphoneCallIncoming ? linphone_call_log_get_from(cl) : linphone_call_log_get_to(cl);
+               char *addr= linphone_address_as_string(la);
                const char *display;
                gchar *logtxt, *headtxt, *minutes, *seconds;
                gchar quality[20];
                const char *status=NULL;
                gchar *start_date=NULL;
+               LinphoneFriend *lf=NULL;
                int duration=linphone_call_log_get_duration(cl);
                time_t start_date_time=linphone_call_log_get_start_date(cl);
                
@@ -229,12 +282,18 @@ void linphone_gtk_call_log_update(GtkWidget *w){
 #else
                start_date=g_strdup(ctime(&start_date_time));
 #endif
-               
-               display=linphone_address_get_display_name (la);
+               lf=linphone_core_get_friend_by_address(linphone_gtk_get_core(),addr);
+               if(lf != NULL){
+                       la=linphone_friend_get_address(lf);
+                       display=linphone_address_get_display_name(la);
+               } else {
+                       display=linphone_address_get_display_name(la);
+               }
                if (display==NULL){
                        display=linphone_address_get_username (la);
-                       if (display==NULL)
+                       if (display==NULL){
                                display=linphone_address_get_domain (la);
+                       }
                }
                if (linphone_call_log_get_quality(cl)!=-1){
                        snprintf(quality,sizeof(quality),"%.1f",linphone_call_log_get_quality(cl));
@@ -286,7 +345,6 @@ void linphone_gtk_call_log_update(GtkWidget *w){
                g_free(logtxt);
                g_free(headtxt);
        }
-       
 }
 
 void linphone_gtk_history_row_activated(GtkWidget *treeview){
@@ -302,6 +360,7 @@ void linphone_gtk_history_row_selected(GtkWidget *treeview){
 
 void linphone_gtk_clear_call_logs(GtkWidget *button){
        linphone_core_clear_call_logs (linphone_gtk_get_core());
+       linphone_gtk_call_log_clear_missed_call();
        linphone_gtk_call_log_update(gtk_widget_get_toplevel(button));
 }