mirror of
https://github.com/owntone/owntone-server.git
synced 2025-01-25 21:53:17 -05:00
add db_type and db_parameters for specifying different backend databases
This commit is contained in:
parent
56502cee62
commit
e0ce8f273f
@ -116,11 +116,9 @@ CONFIGELEMENT config_elements[] = {
|
|||||||
{ 1,1,0,CONFIG_TYPE_INT,"port",(void*)&config.port,config_emit_int },
|
{ 1,1,0,CONFIG_TYPE_INT,"port",(void*)&config.port,config_emit_int },
|
||||||
{ 1,1,0,CONFIG_TYPE_STRING,"admin_pw",(void*)&config.adminpassword,config_emit_string },
|
{ 1,1,0,CONFIG_TYPE_STRING,"admin_pw",(void*)&config.adminpassword,config_emit_string },
|
||||||
{ 1,1,0,CONFIG_TYPE_STRING,"mp3_dir",(void*)&config.mp3dir,config_emit_string },
|
{ 1,1,0,CONFIG_TYPE_STRING,"mp3_dir",(void*)&config.mp3dir,config_emit_string },
|
||||||
#ifdef WITH_GDBM
|
|
||||||
{ 1,1,0,CONFIG_TYPE_STRING,"db_dir",(void*)&config.dbdir,config_emit_string },
|
|
||||||
#else
|
|
||||||
{ 1,0,0,CONFIG_TYPE_STRING,"db_dir",(void*)&config.dbdir,config_emit_string },
|
{ 1,0,0,CONFIG_TYPE_STRING,"db_dir",(void*)&config.dbdir,config_emit_string },
|
||||||
#endif
|
{ 1,0,0,CONFIG_TYPE_STRING,"db_type",(void*)&config.dbtype,config_emit_string },
|
||||||
|
{ 1,0,0,CONFIG_TYPE_STRING,"db_parms",(void*)&config.dbparms,config_emit_string },
|
||||||
{ 1,0,0,CONFIG_TYPE_INT,"debuglevel",(void*)&err_debuglevel,config_emit_int },
|
{ 1,0,0,CONFIG_TYPE_INT,"debuglevel",(void*)&err_debuglevel,config_emit_int },
|
||||||
{ 1,1,0,CONFIG_TYPE_STRING,"servername",(void*)&config.servername,config_emit_string },
|
{ 1,1,0,CONFIG_TYPE_STRING,"servername",(void*)&config.servername,config_emit_string },
|
||||||
{ 1,0,0,CONFIG_TYPE_INT,"rescan_interval",(void*)&config.rescan_interval,config_emit_int },
|
{ 1,0,0,CONFIG_TYPE_INT,"rescan_interval",(void*)&config.rescan_interval,config_emit_int },
|
||||||
|
@ -39,7 +39,7 @@
|
|||||||
typedef struct tag_stats {
|
typedef struct tag_stats {
|
||||||
time_t start_time; /**< When the server was started */
|
time_t start_time; /**< When the server was started */
|
||||||
int songs_served; /**< How many songs have been served */
|
int songs_served; /**< How many songs have been served */
|
||||||
|
|
||||||
unsigned int gb_served; /**< How many gigs of data have been served (unused) */
|
unsigned int gb_served; /**< How many gigs of data have been served (unused) */
|
||||||
unsigned int bytes_served; /**< How many bytes of data served (unused) */
|
unsigned int bytes_served; /**< How many bytes of data served (unused) */
|
||||||
} STATS;
|
} STATS;
|
||||||
@ -73,9 +73,11 @@ typedef struct tag_config {
|
|||||||
char *artfilename; /**< What filename to merge coverart with */
|
char *artfilename; /**< What filename to merge coverart with */
|
||||||
char *logfile; /**< What file to use as a logfile */
|
char *logfile; /**< What file to use as a logfile */
|
||||||
char *compdirs; /**< Compilations directories */
|
char *compdirs; /**< Compilations directories */
|
||||||
|
char *dbtype; /**< db backend type */
|
||||||
|
char *dbparms; /**< parameters for the db backend */
|
||||||
char **complist; /**< list of compilation directories */
|
char **complist; /**< list of compilation directories */
|
||||||
STATS stats; /**< Stats structure (see above) */
|
STATS stats; /**< Stats structure (see above) */
|
||||||
WSHANDLE server; /**< webserver handle */
|
WSHANDLE server; /**< webserver handle */
|
||||||
} CONFIG;
|
} CONFIG;
|
||||||
|
|
||||||
extern CONFIG config;
|
extern CONFIG config;
|
||||||
|
@ -276,7 +276,8 @@ char *db_error_list[] = {
|
|||||||
"No rows returned",
|
"No rows returned",
|
||||||
"Invalid playlist id: %d",
|
"Invalid playlist id: %d",
|
||||||
"Invalid song id: %d",
|
"Invalid song id: %d",
|
||||||
"Parse error"
|
"Parse error",
|
||||||
|
"No backend database support for type: %s"
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Globals */
|
/* Globals */
|
||||||
@ -406,34 +407,6 @@ void db_init_once(void) {
|
|||||||
pthread_rwlock_init(&db_rwlock,NULL);
|
pthread_rwlock_init(&db_rwlock,NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the database backend. This should show a friendly error about
|
|
||||||
* what databse types are supported.
|
|
||||||
*
|
|
||||||
* \param type what database backend to use (by friendly name)
|
|
||||||
*/
|
|
||||||
extern int db_set_backend(char *type) {
|
|
||||||
DPRINTF(E_DBG,L_DB,"Setting backend database to %s\n",type);
|
|
||||||
|
|
||||||
if(!db_functions[0].name) {
|
|
||||||
DPRINTF(E_FATAL,L_DB,"No database backends are available. Install sqlite!\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
db_current=&db_functions[0];
|
|
||||||
while((db_current->name) && (strcasecmp(db_current->name,type))) {
|
|
||||||
db_current++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!db_current->name) {
|
|
||||||
DPRINTF(E_WARN,L_DB,"Could not find db backend %s. Aborting.\n",type);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
DPRINTF(E_DBG,L_DB,"Backend database set\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Open the database. This is done before we drop privs, that
|
* Open the database. This is done before we drop privs, that
|
||||||
* way if the database only has root perms, then it can still
|
* way if the database only has root perms, then it can still
|
||||||
@ -441,7 +414,7 @@ extern int db_set_backend(char *type) {
|
|||||||
*
|
*
|
||||||
* \param parameters This is backend-specific (mysql, sqlite, etc)
|
* \param parameters This is backend-specific (mysql, sqlite, etc)
|
||||||
*/
|
*/
|
||||||
int db_open(char **pe, char *parameters) {
|
int db_open(char **pe, char *type, char *parameters) {
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
DPRINTF(E_DBG,L_DB,"Opening database\n");
|
DPRINTF(E_DBG,L_DB,"Opening database\n");
|
||||||
@ -449,8 +422,22 @@ int db_open(char **pe, char *parameters) {
|
|||||||
if(pthread_once(&db_initlock,db_init_once))
|
if(pthread_once(&db_initlock,db_init_once))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
db_current = &db_functions[0];
|
||||||
|
if(type) {
|
||||||
|
while((db_current->name) && (strcasecmp(db_current->name,type))) {
|
||||||
|
db_current++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!db_current->name) {
|
||||||
|
/* end of list -- no match */
|
||||||
|
db_get_error(pe,DB_E_BADPROVIDER,type);
|
||||||
|
return DB_E_BADPROVIDER;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
result=db_current->dbs_open(pe, parameters);
|
result=db_current->dbs_open(pe, parameters);
|
||||||
|
|
||||||
|
|
||||||
DPRINTF(E_DBG,L_DB,"Results: %d\n",result);
|
DPRINTF(E_DBG,L_DB,"Results: %d\n",result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -135,9 +135,7 @@ typedef struct tag_daap_items {
|
|||||||
|
|
||||||
extern DAAP_ITEMS taglist[];
|
extern DAAP_ITEMS taglist[];
|
||||||
|
|
||||||
extern int db_set_backend(char *type);
|
extern int db_open(char **pe, char *type, char *parameters);
|
||||||
|
|
||||||
extern int db_open(char **pe, char *parameters);
|
|
||||||
extern int db_init(int reload);
|
extern int db_init(int reload);
|
||||||
extern int db_deinit(void);
|
extern int db_deinit(void);
|
||||||
|
|
||||||
@ -200,6 +198,7 @@ extern void db_dispose_playlist(M3UFILE *pm3u);
|
|||||||
#define DB_E_INVALID_PLAYLIST 0x06 /**< bad playlist id */
|
#define DB_E_INVALID_PLAYLIST 0x06 /**< bad playlist id */
|
||||||
#define DB_E_INVALID_SONGID 0x07 /**< bad song id */
|
#define DB_E_INVALID_SONGID 0x07 /**< bad song id */
|
||||||
#define DB_E_PARSE 0x08 /**< could not parse result */
|
#define DB_E_PARSE 0x08 /**< could not parse result */
|
||||||
|
#define DB_E_BADPROVIDER 0x09 /**< requested db backend not there */
|
||||||
|
|
||||||
/* describes the individual database handlers */
|
/* describes the individual database handlers */
|
||||||
typedef struct tag_dbinfo {
|
typedef struct tag_dbinfo {
|
||||||
|
@ -360,6 +360,7 @@ int main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
int pid_fd;
|
int pid_fd;
|
||||||
FILE *pid_fp=NULL;
|
FILE *pid_fp=NULL;
|
||||||
|
int err;
|
||||||
char *perr;
|
char *perr;
|
||||||
|
|
||||||
config.use_mdns=1;
|
config.use_mdns=1;
|
||||||
@ -483,7 +484,13 @@ int main(int argc, char *argv[]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* this will require that the db be readable by the runas user */
|
/* this will require that the db be readable by the runas user */
|
||||||
if(db_open(&perr,config.dbdir))
|
if(config.dbtype) {
|
||||||
|
err=db_open(&perr,config.dbtype,config.dbparms);
|
||||||
|
} else {
|
||||||
|
err=db_open(&perr,NULL,config.dbdir);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(err)
|
||||||
DPRINTF(E_FATAL,L_MAIN|L_DB,"Error in db_open: %s\n",perr);
|
DPRINTF(E_FATAL,L_MAIN|L_DB,"Error in db_open: %s\n",perr);
|
||||||
|
|
||||||
/* Initialize the database before starting */
|
/* Initialize the database before starting */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user