1111 html_favicon_url = "https://github.com/tauri-apps/tauri/raw/dev/app-icon.png"
1212) ]
1313
14- use std:: ffi:: OsString ;
14+ use std:: { ffi:: OsString , sync :: Arc } ;
1515
16+ use semver:: Version ;
1617use tauri:: {
1718 plugin:: { Builder as PluginBuilder , TauriPlugin } ,
1819 Manager , Runtime ,
@@ -69,7 +70,11 @@ impl<R: Runtime, T: Manager<R>> UpdaterExt<R> for T {
6970 fn updater_builder ( & self ) -> UpdaterBuilder {
7071 let app = self . app_handle ( ) ;
7172 let package_info = app. package_info ( ) ;
72- let UpdaterState { config, target } = self . state :: < UpdaterState > ( ) . inner ( ) ;
73+ let UpdaterState {
74+ config,
75+ target,
76+ version_comparator,
77+ } = self . state :: < UpdaterState > ( ) . inner ( ) ;
7378
7479 let mut builder = UpdaterBuilder :: new (
7580 package_info. name . clone ( ) ,
@@ -86,6 +91,8 @@ impl<R: Runtime, T: Manager<R>> UpdaterExt<R> for T {
8691 builder = builder. current_exe_args ( args) ;
8792 }
8893
94+ builder. version_comparator = version_comparator. clone ( ) ;
95+
8996 #[ cfg( any(
9097 target_os = "linux" ,
9198 target_os = "dragonfly" ,
@@ -116,13 +123,15 @@ impl<R: Runtime, T: Manager<R>> UpdaterExt<R> for T {
116123struct UpdaterState {
117124 target : Option < String > ,
118125 config : Config ,
126+ version_comparator : Option < VersionComparator > ,
119127}
120128
121129#[ derive( Default ) ]
122130pub struct Builder {
123131 target : Option < String > ,
124132 pubkey : Option < String > ,
125133 installer_args : Vec < OsString > ,
134+ default_version_comparator : Option < VersionComparator > ,
126135}
127136
128137impl Builder {
@@ -163,9 +172,20 @@ impl Builder {
163172 self
164173 }
165174
175+ pub fn default_version_comparator <
176+ F : Fn ( Version , RemoteRelease ) -> bool + Send + Sync + ' static ,
177+ > (
178+ mut self ,
179+ f : F ,
180+ ) -> Self {
181+ self . default_version_comparator . replace ( Arc :: new ( f) ) ;
182+ self
183+ }
184+
166185 pub fn build < R : Runtime > ( self ) -> TauriPlugin < R , Config > {
167186 let pubkey = self . pubkey ;
168187 let target = self . target ;
188+ let version_comparator = self . default_version_comparator ;
169189 let installer_args = self . installer_args ;
170190 PluginBuilder :: < R , Config > :: new ( "updater" )
171191 . setup ( move |app, api| {
@@ -176,7 +196,11 @@ impl Builder {
176196 if let Some ( windows) = & mut config. windows {
177197 windows. installer_args . extend_from_slice ( & installer_args) ;
178198 }
179- app. manage ( UpdaterState { target, config } ) ;
199+ app. manage ( UpdaterState {
200+ target,
201+ config,
202+ version_comparator,
203+ } ) ;
180204 Ok ( ( ) )
181205 } )
182206 . invoke_handler ( tauri:: generate_handler![
0 commit comments