From 7d0e9e526f0d62f19cd48799f8a23cf008e00dc9 Mon Sep 17 00:00:00 2001
From: Gary Buhrmaster <gary.buhrmaster@gmail.com>
Date: Sat, 13 Jun 2020 00:18:29 +0000
Subject: [PATCH] Resolve TODO in metadatagrabber to initialize static QMap

---
 .../libs/libmythmetadata/metadatagrabber.cpp  | 78 +++++--------------
 1 file changed, 21 insertions(+), 57 deletions(-)

diff --git a/mythtv/libs/libmythmetadata/metadatagrabber.cpp b/mythtv/libs/libmythmetadata/metadatagrabber.cpp
index 50fcf40a51..4ec9fd91eb 100644
--- a/mythtv/libs/libmythmetadata/metadatagrabber.cpp
+++ b/mythtv/libs/libmythmetadata/metadatagrabber.cpp
@@ -30,59 +30,27 @@ struct GrabberOpts {
     QString     m_def;
 };
 
-// TODO
-// it would be nice to statically compile these, but I can't manage to get it
-// to compile.  apparently initializer lists are supported in QT5/CPP11 that
-// will make this work.  for now, use a lock and initialize on first access.
-// https://bugreports.qt-project.org/browse/QTBUG-25679
-static QMap<GrabberType, GrabberOpts> grabberTypes;
-static QMap<QString, GrabberType> grabberTypeStrings;
-static bool initialized = false;
-static QMutex typeLock;
-
-static GrabberOpts GrabberOptsMaker(QString thepath, QString thesetting, QString thedefault)
-{
-    GrabberOpts opts;
-
-    opts.m_path = std::move(thepath);
-    opts.m_setting = std::move(thesetting);
-    opts.m_def = std::move(thedefault);
-
-    return opts;
-}
-
-static void InitializeStaticMaps(void)
-{
-    QMutexLocker lock(&typeLock);
-
-    if (!initialized)
-    {
-        grabberTypes[kGrabberMovie] =
-              GrabberOptsMaker ("%1metadata/Movie/",
-                                "MovieGrabber",
-                                "metadata/Movie/tmdb3.py" );
-        grabberTypes[kGrabberTelevision] =
-             GrabberOptsMaker ( "%1metadata/Television/",
-                                "TelevisionGrabber",
-                                "metadata/Television/ttvdb.py" );
-        grabberTypes[kGrabberGame]       =
-             GrabberOptsMaker ( "%1metadata/Game/",
-                                "mythgame.MetadataGrabber",
-                                "metadata/Game/giantbomb.py" );
-        grabberTypes[kGrabberMusic]      =
-             GrabberOptsMaker ( "%1metadata/Music",
-                                "",
-                                "" );
-
-        grabberTypeStrings["movie"]      = kGrabberMovie;
-        grabberTypeStrings["television"] = kGrabberTelevision;
-        grabberTypeStrings["game"]       = kGrabberGame;
-        grabberTypeStrings["music"]      = kGrabberMusic;
-
-
-        initialized = true;
-    }
-}
+static QMap<GrabberType, GrabberOpts> grabberTypes {
+    { kGrabberMovie,      { "%1metadata/Movie/",
+                            "MovieGrabber",
+                            "metadata/Movie/tmdb3.py" } },
+    { kGrabberTelevision, { "%1metadata/Television/",
+                            "TelevisionGrabber",
+                            "metadata/Television/ttvdb.py" } },
+    { kGrabberGame,       { "%1metadata/Game/",
+                            "mythgame.MetadataGrabber",
+                            "metadata/Game/giantbomb.py" } },
+    { kGrabberMusic,      { "%1metadata/Music",
+                            "",
+                            "" } }
+};
+
+static QMap<QString, GrabberType> grabberTypeStrings {
+    { "movie",      kGrabberMovie },
+    { "television", kGrabberTelevision },
+    { "game",       kGrabberGame },
+    { "music",      kGrabberMusic }
+};
 
 GrabberList MetaGrabberScript::GetList(bool refresh)
 {
@@ -102,8 +70,6 @@ GrabberList MetaGrabberScript::GetList(const QString &type, bool refresh)
 GrabberList MetaGrabberScript::GetList(GrabberType type,
                                        bool refresh)
 {
-    InitializeStaticMaps();
-
     GrabberList tmpGrabberList;
     GrabberList retGrabberList;
     {
@@ -196,8 +162,6 @@ MetaGrabberScript MetaGrabberScript::GetType(const QString &type)
 
 MetaGrabberScript MetaGrabberScript::GetType(const GrabberType type)
 {
-    InitializeStaticMaps();
-
     QString cmd = gCoreContext->GetSetting(grabberTypes[type].m_setting,
                                            grabberTypes[type].m_def);
 
-- 
2.26.2

