Blame tests/mbtest.cc

Packit f70c98
/* --------------------------------------------------------------------------
Packit f70c98
Packit f70c98
   libmusicbrainz5 - Client library to access MusicBrainz
Packit f70c98
Packit f70c98
   Copyright (C) 2012 Andrew Hawkins
Packit f70c98
Packit f70c98
   This file is part of libmusicbrainz5.
Packit f70c98
Packit f70c98
   This library is free software; you can redistribute it and/or
Packit f70c98
   modify it under the terms of the GNU Lesser General Public
Packit f70c98
   License as published by the Free Software Foundation; either
Packit f70c98
   version 2.1 of the License, or (at your option) any later version.
Packit f70c98
Packit f70c98
   libmusicbrainz5 is distributed in the hope that it will be useful,
Packit f70c98
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit f70c98
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit f70c98
   Lesser General Public License for more details.
Packit f70c98
Packit f70c98
   You should have received a copy of the GNU General Public License
Packit f70c98
   along with this library.  If not, see <http://www.gnu.org/licenses/>.
Packit f70c98
Packit f70c98
     $Id$
Packit f70c98
Packit f70c98
----------------------------------------------------------------------------*/
Packit f70c98
Packit f70c98
#include <iostream>
Packit f70c98
Packit f70c98
#include <strings.h>
Packit f70c98
Packit f70c98
#include "musicbrainz5/Query.h"
Packit f70c98
#include "musicbrainz5/Release.h"
Packit f70c98
#include "musicbrainz5/ReleaseGroup.h"
Packit f70c98
#include "musicbrainz5/Medium.h"
Packit f70c98
#include "musicbrainz5/MediumList.h"
Packit f70c98
#include "musicbrainz5/NameCredit.h"
Packit f70c98
#include "musicbrainz5/ArtistCredit.h"
Packit f70c98
#include "musicbrainz5/Artist.h"
Packit f70c98
#include "musicbrainz5/Alias.h"
Packit f70c98
#include "musicbrainz5/HTTPFetch.h"
Packit f70c98
#include "musicbrainz5/Track.h"
Packit f70c98
#include "musicbrainz5/Recording.h"
Packit f70c98
#include "musicbrainz5/Collection.h"
Packit f70c98
#include "musicbrainz5/CollectionList.h"
Packit f70c98
#include "musicbrainz5/RelationListList.h"
Packit f70c98
#include "musicbrainz5/RelationList.h"
Packit f70c98
#include "musicbrainz5/Relation.h"
Packit f70c98
#include "musicbrainz5/Work.h"
Packit f70c98
#include "musicbrainz5/ISWC.h"
Packit f70c98
#include "musicbrainz5/ISWCList.h"
Packit f70c98
#include "musicbrainz5/SecondaryType.h"
Packit f70c98
#include "musicbrainz5/SecondaryTypeList.h"
Packit f70c98
#include "musicbrainz5/IPI.h"
Packit f70c98
#include "musicbrainz5/IPIList.h"
Packit f70c98
#include "musicbrainz5/Lifespan.h"
Packit f70c98
Packit f70c98
void PrintRelationList(MusicBrainz5::CRelationList *RelationList)
Packit f70c98
{
Packit f70c98
	std::cout << "Target type: '" << RelationList->TargetType() << "'" << std::endl;
Packit f70c98
Packit f70c98
	for (int count=0;count<RelationList->NumItems();count++)
Packit f70c98
	{
Packit f70c98
		MusicBrainz5::CRelation *Relation=RelationList->Item(count);
Packit f70c98
		std::cout << "Relation: " << count << " - Type '" << Relation->Type() << "', Target '" << Relation->Target() << "'" << std::endl;
Packit f70c98
	}
Packit f70c98
}
Packit f70c98
Packit f70c98
int main(int argc, const char *argv[])
Packit f70c98
{
Packit Service 1b21de
	MusicBrainz5::CQuery MB2("MBTest/v1.0","musicbrainz.org");
Packit f70c98
Packit f70c98
	MusicBrainz5::CQuery::tParamMap Params5;
Packit f70c98
	Params5["inc"]="aliases";
Packit f70c98
	MusicBrainz5::CMetadata Metadata5=MB2.Query("artist","4b585938-f271-45e2-b19a-91c634b5e396","",Params5);
Packit f70c98
	MusicBrainz5::CArtist *Artist=Metadata5.Artist();
Packit f70c98
	if (Artist)
Packit f70c98
	{
Packit f70c98
		MusicBrainz5::CLifespan *Lifespan=Artist->Lifespan();
Packit f70c98
		if (Lifespan)
Packit f70c98
		{
Packit f70c98
			std::cout << "Begin: " << Lifespan->Begin() << std::endl;
Packit f70c98
			std::cout << "End: " << Lifespan->End() << std::endl;
Packit f70c98
			std::cout << "Ended: " << Lifespan->Ended() << std::endl;
Packit f70c98
		}
Packit f70c98
	}
Packit f70c98
Packit Service 1b21de
//	return 0;
Packit f70c98
Packit f70c98
	MusicBrainz5::CMetadata Metadata8=MB2.Query("release-group","2eefe885-f050-426d-93f0-29c5eb8b4f9a");
Packit f70c98
	std::cout << Metadata8 << std::endl;
Packit Service 1b21de
//	return 0;
Packit f70c98
Packit f70c98
	MusicBrainz5::CMetadata Metadata7=MB2.Query("artist","4b585938-f271-45e2-b19a-91c634b5e396");
Packit f70c98
	Artist=Metadata7.Artist();
Packit f70c98
	if (Artist)
Packit f70c98
	{
Packit f70c98
		MusicBrainz5::CIPIList *IPIList=Artist->IPIList();
Packit f70c98
		if (IPIList)
Packit f70c98
		{
Packit f70c98
			for (int count=0;count<IPIList->NumItems();count++)
Packit f70c98
			{
Packit f70c98
				MusicBrainz5::CIPI *IPI=IPIList->Item(count);
Packit f70c98
				if (IPI)
Packit f70c98
				{
Packit f70c98
					std::cout << "IPI " << count << ": " << IPI->IPI() << std::endl;
Packit f70c98
				}
Packit f70c98
			}
Packit f70c98
		}
Packit f70c98
	}
Packit f70c98
Packit Service 1b21de
//	return 0;
Packit f70c98
Packit f70c98
	MusicBrainz5::CMetadata Metadata6=MB2.Query("release-group","2eefe885-f050-426d-93f0-29c5eb8b4f9a");
Packit f70c98
	MusicBrainz5::CReleaseGroup *ReleaseGroup=Metadata6.ReleaseGroup();
Packit f70c98
	if (ReleaseGroup)
Packit f70c98
	{
Packit f70c98
		std::cout << "ID: " << ReleaseGroup->ID() << std::endl;
Packit f70c98
		std::cout << "PrimaryType: " << ReleaseGroup->PrimaryType() << std::endl;
Packit f70c98
		std::cout << "Title: " << ReleaseGroup->Title() << std::endl;
Packit f70c98
		std::cout << "Disambiguation: " << ReleaseGroup->Disambiguation() << std::endl;
Packit f70c98
		std::cout << "FirstReleaseDate: " << ReleaseGroup->FirstReleaseDate() << std::endl;
Packit f70c98
Packit f70c98
		MusicBrainz5::CSecondaryTypeList *SecondaryTypeList=ReleaseGroup->SecondaryTypeList();
Packit f70c98
		if (SecondaryTypeList)
Packit f70c98
		{
Packit f70c98
			for (int count=0;count<SecondaryTypeList->NumItems();count++)
Packit f70c98
			{
Packit f70c98
				MusicBrainz5::CSecondaryType *SecondaryType=SecondaryTypeList->Item(count);
Packit f70c98
				if (SecondaryType)
Packit f70c98
				{
Packit f70c98
					std::cout << "Secondary type " << count << " = " << SecondaryType->SecondaryType() << std::endl;
Packit f70c98
				}
Packit f70c98
			}
Packit f70c98
		}
Packit f70c98
	}
Packit f70c98
Packit Service 1b21de
//	return 0;
Packit f70c98
Packit f70c98
	MusicBrainz5::CMetadata Metadata4=MB2.Query("work","b0d17375-5593-390e-a936-1a65ce74c630");
Packit f70c98
Packit f70c98
	MusicBrainz5::CWork *ThisWork=Metadata4.Work();
Packit f70c98
	if (ThisWork)
Packit f70c98
	{
Packit f70c98
		std::cout << "ID: '" << ThisWork->ID() << "'" << std::endl;
Packit f70c98
		std::cout << "Title: '" << ThisWork->Title() << "'" << std::endl;
Packit f70c98
Packit f70c98
		MusicBrainz5::CISWCList *ISWCList=ThisWork->ISWCList();
Packit f70c98
		if (ISWCList)
Packit f70c98
		{
Packit f70c98
			for (int count=0;count<ISWCList->NumItems();count++)
Packit f70c98
			{
Packit f70c98
				MusicBrainz5::CISWC *ISWC=ISWCList->Item(count);
Packit f70c98
				std::cout << "ISWC " << count << " - '" << ISWC->ISWC() << "'" << std::endl;
Packit f70c98
			}
Packit f70c98
		}
Packit f70c98
Packit f70c98
		std::cout << "Disambiguation: '" << ThisWork->Disambiguation() << "'" << std::endl;
Packit f70c98
		std::cout << "Language: '" << ThisWork->Language() << "'" << std::endl;
Packit f70c98
	}
Packit f70c98
Packit f70c98
	MusicBrainz5::CQuery::tParamMap Params3;
Packit f70c98
	Params3["inc"]="media recordings";
Packit f70c98
Packit f70c98
	Metadata4=MB2.Query("release","ae050d13-7f86-495e-9918-10d8c0ac58e8","",Params3);
Packit f70c98
	MusicBrainz5::CRelease *Release2=Metadata4.Release();
Packit f70c98
	if (Release2)
Packit f70c98
	{
Packit f70c98
		MusicBrainz5::CMediumList *MediumList=Release2->MediumList();
Packit f70c98
		if (MediumList)
Packit f70c98
		{
Packit f70c98
			for (int count=0;count<MediumList->NumItems();count++)
Packit f70c98
			{
Packit f70c98
				MusicBrainz5::CMedium *Medium=MediumList->Item(count);
Packit f70c98
				if (Medium)
Packit f70c98
				{
Packit f70c98
					MusicBrainz5::CTrackList *TrackList=Medium->TrackList();
Packit f70c98
					if (TrackList)
Packit f70c98
					{
Packit f70c98
						for (int track=0;track<TrackList->NumItems();track++)
Packit f70c98
						{
Packit f70c98
							MusicBrainz5::CTrack *Track=TrackList->Item(track);
Packit f70c98
							if (Track)
Packit f70c98
							{
Packit f70c98
								std::cout << "Position: " << Track->Position() << std::endl;
Packit f70c98
								std::cout << "Title: " << Track->Title() << std::endl;
Packit f70c98
								std::cout << "Length: " << Track->Length() << std::endl;
Packit f70c98
								std::cout << "Number: " << Track->Number() << std::endl;
Packit f70c98
							}
Packit f70c98
						}
Packit f70c98
					}
Packit f70c98
				}
Packit f70c98
			}
Packit f70c98
		}
Packit f70c98
	}
Packit f70c98
Packit Service 1b21de
//	return 0;
Packit f70c98
Packit f70c98
	MusicBrainz5::CQuery MB("MBTest/v1.0");
Packit f70c98
Packit f70c98
	if (argc>1)
Packit f70c98
	{
Packit f70c98
		std::cout << "Setting username: '" << argv[1] << "'" << std::endl;
Packit f70c98
		MB.SetUserName(argv[1]);
Packit f70c98
	}
Packit f70c98
Packit f70c98
	if (argc>2)
Packit f70c98
	{
Packit f70c98
		std::cout << "Setting password: '" << argv[2] << "'" << std::endl;
Packit f70c98
		MB.SetPassword(argv[2]);
Packit f70c98
	}
Packit f70c98
Packit f70c98
	MusicBrainz5::CQuery::tParamMap Params2;
Packit f70c98
	Params2["inc"]="artists release-groups url-rels work-level-rels work-rels artist-rels";
Packit f70c98
	MusicBrainz5::CMetadata Metadata3=MB.Query("recording","3631f569-520d-40ff-a1ee-076604723275","",Params2);
Packit f70c98
	MusicBrainz5::CRecording *Recording=Metadata3.Recording();
Packit f70c98
	if (Recording)
Packit f70c98
	{
Packit f70c98
		MusicBrainz5::CRelationListList *RelationListList=Recording->RelationListList();
Packit f70c98
		for (int count=0;count<RelationListList->NumItems();count++)
Packit f70c98
		{
Packit f70c98
			MusicBrainz5::CRelationList *RelationList=RelationListList->Item(count);
Packit f70c98
			PrintRelationList(RelationList);
Packit f70c98
		}
Packit f70c98
	}
Packit f70c98
Packit Service 1b21de
//	return 0;
Packit f70c98
Packit f70c98
	MusicBrainz5::CQuery::tParamMap Params;
Packit f70c98
	Params["inc"]="artists labels recordings release-groups url-rels discids recording-level-rels work-level-rels work-rels artist-rels";
Packit f70c98
Packit f70c98
	MusicBrainz5::CMetadata Metadata2=MB.Query("release","ef4596f0-5554-443a-aea9-247d2e250f61","",Params);
Packit f70c98
Packit f70c98
	MusicBrainz5::CRelease *Release=Metadata2.Release();
Packit f70c98
	if (Release)
Packit f70c98
	{
Packit f70c98
		MusicBrainz5::CMediumList *MediumList=Release->MediumList();
Packit f70c98
Packit f70c98
		if (MediumList)
Packit f70c98
		{
Packit f70c98
			for (int MediumNum=0;MediumNum<MediumList->NumItems();MediumNum++)
Packit f70c98
			{
Packit f70c98
				MusicBrainz5::CMedium *Medium=MediumList->Item(MediumNum);
Packit f70c98
				if (Medium)
Packit f70c98
				{
Packit f70c98
					MusicBrainz5::CTrackList *TrackList=Medium->TrackList();
Packit f70c98
					if (TrackList)
Packit f70c98
					{
Packit f70c98
						for (int TrackNum=0;TrackNum<TrackList->NumItems();TrackNum++)
Packit f70c98
						{
Packit f70c98
							MusicBrainz5::CTrack *Track=TrackList->Item(TrackNum);
Packit f70c98
							if (Track)
Packit f70c98
							{
Packit f70c98
								MusicBrainz5::CRecording *Recording=Track->Recording();
Packit f70c98
								if (Recording)
Packit f70c98
								{
Packit f70c98
									MusicBrainz5::CRelationListList *RelationListList=Recording->RelationListList();
Packit f70c98
									if (RelationListList)
Packit f70c98
									{
Packit f70c98
										std::cout << RelationListList->NumItems() << " items" << std::endl;
Packit f70c98
										for (int RelationListNum=0;RelationListNum<RelationListList->NumItems();RelationListNum++)
Packit f70c98
										{
Packit f70c98
											MusicBrainz5::CRelationList *RelationList=RelationListList->Item(RelationListNum);
Packit f70c98
											PrintRelationList(RelationList);
Packit f70c98
										}
Packit f70c98
									}
Packit f70c98
								}
Packit f70c98
							}
Packit f70c98
						}
Packit f70c98
					}
Packit f70c98
				}
Packit f70c98
			}
Packit f70c98
		}
Packit f70c98
	}
Packit f70c98
Packit Service 1b21de
//	return 0;
Packit f70c98
Packit f70c98
	MusicBrainz5::CMetadata Metadata=MB.Query("collection");
Packit f70c98
	MusicBrainz5::CCollectionList *CollectionList=Metadata.CollectionList();
Packit f70c98
	if (CollectionList && 0!=CollectionList->NumItems())
Packit f70c98
	{
Packit f70c98
		MusicBrainz5::CCollection *Collection=CollectionList->Item(0);
Packit f70c98
		std::cout << "ID is " << Collection->ID() << std::endl;
Packit f70c98
Packit f70c98
		MB.Query("collection",Collection->ID(),"releases");
Packit f70c98
Packit f70c98
		std::vector<std::string> Releases;
Packit f70c98
		Releases.push_back("b5748ac9-f38e-48f7-a8a4-8b43cab025bc");
Packit f70c98
		Releases.push_back("f6335672-c521-4129-86c3-490d20533e08");
Packit f70c98
		bool Ret=MB.AddCollectionEntries(Collection->ID(),Releases);
Packit f70c98
		std::cout << "AddCollectionEntries returns " << std::boolalpha << Ret << std::endl;
Packit f70c98
Packit f70c98
		MB.Query("collection",Collection->ID(),"releases");
Packit f70c98
Packit f70c98
		Releases.clear();
Packit f70c98
		Releases.push_back("b5748ac9-f38e-48f7-a8a4-8b43cab025bc");
Packit f70c98
		Ret=MB.DeleteCollectionEntries(Collection->ID(),Releases);
Packit f70c98
		std::cout << "DeleteCollectionEntries returns " << std::boolalpha << Ret << std::endl;
Packit f70c98
Packit f70c98
		MB.Query("collection",Collection->ID(),"releases");
Packit f70c98
	}
Packit f70c98
Packit Service 1b21de
//	return 0;
Packit f70c98
Packit f70c98
	std::string DiscID="arIS30RPWowvwNEqsqdDnZzDGhk-";
Packit f70c98
Packit f70c98
	if (argc==2)
Packit f70c98
		DiscID=argv[1];
Packit f70c98
Packit f70c98
	MusicBrainz5::CReleaseList ReleaseList=MB.LookupDiscID(DiscID);
Packit f70c98
Packit f70c98
	for (int count=0;count
Packit f70c98
	{
Packit f70c98
		MusicBrainz5::CRelease *Release=ReleaseList.Item(count);
Packit f70c98
Packit f70c98
		MusicBrainz5::CRelease FullRelease=MB.LookupRelease(Release->ID());
Packit f70c98
Packit f70c98
		std::cout << "Full release: " << std::endl;
Packit f70c98
Packit f70c98
		std::cout << FullRelease << std::endl;
Packit f70c98
Packit f70c98
		std::cout << "Release group title: '" << FullRelease.ReleaseGroup()->Title() << "'" << std::endl;
Packit f70c98
Packit f70c98
		std::cout << std::endl << std::endl << "Media matching " << DiscID << ":" << std::endl;
Packit f70c98
Packit f70c98
		MusicBrainz5::CMediumList MediaList=FullRelease.MediaMatchingDiscID(DiscID);
Packit f70c98
Packit f70c98
		for (int count=0;count
Packit f70c98
		{
Packit f70c98
			MusicBrainz5::CMedium *Medium=MediaList.Item(count);
Packit f70c98
Packit f70c98
			std::cout << *Medium << std::endl;
Packit f70c98
		}
Packit f70c98
Packit f70c98
		std::cout << std::endl << std::endl;
Packit f70c98
	}
Packit f70c98
Packit f70c98
	return 0;
Packit f70c98
}