24 #include <interfaces/torrentinterface.h> 
   25 #include <interfaces/trackerinterface.h> 
   49             QList<bt::TrackerInterface*> tracker_list = tc->getTrackersList()->getTrackers();
 
   50             foreach (bt::TrackerInterface* trk,tracker_list)
 
   52                 trackers.append(
new Item(trk));
 
   65         foreach (Item* t,trackers)
 
   72         running = tc->getStats().running;
 
   78         if (parent.isValid() || !tc)
 
   81             return trackers.count();
 
   95         if (!tc || !index.isValid() ||  index.row() < 0 || index.row() >= trackers.count())
 
   98         Item* item = (Item*)index.internalPointer();
 
  102         bt::TrackerInterface* trk = item->trk;
 
  104         if (role == Qt::CheckStateRole && index.column() == 0)
 
  106             return trk->isEnabled() ? Qt::Checked : Qt::Unchecked;
 
  108         else if (role == Qt::DisplayRole)
 
  110             return item->displayData(index.column());
 
  112         else if (role == Qt::UserRole)
 
  114             return item->sortData(index.column());
 
  116         else if (role == Qt::ForegroundRole && index.column() == 1 && trk->trackerStatus() == bt::TRACKER_ERROR)
 
  126         if (!tc || !index.isValid() || index.row() < 0 || index.row() >= trackers.count())
 
  129         if (role == Qt::CheckStateRole)
 
  131             KUrl url = trackers.at(index.row())->trk->trackerURL();
 
  132             tc->getTrackersList()->setTrackerEnabled(url,(Qt::CheckState)value.toUInt() == Qt::Checked);
 
  140         if (orientation != Qt::Horizontal)
 
  143         if (role == Qt::DisplayRole)
 
  147                 case 0: 
return i18n(
"Url");
 
  148                 case 1: 
return i18n(
"Status");
 
  149                 case 2: 
return i18n(
"Seeders");
 
  150                 case 3: 
return i18n(
"Leechers");
 
  151                 case 4: 
return i18n(
"Times Downloaded");
 
  152                 case 5: 
return i18n(
"Next Update");
 
  161         beginInsertRows(QModelIndex(),row,row + count - 1);
 
  164             QList<bt::TrackerInterface*> tracker_list = tc->getTrackersList()->getTrackers();
 
  165             QList<Item*>::iterator i = trackers.begin();
 
  166             foreach (bt::TrackerInterface* trk,tracker_list)
 
  168                 if (i != trackers.end())
 
  174                     trackers.append(
new Item(trk));
 
  185         beginRemoveRows(QModelIndex(),row,row + count - 1);
 
  188             for (
int i = 0;i < count;i++)
 
  190                 Item* item = trackers.takeAt(row);
 
  191                 KUrl url = item->trk->trackerURL();
 
  192                 tc->getTrackersList()->removeTracker(url);
 
  202         if (!tc || !index.isValid() || index.row() >= trackers.count() || index.row() < 0 || index.column() != 0)
 
  203             return QAbstractItemModel::flags(index);
 
  205             return QAbstractItemModel::flags(index) | Qt::ItemIsUserCheckable;
 
  210         if (parent.isValid() || row < 0 || row >= trackers.count() || column < 0 || column >= 6)
 
  211             return QModelIndex();
 
  213             return createIndex(row,column,trackers.at(row));
 
  219         if (!tc || !index.isValid() ||  index.row() < 0 || index.row() >= trackers.count())
 
  222         return ((Item*)index.internalPointer())->trk->trackerURL();
 
  227         if (!tc || !index.isValid() ||  index.row() < 0 || index.row() >= trackers.count())
 
  230         return ((Item*)index.internalPointer())->trk;
 
  235     TrackerModel::Item::Item(bt::TrackerInterface* tracker) : trk(tracker)
 
  237         seeders = leechers = -1;
 
  238         times_downloaded = -1;
 
  239         time_to_next_update = 0;
 
  240         status = tracker->trackerStatus();
 
  243     bool TrackerModel::Item::update()
 
  246         if (status != trk->trackerStatus())
 
  248             status = trk->trackerStatus();
 
  252         if (seeders != trk->getNumSeeders())
 
  254             seeders = trk->getNumSeeders();
 
  258         if (leechers != trk->getNumLeechers())
 
  260             leechers = trk->getNumLeechers();
 
  264         if (times_downloaded != trk->getTotalTimesDownloaded())
 
  266             times_downloaded = trk->getTotalTimesDownloaded();
 
  270         if (static_cast<bt::Uint32>(time_to_next_update) != trk->timeToNextUpdate())
 
  272             time_to_next_update = trk->timeToNextUpdate();
 
  279     QVariant TrackerModel::Item::displayData(
int column)
 const 
  283             case 0: 
return trk->trackerURL().prettyUrl();
 
  284             case 1: 
return trk->trackerStatusString();
 
  285             case 2: 
return seeders >= 0 ? seeders : QVariant();
 
  286             case 3: 
return leechers >= 0 ? leechers : QVariant();
 
  287             case 4: 
return times_downloaded >= 0 ? times_downloaded : QVariant();
 
  290                 int secs = time_to_next_update;
 
  292                     return QTime().addSecs(secs).toString(
"mm:ss");
 
  296             default: 
return QVariant();
 
  300     QVariant TrackerModel::Item::sortData(
int column)
 const 
  304             case 0: 
return trk->trackerURL().prettyUrl();
 
  305             case 1: 
return status;
 
  306             case 2: 
return seeders;
 
  307             case 3: 
return leechers;
 
  308             case 4: 
return times_downloaded;
 
  309             case 5: 
return time_to_next_update;
 
  310             default: 
return QVariant();
 
virtual QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const 
 
virtual int columnCount(const QModelIndex &parent) const 
 
virtual int rowCount(const QModelIndex &parent) const 
 
bt::TrackerInterface * tracker(const QModelIndex &idx)
Get a tracker given a model index. 
 
virtual QVariant data(const QModelIndex &index, int role) const 
 
virtual Qt::ItemFlags flags(const QModelIndex &index) const 
 
virtual bool setData(const QModelIndex &index, const QVariant &value, int role)
 
virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const 
 
KUrl trackerUrl(const QModelIndex &idx)
Get a tracker url given a model index. 
 
virtual bool removeRows(int row, int count, const QModelIndex &parent)
 
void changeTC(bt::TorrentInterface *tc)
 
TrackerModel(QObject *parent)
 
virtual bool insertRows(int row, int count, const QModelIndex &parent)