1
0
Fork 0
mirror of https://github.com/transmission/transmission synced 2024-12-26 01:27:28 +00:00
transmission/qt/add-data.cc
Jordan Lee 4b9626bb83 Licensing changes:
1. add the option the code to be used under GPLv2 or GPLv3; previously only GPLv2 was allowed

2. add the "proxy option" as described in GPLv3 so we can add future licenses without having to bulk-edit everything again :)

3. remove the awkward "exception for MIT code in Mac client" clause; it was unnecessary and confusing.
2014-01-19 01:09:44 +00:00

117 lines
2.3 KiB
C++

/*
* This file Copyright (C) 2012-2014 Mnemosyne LLC
*
* It may be used under the GNU Public License v2 or v3 licenses,
* or any future license endorsed by Mnemosyne LLC.
*
* $Id$
*/
#include <QFile>
#include <QDir>
#include <libtransmission/transmission.h>
#include <libtransmission/utils.h> // tr_base64_encode()
#include "add-data.h"
#include "utils.h"
int
AddData :: set (const QString& key)
{
if (Utils::isMagnetLink (key))
{
magnet = key;
type = MAGNET;
}
else if (Utils::isUriWithSupportedScheme (key))
{
url = key;
type = URL;
}
else if (QFile(key).exists ())
{
filename = QDir::fromNativeSeparators (key);
type = FILENAME;
QFile file (key);
file.open (QIODevice::ReadOnly);
metainfo = file.readAll ();
file.close ();
}
else if (Utils::isHexHashcode (key))
{
magnet = QString::fromUtf8("magnet:?xt=urn:btih:") + key;
type = MAGNET;
}
else
{
int len;
char * raw = tr_base64_decode (key.toUtf8().constData(), key.toUtf8().size(), &len);
if (raw)
{
metainfo.append (raw, len);
tr_free (raw);
type = METAINFO;
}
else
{
type = NONE;
}
}
return type;
}
QByteArray
AddData :: toBase64 () const
{
QByteArray ret;
if (!metainfo.isEmpty ())
{
int len = 0;
char * b64 = tr_base64_encode (metainfo.constData(), metainfo.size(), &len);
ret = QByteArray (b64, len);
tr_free (b64);
}
return ret;
}
QString
AddData :: readableName () const
{
QString ret;
switch (type)
{
case FILENAME:
ret = filename;
break;
case MAGNET:
ret = magnet;
break;
case URL:
ret = url.toString();
break;
case METAINFO:
{
tr_info inf;
tr_ctor * ctor = tr_ctorNew (NULL);
tr_ctorSetMetainfo (ctor, (const quint8*)metainfo.constData(), metainfo.size());
if (tr_torrentParse (ctor, &inf) == TR_PARSE_OK )
{
ret = QString::fromUtf8 (inf.name); // metainfo is required to be UTF-8
tr_metainfoFree (&inf);
}
tr_ctorFree (ctor);
break;
}
}
return ret;
}