@@ -212,6 +212,7 @@ enum Cmd {
212
212
enum Event {
213
213
Changed ,
214
214
Items ( MounterItems ) ,
215
+ MountResult ( MounterItem , Result < bool , String > ) ,
215
216
NetworkAuth ( String , MounterAuth , mpsc:: Sender < MounterAuth > ) ,
216
217
NetworkResult ( String , Result < bool , String > ) ,
217
218
}
@@ -324,7 +325,7 @@ impl Gvfs {
324
325
event_tx. send ( Event :: Items ( items ( & monitor, IconSizes :: default ( ) ) ) ) . unwrap ( ) ;
325
326
}
326
327
Cmd :: Mount ( mounter_item) => {
327
- let MounterItem :: Gvfs ( item) = mounter_item else { continue } ;
328
+ let MounterItem :: Gvfs ( ref item) = mounter_item else { continue } ;
328
329
let ItemKind :: Volume = item. kind else { continue } ;
329
330
for ( i, volume) in monitor. volumes ( ) . into_iter ( ) . enumerate ( ) {
330
331
if i != item. index {
@@ -338,14 +339,24 @@ impl Gvfs {
338
339
}
339
340
340
341
log:: info!( "mount {}" , name) ;
342
+ //TODO: do not use name as a URI for mount_op
343
+ let mount_op = mount_op ( name. to_string ( ) , event_tx. clone ( ) ) ;
344
+ let event_tx = event_tx. clone ( ) ;
345
+ let mounter_item = mounter_item. clone ( ) ;
341
346
VolumeExt :: mount (
342
347
& volume,
343
348
gio:: MountMountFlags :: NONE ,
344
- //TODO: gio::MountOperation needed for network shares with auth
345
- gio:: MountOperation :: NONE ,
349
+ Some ( & mount_op) ,
346
350
gio:: Cancellable :: NONE ,
347
- move |result| {
348
- log:: info!( "mount {}: result {:?}" , name, result) ;
351
+ move |res| {
352
+ log:: info!( "mount {}: result {:?}" , name, res) ;
353
+ event_tx. send ( Event :: MountResult ( mounter_item, match res {
354
+ Ok ( ( ) ) => Ok ( true ) ,
355
+ Err ( err) => match err. kind :: < gio:: IOErrorEnum > ( ) {
356
+ Some ( gio:: IOErrorEnum :: FailedHandled ) => Ok ( false ) ,
357
+ _ => Err ( format ! ( "{}" , err) )
358
+ }
359
+ } ) ) . unwrap ( ) ;
349
360
} ,
350
361
) ;
351
362
}
@@ -355,7 +366,7 @@ impl Gvfs {
355
366
let mount_op = mount_op ( uri. clone ( ) , event_tx. clone ( ) ) ;
356
367
let event_tx = event_tx. clone ( ) ;
357
368
file. mount_enclosing_volume (
358
- gio:: MountMountFlags :: empty ( ) ,
369
+ gio:: MountMountFlags :: NONE ,
359
370
Some ( & mount_op) ,
360
371
gio:: Cancellable :: NONE ,
361
372
move |res| {
@@ -499,6 +510,10 @@ impl Mounter for Gvfs {
499
510
match event {
500
511
Event :: Changed => command_tx. send ( Cmd :: Rescan ) . unwrap ( ) ,
501
512
Event :: Items ( items) => output. send ( MounterMessage :: Items ( items) ) . await . unwrap ( ) ,
513
+ Event :: MountResult ( item, res) => output
514
+ . send ( MounterMessage :: MountResult ( item, res) )
515
+ . await
516
+ . unwrap ( ) ,
502
517
Event :: NetworkAuth ( uri, auth, auth_tx) => output
503
518
. send ( MounterMessage :: NetworkAuth ( uri, auth, auth_tx) )
504
519
. await
0 commit comments