diff --git a/include/downloader.h b/include/downloader.h index 726049ba0..d2cebe8e0 100644 --- a/include/downloader.h +++ b/include/downloader.h @@ -93,15 +93,15 @@ class Downloader void close(); - Download* startDownload(const std::string& uri, const std::vector>& options = {}); - Download* getDownload(const std::string& did); + std::shared_ptr startDownload(const std::string& uri, const std::vector>& options = {}); + std::shared_ptr getDownload(const std::string& did); size_t getNbDownload(); std::vector getDownloadIds(); private: std::mutex m_lock; - std::map> m_knownDownloads; + std::map> m_knownDownloads; std::shared_ptr mp_aria; }; } diff --git a/src/downloader.cpp b/src/downloader.cpp index f6b13a21a..02c75f6fb 100644 --- a/src/downloader.cpp +++ b/src/downloader.cpp @@ -164,37 +164,37 @@ std::vector Downloader::getDownloadIds() { return ret; } -Download* Downloader::startDownload(const std::string& uri, const std::vector>& options) +std::shared_ptr Downloader::startDownload(const std::string& uri, const std::vector>& options) { std::unique_lock lock(m_lock); for (auto& p: m_knownDownloads) { auto& d = p.second; auto& uris = d->getUris(); if (std::find(uris.begin(), uris.end(), uri) != uris.end()) - return d.get(); + return d; } std::vector uris = {uri}; auto gid = mp_aria->addUri(uris, options); - m_knownDownloads[gid] = std::unique_ptr(new Download(mp_aria, gid)); - return m_knownDownloads[gid].get(); + m_knownDownloads[gid] = std::make_shared(mp_aria, gid); + return m_knownDownloads[gid]; } -Download* Downloader::getDownload(const std::string& did) +std::shared_ptr Downloader::getDownload(const std::string& did) { std::unique_lock lock(m_lock); try { - return m_knownDownloads.at(did).get(); + return m_knownDownloads.at(did); } catch(std::exception& e) { for (auto gid : mp_aria->tellActive()) { if (gid == did) { - m_knownDownloads[gid] = std::unique_ptr(new Download(mp_aria, gid)); - return m_knownDownloads[gid].get(); + m_knownDownloads[gid] = std::make_shared(mp_aria, gid); + return m_knownDownloads[gid]; } } for (auto gid : mp_aria->tellWaiting()) { if (gid == did) { - m_knownDownloads[gid] = std::unique_ptr(new Download(mp_aria, gid)); - return m_knownDownloads[gid].get(); + m_knownDownloads[gid] = std::make_shared(mp_aria, gid); + return m_knownDownloads[gid]; } } throw e;