From adc3a3b5c72f389d295fe0ab71db6f1aa8bfbf82 Mon Sep 17 00:00:00 2001 From: pk910 Date: Mon, 19 Sep 2011 02:42:55 +0200 Subject: [PATCH] load all languages on startup --- lang.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ lang.h | 3 +++ main.c | 2 ++ 3 files changed, 57 insertions(+) diff --git a/lang.c b/lang.c index 3acd066..e515c2b 100644 --- a/lang.c +++ b/lang.c @@ -1,6 +1,7 @@ #include "lang.h" #include "UserNode.h" #include "DBHelper.h" +#include "mysqlConn.h" #define DEFAULT_LANG_TAG "EN" #define DEFAULT_LANG_NAME "English" @@ -16,6 +17,16 @@ void free_lang() { } +void load_languages() { + MYSQL_RES *res; + MYSQL_ROW row; + printf_mysql_query("SELECT `lang`, `text` FROM `language` WHERE `ident` = 'name'"); + res = mysql_use(); + while((row = mysql_fetch_row(res)) != NULL) { + load_language(row[0], row[1]); + } +} + static struct language* add_language(char *langtag, char *langname) { int cindex; for(cindex = 0; cindex < MAXLANGUAGES; cindex++) { @@ -42,6 +53,34 @@ static int get_entry_index(const char *ident) { return (underscore[1] - 'A'); } +void load_language(char *tag, char *name) { + struct language *lang = get_language_by_tag(tag); + if(lang == get_default_language()) return; + if(lang) { + //remove all entrys + int cindex; + struct language_table *entry, *next; + for(cindex = 0; cindex < 27; cindex++) { + for(entry = lang->entrys[cindex]; entry; entry = next) { + next = entry->next; + free(entry->ident); + free(entry->text); + free(entry); + } + lang->entrys[cindex] = NULL; + } + } else + lang = add_language(tag, name); + if(!lang) return; + MYSQL_RES *res; + MYSQL_ROW row; + printf_mysql_query("SELECT `ident`, `text` FROM `language` WHERE `lang` = '%s' AND `ident` != 'name'", escape_string(tag)); + res = mysql_use(); + while((row = mysql_fetch_row(res)) != NULL) { + register_language_string(lang, row[0], row[1]); + } +} + struct language* get_language_by_tag(char *tag) { int cindex; for(cindex = 0; cindex < MAXLANGUAGES; cindex++) { @@ -88,6 +127,19 @@ void register_default_language_table(const struct default_language_entry *msgtab } } +void register_language_string(struct language *lang, char *ident, char *text) { + int cindex = get_entry_index(ident); + struct language_table *lang_entry = malloc(sizeof(*lang_entry)); + if (!lang_entry) { + perror("malloc() failed"); + return; + } + lang_entry->ident = strdup(ident); + lang_entry->text = strdup(text); + lang_entry->next = lang->entrys[cindex]; + lang->entrys[cindex] = lang_entry; +} + char *get_language_string(struct UserNode *user, const char* msg_ident) { struct language* lang; if((user->flags & USERFLAG_ISAUTHED)) { diff --git a/lang.h b/lang.h index f2dd4af..4aabc8a 100644 --- a/lang.h +++ b/lang.h @@ -28,6 +28,9 @@ void free_lang(); struct language* get_language_by_tag(char *tag); struct language* get_language_by_name(char *name); struct language* get_default_language(); +void load_languages(); +void load_language(char *tag, char *name); +void register_language_string(struct language *lang, char *ident, char *text); void register_default_language_table(const struct default_language_entry *msgtab); char *get_language_string(struct UserNode *user, const char* msg_ident); char *build_language_string(struct UserNode *user, char *buffer, const char *msg_ident, ...); diff --git a/main.c b/main.c index 73b17ff..2fcc3db 100644 --- a/main.c +++ b/main.c @@ -48,6 +48,8 @@ int main(void) init_tools(); init_bots(); + load_languages(); + time_t socket_wait; while(1) { socket_wait = time(0) + SOCKET_SELECT_TIME; -- 2.20.1