MPD: db/plugins/upnp/Object.hxx Source File

MPD 0.20.18

Object.hxx
Go to the documentation of this file.
1 /*
2 * Copyright 2003-2017 The Music Player Daemon Project
3 * http://www.musicpd.org
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19
20 #ifndef MPD_UPNP_OBJECT_HXX
21 #define MPD_UPNP_OBJECT_HXX
22
23 #include "tag/Tag.hxx"
24 #include "Compiler.h"
25
26 #include <string>
27
33 class UPnPDirObject {
34 public:
35 enum class Type {
36 UNKNOWN,
37 ITEM,
38 CONTAINER,
39 };
40
41 // There are actually several kinds of containers:
42 // object.container.storageFolder, object.container.person,
43 // object.container.playlistContainer etc., but they all seem to
44 // behave the same as far as we're concerned. Otoh, musicTrack
45 // items are special to us, and so should playlists, but I've not
46 // seen one of the latter yet (servers seem to use containers for
47 // playlists).
48 enum class ItemClass {
49 UNKNOWN,
50 MUSIC,
51 PLAYLIST,
52 };
53
57 std::string id;
58
62 std::string parent_id;
63
64 std::string url;
65
69 std::string name;
70
71 Type type;
72 ItemClass item_class;
73
74 Tag tag;
75
76 UPnPDirObject() = default;
77 UPnPDirObject(UPnPDirObject &&) = default;
78
79 ~UPnPDirObject();
80
81 UPnPDirObject &operator=(UPnPDirObject &&) = default;
82
83 void Clear() noexcept {
84 id.clear();
85 parent_id.clear();
86 url.clear();
87 type = Type::UNKNOWN;
88 item_class = ItemClass::UNKNOWN;
89 tag.Clear();
90 }
91
92 gcc_pure
93 bool Check() const noexcept {
94 return !id.empty() && !parent_id.empty() && !name.empty() &&
95 (type != UPnPDirObject::Type::ITEM ||
96 item_class != UPnPDirObject::ItemClass::UNKNOWN);
97 }
98 };
99
100 #endif /* _UPNPDIRCONTENT_H_X_INCLUDED_ */
UPnPDirObject::operator=
UPnPDirObject & operator=(UPnPDirObject &&)=default
Tag::Clear
void Clear()
Clear everything, as if this was a new Tag object.
UPnPDirObject::Type::UNKNOWN
UPnPDirObject::parent_id
std::string parent_id
Parent&#39;s ObjectId.
Definition: Object.hxx:62
Tag
The meta information about a song file.
Definition: Tag.hxx:34
UPnPDirObject::ItemClass::UNKNOWN
Tag.hxx
UPnPDirObject::Type::ITEM
UPnPDirObject::Type::CONTAINER
UPnPDirObject::tag
Tag tag
Definition: Object.hxx:74
UPnPDirObject::ItemClass::MUSIC
UPnPDirObject::ItemClass
ItemClass
Definition: Object.hxx:48
UPnPDirObject::~UPnPDirObject
~UPnPDirObject()
UPnPDirObject::item_class
ItemClass item_class
Definition: Object.hxx:72
UPnPDirObject::name
std::string name
A copy of "dc:title" sanitized as a file name.
Definition: Object.hxx:69
UPnPDirObject::url
std::string url
Definition: Object.hxx:64
UPnPDirObject::Type
Type
Definition: Object.hxx:35
Compiler.h
UPnPDirObject::Check
gcc_pure bool Check() const noexcept
Definition: Object.hxx:93
UPnPDirObject::ItemClass::PLAYLIST
UPnPDirObject::type
Type type
Definition: Object.hxx:71
UPnPDirObject::id
std::string id
ObjectId.
Definition: Object.hxx:57
UPnPDirObject
UpnP Media Server directory entry, converted from XML data.
Definition: Object.hxx:33
gcc_pure
#define gcc_pure
Definition: Compiler.h:116
UPnPDirObject::Clear
void Clear() noexcept
Definition: Object.hxx:83
UPnPDirObject::UPnPDirObject
UPnPDirObject()=default