Changeset 9662


Ignore:
Timestamp:
Dec 3, 2009, 3:23:43 PM (12 years ago)
Author:
charles
Message:

(trunk, qt) #2096 "magnet links" -- Add the "Copy Magnet Link to Clipboard" feature to Qt client

Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/doc/rpc-spec.txt

    r9660 r9662  
    156156   isPrivate                   | boolean                     | tr_torrent
    157157   leftUntilDone               | number                      | tr_stat
     158   magnetLink                  | number                      | n/a
    158159   manualAnnounceTime          | number                      | tr_stat
    159160   maxConnectedPeers           | number                      | tr_torrent
     
    563564         |         |        NO | torrent-get    | removed arg "timesCompleted"
    564565         |         |        NO | torrent-get    | removed arg "swarmSpeed"
     566         |         | yes       | torrent-get    | new arg "magnetLink"
    565567         |         | yes       | torrent-get    | new arg "metadataPercentComplete"
    566568         |         | yes       | torrent-get    | new arg "trackerStats"
  • trunk/libtransmission/rpcimpl.c

    r9660 r9662  
    501501    else if( tr_streq( key, keylen, "maxConnectedPeers" ) )
    502502        tr_bencDictAddInt( d, key,  tr_torrentGetPeerLimit( tor ) );
     503    else if( tr_streq( key, keylen, "magnetLink" ) ) {
     504        char * str = tr_torrentGetMagnetLink( tor );
     505        tr_bencDictAddStr( d, key, str );
     506        tr_free( str );
     507    }
    503508    else if( tr_streq( key, keylen, "metadataPercentComplete" ) )
    504509        tr_bencDictAddReal( d, key, st->metadataPercentComplete );
  • trunk/qt/mainwin.cc

    r9661 r9662  
    160160    connect( ui.action_Contents, SIGNAL(triggered()), this, SLOT(openHelp()));
    161161    connect( ui.action_OpenFolder, SIGNAL(triggered()), this, SLOT(openFolder()));
     162    connect( ui.action_CopyMagnetToClipboard, SIGNAL(triggered()), this, SLOT(copyMagnetLinkToClipboard()));
    162163    connect( ui.action_SetLocation, SIGNAL(triggered()), this, SLOT(setLocation()));
    163164    connect( ui.action_Properties, SIGNAL(triggered()), this, SLOT(openProperties()));
     
    167168    QAction * sep2 = new QAction( this );
    168169    sep2->setSeparator( true );
     170    QAction * sep3 = new QAction( this );
     171    sep3->setSeparator( true );
    169172
    170173    // context menu
     
    172175    actions << ui.action_Properties
    173176            << ui.action_OpenFolder
    174             << ui.action_SetLocation
    175177            << sep2
    176178            << ui.action_Start
     179            << ui.action_Announce
    177180            << ui.action_Pause
     181            << ui.action_CopyMagnetToClipboard
     182            << sep3
    178183            << ui.action_Verify
    179             << ui.action_Announce
     184            << ui.action_SetLocation
    180185            << sep
    181186            << ui.action_Remove
     
    654659
    655660void
     661TrMainWindow :: copyMagnetLinkToClipboard( )
     662{
     663    const int id( *getSelectedTorrents().begin() );
     664    mySession.copyMagnetLinkToClipboard( id );
     665}
     666
     667void
    656668TrMainWindow :: openHelp( )
    657669{
     
    767779    const bool oneSelection( selected == 1 );
    768780    ui.action_OpenFolder->setEnabled( oneSelection && mySession.isLocal( ) );
     781    ui.action_CopyMagnetToClipboard->setEnabled( oneSelection );
    769782
    770783    ui.action_SelectAll->setEnabled( selected < rowCount );
  • trunk/qt/mainwin.h

    r9178 r9662  
    117117        void openHelp( );
    118118        void openFolder( );
     119        void copyMagnetLinkToClipboard( );
    119120        void setLocation( );
    120121        void openProperties( );
  • trunk/qt/mainwin.ui

    r8913 r9662  
    5252     <y>0</y>
    5353     <width>792</width>
    54      <height>25</height>
     54     <height>23</height>
    5555    </rect>
    5656   </property>
     
    6666    </property>
    6767    <addaction name="separator"/>
    68     <addaction name="action_Add"/>
    69     <addaction name="action_New"/>
    70     <addaction name="separator"/>
    7168    <addaction name="action_Properties"/>
    7269    <addaction name="action_OpenFolder"/>
    73     <addaction name="action_SetLocation"/>
    7470    <addaction name="separator"/>
    7571    <addaction name="action_Start"/>
    7672    <addaction name="action_Announce"/>
    7773    <addaction name="action_Pause"/>
     74    <addaction name="action_CopyMagnetToClipboard"/>
     75    <addaction name="separator"/>
     76    <addaction name="action_SetLocation"/>
    7877    <addaction name="action_Verify"/>
     78    <addaction name="separator"/>
    7979    <addaction name="action_Remove"/>
    8080    <addaction name="action_Delete"/>
    81     <addaction name="separator"/>
    82     <addaction name="action_StartAll"/>
    83     <addaction name="action_PauseAll"/>
    84     <addaction name="separator"/>
    85     <addaction name="action_Quit"/>
    8681   </widget>
    8782   <widget class="QMenu" name="menuEdit">
     
    128123    <addaction name="action_ReverseSortOrder"/>
    129124   </widget>
     125   <widget class="QMenu" name="menu_File">
     126    <property name="title">
     127     <string>&amp;File</string>
     128    </property>
     129    <addaction name="action_Add"/>
     130    <addaction name="action_New"/>
     131    <addaction name="separator"/>
     132    <addaction name="action_StartAll"/>
     133    <addaction name="action_PauseAll"/>
     134    <addaction name="separator"/>
     135    <addaction name="action_Quit"/>
     136   </widget>
     137   <addaction name="menu_File"/>
     138   <addaction name="menuEdit"/>
    130139   <addaction name="menuTorrent"/>
    131    <addaction name="menuEdit"/>
    132140   <addaction name="menu_View"/>
    133141   <addaction name="menu_Help"/>
     
    537545   </property>
    538546  </action>
     547  <action name="action_CopyMagnetToClipboard">
     548   <property name="text">
     549    <string>&amp;Copy Magnet Link to Clipboard</string>
     550   </property>
     551  </action>
    539552 </widget>
    540553 <resources>
  • trunk/qt/session.cc

    r9330 r9662  
    1616#include <QApplication>
    1717#include <QByteArray>
     18#include <QClipboard>
    1819#include <QCoreApplication>
    1920#include <QDesktopServices>
     
    4950        TAG_ADD_TORRENT,
    5051        TAG_PORT_TEST,
     52        TAG_MAGNET_LINK,
    5153
    5254        FIRST_UNIQUE_TAG
     
    103105    tr_bencDictAddStr( &top, "method", "port-test" );
    104106    tr_bencDictAddInt( &top, "tag", TAG_PORT_TEST );
     107    exec( &top );
     108    tr_bencFree( &top );
     109}
     110
     111void
     112Session :: copyMagnetLinkToClipboard( int torrentId )
     113{
     114    tr_benc top;
     115    tr_bencInitDict( &top, 3 );
     116    tr_bencDictAddStr( &top, "method", "torrent-get" );
     117    tr_bencDictAddInt( &top, "tag", TAG_MAGNET_LINK );
     118    tr_benc * args = tr_bencDictAddDict( &top, "arguments", 2 );
     119    tr_bencListAddInt( tr_bencDictAddList( args, "ids", 1 ), torrentId );
     120    tr_bencListAddStr( tr_bencDictAddList( args, "fields", 1 ), "magnetLink" );
     121
    105122    exec( &top );
    106123    tr_bencFree( &top );
     
    679696                        tr_bencDictFindBool( args, "port-is-open", &isOpen );
    680697                    emit portTested( (bool)isOpen );
     698                }
     699
     700                case TAG_MAGNET_LINK: {
     701                    tr_benc * args;
     702                    tr_benc * torrents;
     703                    tr_benc * child;
     704                    const char * str;
     705                    if( tr_bencDictFindDict( &top, "arguments", &args )
     706                        && tr_bencDictFindList( args, "torrents", &torrents )
     707                        && (( child = tr_bencListChild( torrents, 0 )))
     708                        && tr_bencDictFindStr( child, "magnetLink", &str ) )
     709                            QApplication::clipboard()->setText( str );
     710                    break;
    681711                }
    682712
  • trunk/qt/session.h

    r9243 r9662  
    5959        void updateBlocklist( );
    6060        void portTest( );
     61        void copyMagnetLinkToClipboard( int torrentId );
    6162
    6263    public:
Note: See TracChangeset for help on using the changeset viewer.