performance changes; phonebook location enhancements and sanity checks
authorMichael Schmidt <drmichael@users.schwerkraft.elitedvb.net>
Sat, 6 Mar 2010 16:33:42 +0000 (16:33 +0000)
committerMichael Schmidt <drmichael@users.schwerkraft.elitedvb.net>
Sat, 6 Mar 2010 16:33:42 +0000 (16:33 +0000)
fritzcall/meta/plugin_fritzcall.xml
fritzcall/po/FritzCall.pot
fritzcall/po/de.po
fritzcall/po/es.po
fritzcall/po/it.po
fritzcall/po/nl.po
fritzcall/po/sr.po
fritzcall/po/tr.po
fritzcall/src/__init__.py
fritzcall/src/plugin.py
fritzcall/src/reverselookup.xml

index 1dd4228..ec480f1 100755 (executable)
@@ -22,5 +22,7 @@
          <files type="package"> <!-- without version, without .ipk -->
                <file type="package" name="enigma2-plugin-extensions-fritzcall" />
                <file type="package" name="python-html" />
+               <file type="package" name="python-textutils" />
+               <file type="package" name="twisted-web" />
          </files>
 </default>
index bd18ece..bdfdf60 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-10 17:00+0100\n"
+"POT-Creation-Date: 2010-03-06 13:31+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -303,6 +303,9 @@ msgstr ""
 msgid "Name"
 msgstr ""
 
+msgid "Network mount"
+msgstr ""
+
 #. TRANSLATORS: keep it short, this is a button
 msgid "New"
 msgstr ""
@@ -569,9 +572,6 @@ msgstr ""
 msgid "number suppressed"
 msgstr ""
 
-msgid "on connect"
-msgstr ""
-
 msgid "on ring"
 msgstr ""
 
index e5f6724..eab62e2 100644 (file)
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Enigma2 FritzCall Plugin\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-10 16:55+0100\n"
-"PO-Revision-Date: 2010-01-10 16:56+0100\n"
+"POT-Creation-Date: 2010-02-17 19:59+0100\n"
+"PO-Revision-Date: 2010-03-06 13:32+0100\n"
 "Last-Translator: Michael Schmidt <michael@schmidt-schmitten.com>\n"
 "Language-Team: german <de@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -327,6 +327,9 @@ msgstr "Ton aus bei angezeigten Anrufen"
 msgid "Name"
 msgstr "Name"
 
+msgid "Network mount"
+msgstr "Netzwerk"
+
 #. TRANSLATORS: keep it short, this is a button
 msgid "New"
 msgstr "Neu"
@@ -606,9 +609,6 @@ msgstr "nicht verschlüsselt"
 msgid "number suppressed"
 msgstr "Nummer unterdrückt"
 
-msgid "on connect"
-msgstr "bei Verbindung"
-
 msgid "on ring"
 msgstr "bei Klingeln"
 
index 8e43631..9bca872 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: enigma 2-plugins\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-10 16:55+0100\n"
+"POT-Creation-Date: 2010-02-17 19:59+0100\n"
 "PO-Revision-Date: 2009-06-04 20:22+0200\n"
 "Last-Translator: José Juan Zapater <josej@zapater.fdns.net>\n"
 "Language-Team: none\n"
@@ -320,6 +320,9 @@ msgstr "Silencio en llamada"
 msgid "Name"
 msgstr "Nombre"
 
+msgid "Network mount"
+msgstr ""
+
 #. TRANSLATORS: keep it short, this is a button
 msgid "New"
 msgstr "Nuevo"
@@ -603,9 +606,6 @@ msgstr "no encriptado"
 msgid "number suppressed"
 msgstr ""
 
-msgid "on connect"
-msgstr ""
-
 msgid "on ring"
 msgstr ""
 
index 92114b8..570301f 100644 (file)
@@ -4,7 +4,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: enigma2  - FRITZ!Box\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-17 04:03+0100\n"
+"POT-Creation-Date: 2010-02-17 19:59+0100\n"
 "PO-Revision-Date: 2010-01-17 04:07+0100\n"
 "Last-Translator: Spaeleus <spaeleus@croci.org>\n"
 "Language-Team: www.linsat.net <spaeleus@croci.org>\n"
@@ -18,802 +18,624 @@ msgstr ""
 "X-Poedit-Basepath: /home/dario/Plugins/fritzcall\n"
 "X-Poedit-SearchPath-0: /home/dario/Plugins/fritzcall\n"
 
-#: /home/dario/Plugins/fritzcall/src/FritzOutlookCSV.py:93
-#: /home/dario/Plugins/fritzcall/src/FritzOutlookCSV.py:176
-#: /home/dario/Plugins/fritzcall/src/plugin.py:542
-msgid "work"
-msgstr "Ufficio"
-
-#: /home/dario/Plugins/fritzcall/src/FritzOutlookCSV.py:121
-#: /home/dario/Plugins/fritzcall/src/FritzOutlookCSV.py:202
-#: /home/dario/Plugins/fritzcall/src/plugin.py:538
-#: /home/dario/Plugins/fritzcall/src/FritzLDIF.py:100
-#: /home/dario/Plugins/fritzcall/src/FritzLDIF.py:173
-msgid "mobile"
-msgstr "Cellulare"
-
-#: /home/dario/Plugins/fritzcall/src/FritzOutlookCSV.py:123
-#: /home/dario/Plugins/fritzcall/src/FritzOutlookCSV.py:204
-#: /home/dario/Plugins/fritzcall/src/plugin.py:540
-#: /home/dario/Plugins/fritzcall/src/FritzLDIF.py:102
-#: /home/dario/Plugins/fritzcall/src/FritzLDIF.py:175
-msgid "home"
-msgstr "Casa"
-
-#: /home/dario/Plugins/fritzcall/src/plugin.py:82
-msgid "no"
-msgstr "no"
-
-#: /home/dario/Plugins/fritzcall/src/plugin.py:82
-msgid "on ring"
-msgstr "su squillo"
-
-#: /home/dario/Plugins/fritzcall/src/plugin.py:84
-msgid "show nothing"
-msgstr "Nulla"
+#. TRANSLATORS: keep it short, this is a button
+#. TRANSLATORS: keep it short, this is a help text
+msgid "About FritzCall"
+msgstr "Info su FritzCall"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:84
-msgid "show as list"
-msgstr "Come elenco"
+#. TRANSLATORS: keep it short, this is a help text
+msgid "Add entry to phonebook"
+msgstr "Aggiungere voce in rubrica"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:84
-msgid "show each call"
+#. TRANSLATORS: keep it short, this is a button
+msgid "All"
 msgstr "Tutte"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:120
-msgid "Flash"
-msgstr "Flash"
+msgid "All calls"
+msgstr "Tutte le chiamate"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:122
-msgid "Compact Flash"
-msgstr "work"
+msgid "Append shortcut number"
+msgstr "Aggiungere numero breve"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:124
-msgid "USB Device"
-msgstr "Dispositivo USB"
+msgid "Append type of number"
+msgstr "Agg. il tipo di numero (casa,cell.,uff.)"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:131
-msgid "Germany"
-msgstr "Germania"
+msgid "Append vanity name"
+msgstr "Aggiungere nome \"Vanity\""
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:132
-msgid "The Netherlands"
-msgstr "Olanda"
+msgid "Areacode to add to calls without one (if necessary)"
+msgstr "Prefisso per le chiamate in uscita (se necessario)"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:133
-msgid "France"
-msgstr "Francia"
+msgid "Austria"
+msgstr "Austria"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:134
-msgid "Italy"
-msgstr "Italia"
+msgid "Automatically add new Caller to PhoneBook"
+msgstr "Ins. autom. nuovo chiamante in rubrica"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:135
-msgid "Switzerland"
-msgstr "Svizzera"
+#. TRANSLATORS: keep it short, this is a button
+msgid "Call"
+msgstr "Chiam."
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:136
-msgid "Austria"
-msgstr "Austria"
+msgid "Call monitoring"
+msgstr "Monitoraggio chiamate"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:144
-msgid "All calls"
-msgstr "Tutte le chiamate"
+msgid "Call redirection"
+msgstr "Deviazione chiamate"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:145
-msgid "Incoming calls"
-msgstr "Chiamate in entrata"
+#. TRANSLATORS: keep it short, this is a button
+msgid "Cancel"
+msgstr "Annull."
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:146
-msgid "Missed calls"
-msgstr "Chiamate perse"
+msgid "Cannot get calls from FRITZ!Box"
+msgstr "Recupero chiamate dalla FRITZ!Box impossibile"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:147
-msgid "Outgoing calls"
-msgstr "Chiamate in uscita"
+msgid "Cannot get infos from FRITZ!Box"
+msgstr "Recupero informazioni dalla FRITZ!Box impossibile"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:259
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2695
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2726
-msgid "About FritzCall"
-msgstr "Info su FritzCall"
+msgid "Compact Flash"
+msgstr "work"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:324
-msgid "login"
-msgstr "Login"
+msgid "Connected since"
+msgstr "Connesso da"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:406
-msgid "login verification"
-msgstr "Verifica login"
+msgid "Connected to FRITZ!Box!"
+msgstr "Connesso alla FRITZ!Box!"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:410
-#: /home/dario/Plugins/fritzcall/src/plugin.py:623
 #, python-format
-msgid "FRITZ!Box - Error logging in: %s"
-msgstr "FRITZ!Box - Errore in esecuzione log: %s"
+msgid ""
+"Connecting to FRITZ!Box failed\n"
+" (%s)\n"
+"retrying..."
+msgstr ""
+"Connessione alla FRITZ!Box fallita!\n"
+"(%s)\n"
+"Nuovo tentativo in corso..."
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:414
-msgid "login ok"
-msgstr "Login Ok"
+msgid "Connecting to FRITZ!Box..."
+msgstr "Connessione alla FRITZ!Box in corso..."
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:424
 #, python-format
 msgid ""
-"FRITZ!Box - Error logging in: %s\n"
-"Disabling plugin."
+"Connection to FRITZ!Box! lost\n"
+" (%s)\n"
+"retrying..."
 msgstr ""
-"FRITZ!Box - Errore in esecuzione log: %s\n"
-"Il plugin verrà disabilitato."
+"Connessione alla FRITZ!Box persa!\n"
+"(%s)\n"
+"Nuovo tentativo in corso..."
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:446
-#, python-format
-msgid "FRITZ!Box - Error logging out: %s"
-msgstr "FRITZ!Box - Errore in esecuzione log: %s"
+msgid "Could not parse FRITZ!Box Phonebook entry"
+msgstr "Impossibile analizzare la voce nella Rubrica della FRITZ!Box!"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:545
-#: /home/dario/Plugins/fritzcall/src/plugin.py:566
-msgid "Shortcut"
-msgstr "Numero breve"
+msgid "Country"
+msgstr "Nazione"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:547
-#: /home/dario/Plugins/fritzcall/src/plugin.py:568
-msgid "Vanity"
-msgstr "\"Vanity\""
+msgid "DECT phones registered"
+msgstr "Telefoni DECT registrati"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:581
-msgid "Could not parse FRITZ!Box Phonebook entry"
-msgstr "Impossibile analizzare la voce nella Rubrica della FRITZ!Box!"
+msgid "Debug"
+msgstr "Debug"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:585
-#, python-format
-msgid "FRITZ!Box - Could not load phonebook: %s"
-msgstr "FRITZ!Box - Impossibile caricare la rubrica: %s"
+#. TRANSLATORS: keep it short, this is a button
+msgid "Delete"
+msgstr "Cancell."
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:628
-msgid "preparing"
-msgstr "Preparazione in corso"
+#. TRANSLATORS: keep it short, this is a help text
+msgid "Delete entry"
+msgstr "Cancellare voce"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:639
-msgid "finishing"
-msgstr "Quasi terminato..."
+msgid "Display FRITZ!box-Fon calls on screen"
+msgstr "Visualizzare chiamate telef. sulla TV"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:664
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1868
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2880
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2883
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2920
-#: /home/dario/Plugins/fritzcall/src/plugin.py:3151
-#: /home/dario/Plugins/fritzcall/src/plugin.py:3241
-#: /home/dario/Plugins/fritzcall/src/plugin.py:3264
-msgid "UNKNOWN"
-msgstr "SCONOSCIUTO"
+#. TRANSLATORS: keep it short, this is a help text
+msgid "Display all calls"
+msgstr "Tutte le chiamate"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:671
-msgid "done"
-msgstr "Fatto"
+msgid "Display connection infos"
+msgstr "Mostrare informazioni connessione"
+
+#. TRANSLATORS: keep it short, this is a help text
+msgid "Display incoming calls"
+msgstr "Chiamate in ingresso"
+
+#. TRANSLATORS: keep it short, this is a help text
+msgid "Display missed calls"
+msgstr "Chiamate perse"
+
+#. TRANSLATORS: keep it short, this is a help text
+msgid "Display outgoing calls"
+msgstr "Chiamate in uscita"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:675
+msgid "Do what?"
+msgstr "Che fare?"
+
+#, python-format
 msgid ""
-"You need to set the password of the FRITZ!Box\n"
-"in the configuration dialog to display calls\n"
+"Do you really want to delete entry for\n"
 "\n"
-"It could be a communication issue, just try again."
+"%(number)s\n"
+"\n"
+"%(name)s?"
 msgstr ""
-"E' necessario impostare la password della FRITZ!Box\n"
-"nel menu configurazione per mostrare le chiamate.\n"
+"Cancellare la voce\n"
 "\n"
-"Potrebbe trattarsi di un problema di comunicazione, riprovare."
+"%(number)s\n"
+"\n"
+"%(name)s?"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:686
-msgid "done, using last list"
-msgstr "Fatto, sarà usata l'ultimo elenco"
+#. TRANSLATORS: keep it short, this is a button
+msgid "Edit"
+msgstr "Mod."
+
+#. TRANSLATORS: keep it short, this is a help text
+msgid "Edit selected entry"
+msgstr "Mod. voce selezionata"
+
+msgid "Enter Search Terms"
+msgstr "Inserire criteri di ricerca"
+
+msgid "Entry incomplete."
+msgstr "Voce incompleta."
+
+msgid "Extension number to initiate call on"
+msgstr "Numero apparecchio su cui indirizzare la chiamata"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:732
 #, python-format
 msgid "FRITZ!Box - Could not load calls: %s"
 msgstr "FRITZ!Box - Impossibile caricare le chiamate: %s"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:769
 #, python-format
-msgid "FRITZ!Box - Dialling failed: %s"
-msgstr "FRITZ!Box - Composizione fallita: %s"
+msgid "FRITZ!Box - Could not load phonebook: %s"
+msgstr "FRITZ!Box - Impossibile caricare la rubrica: %s"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:808
 #, python-format
-msgid "FRITZ!Box - Failed changing WLAN: %s"
-msgstr "FRITZ!Box - Cambiamento WLAN fallito: %s"
+msgid "FRITZ!Box - Dialling failed: %s"
+msgstr "FRITZ!Box - Composizione fallita: %s"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:867
 #, python-format
-msgid "FRITZ!Box - Failed changing Mailbox: %s"
-msgstr "FRITZ!Box - Cambiamento casella di posta fallito: %s"
+msgid "FRITZ!Box - Error getting blacklist: %s"
+msgstr "FRITZ!Box - Errore in recupero blacklist: %s"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1142
 #, python-format
 msgid "FRITZ!Box - Error getting status: %s"
 msgstr "FRITZ!Box - Errore in recupero stato: %s"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1183
 #, python-format
-msgid "FRITZ!Box - Error resetting: %s"
-msgstr "FRITZ!Box - Errore in reset: %s"
+msgid "FRITZ!Box - Error logging in: %s"
+msgstr "FRITZ!Box - Errore in esecuzione log: %s"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1226
 #, python-format
-msgid "FRITZ!Box - Error getting blacklist: %s"
-msgstr "FRITZ!Box - Errore in recupero blacklist: %s"
+msgid ""
+"FRITZ!Box - Error logging in: %s\n"
+"Disabling plugin."
+msgstr ""
+"FRITZ!Box - Errore in esecuzione log: %s\n"
+"Il plugin verrà disabilitato."
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1369
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2697
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2724
-#: /home/dario/Plugins/fritzcall/src/plugin.py:3381
-msgid "FRITZ!Box Fon Status"
-msgstr "FRITZ!Box Fon - Stato"
+#, python-format
+msgid "FRITZ!Box - Error logging out: %s"
+msgstr "FRITZ!Box - Errore in esecuzione log: %s"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1399
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1453
-msgid "Reset"
-msgstr "Reset"
+#, python-format
+msgid "FRITZ!Box - Error resetting: %s"
+msgstr "FRITZ!Box - Errore in reset: %s"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1401
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1451
-msgid "Toggle WLAN"
-msgstr "Commutare WLAN"
+#, python-format
+msgid "FRITZ!Box - Failed changing Mailbox: %s"
+msgstr "FRITZ!Box - Cambiamento casella di posta fallito: %s"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1405
-msgid "Toggle Mailbox"
-msgstr "Comm. casella"
+#, python-format
+msgid "FRITZ!Box - Failed changing WLAN: %s"
+msgstr "FRITZ!Box - Cambiamento WLAN fallito: %s"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1421
-msgid "Toggle all mailboxes"
-msgstr "Comm. tutte le caselle"
+msgid "FRITZ!Box FON address (Name or IP)"
+msgstr "FRITZ!Box FON - Indirizzo (nome o IP)"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1423
-msgid "Toggle 1. mailbox"
-msgstr "Comm. casella 1."
+#. TRANSLATORS: keep it short, this is a button
+#. TRANSLATORS: keep it short, this is a help text
+msgid "FRITZ!Box Fon Status"
+msgstr "FRITZ!Box Fon - Stato"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1425
-msgid "Toggle 2. mailbox"
-msgstr "Comm. casella 2."
+msgid "Filter also list of calls"
+msgstr "Filtrare anche gli elenchi chiamate"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1427
-msgid "Toggle 3. mailbox"
-msgstr "Comm. casella 3."
+msgid "Flash"
+msgstr "Flash"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1429
-msgid "Toggle 4. mailbox"
-msgstr "Comm. casella 4."
+#, python-format
+msgid ""
+"Found picture\n"
+"\n"
+"%s\n"
+"\n"
+"But did not load. Probably not PNG, 8-bit"
+msgstr ""
+"Trovata immagine\n"
+"\n"
+"%s\n"
+"\n"
+"Impossibile caricarla. Il formato deve esserecpng, 8 bit."
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1431
-msgid "Toggle 5. mailbox"
-msgstr "Comm. casella 5."
+msgid "France"
+msgstr "Francia"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1432
-msgid "Mailbox"
-msgstr "Casella di posta"
+msgid "FritzCall Setup"
+msgstr "Configurazione FritzCall"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1447
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1449
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1775
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2329
-msgid "Quit"
-msgstr "Uscire"
+msgid "Full screen display"
+msgstr "Mostrare a tutto schermo"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1455
-msgid "Refresh status"
-msgstr "Aggiornare lo stato"
+msgid "Germany"
+msgstr "Germania"
+
+msgid "Getting calls from FRITZ!Box..."
+msgstr "Recupero chiamate dalla FRITZ!Box in corso"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1457
 msgid "Getting status from FRITZ!Box Fon..."
 msgstr "Recupero stato dalla FRITZ!Box Fon in corso..."
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1490
-msgid "Call redirection"
-msgstr "Deviazione chiamate"
-
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1515
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1538
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1564
-msgid "Status not available"
-msgstr "Stato non disponibile"
-
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1519
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1521
 msgid "IP Address:"
 msgstr "Indirizzo IP:"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1519
-msgid "Connected since"
-msgstr "Connesso da"
-
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1548
-msgid "not encrypted"
-msgstr "non codificato"
-
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1550
-msgid "encrypted"
-msgstr "codificato"
-
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1553
-msgid "no device active"
-msgstr "Nessun dispositivo attivo"
+#. TRANSLATORS: keep it short, this is a button
+msgid "Incoming"
+msgstr "In Entr."
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1555
-msgid "one device active"
-msgstr "Un dispositivo attivo"
+#, python-format
+msgid ""
+"Incoming Call on %(date)s from\n"
+"---------------------------------------------\n"
+"%(number)s\n"
+"%(caller)s\n"
+"---------------------------------------------\n"
+"to: %(phone)s"
+msgstr ""
+"Chiamata in arrivo su %(date)s da\n"
+"---------------------------------------------\n"
+"%(number)s\n"
+"%(caller)s\n"
+"---------------------------------------------\n"
+"a: %(phone)s"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1557
-msgid "devices active"
-msgstr "Dispositivi attivi"
+msgid "Incoming calls"
+msgstr "Chiamate in entrata"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1573
-msgid "No mailbox active"
-msgstr "Nessuna casella di posta attiva"
+msgid "Italy"
+msgstr "Italia"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1584
-msgid "One mailbox active"
-msgstr "Una casella di posta attiva"
+msgid "Last 10 calls:\n"
+msgstr "Ultime 10 chiamate:\n"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1586
-msgid "mailboxes active"
-msgstr "caselle di posta attive"
+#. TRANSLATORS: keep it short, this is a button
+msgid "Lookup"
+msgstr "Lookup"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1592
-msgid "No DECT phone registered"
-msgstr "Nessun telefono DECT registrato"
+msgid "MSN to show (separated by ,)"
+msgstr "MSN da mostrare (separare con ,)"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1595
-msgid "One DECT phone registered"
-msgstr "Un telefono DECT registrato"
+msgid "Mailbox"
+msgstr "Casella di posta"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1597
-msgid "DECT phones registered"
-msgstr "Telefoni DECT registrati"
+#. TRANSLATORS: keep it short, this is a button
+msgid "Missed"
+msgstr "Ch. perse"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1602
-msgid "Software fax active"
-msgstr "Fax software attivo"
+msgid "Missed calls"
+msgstr "Chiamate perse"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1608
-msgid "No call redirection active"
-msgstr "Nessuna deviazione chiamate attiva"
+msgid "Mute on call"
+msgstr "Mute su Chiamata"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1613
-msgid "One call redirection active"
-msgstr "Una deviazione chiamate attiva"
+msgid "Name"
+msgstr "Nome"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1615
-msgid "call redirections active"
-msgstr "deviazione chiamate attiva"
+msgid "Network mount"
+msgstr ""
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1689
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1693
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1730
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2691
-#: /home/dario/Plugins/fritzcall/src/plugin.py:3379
-msgid "Phone calls"
-msgstr "Ch. telef."
+#. TRANSLATORS: keep it short, this is a button
+msgid "New"
+msgstr "Nuovo"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1755
-msgid "All"
-msgstr "Tutte"
+msgid "No DECT phone registered"
+msgstr "Nessun telefono DECT registrato"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1757
-msgid "Missed"
-msgstr "Ch. perse"
+msgid "No call redirection active"
+msgstr "Nessuna deviazione chiamate attiva"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1759
-msgid "Incoming"
-msgstr "In Entr."
+msgid "No entry selected"
+msgstr "Nessuna voce selezionata"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1761
-msgid "Outgoing"
-msgstr "In uscita"
+msgid "No mailbox active"
+msgstr "Nessuna casella di posta attiva"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1773
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2327
-msgid "Show details of entry"
-msgstr "Mostrare dettagli voce"
+msgid "No phonebook"
+msgstr "Nessuna rubrica"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1777
-msgid "Display all calls"
-msgstr "Tutte le chiamate"
+msgid "No result from LDIF"
+msgstr "Ricerca in LDIF: nessun risultato!"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1779
-msgid "Display missed calls"
-msgstr "Chiamate perse"
+msgid "No result from Outlook export"
+msgstr "Ricerca in Outlook  export: nessun risultato!"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1781
-msgid "Display incoming calls"
-msgstr "Chiamate in ingresso"
+msgid "No result from reverse lookup"
+msgstr "Ricerca identificativo chiamante: nessun risultato!"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1783
-msgid "Display outgoing calls"
-msgstr "Chiamate in uscita"
+msgid "Number"
+msgstr "Numero"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1785
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1843
-msgid "Getting calls from FRITZ!Box..."
-msgstr "Recupero chiamate dalla FRITZ!Box in corso"
+#. TRANSLATORS: keep it short, this is a button
+msgid "OK"
+msgstr "Ok"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1888
-msgid "Do what?"
-msgstr "Che fare?"
+msgid "One DECT phone registered"
+msgstr "Un telefono DECT registrato"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1897
-msgid "Lookup"
-msgstr "Lookup"
+msgid "One call redirection active"
+msgstr "Una deviazione chiamate attiva"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1899
-msgid "Call"
-msgstr "Chiam."
+msgid "One mailbox active"
+msgstr "Una casella di posta attiva"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1901
-msgid "Save"
-msgstr "Salvare"
+#. TRANSLATORS: keep it short, this is a button
+msgid "Outgoing"
+msgstr "In uscita"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1932
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2979
 #, python-format
 msgid ""
-"Found picture\n"
-"\n"
-"%s\n"
-"\n"
-"But did not load. Probably not PNG, 8-bit"
+"Outgoing Call on %(date)s to\n"
+"---------------------------------------------\n"
+"%(number)s\n"
+"%(caller)s\n"
+"---------------------------------------------\n"
+"from: %(phone)s"
 msgstr ""
-"Trovata immagine\n"
-"\n"
-"%s\n"
-"\n"
-"Impossibile caricarla. Il formato deve esserecpng, 8 bit."
-
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1988
-msgid "Reverse searching..."
-msgstr "Ricerca identificativo chiamante..."
-
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1992
-msgid "Searching in Outlook export..."
-msgstr "Ricerca in Outlook  export..."
+"Chiamata in uscita su %(date)s a\n"
+"---------------------------------------------\n"
+"%(number)s\n"
+"%(caller)s\n"
+"---------------------------------------------\n"
+"da: %(phone)s"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:1999
-msgid "Searching in LDIF..."
-msgstr "Ricerca in LDIF..."
+msgid "Outgoing calls"
+msgstr "Chiamate in uscita"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2011
-msgid "No result from reverse lookup"
-msgstr "Ricerca identificativo chiamante: nessun risultato!"
+msgid "Password Accessing FRITZ!Box"
+msgstr "Password di accesso alla FRITZ!Box"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2013
-msgid "No result from Outlook export"
-msgstr "Ricerca in Outlook  export: nessun risultato!"
+#. TRANSLATORS: keep it short, this is a button
+msgid "Phone calls"
+msgstr "Ch. telef."
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2015
-msgid "No result from LDIF"
-msgstr "Ricerca in LDIF: nessun risultato!"
+msgid "PhoneBook Location"
+msgstr "Posizione rubrica"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2249
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2253
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2288
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2693
-#: /home/dario/Plugins/fritzcall/src/plugin.py:3380
+#. TRANSLATORS: keep it short, this is a button
 msgid "Phonebook"
 msgstr "Rubrica"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2309
-msgid "Delete"
-msgstr "Cancell."
+msgid "Plugin not active"
+msgstr "Plugin non attivo"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2311
-msgid "New"
-msgstr "Nuovo"
+#. TRANSLATORS: keep it short, this is a help text
+msgid "Quit"
+msgstr "Uscire"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2313
-msgid "Edit"
-msgstr "Mod."
+msgid "Read PhoneBook from FRITZ!Box"
+msgstr "Caricare la rubrica dalla FRITZ!Box"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2315
-msgid "Search"
-msgstr "Ricerca"
+#. TRANSLATORS: keep it short, this is a help text
+msgid "Refresh status"
+msgstr "Aggiornare lo stato"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2331
-msgid "Delete entry"
-msgstr "Cancellare voce"
+#. TRANSLATORS: keep it short, this is a button
+#. TRANSLATORS: keep it short, this is a help text
+msgid "Reset"
+msgstr "Reset"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2333
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2455
-msgid "Add entry to phonebook"
-msgstr "Aggiungere voce in rubrica"
+msgid "Reverse Lookup Caller ID (select country below)"
+msgstr "Identificativo chiamante (selezionare il Paese!)"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2335
-msgid "Edit selected entry"
-msgstr "Mod. voce selezionata"
+msgid "Reverse searching..."
+msgstr "Ricerca identificativo chiamante..."
+
+#. TRANSLATORS: keep it short, this is a button
+msgid "Save"
+msgstr "Salvare"
+
+#. TRANSLATORS: keep it short, this is a button
+msgid "Search"
+msgstr "Ricerca"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2337
+#. TRANSLATORS: keep it short, this is a help text
 msgid "Search (case insensitive)"
 msgstr "Ricerca (non distingue Maiusc-minusc)"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2406
-#, python-format
-msgid ""
-"Do you really want to delete entry for\n"
-"\n"
-"%(number)s\n"
-"\n"
-"%(name)s?"
-msgstr ""
-"Cancellare la voce\n"
-"\n"
-"%(number)s\n"
-"\n"
-"%(name)s?"
-
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2410
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2427
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2534
-msgid "No entry selected"
-msgstr "Nessuna voce selezionata"
-
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2467
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2687
-msgid "Cancel"
-msgstr "Annull."
-
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2469
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2689
-msgid "OK"
-msgstr "Ok"
-
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2484
-msgid "Name"
-msgstr "Nome"
-
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2485
-msgid "Number"
-msgstr "Numero"
-
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2495
-msgid "Entry incomplete."
-msgstr "Voce incompleta."
-
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2544
-msgid "Enter Search Terms"
-msgstr "Inserire criteri di ricerca"
-
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2544
 msgid "Search phonebook"
 msgstr "Ricerca su rubrica"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2607
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2611
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2653
-msgid "FritzCall Setup"
-msgstr "Configurazione FritzCall"
-
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2682
-msgid "You need to enable the monitoring on your FRITZ!Box by dialing #96*5*!"
-msgstr "Per abilitare il monitoraggio sulla FRITZ!Box comporre #96*5*!"
-
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2712
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2722
-msgid "quit"
-msgstr "Uscire"
-
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2714
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2720
-msgid "save and quit"
-msgstr "Salvare e uscire"
-
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2716
-msgid "display calls"
-msgstr "Tutte le chiamate"
+msgid "Searching in LDIF..."
+msgstr "Ricerca in LDIF..."
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2718
-msgid "display phonebook"
-msgstr "Mostrare rubrica"
+msgid "Searching in Outlook export..."
+msgstr "Ricerca in Outlook  export..."
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2743
-msgid "Call monitoring"
-msgstr "Monitoraggio chiamate"
+msgid "Shortcut"
+msgstr "Numero breve"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2745
-msgid "FRITZ!Box FON address (Name or IP)"
-msgstr "FRITZ!Box FON - Indirizzo (nome o IP)"
+msgid "Show Outgoing Calls"
+msgstr "Mostrare le chiamate in uscita"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2747
 msgid "Show after Standby"
 msgstr "Mostrare chiamate dopo lo standby"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2749
+#. TRANSLATORS: keep it short, this is a help text
+msgid "Show details of entry"
+msgstr "Mostrare dettagli voce"
+
 msgid "Show only calls for specific MSN"
 msgstr "Mostrare solo le chiamate per MSN specifico"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2751
-msgid "MSN to show (separated by ,)"
-msgstr "MSN da mostrare (separare con ,)"
+msgid "Software fax active"
+msgstr "Fax software attivo"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2752
-msgid "Filter also list of calls"
-msgstr "Filtrare anche gli elenchi chiamate"
+msgid "Status not available"
+msgstr "Stato non disponibile"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2753
-msgid "Mute on call"
-msgstr "Mute su Chiamata"
+msgid "Strip Leading 0"
+msgstr "Sopprimere \"0\" iniziali"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2755
-msgid "Show Outgoing Calls"
-msgstr "Mostrare le chiamate in uscita"
+msgid "Switzerland"
+msgstr "Svizzera"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2757
-msgid "Areacode to add to calls without one (if necessary)"
-msgstr "Prefisso per le chiamate in uscita (se necessario)"
+msgid "The Netherlands"
+msgstr "Olanda"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2758
 msgid "Timeout for Call Notifications (seconds)"
 msgstr "Ritardo notifica chiamate (secondi)"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2759
-msgid "Reverse Lookup Caller ID (select country below)"
-msgstr "Identificativo chiamante (selezionare il Paese!)"
+#. TRANSLATORS: keep it short, this is a help text
+msgid "Toggle 1. mailbox"
+msgstr "Comm. casella 1."
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2761
-msgid "Country"
-msgstr "Nazione"
+#. TRANSLATORS: keep it short, this is a help text
+msgid "Toggle 2. mailbox"
+msgstr "Comm. casella 2."
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2764
-msgid "Password Accessing FRITZ!Box"
-msgstr "Password di accesso alla FRITZ!Box"
+#. TRANSLATORS: keep it short, this is a help text
+msgid "Toggle 3. mailbox"
+msgstr "Comm. casella 3."
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2765
-msgid "Extension number to initiate call on"
-msgstr "Numero apparecchio su cui indirizzare la chiamata"
+#. TRANSLATORS: keep it short, this is a help text
+msgid "Toggle 4. mailbox"
+msgstr "Comm. casella 4."
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2766
-msgid "Read PhoneBook from FRITZ!Box"
-msgstr "Caricare la rubrica dalla FRITZ!Box"
+#. TRANSLATORS: keep it short, this is a help text
+msgid "Toggle 5. mailbox"
+msgstr "Comm. casella 5."
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2768
-msgid "Append type of number"
-msgstr "Agg. il tipo di numero (casa,cell.,uff.)"
+#. TRANSLATORS: keep it short, this is a button
+msgid "Toggle Mailbox"
+msgstr "Comm. casella"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2769
-msgid "Append shortcut number"
-msgstr "Aggiungere numero breve"
+#. TRANSLATORS: keep it short, this is a button
+#. TRANSLATORS: keep it short, this is a help text
+msgid "Toggle WLAN"
+msgstr "Commutare WLAN"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2770
-msgid "Append vanity name"
-msgstr "Aggiungere nome \"Vanity\""
+#. TRANSLATORS: keep it short, this is a help text
+msgid "Toggle all mailboxes"
+msgstr "Comm. tutte le caselle"
+
+msgid "UNKNOWN"
+msgstr "SCONOSCIUTO"
+
+msgid "USB Device"
+msgstr "Dispositivo USB"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2772
 msgid "Use internal PhoneBook"
 msgstr "Usare la rubrica interna"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2774
-msgid "PhoneBook Location"
-msgstr "Posizione rubrica"
+msgid "Vanity"
+msgstr "\"Vanity\""
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2776
-msgid "Automatically add new Caller to PhoneBook"
-msgstr "Ins. autom. nuovo chiamante in rubrica"
+msgid "You need to enable the monitoring on your FRITZ!Box by dialing #96*5*!"
+msgstr "Per abilitare il monitoraggio sulla FRITZ!Box comporre #96*5*!"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2778
-msgid "Strip Leading 0"
-msgstr "Sopprimere \"0\" iniziali"
+msgid ""
+"You need to set the password of the FRITZ!Box\n"
+"in the configuration dialog to display calls\n"
+"\n"
+"It could be a communication issue, just try again."
+msgstr ""
+"E' necessario impostare la password della FRITZ!Box\n"
+"nel menu configurazione per mostrare le chiamate.\n"
+"\n"
+"Potrebbe trattarsi di un problema di comunicazione, riprovare."
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2781
-msgid "Full screen display"
-msgstr "Mostrare a tutto schermo"
+msgid "call redirections active"
+msgstr "deviazione chiamate attiva"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2782
-msgid "Display connection infos"
-msgstr "Mostrare informazioni connessione"
+msgid "devices active"
+msgstr "Dispositivi attivi"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2783
-msgid "Debug"
-msgstr "Debug"
+#. TRANSLATORS: keep it short, this is a help text
+msgid "display calls"
+msgstr "Tutte le chiamate"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2810
-#: /home/dario/Plugins/fritzcall/src/plugin.py:3334
-msgid "Cannot get calls from FRITZ!Box"
-msgstr "Recupero chiamate dalla FRITZ!Box impossibile"
+#. TRANSLATORS: keep it short, this is a help text
+msgid "display phonebook"
+msgstr "Mostrare rubrica"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2812
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2819
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2833
-#: /home/dario/Plugins/fritzcall/src/plugin.py:3336
-#: /home/dario/Plugins/fritzcall/src/plugin.py:3343
-#: /home/dario/Plugins/fritzcall/src/plugin.py:3354
-msgid "Plugin not active"
-msgstr "Plugin non attivo"
+msgid "done"
+msgstr "Fatto"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2821
-#: /home/dario/Plugins/fritzcall/src/plugin.py:3345
-msgid "No phonebook"
-msgstr "Nessuna rubrica"
+msgid "done, using last list"
+msgstr "Fatto, sarà usata l'ultimo elenco"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2831
-#: /home/dario/Plugins/fritzcall/src/plugin.py:3352
-msgid "Cannot get infos from FRITZ!Box"
-msgstr "Recupero informazioni dalla FRITZ!Box impossibile"
+msgid "encrypted"
+msgstr "codificato"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:2858
-msgid "Last 10 calls:\n"
-msgstr "Ultime 10 chiamate:\n"
+msgid "finishing"
+msgstr "Quasi terminato..."
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:3065
-#, python-format
-msgid ""
-"Incoming Call on %(date)s from\n"
-"---------------------------------------------\n"
-"%(number)s\n"
-"%(caller)s\n"
-"---------------------------------------------\n"
-"to: %(phone)s"
-msgstr ""
-"Chiamata in arrivo su %(date)s da\n"
-"---------------------------------------------\n"
-"%(number)s\n"
-"%(caller)s\n"
-"---------------------------------------------\n"
-"a: %(phone)s"
+msgid "home"
+msgstr "Casa"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:3067
-#, python-format
-msgid ""
-"Outgoing Call on %(date)s to\n"
-"---------------------------------------------\n"
-"%(number)s\n"
-"%(caller)s\n"
-"---------------------------------------------\n"
-"from: %(phone)s"
-msgstr ""
-"Chiamata in uscita su %(date)s a\n"
-"---------------------------------------------\n"
-"%(number)s\n"
-"%(caller)s\n"
-"---------------------------------------------\n"
-"da: %(phone)s"
+msgid "login"
+msgstr "Login"
+
+msgid "login ok"
+msgstr "Login Ok"
+
+msgid "login verification"
+msgstr "Verifica login"
+
+msgid "mailboxes active"
+msgstr "caselle di posta attive"
+
+msgid "mobile"
+msgstr "Cellulare"
+
+msgid "no"
+msgstr "no"
+
+msgid "no device active"
+msgstr "Nessun dispositivo attivo"
+
+msgid "not encrypted"
+msgstr "non codificato"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:3240
 msgid "number suppressed"
 msgstr "numero mascherato"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:3276
-msgid "Connecting to FRITZ!Box..."
-msgstr "Connessione alla FRITZ!Box in corso..."
+msgid "on ring"
+msgstr "su squillo"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:3281
-msgid "Connected to FRITZ!Box!"
-msgstr "Connesso alla FRITZ!Box!"
+msgid "one device active"
+msgstr "Un dispositivo attivo"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:3293
-#, python-format
-msgid ""
-"Connection to FRITZ!Box! lost\n"
-" (%s)\n"
-"retrying..."
-msgstr ""
-"Connessione alla FRITZ!Box persa!\n"
-"(%s)\n"
-"Nuovo tentativo in corso..."
+msgid "preparing"
+msgstr "Preparazione in corso"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:3301
-#, python-format
-msgid ""
-"Connecting to FRITZ!Box failed\n"
-" (%s)\n"
-"retrying..."
-msgstr ""
-"Connessione alla FRITZ!Box fallita!\n"
-"(%s)\n"
-"Nuovo tentativo in corso..."
+#. TRANSLATORS: keep it short, this is a help text
+msgid "quit"
+msgstr "Uscire"
 
-#: /home/dario/Plugins/fritzcall/src/plugin.py:3378
-msgid "Display FRITZ!box-Fon calls on screen"
-msgstr "Visualizzare chiamate telef. sulla TV"
+#. TRANSLATORS: keep it short, this is a help text
+msgid "save and quit"
+msgstr "Salvare e uscire"
+
+msgid "show as list"
+msgstr "Come elenco"
 
-#: /home/dario/Plugins/fritzcall/src/FritzLDIF.py:70
-#: /home/dario/Plugins/fritzcall/src/FritzLDIF.py:148
-msgid "business"
-msgstr "Affari"
+msgid "show each call"
+msgstr "Tutte"
+
+msgid "show nothing"
+msgstr "Nulla"
+
+msgid "work"
+msgstr "Ufficio"
 
+#~ msgid "business"
+#~ msgstr "Affari"
index a7284b3..e73c9e2 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: nl\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-10 16:55+0100\n"
+"POT-Creation-Date: 2010-02-17 19:59+0100\n"
 "PO-Revision-Date: 2009-06-04 20:19+0200\n"
 "Last-Translator: \n"
 "Language-Team:  <en@li.org>\n"
@@ -321,6 +321,9 @@ msgstr "Muten bij oproep"
 msgid "Name"
 msgstr "Naam"
 
+msgid "Network mount"
+msgstr ""
+
 #. TRANSLATORS: keep it short, this is a button
 msgid "New"
 msgstr "Nieuw"
@@ -605,9 +608,6 @@ msgstr "ongecodeerd "
 msgid "number suppressed"
 msgstr ""
 
-msgid "on connect"
-msgstr ""
-
 msgid "on ring"
 msgstr ""
 
index 5cb3b16..302a4c2 100755 (executable)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Enigma2 FritzCall Plugin\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-10 16:55+0100\n"
+"POT-Creation-Date: 2010-02-17 19:59+0100\n"
 "PO-Revision-Date: 2009-09-10 22:47+0100\n"
 "Last-Translator: maja <jovanovic@gmx.ch>\n"
 "Language-Team: veselin & majevica CRNABERZA <jovanovic@gmx.ch>\n"
@@ -322,6 +322,9 @@ msgstr "Priguši kod poziva"
 msgid "Name"
 msgstr "Ime"
 
+msgid "Network mount"
+msgstr ""
+
 #. TRANSLATORS: keep it short, this is a button
 msgid "New"
 msgstr "Neu"
@@ -598,9 +601,6 @@ msgstr "Nije kodirano"
 msgid "number suppressed"
 msgstr ""
 
-msgid "on connect"
-msgstr ""
-
 msgid "on ring"
 msgstr ""
 
index 8cc98ec..5621331 100644 (file)
@@ -3,7 +3,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Enigma2 FritzCall Plugin Turkish Locale\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-10 16:55+0100\n"
+"POT-Creation-Date: 2010-02-17 19:59+0100\n"
 "PO-Revision-Date: 2009-07-29 20:37+0200\n"
 "Last-Translator: Zülfikar VEYİSOĞLU <z.veyisoglu@hobiagaci.com>\n"
 "Language-Team: http://hobiagaci.com <z.veyisoglu@hobiagaci.com>\n"
@@ -318,6 +318,9 @@ msgstr "Çağrı olduğunda sessize al"
 msgid "Name"
 msgstr "Ad"
 
+msgid "Network mount"
+msgstr ""
+
 #. TRANSLATORS: keep it short, this is a button
 msgid "New"
 msgstr "Yeni"
@@ -596,9 +599,6 @@ msgstr "şifrelenmemiş"
 msgid "number suppressed"
 msgstr ""
 
-msgid "on connect"
-msgstr ""
-
 msgid "on ring"
 msgstr ""
 
index 1c66a30..b444db7 100644 (file)
@@ -6,6 +6,7 @@ from Components.config import config #@UnresolvedImport
 from Components.Language import language
 from Tools.Directories import resolveFilename, SCOPE_LANGUAGE, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE #@UnresolvedImport
 import gettext, os
+from enigma import eBackgroundFileEraser
 
 lang = language.getLanguage()
 os.environ["LANGUAGE"] = lang[:2]
@@ -21,7 +22,8 @@ def _(txt): # pylint: disable-msg=C0103
 
 def initDebug():
        try:
-               os.remove("/tmp/FritzDebug.log")
+               # os.remove("/tmp/FritzDebug.log")
+               eBackgroundFileEraser.getInstance().erase("/tmp/FritzDebug.log")
        except OSError:
                pass
 
index 5344bd5..42da37e 100644 (file)
@@ -14,6 +14,9 @@ from Screens.HelpMenu import HelpableScreen
 
 from enigma import eTimer, eSize, ePoint #@UnresolvedImport # pylint: disable-msg=E0611
 from enigma import eListboxPythonMultiContent, gFont, RT_HALIGN_LEFT, RT_HALIGN_RIGHT, eDVBVolumecontrol
+from enigma import eBackgroundFileEraser
+#BgFileEraser = eBackgroundFileEraser.getInstance()
+#BgFileEraser.erase("blabla.txt")
 
 from Components.MenuList import MenuList
 from Components.ActionMap import ActionMap
@@ -105,27 +108,35 @@ config.plugins.FritzCall.prefix.setUseableChars('0123456789')
 config.plugins.FritzCall.fullscreen = ConfigEnableDisable(default=False)
 config.plugins.FritzCall.connectionVerbose = ConfigEnableDisable(default=True)
 
-def handleMountpoint(loc):
-       # debug("[FritzCall] handleMountpoint: %s" %repr(loc))
-       mp = loc[0]
-       while mp[-1] == '/':
-               mp = mp[:-1]
-       if os.path.exists(os.path.join(mp, "PhoneBook.txt")):
-               desc = ' *'
-       else:
-               desc = ''
-       desc = loc[1] + desc
-       return (mp, desc + " (" + mp + ")")
-
-mountedDevs = [(resolveFilename(SCOPE_CONFIG), _("Flash"))]
-if os.path.isdir(resolveFilename(SCOPE_MEDIA, "cf")):
-       mountedDevs.append((resolveFilename(SCOPE_MEDIA, "cf"), _("Compact Flash")))
-if os.path.isdir(resolveFilename(SCOPE_MEDIA, "usb")):
-       mountedDevs.append((resolveFilename(SCOPE_MEDIA, "usb"), _("USB Device")))
-for p in harddiskmanager.getMountedPartitions(True):
-       mountedDevs.append((p.mountpoint, (_(p.description) if p.description else "")))
-mountedDevs = map(handleMountpoint, mountedDevs)
-config.plugins.FritzCall.phonebookLocation = ConfigSelection(choices=mountedDevs)
+
+def getMountedDevs():
+       def handleMountpoint(loc):
+               # debug("[FritzCall] handleMountpoint: %s" %repr(loc))
+               mp = loc[0]
+               while mp[-1] == '/':
+                       mp = mp[:-1]
+               if os.path.exists(os.path.join(mp, "PhoneBook.txt")):
+                       if os.access(os.path.join(mp, "PhoneBook.txt"), os.W_OK):
+                               desc = ' *'
+                       else:
+                               desc = ' -'
+               else:
+                       desc = ''
+               desc = loc[1] + desc
+               return (mp, desc + " (" + mp + ")")
+
+       mountedDevs = [(resolveFilename(SCOPE_CONFIG), _("Flash")),
+                                  (resolveFilename(SCOPE_MEDIA, "cf"), _("Compact Flash")),
+                                  (resolveFilename(SCOPE_MEDIA, "usb"), _("USB Device"))]
+       mountedDevs += map(lambda p: (p.mountpoint, (_(p.description) if p.description else "")), harddiskmanager.getMountedPartitions(True))
+       # print("[FritzCall] getMountedDevs1: %s" %repr(mountedDevs))
+       mountedDevs = filter(lambda path: os.path.isdir(path[0]) and os.access(path[0], os.W_OK|os.X_OK), mountedDevs)
+       # put this after the write/executable check, that is far too slow...
+       if os.path.isdir(resolveFilename(SCOPE_MEDIA, "net")):
+               mountedDevs += map(lambda p: (resolveFilename(SCOPE_MEDIA, os.path.join("net", p)), _("Network mount")), os.listdir(resolveFilename(SCOPE_MEDIA, "net")))
+       mountedDevs = map(handleMountpoint, mountedDevs)
+       return mountedDevs
+config.plugins.FritzCall.phonebookLocation = ConfigSelection(choices=getMountedDevs())
 
 countryCodes = [
        ("0049", _("Germany")),
@@ -405,9 +416,10 @@ class FritzCallFBF:
                if self._callScreen:
                        self._callScreen.updateStatus(_("login verification"))
                debug("[FritzCallFBF] _gotPageLogin: verify login")
-               found = re.match('.*<p class="errorMessage">FEHLER:&nbsp;([^<]*)</p>', html, re.S)
-               if found:
-                       text = _("FRITZ!Box - Error logging in: %s") + found.group(1)
+               start = html.find('<p class="errorMessage">FEHLER:&nbsp;')
+               if start != -1:
+                       start = start + len('<p class="errorMessage">FEHLER:&nbsp;')
+                       text = _("FRITZ!Box - Error logging in: %s") + html[start, html.find('</p>', start)]
                        self._notify(text)
                else:
                        if self._callScreen:
@@ -455,9 +467,16 @@ class FritzCallFBF:
 
        def _loadFritzBoxPhonebook(self, html):
                if html:
-                       found = re.match('.*<p class="errorMessage">FEHLER:&nbsp;([^<]*)</p>', html, re.S)
-                       if found:
-                               self._errorLoad('Login: ' + found.group(1))
+                       #===================================================================
+                       # found = re.match('.*<p class="errorMessage">FEHLER:&nbsp;([^<]*)</p>', html, re.S)
+                       # if found:
+                       #       self._errorLoad('Login: ' + found.group(1))
+                       #       return
+                       #===================================================================
+                       start = html.find('<p class="errorMessage">FEHLER:&nbsp;')
+                       if start != -1:
+                               start = start + len('<p class="errorMessage">FEHLER:&nbsp;')
+                               self._errorLoad('Login: ' + html[start, html.find('</p>', start)])
                                return
                parms = urlencode({
                                                'getpage':'../html/de/menus/menu2.html',
@@ -494,7 +513,8 @@ class FritzCallFBF:
                                charset = 'iso-8859-1'
                                html = html2unicode(html.decode('iso-8859-1'), 'iso-8859-1').encode('utf-8') # this looks silly, but has to be
 
-               if re.search('document.write\(TrFon1\(\)', html):
+               # if re.search('document.write\(TrFon1\(\)', html):
+               if html.find('document.write(TrFon1()') != -1:
                        #===============================================================================
                        #                                New Style: 7270 (FW 54.04.58, 54.04.63-11941, 54.04.70, 54.04.74-14371, 54.04.76)
                        #                                                       7170 (FW 29.04.70) 22.03.2009
@@ -517,6 +537,7 @@ class FritzCallFBF:
                        for entry in entries:
                                # debug(entry.group(1)
                                # TrFonName (id, name, category)
+                               # TODO: replace re.match?
                                found = re.match('TrFonName\("[^"]*", "([^"]+)", "[^"]*"\);', entry.group(1))
                                if found:
                                        name = found.group(1).replace(',','').strip()
@@ -550,7 +571,8 @@ class FritzCallFBF:
                                                # Beware: strings in phonebook.phonebook have to be in utf-8!
                                                phonebook.phonebook[thisnumber] = thisname
 
-               elif re.search('document.write\(TrFon\(', html):
+               # elif re.search('document.write\(TrFon\(', html):
+               elif html.find('document.write(TrFon(') != -1:
                        #===============================================================================
                        #                               Old Style: 7050 (FW 14.04.33)
                        #       We expect one line with TrFon(No,Name,Number,Shortcut,Vanity)
@@ -608,9 +630,16 @@ class FritzCallFBF:
 
        def _getCalls(self, callback, html):
                if html:
-                       found = re.match('.*<p class="errorMessage">FEHLER:&nbsp;([^<]*)</p>', html, re.S)
-                       if found:
-                               self._errorCalls('Login: ' + found.group(1))
+                       #===================================================================
+                       # found = re.match('.*<p class="errorMessage">FEHLER:&nbsp;([^<]*)</p>', html, re.S)
+                       # if found:
+                       #       self._errorCalls('Login: ' + found.group(1))
+                       #       return
+                       #===================================================================
+                       start = html.find('<p class="errorMessage">FEHLER:&nbsp;')
+                       if start != -1:
+                               start = start + len('<p class="errorMessage">FEHLER:&nbsp;')
+                               self._errorCalls('Login: ' + html[start, html.find('</p>', start)])
                                return
                #
                # we need this to fill Anrufliste.csv
@@ -618,10 +647,17 @@ class FritzCallFBF:
                #
                debug("[FritzCallFBF] _getCalls")
                if html:
-                       found = re.match('.*<p class="errorMessage">FEHLER:&nbsp;([^<]*)</p>', html, re.S)
-                       if found:
-                               text = _("FRITZ!Box - Error logging in: %s") + found.group(1)
-                               self._notify(text)
+                       #===================================================================
+                       # found = re.match('.*<p class="errorMessage">FEHLER:&nbsp;([^<]*)</p>', html, re.S)
+                       # if found:
+                       #       text = _("FRITZ!Box - Error logging in: %s") + found.group(1)
+                       #       self._notify(text)
+                       #       return
+                       #===================================================================
+                       start = html.find('<p class="errorMessage">FEHLER:&nbsp;')
+                       if start != -1:
+                               start = start + len('<p class="errorMessage">FEHLER:&nbsp;')
+                               self._notify(_("FRITZ!Box - Error logging in: %s") + html[start, html.find('</p>', start)])
                                return
 
                if self._callScreen:
@@ -652,9 +688,14 @@ class FritzCallFBF:
                                        number = config.plugins.FritzCall.prefix.value + number
                                name = phonebook.search(number)
                                if name:
-                                       found = re.match('(.*?)\n.*', name)
-                                       if found:
-                                               name = found.group(1)
+                                       #===========================================================
+                                       # found = re.match('(.*?)\n.*', name)
+                                       # if found:
+                                       #       name = found.group(1)
+                                       #===========================================================
+                                       end = name.find('\n')
+                                       if end != -1:
+                                               name = name[:end]
                                        number = name
                                else:
                                        name = resolveNumberWithAvon(number, config.plugins.FritzCall.country.value)
@@ -670,8 +711,8 @@ class FritzCallFBF:
                        if self._callScreen:
                                self._callScreen.updateStatus(_("done"))
                        # check for error: wrong password or password not set... TODO
-                       found = re.search('Melden Sie sich mit dem Kennwort der FRITZ!Box an', csv)
-                       if found:
+                       found = re.search('Melden Sie sich mit dem Kennwort der FRITZ!Box an', csv)
+                       if csv.find('Melden Sie sich mit dem Kennwort der FRITZ!Box an') != -1:
                                text = _("You need to set the password of the FRITZ!Box\nin the configuration dialog to display calls\n\nIt could be a communication issue, just try again.")
                                # self.session.open(MessageBox, text, MessageBox.TYPE_ERROR, timeout=config.plugins.FritzCall.timeout.value)
                                self._notify(text)
@@ -695,27 +736,40 @@ class FritzCallFBF:
                        debug("[FritzCallFBF] _gotPageCalls: filtermsns %s" % (repr(filtermsns)))
                for line in lines:
                        # Typ;e;Rufnummer;Nebenstelle;Eigene Rufnummer;Dauer
-                       found = re.match("^(" + self._callType + ");([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*)", line)
-                       if found:
-                               direct = found.group(1)
-                               date = found.group(2)
-                               length = found.group(7)
-                               remote = resolveNumber(found.group(4))
-                               if not remote and direct != FBF_OUT_CALLS and found.group(3):
-                                       remote = found.group(3)
-                               found1 = re.match('Internet: (.*)', found.group(6))
-                               if found1:
-                                       here = found1.group(1)
+                       elems = line.split(';')
+                       # found = re.match("^(" + self._callType + ");([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*)", line)
+                       if len(elems) != 7: # this happens, if someone puts a ';' in the name in the FBF phonebook
+                               debug("[FritzCallFBF] _gotPageCalls: len != 7: %s" % (line))
+                       if len(elems) == 7 and (self._callType == '.' or elems[0] == self._callType):
+                               # debug("[FritzCallFBF] _gotPageCalls: elems %s" % (elems))
+                               direct = elems[0]
+                               date = elems[1]
+                               length = elems[6]
+                               remote = resolveNumber(elems[3])
+                               if not remote and direct != FBF_OUT_CALLS and elems[2]:
+                                       remote = elems[2]
+                               #===============================================================
+                               # found1 = re.match('Internet: (.*)', found.group(6))
+                               # if found1:
+                               #       here = found1.group(1)
+                               # else:
+                               #       here = found.group(6)
+                               #===============================================================
+                               here = elems[5]
+                               start = here.find('Internet: ')
+                               if start != -1:
+                                       start += len('Internet: ')
+                                       here = here[start:]
                                else:
-                                       here = found.group(6)
+                                       here = elems[5]
                                if config.plugins.FritzCall.filter.value and config.plugins.FritzCall.filterCallList.value:
-                                       debug("[FritzCallFBF] _gotPageCalls: check %s" % (here))
+                                       debug("[FritzCallFBF] _gotPageCalls: check %s" % (here))
                                        if here not in filtermsns:
-                                               debug("[FritzCallFBF] _gotPageCalls: skip %s" % (here))
+                                               debug("[FritzCallFBF] _gotPageCalls: skip %s" % (here))
                                                continue
                                here = resolveNumber(here)
 
-                               number = stripCbCPrefix(found.group(4), config.plugins.FritzCall.country.value)
+                               number = stripCbCPrefix(elems[3], config.plugins.FritzCall.country.value)
                                if config.plugins.FritzCall.prefix.value and number and number[0] != '0':               # should only happen for outgoing
                                        number = config.plugins.FritzCall.prefix.value + number
                                callListL.append((number, date, here, direct, remote, length))
@@ -738,9 +792,16 @@ class FritzCallFBF:
                
        def _dial(self, number, html):
                if html:
-                       found = re.match('.*<p class="errorMessage">FEHLER:&nbsp;([^<]*)</p>', html, re.S)
-                       if found:
-                               self._errorDial('Login: ' + found.group(1))
+                       #===================================================================
+                       # found = re.match('.*<p class="errorMessage">FEHLER:&nbsp;([^<]*)</p>', html, re.S)
+                       # if found:
+                       #       self._errorDial('Login: ' + found.group(1))
+                       #       return
+                       #===================================================================
+                       start = html.find('<p class="errorMessage">FEHLER:&nbsp;')
+                       if start != -1:
+                               start = start + len('<p class="errorMessage">FEHLER:&nbsp;')
+                               self._errorDial('Login: ' + html[start, html.find('</p>', start)])
                                return
                url = "http://%s/cgi-bin/webcm" % config.plugins.FritzCall.hostname.value
                parms = urlencode({
@@ -778,9 +839,16 @@ class FritzCallFBF:
                
        def _changeWLAN(self, statusWLAN, html):
                if html:
-                       found = re.match('.*<p class="errorMessage">FEHLER:&nbsp;([^<]*)</p>', html, re.S)
-                       if found:
-                               self._errorChangeWLAN('Login: ' + found.group(1))
+                       #===================================================================
+                       # found = re.match('.*<p class="errorMessage">FEHLER:&nbsp;([^<]*)</p>', html, re.S)
+                       # if found:
+                       #       self._errorChangeWLAN('Login: ' + found.group(1))
+                       #       return
+                       #===================================================================
+                       start = html.find('<p class="errorMessage">FEHLER:&nbsp;')
+                       if start != -1:
+                               start = start + len('<p class="errorMessage">FEHLER:&nbsp;')
+                               self._errorChangeWLAN('Login: ' + html[start, html.find('</p>', start)])
                                return
                url = "http://%s/cgi-bin/webcm" % config.plugins.FritzCall.hostname.value
                parms = urlencode({
@@ -815,9 +883,16 @@ class FritzCallFBF:
 
        def _changeMailbox(self, whichMailbox, html):
                if html:
-                       found = re.match('.*<p class="errorMessage">FEHLER:&nbsp;([^<]*)</p>', html, re.S)
-                       if found:
-                               self._errorChangeMailbox('Login: ' + found.group(1))
+                       #===================================================================
+                       # found = re.match('.*<p class="errorMessage">FEHLER:&nbsp;([^<]*)</p>', html, re.S)
+                       # if found:
+                       #       self._errorChangeMailbox('Login: ' + found.group(1))
+                       #       return
+                       #===================================================================
+                       start = html.find('<p class="errorMessage">FEHLER:&nbsp;')
+                       if start != -1:
+                               start = start + len('<p class="errorMessage">FEHLER:&nbsp;')
+                               self._errorChangeMailbox('Login: ' + html[start, html.find('</p>', start)])
                                return
                debug("[FritzCallFBF] _changeMailbox")
                url = "http://%s/cgi-bin/webcm" % config.plugins.FritzCall.hostname.value
@@ -876,9 +951,16 @@ class FritzCallFBF:
                # http://192.168.178.1/cgi-bin/webcm?getpage=../html/de/menus/menu2.html&var:lang=de&var:pagename=home&var:menu=home
                debug("[FritzCallFBF] _getInfo: verify login")
                if html:
-                       found = re.match('.*<p class="errorMessage">FEHLER:&nbsp;([^<]*)</p>', html, re.S)
-                       if found:
-                               self._errorGetInfo('Login: ' + found.group(1))
+                       #===================================================================
+                       # found = re.match('.*<p class="errorMessage">FEHLER:&nbsp;([^<]*)</p>', html, re.S)
+                       # if found:
+                       #       self._errorGetInfo('Login: ' + found.group(1))
+                       #       return
+                       #===================================================================
+                       start = html.find('<p class="errorMessage">FEHLER:&nbsp;')
+                       if start != -1:
+                               start = start + len('<p class="errorMessage">FEHLER:&nbsp;')
+                               self._errorGetInfo('Login: ' + html[start, html.find('</p>', start)])
                                return
 
                url = "http://%s/cgi-bin/webcm" % config.plugins.FritzCall.hostname.value
@@ -1151,9 +1233,16 @@ class FritzCallFBF:
        def _reset(self, html):
                # POSTDATA=getpage=../html/reboot.html&errorpage=../html/de/menus/menu2.html&var:lang=de&var:pagename=home&var:errorpagename=home&var:menu=home&var:pagemaster=&time:settings/time=1242207340%2C-120&var:tabReset=0&logic:command/reboot=../gateway/commands/saveconfig.html
                if html:
-                       found = re.match('.*<p class="errorMessage">FEHLER:&nbsp;([^<]*)</p>', html, re.S)
-                       if found:
-                               self._errorReset('Login: ' + found.group(1))
+                       #===================================================================
+                       # found = re.match('.*<p class="errorMessage">FEHLER:&nbsp;([^<]*)</p>', html, re.S)
+                       # if found:
+                       #       self._errorReset('Login: ' + found.group(1))
+                       #       return
+                       #===================================================================
+                       start = html.find('<p class="errorMessage">FEHLER:&nbsp;')
+                       if start != -1:
+                               start = start + len('<p class="errorMessage">FEHLER:&nbsp;')
+                               self._errorReset('Login: ' + html[start, html.find('</p>', start)])
                                return
                if self._callScreen:
                        self._callScreen.close()
@@ -1188,9 +1277,16 @@ class FritzCallFBF:
                
        def _readBlacklist(self, html):
                if html:
-                       found = re.match('.*<p class="errorMessage">FEHLER:&nbsp;([^<]*)</p>', html, re.S)
-                       if found:
-                               self._errorBlacklist('Login: ' + found.group(1))
+                       #===================================================================
+                       # found = re.match('.*<p class="errorMessage">FEHLER:&nbsp;([^<]*)</p>', html, re.S)
+                       # if found:
+                       #       self._errorBlacklist('Login: ' + found.group(1))
+                       #       return
+                       #===================================================================
+                       start = html.find('<p class="errorMessage">FEHLER:&nbsp;')
+                       if start != -1:
+                               start = start + len('<p class="errorMessage">FEHLER:&nbsp;')
+                               self._errorBlacklist('Login: ' + html[start, html.find('</p>', start)])
                                return
                # http://fritz.box/cgi-bin/webcm?getpage=../html/de/menus/menu2.html&var:lang=de&var:menu=fon&var:pagename=sperre
                url = "http://%s/cgi-bin/webcm" % config.plugins.FritzCall.hostname.value
@@ -1823,9 +1919,12 @@ class FritzDisplayCalls(Screen, HelpableScreen):
                        fontSize = scaleV(24, 20)
                sortlist = []
                for (number, date, remote, direct, here, length) in listOfCalls:
-                       found = re.match("(\d\d.\d\d.)\d\d( \d\d:\d\d)", date)
-                       if found:
-                               date = found.group(1) + found.group(2)
+                       #===================================================================
+                       # found = re.match("(\d\d.\d\d.)\d\d( \d\d:\d\d)", date)
+                       # if found:
+                       #       date = found.group(1) + found.group(2)
+                       #===================================================================
+                       date = date[:6] + date[9:14]
                        if direct == FBF_OUT_CALLS:
                                direct = LoadPixmap(resolveFilename(SCOPE_PLUGINS, "Extensions/FritzCall/images/callout.png"))
                        elif direct == FBF_IN_CALLS:
@@ -2056,6 +2155,7 @@ class FritzCallPhonebook:
                if config.plugins.FritzCall.phonebook.value and os.path.exists(phonebookFilename):
                        debug("[FritzCallPhonebook] reload: read " + phonebookFilename)
                        phonebookTxtCorrupt = False
+                       self.phonebook = {}
                        for line in open(phonebookFilename):
                                try:
                                        # Beware: strings in phonebook.phonebook have to be in utf-8!
@@ -2069,29 +2169,43 @@ class FritzCallPhonebook:
                                                debug("[FritzCallPhonebook] Could not parse internal Phonebook Entry %s" % line)
                                                phonebookTxtCorrupt = True
                                line = line.encode("utf-8")
-                               if re.match("^\d+#.*$", line):
+                               elems = line.split('#')
+                               if len(elems) == 2:
                                        try:
-                                               number, name = line.split("#")
-                                               if not self.phonebook.has_key(number):
-                                                       # Beware: strings in phonebook.phonebook have to be in utf-8!
-                                                       self.phonebook[number] = name
+                                               self.phonebook[elems[0]] = elems[1]
                                        except ValueError: # how could this possibly happen?!?!
                                                debug("[FritzCallPhonebook] Could not parse internal Phonebook Entry %s" % line)
                                                phonebookTxtCorrupt = True
                                else:
                                        debug("[FritzCallPhonebook] Could not parse internal Phonebook Entry %s" % line)
                                        phonebookTxtCorrupt = True
+                                       
+                               #===============================================================
+                               # found = re.match("^(\d+)#(.*)$", line)
+                               # if found:
+                               #       try:
+                               #               self.phonebook[found.group(1)] = found.group(2)
+                               #       except ValueError: # how could this possibly happen?!?!
+                               #               debug("[FritzCallPhonebook] Could not parse internal Phonebook Entry %s" % line)
+                               #               phonebookTxtCorrupt = True
+                               # else:
+                               #       debug("[FritzCallPhonebook] Could not parse internal Phonebook Entry %s" % line)
+                               #       phonebookTxtCorrupt = True
+                               #===============================================================
 
                        if phonebookTxtCorrupt:
                                # dump phonebook to PhoneBook.txt
                                debug("[FritzCallPhonebook] dump Phonebook.txt")
-                               os.rename(phonebookFilename, phonebookFilename + ".bck")
-                               fNew = open(phonebookFilename, 'w')
-                               # Beware: strings in phonebook.phonebook are utf-8!
-                               for (number, name) in self.phonebook.iteritems():
-                                       # Beware: strings in PhoneBook.txt have to be in utf-8!
-                                       fNew.write(number + "#" + name.encode("utf-8"))
-                               fNew.close()
+                               try:
+                                       os.rename(phonebookFilename, phonebookFilename + ".bck")
+                                       fNew = open(phonebookFilename, 'w')
+                                       # Beware: strings in phonebook.phonebook are utf-8!
+                                       for (number, name) in self.phonebook.iteritems():
+                                               # Beware: strings in PhoneBook.txt have to be in utf-8!
+                                               fNew.write(number + "#" + name.encode("utf-8"))
+                                       fNew.close()
+                               except (IOError, OSError):
+                                       debug("[FritzCallPhonebook] error renaming or writing to %s" %phonebookFilename)
 
 #===============================================================================
 #              #
@@ -2191,18 +2305,20 @@ class FritzCallPhonebook:
                                        fNew = open(phonebookFilename + str(os.getpid()), 'w')
                                        line = fOld.readline()
                                        while (line):
-                                               if not re.match("^" + number + "#.*$", line):
+                                               elems = line.split('#')
+                                               if len(elems) == 2 and not elems[0] == number:
                                                        fNew.write(line)
                                                line = fOld.readline()
                                        fOld.close()
                                        fNew.close()
-                                       os.remove(phonebookFilename)
+                                       # os.remove(phonebookFilename)
+                                       eBackgroundFileEraser.getInstance().erase(phonebookFilename)
                                        os.rename(phonebookFilename + str(os.getpid()), phonebookFilename)
                                        debug("[FritzCallPhonebook] removed %s from Phonebook.txt" % number)
                                        return True
        
-                               except IOError:
-                                       pass
+                               except (IOError, OSError):
+                                       debug("[FritzCallPhonebook] error removing %s from %s" %(number, phonebookFilename))
                return False
 
        class FritzDisplayPhonebook(Screen, HelpableScreen, NumericalTextInput):
@@ -2381,9 +2497,16 @@ class FritzCallPhonebook:
                                                        continue
                                        name = name.strip().decode("utf-8")
                                        number = number.strip().decode("utf-8")
-                                       found = re.match("([^,]*),.*", name)   # strip address information from the name part
-                                       if found:
-                                               shortname = found.group(1)
+                                       #===========================================================
+                                       # found = re.match("([^,]*),.*", name)   # strip address information from the name part
+                                       # if found:
+                                       #       shortname = found.group(1)
+                                       # else:
+                                       #       shortname = name
+                                       #===========================================================
+                                       comma = name.find(',')
+                                       if comma != -1:
+                                               shortname = name[:comma]
                                        else:
                                                shortname = name
                                        numberFieldWidth = scaleH(190, 150)
@@ -2742,7 +2865,9 @@ class FritzCallSetup(Screen, ConfigListScreen, HelpableScreen):
                self.helpList.append((self["setupActions"], "EPGSelectActions", [("info", _("About FritzCall"))]))
 
                ConfigListScreen.__init__(self, self.list, session=session)
-                       
+
+               # get new list of locations for PhoneBook.txt
+               self._mountedDevs = getMountedDevs()
                self.createSetup()
 
 
@@ -2787,6 +2912,20 @@ class FritzCallSetup(Screen, ConfigListScreen, HelpableScreen):
 
                        self.list.append(getConfigListEntry(_("Use internal PhoneBook"), config.plugins.FritzCall.phonebook))
                        if config.plugins.FritzCall.phonebook.value:
+                               if config.plugins.FritzCall.phonebookLocation.value in self._mountedDevs:
+                                       config.plugins.FritzCall.phonebookLocation.setChoices(self._mountedDevs, config.plugins.FritzCall.phonebookLocation.value)
+                               else:
+                                       config.plugins.FritzCall.phonebookLocation.setChoices(self._mountedDevs)
+                               path = config.plugins.FritzCall.phonebookLocation.value
+                               # check whether we can write to PhoneBook.txt
+                               if os.path.exists(os.path.join(path[0], "PhoneBook.txt")):
+                                       if not os.access(os.path.join(path[0], "PhoneBook.txt"), os.W_OK):
+                                               debug("[FritzCallSetup] createSetup: %s/PhoneBook.txt not writable, resetting to default" %(path[0]))
+                                               config.plugins.FritzCall.phonebookLocation.setChoices(self._mountedDevs)
+                               elif not (os.path.isdir(path[0]) and os.access(path[0], os.W_OK|os.X_OK)):
+                                       debug("[FritzCallSetup] createSetup: directory %s not writable, resetting to default" %(path[0]))
+                                       config.plugins.FritzCall.phonebookLocation.setChoices(self._mountedDevs)
+
                                self.list.append(getConfigListEntry(_("PhoneBook Location"), config.plugins.FritzCall.phonebookLocation))
                                if config.plugins.FritzCall.lookup.value:
                                        self.list.append(getConfigListEntry(_("Automatically add new Caller to PhoneBook"), config.plugins.FritzCall.addcallers))
@@ -2805,6 +2944,9 @@ class FritzCallSetup(Screen, ConfigListScreen, HelpableScreen):
 #              debug("[FritzCallSetup] save"
                for x in self["config"].list:
                        x[1].save()
+               if config.plugins.FritzCall.phonebookLocation.isChanged():
+                       global phonebook
+                       phonebook = FritzCallPhonebook()
                if fritz_call:
                        if config.plugins.FritzCall.enable.value:
                                fritz_call.connect()
@@ -2882,14 +3024,23 @@ class FritzCallList:
                                direction = "<-"
 
                        # shorten the date info
-                       found = re.match(".*(\d\d.\d\d.)\d\d( \d\d:\d\d)", date)
-                       if found:
-                               date = found.group(1) + found.group(2)
+                       #===================================================================
+                       # found = re.match(".*(\d\d.\d\d.)\d\d( \d\d:\d\d)", date)
+                       # if found:
+                       #       date = found.group(1) + found.group(2)
+                       #===================================================================
+                       date = date[:6] + date[9:14]
 
                        # our phone could be of the form "0123456789 (home)", then we only take "home"
-                       found = re.match(".*\((.*)\)", phone)
-                       if found:
-                               phone = found.group(1)
+                       #===================================================================
+                       # found = re.match(".*\((.*)\)", phone)
+                       # if found:
+                       #       phone = found.group(1)
+                       #===================================================================
+                       oBrack = phone.find('(')
+                       cBrack = phone.find(')')
+                       if oBrack != -1 and cBrack != -1:
+                               phone = phone[oBrack+1:cBrack-1]
 
                        # should not happen, for safety reasons
                        if not caller:
@@ -2900,9 +3051,14 @@ class FritzCallList:
                                caller = number
                        else:
                                # strip off the address part of the remote number, if there is any
-                               found = re.match("(.*)\n.*", caller)
-                               if found:
-                                       caller = found.group(1)
+                               #===============================================================
+                               # found = re.match("(.*)\n.*", caller)
+                               # if found:
+                               #       caller = found.group(1)
+                               #===============================================================
+                               nl = caller.find('\n')
+                               if nl != -1:
+                                       caller = caller[:nl]
                                elif caller[0] == '[' and caller[-1] == ']':
                                        caller = number + ' ' + caller
 
index bd2c3b1..ce27df3 100644 (file)
@@ -13,7 +13,7 @@
      be used first and what pattern should be used for that web site first.
         As soon as one matching name is found, jfritz will stop trying other
         patterns / entries.
-        
+        +46
         Make sure that each url entry contains the string $NUMBER at the
         appropriate spot or else the algorithm won't work! The attributes prefix
         and areacode are optional. The attribute prefix is used to determine if 
                                <city>&lt;span class=&quot;locality&quot;&gt;([^&lt;]*)&lt;/span&gt;</city>
                                <zipcode>&lt;span class=&quot;postal-code&quot;&gt;([^&lt;]*)&lt;/span&gt;</zipcode>
                        </entry>
+                       <entry firstOccurance="firstname">
+                               <firstname>&lt;span class=&quot;given-name&quot;&gt;([^&lt;]*)&lt;/span&gt;</firstname>
+                               <lastname>&lt;span class=&quot;given-name&quot;&gt;([^&lt;]*)&lt;/span&gt;&lt;/a&gt;</lastname>
+                               <street>&lt;span class=&quot;street-address&quot;&gt;([^&lt;]*)&lt;/span&gt;</street>
+                               <city>&lt;span class=&quot;locality&quot;&gt;([^&lt;]*)&lt;/span&gt;</city>
+                               <zipcode>&lt;span class=&quot;postal-code&quot;&gt;([^&lt;]*)&lt;/span&gt;</zipcode>
+                       </entry>
                        <entry>
                                <name>fn expand(?:(?:.*owner-of-cell)|[^&gt;]*&gt;)[^&gt;]*&gt;([^&lt;]*)&lt;</name>
                                <street>street-address&quot;?&gt;([^&lt;]*)&lt;</street>
                <website name="gulesider.no" url="http://www.gulesider.no/gs/categoryList.c?q=$NUMBER" prefix="">
                        <entry>
                                <name swapFirstAndLastName="true">&lt;h2 class=&quot;name&quot;&gt;\s*&lt;a href=&quot;[^&quot;]*&quot;\s*title=&quot;[^&quot;]*&quot;&gt;\s*([- \w]*)\s*?&lt;span&gt;</name>
-                               <street>&lt;p class=&quot;[^&quot;]*&quot;&gt;\s*([ \w]*),\s*\d+ \w+\s*&lt;/p&gt;</street>
-                               <city>&lt;p class=&quot;[^&quot;]*&quot;&gt;\s*[ \w]*,\s*\d+ (\w+)\s*&lt;/p&gt;</city>
-                               <zipcode>&lt;p class=&quot;[^&quot;]*&quot;&gt;\s*[ \w]*,\s*(\d+) \w+\s*&lt;/p&gt;</zipcode>
+                               <street>&lt;div class=&quot;address&quot;&gt;\s*&lt;p&gt;([ \w]*),\s*\d+ \w+\s*&lt;/p&gt;</street>
+                               <city>&lt;div class=&quot;address&quot;&gt;\s*&lt;p&gt;[ \w]*,\s*\d+ (\w+)\s*&lt;/p&gt;</city>
+                               <zipcode>&lt;div class=&quot;address&quot;&gt;\s*&lt;p&gt;[ \w]*,\s*(\d+) \w+\s*&lt;/p&gt;</zipcode>
                        </entry>
                </website>
        </country>
                </website>
                <website name="www.goyellow.de" url="http://www.goyellow.de/inverssuche/?TEL=$NUMBER" prefix="0">
                <entry>
-                       <name>&lt;a href=&quot;[^&quot;]*&quot; title=&quot;[^&quot;]*&quot; onClick=&quot;[^&quot;]*&quot;&gt;([^&lt;]*)&lt;/a&gt;</name>
-                               <street>&lt;p class=&quot;address&quot;&gt;([^&lt;]*)&lt;br /&gt;[\d]*\s*[^&lt;]*&lt;/p&gt;</street>
-                       <city>&lt;p class=&quot;address&quot;&gt;[^&lt;]*&lt;br /&gt;[\d]*\s*([^&lt;]*)&lt;/p&gt;</city>
-                       <zipcode>&lt;p class=&quot;address&quot;&gt;[^&lt;]*&lt;br /&gt;([\d]*)\s*[^&lt;]*&lt;/p&gt;</zipcode>
-               </entry>
-               <entry>
-                       <name>&lt;a href=&quot;[^&quot;]*&quot; onClick=&quot;[^&quot;]*&quot; title=&quot;[^&quot;]*&quot;&gt;([^&lt;]*)&lt;/a&gt;</name>
-                               <street>&lt;p class=&quot;address&quot;&gt;([^&lt;]*)&lt;br /&gt;[\d]*\s*[^&lt;]*&lt;/p&gt;</street>
-                       <city>&lt;p class=&quot;address&quot;&gt;[^&lt;]*&lt;br /&gt;[\d]*\s*([^&lt;]*)&lt;/p&gt;</city>
-                       <zipcode>&lt;p class=&quot;address&quot;&gt;[^&lt;]*&lt;br /&gt;([\d]*)\s*[^&lt;]*&lt;/p&gt;</zipcode>
+                       <name>&lt;a onClick=&quot;[^&quot;]*&quot; title=&quot;[^&quot;]*&quot; href=&quot;[^&quot;]*&quot;&gt;\s*&lt;span class=&quot;normal&quot;&gt;([^&lt;]*)&lt;/span&gt;</name>
+                               <street>&lt;span class=&quot;street&quot;&gt;([^&lt;]*)&lt;/span&gt;</street>
+                       <city>&lt;span class=&quot;city&quot;&gt;([^&lt;]*)&lt;/span&gt;</city>
+                       <zipcode>&lt;span class=&quot;postcode&quot;&gt;([^&lt;]*)&lt;/span&gt;</zipcode>
                </entry>
                </website>
                <website name="www.11880.com" url="http://www.11880.com/Suche/index.cfm?&amp;fuseaction=Suche.rueckwaertssucheresult&amp;init=true&amp;tel=$NUMBER" prefix="0">