Closed
Bug 292704
Opened 20 years ago
Closed 19 years ago
New alarm service
Categories
(Calendar :: Internal Components, defect)
Tracking
(Not tracked)
RESOLVED
FIXED
People
(Reporter: pavlov, Assigned: pavlov)
References
Details
Attachments
(2 files, 3 obsolete files)
28.13 KB,
patch
|
Details | Diff | Splinter Review | |
34.92 KB,
patch
|
shaver
:
first-review+
|
Details | Diff | Splinter Review |
code to handle alarms in the new calendar backend world
Assignee | ||
Comment 1•20 years ago
|
||
Assignee | ||
Comment 2•20 years ago
|
||
This patch gets the alarm service up and running. It observes calendar
registering and unregistering, event adds/deletes/modifies, and makes toast!
'app-startup' is apparently too early for me to use here since it can't
actually get the calStorageProfile stuff at that point needed by
calendarManager's getCalendars... I've wired it in in lightning but I'd rather
it just auto-startup.
This code currently doesn't pop up an alert when the alarm fires... it used to
use alert(), but components can't use that. It could be made to use nsIPrompt,
but it really needs to bring up a real dialog so you can snooze and whatnot.
Assignee | ||
Updated•20 years ago
|
Attachment #182463 -
Attachment is obsolete: true
Attachment #182475 -
Flags: first-review?(shaver)
Comment 3•20 years ago
|
||
Can you write, here or in another patch, a design overview of the alarm stuff?
How you select which timers to set, what happens if you can't find the event
when the timer goes off, what we do for snoozed timers when the user shuts down
before the snooze goes off, etc.?
I think you probably want a category like profile-after-change or some such, for
the post-profile-selection startup trigger.
Assignee | ||
Comment 4•20 years ago
|
||
The way things work is:
At startup, we register an observer with the calendar manager for registering
and unregistering calendars so that we can look for their events as well. For
each calendar, we then register an observer so that we can monitor
add/modify/delete so that we can adjust timers appropriately. We then look for
all existing calendars and do a getItems for all events from now until 6 hours
from now and we look for ones with alarms. If the event has an alarm we create
a timer to fire at that alarm time. If the event gets deleted, we'll cancel the
timer. Currently the timer object holds a strong ref to the event so it won't
ever have trouble actually finding the event, but if it gets deleted or modified
we should get rid of that ref when we cancel the timer. Every 6 hours after the
start we redo the getItems and set up new timers.
All that said, alarms are currently cacluated when they are set in the event
dialog. When the user snoozes an alarm, it should modify the event for a later
alarm time, which will cause the service to do the right thing. Things for how
alarms and recurrence work is somewhat up in the air and something we should
discuss further.
I tried using profile-after-change last night, but it didn't seem to get fired.
Assignee | ||
Comment 5•20 years ago
|
||
This patch fully implements calIAlarmService::shutdown() as well as makes a
first pass at bringing up a very rough alarm dialog
Attachment #182475 -
Attachment is obsolete: true
Attachment #182563 -
Flags: first-review?(shaver)
Comment 6•20 years ago
|
||
Comment on attachment 182563 [details] [diff] [review]
Latest and greatest
shutdown and startup should go away.
The host app (ltn, sunbird, extension) should register an alarm observer
(nsIObserver is probably sufficient, with the event as the detail) rather than
having the alarm service do anything with the window watcher.
calIAlarmService.idl needs docs.
calAlarmService's constructor looks like it's setting stuff that we would
rather just put on the prototype.
I don't think you want to have a timer per alarm-time, but instead a timer for
the soonest alarm, which causes you to walk the ordered list of alarm-times to
notify the observers of firing alarms. I could live with that being done in
another patch, after 0.8, though.
I've never seen this "service,@mozilla.org/contractid;1" thing before -- what's
it for?
r-, but you knew you needed to change this up anyway.
Attachment #182563 -
Flags: first-review?(shaver) → first-review-
Assignee | ||
Comment 7•20 years ago
|
||
I've made the new dialog actually work. It is being called now from a worse
place than before though. I'm not sure where the best place to hook up the
observer is. Thoughts?
Attachment #182563 -
Attachment is obsolete: true
Assignee | ||
Comment 8•20 years ago
|
||
I believe this patch only has 2 bugs:
1) it looks for events in a 6 hour period and checks to see if they have alarms
as opposed to looking for alarms in a 6 hour period. We should address this in
a seperate bug by adding additional stuff to calICalendar (probably extending
getItems)
2) the addDuration code in calIDateTime is broken and causes snooze not to work
as intended (15 minute snooze.)
Additional feature bugs should be filed for:
1) allowing the user to specify how long to snooze for
2) closing the dialog automatically when there are no alarms left in it
3) giving the dialog some pretty style
Attachment #182728 -
Flags: first-review?(shaver)
Comment 9•20 years ago
|
||
Comment on attachment 182728 [details] [diff] [review]
Finalish patch
r=shaver with comments from f2f review.
Attachment #182728 -
Flags: first-review?(shaver) → first-review+
Updated•20 years ago
|
Attachment #182475 -
Flags: first-review?(shaver)
Comment 10•19 years ago
|
||
Snoozing an alarm in Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.9a1) Gecko/20051208 Mozilla Sunbird/0.3a1+ results in the following javascript error:
----------------------------------------------------------------------------
Error: [Exception... "Could not convert JavaScript argument arg 0 [calIDateTime.addDuration]" nsresult: "0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)" location: "JS frame :: file:///D:/sunbird/components/calAlarmService.js :: anonymous :: line 195" data: no]
----------------------------------------------------------------------------
The problem seems to be that snoozeEvent() passes a calIDateTime object to addDuration(); but a calIDuration object is expected.
I just want to know if this is the bug mentioned in comment #8 or if we need a new bug filed:
> 2) the addDuration code in calIDateTime is broken and causes snooze not to
> work as intended (15 minute snooze.)
Comment 11•19 years ago
|
||
This patch was checked in long ago, marking as fixed.
Follow up bugs are already filed or will be filed if necessary.
Status: NEW → RESOLVED
Closed: 19 years ago
Resolution: --- → FIXED
You need to log in
before you can comment on or make changes to this bug.
Description
•