source: branches/2.0x/qt/session.h @ 11108

Last change on this file since 11108 was 11108, checked in by charles, 12 years ago

(2.0x qt) #3481 "crash when accessing a remote session that's password protected" -- fixed

  • Property svn:keywords set to Date Rev Author Id
File size: 4.8 KB
Line 
1/*
2 * This file Copyright (C) 2009-2010 Mnemosyne LLC
3 *
4 * This file is licensed by the GPL version 2.  Works owned by the
5 * Transmission project are granted a special exemption to clause 2(b)
6 * so that the bulk of its code can remain under the MIT license.
7 * This exemption does not extend to derived works not owned by
8 * the Transmission project.
9 *
10 * $Id: session.h 11108 2010-08-04 13:56:51Z charles $
11 */
12
13#ifndef TR_APP_SESSION_H
14#define TR_APP_SESSION_H
15
16#include <QObject>
17#include <QSet>
18#include <QBuffer>
19#include <QFileInfoList>
20#include <QNetworkAccessManager>
21#include <QString>
22#include <QUrl>
23
24#include <libtransmission/transmission.h>
25
26#include "speed.h"
27
28extern "C"
29{
30    struct tr_benc;
31}
32
33class Prefs;
34
35class Session: public QObject
36{
37        Q_OBJECT
38
39    public:
40        Session( const char * configDir, Prefs& prefs );
41        ~Session( );
42
43    public:
44        void stop( );
45        void restart( );
46
47    private:
48        void start( );
49
50    public:
51        const QUrl& getRemoteUrl( ) const { return myUrl; }
52        const struct tr_session_stats& getStats( ) const { return myStats; }
53        const struct tr_session_stats& getCumulativeStats( ) const { return myCumulativeStats; }
54        const QString& sessionVersion( ) const { return mySessionVersion; }
55
56    public:
57        int64_t blocklistSize( ) const { return myBlocklistSize; }
58        void setBlocklistSize( int64_t i );
59        void updateBlocklist( );
60        void portTest( );
61        void copyMagnetLinkToClipboard( int torrentId );
62
63    public:
64
65        /** returns true if the transmission session is being run inside this client */
66        bool isServer( ) const;
67
68        /** returns true if isServer() is true or if the remote address is the localhost */
69        bool isLocal( ) const;
70
71    private:
72        void updateStats( struct tr_benc * args );
73        void updateInfo( struct tr_benc * args );
74        void parseResponse( const char * json, size_t len );
75        static void localSessionCallback( tr_session *, const char *, size_t, void * );
76
77    public:
78        void exec( const char * json );
79        void exec( const struct tr_benc * request );
80
81    public:
82        int64_t getUniqueTag( ) { return nextUniqueTag++; }
83
84    private:
85        void sessionSet( const char * key, const QVariant& variant );
86        void pumpRequests( );
87        void sendTorrentRequest( const char * request, const QSet<int>& torrentIds );
88        static void updateStats( struct tr_benc * d, struct tr_session_stats * stats );
89        void refreshTorrents( const QSet<int>& torrentIds );
90        QNetworkAccessManager * networkAccessManager( );
91
92    public:
93        void torrentSet( const QSet<int>& ids, const QString& key, bool val );
94        void torrentSet( const QSet<int>& ids, const QString& key, int val );
95        void torrentSet( const QSet<int>& ids, const QString& key, double val );
96        void torrentSet( const QSet<int>& ids, const QString& key, const QList<int>& val );
97        void torrentSetLocation( const QSet<int>& ids, const QString& path, bool doMove );
98
99
100    public slots:
101        void pauseTorrents( const QSet<int>& torrentIds = QSet<int>() );
102        void startTorrents( const QSet<int>& torrentIds = QSet<int>() );
103        void refreshSessionInfo( );
104        void refreshSessionStats( );
105        void refreshActiveTorrents( );
106        void refreshAllTorrents( );
107        void initTorrents( const QSet<int>& ids = QSet<int>() );
108        void addTorrent( QString filename );
109        void addTorrent( QString filename, QString localPath );
110        void removeTorrents( const QSet<int>& torrentIds, bool deleteFiles=false );
111        void verifyTorrents( const QSet<int>& torrentIds );
112        void reannounceTorrents( const QSet<int>& torrentIds );
113        void launchWebInterface( );
114        void updatePref( int key );
115
116        /** request a refresh for statistics, including the ones only used by the properties dialog, for a specific torrent */
117        void refreshExtraStats( const QSet<int>& ids );
118
119    private slots:
120        void onFinished( QNetworkReply * reply );
121
122    signals:
123        void executed( int64_t tag, const QString& result, struct tr_benc * arguments );
124        void sourceChanged( );
125        void portTested( bool isOpen );
126        void statsUpdated( );
127        void sessionUpdated( );
128        void blocklistUpdated( int );
129        void torrentsUpdated( struct tr_benc * torrentList, bool completeList );
130        void torrentsRemoved( struct tr_benc * torrentList );
131        void dataReadProgress( );
132        void dataSendProgress( );
133        void httpAuthenticationRequired( );
134
135    private:
136        int64_t nextUniqueTag;
137        int64_t myBlocklistSize;
138        Prefs& myPrefs;
139        tr_session * mySession;
140        QString myConfigDir;
141        QString mySessionId;
142        QUrl myUrl;
143        QNetworkAccessManager * myNAM;
144        struct tr_session_stats myStats;
145        struct tr_session_stats myCumulativeStats;
146        QString mySessionVersion;
147};
148
149#endif
150
Note: See TracBrowser for help on using the repository browser.