| 247 | } |
| 248 | |
| 249 | void NetRequest::downloadFinished() |
| 250 | { |
| 251 | // handle HTTP redirection first |
| 252 | if (handleRedirect()) { |
| 253 | qCDebug(logCat) << getUid().toString() << "Request redirected:" << m_url.toString(); |
| 254 | return; |
| 255 | } |
| 256 | |
| 257 | // if the download failed before this point ... |
| 258 | if (m_state == State::Succeeded) // pretend to succeed so we continue processing :) |
| 259 | { |
| 260 | qCDebug(logCat) << getUid().toString() << "Request failed but we are allowed to proceed:" << m_url.toString(); |
| 261 | m_sink->abort(); |
| 262 | emit succeeded(); |
| 263 | emit finished(); |
| 264 | return; |
| 265 | } else if (m_state == State::Failed) { |
| 266 | qCDebug(logCat) << getUid().toString() << "Request failed in previous step:" << m_url.toString(); |
| 267 | m_sink->abort(); |
| 268 | emit failed(m_reply->errorString()); |
| 269 | emit finished(); |
| 270 | return; |
| 271 | } else if (m_state == State::AbortedByUser) { |
| 272 | qCDebug(logCat) << getUid().toString() << "Request aborted in previous step:" << m_url.toString(); |
| 273 | m_sink->abort(); |
| 274 | emit aborted(); |
| 275 | emit finished(); |
| 276 | return; |
| 277 | } |
| 278 | |
| 279 | // make sure we got all the remaining data, if any |
| 280 | auto data = m_reply->readAll(); |
| 281 | if (data.size()) { |
| 282 | qCDebug(logCat) << getUid().toString() << "Writing extra" << data.size() << "bytes"; |
| 283 | m_state = m_sink->write(data); |
| 284 | if (m_state != State::Succeeded) { |
| 285 | qCDebug(logCat) << getUid().toString() << "Request failed to write:" << m_url.toString(); |
| 286 | m_sink->abort(); |
| 287 | emit failed("failed to write in sink"); |
| 288 | emit finished(); |
| 289 | return; |
| 290 | } |
| 291 | } |
| 292 | |
| 293 | // otherwise, finalize the whole graph |
| 294 | m_state = m_sink->finalize(*m_reply.get()); |
| 295 | if (m_state != State::Succeeded) { |
| 296 | qCDebug(logCat) << getUid().toString() << "Request failed to finalize:" << m_url.toString(); |
| 297 | m_sink->abort(); |
| 298 | emit failed("failed to finalize the request"); |
| 299 | emit finished(); |
| 300 | return; |
| 301 | } |
| 302 | |
| 303 | qCDebug(logCat) << getUid().toString() << "Request succeeded:" << m_url.toString(); |
| 304 | emit succeeded(); |
| 305 | emit finished(); |
| 306 | } |