1 /***************************************************************************
2 * Copyright (C) 2006-2007 by Joris Guisson, Ivan Vasic *
3 * joris.guisson@gmail.com *
6 * This program is free software; you can redistribute it and/or modify *
7 * it under the terms of the GNU General Public License as published by *
8 * the Free Software Foundation; either version 2 of the License, or *
9 * (at your option) any later version. *
11 * This program is distributed in the hope that it will be useful, *
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14 * GNU General Public License for more details. *
16 * You should have received a copy of the GNU General Public License *
17 * along with this program; if not, write to the *
18 * Free Software Foundation, Inc., *
19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
20 ***************************************************************************/
21 #include "trackerview.h"
22 #include <interfaces/torrentinterface.h>
23 #include <interfaces/trackerslist.h>
25 #include <qdatetime.h>
30 #include <kmessagebox.h>
33 #include <torrent/globals.h>
36 #include "trackermodel.h"
44 TrackerView::TrackerView(QWidget
*parent
)
45 : QWidget(parent
), tc(0)
48 model
= new TrackerModel(this);
49 m_tracker_list
->setModel(model
);
50 connect(m_add_tracker
,SIGNAL(clicked()),this,SLOT(addClicked()));
51 connect(m_remove_tracker
,SIGNAL(clicked()),this,SLOT(removeClicked()));
52 connect(m_announce
,SIGNAL(clicked()),this,SLOT(updateClicked()));
53 connect(m_scrape
,SIGNAL(clicked()),this,SLOT(scrapeClicked()));
54 connect(m_change_tracker
,SIGNAL(clicked()),this,SLOT(changeClicked()));
55 connect(m_restore_defaults
,SIGNAL(clicked()),this,SLOT(restoreClicked()));
56 connect(m_tracker_list
->selectionModel(),SIGNAL(currentChanged(const QModelIndex
&, const QModelIndex
&)),
57 this,SLOT(currentChanged(const QModelIndex
&, const QModelIndex
&)));
59 m_url
->setTextFormat(Qt::RichText
);
60 m_url
->setTextInteractionFlags(Qt::TextSelectableByMouse
| Qt::TextSelectableByKeyboard
);
62 m_status
->setTextFormat(Qt::RichText
);
63 m_status
->setTextInteractionFlags(Qt::TextSelectableByMouse
| Qt::TextSelectableByKeyboard
);
65 m_next_update
->setTextFormat(Qt::RichText
);
67 m_add_tracker
->setIcon(KIcon("list-add"));
68 m_remove_tracker
->setIcon(KIcon("list-remove"));
69 m_restore_defaults
->setIcon(KIcon("kt-restore-defaults"));
70 m_change_tracker
->setIcon(KIcon("kt-change-tracker"));
76 TrackerView::~TrackerView()
80 void TrackerView::addClicked()
82 if (!tc
|| m_tracker_to_add
->text().trimmed().isEmpty())
85 if (tc
->getStats().priv_torrent
)
87 KMessageBox::sorry(0, i18n("Cannot add a tracker to a private torrent."));
91 KUrl
url(m_tracker_to_add
->text());
94 KMessageBox::error(0, i18n("Malformed URL."));
99 if (model
->hasTracker(url
))
101 KMessageBox::sorry(0,i18n("There already is a tracker named <b>%1</b>.",m_tracker_to_add
->text()));
105 tc
->getTrackersList()->addTracker(url
,true);
106 model
->insertRow(model
->rowCount(QModelIndex()));
107 m_tracker_to_add
->clear();
110 void TrackerView::removeClicked()
112 QModelIndex current
= m_tracker_list
->selectionModel()->currentIndex();
113 if (!current
.isValid())
116 if (tc
->getTrackersList()->removeTracker(model
->trackerUrl(current
)))
117 model
->removeRow(current
.row());
119 KMessageBox::sorry(0, i18n("Cannot remove torrent default tracker."));
122 void TrackerView::changeClicked()
124 QModelIndex current
= m_tracker_list
->selectionModel()->currentIndex();
125 if (!current
.isValid())
128 KUrl url
= model
->trackerUrl(current
);
129 if (tc
->getTrackersList()->isTrackerEnabled(url
))
131 tc
->getTrackersList()->setTracker(url
);
136 void TrackerView::restoreClicked()
138 tc
->getTrackersList()->restoreDefault();
140 model
->changeTC(tc
); // trigger reset
143 void TrackerView::updateClicked()
151 void TrackerView::scrapeClicked()
159 void TrackerView::changeTC(TorrentInterface
* ti
)
169 void TrackerView::update()
174 const TorrentStats
& s
= tc
->getStats();
178 t
= t
.addSecs(tc
->getTimeToNextTrackerUpdate());
179 m_next_update
->setText("<b>" + t
.toString("mm:ss") + "</b>");
183 m_next_update
->clear();
186 m_leechers
->setText(QString("<b>%1</b>").arg(s
.leechers_total
));
187 m_seeders
->setText(QString("<b>%1</b>").arg(s
.seeders_total
));
188 m_times_downloaded
->setText(QString("<b>%1</b>").arg(s
.total_times_downloaded
));
190 //Update manual annunce button
191 m_announce
->setEnabled(s
.running
&& tc
->announceAllowed());
193 m_status
->setText("<b>" + s
.tracker_status_string
+ "</b>");
194 if (tc
->getTrackersList())
195 m_url
->setText("<b>" + tc
->getTrackersList()->getTrackerURL().prettyUrl() + "</b>");
199 m_add_tracker
->setEnabled(!m_tracker_to_add
->text().isEmpty() && !tc
->getStats().priv_torrent
);
202 void TrackerView::torrentChanged(TorrentInterface
* ti
)
209 m_next_update
->clear();
210 m_tracker_to_add
->clear();
213 m_times_downloaded
->clear();
215 m_add_tracker
->setEnabled(false);
216 m_remove_tracker
->setEnabled(false);
217 m_restore_defaults
->setEnabled(false);
218 m_change_tracker
->setEnabled(false);
219 m_announce
->setEnabled(false);
224 const TorrentStats
& s
= tc
->getStats();
228 m_add_tracker
->setEnabled(false);
229 m_remove_tracker
->setEnabled(false);
230 m_restore_defaults
->setEnabled(false);
231 m_tracker_to_add
->setText(i18n("You cannot add trackers to a private torrent"));
232 m_tracker_to_add
->setEnabled(false);
236 m_add_tracker
->setEnabled(true);
237 m_remove_tracker
->setEnabled(true);
238 m_restore_defaults
->setEnabled(true);
239 m_tracker_to_add
->clear();
240 m_tracker_to_add
->setEnabled(true);
244 m_announce
->setEnabled(s
.running
&& tc
->announceAllowed());
245 currentChanged(m_tracker_list
->selectionModel()->currentIndex(),QModelIndex());
248 void TrackerView::currentChanged(const QModelIndex
& current
,const QModelIndex
& previous
)
253 m_change_tracker
->setEnabled(false);
257 const TorrentStats
& s
= tc
->getStats();
259 KUrl url
= model
->trackerUrl(current
);
260 m_change_tracker
->setEnabled(s
.running
&& model
->rowCount(QModelIndex()) > 1 && tc
->getTrackersList()->isTrackerEnabled(url
));
265 #include "trackerview.moc"