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)