@@ -36,17 +36,45 @@ def __init__(self, source, client):
3636 self .source = source
3737 self .client = client
3838
39+ self .syncing = False
40+
3941 self .extension = source .get_extension (EDataServer .SOURCE_EXTENSION_CALENDAR )
4042 self .color = self .extension .get_color ()
4143 self .color_prop_listener_id = self .extension .connect ("notify::color" , self .ext_color_prop_changed )
4244
45+ # This process generally won't stay running for more than 30 seconds or so,
46+ # but enabling refresh lets us force a timeout and re-poll.
47+ if self .client .check_capability (ECal .STATIC_CAPABILITY_REFRESH_SUPPORTED ):
48+ self .refresh = self .source .get_extension (EDataServer .SOURCE_EXTENSION_REFRESH )
49+ self .refresh .set_enabled (True )
50+ self .refresh .set_interval_minutes (1 )
51+ self .source .refresh_add_timeout (None , self .on_refresh_timeout )
52+
4353 self .start = None
4454 self .end = None
4555
4656 self .view = None
4757 self .view_cancellable = None
4858 self .events = []
4959
60+ def try_sync (self ):
61+ if self .syncing :
62+ return
63+
64+ if self .client .check_capability (ECal .STATIC_CAPABILITY_REFRESH_SUPPORTED ):
65+ self .source .refresh_force_timeout ()
66+
67+ def on_refresh_timeout (self , source , data = None ):
68+ self .client .refresh (None , self .on_sync_complete )
69+
70+ def on_sync_complete (self , client , result , data = None ):
71+ try :
72+ self .client .refresh_finish (result )
73+ except GLib .Error as e :
74+ print (f"Error refreshing calendar '{ self .source .get_display_name ()} ':" , e .message )
75+
76+ self .syncing = False
77+
5078 def destroy (self ):
5179 self .extension .disconnect (self .color_prop_listener_id )
5280 self .extension = None
@@ -223,6 +251,9 @@ def handle_set_time_range(self, iface, inv, time_since, time_until, force_reload
223251 self .interface .complete_set_time_range (inv )
224252 return True
225253
254+ for calendar in self .calendars .values ():
255+ calendar .try_sync ()
256+
226257 self .current_month_start = time_since
227258 self .current_month_end = time_until
228259
0 commit comments