void GaduFileTransfer::send() { if (FileTransfer::TypeSend != transferType()) // maybe assert here? return; if (SocketNotifiers || WaitingForSocketNotifiers) // already sending/receiving return; setRemoteFile(QString::null); if (!account() || localFileName().isEmpty()) { changeFileTransferStatus(FileTransfer::StatusNotConnected); return; // TODO: notify } GaduProtocol *gaduProtocol = dynamic_cast<GaduProtocol *>(account()->protocol()); if (!gaduProtocol) { changeFileTransferStatus(FileTransfer::StatusNotConnected); return; } GaduContactAccountData *gcad = gaduProtocol->gaduContactAccountData(contact()); if (!gcad) { changeFileTransferStatus(FileTransfer::StatusNotConnected); return; } // async call, will return in setFileTransferNotifiers changeFileTransferStatus(FileTransfer::StatusWaitingForConnection); WaitingForSocketNotifiers = true; gaduProtocol->dccManager()->attachSendFileTransferSocket(this); }
void Transfer::start() { switch (status()) { case Canceled: case Completed: case Connecting: case Downloading: case Uploading: case ExecutingCustomCommand: return; default: break; } switch (transferType()) { case Upload: return; default: break; } setStatus(Connecting); if (streamUrl().isEmpty()) { listStreams(); } else { startDownload(streamUrl()); } }
void Transfer::setFileName(const QString &name) { if (name != fileName()) { m_fileName = name; switch (transferType()) { case Transfer::Download: m_fileName.replace(ILLEGAL_FILENAME_CHARS_RE, "_"); break; default: break; } emit fileNameChanged(); if (!downloadPath().isEmpty()) { m_file.setFileName(downloadPath() + fileName()); m_bytesTransferred = m_file.size(); if ((m_size > 0) && (m_bytesTransferred > 0)) { setProgress(m_bytesTransferred * 100 / m_size); } } } }
void GaduFileTransfer::restore() { if (FileTransfer::TypeSend == transferType()) send(); }
void Transfer::setTransferType(TransferType type) { if (type != transferType()) { m_transferType = type; emit transferTypeChanged(); } }