mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-04-07 13:55:33 +08:00
Fix download manager
This commit is contained in:
@ -49,7 +49,7 @@ namespace NSNetwork
|
||||
void SetProperty(const std::string& name, const std::string& value);
|
||||
void Initialize();
|
||||
|
||||
private:
|
||||
public:
|
||||
CSession_private* m_pInternal;
|
||||
};
|
||||
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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 );
|
||||
|
||||
Reference in New Issue
Block a user