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