Asking for confirmation before deleting a message (untested)

This commit is contained in:
Pierre Pronchery 2010-06-05 09:16:13 +00:00
parent b029f690c7
commit 5c655fe692
4 changed files with 59 additions and 4 deletions

View File

@ -656,6 +656,8 @@ int gsm_event(GSM * gsm, GSMEventType type, ...)
event->message.length = va_arg(ap, unsigned int); event->message.length = va_arg(ap, unsigned int);
event->message.content = va_arg(ap, char const *); event->message.content = va_arg(ap, char const *);
break; break;
case GSM_EVENT_TYPE_MESSAGE_DELETED:
break;
case GSM_EVENT_TYPE_MESSAGE_LIST: case GSM_EVENT_TYPE_MESSAGE_LIST:
event->message_list.start = va_arg(ap, unsigned int); event->message_list.start = va_arg(ap, unsigned int);
event->message_list.end = va_arg(ap, unsigned int); event->message_list.end = va_arg(ap, unsigned int);

View File

@ -61,6 +61,7 @@ typedef enum _GSMEventType
GSM_EVENT_TYPE_INCOMING_CALL, GSM_EVENT_TYPE_INCOMING_CALL,
GSM_EVENT_TYPE_INCOMING_MESSAGE, GSM_EVENT_TYPE_INCOMING_MESSAGE,
GSM_EVENT_TYPE_MESSAGE, GSM_EVENT_TYPE_MESSAGE,
GSM_EVENT_TYPE_MESSAGE_DELETED,
GSM_EVENT_TYPE_MESSAGE_LIST, GSM_EVENT_TYPE_MESSAGE_LIST,
GSM_EVENT_TYPE_MESSAGE_SENT, GSM_EVENT_TYPE_MESSAGE_SENT,
GSM_EVENT_TYPE_MUTE, GSM_EVENT_TYPE_MUTE,

View File

@ -430,13 +430,21 @@ int gsm_modem_is_registered(GSMModem * gsmm)
/* gsm_modem_message_delete */ /* gsm_modem_message_delete */
static void _modem_message_delete_callback(GSM * gsm);
int gsm_modem_message_delete(GSMModem * gsmm, unsigned int index) int gsm_modem_message_delete(GSMModem * gsmm, unsigned int index)
{ {
char cmd[32]; char cmd[32];
snprintf(cmd, sizeof(cmd), "%s%u", "AT+CMGD=", index); snprintf(cmd, sizeof(cmd), "%s%u", "AT+CMGD=", index);
return gsm_queue_full(gsmm->gsm, GSM_PRIORITY_NORMAL, cmd, return gsm_queue_full(gsmm->gsm, GSM_PRIORITY_NORMAL, cmd,
GSM_ERROR_MESSAGE_DELETE_FAILED, NULL); GSM_ERROR_MESSAGE_DELETE_FAILED,
_modem_message_delete_callback);
}
static void _modem_message_delete_callback(GSM * gsm)
{
gsm_event(gsm, GSM_EVENT_TYPE_MESSAGE_DELETED);
} }

View File

@ -164,6 +164,7 @@ struct _Phone
GtkWidget * me_window; GtkWidget * me_window;
GtkListStore * me_store; GtkListStore * me_store;
GtkWidget * me_view; GtkWidget * me_view;
GtkWidget * me_progress;
/* read */ /* read */
unsigned int re_index; unsigned int re_index;
@ -210,6 +211,8 @@ static GtkWidget * _phone_create_dialpad(Phone * phone,
static GtkWidget * _phone_create_progress(GtkWidget * parent, static GtkWidget * _phone_create_progress(GtkWidget * parent,
char const * text); char const * text);
static int _phone_confirm(Phone * phone, GtkWidget * window,
char const * message);
static void _phone_error(GtkWidget * window, char const * message); static void _phone_error(GtkWidget * window, char const * message);
static void _phone_fetch_contacts(Phone * phone, unsigned int start, static void _phone_fetch_contacts(Phone * phone, unsigned int start,
@ -865,10 +868,14 @@ void phone_messages_delete_selected(Phone * phone)
return; return;
gtk_tree_model_get(GTK_TREE_MODEL(phone->me_store), &iter, gtk_tree_model_get(GTK_TREE_MODEL(phone->me_store), &iter,
PHONE_MESSAGE_COLUMN_ID, &index, -1); PHONE_MESSAGE_COLUMN_ID, &index, -1);
/* FIXME ask for confirmation first, add a progress window */ if(_phone_confirm(phone, phone->me_window, _("Delete this message?"))
gsm_message_delete(phone->gsm, index); != 0)
return;
if(phone->re_index == index) if(phone->re_index == index)
phone_show_read(phone, FALSE); phone_show_read(phone, FALSE);
phone->me_progress = _phone_create_progress(phone->me_window,
_("Deleting message..."));
gsm_message_delete(phone->gsm, index);
} }
@ -933,9 +940,15 @@ void phone_read_call(Phone * phone)
/* phone_read_delete */ /* phone_read_delete */
void phone_read_delete(Phone * phone) void phone_read_delete(Phone * phone)
{ {
/* FIXME ask for confirmation first, add a progress window */ if(_phone_confirm(phone, phone->re_window, _("Delete this message?"))
!= 0)
return;
phone_show_read(phone, FALSE);
gsm_message_delete(phone->gsm, phone->re_index); gsm_message_delete(phone->gsm, phone->re_index);
phone_show_read(phone, FALSE); phone_show_read(phone, FALSE);
phone->me_progress = _phone_create_progress(phone->me_window,
_("Deleting message..."));
gsm_message_delete(phone->gsm, phone->re_index);
} }
@ -2110,6 +2123,31 @@ static GtkWidget * _phone_create_progress(GtkWidget * parent, char const * text)
} }
/* phone_confirm */
static int _phone_confirm(Phone * phone, GtkWidget * window,
char const * message)
{
GtkWidget * dialog;
int res;
dialog = gtk_message_dialog_new(GTK_WINDOW(window),
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, "%s",
#if GTK_CHECK_VERSION(2, 8, 0)
_("Question"));
gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),
"%s",
#endif
message);
gtk_window_set_title(GTK_WINDOW(dialog), _("Question"));
res = gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(dialog);
if(res == GTK_RESPONSE_YES)
return 0;
return 1;
}
/* phone_error */ /* phone_error */
static void _phone_error(GtkWidget * window, char const * message) static void _phone_error(GtkWidget * window, char const * message)
{ {
@ -2407,6 +2445,12 @@ static int _phone_gsm_event(GSMEvent * event, gpointer data)
return 0; return 0;
case GSM_EVENT_TYPE_MESSAGE: case GSM_EVENT_TYPE_MESSAGE:
return _gsm_event_message(phone, event); return _gsm_event_message(phone, event);
case GSM_EVENT_TYPE_MESSAGE_DELETED:
phone->me_progress = _phone_progress_delete(
phone->me_progress);
_phone_info(phone, phone->me_window,
_("Message deleted"), NULL);
return 0;
case GSM_EVENT_TYPE_MESSAGE_LIST: case GSM_EVENT_TYPE_MESSAGE_LIST:
_phone_fetch_messages(phone, event->message_list.start, _phone_fetch_messages(phone, event->message_list.start,
event->message_list.end); event->message_list.end);