/* vi:set noet ts=8 sts=8 sw=8:
*
* PMS <<Practical Music Search>>
* Copyright (C) 2006-2015 Kim Tore Jensen
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*
* conn.cpp
* connection handle to MPD
*/
#include <mpd/client.h>
#include "conn.h"
#include "pms.h"
extern Pms * pms;
Connection::Connection(string n_hostname, long n_port, long n_timeout)
{
this->host = n_hostname;
this->port = static_cast<unsigned int>(n_port);
this->timeout = static_cast<int>(n_timeout);
this->handle = NULL;
this->fd = -1;
}
Connection::~Connection()
{
this->disconnect();
}
/*
* Returns connection state
*/
bool
Connection::connected()
{
if (handle == NULL) {
return false;
}
return (mpd_connection_get_error(handle) == MPD_ERROR_SUCCESS);
}
/**
* Clear any non-fatal error
*/
bool
Connection::clear_error()
{
return mpd_connection_clear_error(handle);
}
int Connection::connect()
{
enum mpd_error err;
disconnect();
pms->log(MSG_DEBUG, 0, "Connecting to %s:%d, handle=%p...\n", host.c_str(), port, handle);
if ((handle = mpd_connection_new(host.c_str(), port, timeout)) == NULL) {
fprintf(stderr, "Out of memory\n");
abort();
}
err = mpd_connection_get_error(handle);
fd = mpd_connection_get_fd(handle);
pms->log(MSG_DEBUG, 0, "New connection handle is %p, error %d\n", handle, err);
return err;
}
/**
* FIXME: return value void
*/
int Connection::disconnect()
{
if (handle != NULL) {
pms->log(MSG_DEBUG, 0, "Closing connection to MPD server.\n");
mpd_connection_free(handle);
handle = NULL;
fd = -1;
pms->comm->set_is_idle(false);
}
return 0;
}
/**
* Return the file descriptor to the MPD socket.
*/
int
Connection::get_mpd_file_descriptor()
{
return fd;
}
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"
Clone this repository using HTTP(S):
git clone https://code.reversed.top/user/xaizek/pms
Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@code.reversed.top/user/xaizek/pms
You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a
pull request:
... clone the repository ...
... make some changes and some commits ...
git push origin master