Hopefully delete messages correctly

This commit is contained in:
Pierre Pronchery 2011-08-21 00:11:56 +00:00
parent 6cae6dcdef
commit e9da2f8904
6 changed files with 190 additions and 81 deletions

View File

@ -67,6 +67,14 @@ typedef enum _ModemCallType
MODEM_CALL_TYPE_DATA
} ModemCallType;
typedef enum _ModemContactStatus
{
MODEM_CONTACT_STATUS_OFFLINE = 0,
MODEM_CONTACT_STATUS_ONLINE,
MODEM_CONTACT_STATUS_AWAY,
MODEM_CONTACT_STATUS_IDLE
} ModemContactStatus;
typedef enum _ModemMessageEncoding
{
MODEM_MESSAGE_ENCODING_NONE = 0,
@ -137,6 +145,7 @@ typedef enum _ModemEventType
MODEM_EVENT_TYPE_CONNECTION,
MODEM_EVENT_TYPE_CONTACT,
MODEM_EVENT_TYPE_MESSAGE,
MODEM_EVENT_TYPE_MESSAGE_DELETED,
MODEM_EVENT_TYPE_MESSAGE_SENT,
MODEM_EVENT_TYPE_MODEL,
MODEM_EVENT_TYPE_REGISTRATION,
@ -198,6 +207,7 @@ typedef union _ModemEvent
{
ModemEventType type;
unsigned int id;
ModemContactStatus status;
char const * name;
char const * number;
} contact;
@ -216,12 +226,12 @@ typedef union _ModemEvent
char const * content;
} message;
/* MODEM_EVENT_TYPE_MESSAGE_SENT */
/* MODEM_EVENT_TYPE_MESSAGE_DELETED, MODEM_EVENT_TYPE_MESSAGE_SENT */
struct
{
ModemEventType type;
unsigned int id;
} message_sent;
} message_deleted, message_sent;
/* MODEM_EVENT_TYPE_MODEL */
struct
@ -321,12 +331,12 @@ typedef union _ModemRequest
unsigned int id;
} contact, contact_delete;
/* MODEM_REQUEST_MESSAGE */
/* MODEM_REQUEST_MESSAGE, MODEM_REQUEST_MESSAGE_DELETE */
struct
{
ModemRequestType type;
unsigned int id;
} message;
} message, message_delete;
/* MODEM_REQUEST_MESSAGE_SEND */
struct

154
po/fr.po
View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Phone 0.0.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-08-21 01:15+0200\n"
"POT-Creation-Date: 2011-08-21 02:10+0200\n"
"PO-Revision-Date: 2010-04-24 02:07+0200\n"
"Last-Translator: Pierre Pronchery <khorben@defora.org>\n"
"Language-Team: DeforaOS development (French) <devel-fr@lists.defora.org>\n"
@ -27,304 +27,308 @@ msgstr ""
" -m\tNom du greffon modem à charger\n"
" -r\tDélai entre deux tentatives d'accès au modem (ms)\n"
#: ../src/phone.c:332
#: ../src/phone.c:333
msgid "All"
msgstr "Tous"
#: ../src/phone.c:333
#: ../src/phone.c:334
msgid "Inbox"
msgstr "Reçus"
#: ../src/phone.c:334
#: ../src/phone.c:335
msgid "Sent"
msgstr "Envoyés"
#: ../src/phone.c:335
#: ../src/phone.c:336
msgid "Drafts"
msgstr "Brouillons"
#: ../src/phone.c:336
#: ../src/phone.c:337
msgid "Trash"
msgstr "Corbeille"
#: ../src/phone.c:489 ../src/phone.c:2473
#: ../src/phone.c:490 ../src/phone.c:2476
msgid "System preferences"
msgstr "Préférences système"
#: ../src/phone.c:500 ../src/phone.c:1902
#: ../src/phone.c:501 ../src/phone.c:1905
msgid "Plug-ins"
msgstr "Greffons"
#: ../src/phone.c:665
#: ../src/phone.c:666
#, c-format
msgid "Checking %s..."
msgstr "Vérification %s..."
#: ../src/phone.c:728
#: ../src/phone.c:729
msgid "Delete this contact?"
msgstr "Supprimer ce contact?"
#: ../src/phone.c:1030 ../src/phone.c:1195
#: ../src/phone.c:1031 ../src/phone.c:1197
msgid "Delete this message?"
msgstr "Supprimer ce message?"
#: ../src/phone.c:1036 ../src/phone.c:1200
#: ../src/phone.c:1037 ../src/phone.c:1202
msgid "Deleting message..."
msgstr "Suppression du message..."
#: ../src/phone.c:1296
#: ../src/phone.c:1299
msgid "Unknown contact"
msgstr "Contact inconnu"
#: ../src/phone.c:1303
#: ../src/phone.c:1306
msgid "Unknown number"
msgstr "Numéro inconnu"
#: ../src/phone.c:1315
#: ../src/phone.c:1318
msgid "In conversation"
msgstr "En conversation"
#: ../src/phone.c:1326
#: ../src/phone.c:1329
msgid "Incoming call"
msgstr "Appel entrant"
#: ../src/phone.c:1336
#: ../src/phone.c:1339
msgid "Outgoing call"
msgstr "Appel sortant"
#: ../src/phone.c:1347
#: ../src/phone.c:1350
msgid "Call finished"
msgstr "Appel terminé"
#: ../src/phone.c:1377
#: ../src/phone.c:1380
msgid "_Answer"
msgstr "_Répondre"
#: ../src/phone.c:1382
#: ../src/phone.c:1385
msgid "_Hangup"
msgstr "Ra_ccrocher"
#: ../src/phone.c:1387
#: ../src/phone.c:1390
msgid "_Reject"
msgstr "Re_jeter"
#: ../src/phone.c:1407
#: ../src/phone.c:1410
msgid "Loudspeaker"
msgstr "Haut-parleur"
#: ../src/phone.c:1415
#: ../src/phone.c:1418
msgid "Mute microphone"
msgstr "Couper le microphone"
#: ../src/phone.c:1457
#: ../src/phone.c:1460
#, c-format
msgid "Enter %s"
msgstr "Entrer %s"
#: ../src/phone.c:1500
#: ../src/phone.c:1503
msgid "Enter"
msgstr "Entrer"
#: ../src/phone.c:1502
#: ../src/phone.c:1505
msgid "Skip"
msgstr "Ignorer"
#: ../src/phone.c:1530
#: ../src/phone.c:1533
msgid "Contacts"
msgstr "Contacts"
#: ../src/phone.c:1536 ../src/phone.c:1647 ../src/phone.c:1683
#: ../src/phone.c:1798 ../src/phone.c:2154
#: ../src/phone.c:1539 ../src/phone.c:1650 ../src/phone.c:1686
#: ../src/phone.c:1801 ../src/phone.c:2157
msgid "Call"
msgstr "Appeler"
#: ../src/phone.c:1542
#: ../src/phone.c:1545
msgid "Write"
msgstr "Écrire"
#: ../src/phone.c:1576 ../src/phone.c:1933 ../src/phone.c:2265
#: ../src/phone.c:1579 ../src/phone.c:1936 ../src/phone.c:2268
msgid "Name"
msgstr "Nom"
#: ../src/phone.c:1622
#: ../src/phone.c:1625
msgid "Dialer"
msgstr "Composer"
#: ../src/phone.c:1649
#: ../src/phone.c:1652
msgid "Hang up"
msgstr "Raccrocher"
#: ../src/phone.c:1677
#: ../src/phone.c:1680
msgid "Phone logs"
msgstr "Journal d'appels"
#: ../src/phone.c:1689
#: ../src/phone.c:1692
msgid "Message"
msgstr "Message"
#: ../src/phone.c:1720
#: ../src/phone.c:1723
msgid "Direction"
msgstr "Direction"
#: ../src/phone.c:1725 ../src/phone.c:1844
#: ../src/phone.c:1728 ../src/phone.c:1847
msgid "To/From"
msgstr "Vers/De"
#: ../src/phone.c:1731 ../src/phone.c:1852
#: ../src/phone.c:1734 ../src/phone.c:1855
msgid "Date"
msgstr "Date"
#: ../src/phone.c:1792
#: ../src/phone.c:1795
msgid "Messages"
msgstr "Messages"
#: ../src/phone.c:1803
#: ../src/phone.c:1806
msgid "New message"
msgstr "Nouveau message"
#: ../src/phone.c:1809 ../src/phone.c:2160
#: ../src/phone.c:1812 ../src/phone.c:2163
msgid "Reply"
msgstr "Répondre"
#: ../src/phone.c:1921
#: ../src/phone.c:1924
msgid "Enabled"
msgstr "Activé"
#: ../src/phone.c:2148
#: ../src/phone.c:2151
msgid "Read message"
msgstr "Lire le message"
#: ../src/phone.c:2166
#: ../src/phone.c:2169
msgid "Forward"
msgstr "Transmettre"
#: ../src/phone.c:2240
#: ../src/phone.c:2243
msgid "Phone settings"
msgstr "Paramètres du téléphone"
#: ../src/phone.c:2317
#: ../src/phone.c:2320
msgid "missed calls"
msgstr "appels manqués"
#: ../src/phone.c:2317
#: ../src/phone.c:2320
msgid "missed call"
msgstr "appel manqué"
#: ../src/phone.c:2326
#: ../src/phone.c:2329
msgid "new messages"
msgstr "nouveaux messages"
#: ../src/phone.c:2327
#: ../src/phone.c:2330
msgid "new message"
msgstr "nouveau message"
#: ../src/phone.c:2345 ../src/phone.c:3250 ../src/phone.c:3254
#: ../src/phone.c:2348 ../src/phone.c:3253 ../src/phone.c:3257
msgid "Information"
msgstr "Information"
#: ../src/phone.c:2355
#: ../src/phone.c:2358
msgid "Status"
msgstr "État"
#: ../src/phone.c:2379
#: ../src/phone.c:2382
msgid "_View"
msgstr "_Vue"
#: ../src/phone.c:2398
#: ../src/phone.c:2401
msgid "_Read"
msgstr "_Lire"
#: ../src/phone.c:2499
#: ../src/phone.c:2502
msgid "Open file..."
msgstr "Ouvrir fichier..."
#: ../src/phone.c:2685
#: ../src/phone.c:2688
msgid "Write message"
msgstr "Écrire un message"
#: ../src/phone.c:2691
#: ../src/phone.c:2694
msgid "Send"
msgstr "Envoyer"
#: ../src/phone.c:2697
#: ../src/phone.c:2700
msgid "Attach"
msgstr "Joindre"
#: ../src/phone.c:2813
#: ../src/phone.c:2816
msgid "Attach file..."
msgstr "Joindre un fichier..."
#: ../src/phone.c:2884
#: ../src/phone.c:2887
#, c-format
msgid "%d message%s, %d/%d characters"
msgstr "%d message%s, %d/%d caractères"
#: ../src/phone.c:2885
#: ../src/phone.c:2888
msgid "s"
msgstr "s"
#: ../src/phone.c:2949
#: ../src/phone.c:2952
msgid "Sending message..."
msgstr "Envoi du message..."
#: ../src/phone.c:2978
#: ../src/phone.c:2981
msgid "Outgoing"
msgstr "Sortant"
#: ../src/phone.c:3164
#: ../src/phone.c:3167
msgid "Operation in progress..."
msgstr "Opération en cours..."
#: ../src/phone.c:3202 ../src/phone.c:3206
#: ../src/phone.c:3205 ../src/phone.c:3209
msgid "Question"
msgstr "Question"
#: ../src/phone.c:3226 ../src/phone.c:3230
#: ../src/phone.c:3229 ../src/phone.c:3233
msgid "Error"
msgstr "Erreur"
#: ../src/phone.c:3456
#: ../src/phone.c:3459
msgid "Name: "
msgstr "Nom: "
#: ../src/phone.c:3465
#: ../src/phone.c:3468
msgid "Number: "
msgstr "Numéro: "
#: ../src/phone.c:3481
#: ../src/phone.c:3484
msgid "New contact"
msgstr "Nouveau contact"
#: ../src/phone.c:3483
#: ../src/phone.c:3486
msgid "Edit contact: "
msgstr "Modifier contact: "
#: ../src/phone.c:3510
#: ../src/phone.c:3513
msgid "The name cannot be empty"
msgstr "Le nom ne peut être vide"
#: ../src/phone.c:3515
#: ../src/phone.c:3518
msgid "The number cannot be empty"
msgstr "Le numéro ne peut être vide"
#: ../src/phone.c:3646
#: ../src/phone.c:3653
msgid "Message sent"
msgstr "Message envoyé"
#: ../src/phone.c:3682
#: ../src/phone.c:3689
#, c-format
msgid "Wrong %s"
msgstr "Mauvais %s"
#: ../src/phone.c:3689
#: ../src/phone.c:3696
#, c-format
msgid "%s is valid"
msgstr "%s valide"
#: ../src/phone.c:3752
#: ../src/phone.c:3759
msgid "Raw data (not shown)"
msgstr "Données brutes (non affichées)"
#: ../src/phone.c:3792
msgid "Message deleted"
msgstr "Message effacé"
#: ../src/phonectl.c:44
msgid ""
"Usage: phonectl -C\n"

View File

@ -208,6 +208,7 @@ int modem_request_type(Modem * modem, ModemRequestType type, ...)
request.contact_delete.id = va_arg(ap, unsigned int);
break;
case MODEM_REQUEST_MESSAGE:
case MODEM_REQUEST_MESSAGE_DELETE:
request.message.id = va_arg(ap, unsigned int);
break;
case MODEM_REQUEST_MESSAGE_SEND:

View File

@ -48,6 +48,7 @@ static int _debug_init(ModemPlugin * modem);
static int _debug_destroy(ModemPlugin * modem);
static int _debug_start(ModemPlugin * modem, unsigned int retry);
static int _debug_stop(ModemPlugin * modem);
static int _debug_request(ModemPlugin * modem, ModemRequest * request);
/* accessors */
static void _debug_set_status(ModemPlugin * modem, char const * status);
@ -69,7 +70,7 @@ ModemPlugin plugin =
_debug_destroy,
_debug_start,
_debug_stop,
NULL,
_debug_request,
NULL,
NULL
};
@ -126,7 +127,7 @@ static int _debug_init(ModemPlugin * modem)
debug->folder = gtk_combo_box_new_text();
gtk_combo_box_append_text(GTK_COMBO_BOX(debug->folder), "Unknown");
gtk_combo_box_append_text(GTK_COMBO_BOX(debug->folder), "Inbox");
gtk_combo_box_append_text(GTK_COMBO_BOX(debug->folder), "Outbox");
gtk_combo_box_append_text(GTK_COMBO_BOX(debug->folder), "Sent");
gtk_combo_box_append_text(GTK_COMBO_BOX(debug->folder), "Drafts");
gtk_combo_box_append_text(GTK_COMBO_BOX(debug->folder), "Trash");
gtk_combo_box_set_active(GTK_COMBO_BOX(debug->folder), 1);
@ -215,6 +216,28 @@ static gboolean _stop_on_idle(gpointer data)
}
/* debug_request */
static int _debug_request(ModemPlugin * modem, ModemRequest * request)
{
ModemEvent event;
if(request == NULL)
return -1;
memset(&event, 0, sizeof(event));
switch(request->type)
{
case MODEM_REQUEST_MESSAGE_DELETE:
event.type = MODEM_EVENT_TYPE_MESSAGE_DELETED;
event.message_deleted.id = request->message_delete.id;
modem->helper->event(modem->helper->modem, &event);
break;
default:
break;
}
return 0;
}
/* accessors */
/* debug_set_status */
static void _debug_set_status(ModemPlugin * modem, char const * status)

View File

@ -281,6 +281,8 @@ static HayesCommandStatus _on_request_generic(HayesCommand * command,
HayesCommandStatus status, void * priv);
static HayesCommandStatus _on_request_message(HayesCommand * command,
HayesCommandStatus status, void * priv);
static HayesCommandStatus _on_request_message_delete(HayesCommand * command,
HayesCommandStatus status, void * priv);
static HayesCommandStatus _on_request_message_list(HayesCommand * command,
HayesCommandStatus status, void * priv);
static HayesCommandStatus _on_request_message_send(HayesCommand * command,
@ -494,6 +496,8 @@ static HayesRequestHandler _hayes_request_handlers[] =
_on_request_contact_list },
{ MODEM_REQUEST_MESSAGE, NULL,
_on_request_message },
{ MODEM_REQUEST_MESSAGE_DELETE, NULL,
_on_request_message_delete },
{ MODEM_REQUEST_MESSAGE_LIST, "AT+CMGL=4",
_on_request_message_list },
{ MODEM_REQUEST_MESSAGE_SEND, NULL,
@ -609,6 +613,8 @@ static char * _request_attention_contact_list(ModemRequest * request);
static char * _request_attention_gprs(ModemPlugin * modem,
char const * username, char const * password);
static char * _request_attention_message(ModemPlugin * modem, unsigned int id);
static char * _request_attention_message_delete(ModemPlugin * modem,
unsigned int id);
static char * _request_attention_message_send(ModemPlugin * modem,
char const * number, ModemMessageEncoding encoding,
size_t length, char const * content);
@ -697,6 +703,9 @@ static char * _request_attention(ModemPlugin * modem, ModemRequest * request)
case MODEM_REQUEST_MESSAGE:
return _request_attention_message(modem,
request->message.id);
case MODEM_REQUEST_MESSAGE_DELETE:
return _request_attention_message_delete(modem,
request->message.id);
case MODEM_REQUEST_MESSAGE_SEND:
return _request_attention_message_send(modem,
request->message_send.number,
@ -818,6 +827,19 @@ static char * _request_attention_message(ModemPlugin * modem, unsigned int id)
return strdup(buf);
}
static char * _request_attention_message_delete(ModemPlugin * modem,
unsigned int id)
{
Hayes * hayes = modem->priv;
char const cmd[] = "AT+CMGD=";
char buf[32];
/* FIXME store in the command itself */
hayes->events[MODEM_EVENT_TYPE_MESSAGE_DELETED].message_deleted.id = id;
snprintf(buf, sizeof(buf), "%s%u", cmd, id);
return strdup(buf);
}
static char * _request_attention_message_send(ModemPlugin * modem,
char const * number, ModemMessageEncoding encoding,
size_t length, char const * content)
@ -1049,6 +1071,7 @@ static int _hayes_trigger(ModemPlugin * modem, ModemEventType event)
break;
case MODEM_EVENT_TYPE_ERROR: /* do not make sense */
case MODEM_EVENT_TYPE_MESSAGE:
case MODEM_EVENT_TYPE_MESSAGE_DELETED:
case MODEM_EVENT_TYPE_MESSAGE_SENT:
ret = -1;
break;
@ -2332,6 +2355,21 @@ static HayesCommandStatus _on_request_message(HayesCommand * command,
}
/* on_request_message_delete */
static HayesCommandStatus _on_request_message_delete(HayesCommand * command,
HayesCommandStatus status, void * priv)
{
ModemPlugin * modem = priv;
Hayes * hayes = modem->priv;
ModemEvent * event = &hayes->events[MODEM_EVENT_TYPE_MESSAGE_DELETED];
if((status = _on_request_generic(command, status, priv)) != HCS_SUCCESS)
return status;
modem->helper->event(modem->helper->modem, event);
return status;
}
/* on_request_message_list */
static HayesCommandStatus _on_request_message_list(HayesCommand * command,
HayesCommandStatus status, void * priv)
@ -3130,6 +3168,7 @@ static void _on_trigger_cpbr(ModemPlugin * modem, char const * answer)
free(hayes->contact_name);
hayes->contact_name = strdup(name);
event->contact.name = hayes->contact_name;
event->contact.status = MODEM_CONTACT_STATUS_OFFLINE;
/* send event */
modem->helper->event(modem->helper->modem, event);
}

View File

@ -132,6 +132,7 @@ typedef enum _PhoneSettingsColumn
typedef enum _PhoneTrack
{
PHONE_TRACK_CODE_ENTERED = 0,
PHONE_TRACK_MESSAGE_DELETED,
PHONE_TRACK_MESSAGE_LIST,
PHONE_TRACK_MESSAGE_SENT
} PhoneTrack;
@ -1034,6 +1035,7 @@ void phone_messages_delete_selected(Phone * phone)
phone_show_read(phone, FALSE);
phone->me_progress = _phone_create_progress(phone->me_window,
_("Deleting message..."));
_phone_track(phone, PHONE_TRACK_MESSAGE_DELETED, TRUE);
modem_request_type(phone->modem, MODEM_REQUEST_MESSAGE_DELETE, index);
}
@ -1198,6 +1200,7 @@ void phone_read_delete(Phone * phone)
phone_show_read(phone, FALSE);
phone->me_progress = _phone_create_progress(phone->me_window,
_("Deleting message..."));
_phone_track(phone, PHONE_TRACK_MESSAGE_DELETED, TRUE);
modem_request_type(phone->modem, MODEM_REQUEST_MESSAGE_DELETE,
phone->re_index);
}
@ -3610,6 +3613,7 @@ static void _modem_event_authentication(Phone * phone, ModemEvent * event);
static void _modem_event_call(Phone * phone, ModemEvent * event);
static void _modem_event_error(Phone * phone, ModemEvent * event);
static void _modem_event_message(Phone * phone, ModemEvent * event);
static void _modem_event_message_deleted(Phone * phone, ModemEvent * event);
static void _phone_modem_event(void * priv, ModemEvent * event)
{
@ -3639,6 +3643,9 @@ static void _phone_modem_event(void * priv, ModemEvent * event)
case MODEM_EVENT_TYPE_MESSAGE:
_modem_event_message(phone, event);
break;
case MODEM_EVENT_TYPE_MESSAGE_DELETED:
_modem_event_message_deleted(phone, event);
break;
case MODEM_EVENT_TYPE_MESSAGE_SENT:
_phone_track(phone, PHONE_TRACK_MESSAGE_SENT, FALSE);
phone->wr_progress = _phone_progress_delete(
@ -3762,6 +3769,29 @@ static void _modem_event_message(Phone * phone, ModemEvent * event)
phone_show_status(phone, TRUE, 0, 1);
}
static void _modem_event_message_deleted(Phone * phone, ModemEvent * event)
{
GtkTreeModel * model = GTK_TREE_MODEL(phone->me_store);
GtkTreeIter iter;
gboolean valid;
unsigned int id;
for(valid = gtk_tree_model_get_iter_first(model, &iter); 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.id)
{
gtk_list_store_remove(phone->me_store, &iter);
break;
}
}
_phone_track(phone, PHONE_TRACK_MESSAGE_DELETED, FALSE);
phone->me_progress = _phone_progress_delete(phone->me_progress);
_phone_info(phone, phone->me_window, _("Message deleted"), NULL);
}
/* phone_modem_event_authentication */
static void _phone_modem_event_authentication(GtkWidget * widget, gint response,
@ -3781,6 +3811,8 @@ static gboolean _phone_timeout_track(gpointer data)
if(phone->tracks[PHONE_TRACK_CODE_ENTERED])
_phone_progress_pulse(phone->en_progress);
if(phone->tracks[PHONE_TRACK_MESSAGE_DELETED])
_phone_progress_pulse(phone->me_progress);
if(phone->tracks[PHONE_TRACK_MESSAGE_LIST])
{
_phone_track(phone, PHONE_TRACK_MESSAGE_LIST, FALSE);