[WFX] tcPhonebook

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

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

Аватара пользователя
Rodny
Сообщения: 949
Зарегистрирован: Ср янв 24, 2007 00:59
Откуда: Могилёв, Беларусь

Сообщение Rodny »

К разговору об имени файла контакта.

Есть телефонная книга, долгие годы переносимая с телефона на телефон. В силу исторических ограничений контакты записаны в виде "ИВАНОВ АЛ-ДР ПЕТРО". То есть заглавными буквами и с ограничением по длине.

Я импортировал из vcf в плагин и начал расписывать имена/отчества, менять регистр через ИГП, расчитывая, что мои исправления попадут в свойства контакта.
Но я ошибался. В файле "Иванов Александр Петрович.vcf" имя осталось прежним.
Перспектива зайти руками в свойства каждого файла и скопировать имя файла в имя контакта не очень радует, файлов более 300.
В диалоге смены атрибутов обнаружились поля плагина, но в fs.Имя нельзя использовать данные из контентных плагинов.

Вопрос: как (и можно ли средствами сабжа) мне всё это привести к нормальному виду?

Добавлено
А, и ещё багрепорт: при импорте нужно что-то делать с недопустимыми символами, сейчас такие контакты не импортируются, например, "Вокзал ж/д"

Добавлено ещё
Хм, дочитал до 10 страницы и увидел, что это было сделано. Однако, вот этот контакт у меня при импорте потерялся:
[cut]

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

BEGIN:VCARD
VERSION:2.1
N;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:;=D0=92=D0=BE=D0=BA=D0=B7=D0=B0=D0=BB =D0=96/=D0=94
TEL;WORK;VOICE:105
TEL;WORK;VOICE:+375222392128
TEL;WORK;VOICE:+375222393518
CATEGORIES;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:=D0=A1=D0=BB=D1=83=D0=B6=D0=B1=D1=8B
END:VCARD
[/cut]
amzoom
Сообщения: 44
Зарегистрирован: Ср окт 07, 2009 18:49

Сообщение amzoom »

Rodny писал(а):Вопрос: как (и можно ли средствами сабжа) мне всё это привести к нормальному виду?
Средствами сабжа это можно сделать только вручную.
Правильно это сделать - надо каким-нибудь скриптом (.js/.bat/.ahk/etc.).

Замечу лишь, что
Я импортировал из vcf в плагин и начал расписывать имена/отчества, менять регистр через ИГП, расчитывая, что мои исправления попадут в свойства контакта.
стоило всё-таки после первого "исправленного" контакта зайти в его свойства и проверить влияет ли имя файла на свойства контакта. Хотя и само подобное предположение - мягко говоря, дико.
Аватара пользователя
Rodny
Сообщения: 949
Зарегистрирован: Ср янв 24, 2007 00:59
Откуда: Могилёв, Беларусь

Сообщение Rodny »

Я и проверил, где-то после десятка исправлений.
А предположение вполне себе логичное. Если можно формировать имя файла из полного имени контакта, то почему бы и не существовать обратной возможности.
Что ж, если нельзя плагином - будем скриптовать на досуге.
Хотя думаю, что проще будет залезть прямо в базу и там заменить.

Добавлено спустя 2 часа 36 минут:

В общем, если вдруг найдётся ещё любитель нетрадиционного использования плагина. 8)
Требуется что-нибудь для редактирования базы, у меня это дополнение SQLite Manager к Firefox.

1. Приводим имена файлов к нужному виду в TC.
2. Открываем в SQL-редакторе файл базы tcPhonebook.db
3. Выполняем последовательно три запроса
[cut]

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

CREATE TABLE PhoneBook2(ID INTEGER PRIMARY KEY AUTOINCREMENT,StructureID INTEGER,Nickname TEXT,Post TEXT,Department TEXT,Company TEXT,Suffix TEXT,Phone TEXT,PhoneMobile TEXT,PhoneFax TEXT,Email TEXT,WebPage TEXT,Country TEXT,Region TEXT,City TEXT,Address TEXT,PostalCode TEXT,Note TEXT,BirthDay REAL,FirstName TEXT,MiddleName TEXT,LastName TEXT,Prefix TEXT,StrByFullName INTEGER)

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

INSERT INTO PhoneBook2 (ID,StructureID, Nickname, Post, Department, Company,Suffix,Phone,PhoneMobile,PhoneFax,Email,WebPage,Country,Region,City,Address,PostalCode,Note,BirthDay,FirstName,MiddleName,LastName,Prefix,StrByFullName)
SELECT
PhoneBook.ID,PhoneBook.StructureID, PhoneBook.Nickname, PhoneBook.Post, PhoneBook.Department, PhoneBook.Company,PhoneBook.Suffix,PhoneBook.Phone,PhoneBook.PhoneMobile,PhoneBook.PhoneFax,PhoneBook.Email,PhoneBook.WebPage,PhoneBook.Country,PhoneBook.Region,PhoneBook.City,PhoneBook.Address,PhoneBook.PostalCode,PhoneBook.Note,PhoneBook.BirthDay,Structure.Name,PhoneBook.MiddleName,PhoneBook.LastName,PhoneBook.Prefix,PhoneBook.StrByFullName
FROM
PhoneBook LEFT JOIN Structure ON PhoneBook.ID = Structure.ID;

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

DROP TABLE PhoneBook;
ALTER TABLE PhoneBook2 RENAME TO PhoneBook;
[/cut]
4. PROFIT!

Добавлено спустя 17 минут:

А если бы я дочитал до конца 14-ю страницу форума, то не пытался бы два часа разобраться в sql-запросах, а скачал рекомендованную SQLiteStudio и сделал то же самое методом копи-паст за 5 минут :lol:
Аватара пользователя
Maximus
Сообщения: 927
Зарегистрирован: Чт апр 07, 2005 10:51
Откуда: Украина, Кировоградская обл., г. Знаменка
Контактная информация:

Сообщение Maximus »

amzoom писал(а):Жму "Yes" и получаю крэш tcmdx64 v8.50.
Это пофикшено (прошу подтвердить):
http://maximus.in.ua/files/temp-phb/wfx ... 960beta01/
amzoom писал(а):ок, предположим я и правда первый, кто столкнулся с этими багами.
Кстати, баг не проявлял себя на x32
amzoom писал(а):Прежде всего, прошу вас ознакомиться с этой и этой ссылками и добавить поддержку каждого из свойств.
Не всё сразу. По наличию свободного времени.
Сейчас в работе было добавление PHOTO, но пришлось прерваться :)
amzoom писал(а): Что такое виртуальные папки?
cm_OpenDesktop, cm_OpenPrinters и т.п.
amzoom писал(а):Да что уж там стандартные и расширенные свойства... любое содержимое файла не должно вызывать падения программы.
Это бесспорно истина.

Добавлено спустя 8 минут:
Rodny писал(а):Однако, вот этот контакт у меня при импорте потерялся
У меня без проблем импортировался как "Вокзал Ж_Д". Возможно нужно пробовать весь файл контактов целиком. Если что - жду его в личку или на е-почту.
amzoom
Сообщения: 44
Зарегистрирован: Ср окт 07, 2009 18:49

Сообщение amzoom »

Maximus писал(а):
amzoom писал(а):Жму "Yes" и получаю крэш tcmdx64 v8.50.
Это пофикшено (прошу подтвердить):
http://maximus.in.ua/files/temp-phb/wfx ... 960beta01/
VERIFIED FIXED
Maximus писал(а):Кстати, баг не проявлял себя на x32
Об этом я и не подумал. Я смотрю в сообществе ТС вообще беда с х64.
Maximus писал(а):Не всё сразу. По наличию свободного времени.
Само собой разумеется.


Импорт в этот раз прошёл успешно, только странно имена у файлов контактов импортировались: 4 шт с нормальной кириллицей, а остальные вот такой кракозябрицей: Р РѕРјР°

Добавлено спустя 5 минут:

И да, заметка по поводу прогресс бара при импортировании: его бы можно улучшить.
Сейчас он считает кол-во импортируемых файлов и в зависимости от завершения импорта какого-то кол-ва этих файлов - рисует %-ты выполнения операции.
И если импортируется 100 контактов из 1 файла, то прогресс бар будет иметь не 100 делений, а ровно 2: 0% и 100%.
Было бы хорошо при импорте делать подсчёт кол-ва контактов изо всех импортируемых файлов и рисовать %-ы от этого числа.
Кол-во контактов можно подсчитать по кол-ву пар BEGIN:VCARD и END:VCARD.
Аватара пользователя
Maximus
Сообщения: 927
Зарегистрирован: Чт апр 07, 2005 10:51
Откуда: Украина, Кировоградская обл., г. Знаменка
Контактная информация:

Сообщение Maximus »

amzoom писал(а):Импорт в этот раз прошёл успешно, только странно имена у файлов контактов импортировались: 4 шт с нормальной кириллицей, а остальные вот такой кракозябрицей: Р РѕРјР°
Поставь в настройках импорта принудительный UTF-8.
amzoom писал(а):И да, заметка по поводу прогресс бара при импортировании: его бы можно улучшить.
Я знаю :) Но там не всё так просто. Прогресс-баром сейчас управляет ТС. В интерфейсе плагинов есть функция ProgressProc, посмотрю может ли она помочь с этой бедой.
amzoom
Сообщения: 44
Зарегистрирован: Ср окт 07, 2009 18:49

Сообщение amzoom »

Bug
В процессе импорта клик по кнопкам Pause/Cancel не работает: задача продолжает выполняться не смотря ни на что.

И да, форсирование UTF-8 помогло, спасибо. Только всё равно странно: файл-то один, почему часть контактов распозналась как UTF-8, а остальные - нет? Они ж все в одной кодировке в одном файле сохранены.
Аватара пользователя
Maximus
Сообщения: 927
Зарегистрирован: Чт апр 07, 2005 10:51
Откуда: Украина, Кировоградская обл., г. Знаменка
Контактная информация:

Сообщение Maximus »

amzoom писал(а):В процессе импорта клик по кнопкам Pause/Cancel не работает: задача продолжает выполняться не смотря ни на что.
Это вопрос не ко мне, а к Гислеру. Я этим процессом не управляю.
ТС, видимо, воспринимает нажатия этих кнопок только в промежутках между обработкой файлов. И если выполняется импорт одного файла с несколькими контактами, то очередь до обработки нажатий кнопок дойдёт только после полной обработки этого файла.
amzoom писал(а):И да, форсирование UTF-8 помогло, спасибо. Только всё равно странно: файл-то один, почему часть контактов распозналась как UTF-8, а остальные - нет? Они ж все в одной кодировке в одном файле сохранены.
Видимо кодировка в некоторых контактах указана, а в некоторых нет.
Аватара пользователя
Maximus
Сообщения: 927
Зарегистрирован: Чт апр 07, 2005 10:51
Откуда: Украина, Кировоградская обл., г. Знаменка
Контактная информация:

Сообщение Maximus »

Rodny писал(а):Однако, вот этот контакт у меня при импорте потерялся
Исправлено:
http://maximus.in.ua/files/temp-phb/wfx ... 960beta02/
amzoom
Сообщения: 44
Зарегистрирован: Ср окт 07, 2009 18:49

Сообщение amzoom »

Maximus писал(а):Это вопрос не ко мне, а к Гислеру. Я этим процессом не управляю.
Done.
Аватара пользователя
Maximus
Сообщения: 927
Зарегистрирован: Чт апр 07, 2005 10:51
Откуда: Украина, Кировоградская обл., г. Знаменка
Контактная информация:

Сообщение Maximus »

amzoom писал(а):Done.
Я думаю, что он тут ничего не станет делать.
Для того чтобы всё стало хорошо мне нужно реализовать функцию ProgressProc (о ней я писал выше), которая будет показывать прогресс и, соответственно, в таком случае ТС уже сможет прерывать и ставить его на паузу.

Добавлено спустя 2 часа 10 минут:

Добавил отображение прогресса (т.е. задействовал функцию ProgressProc)
http://maximus.in.ua/files/temp-phb/wfx ... 960beta03/

На паузу теперь поставить можно в любой момент, но отмена по прежнему воспринимается только в промежутках между файлами.
Больше сделать ничего не могу.
Последний раз редактировалось Maximus Ср апр 16, 2014 22:28, всего редактировалось 1 раз.
amzoom
Сообщения: 44
Зарегистрирован: Ср окт 07, 2009 18:49

Сообщение amzoom »

Maximus писал(а):Это вопрос не ко мне, а к Гислеру. Я этим процессом не управляю.
ТС, видимо, воспринимает нажатия этих кнопок только в промежутках между обработкой файлов. И если выполняется импорт одного файла с несколькими контактами, то очередь до обработки нажатий кнопок дойдёт только после полной обработки этого файла.
А нельзя ли в вашу функцию импорта добавить проверку "была ли нажата кнопка Cancel?" if (answer==true) { abortOperation();}?
Аватара пользователя
Maximus
Сообщения: 927
Зарегистрирован: Чт апр 07, 2005 10:51
Откуда: Украина, Кировоградская обл., г. Знаменка
Контактная информация:

Сообщение Maximus »

amzoom писал(а):А нельзя ли в вашу функцию импорта добавить проверку "была ли нажата кнопка Cancel?" if (answer==true) { abortOperation();}?
Это не мой диалог - это диалог ТС. Я только могу воспользоваться тем, что предоставляет его интерфейс. Сейчас ничего такого нет или я его в упор не вижу :)
Аватара пользователя
Maximus
Сообщения: 927
Зарегистрирован: Чт апр 07, 2005 10:51
Откуда: Украина, Кировоградская обл., г. Знаменка
Контактная информация:

Сообщение Maximus »

Maximus писал(а):Сейчас ничего такого нет или я его в упор не вижу :)
Кажись, прояснилось :) (Благодаря теме на оффоруме и MVV лично. Хотя мог бы и тут носом ткнуть)
http://maximus.in.ua/files/temp-phb/wfx ... 960beta04/
amzoom
Сообщения: 44
Зарегистрирован: Ср окт 07, 2009 18:49

Сообщение amzoom »

Maximus
а Cancel разве не должен не просто остановиться, но и удалить за собой то, что уже успел сделать? Это же именно Отмена, а не остановка.

И ещё: прогрессбар при импорте многоконтактного файла теперь рисуется по делениям, как надо, но вот %-ов не выводится и общее кол-во контактов и сколько уже импортировано - не показывается: по-прежнему видно только "0/1".
Ответить