|
|
|
/***************************************************************************
|
|
|
|
* Copyright (C) 2005 by Joris Guisson *
|
|
|
|
* joris.guisson@gmail.com *
|
|
|
|
* *
|
|
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
|
|
* it under the terms of the GNU General Public License as published by *
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
|
|
* (at your option) any later version. *
|
|
|
|
* *
|
|
|
|
* This program is distributed in the hope that it will be useful, *
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
|
|
* GNU General Public License for more details. *
|
|
|
|
* *
|
|
|
|
* You should have received a copy of the GNU General Public License *
|
|
|
|
* along with this program; if not, write to the *
|
|
|
|
* Free Software Foundation, Inc., *
|
|
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
|
|
|
|
***************************************************************************/
|
|
|
|
#include <klocale.h>
|
|
|
|
#include <tqlabel.h>
|
|
|
|
#include <interfaces/chunkdownloadinterface.h>
|
|
|
|
#include <interfaces/functions.h>
|
|
|
|
#include <interfaces/torrentinterface.h>
|
|
|
|
#include "chunkdownloadview.h"
|
|
|
|
|
|
|
|
|
|
|
|
using namespace bt;
|
|
|
|
using namespace kt;
|
|
|
|
|
|
|
|
namespace kt
|
|
|
|
{
|
|
|
|
|
|
|
|
ChunkDownloadViewItem::ChunkDownloadViewItem(KListView* cdv,kt::ChunkDownloadInterface* cd)
|
|
|
|
: KListViewItem(cdv),cd(cd)
|
|
|
|
{
|
|
|
|
update();
|
|
|
|
}
|
|
|
|
|
|
|
|
void ChunkDownloadViewItem::update()
|
|
|
|
{
|
|
|
|
ChunkDownloadInterface::Stats s;
|
|
|
|
cd->getStats(s);
|
|
|
|
|
|
|
|
setText(0,TQString::number(s.chunk_index));
|
|
|
|
setText(1,TQString("%1 / %2").arg(s.pieces_downloaded).arg(s.total_pieces));
|
|
|
|
setText(2,s.current_peer_id);
|
|
|
|
setText(3,KBytesPerSecToString(s.download_speed / 1024.0));
|
|
|
|
setText(4,TQString::number(s.num_downloaders));
|
|
|
|
}
|
|
|
|
|
|
|
|
int ChunkDownloadViewItem::compare(TQListViewItem * i,int col,bool) const
|
|
|
|
{
|
|
|
|
ChunkDownloadViewItem* it = (ChunkDownloadViewItem*)i;
|
|
|
|
kt::ChunkDownloadInterface* ocd = it->cd;
|
|
|
|
ChunkDownloadInterface::Stats s;
|
|
|
|
cd->getStats(s);
|
|
|
|
ChunkDownloadInterface::Stats os;
|
|
|
|
ocd->getStats(os);
|
|
|
|
switch (col)
|
|
|
|
{
|
|
|
|
case 0: return CompareVal(s.chunk_index,os.chunk_index);
|
|
|
|
case 1: return CompareVal(s.pieces_downloaded,os.pieces_downloaded);
|
|
|
|
case 2: return TQString::compare(s.current_peer_id,os.current_peer_id);
|
|
|
|
case 3: return CompareVal(s.download_speed,os.download_speed);
|
|
|
|
case 4: return CompareVal(s.num_downloaders,os.num_downloaders);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ChunkDownloadView::ChunkDownloadView(TQWidget *parent, const char *name)
|
|
|
|
: ChunkDownloadViewBase(parent, name)
|
|
|
|
{
|
|
|
|
m_list_view->setShowSortIndicator(true);
|
|
|
|
m_list_view->setAllColumnsShowFocus(true);
|
|
|
|
|
|
|
|
m_list_view->setColumnAlignment(0,TQt::AlignLeft);
|
|
|
|
m_list_view->setColumnAlignment(1,TQt::AlignCenter);
|
|
|
|
m_list_view->setColumnAlignment(3,TQt::AlignRight);
|
|
|
|
m_list_view->setColumnAlignment(4,TQt::AlignRight);
|
|
|
|
curr_tc = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ChunkDownloadView::~ChunkDownloadView()
|
|
|
|
{}
|
|
|
|
|
|
|
|
|
|
|
|
void ChunkDownloadView::addDownload(kt::ChunkDownloadInterface* cd)
|
|
|
|
{
|
|
|
|
ChunkDownloadViewItem* it = new ChunkDownloadViewItem(m_list_view,cd);
|
|
|
|
items.insert(cd,it);
|
|
|
|
}
|
|
|
|
|
|
|
|
void ChunkDownloadView::removeDownload(kt::ChunkDownloadInterface* cd)
|
|
|
|
{
|
|
|
|
if (!items.contains(cd))
|
|
|
|
return;
|
|
|
|
|
|
|
|
ChunkDownloadViewItem* it = items[cd];
|
|
|
|
delete it;
|
|
|
|
items.remove(cd);
|
|
|
|
}
|
|
|
|
|
|
|
|
void ChunkDownloadView::removeAll()
|
|
|
|
{
|
|
|
|
m_list_view->clear();
|
|
|
|
items.clear();
|
|
|
|
}
|
|
|
|
|
|
|
|
void ChunkDownloadView::changeTC(kt::TorrentInterface* tc)
|
|
|
|
{
|
|
|
|
curr_tc = tc;
|
|
|
|
setEnabled(curr_tc != 0);
|
|
|
|
update();
|
|
|
|
}
|
|
|
|
|
|
|
|
void ChunkDownloadView::update()
|
|
|
|
{
|
|
|
|
if (!curr_tc)
|
|
|
|
return;
|
|
|
|
|
|
|
|
TQMap<ChunkDownloadInterface*,ChunkDownloadViewItem*>::iterator i = items.begin();
|
|
|
|
while (i != items.end())
|
|
|
|
{
|
|
|
|
ChunkDownloadViewItem* it = i.data();
|
|
|
|
it->update();
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
m_list_view->sort();
|
|
|
|
|
|
|
|
const TorrentStats & s = curr_tc->getStats();
|
|
|
|
m_chunks_downloading->setText(TQString::number(s.num_chunks_downloading));
|
|
|
|
m_chunks_downloaded->setText(TQString::number(s.num_chunks_downloaded));
|
|
|
|
m_total_chunks->setText(TQString::number(s.total_chunks));
|
|
|
|
m_excluded_chunks->setText(TQString::number(s.num_chunks_excluded));
|
|
|
|
m_chunks_left->setText(TQString::number(s.num_chunks_left));
|
|
|
|
|
|
|
|
if( s.chunk_size / 1024 < 1024 )
|
|
|
|
m_size_chunks->setText(TQString::number(s.chunk_size / 1024) + "." + TQString::number((s.chunk_size % 1024) / 100) + " KB");
|
|
|
|
else
|
|
|
|
m_size_chunks->setText(TQString::number(s.chunk_size / 1024 / 1024) + "." + TQString::number(((s.chunk_size / 1024) % 1024) / 100) + " MB");
|
|
|
|
}
|
|
|
|
|
|
|
|
void ChunkDownloadView::saveLayout(KConfig* cfg,const TQString & group_name)
|
|
|
|
{
|
|
|
|
m_list_view->saveLayout(cfg,group_name);
|
|
|
|
}
|
|
|
|
|
|
|
|
void ChunkDownloadView::restoreLayout(KConfig* cfg,const TQString & group_name)
|
|
|
|
{
|
|
|
|
m_list_view->restoreLayout(cfg,group_name);
|
|
|
|
}
|
|
|
|
|
|
|
|
void ChunkDownloadView::clear()
|
|
|
|
{
|
|
|
|
m_chunks_downloading->clear();
|
|
|
|
m_chunks_downloaded->clear();
|
|
|
|
m_total_chunks->clear();
|
|
|
|
m_excluded_chunks->clear();
|
|
|
|
m_size_chunks->clear();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#include "chunkdownloadview.moc"
|