print
p=py2deb.Py2deb("ussd-common")
- p.description="Command line utility for makein USSD queries"
+ p.description="Command line utility for making USSD queries"
p.author="Alexey Guseynov"
p.mail="kibergus@gmail.com"
p.depends = "python2.5, pexpect"
chmod +s /usr/bin/pnatd
""" #Set here your post install script
- version = "0.0.3"
+ version = "0.0.5"
build = "0"
- changeloginformation = "Language selection support, line break in reply bug fixed."
+ changeloginformation = "command line parameters rearranged, bugfixes."
dir_name = "src"
import gsmdecode
import re
import fcntl
-
-if len(sys.argv) != 2 and len(sys.argv) != 3:
- print "Usage: ussdquery.py <ussd number> [<language>]\nAllowed languages: German, English, Italian, French, Spanish, Dutch, Swedish, Danish, Portuguese, Finnish, Norwegian, Greek, Turkish, Reserved1, Reserved2, Unspecified"
+import os
+import stat
+
+def check_number(number):
+ if number == "":
+ return False
+ for s in number :
+ if not (s in ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "+", "*", "#"]) :
+ return False
+ return True
+
+if len(sys.argv) == 1:
+ print "Usage:\nussdquery.py <ussd number> [options]\nussdquery.py interactive [options]\n"+\
+"Options:\n-l language. Allowed languages: German, English, Italian, French, Spanish, Dutch, Swedish, Danish, Portuguese, Finnish, Norwegian, Greek, Turkish, Reserved1, Reserved2, Unspecified\n"+\
+"-r retry count. 0 default. Use -1 for infinite.\n-f If specified, errors, which occur on last query are threated as fatal\n"+\
+"-t timeout in seconds. Default 30. Timeout is considered to be critical error because you can't be shure answer for what request was returned.\n"+\
+"-d delimeter. Default is '\\n> '"+\
+"For USSD menu navigation divide USSD number via spacebars for every nex menu selection. Type exit in interactive mode to exit."
sys.exit()
+retry = 0
+allow_last_error = True
+delimiter = "\n> "
language = 15
-if len(sys.argv) == 3:
- if sys.argv[2] == "German":
- language = 0
- elif sys.argv[2] == "English":
- language = 1
- elif sys.argv[2] == "Italian":
- language = 2
- elif sys.argv[2] == "French":
- language = 3
- elif sys.argv[2] == "Spanish":
- language = 4
- elif sys.argv[2] == "Dutch":
- language = 5
- elif sys.argv[2] == "Swedish":
- language = 6
- elif sys.argv[2] == "Danish":
- language = 7
- elif sys.argv[2] == "Portuguese":
- language = 8
- elif sys.argv[2] == "Finnish":
- language = 9
- elif sys.argv[2] == "Norwegian":
- language = 10
- elif sys.argv[2] == "Greek":
- language = 11
- elif sys.argv[2] == "Turkish":
- language = 12
- elif sys.argv[2] == "Reserved1":
- language = 13
- elif sys.argv[2] == "Reserved2":
- language = 14
- elif sys.argv[2] == "Unspecified":
- language = 15
- else:
- print >> sys.stderr, "Language unknown, falling back to unspecified."
+timeout = 30
+
+if sys.argv[1] == "interactive":
+ number = "interactive"
+else:
+ number = sys.argv[1].split(" ")
+ for n in number:
+ if not check_number(n):
+ print >> sys.stderr, "Sintax error in USSD number."
+ sys.exit(-7)
+
+# Parsing command line options
+arg = 1
+state = "arg"
+while arg < len(sys.argv)-1:
+ arg += 1
+ if state == "arg":
+ if sys.argv[arg] == "-l":
+ state = "lang"
+ continue
+ if sys.argv[arg] == "-r":
+ state = "retry"
+ continue
+ if sys.argv[arg] == "-t":
+ state = "timeout"
+ continue
+ if sys.argv[arg] == "-d":
+ state = "delim"
+ continue
+ if sys.argv[arg] == "-f":
+ allow_last_error = False
+ continue
+
+ if state == "lang":
+ if sys.argv[arg] == "German":
+ language = 0
+ elif sys.argv[arg] == "English":
+ language = 1
+ elif sys.argv[arg] == "Italian":
+ language = 2
+ elif sys.argv[arg] == "French":
+ language = 3
+ elif sys.argv[arg] == "Spanish":
+ language = 4
+ elif sys.argv[arg] == "Dutch":
+ language = 5
+ elif sys.argv[arg] == "Swedish":
+ language = 6
+ elif sys.argv[arg] == "Danish":
+ language = 7
+ elif sys.argv[arg] == "Portuguese":
+ language = 8
+ elif sys.argv[arg] == "Finnish":
+ language = 9
+ elif sys.argv[arg] == "Norwegian":
+ language = 10
+ elif sys.argv[arg] == "Greek":
+ language = 11
+ elif sys.argv[arg] == "Turkish":
+ language = 12
+ elif sys.argv[arg] == "Reserved1":
+ language = 13
+ elif sys.argv[arg] == "Reserved2":
+ language = 14
+ elif sys.argv[arg] == "Unspecified":
+ language = 15
+ else:
+ print >> sys.stderr, "Language unknown, falling back to unspecified."
+ state = "arg"
+ continue
+
+ if state == "delim":
+ if number == "interactive":
+ delimiter = sys.argv[arg]
+ else:
+ print >> sys.stderr, "Delimiter is only supported in interactive mode."
+ state = "arg"
+ continue
+
+ if state == "retry":
+ if number == "interactive":
+ print >> sys.stderr, "Retry is only supported in normal mode."
+ else:
+ try:
+ retry = int(sys.argv[arg])
+ if retry < -1:
+ print >> sys.stderr, "Number of allowed errors must be >= -1. -1 assumed."
+ retry = -1
+ except:
+ print >> sys.stderr, "Retry must be an integer."
+ sys.exit(-5)
+ state = "arg"
+ continue
+ if state == "timeout":
+ try:
+ timeout = int(sys.argv[arg])
+ except:
+ print >> sys.stderr, "Timeout must be an integer."
+ sys.exit(-5)
+ state = "arg"
+ continue
+
+ print >> sys.stderr, "Unrecogmized argument: "+sys.argv[arg]
+
+if retry == -1:
+ retry_forever = True
+else:
+ retry_forever = False
# We have only one modem, simultaneous acces wouldn't bring anything good
lockf = open("/tmp/ussdquery.lock", 'a')
fcntl.flock(lockf,fcntl.LOCK_EX)
-
-# Operations should timeout in 30 seconds.
-# I'm not shure, that readline uses timeouts
+try:
+ os.chmod("/tmp/ussdquery.lock", stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IWGRP | stat.S_IROTH | stat.S_IWOTH)
+except:
+ None
child = None
response = ""
-retry = 5
-while response != "OK" and retry > 0 :
+init_retry = 5
+while response != "OK" and init_retry > 0 :
if child == None :
# OK response should be recieved shortly
child = pexpect.spawn('pnatd', [], 2)
response = ""
if response != "OK" :
time.sleep(0.5)
- retry -= 1
+ init_retry -= 1
if response != "OK" :
print >> sys.stderr, "Couldn't init modem."
lockf.close()
sys.exit (-1)
-child.timeout = 30
-
-try :
- child.send('at+cusd=1,"'+(sys.argv[1])+'",'+str(language)+'\r')
- # Read our query echoed back
- child.readline()
-
- #Read and parse reply
- replystring = child.readline().decode('string_escape')
-except pexpect.TIMEOUT:
- print >> sys.stderr, "Timeout. Modem didn't reply."
- child.kill(9)
- fcntl.flock(lockf,fcntl.LOCK_UN)
- lockf.close()
- sys.exit (-2)
-
-child.sendeof()
-fcntl.flock(lockf,fcntl.LOCK_UN)
-lockf.close()
+child.timeout = timeout
+# Now we are ready to send commands
+
+stage = 0
+if number == "interactive":
+ sys.stdout.write(delimiter)
+while number == "interactive" or stage < len(number):
+ if number == "interactive":
+ cnumber = sys.stdin.readline().strip()
+ if cnumber == "exit":
+ child.kill(9)
+ fcntl.flock(lockf,fcntl.LOCK_UN)
+ lockf.close()
+ sys.exit (-2)
+ if not check_number (cnumber):
+ sys.stdout.write ("Sintax error in USSD number"+delimiter)
+ continue
+ else:
+ cnumber = number[stage]
-#replystring = "+CUSD: 0,\"OCTATOK 165.65 p.\n 3BOHu 333! HOBbIu PA3DEL: ХuT-nAPAD MY3bIKu (3p. MuHYTA)\",1"
+ if retry == -1 and not retry_forever:
+ print >> sys.stderr, "Retry limit is over. Giving up."
+ break
-if replystring.strip() == "ERROR" :
- print >> sys.stderr, "Modem returned ERROR. Query not executed."
- sys.exit (-3)
+ try :
+ child.send('at+cusd=1,"'+cnumber+'",'+str(language)+'\r')
+ # Read our query echoed back
+ child.readline()
+
+ #Read and parse reply
+ replystring = child.readline().decode('string_escape')
+ # This will read out unneeded info from modem
+ child.readline()
+ child.readline()
+ except pexpect.TIMEOUT:
+ print >> sys.stderr, "Timeout. Modem didn't reply."
+ child.kill(9)
+ fcntl.flock(lockf,fcntl.LOCK_UN)
+ lockf.close()
+ sys.exit (-2)
-try:
- reresult = re.match("(?s)^\\+CUSD: \\d+,\"(.*)\",(\\d+)$", replystring.strip())
- reply = reresult.group(1)
- encoding = reresult.group(2)
-except:
- print >> sys.stderr, "Couldn't parse modem answer."
- sys.exit (-4)
+ if replystring.strip() == "ERROR" :
+ retry -= 1
+ print >> sys.stderr, "Modem returned ERROR. Query not executed."
+ continue
+
+ try:
+ reresult = re.match("(?s)^\\+CUSD: \\d+,\"(.*)\",(\\d+)$", replystring.strip())
+ reply = reresult.group(1)
+ encoding = reresult.group(2)
+ except:
+ retry -= 1
+ print >> sys.stderr, "Couldn't parse modem answer."
+ continue
-# Decoding ansver
-reply = gsmdecode.decode(reply, int(encoding))
+ # Decoding ansver
+ reply = gsmdecode.decode(reply, int(encoding))
-print reply
+ if number == "interactive":
+ # prints line feed
+ sys.stdout.write(reply+delimiter)
+ else:
+ if stage == len(number)-1:
+ print reply
+ stage += 1
+ if not allow_last_error and namber != "interactive" and stage == len(number) - 1:
+ retry = 0
+child.sendeof()
+fcntl.flock(lockf,fcntl.LOCK_UN)
+lockf.close()
p.description="Widget, that executes USSD query and displays response text\nThe main purpose is viewing your balance. In Russia all operators provide balace information via USSD queries and most part of contracts are prepaid. Ability to see your balance on desktop can be useful in such case.\nAnyway, you can configure widget to any other USSD query."
p.author="Alexey Guseynov"
p.mail="kibergus@gmail.com"
- p.depends = "python2.5, ussd-common (>=0.0.3), python-hildondesktop (>=0.1.0-1maemo2), hildon-desktop-python-loader (>=0.1.0-1maemo2), python-gtk2, python-gobject, python-hildon, python-cairo"
+ p.depends = "python2.5, ussd-common (>=0.0.4), python-hildondesktop (>=0.1.0-1maemo2), hildon-desktop-python-loader (>=0.1.0-1maemo2), python-gtk2, python-gobject, python-hildon, python-cairo"
p.section="user/desktop"
p.icon = "./ussd-widget.png"
p.arch="all" #should be all for python, any for all arch
# p.postinstall="""#!/bin/sh
#""" #Set here your post install script
- version = "0.1.0"
+ version = "0.1.1"
build = "0"
- changeloginformation = "Banner support."
+ changeloginformation = "USSD menu support."
dir_name = "src"
msgstr ""
"Project-Id-Version: 0.0.6\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-31 11:57+0300\n"
+"POT-Creation-Date: 2010-02-04 10:20+0300\n"
"PO-Revision-Date: 2010-01-29 17:51+0300\n"
"Last-Translator: Alexey Guseunov <kibergusBarkBarkgmail.com>\n"
"Language-Team: Russian\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: utf-8\n"
-#: ussd-widget.py:35 ussd-widget.py:289
+#: src/usr/lib/hildon-desktop/ussd-widget.py:35
+#: src/usr/lib/hildon-desktop/ussd-widget.py:289
msgid "Click to update"
msgstr "Обновить"
-#: ussd-widget.py:59
+#: src/usr/lib/hildon-desktop/ussd-widget.py:59
msgid "Couldn't read previous config"
msgstr "Не удается прочитать предыдущий конфигурационный файл"
-#: ussd-widget.py:120
+#: src/usr/lib/hildon-desktop/ussd-widget.py:120
#, python-format
msgid "Error reading config on line %(line)d. = or # expected."
msgstr ""
"Ошибка чтения конфигурационного файла на %(line)d строке. Ожидалось = или #."
-#: ussd-widget.py:135 ussd-widget.py:144 ussd-widget.py:161 ussd-widget.py:202
+#: src/usr/lib/hildon-desktop/ussd-widget.py:135
+#: src/usr/lib/hildon-desktop/ussd-widget.py:144
+#: src/usr/lib/hildon-desktop/ussd-widget.py:161
+#: src/usr/lib/hildon-desktop/ussd-widget.py:202
#, python-format
msgid "Error reading config on line %(line)d. Integer expected."
msgstr ""
"Ошибка чтения конфигурационного файла на %(line)d строке. Ожидалось целое "
"число."
-#: ussd-widget.py:172
+#: src/usr/lib/hildon-desktop/ussd-widget.py:172
#, python-format
msgid "Error reading config on line %(line)d. Pango font description expected."
msgstr ""
"Ошибка чтения конфигурационного файла на %(line)d строке. Ожидалось pango "
"описание шрифта."
-#: ussd-widget.py:179 ussd-widget.py:185
+#: src/usr/lib/hildon-desktop/ussd-widget.py:179
+#: src/usr/lib/hildon-desktop/ussd-widget.py:185
#, python-format
msgid "Error reading config on line %(line)d. Expected color definition."
-msgstr "Ошибка чтения конфигурационного файла на строке %(line)d. Ожидалось описание цвета."
+msgstr ""
+"Ошибка чтения конфигурационного файла на строке %(line)d. Ожидалось описание "
+"цвета."
-#: ussd-widget.py:199
+#: src/usr/lib/hildon-desktop/ussd-widget.py:199
#, python-format
msgid "Error reading config on line %(line)d. Unknown language code."
msgstr ""
"Ошибка чтения конфигурационного файла на %(line)d строке. Неизвестный код "
"языка."
-#: ussd-widget.py:205
+#: src/usr/lib/hildon-desktop/ussd-widget.py:205
#, python-format
msgid "Error reading config on line %(line)d. Unexpected variable: "
msgstr ""
"Ошибка чтения конфигурационного файла на %(line)d строке. Неизвестная "
"переменная: "
-#: ussd-widget.py:212 ussd-widget.py:217
+#: src/usr/lib/hildon-desktop/ussd-widget.py:212
+#: src/usr/lib/hildon-desktop/ussd-widget.py:217
msgid "Config error"
msgstr "Ошибка конфигурации"
-#: ussd-widget.py:218
+#: src/usr/lib/hildon-desktop/ussd-widget.py:218
msgid "IO error while reading config"
msgstr "Ошибка ввода/вывода при чтении конфигурационного файла"
-#: ussd-widget.py:307
+#: src/usr/lib/hildon-desktop/ussd-widget.py:307
msgid "serious problems in program logic"
msgstr "серьезная проблема в логике программы"
-#: ussd-widget.py:325
+#: src/usr/lib/hildon-desktop/ussd-widget.py:325
msgid "Processing"
msgstr "Обрабатываю"
-#: ussd-widget.py:330
+#: src/usr/lib/hildon-desktop/ussd-widget.py:330
msgid "No config"
msgstr "Нет конфигурации"
-#: ussd-widget.py:337
+#: src/usr/lib/hildon-desktop/ussd-widget.py:337
msgid "Error"
msgstr "Ошибка"
-#: ussd-widget.py:352
+#: src/usr/lib/hildon-desktop/ussd-widget.py:352
msgid "Regexp Error: "
msgstr "Ошибка в регулярном выражении: "
-#: ussd-widget.py:361
+#: src/usr/lib/hildon-desktop/ussd-widget.py:361
msgid "Couldn't exec banner parser:"
msgstr "Не удалось запустить обработчик для баннера:"
-#: ussd-widget.py:369
+#: src/usr/lib/hildon-desktop/ussd-widget.py:369
msgid "Couldn't exec widget parser:"
msgstr "Не удалось запустить обработчик для виджета:"
-#: ussd-widget.py:376
+#: src/usr/lib/hildon-desktop/ussd-widget.py:376
msgid "Couldn't exec chain:"
msgstr "Не удалось запустить следующее звено:"
-#: ussd-widget.py:406
+#: src/usr/lib/hildon-desktop/ussd-widget.py:406
msgid "OK"
msgstr "OK"
-#: ussd-widget.py:415
+#: src/usr/lib/hildon-desktop/ussd-widget.py:415
msgid "USSD widget"
msgstr "USSD виджет"
-#: ussd-widget.py:417
+#: src/usr/lib/hildon-desktop/ussd-widget.py:417
msgid "Save"
msgstr "Сохранить"
-#: ussd-widget.py:448
+#: src/usr/lib/hildon-desktop/ussd-widget.py:448
msgid "USSD reply language"
msgstr "Язык USSD ответа"
-#: ussd-widget.py:453
+#: src/usr/lib/hildon-desktop/ussd-widget.py:453
msgid "Enable banner. Parser:"
msgstr "Включить баннер. Обработчик:"
-#: ussd-widget.py:463
+#: src/usr/lib/hildon-desktop/ussd-widget.py:463
msgid "Execute query on start"
msgstr "Выполнять запрос при старте"
-#: ussd-widget.py:466
+#: src/usr/lib/hildon-desktop/ussd-widget.py:466
msgid "Font"
msgstr "Шрифт"
-#: ussd-widget.py:469
+#: src/usr/lib/hildon-desktop/ussd-widget.py:469
msgid "Background color"
msgstr "Цвет фона"
-#: ussd-widget.py:471
+#: src/usr/lib/hildon-desktop/ussd-widget.py:471
msgid "Text color"
msgstr "Цвет шрифта"
-#: ussd-widget.py:495
+#: src/usr/lib/hildon-desktop/ussd-widget.py:498
msgid "USSD number"
msgstr "USSD номер"
-#: ussd-widget.py:508
+#: src/usr/lib/hildon-desktop/ussd-widget.py:513
msgid "Name"
msgstr "Имя"
-#: ussd-widget.py:517
+#: src/usr/lib/hildon-desktop/ussd-widget.py:522
msgid "Parser for widget"
msgstr "Обработчик для виджета"
-#: ussd-widget.py:537
+#: src/usr/lib/hildon-desktop/ussd-widget.py:540
msgid "Chain"
msgstr "Следующее звено"
-#: ussd-widget.py:547
+#: src/usr/lib/hildon-desktop/ussd-widget.py:550
msgid "RegExp"
msgstr "Регулярное выражение"
-#: ussd-widget.py:557
+#: src/usr/lib/hildon-desktop/ussd-widget.py:560
msgid "Max. width"
msgstr "Макс. ширина"
-#: ussd-widget.py:559
+#: src/usr/lib/hildon-desktop/ussd-widget.py:562
msgid "symbols"
msgstr "символов"
-#: ussd-widget.py:569
+#: src/usr/lib/hildon-desktop/ussd-widget.py:572
msgid "Update every"
msgstr "Обновлять каждые"
-#: ussd-widget.py:571
+#: src/usr/lib/hildon-desktop/ussd-widget.py:574
msgid "minutes"
msgstr "минут"
-#: ussd-widget.py:581
+#: src/usr/lib/hildon-desktop/ussd-widget.py:584
msgid "Retry pattern"
msgstr "Шаблон повторных запросов"
-#: ussd-widget.py:601 ussd-widget.py:606 ussd-widget.py:611 ussd-widget.py:616
-#: ussd-widget.py:621
+#: src/usr/lib/hildon-desktop/ussd-widget.py:604
+#: src/usr/lib/hildon-desktop/ussd-widget.py:609
+#: src/usr/lib/hildon-desktop/ussd-widget.py:614
+#: src/usr/lib/hildon-desktop/ussd-widget.py:619
+#: src/usr/lib/hildon-desktop/ussd-widget.py:624
+#: src/usr/lib/hildon-desktop/ussd-widget.py:629
msgid "Format help"
msgstr "Справка по формату"
-#: ussd-widget.py:601
+#: src/usr/lib/hildon-desktop/ussd-widget.py:604
msgid ""
"Reply would be passed to specified utility, output of utility would be shown "
"to you on widget.\n"
"space delimits command line parameters of utility\n"
" Hint: use echo \"Your string %\" to prepend your string to reply."
msgstr ""
-"Ответ будет передан указанной утилите, а её вывод будет отображен на виджете.\n"
+"Ответ будет передан указанной утилите, а её вывод будет отображен на "
+"виджете.\n"
" Формат:\n"
"% будет заменен ответом\n"
"\\ отменяет особое значение следующего символа\n"
"\" и ' работают как обычно\n"
"пробелы разделяют аргументы командной строки утилиты\n"
-" Подсказка: используйте echo \"Ваша строка %\" чтобы поместить вашу строку перед ответом."
+" Подсказка: используйте echo \"Ваша строка %\" чтобы поместить вашу "
+"строку перед ответом."
-#: ussd-widget.py:606
+#: src/usr/lib/hildon-desktop/ussd-widget.py:609
msgid ""
"Reply would be passed to specified utility, output of utility would be shown "
"to you on banner.\n"
"space delimits command line parameters of utility\n"
" Hint: use echo \"Your string %\" to prepend your string to reply."
msgstr ""
-"Ответ будет передан указанной утилите, а её вывод будет отображен на баннере.\n"
+"Ответ будет передан указанной утилите, а её вывод будет отображен на "
+"баннере.\n"
" Формат:\n"
"% будет заменен ответом\n"
"\\ отменяет особое значение следующего символа\n"
"\" и ' работают как обычно\n"
-"пробелы разделяют аргументы командной строки утилиты"
-" Подсказка: используйте echo \"Ваша строка %\" чтобы поместить вашу строку перед ответом."
+"пробелы разделяют аргументы командной строки утилиты Подсказка: "
+"используйте echo \"Ваша строка %\" чтобы поместить вашу строку перед ответом."
-#: ussd-widget.py:611
+#: src/usr/lib/hildon-desktop/ussd-widget.py:614
msgid ""
"Reply would be passed to specified utility after parser utility. May be used "
"for logging, statistics etc.\n"
"\" и ' работают как обычно\n"
"пробелы разделяют аргументы командной строки утилиты"
-#: ussd-widget.py:616
+#: src/usr/lib/hildon-desktop/ussd-widget.py:619
msgid ""
"Standard python regexps. Use\n"
" (.+?[\\d\\,\\.]+)\n"
" (.+?[\\d\\,\\.]+)\n"
" чтобы удалить все после первого числа."
-#: ussd-widget.py:621
+#: src/usr/lib/hildon-desktop/ussd-widget.py:624
msgid ""
"Pauses between attemps (in seconds), delimited by -. For example 15-15-300 "
"means \"In case of failure wait 15 seconds, try again, on failure wait 15 "
"ждать еще 15 секунд и снова пробовать, в случае ошибки сделать последнюю "
"попытку еще через 5 минут\""
-#: ussd-widget.py:626
+#: src/usr/lib/hildon-desktop/ussd-widget.py:629
+msgid ""
+"USSD number. To perform USSD menu navigation divide queries vith spacebars. "
+"For xample '*100# 1' means 1st entry in *100# menu."
+msgstr ""
+"USSD номер. Чтобы переходить по пунктам USSD меню разделяйте запросы пробелами. "
+"Например, '*100# 1' означает 1ый пункт в меню *100#."
+
+#: src/usr/lib/hildon-desktop/ussd-widget.py:634
msgid "Regexp syntax error"
msgstr "Синтаксическая ошибка в регулярном выражении"
-#: ussd-widget.py:631
+#: src/usr/lib/hildon-desktop/ussd-widget.py:639
msgid "Incorrect USSD number"
msgstr "Неправильный USSD номер"
-#: ussd-widget.py:631
+#: src/usr/lib/hildon-desktop/ussd-widget.py:639
msgid "USSD number should contain only digits, +, * or #"
msgstr "USSD номер должен состоять только из цифр, +, * и #"
-#: ussd-widget.py:636
+#: src/usr/lib/hildon-desktop/ussd-widget.py:644
msgid "Incorrect retry pattern"
msgstr "Неправильный шаблон повторных запросов"
-#: ussd-widget.py:636
+#: src/usr/lib/hildon-desktop/ussd-widget.py:644
msgid "Retry pattern should contain only numbers, delimited by -"
msgstr "Шаблон повторных запросов должен состоять из чисер, разделенных -"
-#: ussd-widget.py:641
+#: src/usr/lib/hildon-desktop/ussd-widget.py:649
msgid "Choose background color"
msgstr "Выберите цвет фона"
-#: ussd-widget.py:648
+#: src/usr/lib/hildon-desktop/ussd-widget.py:656
msgid "Choose text color"
msgstr "Выберите цвет текста"
-#: ussd-widget.py:655
+#: src/usr/lib/hildon-desktop/ussd-widget.py:663
msgid "Choose a font"
msgstr "Выберите шрифт"
-
def call_external_script( self, ussd_code, language ):
self.cb_ready = 0
self.cb_reply = "";
- p = Popen(['/usr/bin/ussdquery.py', ussd_code, ussd_languages[language]], stdout=PIPE)
+ p = Popen(['/usr/bin/ussdquery.py', ussd_code, "-l", ussd_languages[language]], stdout=PIPE)
gobject.io_add_watch( p.stdout, gobject.IO_IN | gobject.IO_PRI | gobject.IO_HUP | gobject.IO_ERR , self.callback_ussd_data )
def ussd_renew(self, widget, event):
retryhelp = gtk.Button("?")
retryhelp.connect("clicked", self.on_show_retryhelp)
+
+ numberhelp = gtk.Button("?")
+ numberhelp.connect("clicked", self.on_show_number_help)
area = hildon.PannableArea()
self.vbox.add(area)
numberLabel = gtk.Label(_("USSD number"))
numberLabel.set_alignment(0,0)
numberLabel.set_size_request(100, -1)
+ numberhelp.set_size_request(1, -1)
self.ussdNumber.set_size_request(200, -1)
numberBox.add(numberLabel)
+ numberBox.add(numberhelp)
numberBox.add(self.ussdNumber)
vbox.add(numberBox)
vbox.add(self.parser)
b_parserBox = gtk.HBox()
-# parserLabel = gtk.Label(_("Parser"))
-# parserLabel.set_alignment(0,0)
self.show_box.set_size_request(200, -1)
bphelp.set_size_request(10, -1)
b_parserBox.add(self.show_box)
dialog.run()
dialog.destroy()
+ def on_show_number_help(self, widget):
+ dialog = pHelpDialog(_("Format help"), _("USSD number. To perform USSD menu navigation divide queries vith spacebars. For xample '*100# 1' means 1st entry in *100# menu."))
+ dialog.run()
+ dialog.destroy()
+
def on_error_regexp(self, error):
dialog = pHelpDialog(_("Regexp syntax error"), error )
dialog.run()
def check_number(number):
for s in number :
- if not (s in ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "+", "*", "#"]) :
+ if not (s in ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "+", "*", "#", " "]) :
return False
return True
if config[6]:
self.controller.ussd_renew(self, None)
+ self.label.modify_font(config[8])
self.controller.reset_timed_renew()
hildondesktop.HomePluginItem.do_show(self)