Here's my shot at this. Some things to cogitate: * Events only show up in the list view. I'm trying to debug this, and Rodrigo has suggested that it might be a buglet left over from the recurrences branch merge. I've verified that the backend is sending events properly for all the SExp queries made to it. * Changing parameters (refresh, units preferences, etc) on the source doesn't take immediate effect. It appears as though these changes aren't communicated back to e-d-s. I hope to solve these two soon. * The bounty specifies that the e-d-s backend should supply the category icons, but this seems overly complicated. I've added them to gal's master category list for now, but in my ideal vision of this, a rewritten calendar view system could allow the EPlugin to take care of drawing the event, in which case the category system could be completely uninvolved. However, such a fantastic plugin hook isn't necessary for this to be useful now. * Currently, the category is set to the closest-matching icon (from those supplied with the gweather applet) and the summary contains high/low temperatures. More detailed conditions, probability of precipitation and snowfall amount forecasts are contained in the body of the event. This hypothetical more-flexible calendar drawing code would ideally allow the events to be drawn more like the mockup on the bounty. * The backend is designed to be flexible wrt to sources - I've implemented CCF (coded-cities-forecast), which provides data for the USA. If people can find forecast sources for their countries, adding support for additional formats should be simple. If weather.gnome.org ever becomes a reality, it probably makes sense to switch to it) * I'm pretty confident that Locations.xml is correct for all the CCF products supplied by the NWS, but this was pretty tedious work, so it's possible I made a mistake. It's also untranslated at the moment, which is a big argument for switching weather.gnome.org once that becomes real ;-) Thanks, -David
Attachment:
e-d-s-new-files.tar.gz
Description: application/compressed-tar
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution-data-server/ChangeLog,v
retrieving revision 1.205
diff -u -r1.205 ChangeLog
--- ChangeLog 27 Dec 2004 14:30:28 -0000 1.205
+++ ChangeLog 30 Dec 2004 05:23:05 -0000
@@ -1,3 +1,8 @@
+2004-12-29 David Trowbridge <trowbrds cs colorado edu>
+
+ * libedataserver/e-source.c: Add logic for emitting a "changed" signal
+ if any of the properties change
+
2004-12-27 Rodrigo Moya <rodrigo novell com>
* src/server.c (gnome_segv_handler): use the correct binary name (ie,
Index: configure.in
===================================================================
RCS file: /cvs/gnome/evolution-data-server/configure.in,v
retrieving revision 1.82
diff -u -r1.82 configure.in
--- configure.in 21 Dec 2004 06:52:15 -0000 1.82
+++ configure.in 30 Dec 2004 05:23:05 -0000
@@ -1134,6 +1134,9 @@
gladedir="$privdatadir/glade"
AC_SUBST(gladedir)
+weatherdatadir="$privdatadir/weather"
+AC_SUBST(weatherdatadir)
+
dnl separate camel from e-d-s? or should it be under the same spot? same for now.
camel_providerdir="${privlibdir}/camel-providers"
AC_SUBST(camel_providerdir)
@@ -1200,6 +1203,7 @@
calendar/backends/groupwise/Makefile
calendar/backends/http/Makefile
calendar/backends/contacts/Makefile
+calendar/backends/weather/Makefile
calendar/tests/Makefile
calendar/tests/ecal/Makefile
camel/Makefile
Index: evolution-data-server.pc.in
===================================================================
RCS file: /cvs/gnome/evolution-data-server/evolution-data-server.pc.in,v
retrieving revision 1.2
diff -u -r1.2 evolution-data-server.pc.in
--- evolution-data-server.pc.in 30 Sep 2004 16:53:54 -0000 1.2
+++ evolution-data-server.pc.in 30 Dec 2004 05:23:05 -0000
@@ -4,6 +4,8 @@
includedir= includedir@
privlibdir= privlibdir@
extensiondir= extensiondir@
+datadir= datadir@
+privdatadir= privdatadir@
idldir= idldir@
IDL_INCLUDES=-I ${idldir} @IDL_INCLUDES@
Index: calendar/backends/Makefile.am
===================================================================
RCS file: /cvs/gnome/evolution-data-server/calendar/backends/Makefile.am,v
retrieving revision 1.3
diff -u -r1.3 Makefile.am
--- calendar/backends/Makefile.am 9 Jan 2004 20:05:27 -0000 1.3
+++ calendar/backends/Makefile.am 30 Dec 2004 05:23:06 -0000
@@ -1 +1 @@
-SUBDIRS = file groupwise http contacts
+SUBDIRS = file groupwise http contacts weather
Attachment:
evolution-new-files.tar.gz
Description: application/compressed-tar
Index: configure.in
===================================================================
RCS file: /cvs/gnome/evolution/configure.in,v
retrieving revision 1.755
diff -u -r1.755 configure.in
--- configure.in 23 Dec 2004 07:00:30 -0000 1.755
+++ configure.in 30 Dec 2004 05:23:01 -0000
@@ -1232,6 +1232,11 @@
AC_MSG_ERROR(no)
fi
+dnl -- e-d-s weather datadir
+dataserver_datadir=`pkg-config --variable=privdatadir evolution-data-server-1.2`
+weatherdatadir="$dataserver_datadir/weather"
+AC_SUBST(weatherdatadir)
+
dnl --- evolution-test flags
EVO_SET_COMPILE_FLAGS(EVOLUTION_TEST, libgnome-2.0 libgnomeui-2.0 libbonobo-2.0 libbonoboui-2.0 >= $BONOBOUI_REQUIRED)
@@ -1333,7 +1338,7 @@
AC_ARG_ENABLE(plugins, [ --enable-plugins=[no/all/list] Enable plugins.],enable_plugins="$enableval",enable_plugins=base)
dnl Add any new plugins here
-plugins_base="calendar-http groupwise-account-setup plugin-manager"
+plugins_base="calendar-http calendar-weather groupwise-account-setup plugin-manager"
plugins_all="bbdb subject-thread save-attachments prefer-plain save-calendar select-one-source copy-tool mail-to-meeting mail-to-task folder-unsubscribe mark-calendar-offline audio-inline mailing-list-actions groupwise-account-setup"
case x"$enable_plugins" in
@@ -1535,6 +1540,7 @@
mail/importers/Makefile
plugins/Makefile
plugins/calendar-http/Makefile
+plugins/calendar-weather/Makefile
plugins/plugin-manager/Makefile
plugins/bbdb/Makefile
plugins/audio-inline/Makefile
Index: calendar/ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution/calendar/ChangeLog,v
retrieving revision 1.2598
diff -u -r1.2598 ChangeLog
--- calendar/ChangeLog 27 Dec 2004 13:36:04 -0000 1.2598
+++ calendar/ChangeLog 30 Dec 2004 05:23:02 -0000
@@ -1,3 +1,7 @@
+2004-12-29 David Trowbridge <trowbrds cs colorado edu>
+
+ * gui/migration.c: Added creation of weather source group
+
2004-12-26 Rodrigo Moya <rodrigo novell com>
* gui/e-cal-model.c (search_by_uid_and_client): removed superfluous if
Index: calendar/gui/migration.c
===================================================================
RCS file: /cvs/gnome/evolution/calendar/gui/migration.c,v
retrieving revision 1.32
diff -u -r1.32 migration.c
--- calendar/gui/migration.c 7 Oct 2004 21:03:36 -0000 1.32
+++ calendar/gui/migration.c 30 Dec 2004 05:23:03 -0000
@@ -362,6 +362,7 @@
}
+#define WEATHER_BASE_URI "weather://"
#define WEBCAL_BASE_URI "webcal://"
#define CONTACTS_BASE_URI "contacts://"
#define BAD_CONTACTS_BASE_URI "contact://"
@@ -393,7 +394,8 @@
ESourceGroup **on_this_computer,
ESource **personal_source,
ESourceGroup **on_the_web,
- ESourceGroup **contacts)
+ ESourceGroup **contacts,
+ ESourceGroup **weather)
{
GSList *groups;
ESourceGroup *group;
@@ -402,6 +404,7 @@
*on_this_computer = NULL;
*on_the_web = NULL;
*contacts = NULL;
+ *weather = NULL;
*personal_source = NULL;
base_uri = g_build_filename (calendar_component_peek_base_directory (component),
@@ -486,7 +489,15 @@
*contacts = group;
}
-
+
+ if (!*weather) {
+ /* Create the Weather source group */
+ group = e_source_group_new (_("Weather"), WEATHER_BASE_URI);
+ e_source_list_add_group (source_list, group, -1);
+
+ *weather = group;
+ }
+
g_free (base_uri_proto);
g_free (base_uri);
}
@@ -698,14 +709,14 @@
gboolean
migrate_calendars (CalendarComponent *component, int major, int minor, int revision, GError **err)
{
- ESourceGroup *on_this_computer = NULL, *on_the_web = NULL, *contacts = NULL;
+ ESourceGroup *on_this_computer = NULL, *on_the_web = NULL, *contacts = NULL, *weather = NULL;
ESource *personal_source = NULL;
gboolean retval = FALSE;
/* we call this unconditionally now - create_groups either
creates the groups/sources or it finds the necessary
groups/sources. */
- create_calendar_sources (component, calendar_component_peek_source_list (component), &on_this_computer, &personal_source, &on_the_web, &contacts);
+ create_calendar_sources (component, calendar_component_peek_source_list (component), &on_this_computer, &personal_source, &on_the_web, &contacts, &weather);
if (major == 1) {
xmlDocPtr config_doc = NULL;
@@ -841,6 +852,8 @@
g_object_unref (on_the_web);
if (contacts)
g_object_unref (contacts);
+ if (weather)
+ g_object_unref (weather);
if (personal_source)
g_object_unref (personal_source);
Attachment:
gal-new-files.tar.gz
Description: application/compressed-tar
? art/category_weather_cloudy_16.png
? art/category_weather_fog_16.png
? art/category_weather_partly_cloudy_16.png
? art/category_weather_rain_16.png
? art/category_weather_snow_16.png
? art/category_weather_sun_16.png
? art/category_weather_tstorm_16.png
Index: art/Makefile.am
===================================================================
RCS file: /cvs/gnome/gal/art/Makefile.am,v
retrieving revision 1.4
diff -u -r1.4 Makefile.am
--- art/Makefile.am 8 Jan 2003 19:16:12 -0000 1.4
+++ art/Makefile.am 30 Dec 2004 03:08:28 -0000
@@ -5,8 +5,8 @@
category_favorites_16.png \
category_gifts_16.png \
category_goals_16.png \
- category_holiday_16.png \
category_holiday-cards_16.png \
+ category_holiday_16.png \
category_hot-contacts_16.png \
category_ideas_16.png \
category_international_16.png \
@@ -17,7 +17,14 @@
category_status_16.png \
category_strategies_16.png \
category_suppliers_16.png \
- category_time-and-expenses_16.png
+ category_time-and-expenses_16.png \
+ category_weather_cloudy_16.png \
+ category_weather_fog_16.png \
+ category_weather_partly_cloudy_16.png \
+ category_weather_rain_16.png \
+ category_weather_snow_16.png \
+ category_weather_sun_16.png \
+ category_weather_tstorm_16.png
EXTRA_DIST = \
$(images_DATA)
Index: gal/widgets/e-categories-master-list-array.c
===================================================================
RCS file: /cvs/gnome/gal/gal/widgets/e-categories-master-list-array.c,v
retrieving revision 1.14
diff -u -r1.14 e-categories-master-list-array.c
--- gal/widgets/e-categories-master-list-array.c 16 Nov 2002 23:42:17 -0000 1.14
+++ gal/widgets/e-categories-master-list-array.c 30 Dec 2004 03:08:29 -0000
@@ -64,27 +64,34 @@
gchar *category;
gchar *icon;
} builtin_categories[] = {
- { N_("Birthday"), GAL_IMAGESDIR "/category_birthday_16.png" },
- { N_("Business"), GAL_IMAGESDIR "/category_business_16.png" },
- { N_("Competition"), NULL },
- { N_("Favorites"), GAL_IMAGESDIR "/category_favorites_16.png" },
- { N_("Gifts"), GAL_IMAGESDIR "/category_gifts_16.png" },
- { N_("Goals/Objectives"), GAL_IMAGESDIR "/category_goals_16.png" },
- { N_("Holiday"), GAL_IMAGESDIR "/category_holiday_16.png" },
- { N_("Holiday Cards"), GAL_IMAGESDIR "/category_holiday-cards_16.png" },
- { N_("Hot Contacts"), GAL_IMAGESDIR "/category_hot-contacts_16.png" },
- { N_("Ideas"), GAL_IMAGESDIR "/category_ideas_16.png" },
- { N_("International"), GAL_IMAGESDIR "/category_international_16.png" },
- { N_("Key Customer"), GAL_IMAGESDIR "/category_key-customer_16.png" },
- { N_("Miscellaneous"), GAL_IMAGESDIR "/category_miscellaneous_16.png" },
- { N_("Personal"), GAL_IMAGESDIR "/category_personal_16.png" },
- { N_("Phone Calls"), GAL_IMAGESDIR "/category_phonecalls_16.png" },
- { N_("Status"), GAL_IMAGESDIR "/category_status_16.png" },
- { N_("Strategies"), GAL_IMAGESDIR "/category_strategies_16.png" },
- { N_("Suppliers"), GAL_IMAGESDIR "/category_suppliers_16.png" },
- { N_("Time & Expenses"), GAL_IMAGESDIR "/category_time-and-expenses_16.png" },
- { N_("VIP"), NULL },
- { N_("Waiting"), NULL },
+ { N_("Birthday"), GAL_IMAGESDIR "/category_birthday_16.png" },
+ { N_("Business"), GAL_IMAGESDIR "/category_business_16.png" },
+ { N_("Competition"), NULL },
+ { N_("Favorites"), GAL_IMAGESDIR "/category_favorites_16.png" },
+ { N_("Gifts"), GAL_IMAGESDIR "/category_gifts_16.png" },
+ { N_("Goals/Objectives"), GAL_IMAGESDIR "/category_goals_16.png" },
+ { N_("Holiday"), GAL_IMAGESDIR "/category_holiday_16.png" },
+ { N_("Holiday Cards"), GAL_IMAGESDIR "/category_holiday-cards_16.png" },
+ { N_("Hot Contacts"), GAL_IMAGESDIR "/category_hot-contacts_16.png" },
+ { N_("Ideas"), GAL_IMAGESDIR "/category_ideas_16.png" },
+ { N_("International"), GAL_IMAGESDIR "/category_international_16.png" },
+ { N_("Key Customer"), GAL_IMAGESDIR "/category_key-customer_16.png" },
+ { N_("Miscellaneous"), GAL_IMAGESDIR "/category_miscellaneous_16.png" },
+ { N_("Personal"), GAL_IMAGESDIR "/category_personal_16.png" },
+ { N_("Phone Calls"), GAL_IMAGESDIR "/category_phonecalls_16.png" },
+ { N_("Status"), GAL_IMAGESDIR "/category_status_16.png" },
+ { N_("Strategies"), GAL_IMAGESDIR "/category_strategies_16.png" },
+ { N_("Suppliers"), GAL_IMAGESDIR "/category_suppliers_16.png" },
+ { N_("Time & Expenses"), GAL_IMAGESDIR "/category_time-and-expenses_16.png" },
+ { N_("VIP"), NULL },
+ { N_("Waiting"), NULL },
+ { N_("Weather: Cloudy"), GAL_IMAGESDIR "/category_weather_cloudy_16.png" },
+ { N_("Weather: Fog"), GAL_IMAGESDIR "/category_weather_fog_16.png" },
+ { N_("Weather: Partly Cloudy"), GAL_IMAGESDIR "/category_weather_partly_cloudy_16.png" },
+ { N_("Weather: Rain"), GAL_IMAGESDIR "/category_weather_rain_16.png" },
+ { N_("Weather: Snow"), GAL_IMAGESDIR "/category_weather_snow_16.png" },
+ { N_("Weather: Sunny"), GAL_IMAGESDIR "/category_weather_sun_16.png" },
+ { N_("Weather: Thunderstorms"), GAL_IMAGESDIR "/category_weather_tstorm_16.png" },
};
#define BUILTIN_CATEGORY_COUNT (sizeof(builtin_categories) / sizeof(builtin_categories[0]))