qmgr: Implement IBackgroundCopyJob::Cancel.
This commit is contained in:
parent
63aa94573f
commit
13c3f7ac2b
|
@ -201,6 +201,7 @@ HRESULT BackgroundCopyFileConstructor(BackgroundCopyJobImpl *owner,
|
||||||
This->fileProgress.Completed = FALSE;
|
This->fileProgress.Completed = FALSE;
|
||||||
This->owner = owner;
|
This->owner = owner;
|
||||||
This->read_size = 0;
|
This->read_size = 0;
|
||||||
|
This->tempFileName[0] = 0;
|
||||||
IBackgroundCopyJob3_AddRef(&owner->IBackgroundCopyJob3_iface);
|
IBackgroundCopyJob3_AddRef(&owner->IBackgroundCopyJob3_iface);
|
||||||
|
|
||||||
*file = This;
|
*file = This;
|
||||||
|
|
|
@ -259,6 +259,9 @@ static ULONG WINAPI BackgroundCopyJob_Release(IBackgroundCopyJob3 *iface)
|
||||||
HeapFree(GetProcessHeap(), 0, cred->Credentials.Basic.Password);
|
HeapFree(GetProcessHeap(), 0, cred->Credentials.Basic.Password);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
CloseHandle(This->wait);
|
||||||
|
CloseHandle(This->cancel);
|
||||||
|
CloseHandle(This->done);
|
||||||
HeapFree(GetProcessHeap(), 0, This);
|
HeapFree(GetProcessHeap(), 0, This);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -365,8 +368,48 @@ static HRESULT WINAPI BackgroundCopyJob_Cancel(
|
||||||
IBackgroundCopyJob3 *iface)
|
IBackgroundCopyJob3 *iface)
|
||||||
{
|
{
|
||||||
BackgroundCopyJobImpl *This = impl_from_IBackgroundCopyJob3(iface);
|
BackgroundCopyJobImpl *This = impl_from_IBackgroundCopyJob3(iface);
|
||||||
FIXME("(%p): stub\n", This);
|
HRESULT rv = S_OK;
|
||||||
return E_NOTIMPL;
|
|
||||||
|
TRACE("(%p)\n", This);
|
||||||
|
|
||||||
|
EnterCriticalSection(&This->cs);
|
||||||
|
|
||||||
|
if (is_job_done(This))
|
||||||
|
{
|
||||||
|
rv = BG_E_INVALID_STATE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
BackgroundCopyFileImpl *file;
|
||||||
|
|
||||||
|
if (This->state == BG_JOB_STATE_CONNECTING || This->state == BG_JOB_STATE_TRANSFERRING)
|
||||||
|
{
|
||||||
|
This->state = BG_JOB_STATE_CANCELLED;
|
||||||
|
SetEvent(This->cancel);
|
||||||
|
|
||||||
|
LeaveCriticalSection(&This->cs);
|
||||||
|
WaitForSingleObject(This->done, INFINITE);
|
||||||
|
EnterCriticalSection(&This->cs);
|
||||||
|
}
|
||||||
|
|
||||||
|
LIST_FOR_EACH_ENTRY(file, &This->files, BackgroundCopyFileImpl, entryFromJob)
|
||||||
|
{
|
||||||
|
if (file->tempFileName[0] && !DeleteFileW(file->tempFileName))
|
||||||
|
{
|
||||||
|
WARN("Couldn't delete %s (%u)\n", debugstr_w(file->tempFileName), GetLastError());
|
||||||
|
rv = BG_S_UNABLE_TO_DELETE_FILES;
|
||||||
|
}
|
||||||
|
if (file->info.LocalName && !DeleteFileW(file->info.LocalName))
|
||||||
|
{
|
||||||
|
WARN("Couldn't delete %s (%u)\n", debugstr_w(file->info.LocalName), GetLastError());
|
||||||
|
rv = BG_S_UNABLE_TO_DELETE_FILES;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
This->state = BG_JOB_STATE_CANCELLED;
|
||||||
|
}
|
||||||
|
|
||||||
|
LeaveCriticalSection(&This->cs);
|
||||||
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI BackgroundCopyJob_Complete(
|
static HRESULT WINAPI BackgroundCopyJob_Complete(
|
||||||
|
@ -1193,6 +1236,10 @@ HRESULT BackgroundCopyJobConstructor(LPCWSTR displayName, BG_JOB_TYPE type, GUID
|
||||||
|
|
||||||
memset(&This->http_options, 0, sizeof(This->http_options));
|
memset(&This->http_options, 0, sizeof(This->http_options));
|
||||||
|
|
||||||
|
This->wait = CreateEventW(NULL, FALSE, FALSE, NULL);
|
||||||
|
This->cancel = CreateEventW(NULL, FALSE, FALSE, NULL);
|
||||||
|
This->done = CreateEventW(NULL, FALSE, FALSE, NULL);
|
||||||
|
|
||||||
*job = This;
|
*job = This;
|
||||||
|
|
||||||
TRACE("created job %s:%p\n", debugstr_guid(&This->jobId), This);
|
TRACE("created job %s:%p\n", debugstr_guid(&This->jobId), This);
|
||||||
|
|
Loading…
Reference in New Issue