Download *DownloadManagerImpl::getDownloadByContactId(int contactId) { QMutexLocker locker(&m_mutexLocker); for (int i = 0; i < m_downloadQueue.count(); i++) { Download *download = m_downloadQueue.at(i); if (download == 0) continue; Contact *contact = download->getContact(); if (contact == 0) continue; if (contact->getId() == contactId) return download; } foreach(Download *download, m_downloadingList) { if (download == 0) continue; Contact *contact = download->getContact(); if (contact == 0) continue; if (contact->getId() == contactId) return download; } return 0; }
bool DownloadManagerImpl::removeDownloadByContactId(int contactId) { QMutexLocker locker(&m_mutexLocker); for (int i = 0; i < m_downloadQueue.count(); i++) { Download *download = m_downloadQueue.at(i); if (download == 0) continue; Contact *contact = download->getContact(); if (contact == 0) continue; if (contact->getId() == contactId) { m_downloadQueue.removeAt(i); // Free memory download->stop(); download->deleteLater(); return true; } } for (int i = 0; i < m_downloadingList.count(); i++) { Download *download = m_downloadingList.at(i); if (download == 0) continue; Contact *contact = download->getContact(); if (contact == 0) continue; if (contact->getId() == contactId) { m_downloadingList.removeAt(i); // Free memory download->stop(); download->deleteLater(); return true; } } return false; }
bool DownloadManagerImpl::isDownloadExistingInQueue(int contactId) { for (int i = 0; i < m_downloadQueue.count(); i++) { Download *download = m_downloadQueue.at(i); if (download == 0) continue; Contact *contact = download->getContact(); if (contact == 0) continue; if (contact->getId() == contactId) return true; } return false; }
void DownloadManagerImpl::checkDownloadQueue() { m_mutexLocker.lock(); int queueCount = m_downloadQueue.count(); int downloadingCount = m_downloadingList.count(); m_mutexLocker.unlock(); while (downloadingCount < MAX_CONCURRENT_DOWNLOAD_THREADS) { if (queueCount == 0) return; m_mutexLocker.lock(); Download *download = m_downloadQueue.dequeue(); // Add the download to the downloading list m_downloadingList.append(download); // Recalculate params queueCount = m_downloadQueue.count(); downloadingCount = m_downloadingList.count(); m_mutexLocker.unlock(); DownloadManager::DownloadStatus downloadStatus = DownloadManager::Downloading; // Update status download->setDownloadStatus(downloadStatus); m_downloadDAO->updateDownload(download); // Connect signals connectDownloadSignals(download); // Start the download download->start(); // Emit download status change signal emit downloadStatusChanged(download->getContact()->getId(), download->getId(), (int)downloadStatus); } }