void ChatForm::startFileSend(ToxFile file) { if (file.friendId != f->friendId) return; FileTransferInstance* fileTrans = new FileTransferInstance(file); ftransWidgets.insert(fileTrans->getId(), fileTrans); connect(Core::getInstance(), &Core::fileTransferInfo, fileTrans, &FileTransferInstance::onFileTransferInfo); connect(Core::getInstance(), &Core::fileTransferCancelled, fileTrans, &FileTransferInstance::onFileTransferCancelled); connect(Core::getInstance(), &Core::fileTransferFinished, fileTrans, &FileTransferInstance::onFileTransferFinished); connect(Core::getInstance(), SIGNAL(fileTransferAccepted(ToxFile)), fileTrans, SLOT(onFileTransferAccepted(ToxFile))); connect(Core::getInstance(), SIGNAL(fileTransferPaused(int,int,ToxFile::FileDirection)), fileTrans, SLOT(onFileTransferPaused(int,int,ToxFile::FileDirection))); connect(Core::getInstance(), SIGNAL(fileTransferRemotePausedUnpaused(ToxFile,bool)), fileTrans, SLOT(onFileTransferRemotePausedUnpaused(ToxFile,bool))); connect(Core::getInstance(), SIGNAL(fileTransferBrokenUnbroken(ToxFile, bool)), fileTrans, SLOT(onFileTransferBrokenUnbroken(ToxFile, bool))); QString name; if (!previousId.isMine()) { Core* core = Core::getInstance(); name = core->getUsername(); previousId = core->getSelfId(); } chatWidget->insertMessage(ChatActionPtr(new FileTransferAction(fileTrans, getElidedName(name), QTime::currentTime().toString("hh:mm"), true))); }
void Core::acceptFileRecvRequest(int friendId, int fileNum, QString path) { ToxFile* file{nullptr}; for (ToxFile& f : fileRecvQueue) { if (f.fileNum == fileNum && f.friendId == friendId) { file = &f; break; } } if (!file) { qWarning("Core::acceptFileRecvRequest: No such file in queue"); return; } file->setFilePath(path); if (!file->open(true)) { qWarning() << "Core::acceptFileRecvRequest: Unable to open file"; return; } file->status = ToxFile::TRANSMITTING; emit fileTransferAccepted(*file); tox_file_send_control(tox, file->friendId, 1, file->fileNum, TOX_FILECONTROL_ACCEPT, nullptr, 0); }
void Core::pauseResumeFileRecv(int friendId, int fileNum) { ToxFile* file{nullptr}; for (ToxFile& f : fileRecvQueue) { if (f.fileNum == fileNum && f.friendId == friendId) { file = &f; break; } } if (!file) { qWarning("Core::cancelFileRecv: No such file in queue"); return; } if (file->status == ToxFile::TRANSMITTING) { file->status = ToxFile::PAUSED; emit fileTransferPaused(file->friendId, file->fileNum, ToxFile::RECEIVING); tox_file_send_control(tox, file->friendId, 1, file->fileNum, TOX_FILECONTROL_PAUSE, nullptr, 0); } else if (file->status == ToxFile::PAUSED) { file->status = ToxFile::TRANSMITTING; emit fileTransferAccepted(*file); tox_file_send_control(tox, file->friendId, 1, file->fileNum, TOX_FILECONTROL_ACCEPT, nullptr, 0); } else qWarning() << "Core::pauseResumeFileRecv: File is stopped"; }
void ChatForm::onFileRecvRequest(ToxFile file) { if (file.friendId != f->getFriendID()) return; FileTransferInstance* fileTrans = new FileTransferInstance(file); ftransWidgets.insert(fileTrans->getId(), fileTrans); connect(Core::getInstance(), &Core::fileTransferInfo, fileTrans, &FileTransferInstance::onFileTransferInfo); connect(Core::getInstance(), &Core::fileTransferCancelled, fileTrans, &FileTransferInstance::onFileTransferCancelled); connect(Core::getInstance(), &Core::fileTransferFinished, fileTrans, &FileTransferInstance::onFileTransferFinished); connect(Core::getInstance(), SIGNAL(fileTransferAccepted(ToxFile)), fileTrans, SLOT(onFileTransferAccepted(ToxFile))); connect(Core::getInstance(), SIGNAL(fileTransferPaused(int,int,ToxFile::FileDirection)), fileTrans, SLOT(onFileTransferPaused(int,int,ToxFile::FileDirection))); connect(Core::getInstance(), SIGNAL(fileTransferRemotePausedUnpaused(ToxFile,bool)), fileTrans, SLOT(onFileTransferRemotePausedUnpaused(ToxFile,bool))); connect(Core::getInstance(), SIGNAL(fileTransferBrokenUnbroken(ToxFile, bool)), fileTrans, SLOT(onFileTransferBrokenUnbroken(ToxFile, bool))); Widget* w = Widget::getInstance(); if (!w->isFriendWidgetCurActiveWidget(f)|| w->isMinimized() || !w->isActiveWindow()) { w->newMessageAlert(f->getFriendWidget()); f->setEventFlag(true); f->getFriendWidget()->updateStatusLight(); } QString name; ToxID friendId = f->getToxID(); if (friendId != previousId) { name = f->getDisplayedName(); previousId = friendId; } QString dateStr = QTime::currentTime().toString(Settings::getInstance().getTimestampFormat()); FileTransferAction *fa = new FileTransferAction(fileTrans, getElidedName(name), dateStr, false); chatWidget->insertMessage(ChatActionPtr(fa)); if (!Settings::getInstance().getAutoAcceptDir(f->getToxID()).isEmpty() || Settings::getInstance().getAutoSaveEnabled()) fileTrans->pressFromHtml("btnB"); }