From 020c9731fb9b546f62b29d115c7d6f8261f78a8d Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Sun, 13 Jun 2010 16:05:43 +0000 Subject: [PATCH] Automatically guess the adequate trigger when registered through a plug-in --- po/fr.po | 128 ++++++++++++++++++++++++++++++---------------------- src/gsm.c | 7 +-- src/gsm.h | 2 + src/modem.c | 3 +- src/phone.c | 22 +++++++-- 5 files changed, 100 insertions(+), 62 deletions(-) diff --git a/po/fr.po b/po/fr.po index 8733ccd..968d3b5 100644 --- a/po/fr.po +++ b/po/fr.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Phone 0.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-06-03 16:53+0200\n" +"POT-Creation-Date: 2010-06-13 17:44+0200\n" "PO-Revision-Date: 2010-04-24 02:07+0200\n" "Last-Translator: Pierre Pronchery \n" "Language-Team: French\n" @@ -112,7 +112,7 @@ msgstr "Délai d'attente du réseau dépassé" msgid "Network not allowed - emergency calls only" msgstr "Réseau non autorisé - appels d'urgence uniquement" -#: ../src/gsm.c:172 ../src/gsm.c:1155 ../src/gsm.c:1365 ../src/gsm.c:1425 +#: ../src/gsm.c:172 ../src/gsm.c:1184 ../src/gsm.c:1394 ../src/gsm.c:1454 msgid "Unknown error" msgstr "Erreur inconnue" @@ -136,7 +136,7 @@ msgstr "Index mémoire invalide" msgid ": Unknown baudrate, assuming 115200" msgstr ": Débit inconnu, tente 115200" -#: ../src/gsm.c:995 +#: ../src/gsm.c:1024 msgid "Event not handled" msgstr "Événement non géré" @@ -149,208 +149,228 @@ msgid "" " -F\tEnable hardware flow control (RTS/CTS)\n" msgstr "" -#: ../src/phone.c:352 +#: ../src/phone.c:376 msgid "Initializing..." msgstr "Initialisation..." -#: ../src/phone.c:543 +#: ../src/phone.c:565 msgid "Checking SIM PIN code..." msgstr "Vérification du code SIM PIN..." -#: ../src/phone.c:987 +#: ../src/phone.c:889 ../src/phone.c:961 +msgid "Delete this message?" +msgstr "Supprimer ce message?" + +#: ../src/phone.c:895 ../src/phone.c:966 +msgid "Deleting message..." +msgstr "Suppression du message..." + +#: ../src/phone.c:1040 msgid "Answer" msgstr "Répondre" -#: ../src/phone.c:994 +#: ../src/phone.c:1047 msgid "Hangup" msgstr "Raccrocher" -#: ../src/phone.c:1001 +#: ../src/phone.c:1054 msgid "Reject" msgstr "Rejeter" -#: ../src/phone.c:1024 +#: ../src/phone.c:1077 msgid "Loudspeaker" msgstr "Haut-parleur" -#: ../src/phone.c:1034 +#: ../src/phone.c:1087 msgid "Mute microphone" msgstr "Couper le microphone" -#: ../src/phone.c:1050 +#: ../src/phone.c:1103 msgid "Unknown contact" msgstr "Contact inconnu" -#: ../src/phone.c:1057 +#: ../src/phone.c:1110 msgid "Unknown number" msgstr "Numéro inconnu" -#: ../src/phone.c:1065 +#: ../src/phone.c:1118 msgid "In conversation" msgstr "En conversation" -#: ../src/phone.c:1073 +#: ../src/phone.c:1126 msgid "Incoming call" msgstr "Appel entrant" -#: ../src/phone.c:1080 +#: ../src/phone.c:1133 msgid "Outgoing call" msgstr "Appel sortant" -#: ../src/phone.c:1088 +#: ../src/phone.c:1141 msgid "Call finished" msgstr "Appel terminé" -#: ../src/phone.c:1142 +#: ../src/phone.c:1195 msgid "Enter" msgstr "Entrer" -#: ../src/phone.c:1144 +#: ../src/phone.c:1197 msgid "Skip" msgstr "Ignorer" -#: ../src/phone.c:1155 +#: ../src/phone.c:1208 msgid "Enter SIM PIN code" msgstr "Entrer le code SIM PIN" -#: ../src/phone.c:1184 +#: ../src/phone.c:1237 msgid "Contacts" msgstr "Contacts" -#: ../src/phone.c:1191 ../src/phone.c:1500 ../src/phone.c:1543 -#: ../src/phone.c:1668 +#: ../src/phone.c:1244 ../src/phone.c:1553 ../src/phone.c:1596 +#: ../src/phone.c:1720 msgid "Call" msgstr "Appeler" -#: ../src/phone.c:1201 +#: ../src/phone.c:1254 msgid "Write" msgstr "Écrire" -#: ../src/phone.c:1223 ../src/phone.c:1762 +#: ../src/phone.c:1276 ../src/phone.c:1824 msgid "Name" msgstr "Nom" -#: ../src/phone.c:1472 +#: ../src/phone.c:1525 msgid "Dialer" msgstr "Composer" -#: ../src/phone.c:1502 +#: ../src/phone.c:1555 msgid "Hang up" msgstr "Raccrocher" -#: ../src/phone.c:1536 +#: ../src/phone.c:1589 msgid "Messages" msgstr "Messages" -#: ../src/phone.c:1549 +#: ../src/phone.c:1602 msgid "New message" msgstr "Nouveau message" -#: ../src/phone.c:1555 +#: ../src/phone.c:1608 ../src/phone.c:1726 msgid "Reply" msgstr "Répondre" -#: ../src/phone.c:1573 +#: ../src/phone.c:1626 msgid "Inbox" msgstr "Reçus" -#: ../src/phone.c:1577 +#: ../src/phone.c:1630 msgid "Sent" msgstr "Envoyés" -#: ../src/phone.c:1596 +#: ../src/phone.c:1649 msgid "From" msgstr "De" -#: ../src/phone.c:1602 +#: ../src/phone.c:1655 msgid "Date" msgstr "Date" -#: ../src/phone.c:1662 +#: ../src/phone.c:1714 msgid "Read message" msgstr "Lire le message" -#: ../src/phone.c:1739 +#: ../src/phone.c:1801 msgid "Phone settings" msgstr "Paramètres du téléphone" -#: ../src/phone.c:1802 +#: ../src/phone.c:1864 msgid "Write message" msgstr "Écrire un message" -#: ../src/phone.c:1808 +#: ../src/phone.c:1870 msgid "Send" msgstr "Envoyer" -#: ../src/phone.c:1814 +#: ../src/phone.c:1876 msgid "Attach" msgstr "Attacher" -#: ../src/phone.c:1920 +#: ../src/phone.c:1990 #, c-format msgid "%d message%s, %d/%d characters" msgstr "%d message%s, %d/%d caractères" -#: ../src/phone.c:1921 +#: ../src/phone.c:1991 msgid "s" msgstr "s" -#: ../src/phone.c:1947 +#: ../src/phone.c:2017 msgid "Sending message..." msgstr "Envoi du message..." -#: ../src/phone.c:2063 +#: ../src/phone.c:2133 msgid "Operation in progress..." msgstr "Opération en cours..." -#: ../src/phone.c:2091 ../src/phone.c:2096 +#: ../src/phone.c:2161 ../src/phone.c:2166 +msgid "Question" +msgstr "Question" + +#: ../src/phone.c:2186 ../src/phone.c:2191 msgid "Error" msgstr "Erreur" -#: ../src/phone.c:2143 ../src/phone.c:2148 +#: ../src/phone.c:2238 ../src/phone.c:2243 msgid "Information" msgstr "Information" -#: ../src/phone.c:2238 +#: ../src/phone.c:2355 msgid "Unknown" msgstr "Inconnu" -#: ../src/phone.c:2241 +#: ../src/phone.c:2358 msgid "Registering..." msgstr "Enregistrement..." -#: ../src/phone.c:2244 +#: ../src/phone.c:2361 msgid "Denied" msgstr "Refusé" -#: ../src/phone.c:2249 +#: ../src/phone.c:2366 msgid "SIM check..." msgstr "Vérification SIM..." -#: ../src/phone.c:2255 +#: ../src/phone.c:2372 msgid "SIM ready..." msgstr "SIM prête..." -#: ../src/phone.c:2372 +#: ../src/phone.c:2491 msgid "New message received" msgstr "Nouveau message reçu" -#: ../src/phone.c:2399 +#: ../src/phone.c:2507 msgid "Message sent" msgstr "Message envoyé" -#: ../src/phone.c:2423 +#: ../src/phone.c:2531 msgid "SIM PIN is valid" msgstr "Code SIM PIN valide" -#: ../src/phone.c:2463 +#: ../src/phone.c:2567 +msgid "Could not request new message indications" +msgstr "" + +#: ../src/phone.c:2578 msgid "Could not send message" msgstr "Le message n'a pas pu être envoyé" -#: ../src/phone.c:2471 +#: ../src/phone.c:2586 msgid "Wrong SIM PIN code" msgstr "Code SIM PIN erroné" +#: ../src/phone.c:2636 +msgid "Message deleted" +msgstr "Message supprimé" + #: ../src/plugins/profiles.c:137 ../src/plugins/profiles.c:145 msgid "Could not initialize PulseAudio" msgstr "Impossible d'initialiser PulseAudio" diff --git a/src/gsm.c b/src/gsm.c index c072f13..965e485 100644 --- a/src/gsm.c +++ b/src/gsm.c @@ -708,6 +708,7 @@ int gsm_event(GSM * gsm, GSMEventType type, ...) event->status.status = va_arg(ap, GSMStatus); break; case GSM_EVENT_TYPE_UNKNOWN: + event->unknown.command = va_arg(ap, char const *); event->unknown.result = va_arg(ap, char const *); break; } @@ -1186,14 +1187,14 @@ static int _gsm_parse_line(GSM * gsm, char const * line, gboolean * answered) /* XXX look for a potential trigger */ if(cmd != NULL && strncmp(cmd, "AT+", 3) == 0 && isupper((c = cmd[3]))) { - for(cmd += 2, j = 2; cmd[j] != '\0' && isupper((c = cmd[j])); + for(j = 2; cmd[j + 2] != '\0' && isupper((c = cmd[j + 2])); j++); for(i = 0; _gsm_triggers[i].trigger != NULL; i++) - if(strncmp(cmd, _gsm_triggers[i].trigger, j) == 0) + if(strncmp(cmd + 2, _gsm_triggers[i].trigger, j) == 0) return _gsm_triggers[i].callback(gsm, line, answered); } - return gsm_event(gsm, GSM_EVENT_TYPE_UNKNOWN, line); + return gsm_event(gsm, GSM_EVENT_TYPE_UNKNOWN, cmd, line); } diff --git a/src/gsm.h b/src/gsm.h index 08454cd..628fffe 100644 --- a/src/gsm.h +++ b/src/gsm.h @@ -63,6 +63,7 @@ typedef enum _GSMError GSM_ERROR_HANGUP_FAILED, GSM_ERROR_MESSAGE_DELETE_FAILED, GSM_ERROR_MESSAGE_FETCH_FAILED, + GSM_ERROR_MESSAGE_INDICATIONS_FAILED, GSM_ERROR_MESSAGE_LIST_FAILED, GSM_ERROR_MESSAGE_SEND_FAILED, GSM_ERROR_MUTE_FAILED, @@ -341,6 +342,7 @@ typedef union _GSMEvent struct { GSMEventType type; + char const * command; char const * result; } unknown; } GSMEvent; diff --git a/src/modem.c b/src/modem.c index a828d53..7ed30a1 100644 --- a/src/modem.c +++ b/src/modem.c @@ -755,7 +755,8 @@ int gsm_modem_set_message_indications(GSMModem * gsmm, GSMMessageMode mode, } cmd[8] = mode + '0'; cmd[10] = unsollicited ? '1' : '0'; - return (gsm_queue(gsmm->gsm, cmd) != NULL) ? 0 : 1; + return gsm_queue_full(gsmm->gsm, GSM_PRIORITY_NORMAL, cmd, + GSM_ERROR_MESSAGE_INDICATIONS_FAILED, NULL); } diff --git a/src/phone.c b/src/phone.c index ad29b8b..24b5e40 100644 --- a/src/phone.c +++ b/src/phone.c @@ -2422,7 +2422,8 @@ static int _gsm_event_message_deleted(Phone * phone, GSMEvent * event); static int _gsm_event_phone_activity(Phone * phone, GSMPhoneActivity activity); static void _on_sim_pin_valid_response(GtkWidget * widget, gint response, gpointer data); -static int _gsm_event_unknown(Phone * phone, char const * result); +static int _gsm_event_unknown(Phone * phone, char const * command, + char const * result); static int _phone_gsm_event(GSMEvent * event, gpointer data) { @@ -2535,7 +2536,8 @@ static int _phone_gsm_event(GSMEvent * event, gpointer data) _phone_set_status(phone, event->status.status); return 0; case GSM_EVENT_TYPE_UNKNOWN: - return _gsm_event_unknown(phone, event->unknown.result); + return _gsm_event_unknown(phone, event->unknown.command, + event->unknown.result); } return 1; } @@ -2561,6 +2563,10 @@ static int _gsm_event_error(Phone * phone, GSMEvent * event) case GSM_ERROR_FUNCTIONAL_FAILED: _phone_track(phone, PHONE_TRACK_FUNCTIONAL, TRUE); break; + case GSM_ERROR_MESSAGE_INDICATIONS_FAILED: + phone_error(phone, _("Could not request new message" + " indications"), 0); + break; case GSM_ERROR_MESSAGE_LIST_FAILED: _phone_track(phone, PHONE_TRACK_MESSAGE_LIST, TRUE); break; @@ -2671,16 +2677,24 @@ static void _on_sim_pin_valid_response(GtkWidget * widget, gint response, gtk_widget_destroy(widget); } -static int _gsm_event_unknown(Phone * phone, char const * result) +static int _gsm_event_unknown(Phone * phone, char const * command, + char const * result) { int ret = 0; size_t i; PhoneTrigger * trigger; +#ifdef DEBUG + fprintf(stderr, "DEBUG: %s(phone, \"%s\", \"%s\")\n", __func__, command, + result); +#endif for(i = 0; i < phone->triggers_cnt; i++) { trigger = &phone->triggers[i]; - if(strncmp(trigger->trigger, result, trigger->trigger_cnt) == 0) + if(strncmp(trigger->trigger, result, trigger->trigger_cnt) == 0 + || (strlen(command) > 2 && strncmp( + trigger->trigger, &command[2], + trigger->trigger_cnt) == 0)) ret |= trigger->callback(trigger->plugin, result); } return ret;