Remove the message from the list when deleted
This commit is contained in:
parent
df16ab82c2
commit
5ae625c4d9
15
src/gsm.c
15
src/gsm.c
@ -586,6 +586,20 @@ int gsm_call_reject(GSM * gsm)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* callbacks */
|
||||||
|
/* gsm_callback_on_message_deleted */
|
||||||
|
void gsm_callback_on_message_deleted(GSM * gsm)
|
||||||
|
{
|
||||||
|
GSMCommand * gsmc;
|
||||||
|
unsigned long index;
|
||||||
|
|
||||||
|
if((gsmc = g_slist_nth_data(gsm->queue, 0)) == NULL)
|
||||||
|
return;
|
||||||
|
index = (unsigned long)gsm_command_get_data(gsmc);
|
||||||
|
gsm_event(gsm, GSM_EVENT_TYPE_MESSAGE_DELETED, index);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* gsm_enter_sim_pin */
|
/* gsm_enter_sim_pin */
|
||||||
int gsm_enter_sim_pin(GSM * gsm, char const * code)
|
int gsm_enter_sim_pin(GSM * gsm, char const * code)
|
||||||
{
|
{
|
||||||
@ -657,6 +671,7 @@ int gsm_event(GSM * gsm, GSMEventType type, ...)
|
|||||||
event->message.content = va_arg(ap, char const *);
|
event->message.content = va_arg(ap, char const *);
|
||||||
break;
|
break;
|
||||||
case GSM_EVENT_TYPE_MESSAGE_DELETED:
|
case GSM_EVENT_TYPE_MESSAGE_DELETED:
|
||||||
|
event->message.index = va_arg(ap, unsigned int);
|
||||||
break;
|
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);
|
||||||
|
10
src/gsm.h
10
src/gsm.h
@ -274,6 +274,13 @@ typedef union _GSMEvent
|
|||||||
char const * content;
|
char const * content;
|
||||||
} message;
|
} message;
|
||||||
|
|
||||||
|
/* GSM_EVENT_TYPE_MESSAGE_DELETED */
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
GSMEventType type;
|
||||||
|
unsigned int index;
|
||||||
|
} message_deleted;
|
||||||
|
|
||||||
/* GSM_EVENT_TYPE_MESSAGE_SENT */
|
/* GSM_EVENT_TYPE_MESSAGE_SENT */
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
@ -364,6 +371,9 @@ int gsm_call_contact(GSM * gsm, GSMCallType calltype, unsigned int index);
|
|||||||
int gsm_call_hangup(GSM * gsm);
|
int gsm_call_hangup(GSM * gsm);
|
||||||
int gsm_call_reject(GSM * gsm);
|
int gsm_call_reject(GSM * gsm);
|
||||||
|
|
||||||
|
/* callbacks */
|
||||||
|
void gsm_callback_on_message_deleted(GSM * gsm);
|
||||||
|
|
||||||
int gsm_enter_sim_pin(GSM * gsm, char const * code);
|
int gsm_enter_sim_pin(GSM * gsm, char const * code);
|
||||||
|
|
||||||
/* event */
|
/* event */
|
||||||
|
22
src/modem.c
22
src/modem.c
@ -303,7 +303,6 @@ int gsm_modem_get_message(GSMModem * gsmm, unsigned int index)
|
|||||||
snprintf(cmd, sizeof(cmd), "%s%u", "AT+CMGR=", index);
|
snprintf(cmd, sizeof(cmd), "%s%u", "AT+CMGR=", index);
|
||||||
if((gsmc = gsm_command_new(cmd)) == NULL)
|
if((gsmc = gsm_command_new(cmd)) == NULL)
|
||||||
return 1;
|
return 1;
|
||||||
gsm_command_set_priority(gsmc, GSM_PRIORITY_NORMAL);
|
|
||||||
gsm_command_set_error(gsmc, GSM_ERROR_MESSAGE_FETCH_FAILED);
|
gsm_command_set_error(gsmc, GSM_ERROR_MESSAGE_FETCH_FAILED);
|
||||||
gsm_command_set_data(gsmc, (void *)i); /* XXX ugly */
|
gsm_command_set_data(gsmc, (void *)i); /* XXX ugly */
|
||||||
/* XXX race condition here if the user forces out of PDU mode */
|
/* XXX race condition here if the user forces out of PDU mode */
|
||||||
@ -430,21 +429,22 @@ 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)
|
||||||
{
|
{
|
||||||
|
GSMCommand * gsmc;
|
||||||
char cmd[32];
|
char cmd[32];
|
||||||
|
unsigned long i = index;
|
||||||
|
|
||||||
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,
|
if((gsmc = gsm_command_new(cmd)) == NULL)
|
||||||
GSM_ERROR_MESSAGE_DELETE_FAILED,
|
return 1;
|
||||||
_modem_message_delete_callback);
|
gsm_command_set_error(gsmc, GSM_ERROR_MESSAGE_DELETE_FAILED);
|
||||||
}
|
gsm_command_set_data(gsmc, (void *)i); /* XXX ugly */
|
||||||
|
gsm_command_set_callback(gsmc, gsm_callback_on_message_deleted);
|
||||||
static void _modem_message_delete_callback(GSM * gsm)
|
if(gsm_queue_command(gsmm->gsm, gsmc) == 0)
|
||||||
{
|
return 0;
|
||||||
gsm_event(gsm, GSM_EVENT_TYPE_MESSAGE_DELETED);
|
gsm_command_delete(gsmc);
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
30
src/phone.c
30
src/phone.c
@ -2372,6 +2372,7 @@ static void _phone_track(Phone * phone, PhoneTrack what, gboolean track)
|
|||||||
/* phone_gsm_event */
|
/* phone_gsm_event */
|
||||||
static int _gsm_event_error(Phone * phone, GSMEvent * event);
|
static int _gsm_event_error(Phone * phone, GSMEvent * event);
|
||||||
static int _gsm_event_message(Phone * phone, GSMEvent * event);
|
static int _gsm_event_message(Phone * phone, GSMEvent * event);
|
||||||
|
static int _gsm_event_message_deleted(Phone * phone, GSMEvent * event);
|
||||||
static int _gsm_event_phone_activity(Phone * phone, GSMPhoneActivity activity);
|
static int _gsm_event_phone_activity(Phone * phone, GSMPhoneActivity activity);
|
||||||
static void _on_sim_pin_valid_response(GtkWidget * widget, gint response,
|
static void _on_sim_pin_valid_response(GtkWidget * widget, gint response,
|
||||||
gpointer data);
|
gpointer data);
|
||||||
@ -2446,11 +2447,7 @@ static int _phone_gsm_event(GSMEvent * event, gpointer data)
|
|||||||
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:
|
case GSM_EVENT_TYPE_MESSAGE_DELETED:
|
||||||
phone->me_progress = _phone_progress_delete(
|
return _gsm_event_message_deleted(phone, event);
|
||||||
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);
|
||||||
@ -2573,6 +2570,29 @@ static int _gsm_event_message(Phone * phone, GSMEvent * event)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int _gsm_event_message_deleted(Phone * phone, GSMEvent * event)
|
||||||
|
{
|
||||||
|
GtkTreeModel * model = GTK_TREE_MODEL(phone->me_store);
|
||||||
|
GtkTreeIter iter;
|
||||||
|
gboolean valid;
|
||||||
|
unsigned int id;
|
||||||
|
|
||||||
|
phone->me_progress = _phone_progress_delete(phone->me_progress);
|
||||||
|
_phone_info(phone, phone->me_window, _("Message deleted"), NULL);
|
||||||
|
valid = gtk_tree_model_get_iter_first(model, &iter);
|
||||||
|
for(; valid == TRUE; valid = gtk_tree_model_iter_next(model, &iter))
|
||||||
|
{
|
||||||
|
gtk_tree_model_get(model, &iter, PHONE_MESSAGE_COLUMN_ID, &id,
|
||||||
|
-1);
|
||||||
|
if(id == event->message_deleted.index)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(valid != TRUE)
|
||||||
|
return 1; /* not found */
|
||||||
|
gtk_list_store_remove(phone->me_store, &iter);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int _gsm_event_phone_activity(Phone * phone, GSMPhoneActivity activity)
|
static int _gsm_event_phone_activity(Phone * phone, GSMPhoneActivity activity)
|
||||||
{
|
{
|
||||||
switch(activity)
|
switch(activity)
|
||||||
|
Loading…
Reference in New Issue
Block a user