From 350b6c1d0b4c1859d4d1be64f3a520100948c122 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kjetil=20=C3=98rbekk?= Date: Sun, 7 Sep 2008 18:19:03 +0200 Subject: - Moved mfs_cleanup_db code to its own file --- include/mfs_cleanup_db.h | 29 +++++++++++++++ src/mfs_cleanup_db.c | 96 ++++++++++++++++++++++++++++++++++++++++++++++++ src/mfs_subr.c | 73 ++---------------------------------- 3 files changed, 128 insertions(+), 70 deletions(-) create mode 100644 include/mfs_cleanup_db.h create mode 100644 src/mfs_cleanup_db.c diff --git a/include/mfs_cleanup_db.h b/include/mfs_cleanup_db.h new file mode 100644 index 0000000..24e977a --- /dev/null +++ b/include/mfs_cleanup_db.h @@ -0,0 +1,29 @@ +/* + * Musicfs is a FUSE module implementing a media filesystem in userland. + * Copyright (C) 2008 Ulf Lilleengen, Kjetil Ørbekk + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License version + * 2, as published by the Free Software Foundation. + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * A copy of the license can typically be found in COPYING + */ + +#ifndef _MFS_CLEANUP_H_ +#define _MFS_CLEANUP_H_ +struct fuse_args; + +#include + +void mfs_cleanup_db(sqlite3 *handle); + +#endif diff --git a/src/mfs_cleanup_db.c b/src/mfs_cleanup_db.c new file mode 100644 index 0000000..3ce2ff3 --- /dev/null +++ b/src/mfs_cleanup_db.c @@ -0,0 +1,96 @@ +/* + * Musicfs is a FUSE module implementing a media filesystem in userland. + * Copyright (C) 2008 Ulf Lilleengen, Kjetil Ørbekk + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License version + * 2, as published by the Free Software Foundation. + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * A copy of the license can typically be found in COPYING + */ + +#include +#include + +#include +#include + +extern char *db_path; + +/* + * Clean up the database: + * + * - Remove disabled paths + * - Remove songs in disabled paths + * - Remove unused artists and genres + */ +void +mfs_cleanup_db(sqlite3 *handle) +{ + DEBUG("cleaning up db\n"); + /* sqlite doesn't support deleting from multiple tables at the same time :-( */ + sqlite3_stmt *st, *st_; + int res, res_; + const char *path; + + + /* Removed songs from inactive paths */ + res = sqlite3_prepare_v2(handle, "SELECT path FROM path WHERE " + "active = 0", -1, &st, NULL); + if (res != SQLITE_OK) { + DEBUG("Error preparing statement: %s\n", + sqlite3_errmsg(handle)); + return; + } + res = sqlite3_step(st); + + while (res == SQLITE_ROW) { + path = (const char*)sqlite3_column_text(st, 0); + + res_ = sqlite3_prepare_v2(handle, "DELETE FROM song WHERE " + "filepath LIKE (?||'%')", -1, &st_, NULL); + if (res_ != SQLITE_OK) { + DEBUG("Error preparing statement: %s\n", + sqlite3_errmsg(handle)); + return; + } + + DEBUG("removing songs from '%s'\n", path); + sqlite3_bind_text(st_, 1, path, -1, SQLITE_TRANSIENT); + res_ = sqlite3_step(st_); + if (res_ != SQLITE_DONE) { + DEBUG("Error deleting '%s' from database: %s\n", + path, sqlite3_errmsg(handle)); + } + sqlite3_finalize(st_); + + res = sqlite3_step(st); + } + sqlite3_finalize(st); + + /* Remove the actual paths */ + res = sqlite3_prepare_v2(handle, "DELETE FROM path WHERE " + "active = 0", -1, &st, NULL); + if (res != SQLITE_OK) { + DEBUG("Error preparing statement: %s\n", + sqlite3_errmsg(handle)); + return; + } + res = sqlite3_step(st); + if (res != SQLITE_DONE) { + DEBUG("Error deleting inactive paths from db: %s\n", + sqlite3_errmsg(handle)); + return; + } + sqlite3_finalize(st); +} + diff --git a/src/mfs_subr.c b/src/mfs_subr.c index 4ddd81e..c669497 100644 --- a/src/mfs_subr.c +++ b/src/mfs_subr.c @@ -33,11 +33,12 @@ #include #include #include - #include + +#include #include #include -#include +#include #define MFS_HANDLE ((void*)-1) @@ -147,74 +148,6 @@ mfs_insert_path(const char *path, sqlite3 *handle) return (0); } -/* - * Clean up the database: - * - * - Remove disabled paths - * - Remove songs in disabled paths - * - Remove unused artists and genres - */ -void -mfs_cleanup_db(sqlite3 *handle) -{ - DEBUG("cleaning up db\n"); - /* sqlite doesn't support deleting from multiple tables at the same time :-( */ - sqlite3_stmt *st, *st_; - int res, res_; - const char *path; - - - /* Removed songs from inactive paths */ - res = sqlite3_prepare_v2(handle, "SELECT path FROM path WHERE " - "active = 0", -1, &st, NULL); - if (res != SQLITE_OK) { - DEBUG("Error preparing statement: %s\n", - sqlite3_errmsg(handle)); - return; - } - res = sqlite3_step(st); - - while (res == SQLITE_ROW) { - path = (const char*)sqlite3_column_text(st, 0); - - res_ = sqlite3_prepare_v2(handle, "DELETE FROM song WHERE " - "filepath LIKE (?||'%')", -1, &st_, NULL); - if (res_ != SQLITE_OK) { - DEBUG("Error preparing statement: %s\n", - sqlite3_errmsg(handle)); - return; - } - - DEBUG("removing songs from '%s'\n", path); - sqlite3_bind_text(st_, 1, path, -1, SQLITE_TRANSIENT); - res_ = sqlite3_step(st_); - if (res_ != SQLITE_DONE) { - DEBUG("Error deleting '%s' from database: %s\n", - path, sqlite3_errmsg(handle)); - } - sqlite3_finalize(st_); - - res = sqlite3_step(st); - } - sqlite3_finalize(st); - - /* Remove the actual paths */ - res = sqlite3_prepare_v2(handle, "DELETE FROM path WHERE " - "active = 0", -1, &st, NULL); - if (res != SQLITE_OK) { - DEBUG("Error preparing statement: %s\n", - sqlite3_errmsg(handle)); - return; - } - res = sqlite3_step(st); - if (res != SQLITE_DONE) { - DEBUG("Error deleting inactive paths from db: %s\n", - sqlite3_errmsg(handle)); - return; - } - sqlite3_finalize(st); -} - /* * Reload the configuration from $HOME/.mfsrc * -- cgit v1.2.3