1
/* --------------------------------------------------------------------------
3
libmusicbrainz4 - Client library to access MusicBrainz
5
Copyright (C) 2011 Andrew Hawkins
7
This file is part of libmusicbrainz4.
9
This library is free software; you can redistribute it and/or
10
modify it under the terms of v2 of the GNU Lesser General Public
11
License as published by the Free Software Foundation.
13
libmusicbrainz4 is distributed in the hope that it will be useful,
14
but WITHOUT ANY WARRANTY; without even the implied warranty of
15
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
Lesser General Public License for more details.
18
You should have received a copy of the GNU General Public License
19
along with this library. If not, see <http://www.gnu.org/licenses/>.
21
$Id: Medium.cc 13259 2011-08-10 12:02:50Z adhawkins $
23
----------------------------------------------------------------------------*/
25
#include "musicbrainz4/Medium.h"
27
#include "musicbrainz4/Disc.h"
28
#include "musicbrainz4/DiscList.h"
29
#include "musicbrainz4/Track.h"
30
#include "musicbrainz4/TrackList.h"
32
class MusicBrainz4::CMediumPrivate
45
CDiscList *m_DiscList;
46
CTrackList *m_TrackList;
49
MusicBrainz4::CMedium::CMedium(const XMLNode& Node)
51
m_d(new CMediumPrivate)
55
//std::cout << "Medium node: " << std::endl << Node.createXMLString(true) << std::endl;
61
MusicBrainz4::CMedium::CMedium(const CMedium& Other)
63
m_d(new CMediumPrivate)
68
MusicBrainz4::CMedium& MusicBrainz4::CMedium::operator =(const CMedium& Other)
74
CEntity::operator =(Other);
76
m_d->m_Title=Other.m_d->m_Title;
77
m_d->m_Position=Other.m_d->m_Position;
78
m_d->m_Format=Other.m_d->m_Format;
80
if (Other.m_d->m_DiscList)
81
m_d->m_DiscList=new CDiscList(*Other.m_d->m_DiscList);
83
if (Other.m_d->m_TrackList)
84
m_d->m_TrackList=new CTrackList(*Other.m_d->m_TrackList);
90
MusicBrainz4::CMedium::~CMedium()
97
void MusicBrainz4::CMedium::Cleanup()
99
delete m_d->m_DiscList;
102
delete m_d->m_TrackList;
106
MusicBrainz4::CMedium *MusicBrainz4::CMedium::Clone()
108
return new CMedium(*this);
111
bool MusicBrainz4::CMedium::ParseAttribute(const std::string& Name, const std::string& /*Value*/)
115
std::cerr << "Unrecognised medium attribute: '" << Name << "'" << std::endl;
121
bool MusicBrainz4::CMedium::ParseElement(const XMLNode& Node)
125
std::string NodeName=Node.getName();
127
if ("title"==NodeName)
129
RetVal=ProcessItem(Node,m_d->m_Title);
131
else if ("position"==NodeName)
133
RetVal=ProcessItem(Node,m_d->m_Position);
135
else if ("format"==NodeName)
137
RetVal=ProcessItem(Node,m_d->m_Format);
139
else if ("disc-list"==NodeName)
141
RetVal=ProcessItem(Node,m_d->m_DiscList);
143
else if ("track-list"==NodeName)
145
RetVal=ProcessItem(Node,m_d->m_TrackList);
149
std::cerr << "Unrecognised medium element: '" << NodeName << "'" << std::endl;
156
std::string MusicBrainz4::CMedium::GetElementName()
161
std::string MusicBrainz4::CMedium::Title() const
166
int MusicBrainz4::CMedium::Position() const
168
return m_d->m_Position;
171
std::string MusicBrainz4::CMedium::Format() const
173
return m_d->m_Format;
176
MusicBrainz4::CDiscList *MusicBrainz4::CMedium::DiscList() const
178
return m_d->m_DiscList;
181
MusicBrainz4::CTrackList *MusicBrainz4::CMedium::TrackList() const
183
return m_d->m_TrackList;
186
bool MusicBrainz4::CMedium::ContainsDiscID(const std::string& DiscID) const
192
for (int count=0;!RetVal && count<m_d->m_DiscList->NumItems();count++)
194
CDisc *Disc=m_d->m_DiscList->Item(count);
196
if (Disc->ID()==DiscID)
204
std::ostream& MusicBrainz4::CMedium::Serialise(std::ostream& os) const
206
os << "Medium:" << std::endl;
208
CEntity::Serialise(os);
210
os << "\tTitle: " << Title() << std::endl;
211
os << "\tPosition: " << Position() << std::endl;
212
os << "\tFormat: " << Format() << std::endl;
215
os << *DiscList() << std::endl;
218
os << *TrackList() << std::endl;