/**********************************************************************
 * LeechCraft - modular cross-platform feature rich internet client.
 * Copyright (C) 2006-2014  Georg Rudoy
 *
 * Boost Software License - Version 1.0 - August 17th, 2003
 *
 * Permission is hereby granted, free of charge, to any person or organization
 * obtaining a copy of the software and accompanying documentation covered by
 * this license (the "Software") to use, reproduce, display, distribute,
 * execute, and transmit the Software, and to prepare derivative works of the
 * Software, and to permit third-parties to whom the Software is furnished to
 * do so, all subject to the following:
 *
 * The copyright notices in the Software and this entire statement, including
 * the above license grant, this restriction and the following disclaimer,
 * must be included in all copies of the Software, in whole or in part, and
 * all derivative works of the Software, unless such copies or derivative
 * works are solely in the form of machine-executable object code generated by
 * a source language processor.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 * DEALINGS IN THE SOFTWARE.
 **********************************************************************/

#include "mediainfo.h"

namespace LeechCraft
{
namespace LMP
{
	MediaInfo::MediaInfo (const QString& localPath,
			const QString& artist, const QString& album, const QString& title,
			const QStringList& genres,
			qint32 length, qint32 year, qint32 trackNumber)
	: LocalPath_ { localPath }
	, Artist_ { artist }
	, Album_ { album }
	, Title_ { title }
	, Genres_ { genres }
	, Length_ { length }
	, Year_ { year }
	, TrackNumber_ { trackNumber }
	{
	}

	MediaInfo& MediaInfo::operator= (const Media::AudioInfo& info)
	{
		Artist_ = info.Artist_;
		Album_ = info.Album_;
		Title_ = info.Title_;
		Genres_ = info.Genres_;
		Length_ = info.Length_;
		Year_ = info.Year_;
		TrackNumber_ = info.TrackNumber_;
		Additional_ = info.Other_;

		if (Additional_.contains ("URL"))
		{
			const auto& url = Additional_.take ("URL").toUrl ();
			if (url.isLocalFile ())
				LocalPath_ = url.toLocalFile ();
		}

		return *this;
	}

	bool MediaInfo::IsUseless () const
	{
		return (Artist_ + Album_ + Title_).trimmed ().isEmpty ();
	}

	MediaInfo::operator Media::AudioInfo () const
	{
		Media::AudioInfo aInfo =
		{
			Artist_,
			Album_,
			Title_,
			Genres_,
			Length_,
			Year_,
			TrackNumber_,
			Additional_
		};
		aInfo.Other_ ["URL"] = QUrl::fromLocalFile (LocalPath_);
		return aInfo;
	}

	MediaInfo MediaInfo::FromAudioInfo (const Media::AudioInfo& info)
	{
		MediaInfo result;
		result = info;
		return result;
	}

	QDataStream& operator<< (QDataStream& out, const MediaInfo& info)
	{
		out << info.LocalPath_
				<< info.Artist_
				<< info.Album_
				<< info.Title_
				<< info.Genres_
				<< info.Length_
				<< info.Year_
				<< info.TrackNumber_
				<< info.Additional_;
		return out;
	}

	QDataStream& operator>> (QDataStream& in, MediaInfo& info)
	{
		in >> info.LocalPath_
				>> info.Artist_
				>> info.Album_
				>> info.Title_
				>> info.Genres_
				>> info.Length_
				>> info.Year_
				>> info.TrackNumber_
				>> info.Additional_;
		return in;
	}
}
}
