From 777616d8b0ed8f9b6ce7f454e51ea2711017578b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 6 Mar 2015 23:58:33 +0100 Subject: [PATCH] calendar: Permanently hide dismissed events Currently dismissed events will simply reappear when browsing back and forth between dates, which is clearly broken. Instead, hide events that have been dismissed permanently. For now, we simply store a list of ignored IDs ourselves, until we get API in evolution-data-server to reliably store custom per-event properties. https://bugzilla.gnome.org/show_bug.cgi?id=744927 --- js/ui/calendar.js | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/js/ui/calendar.js b/js/ui/calendar.js index b79045e8f..7fd4622ee 100644 --- a/js/ui/calendar.js +++ b/js/ui/calendar.js @@ -242,7 +242,8 @@ const URLHighlighter = new Lang.Class({ const CalendarEvent = new Lang.Class({ Name: 'CalendarEvent', - _init: function(date, end, summary, allDay) { + _init: function(id, date, end, summary, allDay) { + this.id = id; this.date = date; this.end = end; this.summary = summary; @@ -414,9 +415,10 @@ const DBusEventSource = new Lang.Class({ let a = appointments[n]; let date = new Date(a[4] * 1000); let end = new Date(a[5] * 1000); + let id = a[0]; let summary = a[1]; let allDay = a[3]; - let event = new CalendarEvent(date, end, summary, allDay); + let event = new CalendarEvent(id, date, end, summary, allDay); newEvents.push(event); } newEvents.sort(function(event1, event2) { @@ -1477,6 +1479,15 @@ const EventsSection = new Lang.Class({ this._desktopSettings.connect('changed', Lang.bind(this, this._reloadEvents)); this._eventSource = new EmptyEventSource(); + this._ignoredEvents = new Map(); + + let savedState = global.get_persistent_state('as', 'ignored_events'); + if (savedState) + savedState.deep_unpack().forEach(Lang.bind(this, + function(eventId) { + this._ignoredEvents.set(eventId, true); + })); + this.parent(''); Shell.AppSystem.get_default().connect('installed-changed', @@ -1484,6 +1495,12 @@ const EventsSection = new Lang.Class({ this._appInstalledChanged(); }, + _ignoreEvent: function(event) { + this._ignoredEvents.set(event.id, true); + let savedState = new GLib.Variant('as', [...this._ignoredEvents.keys()]); + global.set_persistent_state('ignored_events', savedState); + }, + setEventSource: function(eventSource) { this._eventSource = eventSource; this._eventSource.connect('changed', Lang.bind(this, this._reloadEvents)); @@ -1526,7 +1543,15 @@ const EventsSection = new Lang.Class({ for (let i = 0; i < events.length; i++) { let event = events[i]; - this.addMessage(new EventMessage(event, this._date), false); + + if (this._ignoredEvents.has(event.id)) + continue; + + let message = new EventMessage(event, this._date); + message.connect('close', Lang.bind(this, function() { + this._ignoreEvent(event); + })); + this.addMessage(message, false); } this._reloading = false;