aboutsummaryrefslogtreecommitdiffstats
path: root/src/command/StorageCommands.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/command/StorageCommands.cxx')
-rw-r--r--src/command/StorageCommands.cxx96
1 files changed, 48 insertions, 48 deletions
diff --git a/src/command/StorageCommands.cxx b/src/command/StorageCommands.cxx
index ee51c573e..3c11eb0d7 100644
--- a/src/command/StorageCommands.cxx
+++ b/src/command/StorageCommands.cxx
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2003-2014 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
* http://www.musicpd.org
*
* This program is free software; you can redistribute it and/or modify
@@ -21,12 +21,14 @@
#include "config.h"
#include "StorageCommands.hxx"
+#include "Request.hxx"
#include "CommandError.hxx"
-#include "protocol/Result.hxx"
#include "util/UriUtil.hxx"
#include "util/Error.hxx"
+#include "util/ConstBuffer.hxx"
#include "fs/Traits.hxx"
#include "client/Client.hxx"
+#include "client/Response.hxx"
#include "Partition.hxx"
#include "Instance.hxx"
#include "storage/Registry.hxx"
@@ -55,7 +57,7 @@ skip_path(const char *name_utf8)
#endif
static bool
-handle_listfiles_storage(Client &client, StorageDirectoryReader &reader,
+handle_listfiles_storage(Response &r, StorageDirectoryReader &reader,
Error &error)
{
const char *name_utf8;
@@ -63,29 +65,29 @@ handle_listfiles_storage(Client &client, StorageDirectoryReader &reader,
if (skip_path(name_utf8))
continue;
- FileInfo info;
+ StorageFileInfo info;
if (!reader.GetInfo(false, info, error))
continue;
switch (info.type) {
- case FileInfo::Type::OTHER:
+ case StorageFileInfo::Type::OTHER:
/* ignore */
continue;
- case FileInfo::Type::REGULAR:
- client_printf(client, "file: %s\n"
- "size: %" PRIu64 "\n",
- name_utf8,
- info.size);
+ case StorageFileInfo::Type::REGULAR:
+ r.Format("file: %s\n"
+ "size: %" PRIu64 "\n",
+ name_utf8,
+ info.size);
break;
- case FileInfo::Type::DIRECTORY:
- client_printf(client, "directory: %s\n", name_utf8);
+ case StorageFileInfo::Type::DIRECTORY:
+ r.Format("directory: %s\n", name_utf8);
break;
}
if (info.mtime != 0)
- time_print(client, "Last-Modified", info.mtime);
+ time_print(r, "Last-Modified", info.mtime);
}
return true;
@@ -96,58 +98,57 @@ handle_listfiles_storage(Client &client, StorageDirectoryReader &reader,
#endif
static bool
-handle_listfiles_storage(Client &client, Storage &storage, const char *uri,
+handle_listfiles_storage(Response &r, Storage &storage, const char *uri,
Error &error)
{
auto reader = storage.OpenDirectory(uri, error);
if (reader == nullptr)
return false;
- bool success = handle_listfiles_storage(client, *reader, error);
+ bool success = handle_listfiles_storage(r, *reader, error);
delete reader;
return success;
}
CommandResult
-handle_listfiles_storage(Client &client, Storage &storage, const char *uri)
+handle_listfiles_storage(Response &r, Storage &storage, const char *uri)
{
Error error;
- if (!handle_listfiles_storage(client, storage, uri, error))
- return print_error(client, error);
+ if (!handle_listfiles_storage(r, storage, uri, error))
+ return print_error(r, error);
return CommandResult::OK;
}
CommandResult
-handle_listfiles_storage(Client &client, const char *uri)
+handle_listfiles_storage(Response &r, const char *uri)
{
Error error;
Storage *storage = CreateStorageURI(io_thread_get(), uri, error);
if (storage == nullptr) {
if (error.IsDefined())
- return print_error(client, error);
+ return print_error(r, error);
- command_error(client, ACK_ERROR_ARG,
- "Unrecognized storage URI");
+ r.Error(ACK_ERROR_ARG, "Unrecognized storage URI");
return CommandResult::ERROR;
}
- bool success = handle_listfiles_storage(client, *storage, "", error);
+ bool success = handle_listfiles_storage(r, *storage, "", error);
delete storage;
if (!success)
- return print_error(client, error);
+ return print_error(r, error);
return CommandResult::OK;
}
static void
-print_storage_uri(Client &client, const Storage &storage)
+print_storage_uri(Client &client, Response &r, const Storage &storage)
{
std::string uri = storage.MapUTF8("");
if (uri.empty())
return;
- if (PathTraitsFS::IsAbsolute(uri.c_str())) {
+ if (PathTraitsUTF8::IsAbsolute(uri.c_str())) {
/* storage points to local directory */
if (!client.IsLocal())
@@ -163,24 +164,24 @@ print_storage_uri(Client &client, const Storage &storage)
uri = std::move(allocated);
}
- client_printf(client, "storage: %s\n", uri.c_str());
+ r.Format("storage: %s\n", uri.c_str());
}
CommandResult
-handle_listmounts(Client &client, gcc_unused unsigned argc, gcc_unused char *argv[])
+handle_listmounts(Client &client, gcc_unused Request args, Response &r)
{
Storage *_composite = client.partition.instance.storage;
if (_composite == nullptr) {
- command_error(client, ACK_ERROR_NO_EXIST, "No database");
+ r.Error(ACK_ERROR_NO_EXIST, "No database");
return CommandResult::ERROR;
}
CompositeStorage &composite = *(CompositeStorage *)_composite;
- const auto visitor = [&client](const char *mount_uri,
- const Storage &storage){
- client_printf(client, "mount: %s\n", mount_uri);
- print_storage_uri(client, storage);
+ const auto visitor = [&client, &r](const char *mount_uri,
+ const Storage &storage){
+ r.Format("mount: %s\n", mount_uri);
+ print_storage_uri(client, r, storage);
};
composite.VisitMounts(visitor);
@@ -189,21 +190,21 @@ handle_listmounts(Client &client, gcc_unused unsigned argc, gcc_unused char *arg
}
CommandResult
-handle_mount(Client &client, gcc_unused unsigned argc, char *argv[])
+handle_mount(Client &client, Request args, Response &r)
{
Storage *_composite = client.partition.instance.storage;
if (_composite == nullptr) {
- command_error(client, ACK_ERROR_NO_EXIST, "No database");
+ r.Error(ACK_ERROR_NO_EXIST, "No database");
return CommandResult::ERROR;
}
CompositeStorage &composite = *(CompositeStorage *)_composite;
- const char *const local_uri = argv[1];
- const char *const remote_uri = argv[2];
+ const char *const local_uri = args[0];
+ const char *const remote_uri = args[1];
if (*local_uri == 0) {
- command_error(client, ACK_ERROR_ARG, "Bad mount point");
+ r.Error(ACK_ERROR_ARG, "Bad mount point");
return CommandResult::ERROR;
}
@@ -213,7 +214,7 @@ handle_mount(Client &client, gcc_unused unsigned argc, char *argv[])
UpdateQueue::Erase() really gets called for every
unmount, and no Directory disappears recursively
during database update */
- command_error(client, ACK_ERROR_ARG, "Bad mount point");
+ r.Error(ACK_ERROR_ARG, "Bad mount point");
return CommandResult::ERROR;
}
@@ -222,10 +223,9 @@ handle_mount(Client &client, gcc_unused unsigned argc, char *argv[])
error);
if (storage == nullptr) {
if (error.IsDefined())
- return print_error(client, error);
+ return print_error(r, error);
- command_error(client, ACK_ERROR_ARG,
- "Unrecognized storage URI");
+ r.Error(ACK_ERROR_ARG, "Unrecognized storage URI");
return CommandResult::ERROR;
}
@@ -239,7 +239,7 @@ handle_mount(Client &client, gcc_unused unsigned argc, char *argv[])
if (!db.Mount(local_uri, remote_uri, error)) {
composite.Unmount(local_uri);
- return print_error(client, error);
+ return print_error(r, error);
}
// TODO: call Instance::OnDatabaseModified()?
@@ -252,20 +252,20 @@ handle_mount(Client &client, gcc_unused unsigned argc, char *argv[])
}
CommandResult
-handle_unmount(Client &client, gcc_unused unsigned argc, char *argv[])
+handle_unmount(Client &client, Request args, Response &r)
{
Storage *_composite = client.partition.instance.storage;
if (_composite == nullptr) {
- command_error(client, ACK_ERROR_NO_EXIST, "No database");
+ r.Error(ACK_ERROR_NO_EXIST, "No database");
return CommandResult::ERROR;
}
CompositeStorage &composite = *(CompositeStorage *)_composite;
- const char *const local_uri = argv[1];
+ const char *const local_uri = args.front();
if (*local_uri == 0) {
- command_error(client, ACK_ERROR_ARG, "Bad mount point");
+ r.Error(ACK_ERROR_ARG, "Bad mount point");
return CommandResult::ERROR;
}
@@ -287,7 +287,7 @@ handle_unmount(Client &client, gcc_unused unsigned argc, char *argv[])
#endif
if (!composite.Unmount(local_uri)) {
- command_error(client, ACK_ERROR_ARG, "Not a mount point");
+ r.Error(ACK_ERROR_ARG, "Not a mount point");
return CommandResult::ERROR;
}