summaryrefslogtreecommitdiffstats
path: root/pica-client/filetransfercontroller.cpp
diff options
context:
space:
mode:
authorme_desk <me_desk@fb96df88-216d-11de-830c-f3023f12d8ac>2014-05-04 22:27:29 +0000
committerme_desk <me_desk@fb96df88-216d-11de-830c-f3023f12d8ac>2014-05-04 22:27:29 +0000
commit693b9a448a07b07cf5e257c15f54a6a50f391d0c (patch)
tree224d3e091ba0a6e2e21f3e0853e84508afe492e1 /pica-client/filetransfercontroller.cpp
parent12c7e7b30b2cce60884e61144449e14cca9ecb4d (diff)
downloadpica-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.cpp137
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();
+}