From cab84af72e373acca0e88d9b407aa97796c083e0 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 16 Jan 2013 21:46:13 +0100 Subject: Client: move "idle" functions into the class --- src/ClientIdle.cxx | 58 ++++++++++++++++++++++--------------------------- src/ClientIdle.hxx | 13 ----------- src/ClientInternal.hxx | 7 ++++++ src/ClientSubscribe.cxx | 2 +- src/OtherCommands.cxx | 5 ++--- 5 files changed, 36 insertions(+), 49 deletions(-) (limited to 'src') diff --git a/src/ClientIdle.cxx b/src/ClientIdle.cxx index f9818b278..b440a8260 100644 --- a/src/ClientIdle.cxx +++ b/src/ClientIdle.cxx @@ -25,43 +25,36 @@ #include -/** - * Send "idle" response to this client. - */ -static void -client_idle_notify(Client *client) +void +Client::IdleNotify() { - unsigned flags, i; - const char *const* idle_names; - - assert(client->idle_waiting); - assert(client->idle_flags != 0); + assert(idle_waiting); + assert(idle_flags != 0); - flags = client->idle_flags; - client->idle_flags = 0; - client->idle_waiting = false; + unsigned flags = idle_flags; + idle_flags = 0; + idle_waiting = false; - idle_names = idle_get_names(); - for (i = 0; idle_names[i]; ++i) { - if (flags & (1 << i) & client->idle_subscriptions) - client_printf(client, "changed: %s\n", + const char *const*idle_names = idle_get_names(); + for (unsigned i = 0; idle_names[i]; ++i) { + if (flags & (1 << i) & idle_subscriptions) + client_printf(this, "changed: %s\n", idle_names[i]); } - client_puts(client, "OK\n"); - g_timer_start(client->last_activity); + client_puts(this, "OK\n"); + g_timer_start(last_activity); } void -client_idle_add(Client *client, unsigned flags) +Client::IdleAdd(unsigned flags) { - if (client->IsExpired()) + if (IsExpired()) return; - client->idle_flags |= flags; - if (client->idle_waiting - && (client->idle_flags & client->idle_subscriptions)) - client_idle_notify(client); + idle_flags |= flags; + if (idle_waiting && (idle_flags & idle_subscriptions)) + IdleNotify(); } static void @@ -69,7 +62,7 @@ client_idle_callback(Client *client, gpointer user_data) { unsigned flags = GPOINTER_TO_UINT(user_data); - client_idle_add(client, flags); + client->IdleAdd(flags); } void client_manager_idle_add(unsigned flags) @@ -79,15 +72,16 @@ void client_manager_idle_add(unsigned flags) client_list_foreach(client_idle_callback, GUINT_TO_POINTER(flags)); } -bool client_idle_wait(Client *client, unsigned flags) +bool +Client::IdleWait(unsigned flags) { - assert(!client->idle_waiting); + assert(!idle_waiting); - client->idle_waiting = true; - client->idle_subscriptions = flags; + idle_waiting = true; + idle_subscriptions = flags; - if (client->idle_flags & client->idle_subscriptions) { - client_idle_notify(client); + if (idle_flags & idle_subscriptions) { + IdleNotify(); return true; } else return false; diff --git a/src/ClientIdle.hxx b/src/ClientIdle.hxx index a8c08b7aa..eb0efd1bf 100644 --- a/src/ClientIdle.hxx +++ b/src/ClientIdle.hxx @@ -20,11 +20,6 @@ #ifndef MPD_CLIENT_IDLE_HXX #define MPD_CLIENT_IDLE_HXX -class Client; - -void -client_idle_add(Client *client, unsigned flags); - /** * Adds the specified idle flags to all clients and immediately sends * notifications to all waiting clients. @@ -32,12 +27,4 @@ client_idle_add(Client *client, unsigned flags); void client_manager_idle_add(unsigned flags); -/** - * Checks whether the client has pending idle flags. If yes, they are - * sent immediately and "true" is returned". If no, it puts the - * client into waiting mode and returns false. - */ -bool -client_idle_wait(Client *client, unsigned flags); - #endif diff --git a/src/ClientInternal.hxx b/src/ClientInternal.hxx index dee5d9c71..9384b84ee 100644 --- a/src/ClientInternal.hxx +++ b/src/ClientInternal.hxx @@ -112,6 +112,13 @@ public: using BufferedSocket::Write; + /** + * Send "idle" response to this client. + */ + void IdleNotify(); + void IdleAdd(unsigned flags); + bool IdleWait(unsigned flags); + private: /* virtual methods from class BufferedSocket */ virtual InputResult OnSocketInput(const void *data, diff --git a/src/ClientSubscribe.cxx b/src/ClientSubscribe.cxx index d8420266c..307d44990 100644 --- a/src/ClientSubscribe.cxx +++ b/src/ClientSubscribe.cxx @@ -86,7 +86,7 @@ client_push_message(Client *client, const ClientMessage &msg) return false; if (client->messages.empty()) - client_idle_add(client, IDLE_MESSAGE); + client->IdleAdd(IDLE_MESSAGE); client->messages.push_back(msg); return true; diff --git a/src/OtherCommands.cxx b/src/OtherCommands.cxx index b8cc36cc5..7aa162b3a 100644 --- a/src/OtherCommands.cxx +++ b/src/OtherCommands.cxx @@ -41,9 +41,8 @@ extern "C" { #include "Permission.hxx" #include "PlaylistFile.hxx" -#include "ClientIdle.hxx" #include "ClientFile.hxx" -#include "Client.hxx" +#include "ClientInternal.hxx" #include "Idle.hxx" #ifdef ENABLE_SQLITE @@ -302,7 +301,7 @@ handle_idle(Client *client, flags = ~0; /* enable "idle" mode on this client */ - client_idle_wait(client, flags); + client->IdleWait(flags); return COMMAND_RETURN_IDLE; } -- cgit v1.2.3