Hatred's Log Place

DON'T PANIC!

Dec 9, 2014 - 2 minute read -

Временные зоны в Lightning

Lightning_(ПО)|Lightning мощный календарь для Thunderbird . Вкупе с Exchange EWS Provider может явиться полноценной заменой Outlook.

Беда которую заметил буквально сегодня - сдвинутое время в календаре. Из за нашего перехода на перманентное зимнее время. Оказалось, что расширение содержит свою базу описания временных зон (руки отбить за такое, не даёт им покоя слава Java). И обновляться оно пока не собирается. Решил посмотреть сам.

Оказалось, что база часовых поясов хранится в sqlite: timezones.sqlite - ищем этот файлик в одной из поддиректорий в директории extensions в профиле TB.

Для всех временных зон обновления не дам, но покажу, на примере Владивостока, как их можно поменять.

Для начала закрываем TB.

UPD: описание ниже - изначальный путь решения проблемы, кто не понимает о чём тут речь, лучше сразу перейти в конец заметки и воспользоваться sqlitebrowser.

Вторым шагом, делаем дамп текущей базы (не отдельной зоны, календарь очень придирчив к переносу строк в VCARD, так будет проще)

sqlite3 timezones.sqlite .dump > timezones.dump

По строке ‘Asia/Vladivostok’ находим нужную зону:

INSERT INTO "tz_data" VALUES('Asia/Vladivostok',NULL,'+0431000','+1315600','BEGIN:VTIMEZONE
TZID:Asia/Vladivostok
X-LIC-LOCATION:Asia/Vladivostok
BEGIN:STANDARD
TZOFFSETFROM:+1100
TZOFFSETTO:+1100
TZNAME:VLAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
');

Видим некорректные значение полей:

TZOFFSETFROM:+1100
TZOFFSETTO:+1100

Исправляем их на +1000, итог получается такой:

INSERT INTO "tz_data" VALUES('Asia/Vladivostok',NULL,'+0431000','+1315600','BEGIN:VTIMEZONE
TZID:Asia/Vladivostok
X-LIC-LOCATION:Asia/Vladivostok
BEGIN:STANDARD
TZOFFSETFROM:+1000
TZOFFSETTO:+1000
TZNAME:VLAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
');

Теперь грохаем базу: rm timezones.sqlite

И восстанавливаем её из нашего отредактированного дампа: cat timezones.dump | sqlite3 timezones.sqlite

Для проверки, запускаем TB из терминала, смотрим, что нет ругани вроде такой:

Exception:[Exception... "Component returned failure code: 0x804a0100 [calIICSService.parseICS]"  nsresult: "0x804a0100 (<unknown>)"  location: "JS frame :: resource:*calendar/modules/calUtils.jsm -> file:*/home/user/.thunderbird/8q56g6ui.default/extensions/%7Be2fda1a4-762b-4020-b5ad-a41df1933103%7D/calendar-js/calTimezone.js :: calLibicalTimezone.prototype.icalComponent :: line 84"  data: no]

Если есть, значит таки напороли с переносом строк. Исправляем внимательно.

Всё, теперь запускаем TB и радуемся правильному времени в календаре.

Эту процедуру можно сделать чуть проще при помощи sqlitebrowser: просто открываем timezones.sqlite, находим нужную строку и правим аккуратно в нём, применяем, сохраняем, запускаем TB.