diff --git a/src/db.c b/src/db.c index 44dcf26f..00b868bc 100644 --- a/src/db.c +++ b/src/db.c @@ -339,8 +339,8 @@ db_purge_cruft(time_t ref) char *queries[3] = { NULL, NULL, NULL }; char *queries_tmpl[3] = { - "DELETE FROM playlistitems WHERE playlistid IN (SELECT id FROM playlists WHERE db_timestamp < %" PRIi64 ");", - "DELETE FROM playlists WHERE db_timestamp < %" PRIi64 ";", + "DELETE FROM playlistitems WHERE playlistid IN (SELECT id FROM playlists WHERE id <> 1 AND db_timestamp < %" PRIi64 ");", + "DELETE FROM playlists WHERE id <> 1 AND db_timestamp < %" PRIi64 ";", "DELETE FROM files WHERE db_timestamp < %" PRIi64 ";" }; @@ -556,12 +556,22 @@ db_build_query_plitems(struct query_params *qp, char **q) return -1; } - if (qp->filter) - count = sqlite3_mprintf("SELECT COUNT(*) FROM files JOIN playlistitems ON files.path = playlistitems.filepath" - " WHERE playlistitems.playlistid = %d AND files.disabled = 0 AND %s;", qp->pl_id, qp->filter); + if (qp->pl_id == 1) + { + if (qp->filter) + count = sqlite3_mprintf("SELECT COUNT(*) FROM files WHERE disabled = 0 AND %s;", qp->filter); + else + count = sqlite3_mprintf("SELECT COUNT(*) FROM files WHERE disabled = 0;"); + } else - count = sqlite3_mprintf("SELECT COUNT(*) FROM files JOIN playlistitems ON files.path = playlistitems.filepath" - " WHERE playlistitems.playlistid = %d AND files.disabled = 0;", qp->pl_id); + { + if (qp->filter) + count = sqlite3_mprintf("SELECT COUNT(*) FROM files JOIN playlistitems ON files.path = playlistitems.filepath" + " WHERE playlistitems.playlistid = %d AND files.disabled = 0 AND %s;", qp->pl_id, qp->filter); + else + count = sqlite3_mprintf("SELECT COUNT(*) FROM files JOIN playlistitems ON files.path = playlistitems.filepath" + " WHERE playlistitems.playlistid = %d AND files.disabled = 0;", qp->pl_id); + } if (!count) { @@ -1869,7 +1879,11 @@ db_pl_fetch_byquery(char *query) return NULL; } - pli->items = db_pl_count_items(pli->id); + /* Playlist 1: all files */ + if (pli->id == 1) + pli->items = db_files_get_count(); + else + pli->items = db_pl_count_items(pli->id); return pli; } @@ -2876,6 +2890,10 @@ db_perthread_deinit(void) " libidx INTEGER NOT NULL" \ ");" +#define Q_PL1 \ + "INSERT INTO playlists (id, title, type, query, db_timestamp, path, idx)" \ + " VALUES(1, 'Library', 1, '1', 0, '', 0);" + #define I_PATH \ "CREATE INDEX IF NOT EXISTS idx_path ON files(path, idx);" @@ -2929,6 +2947,21 @@ db_create_tables(void) } } + ret = db_get_count("SELECT COUNT(*) FROM playlists WHERE id = 1;"); + if (ret != 1) + { + DPRINTF(E_DBG, L_DB, "Creating default playlist\n"); + + ret = sqlite3_exec(hdl, Q_PL1, NULL, NULL, &errmsg); + if (ret != SQLITE_OK) + { + DPRINTF(E_FATAL, L_DB, "Could not add default playlist: %s\n", errmsg); + + sqlite3_free(errmsg); + return -1; + } + } + ret = db_get_count("SELECT COUNT(*) FROM admin WHERE key = 'schema_version';"); if (ret != 1) {