diff options
author | Jean-Francois Dockes <jf@dockes.org> | 2013-11-01 19:26:01 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2014-01-09 20:56:00 +0100 |
commit | 406452f019f097bf52d8db529eabe8dd2d0e977a (patch) | |
tree | d70ce0b620cc97ed9d352f89063fa7cecffd6341 /src/db/upnp/Object.hxx | |
parent | 12b139beafc191d02277e7ce97b4c59f7bb0c095 (diff) | |
download | mpd-406452f019f097bf52d8db529eabe8dd2d0e977a.tar.gz mpd-406452f019f097bf52d8db529eabe8dd2d0e977a.tar.xz mpd-406452f019f097bf52d8db529eabe8dd2d0e977a.zip |
UPnP database plugin
[mk: renamed source files, applied coding style, reduced bloat, using
MPD's threading library, using MPD's error reporting and logging
library and refactoring, fixed lots of bugs]
Diffstat (limited to 'src/db/upnp/Object.hxx')
-rw-r--r-- | src/db/upnp/Object.hxx | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/src/db/upnp/Object.hxx b/src/db/upnp/Object.hxx new file mode 100644 index 000000000..c05f39e47 --- /dev/null +++ b/src/db/upnp/Object.hxx @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2003-2014 The Music Player Daemon Project + * http://www.musicpd.org + * + * This program 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 Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef MPD_UPNP_OBJECT_HXX +#define MPD_UPNP_OBJECT_HXX + +#include <string> +#include <map> + +/** + * UpnP Media Server directory entry, converted from XML data. + * + * This is a dumb data holder class, a struct with helpers. + */ +class UPnPDirObject { +public: + enum ObjType {item, container}; + // There are actually several kinds of containers: + // object.container.storageFolder, object.container.person, + // object.container.playlistContainer etc., but they all seem to + // behave the same as far as we're concerned. Otoh, musicTrack + // items are special to us, and so should playlists, but I've not + // seen one of the latter yet (servers seem to use containers for + // playlists). + enum ItemClass {audioItem_musicTrack, audioItem_playlist}; + + std::string m_id; // ObjectId + std::string m_pid; // Parent ObjectId + std::string m_title; // dc:title. Directory name for a container. + ObjType m_type; // item or container + ItemClass m_iclass; + // Properties as gathered from the XML document (url, artist, etc.) + // The map keys are the XML tag or attribute names. + std::map<std::string, std::string> m_props; + + /** Get named property + * @param property name (e.g. upnp:artist, upnp:album, + * upnp:originalTrackNumber, upnp:genre). Use m_title instead + * for dc:title. + * @param[out] value + * @return true if found. + */ + bool getprop(const std::string &name, std::string &value) const + { + auto it = m_props.find(name); + if (it == m_props.end()) + return false; + value = it->second; + return true; + } + + void clear() + { + m_id.clear(); + m_pid.clear(); + m_title.clear(); + m_type = (ObjType)-1; + m_iclass = (ItemClass)-1; + m_props.clear(); + } +}; + +#endif /* _UPNPDIRCONTENT_H_X_INCLUDED_ */ |