From e0065b8343bc963a89556449e00f1d20086cc1f1 Mon Sep 17 00:00:00 2001
From: Daniel Kamil Kozar <dkk089@gmail.com>
Date: Sat, 15 Dec 2018 16:26:37 +0100
Subject: [PATCH] Wrap container definitions into a structure

---
 containers.c | 25 +++++++++++++++++++++++++
 containers.h |  8 ++++++++
 scanner.c    | 33 ++++++---------------------------
 3 files changed, 39 insertions(+), 27 deletions(-)

diff --git a/containers.c b/containers.c
index f5cece1..19a0bb1 100644
--- a/containers.c
+++ b/containers.c
@@ -23,6 +23,31 @@
 #include "containers.h"
 #include "log.h"
 
+const struct container_s containers[] = {
+		{ "0","-1",   "root" },
+		{ MUSIC_ID, "0", "Music" },
+		{ MUSIC_ALL_ID, MUSIC_ID, "All Music" },
+		{ MUSIC_GENRE_ID, MUSIC_ID, "Genre" },
+		{ MUSIC_ARTIST_ID, MUSIC_ID, "Artist" },
+		{ MUSIC_ALBUM_ID, MUSIC_ID, "Album" },
+		{ MUSIC_DIR_ID, MUSIC_ID, "Folders" },
+		{ MUSIC_PLIST_ID, MUSIC_ID, "Playlists" },
+
+		{ VIDEO_ID, "0", "Video" },
+		{ VIDEO_ALL_ID, VIDEO_ID, "All Video" },
+		{ VIDEO_DIR_ID, VIDEO_ID, "Folders" },
+
+		{ IMAGE_ID, "0", "Pictures" },
+		{ IMAGE_ALL_ID, IMAGE_ID, "All Pictures" },
+		{ IMAGE_DATE_ID, IMAGE_ID, "Date Taken" },
+		{ IMAGE_CAMERA_ID, IMAGE_ID, "Camera" },
+		{ IMAGE_DIR_ID, IMAGE_ID, "Folders" },
+
+		{ BROWSEDIR_ID, "0", "Browse Folders" },
+
+		{ 0, 0, 0 }
+};
+
 #define NINETY_DAYS "7776000"
 
 const char *music_id = MUSIC_ID;
diff --git a/containers.h b/containers.h
index aef77c5..1fcf7cd 100644
--- a/containers.h
+++ b/containers.h
@@ -16,6 +16,14 @@
  * along with MiniDLNA. If not, see <http://www.gnu.org/licenses/>.
  */
 
+struct container_s {
+	const char *object_id;
+	const char *parent_id;
+	const char *name;
+};
+
+extern const struct container_s containers[];
+
 struct magic_container_s {
 	const char *name;
 	const char *objectid_match;
diff --git a/scanner.c b/scanner.c
index a730567..eb26c9e 100644
--- a/scanner.c
+++ b/scanner.c
@@ -529,30 +529,7 @@ insert_file(const char *name, const char *path, const char *parentID, int object
 int
 CreateDatabase(void)
 {
-	int ret, i;
-	const char *containers[] = { "0","-1",   "root",
-	                        MUSIC_ID, "0", _("Music"),
-	                    MUSIC_ALL_ID, MUSIC_ID, _("All Music"),
-	                  MUSIC_GENRE_ID, MUSIC_ID, _("Genre"),
-	                 MUSIC_ARTIST_ID, MUSIC_ID, _("Artist"),
-	                  MUSIC_ALBUM_ID, MUSIC_ID, _("Album"),
-	                    MUSIC_DIR_ID, MUSIC_ID, _("Folders"),
-	                  MUSIC_PLIST_ID, MUSIC_ID, _("Playlists"),
-
-	                        VIDEO_ID, "0", _("Video"),
-	                    VIDEO_ALL_ID, VIDEO_ID, _("All Video"),
-	                    VIDEO_DIR_ID, VIDEO_ID, _("Folders"),
-
-	                        IMAGE_ID, "0", _("Pictures"),
-	                    IMAGE_ALL_ID, IMAGE_ID, _("All Pictures"),
-	                   IMAGE_DATE_ID, IMAGE_ID, _("Date Taken"),
-	                 IMAGE_CAMERA_ID, IMAGE_ID, _("Camera"),
-	                    IMAGE_DIR_ID, IMAGE_ID, _("Folders"),
-
-	                    BROWSEDIR_ID, "0", _("Browse Folders"),
-			0 };
-
-	ret = sql_exec(db, create_objectTable_sqlite);
+	int ret = sql_exec(db, create_objectTable_sqlite);
 	if( ret != SQLITE_OK )
 		goto sql_failed;
 	ret = sql_exec(db, create_detailTable_sqlite);
@@ -576,16 +553,18 @@ CreateDatabase(void)
 	ret = sql_exec(db, "INSERT into SETTINGS values ('UPDATE_ID', '0')");
 	if( ret != SQLITE_OK )
 		goto sql_failed;
-	for( i=0; containers[i]; i=i+3 )
+	for( int i=0; containers[i].name; ++i )
 	{
+		const struct container_s *c = &containers[i];
+		const char *name = _(c->name);
 		ret = sql_exec(db, "INSERT into OBJECTS (OBJECT_ID, PARENT_ID, DETAIL_ID, CLASS, NAME)"
 		                   " values "
 		                   "('%s', '%s', %lld, 'container.storageFolder', '%q')",
-		                   containers[i], containers[i+1], GetFolderMetadata(containers[i+2], NULL, NULL, NULL, 0), containers[i+2]);
+		                   c->object_id, c->parent_id, GetFolderMetadata(name, NULL, NULL, NULL, 0), name);
 		if( ret != SQLITE_OK )
 			goto sql_failed;
 	}
-	for( i=0; magic_containers[i].objectid_match; i++ )
+	for( int i=0; magic_containers[i].objectid_match; i++ )
 	{
 		struct magic_container_s *magic = &magic_containers[i];
 		if (!magic->name)