Allow probing of the filesystem capabilities.

This commit is contained in:
David Given
2022-09-04 20:42:51 +02:00
parent eb55fe1fe3
commit 6c0bb3781a
9 changed files with 79 additions and 13 deletions

View File

@@ -114,6 +114,11 @@ public:
{
}
uint32_t capabilities() const
{
return OP_GETFSDATA | OP_LIST | OP_GETFILE | OP_GETDIRENT;
}
std::map<std::string, std::string> getMetadata()
{
AcornDfsDirectory dir(this);

View File

@@ -56,6 +56,12 @@ public:
{
}
uint32_t capabilities() const
{
return OP_GETFSDATA | OP_CREATE | OP_LIST | OP_GETFILE | OP_PUTFILE |
OP_GETDIRENT;
}
std::map<std::string, std::string> getMetadata() override
{
AdfMount m(this);

View File

@@ -195,6 +195,11 @@ public:
{
}
uint32_t capabilities() const
{
return OP_GETFSDATA | OP_LIST | OP_GETFILE | OP_GETDIRENT;
}
std::map<std::string, std::string> getMetadata() override
{
Directory dir(this);

View File

@@ -82,6 +82,11 @@ public:
{
}
uint32_t capabilities() const
{
return OP_GETFSDATA | OP_LIST | OP_GETFILE | OP_GETDIRENT;
}
std::map<std::string, std::string> getMetadata() override
{
mount();

View File

@@ -36,6 +36,12 @@ public:
{
}
uint32_t capabilities() const
{
return OP_GETFSDATA | OP_CREATE | OP_LIST | OP_GETFILE | OP_PUTFILE |
OP_GETDIRENT;
}
std::map<std::string, std::string> getMetadata() override
{
mount();

View File

@@ -24,6 +24,12 @@ public:
{
}
uint32_t capabilities() const
{
return OP_GETFSDATA | OP_CREATE | OP_LIST | OP_GETFILE | OP_PUTFILE |
OP_GETDIRENT;
}
std::map<std::string, std::string> getMetadata() override
{
HfsMount m(this);

View File

@@ -54,6 +54,11 @@ std::string Path::to_str(const std::string sep) const
return join(*this, sep);
}
uint32_t Filesystem::capabilities() const
{
return 0;
}
void Filesystem::create(bool quick, const std::string& volumeName)
{
throw UnimplementedFilesystemException();

View File

@@ -112,7 +112,25 @@ public:
static constexpr const char* USED_BLOCKS = "used_blocks";
static constexpr const char* BLOCK_SIZE = "block_size";
enum
{
OP_CREATE = 0b0000000000000001,
OP_CHECK = 0b0000000000000010,
OP_LIST = 0b0000000000000100,
OP_GETFILE = 0b0000000000001000,
OP_PUTFILE = 0b0000000000010000,
OP_GETDIRENT = 0b0000000000100000,
OP_CREATEDIR = 0b0000000001000000,
OP_DELETE = 0b0000000010000000,
OP_GETFSDATA = 0b0000000100000000,
OP_PUTFSDATA = 0b0000001000000000,
OP_PUTATTRS = 0b0000010000000000,
};
public:
/* Retrieve capability information. */
virtual uint32_t capabilities() const;
/* Create a filesystem on the disk. */
virtual void create(bool quick, const std::string& volmeName);

View File

@@ -886,19 +886,29 @@ public:
browserToolbar->EnableTool(
browserBackTool->GetId(), _state == STATE_BROWSING_IDLE);
browserToolbar->EnableTool(
browserInfoTool->GetId(), selection.size() == 1);
browserToolbar->EnableTool(
browserOpenTool->GetId(), selection.size() == 1);
browserToolbar->EnableTool(
browserSaveTool->GetId(), selection.size() >= 1);
browserToolbar->EnableTool(
browserNewTool->GetId(), selection.size() <= 1);
browserToolbar->EnableTool(
browserNewDirectoryTool->GetId(), selection.size() <= 1);
browserToolbar->EnableTool(
browserDeleteTool->GetId(), selection.size() >= 1);
browserToolbar->EnableTool(browserFormatTool->GetId(), false);
uint32_t capabilities =
_filesystem ? _filesystem->capabilities() : 0;
browserToolbar->EnableTool(browserInfoTool->GetId(),
(capabilities & Filesystem::OP_GETDIRENT) &&
(selection.size() == 1));
browserToolbar->EnableTool(browserOpenTool->GetId(),
(capabilities & Filesystem::OP_GETFILE) &&
(selection.size() == 1));
browserToolbar->EnableTool(browserSaveTool->GetId(),
(capabilities & Filesystem::OP_GETFILE) &&
(selection.size() >= 1));
browserToolbar->EnableTool(browserNewTool->GetId(),
(capabilities & Filesystem::OP_PUTFILE) &&
(selection.size() <= 1));
browserToolbar->EnableTool(browserNewDirectoryTool->GetId(),
(capabilities & Filesystem::OP_CREATEDIR) &&
(selection.size() <= 1));
browserToolbar->EnableTool(browserDeleteTool->GetId(),
(capabilities & Filesystem::OP_DELETE) &&
(selection.size() >= 1));
browserToolbar->EnableTool(browserFormatTool->GetId(),
capabilities & Filesystem::OP_CREATE);
}
Refresh();