1/*
2 * This file Copyright (C) Mnemosyne LLC
3 *
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.
7 *
8 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
9 *
10 * $Id: torrent-model.h 11125 2010-08-05 15:01:40Z charles $
11 */
12
13#ifndef QTR_TORRENT_MODEL_H
14#define QTR_TORRENT_MODEL_H
15
16#include <QAbstractListModel>
17#include <QMap>
18#include <QSet>
19#include <QVector>
20
21#include "speed.h"
22#include "torrent.h"
23
24class Prefs;
25
26extern "C"
27{
28    struct tr_benc;
29};
30
31class TorrentModel: public QAbstractListModel
32{
33        Q_OBJECT
34
35    private:
36        typedef QMap<int,int> id_to_row_t;
37        typedef QMap<int,Torrent*> id_to_torrent_t;
38        typedef QVector<Torrent*> torrents_t;
39        id_to_row_t myIdToRow;
40        id_to_torrent_t myIdToTorrent;
41        torrents_t myTorrents;
42        Prefs& myPrefs;
43
44    public:
45        void clear( );
46        bool hasTorrent( const QString& hashString ) const;
47        virtual int rowCount( const QModelIndex& parent = QModelIndex() ) const;
48        virtual QVariant data( const QModelIndex& index, int role = Qt::DisplayRole ) const;
49        enum Role { TorrentRole = Qt::UserRole };
50
51    public:
52        Torrent* getTorrentFromId( int id );
53        const Torrent* getTorrentFromId( int id ) const;
54        QSet<int> getIds( ) const;
55
56    private:
57        void addTorrent( Torrent * );
58
59    public:
60        Speed getUploadSpeed( ) const;
61        Speed getDownloadSpeed( ) const;
62
63    signals:
64        void torrentsAdded( QSet<int> );
65
66    public slots:
67        void updateTorrents( tr_benc * torrentList, bool isCompleteList );
68        void removeTorrents( tr_benc * torrentList );
69        void removeTorrent( int id );
70
71    private slots:
72        void onTorrentChanged( int propertyId );
73
74    public:
75        TorrentModel( Prefs& prefs );
76        virtual ~TorrentModel( );
77};
78
79#endif
80