@@ -57,7 +57,11 @@ class SettingsForm(IndicoForm):
57
57
timeout = FloatField (_ ('Request timeout' ), [NumberRange (min = 0.25 )], description = _ ('Request timeout in seconds' ))
58
58
max_event_duration = TimeDeltaField (_ ('Maximum Duration' ), [DataRequired ()], units = ('days' ,),
59
59
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.' ))
61
65
62
66
class OutlookUserPreferences (ExtraUserPreferences ):
63
67
fields = {
@@ -172,7 +176,8 @@ class OutlookPlugin(IndicoPlugin):
172
176
'reminder_minutes' : 15 ,
173
177
'id_prefix' : 'indico_' ,
174
178
'timeout' : 3 ,
175
- 'max_event_duration' : timedelta (days = 30 )
179
+ 'max_event_duration' : timedelta (days = 30 ),
180
+ 'max_category_events' : - 1 ,
176
181
}
177
182
settings_converters = {
178
183
'max_event_duration' : TimedeltaConverter
@@ -229,6 +234,12 @@ def _user_tracks_favorite_categories(self, user):
229
234
return OutlookPlugin .user_settings .get (user , 'favorite_categories' ,
230
235
OutlookPlugin .default_user_settings ['favorite_categories' ])
231
236
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
+
232
243
def favorite_event_added (self , user , event , ** kwargs ):
233
244
if not self ._user_tracks_favorite_events (user ):
234
245
return
@@ -252,7 +263,7 @@ def favorite_category_added(self, user, category, **kwargs):
252
263
.options (subqueryload ('acl_entries' ))
253
264
.order_by (Event .start_dt , Event .id ))
254
265
events = [e for e in query if e .can_access (user )]
255
- for event in events :
266
+ for event in self . _event_limit ( events ) :
256
267
self ._record_change (event , user , OutlookAction .add )
257
268
self .logger .info ('Favorite category added: user %s added event %r' , user , event )
258
269
@@ -269,7 +280,7 @@ def favorite_category_removed(self, user, category, **kwargs):
269
280
.options (subqueryload ('acl_entries' ))
270
281
.order_by (Event .start_dt , Event .id ))
271
282
events = [e for e in query if e .can_access (user )]
272
- for event in events :
283
+ for event in self . _event_limit ( events ) :
273
284
self ._record_change (event , user , OutlookAction .remove )
274
285
self .logger .info ('Favorite category added: user %s added event %r' , user , event )
275
286
0 commit comments