[gnome-shell/datetime: 5/5] Simplify code for 'This week' / 'Next week' logic
- From: David Zeuthen <davidz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell/datetime: 5/5] Simplify code for 'This week' / 'Next week' logic
- Date: Fri, 28 Jan 2011 19:42:24 +0000 (UTC)
commit e82cbf3cc880087c8341af78b31ae62642fb7e81
Author: David Zeuthen <davidz redhat com>
Date: Fri Jan 28 14:30:52 2011 -0500
Simplify code for 'This week' / 'Next week' logic
Also make the calendar work when there are many all-day events shown. See
http://people.freedesktop.org/~david/many-all-day-events.png
for details.
Signed-off-by: David Zeuthen <davidz redhat com>
js/ui/calendar.js | 33 +++++++++++++++++++--------------
js/ui/dateMenu.js | 2 +-
src/shell-evolution-event-source.c | 14 ++++++++++++--
3 files changed, 32 insertions(+), 17 deletions(-)
---
diff --git a/js/ui/calendar.js b/js/ui/calendar.js
index f803de5..236c3ec 100644
--- a/js/ui/calendar.js
+++ b/js/ui/calendar.js
@@ -41,6 +41,7 @@ function _getBeginningOfDay(date) {
let ret = new Date(date.getTime());
ret.setHours(0);
ret.setMinutes(0);
+ ret.setSeconds(0);
ret.setMilliseconds(0);
return ret;
}
@@ -49,6 +50,7 @@ function _getEndOfDay(date) {
let ret = new Date(date.getTime());
ret.setHours(23);
ret.setMinutes(59);
+ ret.setSeconds(59);
ret.setMilliseconds(999);
return ret;
}
@@ -686,21 +688,24 @@ EventsList.prototype = {
let dayEnd = _getEndOfDay(now);
this._addPeriod(_("Today"), dayBegin, dayEnd, false, true);
- dayBegin.setDate(dayBegin.getDate() + 1);
- dayEnd.setDate(dayEnd.getDate() + 1);
- this._addPeriod(_("Tomorrow"), dayBegin, dayEnd, false, true);
-
- if (dayEnd.getDay() == 6 || dayEnd.getDay() == 0) {
- dayBegin.setDate(dayEnd.getDate() + 1);
- dayEnd.setDate(dayBegin.getDate() + 6 - dayBegin.getDay());
-
- this._addPeriod(_("Next week"), dayBegin, dayEnd, true, false);
- return;
+ let tomorrowBegin = new Date(dayBegin.getTime() + 86400 * 1000);
+ let tomorrowEnd = new Date(dayEnd.getTime() + 86400 * 1000);
+ this._addPeriod(_("Tomorrow"), tomorrowBegin, tomorrowEnd, false, true);
+
+ if (dayEnd.getDay() <= 4) {
+ /* if now is Sunday through Thursday show "This week" and include events up until
+ * and including Saturday
+ */
+ let thisWeekBegin = new Date(dayBegin.getTime() + 2 * 86400 * 1000);
+ let thisWeekEnd = new Date(dayEnd.getTime() + (6 - dayEnd.getDay()) * 86400 * 1000);
+ this._addPeriod(_("This week"), thisWeekBegin, thisWeekEnd, true, false);
} else {
- let d = 6 - dayEnd.getDay() - 1;
- dayBegin.setDate(dayBegin.getDate() + 1);
- dayEnd.setDate(dayEnd.getDate() + 1 + d);
- this._addPeriod(_("This week"), dayBegin, dayEnd, true, false);
+ /* otherwise it's a Friday or Saturday... show "Next week" and include events up
+ * until and including *next* Saturday
+ */
+ let nextWeekBegin = new Date(dayBegin.getTime() + 2 * 86400 * 1000);
+ let nextWeekEnd = new Date(dayEnd.getTime() + (13 - dayEnd.getDay()) * 86400 * 1000);
+ this._addPeriod(_("Next week"), nextWeekBegin, nextWeekEnd, true, false);
}
},
diff --git a/js/ui/dateMenu.js b/js/ui/dateMenu.js
index 5ee3a5b..5009c28 100644
--- a/js/ui/dateMenu.js
+++ b/js/ui/dateMenu.js
@@ -87,7 +87,7 @@ DateMenuButton.prototype = {
item = new PopupMenu.PopupSeparatorMenuItem();
item.setColumnWidths(1);
- vbox.add(item.actor);
+ vbox.add(item.actor, {y_align: St.Align.END, expand: true, y_fill: false});
item = new PopupMenu.PopupMenuItem(_("Date and Time Settings"));
item.connect('activate', Lang.bind(this, this._onPreferencesActivate));
vbox.add(item.actor);
diff --git a/src/shell-evolution-event-source.c b/src/shell-evolution-event-source.c
index 3c080e2..dd2aea9 100644
--- a/src/shell-evolution-event-source.c
+++ b/src/shell-evolution-event-source.c
@@ -168,7 +168,7 @@ shell_evolution_event_source_get_events (ShellEvolutionEventSource *source,
GDateTime *next_date;
g_date_time_get_ymd (cur_date, &year, &mon, &day);
- /* g_print ("y=%04d m=%02d d=%02d: ", year, mon, day); */
+ /* g_print ("y=%04d m=%02d d=%02d\n", year, mon, day); */
/* Silently drop events not in range (see comment in
* shell_evolution_event_source_request_range() above)
@@ -188,9 +188,19 @@ shell_evolution_event_source_get_events (ShellEvolutionEventSource *source,
{
CalendarAppointment *appointment = l->data;
ShellEvolutionEvent *event;
+ gint64 start_time;
+
+ if (appointment->is_all_day)
+ {
+ start_time = g_date_time_to_unix (cur_date) * G_GINT64_CONSTANT (1000);
+ }
+ else
+ {
+ start_time = appointment->start_time * G_GINT64_CONSTANT (1000);
+ }
event = shell_evolution_event_new (appointment->summary,
appointment->is_all_day,
- appointment->start_time * G_GINT64_CONSTANT (1000));
+ start_time);
result = g_list_prepend (result, event);
}
g_slist_foreach (events, (GFunc) calendar_event_free, NULL);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]