1+ use std:: time:: { SystemTime , UNIX_EPOCH } ;
2+
13use tauri:: { AppHandle , Manager } ;
4+ use url:: Url ;
25
36pub fn show_main_window < F > ( app_handle : & AppHandle , log : F )
47where
@@ -50,8 +53,13 @@ pub fn navigate_main_window_to_backend(
5053 app_handle : & AppHandle ,
5154 backend_url : & str ,
5255) -> Result < ( ) , String > {
56+ let cache_buster = SystemTime :: now ( )
57+ . duration_since ( UNIX_EPOCH )
58+ . map ( |duration| duration. as_millis ( ) )
59+ . unwrap_or_default ( ) ;
60+ let navigation_url = backend_navigation_url ( backend_url, cache_buster) ;
5361 let backend_url_json =
54- serde_json:: to_string ( backend_url ) . unwrap_or_else ( |_| "\" /\" " . to_string ( ) ) ;
62+ serde_json:: to_string ( & navigation_url ) . unwrap_or_else ( |_| "\" /\" " . to_string ( ) ) ;
5563 let Some ( window) = app_handle. get_webview_window ( "main" ) else {
5664 return Err ( "Main window is unavailable after backend startup." . to_string ( ) ) ;
5765 } ;
@@ -61,3 +69,33 @@ pub fn navigate_main_window_to_backend(
6169 . eval ( & js)
6270 . map_err ( |error| format ! ( "Failed to navigate to backend dashboard: {error}" ) )
6371}
72+
73+ fn backend_navigation_url ( backend_url : & str , cache_buster : u128 ) -> String {
74+ let Ok ( mut url) = Url :: parse ( backend_url) else {
75+ return backend_url. to_string ( ) ;
76+ } ;
77+ url. query_pairs_mut ( )
78+ . append_pair ( "_desktop_boot" , & cache_buster. to_string ( ) ) ;
79+ url. into ( )
80+ }
81+
82+ #[ cfg( test) ]
83+ mod tests {
84+ use super :: backend_navigation_url;
85+
86+ #[ test]
87+ fn backend_navigation_adds_a_document_cache_buster ( ) {
88+ assert_eq ! (
89+ backend_navigation_url( "http://127.0.0.1:6185" , 1234 ) ,
90+ "http://127.0.0.1:6185/?_desktop_boot=1234"
91+ ) ;
92+ }
93+
94+ #[ test]
95+ fn backend_navigation_preserves_existing_query_parameters ( ) {
96+ assert_eq ! (
97+ backend_navigation_url( "http://127.0.0.1:6185/?channel=stable" , 1234 ) ,
98+ "http://127.0.0.1:6185/?channel=stable&_desktop_boot=1234"
99+ ) ;
100+ }
101+ }
0 commit comments