| 132 | } |
| 133 | |
| 134 | void Upload::downloadFinished() { |
| 135 | // handle HTTP redirection first |
| 136 | // very unlikely for post requests, still can happen |
| 137 | if (handleRedirect()) { |
| 138 | qDebug() << "Upload redirected:" << m_url.toString(); |
| 139 | return; |
| 140 | } |
| 141 | |
| 142 | // if the download failed before this point ... |
| 143 | if (m_state == State::Succeeded) { |
| 144 | qDebug() << "Upload failed but we are allowed to proceed:" << m_url.toString(); |
| 145 | m_sink->abort(); |
| 146 | m_reply.reset(); |
| 147 | emit succeeded(); |
| 148 | return; |
| 149 | } else if (m_state == State::Failed) { |
| 150 | qDebug() << "Upload failed in previous step:" << m_url.toString(); |
| 151 | m_sink->abort(); |
| 152 | m_reply.reset(); |
| 153 | emit failed(""); |
| 154 | return; |
| 155 | } else if (m_state == State::AbortedByUser) { |
| 156 | qDebug() << "Upload aborted in previous step:" << m_url.toString(); |
| 157 | m_sink->abort(); |
| 158 | m_reply.reset(); |
| 159 | emit aborted(); |
| 160 | return; |
| 161 | } |
| 162 | |
| 163 | // make sure we got all the remaining data, if any |
| 164 | auto data = m_reply->readAll(); |
| 165 | if (data.size()) { |
| 166 | qDebug() << "Writing extra" << data.size() << "bytes"; |
| 167 | m_state = m_sink->write(data); |
| 168 | } |
| 169 | |
| 170 | // otherwise, finalize the whole graph |
| 171 | m_state = m_sink->finalize(*m_reply.get()); |
| 172 | if (m_state != State::Succeeded) { |
| 173 | qDebug() << "Upload failed to finalize:" << m_url.toString(); |
| 174 | m_sink->abort(); |
| 175 | m_reply.reset(); |
| 176 | emit failed(""); |
| 177 | return; |
| 178 | } |
| 179 | m_reply.reset(); |
| 180 | qDebug() << "Upload succeeded:" << m_url.toString(); |
| 181 | emit succeeded(); |
| 182 | } |
| 183 | |
| 184 | void Upload::downloadReadyRead() { |
| 185 | if (m_state == State::Running) { |