mirror of
https://github.com/claunia/romrepomgr.git
synced 2025-12-16 19:24:51 +00:00
Add mount and umount functions for winfsp implementation.
This commit is contained in:
@@ -6,6 +6,7 @@ namespace RomRepoMgr.Core.Filesystem
|
|||||||
public class Vfs : IDisposable
|
public class Vfs : IDisposable
|
||||||
{
|
{
|
||||||
Fuse _fuse;
|
Fuse _fuse;
|
||||||
|
Winfsp _winfsp;
|
||||||
|
|
||||||
public static bool IsAvailable => Winfsp.IsAvailable || Fuse.IsAvailable;
|
public static bool IsAvailable => Winfsp.IsAvailable || Fuse.IsAvailable;
|
||||||
|
|
||||||
@@ -13,13 +14,13 @@ namespace RomRepoMgr.Core.Filesystem
|
|||||||
|
|
||||||
public event EventHandler<System.EventArgs> Umounted;
|
public event EventHandler<System.EventArgs> Umounted;
|
||||||
|
|
||||||
public void MountTo(string result)
|
public void MountTo(string mountPoint)
|
||||||
{
|
{
|
||||||
if(Fuse.IsAvailable)
|
if(Fuse.IsAvailable)
|
||||||
{
|
{
|
||||||
_fuse = new Fuse
|
_fuse = new Fuse
|
||||||
{
|
{
|
||||||
MountPoint = result
|
MountPoint = mountPoint
|
||||||
};
|
};
|
||||||
|
|
||||||
Task.Run(() =>
|
Task.Run(() =>
|
||||||
@@ -29,12 +30,29 @@ namespace RomRepoMgr.Core.Filesystem
|
|||||||
Umounted?.Invoke(this, System.EventArgs.Empty);
|
Umounted?.Invoke(this, System.EventArgs.Empty);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
else if(Winfsp.IsAvailable)
|
||||||
|
{
|
||||||
|
_winfsp = new Winfsp();
|
||||||
|
bool ret = _winfsp.Mount(mountPoint);
|
||||||
|
|
||||||
|
if(ret)
|
||||||
|
return;
|
||||||
|
|
||||||
|
_winfsp = null;
|
||||||
|
Umounted?.Invoke(this, System.EventArgs.Empty);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Umounted?.Invoke(this, System.EventArgs.Empty);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Umount()
|
public void Umount()
|
||||||
{
|
{
|
||||||
_fuse?.Umount();
|
_fuse?.Umount();
|
||||||
_fuse = null;
|
_fuse = null;
|
||||||
|
_winfsp?.Umount();
|
||||||
|
_winfsp = null;
|
||||||
|
|
||||||
|
Umounted?.Invoke(this, System.EventArgs.Empty);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,10 +1,13 @@
|
|||||||
using System;
|
using System;
|
||||||
using Fsp;
|
using Fsp;
|
||||||
|
using Fsp.Interop;
|
||||||
|
|
||||||
namespace RomRepoMgr.Core.Filesystem
|
namespace RomRepoMgr.Core.Filesystem
|
||||||
{
|
{
|
||||||
public class Winfsp : FileSystemBase
|
public class Winfsp : FileSystemBase
|
||||||
{
|
{
|
||||||
|
FileSystemHost _host;
|
||||||
|
|
||||||
public static bool IsAvailable
|
public static bool IsAvailable
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
@@ -24,5 +27,27 @@ namespace RomRepoMgr.Core.Filesystem
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal bool Mount(string mountPoint)
|
||||||
|
{
|
||||||
|
_host = new FileSystemHost(this);
|
||||||
|
int ret = _host.Mount(mountPoint);
|
||||||
|
|
||||||
|
if(ret == STATUS_SUCCESS)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
_host = null;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void Umount() => _host?.Unmount();
|
||||||
|
|
||||||
|
public override int SetVolumeLabel(string VolumeLabel, out VolumeInfo VolumeInfo)
|
||||||
|
{
|
||||||
|
VolumeInfo = default;
|
||||||
|
|
||||||
|
return STATUS_MEDIA_WRITE_PROTECTED;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user