diff options
| author | me_desk <me_desk@fb96df88-216d-11de-830c-f3023f12d8ac> | 2014-05-04 22:27:29 +0000 |
|---|---|---|
| committer | me_desk <me_desk@fb96df88-216d-11de-830c-f3023f12d8ac> | 2014-05-04 22:27:29 +0000 |
| commit | 693b9a448a07b07cf5e257c15f54a6a50f391d0c (patch) | |
| tree | 224d3e091ba0a6e2e21f3e0853e84508afe492e1 /pica-client/filetransfercontroller.cpp | |
| parent | 12c7e7b30b2cce60884e61144449e14cca9ecb4d (diff) | |
| download | pica-pica-693b9a448a07b07cf5e257c15f54a6a50f391d0c.tar.gz pica-pica-693b9a448a07b07cf5e257c15f54a6a50f391d0c.zip | |
initial minimal working file transfer implementation, new class FileTransferController
git-svn-id: svn://localhost/project_picapica/trunk@306 fb96df88-216d-11de-830c-f3023f12d8ac
Diffstat (limited to 'pica-client/filetransfercontroller.cpp')
| -rw-r--r-- | pica-client/filetransfercontroller.cpp | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/pica-client/filetransfercontroller.cpp b/pica-client/filetransfercontroller.cpp new file mode 100644 index 0000000..9b479c1 --- /dev/null +++ b/pica-client/filetransfercontroller.cpp @@ -0,0 +1,137 @@ +#include "filetransfercontroller.h" +#include "globals.h" +#include "skynet.h" +#include "mainwindow.h" +#include "msguirouter.h" +#include <QFileDialog> +#include <QFileInfo> + +FileTransferController::FileTransferController(QObject *parent) : + QObject(parent) +{ + connect(skynet, SIGNAL(IncomingFileRequestReceived(QByteArray,quint64,QString)), + this, SLOT(file_request(QByteArray,quint64,QString))); + + connect(skynet, SIGNAL(FileProgress(QByteArray,quint64,quint64)), + this, SLOT(file_progress(QByteArray,quint64,quint64))); + + connect(skynet, SIGNAL(OutgoingFileRequestAccepted(QByteArray)), this, SLOT(file_accepted_by_peer(QByteArray))); + + connect(skynet, SIGNAL(OutgoingFileRequestDenied(QByteArray)), this, SLOT(file_denied_by_peer(QByteArray))); +} + + +void FileTransferController::file_progress(QByteArray peer_id, quint64 bytes_sent, quint64 bytes_received) +{ + if (bytes_received > 0) + { + if (ftdialogs_in.contains(peer_id)) + { + ftdialogs_in[peer_id]->update(bytes_received); + } + } + else if (bytes_sent > 0) + { + if (ftdialogs_out.contains(peer_id)) + { + ftdialogs_out[peer_id]->update(bytes_sent); + } + } +} + +void FileTransferController::file_request(QByteArray peer_id, quint64 file_size, QString filename) +{ + FileTransferDialog *ftd = new FileTransferDialog(peer_id, filename, file_size, FileTransferDialog::RECEIVING); + + ftdialogs_in[peer_id] = ftd; + fsizes[peer_id] = file_size; + fnames[peer_id] = filename; + + connect(ftd, SIGNAL(acceptedFile(QByteArray)), this, SLOT(file_accepted_by_me(QByteArray))); + connect(ftd, SIGNAL(deniedFile(QByteArray)), this, SLOT(file_denied_by_me(QByteArray))); + + ftd->show(); +} + +void FileTransferController::file_accepted_by_peer(QByteArray peer_id) +{ + +} + +void FileTransferController::file_denied_by_peer(QByteArray peer_id) +{ + +} + +void FileTransferController::file_accepted_by_me(QByteArray peer_id) +{ + + + QString filePathToSave = QFileDialog::getSaveFileName(ftdialogs_in[peer_id], tr("Save received file to"), + fnames[peer_id], tr("Any file (* *.*)")); + + skynet->AcceptFile(peer_id, filePathToSave); + + connect(ftdialogs_in[peer_id], SIGNAL(cancelledFile(QByteArray,FileTransferDialog*)), this, SLOT(file_cancelled_by_me(QByteArray,FileTransferDialog*))); + connect(ftdialogs_in[peer_id], SIGNAL(pausedFile(QByteArray,FileTransferDialog*)), this, SLOT(file_paused_by_me(QByteArray,FileTransferDialog*))); + connect(ftdialogs_in[peer_id], SIGNAL(resumedFile(QByteArray,FileTransferDialog*)), this, SLOT(file_resumed_by_me(QByteArray,FileTransferDialog*))); +} + +void FileTransferController::file_denied_by_me(QByteArray peer_id) +{ +} + +void FileTransferController::file_cancelled_by_me(QByteArray peer_id, FileTransferDialog *from) +{ + +} + +void FileTransferController::file_paused_by_me(QByteArray peer_id, FileTransferDialog *from) +{ + +} + +void FileTransferController::file_resumed_by_me(QByteArray peer_id, FileTransferDialog *from) +{ + +} + +void FileTransferController::send_file(QByteArray peer_id) +{ + + if (ftdialogs_out.contains(peer_id)) + { + msguirouter->notification(tr("There is already file transfer in progress. Wait until it is finished.")); + return; + } + + QString filepath = QFileDialog::getOpenFileName(0, tr("Select file to send"), QString(), tr("Any file (* *.*)")); + + if (filepath.isNull()) + return; + + QFileInfo fi(filepath); + + if (!fi.exists()) + { + msguirouter->notification(tr("File \"%1\" does not exist.").arg(filepath)); + return; + } + + if (fi.size() == 0) + { + msguirouter->notification(tr("Cannot send empty file.")); + } + + skynet->SendFile(peer_id, filepath); + + FileTransferDialog *ftd = new FileTransferDialog(peer_id, fi.fileName(), fi.size(), FileTransferDialog::SENDING); + + ftdialogs_out[peer_id] = ftd; + + connect(ftdialogs_out[peer_id], SIGNAL(cancelledFile(QByteArray,FileTransferDialog*)), this, SLOT(file_cancelled_by_me(QByteArray,FileTransferDialog*))); + connect(ftdialogs_out[peer_id], SIGNAL(pausedFile(QByteArray,FileTransferDialog*)), this, SLOT(file_paused_by_me(QByteArray,FileTransferDialog*))); + connect(ftdialogs_out[peer_id], SIGNAL(resumedFile(QByteArray,FileTransferDialog*)), this, SLOT(file_resumed_by_me(QByteArray,FileTransferDialog*))); + + ftd->show(); +} |
