author | skyhusker <skyhusker> | 2005-02-03 21:47:50 (UTC) |
---|---|---|
committer | skyhusker <skyhusker> | 2005-02-03 21:47:50 (UTC) |
commit | 8aaae9e3eca7853e9c693d2401f721d75209acf7 (patch) (unidiff) | |
tree | 6f700d154fac8510b322242496604d0ad7589377 /noncore/net/opieirc | |
parent | 875b3b63624308f4e50f82e17db27edeb9609d6c (diff) | |
download | opie-8aaae9e3eca7853e9c693d2401f721d75209acf7.zip opie-8aaae9e3eca7853e9c693d2401f721d75209acf7.tar.gz opie-8aaae9e3eca7853e9c693d2401f721d75209acf7.tar.bz2 |
Added DCC receive support
-rw-r--r-- | noncore/net/opieirc/dccprogress.cpp | 75 | ||||
-rw-r--r-- | noncore/net/opieirc/dccprogress.h | 35 | ||||
-rw-r--r-- | noncore/net/opieirc/dcctransfer.cpp | 41 | ||||
-rw-r--r-- | noncore/net/opieirc/dcctransfer.h | 44 | ||||
-rw-r--r-- | noncore/net/opieirc/dcctransferrecv.cpp | 53 | ||||
-rw-r--r-- | noncore/net/opieirc/dcctransferrecv.h | 21 | ||||
-rw-r--r-- | noncore/net/opieirc/dcctransfertab.cpp | 81 | ||||
-rw-r--r-- | noncore/net/opieirc/dcctransfertab.h | 41 | ||||
-rw-r--r-- | noncore/net/opieirc/ircmessageparser.cpp | 24 | ||||
-rw-r--r-- | noncore/net/opieirc/ircservertab.cpp | 4 | ||||
-rw-r--r-- | noncore/net/opieirc/ircservertab.h | 1 | ||||
-rw-r--r-- | noncore/net/opieirc/ircsession.cpp | 5 | ||||
-rw-r--r-- | noncore/net/opieirc/ircsession.h | 4 | ||||
-rw-r--r-- | noncore/net/opieirc/mainwindow.cpp | 20 | ||||
-rw-r--r-- | noncore/net/opieirc/mainwindow.h | 8 | ||||
-rw-r--r-- | noncore/net/opieirc/opieirc.pro | 9 |
16 files changed, 456 insertions, 10 deletions
diff --git a/noncore/net/opieirc/dccprogress.cpp b/noncore/net/opieirc/dccprogress.cpp new file mode 100644 index 0000000..28277f7 --- a/dev/null +++ b/noncore/net/opieirc/dccprogress.cpp | |||
@@ -0,0 +1,75 @@ | |||
1 | #include <qprogressbar.h> | ||
2 | #include <qlabel.h> | ||
3 | #include <qvbox.h> | ||
4 | |||
5 | #include "dcctransfer.h" | ||
6 | #include "dcctransferrecv.h" | ||
7 | #include "dccprogress.h" | ||
8 | |||
9 | DCCProgress::DCCProgress(DCCTransfer::Type type, Q_UINT32 ip4Addr, Q_UINT16 port, | ||
10 | const QString &filename, const QString &nickname, unsigned int size, QWidget *parent, char *name, WFlags f) | ||
11 | : QWidget(parent, name, f), m_vbox(new QVBox(this)), | ||
12 | m_label(new QLabel(m_vbox)), | ||
13 | m_bar(new QProgressBar(m_vbox)) | ||
14 | { | ||
15 | |||
16 | if (DCCTransfer::Recv == type) | ||
17 | m_transfer = new DCCTransferRecv(ip4Addr, port, filename, size); | ||
18 | |||
19 | |||
20 | connect(m_transfer, SIGNAL(progress(int)), this, SLOT(slotSetProgress(int))); | ||
21 | connect(m_transfer, SIGNAL(finished(DCCTransfer *, DCCTransfer::EndCode)), | ||
22 | this, SLOT(slotFinished(DCCTransfer *, DCCTransfer::EndCode))); | ||
23 | |||
24 | m_label->setText(tr("Receiving file %1 from %2...").arg(m_transfer->filename()).arg(nickname)); | ||
25 | |||
26 | m_label->show(); | ||
27 | m_bar->show(); | ||
28 | show(); | ||
29 | |||
30 | } | ||
31 | |||
32 | bool DCCProgress::finished() | ||
33 | { | ||
34 | return ( m_transfer == 0); | ||
35 | } | ||
36 | |||
37 | void DCCProgress::cancel() | ||
38 | { | ||
39 | if (m_transfer) | ||
40 | m_transfer->cancel(); | ||
41 | } | ||
42 | |||
43 | void DCCProgress::slotSetProgress(int progress) | ||
44 | { | ||
45 | m_bar->setProgress(progress); | ||
46 | } | ||
47 | |||
48 | void DCCProgress::slotFinished(DCCTransfer *transfer, DCCTransfer::EndCode code) | ||
49 | { | ||
50 | if(transfer != m_transfer) | ||
51 | // WTF!! | ||
52 | return; | ||
53 | |||
54 | QString msg; | ||
55 | |||
56 | switch(code) { | ||
57 | case DCCTransfer::Successfull: | ||
58 | msg = tr("Successfully received %1").arg(m_transfer->filename()); | ||
59 | break; | ||
60 | case DCCTransfer::SelfAborted: | ||
61 | msg = tr("Aborted"); | ||
62 | break; | ||
63 | case DCCTransfer::PeerAborted: | ||
64 | msg = tr("Peer Aborted"); | ||
65 | break; | ||
66 | case DCCTransfer::Timeout: | ||
67 | msg = tr("Timeout"); | ||
68 | break; | ||
69 | } | ||
70 | |||
71 | m_label->setText(msg); | ||
72 | delete m_transfer; | ||
73 | m_transfer = 0; | ||
74 | } | ||
75 | |||
diff --git a/noncore/net/opieirc/dccprogress.h b/noncore/net/opieirc/dccprogress.h new file mode 100644 index 0000000..81b922e --- a/dev/null +++ b/noncore/net/opieirc/dccprogress.h | |||
@@ -0,0 +1,35 @@ | |||
1 | #ifndef DCCPROGRESS_H | ||
2 | #define DCCPROGRESS_H | ||
3 | |||
4 | |||
5 | #include <qwidget.h> | ||
6 | |||
7 | #include "dcctransfer.h" | ||
8 | |||
9 | class QProgressBar; | ||
10 | class QLabel; | ||
11 | class QVBox; | ||
12 | |||
13 | class DCCProgress: public QWidget { | ||
14 | |||
15 | Q_OBJECT | ||
16 | public: | ||
17 | DCCProgress(DCCTransfer::Type type, Q_UINT32 ip4Addr, Q_UINT16 port, | ||
18 | const QString &filename, const QString &nickname, unsigned int size, | ||
19 | QWidget *parent = 0, char *name = 0, WFlags f = 0); | ||
20 | |||
21 | bool finished(); | ||
22 | void cancel(); | ||
23 | |||
24 | public slots: | ||
25 | void slotSetProgress(int progress); | ||
26 | void slotFinished(DCCTransfer *transfer, DCCTransfer::EndCode code); | ||
27 | |||
28 | private: | ||
29 | QVBox *m_vbox; | ||
30 | QLabel *m_label; | ||
31 | QProgressBar *m_bar; | ||
32 | DCCTransfer *m_transfer; | ||
33 | }; | ||
34 | |||
35 | #endif | ||
diff --git a/noncore/net/opieirc/dcctransfer.cpp b/noncore/net/opieirc/dcctransfer.cpp new file mode 100644 index 0000000..cfa9f74 --- a/dev/null +++ b/noncore/net/opieirc/dcctransfer.cpp | |||
@@ -0,0 +1,41 @@ | |||
1 | #include <qsocket.h> | ||
2 | #include <qfile.h> | ||
3 | |||
4 | #include "dcctransfer.h" | ||
5 | |||
6 | |||
7 | DCCTransfer::DCCTransfer(Q_UINT32 ip4Addr, Q_UINT16 port, const QString &filename, unsigned int size) | ||
8 | : m_socket(new QSocket), m_file(new QFile), m_bufSize(4096), m_buffer(new char[m_bufSize]), | ||
9 | m_ip4Addr(ip4Addr), m_port(port), m_totalSize(size), m_processedSize(0) | ||
10 | { | ||
11 | m_file->setName(filename); | ||
12 | } | ||
13 | |||
14 | DCCTransfer::~DCCTransfer() | ||
15 | { | ||
16 | if(m_socket) | ||
17 | delete m_socket; | ||
18 | if(m_file) { | ||
19 | m_file->close(); | ||
20 | delete m_file; | ||
21 | } | ||
22 | if(m_buffer) | ||
23 | delete []m_buffer; | ||
24 | } | ||
25 | |||
26 | |||
27 | void DCCTransfer::cancel() | ||
28 | { | ||
29 | if(m_socket) | ||
30 | m_socket->close(); | ||
31 | |||
32 | emit(finished(DCCTransfer::SelfAborted)); | ||
33 | } | ||
34 | |||
35 | QString DCCTransfer::filename() | ||
36 | { | ||
37 | if(!m_file) | ||
38 | return QString::null; | ||
39 | |||
40 | return m_file->name().mid(m_file->name().findRev('/') + 1); | ||
41 | } | ||
diff --git a/noncore/net/opieirc/dcctransfer.h b/noncore/net/opieirc/dcctransfer.h new file mode 100644 index 0000000..775ed24 --- a/dev/null +++ b/noncore/net/opieirc/dcctransfer.h | |||
@@ -0,0 +1,44 @@ | |||
1 | #ifndef DCCTRANSFER_H | ||
2 | #define DCCTRANSFER_H | ||
3 | |||
4 | #include <qobject.h> | ||
5 | |||
6 | class QSocket; | ||
7 | class QFile; | ||
8 | class QString; | ||
9 | |||
10 | class DCCTransfer: public QObject { | ||
11 | Q_OBJECT | ||
12 | public: | ||
13 | enum Type { Send, Recv }; | ||
14 | enum EndCode { Successfull, SelfAborted, PeerAborted, Timeout }; | ||
15 | |||
16 | DCCTransfer(Q_UINT32 ip4Addr, Q_UINT16 port, const QString &filename, unsigned int size); | ||
17 | virtual ~DCCTransfer(); | ||
18 | |||
19 | void cancel(); | ||
20 | |||
21 | QString filename(); | ||
22 | |||
23 | signals: | ||
24 | virtual void finished(DCCTransfer *transfer, EndCode code); | ||
25 | virtual void progress(int progress); | ||
26 | |||
27 | protected slots: | ||
28 | virtual void slotProcess() = 0; | ||
29 | virtual void slotFinished() = 0; | ||
30 | |||
31 | protected: | ||
32 | QSocket *m_socket; | ||
33 | QFile *m_file; | ||
34 | unsigned int m_bufSize; | ||
35 | char *m_buffer; | ||
36 | Q_UINT32 m_ip4Addr; | ||
37 | Q_UINT16 m_port; | ||
38 | unsigned int m_totalSize; | ||
39 | unsigned int m_processedSize; | ||
40 | bool m_cancel; | ||
41 | bool m_timeout; | ||
42 | }; | ||
43 | |||
44 | #endif | ||
diff --git a/noncore/net/opieirc/dcctransferrecv.cpp b/noncore/net/opieirc/dcctransferrecv.cpp new file mode 100644 index 0000000..58e8d09 --- a/dev/null +++ b/noncore/net/opieirc/dcctransferrecv.cpp | |||
@@ -0,0 +1,53 @@ | |||
1 | #include <netinet/in.h> | ||
2 | |||
3 | #include <qfile.h> | ||
4 | #include <qsocket.h> | ||
5 | #include <qhostaddress.h> | ||
6 | |||
7 | #include <opie2/odebug.h> | ||
8 | |||
9 | |||
10 | #include "dcctransferrecv.h" | ||
11 | |||
12 | |||
13 | DCCTransferRecv::DCCTransferRecv(Q_UINT32 ip4Addr, Q_UINT16 port, const QString &filename, unsigned int size) | ||
14 | : DCCTransfer(ip4Addr, port, filename, size) | ||
15 | { | ||
16 | QHostAddress ip(ip4Addr); | ||
17 | m_socket->connectToHost(ip.toString(), m_port); | ||
18 | connect(m_socket, SIGNAL(readyRead()), this, SLOT(slotProcess())); | ||
19 | connect(m_socket, SIGNAL(connectionClosed()), this, SLOT(slotFinished())); | ||
20 | |||
21 | m_file->open(IO_WriteOnly); | ||
22 | } | ||
23 | |||
24 | |||
25 | void DCCTransferRecv::slotProcess() | ||
26 | { | ||
27 | int availableBytes = m_socket->bytesAvailable(); | ||
28 | int receivedBytes = 0; | ||
29 | |||
30 | while(receivedBytes < availableBytes) { | ||
31 | int bytes = m_socket->readBlock(m_buffer, m_bufSize); | ||
32 | receivedBytes += bytes; | ||
33 | m_file->writeBlock(m_buffer, bytes); | ||
34 | } | ||
35 | |||
36 | m_file->flush(); | ||
37 | m_processedSize += availableBytes; | ||
38 | unsigned long value = htonl(m_processedSize); | ||
39 | m_socket->writeBlock((char*)&value, sizeof(unsigned long)); | ||
40 | |||
41 | emit (progress((m_processedSize * 100) / m_totalSize)); | ||
42 | } | ||
43 | |||
44 | void DCCTransferRecv::slotFinished() | ||
45 | { | ||
46 | m_file->close(); | ||
47 | |||
48 | if(m_processedSize == m_totalSize) | ||
49 | emit(finished(this, DCCTransfer::Successfull)); | ||
50 | else | ||
51 | emit(finished(this, DCCTransfer::PeerAborted)); | ||
52 | } | ||
53 | |||
diff --git a/noncore/net/opieirc/dcctransferrecv.h b/noncore/net/opieirc/dcctransferrecv.h new file mode 100644 index 0000000..bfc55ef --- a/dev/null +++ b/noncore/net/opieirc/dcctransferrecv.h | |||
@@ -0,0 +1,21 @@ | |||
1 | #ifndef DCCTRANSFERRECV_H | ||
2 | #define DCCTRANSFERRECV_H | ||
3 | |||
4 | #include "dcctransfer.h" | ||
5 | |||
6 | |||
7 | class DCCTransferRecv: public DCCTransfer { | ||
8 | Q_OBJECT | ||
9 | public: | ||
10 | DCCTransferRecv(Q_UINT32 ip4Addr, Q_UINT16 port, const QString &filename, unsigned int size); | ||
11 | |||
12 | signals: | ||
13 | void finished(DCCTransfer *transfer, DCCTransfer::EndCode code); | ||
14 | |||
15 | public slots: | ||
16 | void slotProcess(); | ||
17 | void slotFinished(); | ||
18 | }; | ||
19 | |||
20 | #endif | ||
21 | |||
diff --git a/noncore/net/opieirc/dcctransfertab.cpp b/noncore/net/opieirc/dcctransfertab.cpp new file mode 100644 index 0000000..ea0ff1f --- a/dev/null +++ b/noncore/net/opieirc/dcctransfertab.cpp | |||
@@ -0,0 +1,81 @@ | |||
1 | #include <qlist.h> | ||
2 | #include <qlabel.h> | ||
3 | #include <qstring.h> | ||
4 | #include <qvbox.h> | ||
5 | #include <qmessagebox.h> | ||
6 | |||
7 | #include "dcctransfer.h" | ||
8 | #include "dccprogress.h" | ||
9 | #include "mainwindow.h" | ||
10 | #include "dcctransfertab.h" | ||
11 | |||
12 | #include <stdio.h> | ||
13 | |||
14 | DCCTransferTab::DCCTransferTab(QWidget *parent, const char *name, WFlags f) | ||
15 | :IRCTab(parent, name, f), m_hbox(new QHBox(this)), m_parent(static_cast<MainWindow*>(parent)) | ||
16 | { | ||
17 | m_description->setText(""); | ||
18 | m_layout->add(m_hbox); | ||
19 | m_hbox->show(); | ||
20 | } | ||
21 | |||
22 | DCCTransferTab::~DCCTransferTab() | ||
23 | { | ||
24 | if(m_hbox) | ||
25 | delete m_hbox; | ||
26 | } | ||
27 | |||
28 | QString DCCTransferTab::title() | ||
29 | { | ||
30 | return "DCC"; | ||
31 | } | ||
32 | |||
33 | void DCCTransferTab::remove() | ||
34 | { | ||
35 | //Clean finished transfers | ||
36 | for(QListIterator <DCCProgress> it(m_progressList); it.current(); ++it) { | ||
37 | DCCProgress *current = it.current(); | ||
38 | if (current->finished()) { | ||
39 | m_progressList.remove(current); | ||
40 | current->hide(); | ||
41 | delete current; | ||
42 | } | ||
43 | } | ||
44 | |||
45 | if (m_progressList.count() > 0) { | ||
46 | int retval = QMessageBox::information( parentWidget() , tr("DCC Transfers in Progress"), | ||
47 | tr( "There are transfers in progress. <br>If you close this tab, they will be canceled." | ||
48 | "<br>Do you want to close it anyway?"), | ||
49 | tr("&Close"), tr("&Don't Close")); | ||
50 | if ( retval != 0 ) { | ||
51 | return; | ||
52 | } | ||
53 | //Cancel active transfers (user accepted) | ||
54 | for(QListIterator <DCCProgress> itr(m_progressList); itr.current(); ++itr) { | ||
55 | DCCProgress *current = itr.current(); | ||
56 | m_progressList.remove(current); | ||
57 | current->hide(); | ||
58 | current->cancel(); | ||
59 | delete current; | ||
60 | } | ||
61 | } | ||
62 | |||
63 | //Remove | ||
64 | m_parent->killTab(this); | ||
65 | } | ||
66 | |||
67 | bool DCCTransferTab::confirm(QWidget *parent, const QString &nickname, const QString &filename, unsigned int size) | ||
68 | { | ||
69 | int retval = QMessageBox::information(parent, tr("DCC Transfer from %1").arg(nickname), | ||
70 | tr( "%1 is trying to send you the file %2\n(%3 bytes)").arg(nickname).arg(filename).arg(size), | ||
71 | tr("&Accept"), tr("&Reject")); | ||
72 | |||
73 | return ( 0 == retval); | ||
74 | |||
75 | } | ||
76 | |||
77 | void DCCTransferTab::addTransfer(DCCTransfer::Type type, Q_UINT32 ip4Addr, Q_UINT16 port, | ||
78 | const QString &filename, const QString &nickname, unsigned int size) | ||
79 | { | ||
80 | m_progressList.append(new DCCProgress(type, ip4Addr, port, filename, nickname, size, this)); | ||
81 | } | ||
diff --git a/noncore/net/opieirc/dcctransfertab.h b/noncore/net/opieirc/dcctransfertab.h new file mode 100644 index 0000000..a21323d --- a/dev/null +++ b/noncore/net/opieirc/dcctransfertab.h | |||
@@ -0,0 +1,41 @@ | |||
1 | #ifndef DCCTRANSFERTAB_H | ||
2 | #define DCCTRANSFERTAB_H | ||
3 | |||
4 | #include "dcctransfer.h" | ||
5 | #include "irctab.h" | ||
6 | |||
7 | template <class T> class QList; | ||
8 | |||
9 | class DCCProgress; | ||
10 | class IRCSession; | ||
11 | class QString; | ||
12 | class QHBox; | ||
13 | class MainWindow; | ||
14 | |||
15 | class DCCTransferTab: public IRCTab { | ||
16 | Q_OBJECT | ||
17 | public: | ||
18 | |||
19 | DCCTransferTab(QWidget *parent = 0, const char *name = 0, WFlags f = 0); | ||
20 | ~DCCTransferTab(); | ||
21 | virtual QString DCCTransferTab::title(); | ||
22 | virtual IRCSession* DCCTransferTab::session(){return 0;}; | ||
23 | virtual void DCCTransferTab::appendText(QString){}; | ||
24 | virtual void DCCTransferTab::remove(); | ||
25 | virtual void DCCTransferTab::settingsChanged() {}; | ||
26 | void addTransfer(DCCTransfer::Type type, Q_UINT32 ip4Addr, | ||
27 | Q_UINT16 port, const QString &filename, | ||
28 | const QString &nickname, unsigned int size); | ||
29 | static bool confirm(QWidget *parent = 0, | ||
30 | const QString &nickname = QString::null, | ||
31 | const QString &filename = QString::null, | ||
32 | unsigned int size = 0); | ||
33 | private: | ||
34 | QHBox *m_hbox; | ||
35 | QList <DCCProgress> m_progressList; | ||
36 | MainWindow *m_parent; | ||
37 | |||
38 | }; | ||
39 | |||
40 | #endif | ||
41 | |||
diff --git a/noncore/net/opieirc/ircmessageparser.cpp b/noncore/net/opieirc/ircmessageparser.cpp index ad9de2b..939cdae 100644 --- a/noncore/net/opieirc/ircmessageparser.cpp +++ b/noncore/net/opieirc/ircmessageparser.cpp | |||
@@ -2,8 +2,13 @@ | |||
2 | #include <qdatetime.h> | 2 | #include <qdatetime.h> |
3 | 3 | ||
4 | #include <opie2/ofiledialog.h> | ||
5 | #include <opie2/ofileselector.h> | ||
6 | #include <opie2/odebug.h> | ||
7 | |||
4 | #include "ircmessageparser.h" | 8 | #include "ircmessageparser.h" |
5 | #include "ircversion.h" | 9 | #include "ircversion.h" |
6 | #include "ircchannelperson.h" | 10 | #include "ircchannelperson.h" |
7 | //#include "transferreceiver.h" | 11 | #include "dcctransfertab.h" |
12 | #include "ircservertab.h" | ||
8 | 13 | ||
9 | /* Lookup table for literal commands */ | 14 | /* Lookup table for literal commands */ |
@@ -462,10 +467,23 @@ void IRCMessageParser::parseCTCPAction(IRCMessage *message) { | |||
462 | void IRCMessageParser::parseCTCPDCC(IRCMessage *message) { | 467 | void IRCMessageParser::parseCTCPDCC(IRCMessage *message) { |
463 | QStringList params = QStringList::split(' ', message->param(0).stripWhiteSpace()); | 468 | QStringList params = QStringList::split(' ', message->param(0).stripWhiteSpace()); |
469 | |||
470 | if(params[0] == "SEND") { | ||
471 | QString nickname = IRCPerson(message->prefix()).nick(); | ||
464 | if( params.count() != 5) { | 472 | if( params.count() != 5) { |
465 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Malformed DCC request from ") + IRCPerson(message->prefix()).nick())); | 473 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Malformed DCC request from %1").arg(nickname))); |
466 | return; | 474 | return; |
467 | } | 475 | } |
476 | bool accepted = DCCTransferTab::confirm(static_cast<QWidget*>(m_session->parent()), nickname, params[1], params[4].toUInt()); | ||
477 | if(!accepted) | ||
478 | return; | ||
479 | QString filename = Opie::Ui::OFileDialog::getSaveFileName(Opie::Ui::OFileSelector::EXTENDED_ALL, | ||
480 | QString::null, params[1], MimeTypes(), 0, tr("Save As")); | ||
481 | if(filename.isEmpty()) | ||
482 | return; | ||
468 | 483 | ||
469 | //TransferReceiver *foo = new TransferReceiver(params[2].toUInt(), params[3].toUInt(), params[1], params[4].toUInt()); | 484 | odebug << "Receiving file " << filename << " from " << nickname << oendl; |
485 | static_cast<IRCServerTab*>(m_session->parent())->mainwindow()->addDCC(DCCTransfer::Recv, params[2].toUInt(), params[3].toUInt(), | ||
486 | filename, nickname, params[4].toUInt()); | ||
487 | } | ||
470 | } | 488 | } |
471 | 489 | ||
diff --git a/noncore/net/opieirc/ircservertab.cpp b/noncore/net/opieirc/ircservertab.cpp index 62a06e8..d3c0448 100644 --- a/noncore/net/opieirc/ircservertab.cpp +++ b/noncore/net/opieirc/ircservertab.cpp | |||
@@ -414,2 +414,6 @@ void IRCServerTab::slotUpdateChannels() { | |||
414 | } | 414 | } |
415 | 415 | ||
416 | MainWindow *IRCServerTab::mainwindow() { | ||
417 | return m_mainWindow; | ||
418 | } | ||
419 | |||
diff --git a/noncore/net/opieirc/ircservertab.h b/noncore/net/opieirc/ircservertab.h index 42f6f57..fe48a3b 100644 --- a/noncore/net/opieirc/ircservertab.h +++ b/noncore/net/opieirc/ircservertab.h | |||
@@ -42,4 +42,5 @@ public: | |||
42 | IRCSession *session(); | 42 | IRCSession *session(); |
43 | IRCServer *server(); | 43 | IRCServer *server(); |
44 | MainWindow *mainwindow(); | ||
44 | 45 | ||
45 | /* Start the server session */ | 46 | /* Start the server session */ |
diff --git a/noncore/net/opieirc/ircsession.cpp b/noncore/net/opieirc/ircsession.cpp index fd8ba72..c8d7869 100644 --- a/noncore/net/opieirc/ircsession.cpp +++ b/noncore/net/opieirc/ircsession.cpp | |||
@@ -5,9 +5,10 @@ | |||
5 | #include "ircversion.h" | 5 | #include "ircversion.h" |
6 | 6 | ||
7 | IRCSession::IRCSession(QWidget *parent, IRCServer *server) { | 7 | IRCSession::IRCSession(QObject *parent, IRCServer *server) |
8 | : QObject(parent) | ||
9 | { | ||
8 | m_server = server; | 10 | m_server = server; |
9 | m_connection = new IRCConnection(m_server); | 11 | m_connection = new IRCConnection(m_server); |
10 | m_parser = new IRCMessageParser(this); | 12 | m_parser = new IRCMessageParser(this); |
11 | m_parent = parent; | ||
12 | connect(m_connection, SIGNAL(messageArrived(IRCMessage*)), this, SLOT(handleMessage(IRCMessage*))); | 13 | connect(m_connection, SIGNAL(messageArrived(IRCMessage*)), this, SLOT(handleMessage(IRCMessage*))); |
13 | connect(m_parser, SIGNAL(outputReady(IRCOutput)), this, SIGNAL(outputReady(IRCOutput))); | 14 | connect(m_parser, SIGNAL(outputReady(IRCOutput)), this, SIGNAL(outputReady(IRCOutput))); |
diff --git a/noncore/net/opieirc/ircsession.h b/noncore/net/opieirc/ircsession.h index 7c91893..23a2540 100644 --- a/noncore/net/opieirc/ircsession.h +++ b/noncore/net/opieirc/ircsession.h | |||
@@ -31,4 +31,5 @@ | |||
31 | 31 | ||
32 | class IRCMessageParser; | 32 | class IRCMessageParser; |
33 | class IRCServerTab; | ||
33 | 34 | ||
34 | /* The IRCSession stores all information relating to the connection | 35 | /* The IRCSession stores all information relating to the connection |
@@ -40,5 +41,5 @@ friend class IRCMessageParser; | |||
40 | Q_OBJECT | 41 | Q_OBJECT |
41 | public: | 42 | public: |
42 | IRCSession(QWidget *parent, IRCServer *server); | 43 | IRCSession(QObject *parent, IRCServer *server); |
43 | ~IRCSession(); | 44 | ~IRCSession(); |
44 | 45 | ||
@@ -91,5 +92,4 @@ protected: | |||
91 | QString m_validUsermodes; | 92 | QString m_validUsermodes; |
92 | QString m_validChannelmodes; | 93 | QString m_validChannelmodes; |
93 | QWidget *m_parent; | ||
94 | }; | 94 | }; |
95 | 95 | ||
diff --git a/noncore/net/opieirc/mainwindow.cpp b/noncore/net/opieirc/mainwindow.cpp index 1811a0c..3d60107 100644 --- a/noncore/net/opieirc/mainwindow.cpp +++ b/noncore/net/opieirc/mainwindow.cpp | |||
@@ -8,7 +8,11 @@ | |||
8 | #include "mainwindow.h" | 8 | #include "mainwindow.h" |
9 | #include "ircservertab.h" | 9 | #include "ircservertab.h" |
10 | #include "dcctransfertab.h" | ||
10 | #include "ircserverlist.h" | 11 | #include "ircserverlist.h" |
11 | #include "ircsettings.h" | 12 | #include "ircsettings.h" |
12 | 13 | ||
14 | #include <stdio.h> | ||
15 | |||
16 | |||
13 | QString MainWindow::appCaption() { | 17 | QString MainWindow::appCaption() { |
14 | return QObject::tr("Opie IRC"); | 18 | return QObject::tr("Opie IRC"); |
@@ -34,4 +38,5 @@ MainWindow::MainWindow(QWidget *parent, const char *name, WFlags) : QMainWindow( | |||
34 | connect(a, SIGNAL(activated()), this, SLOT(settings())); | 38 | connect(a, SIGNAL(activated()), this, SLOT(settings())); |
35 | a->addTo(irc); | 39 | a->addTo(irc); |
40 | m_dccTab = 0; | ||
36 | loadSettings(); | 41 | loadSettings(); |
37 | } | 42 | } |
@@ -78,4 +83,7 @@ void MainWindow::changeEvent(IRCTab *tab) { | |||
78 | 83 | ||
79 | void MainWindow::killTab(IRCTab *tab, bool imediate) { | 84 | void MainWindow::killTab(IRCTab *tab, bool imediate) { |
85 | if (tab == m_dccTab) | ||
86 | m_dccTab = 0; | ||
87 | |||
80 | m_toDelete.append( tab ); | 88 | m_toDelete.append( tab ); |
81 | 89 | ||
@@ -138,2 +146,14 @@ void MainWindow::slotPing( const QString& /*channel*/ ) { | |||
138 | } | 146 | } |
139 | 147 | ||
148 | void MainWindow::addDCC(DCCTransfer::Type type, Q_UINT32 ip4Addr, Q_UINT16 port, | ||
149 | const QString &filename, const QString &nickname, unsigned int size) { | ||
150 | |||
151 | if (!m_dccTab) { | ||
152 | m_dccTab = new DCCTransferTab(this); | ||
153 | addTab(m_dccTab); | ||
154 | m_dccTab->show(); | ||
155 | } | ||
156 | |||
157 | m_dccTab->addTransfer(type, ip4Addr, port, filename, nickname, size); | ||
158 | } | ||
159 | |||
diff --git a/noncore/net/opieirc/mainwindow.h b/noncore/net/opieirc/mainwindow.h index abf205d..873a685 100644 --- a/noncore/net/opieirc/mainwindow.h +++ b/noncore/net/opieirc/mainwindow.h | |||
@@ -25,8 +25,11 @@ | |||
25 | #include <qaction.h> | 25 | #include <qaction.h> |
26 | #include <qlist.h> | 26 | #include <qlist.h> |
27 | #include "mainwindow.h" | 27 | |
28 | #include "dcctransfer.h" | ||
28 | #include "ircmisc.h" | 29 | #include "ircmisc.h" |
29 | #include "irctab.h" | 30 | #include "irctab.h" |
30 | 31 | ||
32 | class DCCTransferTab; | ||
33 | |||
31 | class MainWindow : public QMainWindow { | 34 | class MainWindow : public QMainWindow { |
32 | Q_OBJECT | 35 | Q_OBJECT |
@@ -38,4 +41,6 @@ public: | |||
38 | static QString appName() { return QString::fromLatin1("opieirc"); } | 41 | static QString appName() { return QString::fromLatin1("opieirc"); } |
39 | static QString appCaption(); | 42 | static QString appCaption(); |
43 | void addDCC(DCCTransfer::Type type, Q_UINT32 ip4Addr, Q_UINT16 port, | ||
44 | const QString &filename, const QString &nickname, unsigned int size); | ||
40 | signals: | 45 | signals: |
41 | void updateScroll(); | 46 | void updateScroll(); |
@@ -57,4 +62,5 @@ protected: | |||
57 | QList<IRCTab> m_tabs; | 62 | QList<IRCTab> m_tabs; |
58 | QList<IRCTab> m_toDelete; | 63 | QList<IRCTab> m_toDelete; |
64 | DCCTransferTab *m_dccTab; | ||
59 | }; | 65 | }; |
60 | 66 | ||
diff --git a/noncore/net/opieirc/opieirc.pro b/noncore/net/opieirc/opieirc.pro index 1ef9be2..5e91450 100644 --- a/noncore/net/opieirc/opieirc.pro +++ b/noncore/net/opieirc/opieirc.pro | |||
@@ -8,5 +8,7 @@ HEADERS = ircchannel.h ircconnection.h \ | |||
8 | ircserverlist.h ircservereditor.h \ | 8 | ircserverlist.h ircservereditor.h \ |
9 | ircquerytab.h ircsettings.h ircmisc.h \ | 9 | ircquerytab.h ircsettings.h ircmisc.h \ |
10 | ircchannelperson.h | 10 | ircchannelperson.h dcctransfertab.h \ |
11 | dccprogress.h dcctransfer.h \ | ||
12 | dcctransferrecv.h | ||
11 | SOURCES = ircchannel.cpp ircconnection.cpp \ | 13 | SOURCES = ircchannel.cpp ircconnection.cpp \ |
12 | ircmessage.cpp \ | 14 | ircmessage.cpp \ |
@@ -18,5 +20,8 @@ SOURCES = ircchannel.cpp ircconnection.cpp \ | |||
18 | ircserverlist.cpp ircservereditor.cpp \ | 20 | ircserverlist.cpp ircservereditor.cpp \ |
19 | ircquerytab.cpp ircsettings.cpp ircmisc.cpp \ | 21 | ircquerytab.cpp ircsettings.cpp ircmisc.cpp \ |
20 | ircchannelperson.cpp | 22 | ircchannelperson.cpp dcctransfertab.cpp \ |
23 | dccprogress.cpp dcctransfer.cpp \ | ||
24 | dcctransferrecv.cpp | ||
25 | |||
21 | INCLUDEPATH += $(OPIEDIR)/include | 26 | INCLUDEPATH += $(OPIEDIR)/include |
22 | DEPENDPATH += $(OPIEDIR)/include | 27 | DEPENDPATH += $(OPIEDIR)/include |