/**********************************************************************
 * LeechCraft - modular cross-platform feature rich internet client.
 * Copyright (C) 2006-2013  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.
 **********************************************************************/

#ifndef UTIL_CUSTOMCOOKIEJAR_H
#define UTIL_CUSTOMCOOKIEJAR_H
#include <QNetworkCookieJar>
#include <QByteArray>
#include "utilconfig.h"

namespace LeechCraft
{
	namespace Util
	{
		/** @brief A customized cookie jar with additional features.
		 *
		 * Allows one to filter tracking cookies, filter duplicate
		 * cookies and has unlimited storage period.
		 */
		class UTIL_API CustomCookieJar : public QNetworkCookieJar
		{
			Q_OBJECT

			bool FilterTrackingCookies_;
		public:
			/** @brief Constructs the cookie jar.
			 *
			 * Filtering of tracking cookies is false by default, and
			 * cookies aren't restored.
			 *
			 * @param[in] parent The parent object.
			 */
			CustomCookieJar (QObject *parent = 0);

			/** Destructs the cookie jar.
			 */
			virtual ~CustomCookieJar ();

			/** Enables or disables filtering tracking cookies.
			 *
			 * @param[in] filter Whether to filter tracking cookies.
			 */
			void SetFilterTrackingCookies (bool filter);

			/** Serializes the cookie jar contents into a QByteArray
			 * suitable for storage.
			 *
			 * @return The serialized cookies.
			 *
			 * @sa Load()
			 */
			QByteArray Save () const;

			/** Restores the cookies from the array previously obtained
			 * from Save().
			 *
			 * @param[in] data Serialized cookies.
			 * @sa Save()
			 */
			void Load (const QByteArray& data);

			/** Removes duplicate cookies.
			 */
			void CollectGarbage ();

			/** Returns cookies for the given url, filtering out
			 * duplicates.
			 *
			 * @param[in] url The url to return cookies for.
			 * @return The list of cookies, dup-free.
			 */
			QList<QNetworkCookie> cookiesForUrl (const QUrl& url) const;

			using QNetworkCookieJar::allCookies;
			using QNetworkCookieJar::setAllCookies;
		};
	};
};

#endif

