Копирование контактов с 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 VCARD и grep VCALENDAR. Правда, добавлять сотни файлов в KAddressBook, или иную программу, вручную не очень хочется. Но формат VCARD гуманен — он позволяет слить содержимое всех файлов в один, что тоже может сделать простой скрипт.

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

  1. FN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=D0=95=D0=BA=D0=B0=D1=82=D0=B5=
  2. =D1=80=D0=B8=D0=BD=D0=B0 =D0=93=D0=B5=D0=BD=D0=BD=D0=B0=D0=B4=D0=B8=D0=
  3. =B5=D0=B2=D0=BD=D0=B0
  4. N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:;=D0=95=D0=BA=D0=B0=D1=82=D0=B5=
  5. =D1=80=D0=B8=D0=BD=D0=B0 =D0=93=D0=B5=D0=BD=D0=BD=D0=B0=D0=B4=D0=B8=D0=
  6. =B5=D0=B2=D0=BD=D0=B0;;;

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

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

Гость (гость)

нда….это ппц

graker
Аватар пользователя graker

Да не, нормально.
Пара маленьких bash-скриптов и куча файлов разгребается автоматически и склеивается в один VCARD-файл, который прожуется любой адресной книгой.

А вообще это MS сложности создает тем, что не позволяет копировать PIM-данные в открытых форматах.

Сергей (гость)

Здарова, Ромик!
На твой сайт уже с яндекса переправляют. Молодца :))))
Одногруппник :)

graker
Аватар пользователя graker

Привет, Серега! С Гугля тоже переправляют :)

Отправить комментарий

CAPTCHA
Пройдите, пожалуйста, проверку. Она нужна, чтобы отличать людей от спам-роботов. А если не хотите проходить эту проверку регулярно — зарегистрируйтесь.
Image CAPTCHA
Введите цифры, изображенные на картинке (без пробелов).