From: Andre Date: Fri, 10 Mar 2006 20:11:36 +0000 (+0100) Subject: Rename random_dbtool.c to random_selector.c X-Git-Tag: v0.2.11~16 X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=commitdiff_plain;h=bb406379164df28e66c0c320780095721ddc938a Rename random_dbtool.c to random_selector.c --- diff --git a/configure.ac b/configure.ac index 587e22f8..e05765ec 100644 --- a/configure.ac +++ b/configure.ac @@ -72,8 +72,8 @@ audiod_errlist_objs="audiod exec close_on_fork signal string daemon stat net audiod_ldflags="" server_cmdline_objs="server.cmdline" -server_errlist_objs="server mp3 afs command net string signal random_dbtool time daemon stat - crypt http_send db close_on_fork playlist_selector ipc" +server_errlist_objs="server mp3 afs command net string signal random_selector + time daemon stat crypt http_send db close_on_fork playlist_selector ipc" server_ldflags="" ########################################################################### ssl diff --git a/error.h b/error.h index a753bc45..c7c9aeba 100644 --- a/error.h +++ b/error.h @@ -23,7 +23,7 @@ enum para_subsystem {SS_RECV, SS_NET, SS_ORTP_RECV, SS_AUDIOD, SS_EXEC, SS_CLOSE_ON_FORK, SS_SIGNAL, SS_STRING, SS_DAEMON, SS_STAT, SS_TIME, SS_GRAB_CLIENT, SS_HTTP_RECV, SS_RECV_COMMON, SS_FILTER_CHAIN, SS_WAV, SS_COMPRESS, SS_OGGDEC, SS_FILTER, - SS_COMMAND, SS_RANDOM_DBTOOL, SS_PLAYLIST_SELECTOR, SS_CRYPT, + SS_COMMAND, SS_RANDOM_SELECTOR, SS_PLAYLIST_SELECTOR, SS_CRYPT, SS_HTTP_SEND, SS_ORTP_SEND, SS_DB, SS_OGG, SS_MP3, SS_MP3DEC, SS_SERVER, SS_AFS, SS_MYSQL, SS_IPC, SS_RINGBUFFER}; #define NUM_SS (SS_RINGBUFFER + 1) @@ -186,7 +186,7 @@ extern const char **para_errlist[]; PARA_ERROR(WRITE_OK, "can not check whether fd is writable"), \ -#define RANDOM_DBTOOL_ERRORS \ +#define RANDOM_SELECTOR_ERRORS \ PARA_ERROR(FILE_COUNT, "audio file count exceeded"), \ PARA_ERROR(NOTHING_FOUND, "no audio files found"), \ @@ -343,7 +343,7 @@ SS_ENUM(OGG); SS_ENUM(SERVER); SS_ENUM(AFS); SS_ENUM(COMMAND); -SS_ENUM(RANDOM_DBTOOL); +SS_ENUM(RANDOM_SELECTOR); SS_ENUM(PLAYLIST_SELECTOR); SS_ENUM(CRYPT); SS_ENUM(HTTP_SEND); diff --git a/mysql.c b/mysql.c index 61d9cfdf..9292ab29 100644 --- a/mysql.c +++ b/mysql.c @@ -2514,7 +2514,7 @@ static void shutdown_connection(void) * Check the command line options and initialize all function pointers of \a db. * Connect to the mysql server and initialize the dbinfo string. * - * \sa struct audio_file_selector, misc_meta_data::dbinfo, random_dbtool.c + * \sa struct audio_file_selector, misc_meta_data::dbinfo, random_selector.c */ int mysql_selector_init(struct audio_file_selector *db) { diff --git a/playlist_selector.c b/playlist_selector.c index 47fb2699..f5241d69 100644 --- a/playlist_selector.c +++ b/playlist_selector.c @@ -275,7 +275,8 @@ void pls_update_audio_file(char *audio_file) * * Init all function pointers of \a db * - * \sa struct audio_file_selector, misc_meta_data::dbinfo, mysql.c random_dbtool.c + * \sa struct audio_file_selector, misc_meta_data::dbinfo, mysql.c + * random_selector.c. */ int playlist_selector_init(struct audio_file_selector *db) { diff --git a/random_dbtool.c b/random_dbtool.c deleted file mode 100644 index c860c039..00000000 --- a/random_dbtool.c +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright (C) 2004-2006 Andre Noll - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. - */ - -/** \file random_dbtool.c Simple database tool implementation. Feel free to modify. */ - -#include /* gettimeofday */ -#include "server.cmdline.h" -#include "server.h" -#include "db.h" -#include "error.h" -#include "net.h" -#include "string.h" - -static int com_random_info(int, int, char **); -extern struct gengetopt_args_info conf; -extern struct misc_meta_data *mmd; - -static unsigned int num_audio_files, audio_file_count; -static char **audio_file_list; - -static int count_audio_files(__unused const char *dir, __unused const char *name) -{ - num_audio_files++; - return 1; -} - -static int remember_file(const char *dir, const char *name) -{ - if (audio_file_count >= num_audio_files) - return -E_FILE_COUNT; - audio_file_list[audio_file_count] = make_message("%s/%s", dir, name); - audio_file_count++; - return 1; -} - -/* array of commands that are supported by this database tool */ -static struct server_command cmds[] = { -{ -.name = "random_info", -.handler = com_random_info, -.perms = 0, -.description = "about the random database tool", -.synopsis = "random_info", -.help = - -"Select a random file under the given directory" -}, { -.name = NULL, -} -}; - -static int com_random_info(int fd, __unused int argc, __unused char *argv[]) -{ - return send_buffer(fd, "Don't use for huge directories as it is " - "very inefficient in this case.\n"); -} - -/* - * Load a list of all audio files into memory and chose num of them randomly. - * Called by server to determine next audio file to be streamed. - */ -static char **random_get_audio_file_list(unsigned int num) -{ - int i, ret; - unsigned int len; - char **ret_list = NULL; /* what we are going to return */ - - audio_file_list = NULL; - num_audio_files = 0; - /* first run, just count all audio files. dopey */ - ret = find_audio_files(conf.random_dir_arg, count_audio_files); - if (ret < 0) - goto out; - ret = -E_NOTHING_FOUND; - if (!num_audio_files) - goto out; - /* yeah, that doesn't scale, also dopey */ - audio_file_list = para_malloc(num_audio_files * sizeof(char *)); - audio_file_count = 0; - /* second run (hot dentry cache, hopefully), fill audio_file_list */ - ret = find_audio_files(conf.random_dir_arg, remember_file); - if (ret < 0) - goto out; - /* careful, files might got deleted underneath */ - num_audio_files = audio_file_count; /* can only decrease */ - len = MIN(num, num_audio_files); - ret = -E_NOTHING_FOUND; - if (!len) /* nothing found, return NULL */ - goto out; - /* success, return NULL-terminated list */ - ret_list = para_calloc((len + 1) * sizeof(char *)); - for (i = 0; i < len; i++) { /* choose randomly */ - int r = (int) ((num_audio_files + 0.0) * (rand() - / (RAND_MAX + 1.0))); - ret_list[i] = para_strdup(audio_file_list[r]); - } -out: - if (audio_file_list) { - for (i = 0; i < num_audio_files; i++) - free(audio_file_list[i]); - free(audio_file_list); - } -// if (ret < 0) -// PARA_ERROR_LOG("%s\n", PARA_STRERROR(-ret)); - return ret_list; -} - -static void random_shutdown(void) -{ -} - -/** random's (constant) database info text */ -#define DBINFO "dbinfo1:database info? You're kidding. I'm still dopey!\ndbinfo2:\ndbinfo3:\n" - -/** - * the init function for the random database tool - * - * Init all function pointers of \a db, init the dbinfo text and seed the - * PRNG. - * - * \sa struct audio_file_selector, misc_meta_data::dbinfo, mysql.c - */ -int random_selector_init(struct audio_file_selector *db) -{ - struct timeval now; - - PARA_INFO_LOG("%s", "registering random handlers ;)\n"); - sprintf(mmd->dbinfo, DBINFO); - gettimeofday(&now, NULL); - srand(now.tv_usec); - db->cmd_list = cmds; - db->get_audio_file_list = random_get_audio_file_list; - db->shutdown = random_shutdown; - return 1; -} diff --git a/random_selector.c b/random_selector.c new file mode 100644 index 00000000..43cddb4a --- /dev/null +++ b/random_selector.c @@ -0,0 +1,150 @@ +/* + * Copyright (C) 2004-2006 Andre Noll + * + * 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 2 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, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/** \file random_selector.c An audio file selector which chooses files by random */ + +#include /* gettimeofday */ +#include "server.cmdline.h" +#include "server.h" +#include "db.h" +#include "error.h" +#include "net.h" +#include "string.h" + +static int com_random_info(int, int, char **); +extern struct gengetopt_args_info conf; +extern struct misc_meta_data *mmd; + +static unsigned int num_audio_files, audio_file_count; +static char **audio_file_list; + +static int count_audio_files(__unused const char *dir, __unused const char *name) +{ + num_audio_files++; + return 1; +} + +static int remember_file(const char *dir, const char *name) +{ + if (audio_file_count >= num_audio_files) + return -E_FILE_COUNT; + audio_file_list[audio_file_count] = make_message("%s/%s", dir, name); + audio_file_count++; + return 1; +} + +/* array of commands that are supported by this selector */ +static struct server_command cmds[] = { +{ +.name = "random_info", +.handler = com_random_info, +.perms = 0, +.description = "about the random database tool", +.synopsis = "random_info", +.help = + +"Select a random file under the given directory" +}, { +.name = NULL, +} +}; + +static int com_random_info(int fd, __unused int argc, __unused char *argv[]) +{ + return send_buffer(fd, "Don't use for huge directories as it is " + "very inefficient in this case.\n"); +} + +/* + * Load a list of all audio files into memory and chose num of them randomly. + * Called by server to determine next audio file to be streamed. + */ +static char **random_get_audio_file_list(unsigned int num) +{ + int i, ret; + unsigned int len; + char **ret_list = NULL; /* what we are going to return */ + + audio_file_list = NULL; + num_audio_files = 0; + /* first run, just count all audio files. dopey */ + ret = find_audio_files(conf.random_dir_arg, count_audio_files); + if (ret < 0) + goto out; + ret = -E_NOTHING_FOUND; + if (!num_audio_files) + goto out; + /* yeah, that doesn't scale, also dopey */ + audio_file_list = para_malloc(num_audio_files * sizeof(char *)); + audio_file_count = 0; + /* second run (hot dentry cache, hopefully), fill audio_file_list */ + ret = find_audio_files(conf.random_dir_arg, remember_file); + if (ret < 0) + goto out; + /* careful, files might got deleted underneath */ + num_audio_files = audio_file_count; /* can only decrease */ + len = MIN(num, num_audio_files); + ret = -E_NOTHING_FOUND; + if (!len) /* nothing found, return NULL */ + goto out; + /* success, return NULL-terminated list */ + ret_list = para_calloc((len + 1) * sizeof(char *)); + for (i = 0; i < len; i++) { /* choose randomly */ + int r = (int) ((num_audio_files + 0.0) * (rand() + / (RAND_MAX + 1.0))); + ret_list[i] = para_strdup(audio_file_list[r]); + } +out: + if (audio_file_list) { + for (i = 0; i < num_audio_files; i++) + free(audio_file_list[i]); + free(audio_file_list); + } +// if (ret < 0) +// PARA_ERROR_LOG("%s\n", PARA_STRERROR(-ret)); + return ret_list; +} + +static void random_shutdown(void) +{ +} + +/** random's (constant) database info text */ +#define DBINFO "dbinfo1:database info? You're kidding. I'm still dopey!\ndbinfo2:\ndbinfo3:\n" + +/** + * the init function for the random database tool + * + * Init all function pointers of \a db, init the dbinfo text and seed the + * PRNG. + * + * \sa struct audio_file_selector, misc_meta_data::dbinfo, mysql.c + */ +int random_selector_init(struct audio_file_selector *db) +{ + struct timeval now; + + PARA_INFO_LOG("%s", "registering random handlers ;)\n"); + sprintf(mmd->dbinfo, DBINFO); + gettimeofday(&now, NULL); + srand(now.tv_usec); + db->cmd_list = cmds; + db->get_audio_file_list = random_get_audio_file_list; + db->shutdown = random_shutdown; + return 1; +}