From 00789de7d42429f0fdd8f5282d54ec5e41d567d6 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@musicpd.org>
Date: Mon, 6 Jul 2020 21:35:31 +0200
Subject: [PATCH] db/upnp/Object: root nodes are allowed to omit parent_id and
 name

This fixes compatibility with Plex DLNA.

Closes https://github.com/MusicPlayerDaemon/MPD/issues/851
---
 NEWS                           |  1 +
 src/db/plugins/upnp/Object.hxx | 11 ++++++++++-
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/NEWS b/NEWS
index 054059bfb..258723782 100644
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,7 @@ ver 0.21.25 (not yet released)
   - fix crash when using "rangeid" while playing
 * database
   - simple: automatically scan new mounts
+  - upnp: fix compatibility with Plex DLNA
 * storage
   - fix disappearing mounts after mounting twice
   - udisks: fix reading ".mpdignore"
diff --git a/src/db/plugins/upnp/Object.hxx b/src/db/plugins/upnp/Object.hxx
index e17cdfbdd..e27fcfc2d 100644
--- a/src/db/plugins/upnp/Object.hxx
+++ b/src/db/plugins/upnp/Object.hxx
@@ -89,9 +89,18 @@ public:
 		tag.Clear();
 	}
 
+	gcc_pure
+	bool IsRoot() const noexcept {
+		return type == Type::CONTAINER && id == "0";
+	}
+
 	gcc_pure
 	bool Check() const noexcept {
-		return !id.empty() && !parent_id.empty() && !name.empty() &&
+		return !id.empty() &&
+			/* root nodes don't need a parent id and a
+			   name */
+			(IsRoot() || (!parent_id.empty() &&
+				      !name.empty())) &&
 			(type != UPnPDirObject::Type::ITEM ||
 			 item_class != UPnPDirObject::ItemClass::UNKNOWN);
 	}