diff --git a/inc/lektor/common.h b/inc/lektor/common.h index d025b87ddb83af9302cfb2b18daafccd867c6782..ec7da1881eff890576009b02b32af5738631f201 100644 --- a/inc/lektor/common.h +++ b/inc/lektor/common.h @@ -18,8 +18,8 @@ #define LKT_DATABASE_NAME_KID "id" #define LKT_DATABASE_NAME_KNAME "source_name" #define LKT_DATABASE_NAME_KTITLE "song_title" -#define LKT_DATABASE_NAME_KCAT "song_type" -#define LKT_DATABASE_NAME_KTYPE "category" +#define LKT_DATABASE_NAME_KCAT "category" +#define LKT_DATABASE_NAME_KTYPE "song_type" #define LKT_DATABASE_NAME_KAUTHOR "author_name" #define LKT_DATABASE_NAME_KAUTHOR_YEAR "author_year" #define LKT_DATABASE_NAME_KLANG "language" diff --git a/inc/lektor/database.h b/inc/lektor/database.h index ed5a5fae6a4423599eca367ba714c44db574a076..38349136e3b336a338748d9dcb583f4ec6335430 100644 --- a/inc/lektor/database.h +++ b/inc/lektor/database.h @@ -24,6 +24,7 @@ struct lkt_queue_state { /* Open correctly a database for lektor. */ bool database_new (sqlite3 **db); +bool database_init (const char *dbpath); bool database_open (sqlite3 *db, const char *dbpath); bool database_attach(sqlite3 *db, const char *name, const char *dbpath); bool database_detach(sqlite3 *db, const char *name); diff --git a/meson.build b/meson.build index a66ecdeb6b38a614941cfa7559d2bb005c210640..a41bd3414023901a1ddadb6df2ee3cca52e391a8 100644 --- a/meson.build +++ b/meson.build @@ -14,9 +14,9 @@ project( 'lektor' ) libdl = meson.get_compiler('c').find_library('dl') -dep_x11 = dependency('x11', required : false) -dep_mpv = dependency('mpv', required : false) -dep_sdl = dependency('sdl2', required : false) +dep_x11 = dependency('x11', required: false) +dep_mpv = dependency('mpv', required: false) +dep_sdl = dependency('sdl2', required: false) ## Get architecture archi = run_command('uname', '-p').stdout().strip() @@ -26,8 +26,8 @@ endif if archi == 'unknown' archi = run_command('arch').stdout().strip() endif -add_global_arguments('-D' + archi + '_ARCH', language : 'c') -add_global_arguments('-D_REENTRANT', language : 'c') +add_global_arguments('-D' + archi + '_ARCH', language: 'c') +add_global_arguments('-D_REENTRANT', language: 'c') ## Sources for mthread mthread_sources = [ 'src/mthread/mthread.c' @@ -68,78 +68,81 @@ core_sources = [ 'src/mkv/bufferfd.c' includes = include_directories('inc') # Server -core_deps = [ dependency('sqlite3', version : '>= 3.31.0') +core_deps = [ dependency('sqlite3', version: '>= 3.31.0') , dependency('libcurl') , dependency('json-c') - , dependency('threads', required : true) + , dependency('threads', required: true) ] common_deps = [ declare_dependency( link_with: static_library( 'common' , files('src/common.c') - , include_directories : includes ) + , include_directories: includes ) , include_directories: includes ) ] mthread_deps = [ declare_dependency( link_with: static_library( 'mthread' , files(mthread_sources) - , include_directories : includes ) + , include_directories: includes ) , include_directories: includes - , dependencies : [ common_deps ] ) ] + , dependencies: [ common_deps ] ) ] + +initsql_deps = [ declare_dependency( link_with: static_library( 'initsql' + , [ custom_target('init.c' + , output: 'sql_init.c' + , input: 'scripts/init.sql' + , command: [find_program('xxd'), '-i', '@INPUT@', '@OUTPUT@']) ] ) ) ] lib = static_library( meson.project_name() , files(core_sources) - , include_directories : includes - , dependencies : [ core_deps, libdl, common_deps, mthread_deps ] + , include_directories: includes + , dependencies: [ core_deps, libdl, common_deps, mthread_deps, initsql_deps ] ) bin_deps = [ declare_dependency( link_with: lib, include_directories: includes) ] srv = executable( meson.project_name() + 'd' , files('src/main/server.c') - , include_directories : includes - , dependencies : [ bin_deps ] - , install : true + , include_directories: includes + , dependencies: [ bin_deps ] + , install: true ) # Admin executable metadata = executable( 'lktadm' , files('src/main/lktadm.c', 'src/cmd.c') , include_directories : includes - , dependencies : [ bin_deps ] - , install : true + , dependencies: [ bin_deps ] + , install: true ) # Client executable lkt = executable( 'lkt' , files('src/main/lkt.c', 'src/cmd.c', 'src/common.c') - , include_directories : includes - , install : true - ) + , include_directories: includes + , install: true ) # X11 window module if dep_x11.found() and dep_mpv.found() lib_mod_x11 = shared_library ( '_module_x11' , files(['src/module/module_x11.c', 'src/module/mpv.c']) - , include_directories : includes - , dependencies : [ dep_x11, dep_mpv ] - , link_with : lib - , install : true - , install_dir : 'lib/lektor' - ) + , include_directories: includes + , dependencies: [ dep_x11, dep_mpv ] + , link_with: lib + , install: true + , install_dir: 'lib/lektor' ) endif # SQL2 window module if dep_sdl.found() and dep_mpv.found() lib_mod_sdl = shared_library ( '_module_sdl2' , files(['src/module/module_sdl2.c', 'src/module/mpv.c']) - , include_directories : includes - , dependencies : [ dep_sdl, dep_mpv ] - , link_with : lib - , install : true - , install_dir : 'lib/lektor' - ) + , include_directories: includes + , dependencies: [ dep_sdl, dep_mpv ] + , link_with: lib + , install: true + , install_dir: 'lib/lektor' ) endif # Install -install_data('scripts/init.sql', install_dir : 'share/lektor') +install_data('scripts/init.sql', install_dir: 'share/lektor') install_man('doc/lektord.1') meson.add_install_script('scripts/install.sh') diff --git a/scripts/init.sql b/scripts/init.sql index 5ef96a0b6b56f9fd7cf6bc1a30f68e0076988237..c7ae6a94c92a20c854a14fb823a52a60583f7523 100644 --- a/scripts/init.sql +++ b/scripts/init.sql @@ -20,7 +20,7 @@ CREATE TABLE IF NOT EXISTS kara , author_year INTEGER CHECK(author_year > 0) , available INTEGER CHECK(available = 0 OR available = 1) DEFAULT 1 NOT NULL , string TEXT GENERATED ALWAYS AS - ( song_type || ' - ' || language || ' / ' || source_name || ' - ' || category || + ( category || ' - ' || language || ' / ' || source_name || ' - ' || song_type || song_number || ' - ' || song_name || ' [ ' || author_name || ' ]' || CASE WHEN available = 0 THEN ' (U)' ELSE '' END ) STORED @@ -32,7 +32,8 @@ CREATE TABLE IF NOT EXISTS kara_type ); INSERT OR REPLACE INTO kara_type (id, name) VALUES - (1, 'vo'), (2, 'va'), (3, 'amv'), (4, 'cdg'), (5, 'autres'), ( 6, 'vocaloid'); + (1, 'ED/d*'), (2, 'OP/d*'), (3, 'AMV'), (4, 'IS'), (5, 'VOCA'), (6, 'LIVE'), + (7, 'CDG'), (8, 'PV'), (9, 'MV'); CREATE TABLE IF NOT EXISTS kara_category ( id INTEGER PRIMARY KEY @@ -40,8 +41,7 @@ CREATE TABLE IF NOT EXISTS kara_category ); INSERT OR REPLACE INTO kara_category (id, name) VALUES - (1, 'ED/d*'), (2, 'OP/d*'), (3, 'AMV'), (4, 'IS'), (5, 'VOCA'), (6, 'LIVE'), - (7, 'CDG'), (8, 'PV'), (9, 'MV'); + (1, 'vo'), (2, 'va'), (3, 'amv'), (4, 'cdg'), (5, 'autres'), ( 6, 'vocaloid'); CREATE TABLE IF NOT EXISTS language ( id INTEGER PRIMARY KEY diff --git a/src/database/open.c b/src/database/open.c index 685d6b8138aa2a026fe088a3a63ee70bc128c9ae..35c2d6129c659bbef82950bbdd4f1a22753ac691 100644 --- a/src/database/open.c +++ b/src/database/open.c @@ -38,6 +38,10 @@ static const char *const SQL_MEM_SCHEM = " , PRIMARY KEY (section, key)" " ) WITHOUT ROWID;\n"; +/* Should be, defined scripts_init_sql and its length scripts_init_sql_len */ +extern unsigned char ___scripts_init_sql[]; +extern int ___scripts_init_sql_len; + #define INVALID_CHARS_DBPATH ":?!'\"" #define HEAP_LIMIT_SOFT 100 * 1024 * 1024 #define HEAP_LIMIT_HARD 150 * 1024 * 1024 @@ -174,3 +178,15 @@ database_detach(sqlite3 *db, const char *name) LOG_INFO_SCT("DB", "Database '%s' detached", name); return true; } + +bool +database_init(const char *dbpath) +{ + sqlite3 *db; + GOTO_IF(SQLITE_OK != sqlite3_open(dbpath, &db), "Failed to open the database", error); + SQLITE_EXEC(db, (const char *) ___scripts_init_sql, error); + LOG_INFO_SCT("DB", "Initialized the 'disk' database successfully, path was '%s'", dbpath); +error: + LOG_ERROR_SCT("DB", "Failed to init the 'disk' database, path was '%s'", dbpath); + return false; +} diff --git a/src/main/lktadm.c b/src/main/lktadm.c index 79be9a80bb20aaeec6dee83a2b88a57c7b910ec5..f7b8e7b167afd0d449a264bcd1ea739da063ef52 100644 --- a/src/main/lktadm.c +++ b/src/main/lktadm.c @@ -130,6 +130,8 @@ init_populate__(struct lkt_cmd_args *args) { UNUSED(args); open_db(); + if (!database_open(db, db_path)) + fail("Failed to open database"); database_update(db, kara_dir); sqlite3_close(db); exit(EXIT_SUCCESS);