11
11
html_favicon_url = "https://github.com/tauri-apps/tauri/raw/dev/app-icon.png"
12
12
) ]
13
13
14
- use std:: ffi:: OsString ;
14
+ use std:: { ffi:: OsString , sync :: Arc } ;
15
15
16
+ use semver:: Version ;
16
17
use tauri:: {
17
18
plugin:: { Builder as PluginBuilder , TauriPlugin } ,
18
19
Manager , Runtime ,
@@ -69,7 +70,11 @@ impl<R: Runtime, T: Manager<R>> UpdaterExt<R> for T {
69
70
fn updater_builder ( & self ) -> UpdaterBuilder {
70
71
let app = self . app_handle ( ) ;
71
72
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 ( ) ;
73
78
74
79
let mut builder = UpdaterBuilder :: new (
75
80
package_info. name . clone ( ) ,
@@ -86,6 +91,8 @@ impl<R: Runtime, T: Manager<R>> UpdaterExt<R> for T {
86
91
builder = builder. current_exe_args ( args) ;
87
92
}
88
93
94
+ builder. version_comparator = version_comparator. clone ( ) ;
95
+
89
96
#[ cfg( any(
90
97
target_os = "linux" ,
91
98
target_os = "dragonfly" ,
@@ -116,13 +123,15 @@ impl<R: Runtime, T: Manager<R>> UpdaterExt<R> for T {
116
123
struct UpdaterState {
117
124
target : Option < String > ,
118
125
config : Config ,
126
+ version_comparator : Option < VersionComparator > ,
119
127
}
120
128
121
129
#[ derive( Default ) ]
122
130
pub struct Builder {
123
131
target : Option < String > ,
124
132
pubkey : Option < String > ,
125
133
installer_args : Vec < OsString > ,
134
+ default_version_comparator : Option < VersionComparator > ,
126
135
}
127
136
128
137
impl Builder {
@@ -163,9 +172,20 @@ impl Builder {
163
172
self
164
173
}
165
174
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
+
166
185
pub fn build < R : Runtime > ( self ) -> TauriPlugin < R , Config > {
167
186
let pubkey = self . pubkey ;
168
187
let target = self . target ;
188
+ let version_comparator = self . default_version_comparator ;
169
189
let installer_args = self . installer_args ;
170
190
PluginBuilder :: < R , Config > :: new ( "updater" )
171
191
. setup ( move |app, api| {
@@ -176,7 +196,11 @@ impl Builder {
176
196
if let Some ( windows) = & mut config. windows {
177
197
windows. installer_args . extend_from_slice ( & installer_args) ;
178
198
}
179
- app. manage ( UpdaterState { target, config } ) ;
199
+ app. manage ( UpdaterState {
200
+ target,
201
+ config,
202
+ version_comparator,
203
+ } ) ;
180
204
Ok ( ( ) )
181
205
} )
182
206
. invoke_handler ( tauri:: generate_handler![
0 commit comments