Копирование контактов с Windows Mobile под Linux

Когда-то писал о том, как здорово организован в Windows Mobile 6.1 экспорт списка контактов. И вот, пару дней назад руки дошли, наконец, до попытки его экспорта под Linux.

Первым делом установил SynCE, позволяющий наладить связь с телефонами на Windows Mobile. В openSUSE установку можно осуществить из репозитория. Поставил наборчик для KDE4 и запустил synce-kpm. Заработало прямо сразу. Иконка, подозрительно напоминающая ActiveSync, появилась в трее, а при подключении телефона через USB - позеленела и радостно сообщила, что подключен Toshiba g810. В окошке synce-kpm появилась сопутствующая информация: имя и фамилия владельца, список установленного софта, уровень заряда, свободное место на флешке и всякое такое. Можно даже установить прямо оттуда софт из CAB-файлов (я не пробовал). Симпатичная программка.

Для извлечения же данных из телефона необходим OpenSync. Он тоже легко ставится из репозитория - zypper se opensync показывает доступные пакеты. В принципе, можно поставить впрок их все, но важно отметить, что нужно ставить плагин libonepsync-synce-plugin, если в телефоне Windows Mobile 5 и выше, и libonepsync-synce-plugin-legacy в противном случае. Пользователей openSUSE тут, кстати, поджидает сюрприз баг. В репозитории 11.2 находится нерабочая версия libopensync-plugin-python-module (подробности). Но эта проблема легко решается удалением плохого модуля и установкой хорошего - из репозитория openSUSE Factory.

Дальше по инструкции настроил группу синхронизации. Плагина для синхронизации данных телефона с программами KDE4-PIM пока нет, да и мне не очень надо. Мне хотелось просто вынуть из телефона список контактов, поэтому выбрал плагин file-sync - чтобы получить контакты в виде файлов. Группу синхронизации можно создать как из консоли, так и из программки msynctool-gui. Синхронизацию же лучше проводить из консоли командой msynctool --sync ИМЯГРУППЫ - гораздо информативнее и сразу понятно, когда она закончилась.

Когда синхронизация (то есть перекачивание контактов и записей календаря) закончилась, я отправился в заданную директорию смотреть, что же она мне принесла. А принесла она мне вот что:

Прекрасно, 313 файлов с загадочными названиями. Но иконки файлов подсказывают, как видно на рисунке, что это не просто файлы, а файлы календаря и контактов. Действительно, заглянув внутрь любым текстовым редактором можно увидеть волшебные надписи VCARD и VCALENDAR.То есть задача-минимум решена — я получил список контактов в открытом формате.

Отделить одно от другого не составит труда — достаточно написать скрипт, сортирующий файлы по результатам grep VCALENDAR и grep VCARD. Правда, добавлять сотни файлов в KAddressBook, или иную программу, вручную не очень хочется. Но формат VCARD гуманен — он позволяет слить содержимое всех файлов в один, что тоже может сделать простой скрипт.

Более серьезная (но тоже решаемая) проблема вскрылась, собственно, при попытке добавить контакт в KAddressBook. Оказалось, что человеческое имя «Иван Сигизмундович Квазитараканов» будет урезано и попадет в программу как «Иван». Что неудобно: мало ли, сколько у меня таких иванов в записной книжке. Поначалу показалось, что сделать ничего нельзя и пора проклинать испортившую записи Винду, но внимательный просмотр содержимого записи показал следующее:

FN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=D0=95=D0=BA=D0=B0=D1=82=D0=B5=
=D1=80=D0=B8=D0=BD=D0=B0 =D0=93=D0=B5=D0=BD=D0=BD=D0=B0=D0=B4=D0=B8=D0=
=B5=D0=B2=D0=BD=D0=B0
N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:;=D0=95=D0=BA=D0=B0=D1=82=D0=B5=
=D1=80=D0=B8=D0=BD=D0=B0 =D0=93=D0=B5=D0=BD=D0=BD=D0=B0=D0=B4=D0=B8=D0=
=B5=D0=B2=D0=BD=D0=B0;;;

Как мы видим, содержимое полей First Name и Name (которые в данном случае равны) почему-то разбито на несколько строк с повторением знака равенства в местах переноса. Если же удалить разрывы строк и повторные "=" — имя контакта восстанавливает целостность и отлично воспринимается адресной книгой. В данном случае не столь важно, виновата в этом мобильная винда, криво выдающая данные, или же программа KAddressBook, неспособная интерпретировать такого рода переносы. Важно, что эту проблему тоже можно решить небольшим скриптом (заменяющим =\n= на =).

Резюме: я получил кучу файлов, которая нуждается в сортировке, коррекции и склеивании. Но главная задача — изъятие своих законных данных у капиталистической Винды — решена.

Комментарии