1 (29.04.2012 20:12:16 отредактировано Gnome)

Тема: 36-часовое смещение для ДР в календаре: как изменить?

Все добавленные из книги контактов ДР приобретают дату начала вида ДД-ММ-ГГГГ-00:00:00, а offset срабатывания получают минус 36 часов. Это мне не нравится, хочется, чтобы в 11:00 утра нужного дня, а не в 12 утра за двое суток до.

Что уже сделано.
1. Найден и поковырян файл /home/user/.calendar/db, в котором лежит sqlite-база для календарей и заметок. Там есть таблица Alarms, в которой заданы смещения для сигнала. Для ДР это -129600 (то есть, -36 часов). Вручную заменить на 39600 (то есть, +11 часов) можно, не вопрос. Но что потом сделать, чтобы аларм-лист обновился - неясно. ДР с уже заменённым смещением у меня сначала отработал за 36 часов. Потом было много и перезагрузок, и изменений таблицы, и ещё чёрта лысого, и вот сегодня в 11:00 этот ДР снова отработал.

После чего в /var/cache/timed/aegis/events.data именно для этого события указалось 11:00 текущего дня для 2013 года. Но вряд ли это аларм-лист. К тому же, я не смог пока его ни изменить, ни удалить вручную.

  {
    attr =
    [
       { key = "APPLICATION", val = "libextendedkcal" },
       { key = "PLUGIN", val = "libCalendarReminder" },
       { key = "TITLE", val = "Григорий Ганжа" },
       { key = "alarmtime", val = "2013-04-28T11:00:00" },
       { key = "allday", val = "true" },
       { key = "notebook", val = "b1376da7-5555-1111-2222-227549c4e570" },
       { key = "recurs", val = "true" },
       { key = "time", val = "2013-04-28T00:00:00" },
       { key = "type", val = "event" },
       { key = "uid", val = "com.nokia.birthday/111265" }
    ],
    b_attr =
    [
      
      {
        attr =
        [
           { key = "label", val = "Snooze 15 minutes" },
           { key = "snooze_value", val = "15" }
        ]
      },
      
      {
        attr =
        [
           { key = "label", val = "Snooze 10 minutes" },
           { key = "snooze_value", val = "10" }
        ]
      },
      
      {
        attr =
        [
           { key = "label", val = "Snooze 5 minutes" },
           { key = "snooze_value", val = "5" }
        ]
      },
       { attr = [  { key = "label", val = "Close" } ] }
    ],
    cookie = 676,
    flags = $aligned_snooze|$backup|$hide1|$reminder|$trigger_if_missed|$user_mode,
    snooze = [ 1, 900, 600, 300, 0 ],
    ticker = 1367132400
  },

2. Обнаружено, что в файле /usr/lib/contactsd-1.0/plugins/libbirthdayplugin.so перед вызовом функции KCalCore::Alarm::setStartOffset идёт закидывание числа -129600 в регистр:

SUB           R4, R11,#-var_80
MOV           R1, #0x5C0
MOV           R2, #0
MOVT          R1, #0xFFFE
MOV           R0, R4
LDR           R6, [R11,#var_A0]
BL            _ZN8KCalCore8DurationC1EiNS0_4TypeE
MOV           R0, R6
MOV           R1, R4
BL            _ZN8KCalCore5Alarm14setStartOffsetERKNS_8DurationE

Однако прямая замена числа FFFE05C0 на любое, хотя бы FFFE05B0 уже приводит к тому, что при записи ДР в календарь происходит какой-то сбой, по-моему, библиотека просто не грузится.

3. Предположил какое-нибудь сравнение с -129600 где-то в вызываемых функциях. Посмотрел на эту тему libkcalcoren.so.4.2.5+0m7 (идой также). Ничего путного на эту тему не нашёл. Глянул исходники этой KCalCore - что-то тоже ничего такого не увидел.

4. Просмотрены талки на маемо.орг. Там есть тема по этой проблеме, но внутри ничего вообще, кроме вопроса "как?" и двух страниц с сообщением "+1".

Куда ещё можно рыть?

Поделиться

2

Re: 36-часовое смещение для ДР в календаре: как изменить?

Gnome пишет:

4. Просмотрены талки на маемо.орг. Там есть тема по этой проблеме, но внутри ничего вообще, кроме вопроса "как?" и двух страниц с сообщением "+1".

Ссылку на тему дай, плиз.
Может я свою прогу допилю, чтоб она в этих стандартных напоминалках время ставила какое надо smile

Поделиться

3 (28.04.2012 20:02:44 отредактировано Gnome)

Re: 36-часовое смещение для ДР в календаре: как изменить?

Ссылку запросто: http://talk.maemo.org/showthread.php?t=83144
Толку от неё - ноль. Это у нас тут тема, а там - пустышка.

Avis пишет:

чтоб она в этих стандартных напоминалках время ставила какое надо

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

Поделиться

4

Re: 36-часовое смещение для ДР в календаре: как изменить?

Gnome пишет:

Вручную заменить на 39600 (то есть, +11 часов) можно, не вопрос. Но что потом сделать, чтобы аларм-лист обновился - неясно.

Заменять вручную в БД некошерно - лучше через тот же KCalCore smile И, кстати, делать после этого ничего не нужно - системные напоминалки должны сами обновиться (хотя, надо еще посмотреть в каком случае старая напоминалка должна отключиться...)
Я имел ввиду, что можно было бы чуток допилить мою программку, чтоб она пробегала по календарю и меняла станадртое время напоминалок на заданное пользователем.

Поделиться

5

Re: 36-часовое смещение для ДР в календаре: как изменить?

Avis, пробегать по календарю и менять занесённые туда значения после каждого изменения в книге контактов - это тоже не очень-то кошерно smile Поэтому я за то, чтобы разобраться: где в системе вшит этот жуткий -129600 и научиться его заменять на любое другое значение. собсна, для того тему и создал smile

Поделиться

6 (29.04.2012 01:43:48 отредактировано Gnome)

Re: 36-часовое смещение для ДР в календаре: как изменить?

Так, что ещё заметил. При внесении изменений в libbirthdayplugin.so в число FFFE05C0

по смещению: 
00053114       C0 15 00 E3 00 20 A0 E3 FE 1F 4F E3

помимо того, что сам плагин работать перестаёт, ещё и обязательно слетает картинка обоев в чёрный фон. Уж не знаю, как это связано.

Обезьянство какое-то smile

Поделиться

7

Re: 36-часовое смещение для ДР в календаре: как изменить?

Gnome пишет:

помимо того, что сам плагин работать перестаёт, ещё и обязательно слетает картинка обоев в чёрный фон. Уж не знаю, как это связано.

Тогда может быть взять исходники и подставить там нужную цифру?
Или даже заставить брать это значение из внешнего конфига?
https://gitorious.org/qtcontacts-tracker/contactsd

8 (29.04.2012 12:38:14 отредактировано Gnome)

Re: 36-часовое смещение для ДР в календаре: как изменить?

Может быть. К сожалению, свободное время подзакончилось) Теперь только урывками.

alarm->из /plugins/birthday/cdbirthdaycalendar.cpp:
setStartOffset(KCalCore::Duration(-36 * 3600 /* seconds */));

Вот это нужно будет заменить smile

Мне не очень понятно пока, какое конкретно отношение к этому делу имеет аегис. Как бы не вышло, что с ним замена не удастся. Это я всё к тому, что замена числа приводит к неработоспособности плагина и ещё каким-то крэшам. Или в ELFах таки есть какие-то чексумы? Если нет, значит, аегис как-то реагирует. Тогда с чего бы ему пропустить новоскомпилированный плагин))

Поделиться

9 (29.04.2012 20:12:54 отредактировано Gnome)

Re: 36-часовое смещение для ДР в календаре: как изменить?

Gnome пишет:

Однако прямая замена числа FFFE05C0 на любое, хотя бы FFFE05B0 уже приводит к тому, что при записи ДР в календарь происходит какой-то сбой, и в таблицу Components запись делается, а в таблицу Alarms - нет.

Проверил и это ещё раз: не так. Ничто никуда не пишется. Просто я так поначалу подумал, а оказалось, что эти ДР, которые я пытался создать с изменённой libbirthdayplugin.so, записались в базу (с пометкой "удалено тогда-то") только при удалении их из книги контактов. Так что по-моему, библиотека просто не грузится.

Поделиться