[WFX] tcPhonebook

Обсуждение только плагинов и утилит для Total Commander.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Maximus писал(а):Кажись, прояснилось :) (Благодаря теме на оффоруме и MVV лично. Хотя мог бы и тут носом ткнуть)
Я ж не все темы читаю. :)
Maximus писал(а):Это не мой диалог - это диалог ТС. Я только могу воспользоваться тем, что предоставляет его интерфейс. Сейчас ничего такого нет или я его в упор не вижу :)
При чтении описания функций первое внимание - возвращаемым значениям. :)
ProgressProc function help page писал(а):Total Commander returns 1 if the user wants to abort copying, and 0 if the operation can continue.
amzoom писал(а):а Cancel разве не должен не просто остановиться, но и удалить за собой то, что уже успел сделать? Это же именно Отмена, а не остановка.
Обычно Cancel удаляет только последний частично записанный файл, остальное оставляет. Но что тут считать последним файлом, затрудняюсь сказать.
amzoom писал(а):И ещё: прогрессбар при импорте многоконтактного файла теперь рисуется по делениям, как надо, но вот %-ов не выводится и общее кол-во контактов и сколько уже импортировано - не показывается: по-прежнему видно только "0/1".
Плагины файловых систем могут лишь устанавливать процент и имена файлов, тотал сам показывает вторую шкалу, общие число и размер выбранных файлов, которых в данном случае, похоже, 1. Передавать имена контактов вместо имен файлов при вызове функции прогресса по идее можно, но счётчик файлов всё равно будет показывать число выделенных элементов файловой системы.
Аватара пользователя
Maximus
Сообщения: 927
Зарегистрирован: Чт апр 07, 2005 10:51
Откуда: Украина, Кировоградская обл., г. Знаменка
Контактная информация:

Сообщение Maximus »

MVV писал(а):При чтении описания функций первое внимание - возвращаемым значениям.
Как-то она ускользнула из внимания, поскольку была очень короткой :)
amzoom писал(а):а Cancel разве не должен не просто остановиться, но и удалить за собой то, что уже успел сделать? Это же именно Отмена, а не остановка.
MVV писал(а):Обычно Cancel удаляет только последний частично записанный файл, остальное оставляет. Но что тут считать последним файлом, затрудняюсь сказать.
Тут поведение аналогичное обычной файловой системе. Копируется, к примеру, папка с неким количеством файлов. При нажатии Отмены копирование просто прекращается. А "именно Отмена", о которой было написано выше, уже больше похожа на Откат.
amzoom писал(а):И ещё: прогрессбар при импорте многоконтактного файла теперь рисуется по делениям, как надо, но вот %-ов не выводится и общее кол-во контактов и сколько уже импортировано - не показывается: по-прежнему видно только "0/1".
MVV писал(а):Плагины файловых систем могут лишь устанавливать процент и имена файлов, тотал сам показывает вторую шкалу, общие число и размер выбранных файлов, которых в данном случае, похоже, 1.
Именно так и обстоят дела :)
MVV писал(а):Передавать имена контактов вместо имен файлов при вызове функции прогресса по идее можно, но счётчик файлов всё равно будет показывать число выделенных элементов файловой системы.
Имена импортируемых контактов я отображаю исправно, но ТС действительно считает только количество исходных файлов, а количество импортированных отображает только в виде прогресс-бара.
zlll
Сообщения: 5
Зарегистрирован: Ср дек 01, 2010 12:09

Сообщение zlll »

Maximus
Приветствую, помоги пожалуйста с проблемой.
Есть у меня овер 500 контактов, при копировании их в плагин, у всех контактов телефоны оказались в поле "Другое" и при экспорте в сводке пусто. Т.е. при переносе контакта на сам телефон, номер телефона этого контакта не отображается. Чтобы всё было корректно приходится открывать контакт при помощи плагина, жать Редактировать контакт, переходить во вкладку Другое, копировать телефон, заходить во вкладку Сводка и вставлять номер туда. Можно ли как-нибудь автоматизировать сей процесс?
Аватара пользователя
Maximus
Сообщения: 927
Зарегистрирован: Чт апр 07, 2005 10:51
Откуда: Украина, Кировоградская обл., г. Знаменка
Контактная информация:

Сообщение Maximus »

zlll писал(а):Приветствую, помоги пожалуйста с проблемой.
Привет.
Причиной данного недоразумения является отсутствие ключевого слова "WORK" или "HOME" в параметрах атрибутов.
Автоматизировать эту проблему можно двумя способами:
1. Добавить (мне) опцию в настройки импорта плагина, а затем выполнить импорт заново. Но тут мне нужно будет немного поработать, а тебе - подождать. Но я что-то большого смысла в этой опции не вижу (особенно если учесть наличие нижеописанного универсального варианта).

2. Воспользоваться SQLiteStudio и регулярными выражениями:
а) Открыть базу данных tcPhonebook.db в SQLiteStudio
б) Открыть в ней таблицу PhoneBook
в) Перейти на вкладку "Данные"
г) Найти нужный столбец (Phone, PhoneMobile или любой другой вид контакта)
д) Выделить все ячейки этого столбца мышью (только не щёлкать по заголовку - это сортировка)
е) Копировать значения через контекстное меню
ё) Вставить значения в текстовый редактор, который поддерживает регулярные выражения (я для таких целей использую EmEditor)
ж) Выделить вставленный текст
з) Вызвать диалог поиска и замены (в EmEditor это Ctrl+H)
и) Найти (.*)\|(.*)\|(.*)
й) Заменить на \3\|\2\|\1 (если нужно поменять местами рабочий и другой) или на \1\|\3\|\2 (если нужно поменять местами личный и другой)
Примечание: Телефоны и другие контакты хранятся в формате рабочие|личные|другие
к) Копировать изменённый текст и вставить его обратно в SQLiteStudio постаравшись перед вставкой не сбросить выделение :)
л) Нажать в SQLiteStudio оранжевую галочку для подтверждения изменений
м) Всё

Если возникнут затруднения, бросай базу в личку - сделаю сам и пришлю обратно.
amzoom
Сообщения: 44
Зарегистрирован: Ср окт 07, 2009 18:49

Сообщение amzoom »

1. При переименовании импортированного контакта - создаётся дубликат существующего, но уже с новым именем.
2. Файл *.vcf, сохранённый в UTF-8 с BOM (Byte Order Mark) выдаёт ошибку при попытке импортирования.
3. Файл *.vcf, сохранённый в Win 1251 (ANSI - кириллица) при импорте страдает кракозябрами всего текстового содержимого.
4. При экспорте из вашего плагина контактов в единый *.vcf - версия VCARD прописывается 2.1 (хотелось бы 4.0 или хотя бы 3.0 или вообще иметь возможность выбора), но также присутствуют строки:

Код: Выделить всё

PRODID:-//Maximus's Solutions//NONSGML tcPhonebook//EN
но ведь свойство PRODID поддерживается только в vCard начиная с 3.0 версии, а с 2.1 он несовместим.
Из-за этого моя старенькая нокия (свой нормальный телефон я недавно проетерял) не смогла импортировать контакты из файла. Удалил эту строку у каждого из контактов и всё импортировалось.
5.1. Если адрес (а также, вероятно, и любые другие поля) содержит запятые - то они экранируются бэкслэшем: , > \,, но этот бэкслэш не должен быть виден пользователю, он только для программы-просмотрщика.
5.2. Соответственно, контакты, созданные с нуля в вашем плагине, если они содержат запятые в каких-то полях то при их экспорте в файлы они будут не экранированными и какая-нибудь другая программа или устройство, куда потом будут импортироваться эти файлы - может выдать ошибку/неправильно отработать/упасть/потерять данные/исказить данные.
6. Планируется ли поддержка свойства PHOTO и вообще работа с фото? Если да, то пожалуйста, приделайте оба варианта работы с фото (указание ссылки на картинку и использование base64 кода фотографии).
Аватара пользователя
Maximus
Сообщения: 927
Зарегистрирован: Чт апр 07, 2005 10:51
Откуда: Украина, Кировоградская обл., г. Знаменка
Контактная информация:

Сообщение Maximus »

amzoom писал(а):1. При переименовании импортированного контакта - создаётся дубликат существующего, но уже с новым именем.
Не удалось воспроизвести. Конкретизируйте обстоятельства.
amzoom писал(а):2. Файл *.vcf, сохранённый в UTF-8 с BOM (Byte Order Mark) выдаёт ошибку при попытке импортирования.
Подтверждаю. Поправлю.
amzoom писал(а):3. Файл *.vcf, сохранённый в Win 1251 (ANSI - кириллица) при импорте страдает кракозябрами всего текстового содержимого.
Вы же поставили принудительный UTF-8 в настройках - вот и результат.
amzoom писал(а):хотелось бы 4.0 или хотя бы 3.0 или вообще иметь возможность выбора
Если буду очень долго жить, то возможно :)
amzoom писал(а):4. При экспорте из вашего плагина контактов в единый *.vcf - версия VCARD прописывается 2.1 но также присутствуют строки:
...
но ведь свойство PRODID поддерживается только в vCard начиная с 3.0 версии, а с 2.1 он несовместим.
Использую эту строку не совсем по назначению, не думал, что её наличие может привести к столь печальным последствиям. Решу этот вопрос.
amzoom писал(а):5.1. Если адрес (а также, вероятно, и любые другие поля) содержит запятые - то они экранируются бэкслэшем: , > \,, но этот бэкслэш не должен быть виден пользователю, он только для программы-просмотрщика.
Не удалось воспроизвести. Ничего они не экранируются. Конкретизируйте обстоятельства.
amzoom писал(а):5.2. Соответственно, контакты, созданные с нуля в вашем плагине, если они содержат запятые в каких-то полях то при их экспорте в файлы они будут не экранированными и какая-нибудь другая программа или устройство, куда потом будут импортироваться эти файлы - может выдать ошибку/неправильно отработать/упасть/потерять данные/исказить данные.
А что не так с запятыми то? Это вполне валидные символы для атрибутов vCard. И почему это другая программа или устройство должно упасть от запятой?
amzoom писал(а):6. Планируется ли поддержка свойства PHOTO и вообще работа с фото? Если да, то пожалуйста, приделайте оба варианта работы с фото (указание ссылки на картинку и использование base64 кода фотографии).
Сейчас как раз в основном над PHOTO и веду работу. Уже реализован импорт и отображение JPEG-формата с base64.
А с указанием ссылки будет сложно. Сложность в том, что я с таким ещё не работал. Не говорю "нет", но займусь этим не раньше, чем реализую полноценный поиск.
amzoom
Сообщения: 44
Зарегистрирован: Ср окт 07, 2009 18:49

Сообщение amzoom »

Maximus писал(а):Не удалось воспроизвести. Конкретизируйте обстоятельства.
Просто пкм по контакту, rename, добавить к имени 1 в конец, enter и вуаля: теперь рядом с контакт.vcf будет и контакт1.vcf
Напомню: я использую x64 tcmd и ваш плагин.
Maximus писал(а):Вы же поставили принудительный UTF-8 в настройках - вот и результат.
А, точно. Претензию отзываю.
Maximus писал(а):Использую эту строку не совсем по назначению, не думал, что её наличие может привести к столь печальным последствиям. Решу этот вопрос.
Вообще, по назначению же. Просто пользователю эта информация всё равно не нужна (только файл утяжеляет), но вы, как автор, конечно, имеете право её всё равно принудительно вставлять.
Maximus писал(а):Не удалось воспроизвести. Ничего они не экранируются. Конкретизируйте обстоятельства.
...
А что не так с запятыми то? Это вполне валидные символы для атрибутов vCard. И почему это другая программа или устройство должно упасть от запятой?
У меня с android телефона файл импортировался и все запятые в строке "адрес" в *.vcf файле - экранированы.
По гуглению "commas in vcard" нашлось это:
https://tools.ietf.org/html/rfc6350 (и там же в коде ctrl+f по \, а также это):

Код: Выделить всё

Another question is whether all the escapes are used when a given syntax doesn't happen to include any comma delimiting. Yes, they are: colons, semicolons, and commas are escaped in all values.
и это: http://www.w3.org/2002/12/cal/vcard-notes.html
где даже видно использование не экранированной запятой как разделителя 2-ух групп.

Код: Выделить всё

CATEGORIES:Work,Test group
Maximus писал(а):Сейчас как раз в основном над PHOTO и веду работу. Уже реализован импорт и отображение JPEG-формата с base64.
А с указанием ссылки будет сложно. Сложность в том, что я с таким ещё не работал. Не говорю "нет", но займусь этим не раньше, чем реализую полноценный поиск.
Ок, жду с нетерпением.
Аватара пользователя
Maximus
Сообщения: 927
Зарегистрирован: Чт апр 07, 2005 10:51
Откуда: Украина, Кировоградская обл., г. Знаменка
Контактная информация:

Сообщение Maximus »

amzoom писал(а):Просто пкм по контакту, rename, добавить к имени 1 в конец, enter и вуаля: теперь рядом с контакт.vcf будет и контакт1.vcf
Напомню: я использую x64 tcmd и ваш плагин.
Сейчас нет возможности проверить на x64. Но проверю обязательно.
amzoom писал(а):Вообще, по назначению же. Просто пользователю эта информация всё равно не нужна (только файл утяжеляет), но вы, как автор, конечно, имеете право её всё равно принудительно вставлять.
Я имел в виду, что я использовал эту строку как признак того, что файл-контакт формировался моим плагином, а затем при импорте обрабатывал один атрибут по-своему.
Но сейчас есть способ избавить и от нестандартного атрибута и от этой, иногда мозолящей мне глаз, строки PRODID в экспортированном файле.
amzoom писал(а):У меня с android телефона файл импортировался и все запятые в строке "адрес" в *.vcf файле - экранированы.
Ну так это android виноват :) шутка, хотя и он тоже.
ОК. Допилю обработку escape-символов.
При импорте мне понятно как эту проблему решить. Но вот при экспорте из плагина что делать? Неужели тоже экранировать? А где гарантии, что другими программами и устройствами это будет воспринято правильно?
По сути запятые могут трактоваться, как специальные символы, только в той части, где указываются свойства атрибута - т.е. до символа двоеточия ':'. Так что вероятно правильным решением будет изменение алгоритма работы плагина только при импорте...
amzoom писал(а):Ок, жду с нетерпением.
По большому счёту, если есть желание, могу в понедельник выложить для тестирования версию с поддержкой импорта/экспорта и отображения PHOTO.

Кстати, заодно вопрос. Есть ли у кого контакты с PHOTO base64 в формате, отличном от JPEG?
amzoom
Сообщения: 44
Зарегистрирован: Ср окт 07, 2009 18:49

Сообщение amzoom »

Maximus писал(а):При импорте мне понятно как эту проблему решить. Но вот при экспорте из плагина что делать? Неужели тоже экранировать? А где гарантии, что другими программами и устройствами это будет воспринято правильно?
По сути запятые могут трактоваться, как специальные символы, только в той части, где указываются свойства атрибута - т.е. до символа двоеточия ':'. Так что вероятно правильным решением будет изменение алгоритма работы плагина только при импорте...
Вроде вот это прямое указание на то, что их надо эскапировать

Код: Выделить всё

Some properties may contain one or more values delimited by a COMMA character (U+002C). Therefore, a COMMA character in a value MUST be escaped with a BACKSLASH character (U+005C), even for properties that don't allow multiple instances (for consistency).
Maximus писал(а):По большому счёту, если есть желание, могу в понедельник выложить для тестирования версию с поддержкой импорта/экспорта и отображения PHOTO.
Выкладывайте, конечно.
Maximus писал(а):Кстати, заодно вопрос. Есть ли у кого контакты с PHOTO base64 в формате, отличном от JPEG?
Насколько я понял синтаксис из примера в википедии, то должно получиться так (контакт в vCard v3.0).
Аватара пользователя
Maximus
Сообщения: 927
Зарегистрирован: Чт апр 07, 2005 10:51
Откуда: Украина, Кировоградская обл., г. Знаменка
Контактная информация:

Сообщение Maximus »

amzoom писал(а):Вроде вот это прямое указание на то, что их надо эскапировать
Для версий 3 и 4 - да, безусловно. Но вот для 2.1, которая используется достаточно широко, я не смог найти подобного подтверждения.
Конечно можно всё выяснить экспериментальным путём, чем я наверное вскоре и займусь.
PHOTO;TYPE=JPEG;ENCODING=B:data:image/png
Интересная штука в картинке: с одной стороны TYPE=JPEG, а с другой data:image/png. Что бы это значило? ))

Добавлено спустя 2 минуты:
amzoom писал(а):Насколько я понял синтаксис из примера в википедии, то должно получиться так (контакт в vCard v3.0).
Это самопальный пример или откуда?
amzoom
Сообщения: 44
Зарегистрирован: Ср окт 07, 2009 18:49

Сообщение amzoom »

Maximus
да, это был "самопальный пример", возможно TYPE= стоило тоже сменить на PNG.
Аватара пользователя
Maximus
Сообщения: 927
Зарегистрирован: Чт апр 07, 2005 10:51
Откуда: Украина, Кировоградская обл., г. Знаменка
Контактная информация:

Сообщение Maximus »

amzoom
Самопальный я и сам могу :) Мне бы, во-первых, с какой-то программы или устройства, а во-вторых, хотелось бы узнать насколько это вообще распространенное явление - не JPEG.
amzoom
Сообщения: 44
Зарегистрирован: Ср окт 07, 2009 18:49

Сообщение amzoom »

Maximus
судя по http://en.wikipedia.org/wiki/VCard (ctrl+f "base64") base64 кодирование в vCard используется повсеместно для абсолютно разных форматов кодируемого: от текстовых PGP ключей и картинок любого формата до аудиофайлов разных форматов:
KEY:
2.1: KEY;PGP:http://example.com/key.pgp
2.1: KEY;PGP;ENCODING=BASE64:[base64-data]
3.0: KEY;TYPE=PGP:http://example.com/key.pgp
3.0: KEY;TYPE=PGP;ENCODING=B:[base64-data]
4.0: KEY;MEDIATYPE=application/pgp-keys:http://example.com/key.pgp
4.0: KEY:data:application/pgp-keys;base64,[base64-data]
LOGO:
2.1: LOGO;PNG:http://example.com/logo.png
2.1: LOGO;PNG;ENCODING=BASE64:[base64-data]
3.0: LOGO;TYPE=PNG:http://example.com/logo.png
3.0: PHOTO;TYPE=PNG;ENCODING=B:[base64-data]
4.0: LOGO;MEDIATYPE=image/png:http://example.com/logo.png
4.0: PHOTO:data:image/png;base64,[base64-data]
PHOTO:
2.1: PHOTO;JPEG:http://example.com/photo.jpg
2.1: PHOTO;JPEG;ENCODING=BASE64:[base64-data]
3.0: PHOTO;TYPE=JPEG:http://example.com/photo.jpg
3.0: PHOTO;TYPE=JPEG;ENCODING=B:[base64-data]
4.0: PHOTO;MEDIATYPE=image/jpeg:http://example.com/photo.jpg
4.0: PHOTO:data:image/jpeg;base64,[base64-data]
SOUND:
2.1: SOUND;OGG:http://example.com/sound.ogg
2.1: SOUND;OGG;ENCODING=BASE64:[base64-data]
3.0: SOUND;TYPE=OGG:http://example.com/sound.ogg
3.0: SOUND;TYPE=OGG;ENCODING=B:[base64-data]
4.0: SOUND;MEDIATYPE=audio/ogg:http://example.com/sound.ogg
4.0: SOUND:data:audio/ogg;base64,[base64-data]
Как я понял - vCard'у пофигу на формат того, что им кодировано, это уже проблемы устройства - умеет ли он работу с этим форматом или нет.

И да, на той же странице присутствуют ещё и такие примеры (без base64, но фото в не JPG формате:
vcard 2.1:

Код: Выделить всё

PHOTO;GIF:http://www.example.com/dir_photos/my_photo.gif
vCard 3.0:

Код: Выделить всё

PHOTO;VALUE=URL;TYPE=GIF:http://www.example.com/dir_photos/my_photo.gif
vCard 4.0:

Код: Выделить всё

PHOTO;MEDIATYPE=image/gif:http://www.example.com/dir_photos/my_photo.gif
Аватара пользователя
Maximus
Сообщения: 927
Зарегистрирован: Чт апр 07, 2005 10:51
Откуда: Украина, Кировоградская обл., г. Знаменка
Контактная информация:

Сообщение Maximus »

amzoom
С base64 всё понятно и проблем не будет.
PHOTO в виде ссылок на GIF мне уже попадались ранее, а вот именно как часть vCard-файла - ещё ни разу не было ничего кроме JPEG.
Аватара пользователя
Maximus
Сообщения: 927
Зарегистрирован: Чт апр 07, 2005 10:51
Откуда: Украина, Кировоградская обл., г. Знаменка
Контактная информация:

Сообщение Maximus »

amzoom писал(а):1. При переименовании импортированного контакта - создаётся дубликат существующего, но уже с новым именем.
Подтверждаю. Воспроизводится только на Release-версии x64. На x32 и Debug-версии x64 всё нормально. Потому проблему найти будет тяжело.
amzoom писал(а):Выкладывайте, конечно.
Как и обещал, выкладываю:
http://maximus.in.ua/files/temp-phb/wfx ... 960beta08/
Реализована поддержка импорта/экспорта и отображения атрибута PHOTO (изображение контакта, только формат JPEG).
Ответить