Skip to content

Commit 0714dd1

Browse files
committed
Allow limiting the number of events to edit at once
1 parent 8c66133 commit 0714dd1

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

outlook/indico_outlook/plugin.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,11 @@ class SettingsForm(IndicoForm):
5757
timeout = FloatField(_('Request timeout'), [NumberRange(min=0.25)], description=_('Request timeout in seconds'))
5858
max_event_duration = TimeDeltaField(_('Maximum Duration'), [DataRequired()], units=('days',),
5959
description=_('Events lasting longer will not be sent to Exchange'))
60-
60+
max_category_events = IntegerField(
61+
_('Maximum number events to edit in the calendar at once'), [NumberRange(min=-1)],
62+
description=_('If a user favorites a very large category, there may be too many events to edit in the calendar '
63+
'at once. This setting limits the number of upcoming events to edit when a category is '
64+
'favorited/unfavorited. If you set this to -1, all events will be added/deleted.'))
6165

6266
class OutlookUserPreferences(ExtraUserPreferences):
6367
fields = {
@@ -172,7 +176,8 @@ class OutlookPlugin(IndicoPlugin):
172176
'reminder_minutes': 15,
173177
'id_prefix': 'indico_',
174178
'timeout': 3,
175-
'max_event_duration': timedelta(days=30)
179+
'max_event_duration': timedelta(days=30),
180+
'max_category_events': -1,
176181
}
177182
settings_converters = {
178183
'max_event_duration': TimedeltaConverter
@@ -229,6 +234,12 @@ def _user_tracks_favorite_categories(self, user):
229234
return OutlookPlugin.user_settings.get(user, 'favorite_categories',
230235
OutlookPlugin.default_user_settings['favorite_categories'])
231236

237+
def _event_limit(self, events):
238+
limit = OutlookPlugin.settings.get('max_category_events')
239+
if limit == -1:
240+
return events
241+
return events[:limit]
242+
232243
def favorite_event_added(self, user, event, **kwargs):
233244
if not self._user_tracks_favorite_events(user):
234245
return
@@ -252,7 +263,7 @@ def favorite_category_added(self, user, category, **kwargs):
252263
.options(subqueryload('acl_entries'))
253264
.order_by(Event.start_dt, Event.id))
254265
events = [e for e in query if e.can_access(user)]
255-
for event in events:
266+
for event in self._event_limit(events):
256267
self._record_change(event, user, OutlookAction.add)
257268
self.logger.info('Favorite category added: user %s added event %r', user, event)
258269

@@ -269,7 +280,7 @@ def favorite_category_removed(self, user, category, **kwargs):
269280
.options(subqueryload('acl_entries'))
270281
.order_by(Event.start_dt, Event.id))
271282
events = [e for e in query if e.can_access(user)]
272-
for event in events:
283+
for event in self._event_limit(events):
273284
self._record_change(event, user, OutlookAction.remove)
274285
self.logger.info('Favorite category added: user %s added event %r', user, event)
275286

0 commit comments

Comments
 (0)