Fix download manager

This commit is contained in:
Oleg.Korshul
2023-07-15 04:29:46 +05:00
parent ff6bcdbe0d
commit 2a84964f3c
3 changed files with 33 additions and 17 deletions

View File

@ -49,7 +49,7 @@ namespace NSNetwork
void SetProperty(const std::string& name, const std::string& value);
void Initialize();
private:
public:
CSession_private* m_pInternal;
};

View File

@ -81,7 +81,7 @@ namespace NSNetwork
if (iter != m_props.end())
configuration.allowsCellularAccess = (std::stoi(iter->second) == 1) ? YES : NO;
iter = m_props.find("allowsCellularAccess");
iter = m_props.find("requestCachePolicy");
if (iter != m_props.end())
{
if ("NSURLRequestUseProtocolCachePolicy" == iter->second)
@ -157,7 +157,11 @@ namespace NSNetwork
__block NSData* result = nil;
dispatch_semaphore_t sem = dispatch_semaphore_create(0);
[[((CSessionMAC*)m_pSession)->m_session dataTaskWithRequest:urlRequest
NSURLSession* _session = ((CSessionMAC*)m_pSession->m_pInternal)->m_session;
if (nil == _session)
_session = [NSURLSession sharedSession];
[[_session dataTaskWithRequest:urlRequest
completionHandler:^(NSData *data, NSURLResponse* response, NSError *error) {
if (error == nil)
result = data;
@ -174,8 +178,10 @@ namespace NSNetwork
nResult = 0;
}
nResult = 1;
else
{
nResult = 1;
}
return nResult;
}

View File

@ -125,7 +125,7 @@ namespace ASC
pTask->Handler = handler;
pTask->ID = m_nTaskID++;
if (m_nMaxConcurrentDownloadCount < (int)m_arTasks.size())
if (m_nMaxConcurrentDownloadCount > (int)m_arTasks.size())
{
m_arTasks.push_back(pTask);
pTask->DestroyOnFinish();
@ -141,7 +141,7 @@ namespace ASC
void OnDownloadTask(CDownloadTask* task)
{
CTemporaryCS oCS(&m_oCS);
m_oCS.Enter();
for (std::list<CDownloadTask*>::iterator iter = m_arTasks.begin(); iter != m_arTasks.end(); iter++)
{
@ -152,6 +152,19 @@ namespace ASC
}
}
if (!m_arWaitTasks.empty())
{
std::list<CDownloadTask*>::iterator iter = m_arWaitTasks.begin();
CDownloadTask* pNewTask = *iter;
m_arWaitTasks.erase(iter);
m_arTasks.push_back(pNewTask);
pNewTask->DestroyOnFinish();
pNewTask->Start(m_nPriority);
}
m_oCS.Leave();
if (task->Handler)
task->Handler(task);
}
@ -179,18 +192,18 @@ namespace ASC
void Clear()
{
CTemporaryCS oCS(&m_oCS);
for (std::list<CDownloadTask*>::iterator iter = m_arTasks.begin(); iter != m_arTasks.end(); iter++)
{
(*iter)->Handler = nullptr;
}
for (std::list<CDownloadTask*>::iterator iter = m_arWaitTasks.begin(); iter != m_arWaitTasks.end();)
{
CDownloadTask* pTask = *iter;
delete pTask;
}
m_arWaitTasks.clear();
for (std::list<CDownloadTask*>::iterator iter = m_arTasks.begin(); iter != m_arTasks.end(); iter++)
{
(*iter)->Handler = nullptr;
(*iter)->Stop();
}
}
};
@ -256,9 +269,6 @@ namespace ASC
bool CDownloadManager::DownloadExternal(const std::wstring& url, const std::wstring& path)
{
NSNetwork::NSFileTransport::CFileDownloader oDownloader(url, false);
NSNetwork::NSFileTransport::CSession oSession;
oDownloader.SetSession(&oSession);
oDownloader.SetFilePath(path);
oDownloader.Start( 0 );