StickerDatabase: return std::string
This commit is contained in:
parent
e452d1f5b4
commit
c85af12d45
@ -28,7 +28,7 @@
|
|||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
char *
|
std::string
|
||||||
sticker_song_get_value(const Song *song, const char *name)
|
sticker_song_get_value(const Song *song, const char *name)
|
||||||
{
|
{
|
||||||
assert(song != NULL);
|
assert(song != NULL);
|
||||||
|
@ -20,6 +20,10 @@
|
|||||||
#ifndef MPD_SONG_STICKER_HXX
|
#ifndef MPD_SONG_STICKER_HXX
|
||||||
#define MPD_SONG_STICKER_HXX
|
#define MPD_SONG_STICKER_HXX
|
||||||
|
|
||||||
|
#include "Compiler.h"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
struct Song;
|
struct Song;
|
||||||
struct Directory;
|
struct Directory;
|
||||||
struct sticker;
|
struct sticker;
|
||||||
@ -28,7 +32,8 @@ struct sticker;
|
|||||||
* Returns one value from a song's sticker record. The caller must
|
* Returns one value from a song's sticker record. The caller must
|
||||||
* free the return value with g_free().
|
* free the return value with g_free().
|
||||||
*/
|
*/
|
||||||
char *
|
gcc_pure
|
||||||
|
std::string
|
||||||
sticker_song_get_value(const Song *song, const char *name);
|
sticker_song_get_value(const Song *song, const char *name);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -65,16 +65,15 @@ handle_sticker_song(Client *client, int argc, char *argv[])
|
|||||||
if (song == nullptr)
|
if (song == nullptr)
|
||||||
return print_error(client, error);
|
return print_error(client, error);
|
||||||
|
|
||||||
char *value = sticker_song_get_value(song, argv[4]);
|
const auto value = sticker_song_get_value(song, argv[4]);
|
||||||
db->ReturnSong(song);
|
db->ReturnSong(song);
|
||||||
if (value == NULL) {
|
if (value.empty()) {
|
||||||
command_error(client, ACK_ERROR_NO_EXIST,
|
command_error(client, ACK_ERROR_NO_EXIST,
|
||||||
"no such sticker");
|
"no such sticker");
|
||||||
return COMMAND_RETURN_ERROR;
|
return COMMAND_RETURN_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
sticker_print_value(client, argv[4], value);
|
sticker_print_value(client, argv[4], value.c_str());
|
||||||
g_free(value);
|
|
||||||
|
|
||||||
return COMMAND_RETURN_OK;
|
return COMMAND_RETURN_OK;
|
||||||
/* list song song_id */
|
/* list song song_id */
|
||||||
|
@ -29,7 +29,6 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
#include <glib.h>
|
|
||||||
#include <sqlite3.h>
|
#include <sqlite3.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
@ -172,12 +171,11 @@ sticker_enabled(void)
|
|||||||
return sticker_db != NULL;
|
return sticker_db != NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *
|
std::string
|
||||||
sticker_load_value(const char *type, const char *uri, const char *name)
|
sticker_load_value(const char *type, const char *uri, const char *name)
|
||||||
{
|
{
|
||||||
sqlite3_stmt *const stmt = sticker_stmt[STICKER_SQL_GET];
|
sqlite3_stmt *const stmt = sticker_stmt[STICKER_SQL_GET];
|
||||||
int ret;
|
int ret;
|
||||||
char *value;
|
|
||||||
|
|
||||||
assert(sticker_enabled());
|
assert(sticker_enabled());
|
||||||
assert(type != NULL);
|
assert(type != NULL);
|
||||||
@ -185,42 +183,41 @@ sticker_load_value(const char *type, const char *uri, const char *name)
|
|||||||
assert(name != NULL);
|
assert(name != NULL);
|
||||||
|
|
||||||
if (*name == 0)
|
if (*name == 0)
|
||||||
return NULL;
|
return std::string();
|
||||||
|
|
||||||
sqlite3_reset(stmt);
|
sqlite3_reset(stmt);
|
||||||
|
|
||||||
ret = sqlite3_bind_text(stmt, 1, type, -1, NULL);
|
ret = sqlite3_bind_text(stmt, 1, type, -1, NULL);
|
||||||
if (ret != SQLITE_OK) {
|
if (ret != SQLITE_OK) {
|
||||||
LogError(sticker_db, "sqlite3_bind_text() failed");
|
LogError(sticker_db, "sqlite3_bind_text() failed");
|
||||||
return NULL;
|
return std::string();
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = sqlite3_bind_text(stmt, 2, uri, -1, NULL);
|
ret = sqlite3_bind_text(stmt, 2, uri, -1, NULL);
|
||||||
if (ret != SQLITE_OK) {
|
if (ret != SQLITE_OK) {
|
||||||
LogError(sticker_db, "sqlite3_bind_text() failed");
|
LogError(sticker_db, "sqlite3_bind_text() failed");
|
||||||
return NULL;
|
return std::string();
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = sqlite3_bind_text(stmt, 3, name, -1, NULL);
|
ret = sqlite3_bind_text(stmt, 3, name, -1, NULL);
|
||||||
if (ret != SQLITE_OK) {
|
if (ret != SQLITE_OK) {
|
||||||
LogError(sticker_db, "sqlite3_bind_text() failed");
|
LogError(sticker_db, "sqlite3_bind_text() failed");
|
||||||
return NULL;
|
return std::string();
|
||||||
}
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
ret = sqlite3_step(stmt);
|
ret = sqlite3_step(stmt);
|
||||||
} while (ret == SQLITE_BUSY);
|
} while (ret == SQLITE_BUSY);
|
||||||
|
|
||||||
|
std::string value;
|
||||||
if (ret == SQLITE_ROW) {
|
if (ret == SQLITE_ROW) {
|
||||||
/* record found */
|
/* record found */
|
||||||
value = g_strdup((const char*)sqlite3_column_text(stmt, 0));
|
value = (const char*)sqlite3_column_text(stmt, 0);
|
||||||
} else if (ret == SQLITE_DONE) {
|
} else if (ret == SQLITE_DONE) {
|
||||||
/* no record found */
|
/* no record found */
|
||||||
value = NULL;
|
|
||||||
} else {
|
} else {
|
||||||
/* error */
|
/* error */
|
||||||
LogError(sticker_db, "sqlite3_step() failed");
|
LogError(sticker_db, "sqlite3_step() failed");
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sqlite3_reset(stmt);
|
sqlite3_reset(stmt);
|
||||||
@ -523,8 +520,8 @@ sticker_get_value(const struct sticker *sticker, const char *name)
|
|||||||
void
|
void
|
||||||
sticker_foreach(const struct sticker *sticker,
|
sticker_foreach(const struct sticker *sticker,
|
||||||
void (*func)(const char *name, const char *value,
|
void (*func)(const char *name, const char *value,
|
||||||
gpointer user_data),
|
void *user_data),
|
||||||
gpointer user_data)
|
void *user_data)
|
||||||
{
|
{
|
||||||
for (const auto &i : sticker->table)
|
for (const auto &i : sticker->table)
|
||||||
func(i.first.c_str(), i.second.c_str(), user_data);
|
func(i.first.c_str(), i.second.c_str(), user_data);
|
||||||
@ -548,8 +545,8 @@ sticker_load(const char *type, const char *uri)
|
|||||||
bool
|
bool
|
||||||
sticker_find(const char *type, const char *base_uri, const char *name,
|
sticker_find(const char *type, const char *base_uri, const char *name,
|
||||||
void (*func)(const char *uri, const char *value,
|
void (*func)(const char *uri, const char *value,
|
||||||
gpointer user_data),
|
void *user_data),
|
||||||
gpointer user_data)
|
void *user_data)
|
||||||
{
|
{
|
||||||
sqlite3_stmt *const stmt = sticker_stmt[STICKER_SQL_FIND];
|
sqlite3_stmt *const stmt = sticker_stmt[STICKER_SQL_FIND];
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -44,6 +44,8 @@
|
|||||||
|
|
||||||
#include "Compiler.h"
|
#include "Compiler.h"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
class Error;
|
class Error;
|
||||||
class Path;
|
class Path;
|
||||||
struct sticker;
|
struct sticker;
|
||||||
@ -72,10 +74,10 @@ bool
|
|||||||
sticker_enabled(void);
|
sticker_enabled(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns one value from an object's sticker record. The caller must
|
* Returns one value from an object's sticker record. Returns an
|
||||||
* free the return value with g_free().
|
* empty string if the value doesn't exist.
|
||||||
*/
|
*/
|
||||||
char *
|
std::string
|
||||||
sticker_load_value(const char *type, const char *uri, const char *name);
|
sticker_load_value(const char *type, const char *uri, const char *name);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user