transmission: update from 2.13 to 2.22
[tomato.git] / release / src / router / transmission / qt / add-data.cc
blob8e4b4fa47ac70827b9002babd114263b86cc6252
1 /*
2 * This file Copyright (C) Mnemosyne LLC
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2
6 * as published by the Free Software Foundation.
8 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
10 * $Id: add-data.cc 11623 2011-01-02 23:42:46Z charles $
13 #include <libtransmission/transmission.h>
14 #include <libtransmission/bencode.h> // tr_base64_encode()
15 #include <libtransmission/utils.h> // tr_base64_encode()
17 #include "add-data.h"
18 #include "utils.h"
20 int
21 AddData :: set( const QString& key )
23 if( Utils::isMagnetLink( key ) )
25 magnet = key;
26 type = MAGNET;
28 else if ( Utils::isURL( key ) )
30 url = key;
31 type = URL;
33 else if( QFile(key).exists( ) )
35 filename = key;
36 type = FILENAME;
38 QFile file( key );
39 file.open( QIODevice::ReadOnly );
40 metainfo = file.readAll( );
41 file.close( );
43 else if( Utils::isHexHashcode( key ) )
45 magnet = QString("magnet:?xt=urn:btih:") + key;
46 type = MAGNET;
48 else
50 int len;
51 char * raw = tr_base64_decode( key.toUtf8().constData(), key.toUtf8().size(), &len );
52 if( raw ) {
53 metainfo.append( raw, len );
54 tr_free( raw );
55 type = METAINFO;
57 else type = NONE;
60 return type;
63 QByteArray
64 AddData :: toBase64( ) const
66 QByteArray ret;
68 if( !metainfo.isEmpty( ) )
70 int len = 0;
71 char * b64 = tr_base64_encode( metainfo.constData(), metainfo.size(), &len );
72 ret = QByteArray( b64, len );
73 tr_free( b64 );
76 return ret;
79 QString
80 AddData :: readableName( ) const
82 QString ret;
84 switch( type )
86 case FILENAME: ret = filename; break;
88 case MAGNET: ret = magnet; break;
90 case URL: ret = url.toString(); break;
92 case METAINFO: {
93 tr_info inf;
94 tr_ctor * ctor = tr_ctorNew( NULL );
95 tr_ctorSetMetainfo( ctor, (const uint8_t*)metainfo.constData(), metainfo.size() );
96 if( tr_torrentParse( ctor, &inf ) == TR_PARSE_OK ) {
97 ret = inf.name;
98 tr_metainfoFree( &inf );
100 tr_ctorFree( ctor );
101 break;
105 return ret;