Latest posts on WMDial topichttp://python.su/forum/topic/626/2007-03-31T22:34:09+03:00Альтернативные платформы :: Mobile Python :: WMDial
2007-03-31T22:34:09+03:00Guria4316Всем привет.<br/>Давно мечтал на своей нокии иметь поиск по контактам как в Windows Mobile. Т.е. при наборе номера одновременно производится поиск в контактах, причём как на предмет совпадения набираемого номера, так и в именах контактов. В именах поиск производится как на т9, не зависимо от текущего языка. На досугах накидал на телефоне скрипт, который это дело кое-как реализует.<br/>Прошу любить и жаловать:<br/><div class="code"><pre><span class="c"># -*- coding: utf-8 -*-</span>
<span class="kn">import</span> <span class="nn">appuifw</span> <span class="kn">as</span> <span class="nn">ui</span>
<span class="kn">import</span> <span class="nn">contacts</span>
<span class="kn">import</span> <span class="nn">e32</span>
<span class="kn">import</span> <span class="nn">key_codes</span> <span class="kn">as</span> <span class="nn">kc</span>
<span class="kn">import</span> <span class="nn">telephone</span> <span class="kn">as</span> <span class="nn">tel</span>
<span class="n">C</span><span class="o">=</span><span class="n">contacts</span><span class="o">.</span><span class="n">ContactsDb</span><span class="p">()</span>
<span class="n">fulllist</span><span class="o">=</span><span class="p">[(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="s">u'Number'</span><span class="p">,[</span><span class="s">u''</span><span class="p">])]</span><span class="o">+</span><span class="p">[(</span><span class="n">el</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">el</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">title</span><span class="p">,[</span><span class="n">el</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="n">f</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">el</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span> <span class="k">if</span> <span class="n">el</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="n">f</span><span class="p">]</span><span class="o">.</span><span class="n">schema</span><span class="p">[</span><span class="s">'phonenumberfield'</span><span class="p">]])</span> <span class="k">for</span> <span class="n">el</span> <span class="ow">in</span> <span class="n">C</span><span class="o">.</span><span class="n">items</span><span class="p">()]</span>
<span class="nb">list</span><span class="o">=</span><span class="p">[]</span><span class="o">+</span><span class="n">fulllist</span>
<span class="k">def</span> <span class="nf">u</span><span class="p">(</span><span class="n">s</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">unicode</span><span class="p">(</span><span class="n">s</span><span class="p">,</span><span class="s">'utf-8'</span><span class="p">)</span>
<span class="n">n</span><span class="o">=</span><span class="p">[[</span><span class="s">' '</span><span class="p">,],</span> <span class="p">[</span><span class="s">''</span><span class="p">,],[</span><span class="s">'a'</span><span class="p">,</span><span class="s">'b'</span><span class="p">,</span><span class="s">'c'</span><span class="p">,</span><span class="s">'а'</span><span class="p">,</span><span class="s">'б'</span><span class="p">,</span><span class="s">'в'</span><span class="p">,</span><span class="s">'г'</span><span class="p">,</span><span class="s">'A'</span><span class="p">,</span><span class="s">'B'</span><span class="p">,</span><span class="s">'C'</span><span class="p">,</span><span class="s">'А'</span><span class="p">,</span><span class="s">'Б'</span><span class="p">,</span><span class="s">'В'</span><span class="p">,</span><span class="s">'Г'</span><span class="p">,],[</span><span class="s">'d'</span><span class="p">,</span><span class="s">'e'</span><span class="p">,</span><span class="s">'f'</span><span class="p">,</span><span class="s">'д'</span><span class="p">,</span><span class="s">'е'</span><span class="p">,</span><span class="s">'ж'</span><span class="p">,</span><span class="s">'з'</span><span class="p">,</span><span class="s">'D'</span><span class="p">,</span><span class="s">'Е'</span><span class="p">,</span><span class="s">'F'</span><span class="p">,</span><span class="s">'Д'</span><span class="p">,</span><span class="s">'Е'</span><span class="p">,</span><span class="s">'Ж'</span><span class="p">,</span><span class="s">'З'</span><span class="p">,],[</span><span class="s">'g'</span><span class="p">,</span><span class="s">'h'</span><span class="p">,</span><span class="s">'i'</span><span class="p">,</span><span class="s">'и'</span><span class="p">,</span><span class="s">'й'</span><span class="p">,</span><span class="s">'к'</span><span class="p">,</span><span class="s">'л'</span><span class="p">,</span><span class="s">'G'</span><span class="p">,</span><span class="s">'H'</span><span class="p">,</span><span class="s">'I'</span><span class="p">,</span><span class="s">'И'</span><span class="p">,</span><span class="s">'Й'</span><span class="p">,</span><span class="s">'К'</span><span class="p">,</span><span class="s">'Л'</span><span class="p">,],[</span><span class="s">'j'</span><span class="p">,</span><span class="s">'k'</span><span class="p">,</span><span class="s">'l'</span><span class="p">,</span><span class="s">'м'</span><span class="p">,</span><span class="s">'н'</span><span class="p">,</span><span class="s">'о'</span><span class="p">,</span><span class="s">'п'</span><span class="p">,</span><span class="s">'J'</span><span class="p">,</span><span class="s">'K'</span><span class="p">,</span><span class="s">'L'</span><span class="p">,</span><span class="s">'М'</span><span class="p">,</span><span class="s">'Н'</span><span class="p">,</span><span class="s">'О'</span><span class="p">,</span><span class="s">'П'</span><span class="p">,],[</span><span class="s">'m'</span><span class="p">,</span><span class="s">'n'</span><span class="p">,</span><span class="s">'o'</span><span class="p">,</span><span class="s">'р'</span><span class="p">,</span><span class="s">'с'</span><span class="p">,</span><span class="s">'т'</span><span class="p">,</span><span class="s">'у'</span><span class="p">,</span><span class="s">'M'</span><span class="p">,</span><span class="s">'N'</span><span class="p">,</span><span class="s">'O'</span><span class="p">,</span><span class="s">'Р'</span><span class="p">,</span><span class="s">'С'</span><span class="p">,</span><span class="s">'Т'</span><span class="p">,</span><span class="s">'У'</span><span class="p">,],[</span><span class="s">'p'</span><span class="p">,</span><span class="s">'q'</span><span class="p">,</span><span class="s">'r'</span><span class="p">,</span><span class="s">'s'</span><span class="p">,</span><span class="s">'ф'</span><span class="p">,</span><span class="s">'х'</span><span class="p">,</span><span class="s">'ц'</span><span class="p">,</span><span class="s">'ч'</span><span class="p">,</span><span class="s">'P'</span><span class="p">,</span><span class="s">'Q'</span><span class="p">,</span><span class="s">'R'</span><span class="p">,</span><span class="s">'S'</span><span class="p">,</span><span class="s">'p'</span><span class="p">,</span><span class="s">'q'</span><span class="p">,</span><span class="s">'r'</span><span class="p">,</span><span class="s">'s'</span><span class="p">,],[</span><span class="s">'t'</span><span class="p">,</span><span class="s">'u'</span><span class="p">,</span><span class="s">'v'</span><span class="p">,</span><span class="s">'ш'</span><span class="p">,</span><span class="s">'щ'</span><span class="p">,</span><span class="s">'ъ'</span><span class="p">,</span><span class="s">'ы'</span><span class="p">,</span><span class="s">'T'</span><span class="p">,</span><span class="s">'U'</span><span class="p">,</span><span class="s">'V'</span><span class="p">,</span><span class="s">'Ш'</span><span class="p">,</span><span class="s">'Щ'</span><span class="p">,</span><span class="s">'Ъ'</span><span class="p">,</span><span class="s">'Ы'</span><span class="p">,],[</span><span class="s">'w'</span><span class="p">,</span><span class="s">'x'</span><span class="p">,</span><span class="s">'y'</span><span class="p">,</span><span class="s">'z'</span><span class="p">,</span><span class="s">'ь'</span><span class="p">,</span><span class="s">'э'</span><span class="p">,</span><span class="s">'ю'</span><span class="p">,</span><span class="s">'я'</span><span class="p">,</span><span class="s">'W'</span><span class="p">,</span><span class="s">'X'</span><span class="p">,</span><span class="s">'Y'</span><span class="p">,</span><span class="s">'Z'</span><span class="p">,</span><span class="s">'Ь'</span><span class="p">,</span><span class="s">'Э'</span><span class="p">,</span><span class="s">'Ю'</span><span class="p">,</span><span class="s">'Я'</span><span class="p">,]]</span>
<span class="n">n</span><span class="o">=</span><span class="p">[[</span><span class="n">u</span><span class="p">(</span><span class="n">j</span><span class="p">)</span> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">i</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">n</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">show</span><span class="p">():</span>
<span class="n">ui</span><span class="o">.</span><span class="n">note</span><span class="p">(</span><span class="nb">unicode</span><span class="p">(</span><span class="nb">repr</span><span class="p">(</span><span class="nb">list</span><span class="p">[</span><span class="n">lb</span><span class="o">.</span><span class="n">current</span><span class="p">()])))</span>
<span class="k">def</span> <span class="nf">call</span><span class="p">():</span>
<span class="n">phones</span><span class="o">=</span><span class="nb">list</span><span class="p">[</span><span class="n">lb</span><span class="o">.</span><span class="n">current</span><span class="p">()][</span><span class="mi">2</span><span class="p">]</span>
<span class="n">name</span><span class="o">=</span><span class="nb">list</span><span class="p">[</span><span class="n">lb</span><span class="o">.</span><span class="n">current</span><span class="p">()][</span><span class="mi">1</span><span class="p">]</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">phones</span><span class="p">:</span>
<span class="n">ui</span><span class="o">.</span><span class="n">note</span><span class="p">(</span><span class="s">u'No number'</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">phones</span><span class="p">)</span><span class="o">==</span><span class="mi">1</span><span class="p">:</span>
<span class="n">ind</span><span class="o">=</span><span class="mi">0</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">ind</span><span class="o">=</span><span class="n">ui</span><span class="o">.</span><span class="n">popup_menu</span><span class="p">(</span><span class="n">phones</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
<span class="k">if</span> <span class="n">ind</span><span class="o">!=</span><span class="bp">None</span><span class="p">:</span>
<span class="n">tel</span><span class="o">.</span><span class="n">dial</span><span class="p">(</span><span class="n">phones</span><span class="p">[</span><span class="n">ind</span><span class="p">])</span>
<span class="c">#global number</span>
<span class="n">number</span><span class="o">=</span><span class="s">u''</span>
<span class="k">def</span> <span class="nf">Key1</span><span class="p">():</span>
<span class="k">global</span> <span class="n">number</span>
<span class="n">number</span><span class="o">+=</span><span class="s">u'1'</span>
<span class="n">update</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">Key2</span><span class="p">():</span>
<span class="k">global</span> <span class="n">number</span>
<span class="n">number</span><span class="o">+=</span><span class="s">u'2'</span>
<span class="n">update</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">Key3</span><span class="p">():</span>
<span class="k">global</span> <span class="n">number</span>
<span class="n">number</span><span class="o">+=</span><span class="s">u'3'</span>
<span class="n">update</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">Key4</span><span class="p">():</span>
<span class="k">global</span> <span class="n">number</span>
<span class="n">number</span><span class="o">+=</span><span class="s">u'4'</span>
<span class="n">update</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">Key5</span><span class="p">():</span>
<span class="k">global</span> <span class="n">number</span>
<span class="n">number</span><span class="o">+=</span><span class="s">u'5'</span>
<span class="n">update</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">Key6</span><span class="p">():</span>
<span class="k">global</span> <span class="n">number</span>
<span class="n">number</span><span class="o">+=</span><span class="s">u'6'</span>
<span class="n">update</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">Key7</span><span class="p">():</span>
<span class="k">global</span> <span class="n">number</span>
<span class="n">number</span><span class="o">+=</span><span class="s">u'7'</span>
<span class="n">update</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">Key8</span><span class="p">():</span>
<span class="k">global</span> <span class="n">number</span>
<span class="n">number</span><span class="o">+=</span><span class="s">u'8'</span>
<span class="n">update</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">Key9</span><span class="p">():</span>
<span class="k">global</span> <span class="n">number</span>
<span class="n">number</span><span class="o">+=</span><span class="s">u'9'</span>
<span class="n">update</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">Key0</span><span class="p">():</span>
<span class="k">global</span> <span class="n">number</span>
<span class="n">number</span><span class="o">+=</span><span class="s">u'0'</span>
<span class="n">update</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">KeyC</span><span class="p">():</span>
<span class="k">global</span> <span class="n">number</span>
<span class="n">number</span><span class="o">=</span><span class="n">number</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="n">update</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">clear</span><span class="p">():</span>
<span class="k">global</span> <span class="n">number</span>
<span class="n">number</span><span class="o">=</span><span class="s">u''</span>
<span class="n">update</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">num</span><span class="p">(</span><span class="n">char</span><span class="p">):</span>
<span class="k">global</span> <span class="n">n</span>
<span class="n">i</span><span class="o">=</span><span class="mi">0</span>
<span class="k">for</span> <span class="n">chars</span> <span class="ow">in</span> <span class="n">n</span><span class="p">:</span>
<span class="k">if</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">chars</span><span class="p">:</span>
<span class="k">return</span> <span class="n">u</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">))</span>
<span class="n">i</span><span class="o">+=</span><span class="mi">1</span>
<span class="k">return</span> <span class="n">char</span>
<span class="k">def</span> <span class="nf">sort</span><span class="p">(</span><span class="n">title</span><span class="p">,</span> <span class="n">numbers</span><span class="p">):</span>
<span class="k">global</span> <span class="n">number</span>
<span class="n">numtitle</span><span class="o">=</span><span class="s">u''</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">numbers</span><span class="p">:</span>
<span class="k">return</span> <span class="mi">0</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">title</span><span class="p">:</span>
<span class="n">numtitle</span><span class="o">+=</span><span class="n">num</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
<span class="c">#ui.note(numtitle)</span>
<span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">numbers</span><span class="o">+</span><span class="p">[</span><span class="n">numtitle</span><span class="p">,]:</span>
<span class="k">if</span> <span class="n">n</span><span class="p">[:</span><span class="mi">2</span><span class="p">]</span><span class="o">==</span><span class="s">u'+7'</span><span class="p">:</span>
<span class="n">n</span><span class="o">=</span><span class="s">u'8'</span><span class="o">+</span><span class="n">n</span><span class="p">[</span><span class="mi">2</span><span class="p">:]</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">n</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">number</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="n">n</span><span class="p">:</span>
<span class="k">return</span> <span class="mi">1</span>
<span class="k">except</span><span class="p">:</span>
<span class="k">pass</span>
<span class="k">return</span> <span class="mi">0</span>
<span class="k">def</span> <span class="nf">update</span><span class="p">():</span>
<span class="k">global</span> <span class="nb">list</span>
<span class="nb">list</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">2</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span><span class="o">=</span><span class="n">number</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">number</span><span class="p">:</span>
<span class="nb">list</span><span class="o">=</span><span class="p">[</span><span class="n">el</span> <span class="k">for</span> <span class="n">el</span> <span class="ow">in</span> <span class="n">fulllist</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="nb">list</span><span class="o">=</span><span class="p">[</span><span class="n">el</span> <span class="k">for</span> <span class="n">el</span> <span class="ow">in</span> <span class="n">fulllist</span> <span class="k">if</span> <span class="n">sort</span><span class="p">(</span><span class="n">el</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span><span class="n">el</span><span class="p">[</span><span class="mi">2</span><span class="p">])]</span>
<span class="n">titles</span><span class="o">=</span><span class="p">[</span><span class="n">el</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">for</span> <span class="n">el</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">]</span>
<span class="n">titles</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">=</span><span class="n">number</span>
<span class="n">lb</span><span class="o">.</span><span class="n">set_list</span><span class="p">(</span><span class="n">titles</span><span class="p">)</span>
<span class="n">titles</span><span class="o">=</span><span class="p">[</span><span class="n">el</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">for</span> <span class="n">el</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">]</span>
<span class="n">titles</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">=</span><span class="s">u''</span>
<span class="n">lb</span><span class="o">=</span><span class="n">ui</span><span class="o">.</span><span class="n">Listbox</span><span class="p">(</span><span class="n">titles</span><span class="p">,</span> <span class="n">show</span><span class="p">)</span>
<span class="n">lb</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span><span class="n">kc</span><span class="o">.</span><span class="n">EKey1</span><span class="p">,</span><span class="n">Key1</span><span class="p">)</span>
<span class="n">lb</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span><span class="n">kc</span><span class="o">.</span><span class="n">EKey2</span><span class="p">,</span><span class="n">Key2</span><span class="p">)</span>
<span class="n">lb</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span><span class="n">kc</span><span class="o">.</span><span class="n">EKey3</span><span class="p">,</span><span class="n">Key3</span><span class="p">)</span>
<span class="n">lb</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span><span class="n">kc</span><span class="o">.</span><span class="n">EKey4</span><span class="p">,</span><span class="n">Key4</span><span class="p">)</span>
<span class="n">lb</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span><span class="n">kc</span><span class="o">.</span><span class="n">EKey5</span><span class="p">,</span><span class="n">Key5</span><span class="p">)</span>
<span class="n">lb</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span><span class="n">kc</span><span class="o">.</span><span class="n">EKey6</span><span class="p">,</span><span class="n">Key6</span><span class="p">)</span>
<span class="n">lb</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span><span class="n">kc</span><span class="o">.</span><span class="n">EKey7</span><span class="p">,</span><span class="n">Key7</span><span class="p">)</span>
<span class="n">lb</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span><span class="n">kc</span><span class="o">.</span><span class="n">EKey8</span><span class="p">,</span><span class="n">Key8</span><span class="p">)</span>
<span class="n">lb</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span><span class="n">kc</span><span class="o">.</span><span class="n">EKey9</span><span class="p">,</span><span class="n">Key9</span><span class="p">)</span>
<span class="n">lb</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span><span class="n">kc</span><span class="o">.</span><span class="n">EKey0</span><span class="p">,</span><span class="n">Key0</span><span class="p">)</span>
<span class="n">lb</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span><span class="n">kc</span><span class="o">.</span><span class="n">EKeyBackspace</span><span class="p">,</span><span class="n">KeyC</span><span class="p">)</span>
<span class="n">lb</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span><span class="n">kc</span><span class="o">.</span><span class="n">EKeyYes</span><span class="p">,</span><span class="n">call</span><span class="p">)</span>
<span class="n">lb</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span><span class="n">kc</span><span class="o">.</span><span class="n">EKeyNo</span><span class="p">,</span><span class="n">clear</span><span class="p">)</span>
<span class="c">#ui.app.screen='large'</span>
<span class="n">ui</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">title</span> <span class="o">=</span> <span class="s">u"Dialer"</span>
<span class="n">ui</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">body</span><span class="o">=</span><span class="n">lb</span>
<span class="n">running</span><span class="o">=</span><span class="mi">1</span>
<span class="k">def</span> <span class="nf">quit</span><span class="p">():</span>
<span class="k">global</span> <span class="n">running</span>
<span class="n">running</span><span class="o">=</span><span class="mi">0</span>
<span class="n">ui</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">exit_key_handler</span><span class="o">=</span><span class="n">quit</span>
<span class="k">while</span> <span class="n">running</span><span class="p">:</span>
<span class="n">e32</span><span class="o">.</span><span class="n">ao_sleep</span><span class="p">(</span><span class="mf">0.01</span><span class="p">)</span>
</pre></div>За код и отсутствие комментариев прошу сильно не пинать ибо написано целиком и полностью на телефоне(как и этот пост).<br/>Это только тестовая версия, приложение будет полностью переписано.<br/> Жду критики, пожеланий, комментариев и другого вида фидбек.