|
|
|
/* This file is part of the KDE project
|
|
|
|
Copyright (C) 2003 Andrew Stanley-Jones <asj-kde@cban.com>
|
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
|
|
modify it under the terms of the Artistic License.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "dccManager.h"
|
|
|
|
#include "dccNew.h"
|
|
|
|
|
|
|
|
#include <tqobject.h>
|
|
|
|
#include <tqsignal.h>
|
|
|
|
|
|
|
|
#include <kdebug.h>
|
|
|
|
#include <tdelocale.h>
|
|
|
|
#include <kpushbutton.h>
|
|
|
|
|
|
|
|
#define COL_FILE 1
|
|
|
|
#define COL_WHO 0
|
|
|
|
#define COL_STAT 2
|
|
|
|
#define COL_SIZE 3
|
|
|
|
#define COL_CPS 4
|
|
|
|
#define COL_PER 5
|
|
|
|
|
|
|
|
dccItem::dccItem( TDEListView *parent, dccManager *manager, enum dccType type, const TQString &file, const TQString& who, enum dccStatus status, unsigned int size )
|
|
|
|
: TQObject(), TDEListViewItem(parent), m_who(who), m_file(file), m_type(type)
|
|
|
|
{
|
|
|
|
m_percent = 0;
|
|
|
|
m_status = status;
|
|
|
|
m_size = size;
|
|
|
|
m_stime = 0;
|
|
|
|
m_lasttime = 0;
|
|
|
|
m_manager = manager;
|
|
|
|
|
|
|
|
setText(COL_FILE, file);
|
|
|
|
setText(COL_WHO, who);
|
|
|
|
setText(COL_STAT, enumToStatus(status));
|
|
|
|
if(m_type == dccChat)
|
|
|
|
setText(COL_SIZE, "");
|
|
|
|
else
|
|
|
|
setText(COL_SIZE, TQString("%1").arg(size));
|
|
|
|
setText(COL_PER, "");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
dccItem::dccItem( TDEListViewItem *parent, dccManager *manager, enum dccType type, const TQString &file, const TQString& who, enum dccStatus status, unsigned int size )
|
|
|
|
: TQObject(), TDEListViewItem(parent), m_who(who), m_file(file), m_type(type)
|
|
|
|
{
|
|
|
|
m_percent = 0;
|
|
|
|
m_status = status;
|
|
|
|
m_size = size;
|
|
|
|
m_stime = 0;
|
|
|
|
m_manager = manager;
|
|
|
|
|
|
|
|
setText(COL_FILE, file);
|
|
|
|
setText(COL_WHO, who);
|
|
|
|
setText(COL_STAT, enumToStatus(status));
|
|
|
|
if(type != dccChat)
|
|
|
|
setText(COL_SIZE, TQString("%1").arg(size));
|
|
|
|
setText(COL_PER, "");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
dccItem::~dccItem()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
TQString dccItem::enumToStatus(enum dccStatus status)
|
|
|
|
{
|
|
|
|
TQString str;
|
|
|
|
switch(status){
|
|
|
|
case dccRecving:
|
|
|
|
str = i18n("Receiving");
|
|
|
|
break;
|
|
|
|
case dccGotOffer:
|
|
|
|
str = i18n("Got Offer");
|
|
|
|
break;
|
|
|
|
case dccSentOffer:
|
|
|
|
str = i18n("Sent Offer");
|
|
|
|
break;
|
|
|
|
case dccWaitOnResume:
|
|
|
|
str = i18n("Resume Requested");
|
|
|
|
break;
|
|
|
|
case dccResumed:
|
|
|
|
str = i18n("Did Resume");
|
|
|
|
break;
|
|
|
|
case dccSending:
|
|
|
|
str = i18n("Sending");
|
|
|
|
break;
|
|
|
|
case dccOpen:
|
|
|
|
str = i18n("dcc status", "Open");
|
|
|
|
break;
|
|
|
|
case dccDone:
|
|
|
|
str = i18n("Done");
|
|
|
|
break;
|
|
|
|
case dccCancel:
|
|
|
|
str = i18n("Canceled");
|
|
|
|
break;
|
|
|
|
case dccError:
|
|
|
|
str = i18n("Error");
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
str = i18n("Unknown State");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return str;
|
|
|
|
}
|
|
|
|
|
|
|
|
void dccItem::setWhoPostfix(const TQString &post) {
|
|
|
|
m_post = post;
|
|
|
|
setText(COL_WHO, TQString("%1 %2").arg(m_who).arg(post));
|
|
|
|
}
|
|
|
|
|
|
|
|
void dccItem::changeFilename(const TQString &file) {
|
|
|
|
setText(COL_FILE, file);
|
|
|
|
m_file = file;
|
|
|
|
}
|
|
|
|
|
|
|
|
void dccItem::changeWho(const TQString &who) {
|
|
|
|
setText(COL_WHO, who);
|
|
|
|
m_who = who;
|
|
|
|
}
|
|
|
|
|
|
|
|
void dccItem::changeStatus(enum dccStatus status)
|
|
|
|
{
|
|
|
|
m_manager->doChanged();
|
|
|
|
setText(COL_STAT, enumToStatus(status));
|
|
|
|
m_status = status;
|
|
|
|
emit statusChanged(this);
|
|
|
|
}
|
|
|
|
|
|
|
|
void dccItem::setReceivedBytes(int bytes)
|
|
|
|
{
|
|
|
|
int per;
|
|
|
|
time_t ctime = time(NULL);
|
|
|
|
|
|
|
|
if(m_stime == 0)
|
|
|
|
m_stime = ctime-1;
|
|
|
|
|
|
|
|
if(m_size)
|
|
|
|
per = (100*bytes)/m_size;
|
|
|
|
else
|
|
|
|
per = 100;
|
|
|
|
|
|
|
|
if((per != (int)m_percent) ||
|
|
|
|
(ctime >= (m_lasttime + 2))
|
|
|
|
){
|
|
|
|
m_lasttime = ctime;
|
|
|
|
setText(COL_SIZE, TQString("%1/%2").arg(bytes).arg(m_size));
|
|
|
|
setText(COL_PER, TQString("%1%").arg(per));
|
|
|
|
m_percent = per;
|
|
|
|
if(m_status == dccResumed)
|
|
|
|
m_stime = 0; /* if we are got a resume request don't update CPS, reset it */
|
|
|
|
else
|
|
|
|
setText(COL_CPS, TQString("%1").arg(1.0*bytes/(time(NULL) - m_stime), 2));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void dccItem::doRename()
|
|
|
|
{
|
|
|
|
|
|
|
|
if(type() == dccGet){
|
|
|
|
setRenameEnabled(COL_FILE, true);
|
|
|
|
startRename(COL_FILE);
|
|
|
|
}
|
|
|
|
else if(type() == dccChat){
|
|
|
|
setText(COL_WHO, m_who);
|
|
|
|
setRenameEnabled(COL_WHO, true);
|
|
|
|
startRename(COL_WHO);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void dccItem::okRename(int col)
|
|
|
|
{
|
|
|
|
TDEListViewItem::okRename(col);
|
|
|
|
if(type() == dccGet){
|
|
|
|
TQString oldfile = m_file;
|
|
|
|
changeFilename(text(COL_FILE));
|
|
|
|
emit itemRenamed(this, m_who, oldfile);
|
|
|
|
setRenameEnabled(COL_FILE, false);
|
|
|
|
}
|
|
|
|
else if(type() == dccChat){
|
|
|
|
TQString oldwho = m_who;
|
|
|
|
changeWho(text(COL_WHO));
|
|
|
|
emit itemRenamed(this, oldwho, m_file);
|
|
|
|
setRenameEnabled(COL_WHO, false);
|
|
|
|
setWhoPostfix(m_post);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void dccItem::cancelRename(int col)
|
|
|
|
{
|
|
|
|
TDEListViewItem::cancelRename(col);
|
|
|
|
if(type() == dccChat){
|
|
|
|
setWhoPostfix(m_post);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
dccManager::dccManager( TQWidget *parent, const char *name ) : dccManagerbase( parent, name)
|
|
|
|
{
|
|
|
|
dccNewDialog = 0x0;
|
|
|
|
|
|
|
|
m_getit = new TDEListViewItem(klvBox, i18n("Get"));
|
|
|
|
m_sendit = new TDEListViewItem(klvBox, i18n("Send"));
|
|
|
|
m_chatit = new TDEListViewItem(klvBox, i18n("Chat"));
|
|
|
|
|
|
|
|
m_getit->setOpen(true);
|
|
|
|
m_sendit->setOpen(true);
|
|
|
|
m_chatit->setOpen(true);
|
|
|
|
|
|
|
|
m_getit->setSelectable(false);
|
|
|
|
m_sendit->setSelectable(false);
|
|
|
|
m_chatit->setSelectable(false);
|
|
|
|
|
|
|
|
// connect(klvBox, TQT_SIGNAL(clicked(TQListViewItem *)),
|
|
|
|
// this, TQT_SLOT(getSelChange(TQListViewItem *)));
|
|
|
|
connect(klvBox, TQT_SIGNAL(currentChanged(TQListViewItem *)),
|
|
|
|
this, TQT_SLOT(getSelChange(TQListViewItem *)));
|
|
|
|
|
|
|
|
klvBox->setCurrentItem(m_chatit);
|
|
|
|
getSelChange(klvBox->currentItem());
|
|
|
|
}
|
|
|
|
|
|
|
|
dccManager::~dccManager()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
dccItem *dccManager::newSendItem(TQString file, TQString who, enum dccItem::dccStatus status, unsigned int size)
|
|
|
|
{
|
|
|
|
emit changed(false, i18n("dcc activity"));
|
|
|
|
dccItem *it = new dccItem(m_sendit, this, dccItem::dccSend, file, who, status, size);
|
|
|
|
connect(it, TQT_SIGNAL(statusChanged(TQListViewItem *)),
|
|
|
|
this, TQT_SLOT(getSelChange(TQListViewItem *)));
|
|
|
|
return it;
|
|
|
|
}
|
|
|
|
|
|
|
|
dccItem *dccManager::newGetItem(TQString file, TQString who, enum dccItem::dccStatus status, unsigned int size)
|
|
|
|
{
|
|
|
|
emit changed(false, i18n("dcc activity"));
|
|
|
|
dccItem *it = new dccItem(m_getit, this, dccItem::dccGet, file, who, status, size);
|
|
|
|
connect(it, TQT_SIGNAL(statusChanged(TQListViewItem *)),
|
|
|
|
this, TQT_SLOT(getSelChange(TQListViewItem *)));
|
|
|
|
return it;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
dccItem *dccManager::newChatItem(TQString who, enum dccItem::dccStatus status)
|
|
|
|
{
|
|
|
|
emit changed(false, i18n("dcc activity"));
|
|
|
|
dccItem *it = new dccItem(m_chatit, this, dccItem::dccChat, "", who, status, 0);
|
|
|
|
connect(it, TQT_SIGNAL(statusChanged(TQListViewItem *)),
|
|
|
|
this, TQT_SLOT(getSelChange(TQListViewItem *)));
|
|
|
|
return it;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void dccManager::kpbNew_clicked()
|
|
|
|
{
|
|
|
|
if(dccNewDialog){
|
|
|
|
dccNewDialog->show();
|
|
|
|
dccNewDialog->raise();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
dccNewDialog = new dccNew();
|
|
|
|
dccNewDialog->show();
|
|
|
|
|
|
|
|
connect(dccNewDialog, TQT_SIGNAL(accepted(int, TQString, TQString)),
|
|
|
|
this, TQT_SLOT(dccNewAccepted(int, TQString, TQString)));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void dccManager::dccNewAccepted(int type, TQString nick, TQString file){
|
|
|
|
kdDebug(5008) << "Type: " << type << " nick: " << nick << " file: " << file << endl;
|
|
|
|
if(type == dccNew::Chat){
|
|
|
|
TQCString cstr = TQCString("/dcc chat ") + nick.latin1() + "\n";
|
|
|
|
kdDebug(5008) << "Output: " << cstr << endl;
|
|
|
|
emit outputLine(cstr);
|
|
|
|
}
|
|
|
|
else if(type == dccNew::Send){
|
|
|
|
TQCString cstr = TQCString("/dcc send ") + nick.latin1() + " " + file.latin1() + "\n";
|
|
|
|
emit outputLine(cstr);
|
|
|
|
}
|
|
|
|
delete dccNewDialog;
|
|
|
|
dccNewDialog = 0x0;
|
|
|
|
}
|
|
|
|
|
|
|
|
void dccManager::kpbConnect_clicked()
|
|
|
|
{
|
|
|
|
dccItem *it = dynamic_cast<dccItem *>(klvBox->currentItem());
|
|
|
|
if(it){
|
|
|
|
emit dccConnectClicked(it);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
void dccManager::kpbResume_clicked()
|
|
|
|
{
|
|
|
|
dccItem *it = dynamic_cast<dccItem *>(klvBox->currentItem());
|
|
|
|
if(it){
|
|
|
|
emit dccResumeClicked(it);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
void dccManager::kpbRename_clicked()
|
|
|
|
{
|
|
|
|
dccItem *it = dynamic_cast<dccItem *>(klvBox->currentItem());
|
|
|
|
if(it){
|
|
|
|
emit dccRenameClicked(it);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
void dccManager::kpbAbort_clicked()
|
|
|
|
{
|
|
|
|
dccItem *it = dynamic_cast<dccItem *>(klvBox->currentItem());
|
|
|
|
if(it){
|
|
|
|
emit dccAbortClicked(it);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void dccManager::getSelChange(TQListViewItem *_i) {
|
|
|
|
kpbAbort->setEnabled(false);
|
|
|
|
kpbResume->setEnabled(false);
|
|
|
|
kpbRename->setEnabled(false);
|
|
|
|
kpbConnect->setEnabled(false);
|
|
|
|
|
|
|
|
if(_i == 0)
|
|
|
|
return;
|
|
|
|
dccItem *it = dynamic_cast<dccItem *>(_i);
|
|
|
|
if(!it)
|
|
|
|
return;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Everything is off by default
|
|
|
|
* We need to turn on what we want
|
|
|
|
*/
|
|
|
|
switch(it->type()){
|
|
|
|
case dccItem::dccChat:
|
|
|
|
kdDebug(5008) << "is a chat" << endl;
|
|
|
|
kpbAbort->setEnabled(true);
|
|
|
|
switch(it->status()){
|
|
|
|
case dccItem::dccGotOffer:
|
|
|
|
kpbConnect->setEnabled(true);
|
|
|
|
break;
|
|
|
|
case dccItem::dccOpen:
|
|
|
|
kpbRename->setEnabled(true);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case dccItem::dccGet:
|
|
|
|
kdDebug(5008) << "is a get" << endl;
|
|
|
|
kpbAbort->setEnabled(true);
|
|
|
|
switch(it->status()){
|
|
|
|
case dccItem::dccGotOffer:
|
|
|
|
case dccItem::dccWaitOnResume:
|
|
|
|
case dccItem::dccResumed:
|
|
|
|
kpbResume->setEnabled(true);
|
|
|
|
kpbConnect->setEnabled(true);
|
|
|
|
kpbRename->setEnabled(true);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case dccItem::dccSend:
|
|
|
|
kdDebug(5008) << "is a send" << endl;
|
|
|
|
kpbAbort->setEnabled(true);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
void dccManager::sendSelChange(TQListViewItem *) {
|
|
|
|
/*
|
|
|
|
if(_i == 0)
|
|
|
|
return;
|
|
|
|
dccItem *it = static_cast<dccItem *>(_i);
|
|
|
|
|
|
|
|
kdDebug(5008) << "got: " << it->who() << " file: " << it->file() << endl;
|
|
|
|
|
|
|
|
switch(it->status()){
|
|
|
|
case dccItem::dccSending:
|
|
|
|
case dccItem::dccRecving:
|
|
|
|
kpbSendStop->setText(i18n("Abort"));
|
|
|
|
break;
|
|
|
|
case dccItem::dccOffer:
|
|
|
|
kpbSendStop->setText(i18n("Forget"));
|
|
|
|
break;
|
|
|
|
case dccItem::dccDone:
|
|
|
|
kpbSendStop->setText(i18n("Clear"));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
*/
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#include "dccManager.moc"
|
|
|
|
|