File indexing completed on 2024-05-05 04:59:12

0001 /* This file is part of the KDE project
0002 
0003    Copyright (C) 2007 Lukas Appelhans <l.appelhans@gmx.de>
0004    Copyright (C) 2007 Joris Guisson   <joris.guisson@gmail.com>
0005 
0006    This program is free software; you can redistribute it and/or
0007    modify it under the terms of the GNU General Public
0008    License as published by the Free Software Foundation; either
0009    version 2 of the License, or (at your option) any later version.
0010 */
0011 
0012 #include "btadvanceddetailswidget.h"
0013 
0014 #include <interfaces/torrentinterface.h>
0015 #include <interfaces/trackerslist.h>
0016 
0017 #include "bittorrentsettings.h"
0018 #include "bttransferhandler.h"
0019 #include "chunkdownloadview.h"
0020 #include "fileview.h"
0021 #include "monitor.h"
0022 #include "peerview.h"
0023 #include "trackerview.h"
0024 #include "webseedstab.h"
0025 
0026 #include "kget_debug.h"
0027 
0028 #include <KConfigGroup>
0029 #include <KLocalizedString>
0030 #include <KSharedConfig>
0031 #include <KTitleWidget>
0032 #include <QDialog>
0033 #include <QGridLayout>
0034 #include <QTabWidget>
0035 
0036 using namespace kt;
0037 
0038 BTAdvancedDetailsWidget::BTAdvancedDetailsWidget(BTTransferHandler *transfer)
0039     : m_transfer(transfer)
0040 {
0041     tc = m_transfer->torrentControl();
0042 
0043     init();
0044 
0045     // This updates the widget with the right values
0046     slotTransferChanged(transfer, 0xFFFFFFFF);
0047 
0048     connect(m_transfer, &TransferHandler::transferChangedEvent, this, &BTAdvancedDetailsWidget::slotTransferChanged);
0049 }
0050 
0051 void BTAdvancedDetailsWidget::init()
0052 {
0053     setWindowTitle(i18n("Advanced Details for %1", m_transfer->source().fileName()));
0054     resize(500, 400);
0055     auto *layout = new QGridLayout();
0056     auto *titleWidget = new KTitleWidget(this);
0057     titleWidget->setText(i18n("Advanced Details for %1", m_transfer->source().fileName()));
0058     titleWidget->setIcon(QIcon::fromTheme("dialog-information"));
0059     layout->addWidget(titleWidget);
0060     tabWidget = new QTabWidget(this);
0061     layout->addWidget(tabWidget);
0062     setLayout(layout);
0063     file_view = new FileView(this);
0064     file_view->changeTC(tc, KSharedConfig::openConfig());
0065     tabWidget->insertTab(0, file_view, QIcon::fromTheme("inode-directory"), i18n("Files"));
0066     // peer_view = new PeerView(this);
0067     // tabWidget->insertTab(1, peer_view, QIcon::fromTheme("system-users"), i18n("Peers"));
0068     // cd_view = new ChunkDownloadView(this);
0069     // cd_view->changeTC(tc);
0070     // tabWidget->insertTab(2, cd_view, QIcon::fromTheme("preferences-plugin"), i18n("Chunks"));
0071     tracker_view = new TrackerView(this);
0072     tracker_view->changeTC(tc);
0073     tabWidget->insertTab(1, tracker_view, QIcon::fromTheme("network-server"), i18n("Trackers"));
0074     webseeds_tab = new WebSeedsTab(this);
0075     webseeds_tab->changeTC(tc);
0076     tabWidget->insertTab(2, webseeds_tab, QIcon::fromTheme("network-server"), i18n("Webseeds"));
0077     monitor = new Monitor(tc, nullptr, nullptr, file_view);
0078 }
0079 
0080 void BTAdvancedDetailsWidget::hideEvent(QHideEvent *event)
0081 {
0082     Q_UNUSED(event)
0083 
0084     if (tc)
0085         tc->setMonitor(nullptr);
0086     Q_EMIT aboutToClose();
0087     deleteLater();
0088 }
0089 
0090 kt::Monitor *BTAdvancedDetailsWidget::torrentMonitor() const
0091 {
0092     return monitor;
0093 }
0094 
0095 void BTAdvancedDetailsWidget::slotTransferChanged(TransferHandler *transfer, TransferHandler::ChangesFlags flags)
0096 {
0097     qCDebug(KGET_DEBUG) << "BTAdvancedDetailsWidget::slotTransferChanged";
0098 
0099     Q_UNUSED(transfer)
0100 
0101     if (flags & BTTransfer::Tc_ChunksTotal || flags & BTTransfer::Tc_ChunksDownloaded || flags & BTTransfer::Tc_ChunksExcluded
0102         || flags & BTTransfer::Tc_ChunksLeft || flags & Transfer::Tc_DownloadSpeed || flags & Transfer::Tc_UploadSpeed) {
0103         // if (tabWidget->currentIndex() == 1)
0104         //         peer_view->update();
0105         // else if (tabWidget->currentIndex() == 2)
0106         //         cd_view->update();
0107         /*else */ if (tabWidget->currentIndex() == 1)
0108             tracker_view->update();
0109     }
0110     /*else if (m_transfer->status() == Job::Stopped)
0111     {
0112         peer_view->removeAll();
0113         //cd_view->removeAll();
0114     }*/
0115 }
0116 
0117 #include "moc_btadvanceddetailswidget.cpp"