/* 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. */ /* Copyright (C) 2007 Shintaro Matsuoka */ #include "dcctransferdetailedinfopanel.h" #include "channel.h" #include "dcctransfer.h" #include "dcctransfermanager.h" #include "dcctransferrecv.h" #include "dcctransferpanelitem.h" #include "konversationapplication.h" #include "connectionmanager.h" #include "server.h" #include #include #include #include #include #include #include #include DccTransferDetailedInfoPanel::DccTransferDetailedInfoPanel( TQWidget* parent, const char* name ) : DccTransferDetailedInfoPanelUI( parent, name ) { m_autoViewUpdateTimer = new TQTimer( this ); connect( m_urlreqLocation, TQT_SIGNAL( textChanged( const TQString& ) ), this, TQT_SLOT( slotLocationChanged( const TQString& ) ) ); connect( m_buttonOpenFolder, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotOpenFolderButtonClicked() ) ); connect( KonversationApplication::instance()->getDccTransferManager(), TQT_SIGNAL( fileURLChanged( DccTransferRecv* ) ), this, TQT_SLOT( updateView() ) ); // it's a little rough.. } DccTransferDetailedInfoPanel::~DccTransferDetailedInfoPanel() { } void DccTransferDetailedInfoPanel::setItem( DccTransferPanelItem* item ) { m_autoViewUpdateTimer->stop(); // disconnect all slots once disconnect( this ); // we can't do disconnect( m_item->transfer(), 0, this, 0 ) here // because m_item can have been deleted already. // set up the auto view-update timer connect( m_autoViewUpdateTimer, TQT_SIGNAL( timeout() ), this, TQT_SLOT( updateView() ) ); m_item = item; // If the file is already being transferred, the timer must be started here, // otherwise the information will not be updated every 0.5sec if (m_item->transfer()->getStatus() == DccTransfer::Transferring) m_autoViewUpdateTimer->start(500, false); connect( m_item->transfer(), TQT_SIGNAL( statusChanged( DccTransfer*, int, int ) ), this, TQT_SLOT( slotTransferStatusChanged( DccTransfer*, int, int ) ) ); updateView(); } void DccTransferDetailedInfoPanel::updateView() { DccTransfer* transfer = m_item->transfer(); // Type: TQString type( transfer->getType() == DccTransfer::Send ? i18n( "DCC Send" ) : i18n( "DCC Receive" ) ); if ( transfer->isReverse() ) type += i18n( " (Reverse DCC)" ); m_labelDccType->setText( type ); // Filename: m_labelFilename->setText( transfer->getFileName() ); // Location: m_urlreqLocation->setURL( transfer->getFileURL().prettyURL() ); //m_urlreqLocation->lineEdit()->setFocusPolicy( transfer->getStatus() == DccTransfer::Queued ? StrongFocus : ClickFocus ); m_urlreqLocation->lineEdit()->setReadOnly( transfer->getStatus() != DccTransfer::Queued ); m_urlreqLocation->lineEdit()->setFrame( transfer->getStatus() == DccTransfer::Queued ); m_urlreqLocation->button()->setEnabled( transfer->getStatus() == DccTransfer::Queued ); m_buttonOpenFolder->setEnabled( !m_urlreqLocation->lineEdit()->text().isEmpty() ); // Partner: TQString partnerInfoServerName; if ( transfer->getConnectionId() == -1 ) partnerInfoServerName = i18n( "Unknown server" ); else if ( KonversationApplication::instance()->getConnectionManager()->getServerByConnectionId( transfer->getConnectionId() ) ) partnerInfoServerName = KonversationApplication::instance()->getConnectionManager()->getServerByConnectionId( transfer->getConnectionId() )->getServerName(); else partnerInfoServerName = i18n( "Unknown server" ); TQString partnerInfo( i18n( "%1 on %2" ) .arg( transfer->getPartnerNick().isEmpty() ? "?" : transfer->getPartnerNick() ) .arg( partnerInfoServerName ) ); if ( !transfer->getPartnerIp().isEmpty() ) partnerInfo += i18n( ", %1 (port %2)" ).arg( transfer->getPartnerIp() ).arg( transfer->getPartnerPort() ); m_labelPartner->setText( partnerInfo ); // Self: if ( transfer->getOwnIp().isEmpty() ) m_labelSelf->setText( "" ); else m_labelSelf->setText( i18n( "%1 (port %2)" ).arg( transfer->getOwnIp() ).arg( transfer->getOwnPort() ) ); // Status: if ( transfer->getStatus() == DccTransfer::Transferring ) m_labelStatus->setText( m_item->getStatusText() + " ( " + m_item->getCurrentSpeedPrettyText() + " )" ); else m_labelStatus->setText( transfer->getStatusDetail().isEmpty() ? m_item->getStatusText() : m_item->getStatusText() + " (" + transfer->getStatusDetail() + ')' ); // Progress: m_progress->setProgress( transfer->getProgress() ); // Current Position: m_labelCurrentPosition->setText( TDEGlobal::locale()->formatNumber( transfer->getTransferringPosition(), 0 ) ); // File Size: m_labelFileSize->setText( TDEGlobal::locale()->formatNumber( transfer->getFileSize(), 0 ) ); // Current Speed: m_labelCurrentSpeed->setText( m_item->getCurrentSpeedPrettyText() ); // Average Speed: m_labelAverageSpeed->setText( m_item->getAverageSpeedPrettyText() ); // Resumed: if ( transfer->isResumed() ) m_labelIsResumed->setText( i18n( "Yes, %1" ).arg( TDEGlobal::locale()->formatNumber( transfer->getTransferStartPosition(), 0 ) ) ); else m_labelIsResumed->setText( i18n( "No" ) ); // Transferring Time: if ( transfer->getTimeTransferStarted().isNull() ) m_labelTransferringTime->setText( "" ); else { int transferringTime; // The transfer is still in progress if ( transfer->getTimeTransferFinished().isNull() ) transferringTime = transfer->getTimeTransferStarted().secsTo( TQDateTime::currentDateTime() ); // The transfer has finished else transferringTime = transfer->getTimeTransferStarted().secsTo( transfer->getTimeTransferFinished() ); if ( transferringTime >= 1 ) m_labelTransferringTime->setText( DccTransferPanelItem::secToHMS( transferringTime ) ); else m_labelTransferringTime->setText( i18n( "< 1sec" ) ); } // Estimated Time Left: m_labelTimeLeft->setText( m_item->getTimeLeftPrettyText() ); // Offered at: m_labelTimeOffered->setText( transfer->getTimeOffer().toString( "hh:mm:ss" ) ); // Started at: if ( !transfer->getTimeTransferStarted().isNull() ) m_labelTimeStarted->setText( transfer->getTimeTransferStarted().toString( "hh:mm:ss" ) ); else m_labelTimeStarted->setText( "" ); // Finished at: if ( !transfer->getTimeTransferFinished().isNull() ) m_labelTimeFinished->setText( transfer->getTimeTransferFinished().toString( "hh:mm:ss" ) ); else m_labelTimeFinished->setText( "" ); } void DccTransferDetailedInfoPanel::slotTransferStatusChanged( DccTransfer* /* transfer */, int newStatus, int oldStatus ) { updateView(); if ( newStatus == DccTransfer::Transferring ) { // start auto view-update timer m_autoViewUpdateTimer->start( 500, false ); } else if ( oldStatus == DccTransfer::Transferring ) { // stop auto view-update timer m_autoViewUpdateTimer->stop(); } } void DccTransferDetailedInfoPanel::slotLocationChanged( const TQString& url ) { if ( m_item->transfer()->getType() == DccTransfer::Receive ) { DccTransferRecv* transfer = static_cast< DccTransferRecv* >( m_item->transfer() ); transfer->setFileURL( KURL::fromPathOrURL( url ) ); } } void DccTransferDetailedInfoPanel::slotOpenFolderButtonClicked() { TQString urlString = m_urlreqLocation->lineEdit()->text(); if ( !urlString.isEmpty() ) { KURL url = KURL::fromPathOrURL( urlString ); url.setFileName( TQString() ); new KRun( url, 0, true, true ); } } #include "dcctransferdetailedinfopanel.moc"