#include "filetransfercontroller.h" #include "globals.h" #include "skynet.h" #include "mainwindow.h" #include "msguirouter.h" #include #include 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(); }