![]() ![]() |
Aug 4 2005, 07:27 AM
Post
#1
|
|
|
Group: Members Posts: 42 Joined: 30-September 04 From: Luxembourg Member No.: 4,819 |
Hi fvwm-users (and others),
perhaps you are interested in a menu that shows the coming appointments and todos from your .ics calendar file. I wrote it because I do not want to have kopi open all the time and I missed a feature like the "Today" app for opie and qpe. And for pleasure, of course ;-) It is writen in AWK and builds the menu on-the-fly. To give you an idea how it looks:
today_menu.png ( 28.72K )
Number of downloads: 208Of couse it may be changed (this one is for my desktop, the pdaXrom version looks different). To integrate it you may do the following: In your .fvwm2rc add lines like CODE DestroyFunc RecreateTodayMenu AddToFunc RecreateTodayMenu + I DestroyMenu recreate TodayMenu + I ChangeMenuStyle today TodayMenu + I Piperead '$[HOME]/bin/appointment-applet.awk MENU_NAME=TodayMenu\ DAYSAHEAD=10\ $[HOME]/kdepim/config/korganizerrc\ $[HOME]/kdepim/apps/korganizer/mycalendar.ics' + I AddToMenu TodayMenu DynamicPopupAction RecreateTodayMenu CopyMenuStyle * today Colorset 31 fg black, bg white, sh #ababab, hi white MenuStyle today ItemFormat "%3i%5.5l%.2r" MenuStyle today MenuColorset 31 ChangeMenuStyle today TodayMenu AddToMenu TodayMenu DynamicPopupAction RecreateTodayMenu # Add to root menu AddToMenu MenuFvwmRoot Popup TodayMenu Of course the script may also by used by others. It is structured in a simple way. There is the BEGIN block where some defaults are set. There you should change the icons to ones that exists on pdaXrom. Then comes the evaluation of the text lines from korganizerrc and mycalendar.ics. The special block /END:(VEVENT|VTODO)/ collects the data for one appointment or todo and stores it in arrays. In the END block that data is printed. If you intend to use it on the desktop be sure to have gawk installed. At least with the awk version that comes with ubuntu base installation the script doesn't work. On pdaXrom I had no problems. I hope you like it and I would appreciate comments and hints to enhance it. Christoph
Attached File(s)
|
|
|
|
Aug 4 2005, 04:18 PM
Post
#2
|
|
|
Group: Members Posts: 183 Joined: 7-September 04 Member No.: 4,501 |
I havn't had a chance to check it out properly, but it looks really good. You may actually have something there that can help with another issue, that of waking the Z up when the next alarm comes in.
I've been trying to work out iCalander support in python last night and am battling with the really sparse document (plus the fact that korganizer stores its .ics without \r\n, so it breaks a parse). What I'm trying to work out is when the NEXT alarm is. Can your script work that out easily? If so I'll put up a script that when a uses suspends the Z, it calls the script to work out next alarm (either relative time, or absolute time), uses apmsleep when suspending such that when the alarm is due, it will wake the Z up for it. - Bundabrg QUOTE(Christoph @ Aug 4 2005, 03:27 PM) Hi fvwm-users (and others),
perhaps you are interested in a menu that shows the coming appointments and todos from your .ics calendar file. I wrote it because I do not want to have kopi open all the time and I missed a feature like the "Today" app for opie and qpe. And for pleasure, of course ;-) It is writen in AWK and builds the menu on-the-fly. To give you an idea how it looks:
today_menu.png ( 28.72K )
Number of downloads: 208Of couse it may be changed (this one is for my desktop, the pdaXrom version looks different). To integrate it you may do the following: In your .fvwm2rc add lines like CODE DestroyFunc RecreateTodayMenu AddToFunc RecreateTodayMenu + I DestroyMenu recreate TodayMenu + I ChangeMenuStyle today TodayMenu + I Piperead '$[HOME]/bin/appointment-applet.awk MENU_NAME=TodayMenu\ DAYSAHEAD=10\ $[HOME]/kdepim/config/korganizerrc\ $[HOME]/kdepim/apps/korganizer/mycalendar.ics' + I AddToMenu TodayMenu DynamicPopupAction RecreateTodayMenu CopyMenuStyle * today Colorset 31 fg black, bg white, sh #ababab, hi white MenuStyle today ItemFormat "%3i%5.5l%.2r" MenuStyle today MenuColorset 31 ChangeMenuStyle today TodayMenu AddToMenu TodayMenu DynamicPopupAction RecreateTodayMenu # Add to root menu AddToMenu MenuFvwmRoot Popup TodayMenu Of course the script may also by used by others. It is structured in a simple way. There is the BEGIN block where some defaults are set. There you should change the icons to ones that exists on pdaXrom. Then comes the evaluation of the text lines from korganizerrc and mycalendar.ics. The special block /END:(VEVENT|VTODO)/ collects the data for one appointment or todo and stores it in arrays. In the END block that data is printed. If you intend to use it on the desktop be sure to have gawk installed. At least with the awk version that comes with ubuntu base installation the script doesn't work. On pdaXrom I had no problems. I hope you like it and I would appreciate comments and hints to enhance it. Christoph |
|
|
|
Aug 6 2005, 12:59 AM
Post
#3
|
|
|
Group: Members Posts: 42 Joined: 30-September 04 From: Luxembourg Member No.: 4,819 |
I looked at the possibility to use the script or awk in general to determine the next
alarm time. The simplest way would have been to use timestamps to determine the time of the alarm from the begin of the event and the alarm duration. Unfortunatly the busybox version of awk doesn't know the mktime command, so that would have to be implemented in awk itself, which in turns look like a bit of work ;-) Perhaps someone knows a simple solution for that? Apart from that "little" problem it shouldn't be too hard to implement it. There is a newer version of the appointment applet that fixes a bug with the Title (it showed the wrong day and month). Apart from that I would like to know if the combination of the time zone and summer time defined in the konquerorrc works. Does the menu show the correct times for everybody? Christoph
Attached File(s)
|
|
|
|
Aug 6 2005, 02:09 AM
Post
#4
|
|
|
Group: Members Posts: 183 Joined: 7-September 04 Member No.: 4,501 |
Thanks, I've been playing around with it to get the alarm time. Essentially pull off the -PT1H28M etc.. and subtract it from the DTSTART. Just working out how DTSTART etc stores hours and minutes. Nearly done.
BTW, I don't think your script handles recursive events, though that I imagine would be quite difficult. Thanks for all this. It makes my job far easier - Bundabrg QUOTE(Christoph @ Aug 6 2005, 08:59 AM) I looked at the possibility to use the script or awk in general to determine the next
alarm time. The simplest way would have been to use timestamps to determine the time of the alarm from the begin of the event and the alarm duration. Unfortunatly the busybox version of awk doesn't know the mktime command, so that would have to be implemented in awk itself, which in turns look like a bit of work ;-) Perhaps someone knows a simple solution for that? Apart from that "little" problem it shouldn't be too hard to implement it. There is a newer version of the appointment applet that fixes a bug with the Title (it showed the wrong day and month). Apart from that I would like to know if the combination of the time zone and summer time defined in the konquerorrc works. Does the menu show the correct times for everybody? Christoph |
|
|
|
Aug 6 2005, 05:30 AM
Post
#5
|
|
|
Group: Members Posts: 42 Joined: 30-September 04 From: Luxembourg Member No.: 4,819 |
QUOTE(Bundabrg @ Aug 6 2005, 10:09 AM) Thanks, I've been playing around with it to get the alarm time. Essentially pull off the -PT1H28M etc.. and subtract it from the DTSTART. Just working out how DTSTART etc stores hours and minutes. Nearly done. I'm impressed! How do you subtract "PT1H28M" from, let's say "20040220T091800Z", considering leap years etc? When it's done I hope you publish it. QUOTE BTW, I don't think your script handles recursive events, though that I imagine would be quite difficult. Right, I still didn't think about that. QUOTE If you made it an applet for matchbox, then you've basically replaced kopi-alarm applet entirely ;-) I am no expert for matchbox (ok, for fvwm neither, but I know a bit more of it than of matchbox). And I thought that to customize it for other wm than fvwm I would left as an exercise to the reader ;-) But. Here is the logical continuation:
birthday_applet.awk.gz ( 992bytes )
Number of downloads: 9If you managed to include the appointment-applet, this here may simply be included by adding CODE + I Piperead '$[HOME]/bin/birthday-applet.awk MENU_NAME=TodayMenu DAYSAHEAD=10 $[HOME]/kdepim/apps/kabc/std.vcf' just after the line where the appointment applet is read. And again you have to change the path to the icon to see it in the menu. Christoph |
|
|
|
Aug 7 2005, 12:46 AM
Post
#6
|
|
|
Group: Members Posts: 183 Joined: 7-September 04 Member No.: 4,501 |
QUOTE I'm impressed! How do you subtract "PT1H28M" from, let's say "20040220T091800Z", considering leap years etc? When it's done I hope you publish it. You do similar with tzadd (which BTW doesn't work for me. I'm -8:00 hours, and if I have an appointment at 7:00am, it comes up with some wierd number). Essentially I strip off -PT. Convert xD yH zM to minutes. Take DTSTART, subtract minutes from the time, subtract hours and minutes and days if necessary (trying to figure out a portable way of subtracting a day when we need to go back to a previous month). Thats the plan anyway. - Bundabrg |
|
|
|
Aug 7 2005, 01:08 AM
Post
#7
|
|
|
Group: Members Posts: 42 Joined: 30-September 04 From: Luxembourg Member No.: 4,819 |
QUOTE(Bundabrg @ Aug 7 2005, 08:46 AM) You do similar with tzadd (which BTW doesn't work for me. I'm -8:00 hours, and if I have an appointment at 7:00am, it comes up with some wierd number). You are too far away from Greenwich ;-) I will look at that. I didn't think of day changes with the time zone. QUOTE Essentially I strip off -PT. Convert xD yH zM to minutes. Take DTSTART, subtract minutes from the time, subtract hours and minutes and days if necessary (trying to figure out a portable way of subtracting a day when we need to go back to a previous month). If you get stuck: On the gawk pages I found an mktime function that is implemented in awk, so it should work with the awk on pdaXrom. I still didn't include it in the appointment applet but I think that is the way I would re-implement the tzadd: CODE #!/usr/bin/awk -f BEGIN { ## # initialization for the mktime function ## # Initialize table of month lengths _tm_months[0,1] = _tm_months[1,1] = 31 _tm_months[0,2] = 28; _tm_months[1,2] = 29 _tm_months[0,3] = _tm_months[1,3] = 31 _tm_months[0,4] = _tm_months[1,4] = 30 _tm_months[0,5] = _tm_months[1,5] = 31 _tm_months[0,6] = _tm_months[1,6] = 30 _tm_months[0,7] = _tm_months[1,7] = 31 _tm_months[0,8] = _tm_months[1,8] = 31 _tm_months[0,9] = _tm_months[1,9] = 30 _tm_months[0,10] = _tm_months[1,10] = 31 _tm_months[0,11] = _tm_months[1,11] = 30 _tm_months[0,12] = _tm_months[1,12] = 31 } ######################################################### # the mktime function ######################################################### function _tm_isleap(year, ret) { ret = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0) return ret } function _tm_addup(a, total, yearsecs, daysecs, hoursecs, i, j) { hoursecs = 60 * 60 daysecs = 24 * hoursecs yearsecs = 365 * daysecs total = (a[1] - 1970) * yearsecs # extra day for leap years for (i = 1970; i < a[1]; i++) if (_tm_isleap(i)) total += daysecs j = _tm_isleap(a[1]) for (i = 1; i < a[2]; i++) total += _tm_months[j, i] * daysecs total += (a[3] - 1) * daysecs total += a[4] * hoursecs total += a[5] * 60 total += a[6] return total } function my_mktime(str, res1, res2, a, b, i, j, t, diff) { i = split(str, a, " ") # don't rely on FS if (i != 6) return -1 # force numeric for (j in a) a[j] += 0 # validate if (a[1] < 1970 || a[2] < 1 || a[2] > 12 || a[3] < 1 || a[3] > 31 || a[4] < 0 || a[4] > 23 || a[5] < 0 || a[5] > 59 || a[6] < 0 || a[6] > 61 ) return -1 res1 = _tm_addup(a) t = strftime("%Y %m %d %H %M %S", res1) if (_tm_debug) printf("(%s) -> (%s)\n", str, t) > "/dev/stderr" split(t, b, " ") res2 = _tm_addup(b) diff = res1 - res2 if (_tm_debug) printf("diff = %d seconds\n", diff) > "/dev/stderr" res1 += diff return res1 } { printf("MyMkTime: %d\n", my_mktime("2005 08 07 10 54 18")); printf("GawkMkTime: %d\n", mktime("2005 08 07 10 54 18")); } to test it you can make a file test_mktime.awk (chmod 755) and call echo 1 | ./test_mktime.awk with gawk installed. I simply copied it from the page. The usage is mktime("YYYY MM DD HH MM SS"), and this information can be stripped from the DTSTART. Then you would need a translation of the alarm duration to seconds and subtract the seconds from the result of mktime. After that you don't have to bother with leap years. Christoph |
|
|
|
Aug 7 2005, 06:25 AM
Post
#8
|
|
|
Group: Members Posts: 42 Joined: 30-September 04 From: Luxembourg Member No.: 4,819 |
Hi,
here is now a new version of the appointment applet. This time it uses the mktime function implemented in awk. It should now work on all timezones and for (nearly) all daylight savings. Maybe there are problems with events around the day of daylight saving start/end. Still no implementation of recurrent events. And the events aren't sorted per time within a day. In the fvwm part I made a mistake with the setting of awk variables. All variables are set by -v <variable name>=<value>. I also exported more variables, making it easier to customize. Here is how it should look now: CODE DestroyFunc RecreateTodayMenu AddToFunc RecreateTodayMenu + I DestroyMenu recreate TodayMenu + I ChangeMenuStyle today TodayMenu + I Piperead '$[HOME]/bin/appointment-applet.awk\ -v MENU_NAME=TodayMenu\ -v LANGUAGE=en\ -v DAYSAHEAD=10\ -v APPOINTMENT_ICON=/usr/lib/qt/lib/kdepim/korganizer/icons16/newevent.png\ -v TODO_ICON=/usr/lib/qt/lib/kdepim/korganizer/icons16/todo.png\ -v ALARM_ICON=/usr/lib/qt/lib/kdepim/korganizer/icons16/bell.png\ $[HOME]/kdepim/config/korganizerrc $[HOME]/kdepim/apps/korganizer/mycalendar.ics' + I Piperead '$[HOME]/bin/birthday-applet.awk\ -v MENU_NAME=TodayMenu\ -v LANGUAGE=en\ -v DAYSAHEAD=21\ $[HOME]/kdepim/apps/kabc/std.vcf' + I AddToMenu TodayMenu DynamicPopupAction RecreateTodayMenu Style Today StaysOnTop Colorset 30 fg black, bg white, hi white, sh black MenuStyle today ItemFormat "%.5s%3i%5p%5.5l%.5r" MenuStyle today MenuColorset 30 MenuStyle today SidePic /home/root/.fvwm/pixmaps/today-sidepicture.png MenuStyle today SeparatorsShort, HilightBackOff, Hilight3DOff, ActiveForeOff, BorderWidth 0 MenuStyle today Foreground black, Background white MenuStyle today Font "StringEncoding=UTF-8:xft:Arial:size=14:encoding=iso8859-1" ChangeMenuStyle today TodayMenu AddToMenu TodayMenu DynamicPopupAction RecreateTodayMenu I assume that the kdepim files are installed in /usr/lib/qt/lib. If you have another encoding of the ics file change the StringEncoding to your needs. The scripts starts to become a bit slow. On my C860 it now needs 2-3 seconds to show. If you like you may also add the sidepicture:
today_sidepicture.png ( 5.17K )
Number of downloads: 43Christoph
Attached File(s)
|
|
|
|
Aug 7 2005, 04:10 PM
Post
#9
|
|
|
Group: Members Posts: 183 Joined: 7-September 04 Member No.: 4,501 |
I've got it working. Just building an ipk file (this is for next alarm event).
I used date to determine other dates, as it is locale and daylight savings aware. ie CODE date --date "1/7/2005 11:36 utc 628 minutes ago" Will return the time in local format minus 628 minutes - Bundabrg |
|
|
|
Aug 7 2005, 07:14 PM
Post
#10
|
|
|
Group: Members Posts: 183 Joined: 7-September 04 Member No.: 4,501 |
|
|
|
|
Sep 25 2007, 12:07 PM
Post
#11
|
|
|
Group: Members Posts: 50 Joined: 19-November 04 Member No.: 5,523 |
Is this still being developed or is it working with no bugs?
Thanks |
|
|
|
![]() ![]() |
|
Lo-Fi Version | Time is now: 22nd May 2013 - 01:21 AM |