BOOL fsUploadsMgr::LoadUploads(HANDLE hFile, BOOL bCompletedOnly, WORD wVer) { DWORD dw; size_t cUploads; if (FALSE == ReadFile (hFile, &cUploads, sizeof (size_t), &dw, NULL)) return FALSE; for (size_t i = 0; i < cUploads; i++) { vmsUploadSmartPtr upl; Upload_CreateInstance (upl); if (FALSE == ReadFile (hFile, &upl->bAutostart, sizeof (BOOL), &dw, NULL)) return FALSE; if (FALSE == ReadFile (hFile, &upl->nID, sizeof (UINT), &dw, NULL)) return FALSE; if (FALSE == ReadFile (hFile, &upl->dwFlags, sizeof (DWORD), &dw, NULL)) return FALSE; if (FALSE == ReadFile (hFile, &upl->dwState, sizeof (DWORD), &dw, NULL)) return FALSE; upl->dwState = 0; if (FALSE == ReadFile (hFile, &upl->dateAdded, sizeof (FILETIME), &dw, NULL)) return FALSE; if (FALSE == upl->log.Load (hFile)) return FALSE; if (FALSE == upl->pMgr->Load (hFile)) return FALSE; if (bCompletedOnly && upl->pMgr->IsDone () == FALSE) continue; upl->pMgr->SetEventFunc (_UploadMgrEvents, this); if (bCompletedOnly) { upl->dwFlags |= UF_DONTSAVETOFILE | UF_READONLY; m_cDontSaveUploads++; } if (wVer == 1) { upl->dwFlags = 0; upl->nID = InterlockedIncrement (m_pnUplNextId); } *m_pnUplNextId = max (*m_pnUplNextId, (LONG)upl->nID + 1); m_vUploads.push_back (upl); } return TRUE; }
vmsUploadSmartPtr CUploadsWnd::CreateUpload(vmsUploadPackageImpl *pkg) { vmsUploadSmartPtr upl; Upload_CreateInstance (upl); upl->bAutostart = TRUE; upl->pMgr->Create (pkg); upl->dwState = 0; upl->dwFlags = 0; upl->dwReserved = 0; _UplsMgr.Add (upl); return upl; }
void fsUploadsMgr::DeleteUploads(UPLS_LIST_REF v) { std::vector <size_t> vIndexes; size_t cUpls = v.size (); size_t nStart = 0; size_t i = 0; for (i = 0; i < cUpls; i++) vIndexes.push_back ((size_t)-1); for (i = 0; i < m_vUploads.size (); i++) { vmsUploadSmartPtr upl = m_vUploads [i]; for (size_t j = nStart; j < cUpls; j++) { if (upl == v.at (j)) { vIndexes [j] = i; size_t k = j; for (k = j; k > nStart && vIndexes [k - 1] != -1; k--) ; if (k == nStart) nStart = j + 1; break; } } } UPLS_LIST *pv = new UPLS_LIST; vmsUploadSmartPtr uplFake; Upload_CreateInstance (uplFake); for (i = 0; i < (UINT)v.size (); i++) { vmsUploadSmartPtr upl = v.at (i); int iIndex = vIndexes [i]; if (iIndex == -1) continue; upl->pMgr->SetEventFunc (NULL, 0); Event (upl, UME_UPLOAD_WILL_BE_DELETED); m_vUploads [iIndex] = uplFake; pv->push_back (upl); } UPLS_LIST v2; for (i = 0; i < m_vUploads.size (); i++) { if (m_vUploads [i] != uplFake) v2.push_back (m_vUploads [i]); } m_vUploads = v2; Event (NULL, UME_UPLOADS_WERE_DELETED); ProcessUploads (); DWORD dw; CloseHandle ( CreateThread (NULL, 0, _threadDeleteUploads, pv, 0, &dw)); }