docs: def _request_finished(self, reply):
          """Callback for download once the request has finished."""
          url = to_text_string(reply.url().toEncoded(), encoding='utf-8')
  
          if url in self._paths:
              path = self._paths[url]
          if url in self._workers:
              worker = self._workers[url]
  
          if url in self._head_requests:
              error = reply.error()
  #            print(url, error)
              if error:
                  logger.error(str(('Head Reply Error:', error)))
                  worker.sig_download_finished.emit(url, path)
                  worker.sig_finished.emit(worker, path, error)
                  return
  
              self._head_requests.pop(url)
              start_download = not bool(error)
              header_pairs = reply.rawHeaderPairs()
              headers = {}
  
              for hp in header_pairs:
                  headers[to_text_string(hp[0]).lower()] = to_text_string(hp[1])
  
              total_size = int(headers.get('content-length', 0))
  
              # Check if file exists
              if os.path.isfile(path):
                  file_size = os.path.getsize(path)
  
                  # Check if existing file matches size of requested file
                  start_download = file_size != total_size
  
              if start_download:
                  # File sizes dont match, hence download file
                  qurl = QUrl(url)
                  request = QNetworkRequest(qurl)
                  self._get_requests[url] = request
                  reply = self._manager.get(request)
  
                  error = reply.error()
                  if error:
                      logger.error(str(('Reply Error:', error)))
  
                  reply.downloadProgress.connect(
                      lambda r, t, w=worker: self._progress(r, t, w))
              else:
                  # File sizes match, dont download file or error?
                  worker.finished = True
                  worker.sig_download_finished.emit(url, path)
                  worker.sig_finished.emit(worker, path, None)
          elif url in self._get_requests:
              data = reply.readAll()
              self._save(url, path, data)