diff --git a/Makefile.common b/Makefile.common index 5122a53591..b205408f41 100644 --- a/Makefile.common +++ b/Makefile.common @@ -339,7 +339,6 @@ ifeq ($(HAVE_MENU_COMMON), 1) menu/menu_entry.o \ menu/menu_navigation.o \ menu/menu_setting.o \ - menu/menu_database.o \ menu/menu_shader.o \ menu/menu_entries_cbs_ok.o \ menu/menu_entries_cbs_cancel.o \ diff --git a/database_info.c b/database_info.c index 747cef4acb..fbb5e8e2da 100644 --- a/database_info.c +++ b/database_info.c @@ -381,3 +381,23 @@ void database_info_list_free(database_info_list_t *database_info_list) free(database_info_list->list); free(database_info_list); } + +void database_playlist_free(content_playlist_t *db_playlist) +{ + if (db_playlist) + content_playlist_free(db_playlist); +} + +bool database_playlist_realloc( + content_playlist_t *db_playlist, + const char *path) +{ + database_playlist_free(db_playlist); + + db_playlist = content_playlist_init(path, 1000); + + if (!db_playlist) + return false; + + return true; +} diff --git a/database_info.h b/database_info.h index 36603469bc..5a6ee42661 100644 --- a/database_info.h +++ b/database_info.h @@ -22,6 +22,7 @@ #include #include #include "libretro-db/libretrodb.h" +#include "playlist.h" #ifdef __cplusplus extern "C" { @@ -107,6 +108,11 @@ void database_info_free(database_info_handle_t *dbl); int database_info_build_query( char *query, size_t len, const char *label, const char *path); +void database_playlist_free(content_playlist_t *db_playlist); + +bool database_playlist_realloc( + content_playlist_t *db_playlist, const char *path); + #ifdef __cplusplus } #endif diff --git a/griffin/griffin.c b/griffin/griffin.c index 63bca3793d..b3f031f20c 100644 --- a/griffin/griffin.c +++ b/griffin/griffin.c @@ -734,7 +734,6 @@ MENU #include "../menu/menu_display.c" #include "../menu/menu_displaylist.c" #include "../menu/menu_animation.c" -#include "../menu/menu_database.c" #include "../menu/drivers/null.c" #endif diff --git a/menu/menu.c b/menu/menu.c index c3b526ebcc..fc8e3c4acd 100644 --- a/menu/menu.c +++ b/menu/menu.c @@ -230,7 +230,7 @@ void menu_free(menu_handle_t *menu) menu_driver_free(menu); #ifdef HAVE_LIBRETRODB - menu_database_free(menu); + database_playlist_free(menu->db_playlist); #endif #ifdef HAVE_DYNAMIC diff --git a/menu/menu_database.c b/menu/menu_database.c deleted file mode 100644 index 31fbaefdad..0000000000 --- a/menu/menu_database.c +++ /dev/null @@ -1,59 +0,0 @@ -/* RetroArch - A frontend for libretro. - * Copyright (C) 2011-2015 - Daniel De Matteis - * - * RetroArch is free software: you can redistribute it and/or modify it under the terms - * of the GNU General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * RetroArch 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 RetroArch. - * If not, see . - */ - -#include "menu.h" -#include "menu_database.h" -#include "menu_list.h" -#include "../playlist.h" -#include - -static void menu_database_playlist_free(menu_handle_t *menu) -{ - if (menu->db_playlist) - content_playlist_free(menu->db_playlist); - menu->db_playlist = NULL; -} - -void menu_database_free(void *data) -{ - menu_handle_t *menu = (menu_handle_t*)data; - if (!menu) - return; - menu_database_playlist_free(menu); -} - -bool menu_database_realloc(const char *path, - bool force) -{ - menu_handle_t *menu = menu_driver_get_ptr(); - if (!menu) - return false; - - if (!strcmp(menu->db_playlist_file, path) && !force) - return true; - - menu_database_playlist_free(menu); - - menu->db_playlist = content_playlist_init(path, - 1000); - - if (!menu->db_playlist) - return false; - - strlcpy(menu->db_playlist_file, path, - sizeof(menu->db_playlist_file)); - - return true; -} diff --git a/menu/menu_database.h b/menu/menu_database.h index 38ab7cb2bc..3dc9f59970 100644 --- a/menu/menu_database.h +++ b/menu/menu_database.h @@ -31,11 +31,6 @@ extern "C" { /* HACK */ extern unsigned int rdb_entry_start_game_selection_ptr; -void menu_database_free(void *data); - -bool menu_database_realloc(const char *path, - bool force); - #ifdef __cplusplus } #endif diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index eac8492c14..dab83a41d2 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -900,6 +900,7 @@ static int create_string_list_rdb_entry_int(const char *desc, const char *label, static int menu_displaylist_parse_database_entry(menu_displaylist_info_t *info) { #ifdef HAVE_LIBRETRODB + bool reallocate_playlist = false; char query[PATH_MAX_LENGTH]; content_playlist_t *playlist; database_info_list_t *db_info = NULL; @@ -922,7 +923,14 @@ static int menu_displaylist_parse_database_entry(menu_displaylist_info_t *info) fill_pathname_join(path_playlist, settings->playlist_directory, path_base, sizeof(path_playlist)); - menu_database_realloc(path_playlist, false); + reallocate_playlist = !(!strcmp(menu->db_playlist_file, path_playlist)); + + if (reallocate_playlist) + { + if (database_playlist_realloc(menu->db_playlist, path_playlist)) + strlcpy(menu->db_playlist_file, path_playlist, + sizeof(menu->db_playlist_file)); + } playlist = menu->db_playlist;