void HistoryCoordinator::HistoryHide(DownloadQueue* downloadQueue, HistoryInfo* historyInfo, int rindex) { // replace history element std::unique_ptr<DupInfo> dupInfo = std::make_unique<DupInfo>(); dupInfo->SetId(historyInfo->GetNzbInfo()->GetId()); dupInfo->SetName(historyInfo->GetNzbInfo()->GetName()); dupInfo->SetDupeKey(historyInfo->GetNzbInfo()->GetDupeKey()); dupInfo->SetDupeScore(historyInfo->GetNzbInfo()->GetDupeScore()); dupInfo->SetDupeMode(historyInfo->GetNzbInfo()->GetDupeMode()); dupInfo->SetSize(historyInfo->GetNzbInfo()->GetSize()); dupInfo->SetFullContentHash(historyInfo->GetNzbInfo()->GetFullContentHash()); dupInfo->SetFilteredContentHash(historyInfo->GetNzbInfo()->GetFilteredContentHash()); dupInfo->SetStatus( historyInfo->GetNzbInfo()->GetMarkStatus() == NzbInfo::ksGood ? DupInfo::dsGood : historyInfo->GetNzbInfo()->GetMarkStatus() == NzbInfo::ksBad ? DupInfo::dsBad : historyInfo->GetNzbInfo()->GetMarkStatus() == NzbInfo::ksSuccess ? DupInfo::dsSuccess : historyInfo->GetNzbInfo()->GetDeleteStatus() == NzbInfo::dsDupe ? DupInfo::dsDupe : historyInfo->GetNzbInfo()->GetDeleteStatus() == NzbInfo::dsManual || historyInfo->GetNzbInfo()->GetDeleteStatus() == NzbInfo::dsGood || historyInfo->GetNzbInfo()->GetDeleteStatus() == NzbInfo::dsCopy ? DupInfo::dsDeleted : historyInfo->GetNzbInfo()->IsDupeSuccess() ? DupInfo::dsSuccess : DupInfo::dsFailed); std::unique_ptr<HistoryInfo> newHistoryInfo = std::make_unique<HistoryInfo>(std::move(dupInfo)); newHistoryInfo->SetTime(historyInfo->GetTime()); DeleteDiskFiles(historyInfo->GetNzbInfo()); info("Collection %s removed from history", historyInfo->GetName()); (*downloadQueue->GetHistory())[downloadQueue->GetHistory()->size() - 1 - rindex] = std::move(newHistoryInfo); }
/** * Removes old entries from (recent) history */ void HistoryCoordinator::ServiceWork() { DownloadQueue* pDownloadQueue = DownloadQueue::Lock(); time_t tMinTime = time(NULL) - g_pOptions->GetKeepHistory() * 60*60*24; bool bChanged = false; int index = 0; // traversing in a reverse order to delete items in order they were added to history // (just to produce the log-messages in a more logical order) for (HistoryList::reverse_iterator it = pDownloadQueue->GetHistory()->rbegin(); it != pDownloadQueue->GetHistory()->rend(); ) { HistoryInfo* pHistoryInfo = *it; if (pHistoryInfo->GetKind() != HistoryInfo::hkDup && pHistoryInfo->GetTime() < tMinTime) { if (g_pOptions->GetDupeCheck() && pHistoryInfo->GetKind() == HistoryInfo::hkNzb) { // replace history element HistoryHide(pDownloadQueue, pHistoryInfo, index); index++; } else { char szNiceName[1024]; pHistoryInfo->GetName(szNiceName, 1024); pDownloadQueue->GetHistory()->erase(pDownloadQueue->GetHistory()->end() - 1 - index); if (pHistoryInfo->GetKind() == HistoryInfo::hkNzb) { DeleteDiskFiles(pHistoryInfo->GetNZBInfo()); } info("Collection %s removed from history", szNiceName); delete pHistoryInfo; } it = pDownloadQueue->GetHistory()->rbegin() + index; bChanged = true; } else { it++; index++; } } if (bChanged) { pDownloadQueue->Save(); } DownloadQueue::Unlock(); }
/** * Removes old entries from (recent) history */ void HistoryCoordinator::ServiceWork() { GuardedDownloadQueue downloadQueue = DownloadQueue::Guard(); time_t minTime = Util::CurrentTime() - g_Options->GetKeepHistory() * 60*60*24; bool changed = false; int index = 0; // traversing in a reverse order to delete items in order they were added to history // (just to produce the log-messages in a more logical order) for (HistoryList::reverse_iterator it = downloadQueue->GetHistory()->rbegin(); it != downloadQueue->GetHistory()->rend(); ) { HistoryInfo* historyInfo = (*it).get(); if (historyInfo->GetKind() != HistoryInfo::hkDup && historyInfo->GetTime() < minTime) { if (g_Options->GetDupeCheck() && historyInfo->GetKind() == HistoryInfo::hkNzb) { // replace history element HistoryHide(downloadQueue, historyInfo, index); index++; } else { if (historyInfo->GetKind() == HistoryInfo::hkNzb) { DeleteDiskFiles(historyInfo->GetNzbInfo()); } info("Collection %s removed from history", historyInfo->GetName()); downloadQueue->GetHistory()->erase(downloadQueue->GetHistory()->end() - 1 - index); } it = downloadQueue->GetHistory()->rbegin() + index; changed = true; } else { it++; index++; } } if (changed) { downloadQueue->HistoryChanged(); downloadQueue->Save(); } }
void HistoryCoordinator::HistoryDelete(DownloadQueue* pDownloadQueue, HistoryList::iterator itHistory, HistoryInfo* pHistoryInfo, bool bFinal) { char szNiceName[1024]; pHistoryInfo->GetName(szNiceName, 1024); info("Deleting %s from history", szNiceName); if (pHistoryInfo->GetKind() == HistoryInfo::hkNzb) { DeleteDiskFiles(pHistoryInfo->GetNZBInfo()); } if (pHistoryInfo->GetKind() == HistoryInfo::hkNzb && g_pOptions->GetDeleteCleanupDisk() && (pHistoryInfo->GetNZBInfo()->GetDeleteStatus() != NZBInfo::dsNone || pHistoryInfo->GetNZBInfo()->GetParStatus() == NZBInfo::psFailure || pHistoryInfo->GetNZBInfo()->GetUnpackStatus() == NZBInfo::usFailure || pHistoryInfo->GetNZBInfo()->GetUnpackStatus() == NZBInfo::usPassword) && Util::DirectoryExists(pHistoryInfo->GetNZBInfo()->GetDestDir())) { info("Deleting %s", pHistoryInfo->GetNZBInfo()->GetDestDir()); char szErrBuf[256]; if (!Util::DeleteDirectoryWithContent(pHistoryInfo->GetNZBInfo()->GetDestDir(), szErrBuf, sizeof(szErrBuf))) { error("Could not delete directory %s: %s", pHistoryInfo->GetNZBInfo()->GetDestDir(), szErrBuf); } } if (bFinal || !g_pOptions->GetDupeCheck() || pHistoryInfo->GetKind() == HistoryInfo::hkUrl) { pDownloadQueue->GetHistory()->erase(itHistory); delete pHistoryInfo; } else { if (pHistoryInfo->GetKind() == HistoryInfo::hkNzb) { // replace history element int rindex = pDownloadQueue->GetHistory()->size() - 1 - (itHistory - pDownloadQueue->GetHistory()->begin()); HistoryHide(pDownloadQueue, pHistoryInfo, rindex); } } }
void HistoryCoordinator::HistoryHide(DownloadQueue* pDownloadQueue, HistoryInfo* pHistoryInfo, int rindex) { char szNiceName[1024]; pHistoryInfo->GetName(szNiceName, 1024); // replace history element DupInfo* pDupInfo = new DupInfo(); pDupInfo->SetID(pHistoryInfo->GetNZBInfo()->GetID()); pDupInfo->SetName(pHistoryInfo->GetNZBInfo()->GetName()); pDupInfo->SetDupeKey(pHistoryInfo->GetNZBInfo()->GetDupeKey()); pDupInfo->SetDupeScore(pHistoryInfo->GetNZBInfo()->GetDupeScore()); pDupInfo->SetDupeMode(pHistoryInfo->GetNZBInfo()->GetDupeMode()); pDupInfo->SetSize(pHistoryInfo->GetNZBInfo()->GetSize()); pDupInfo->SetFullContentHash(pHistoryInfo->GetNZBInfo()->GetFullContentHash()); pDupInfo->SetFilteredContentHash(pHistoryInfo->GetNZBInfo()->GetFilteredContentHash()); pDupInfo->SetStatus( pHistoryInfo->GetNZBInfo()->GetMarkStatus() == NZBInfo::ksGood ? DupInfo::dsGood : pHistoryInfo->GetNZBInfo()->GetMarkStatus() == NZBInfo::ksBad ? DupInfo::dsBad : pHistoryInfo->GetNZBInfo()->GetMarkStatus() == NZBInfo::ksSuccess ? DupInfo::dsSuccess : pHistoryInfo->GetNZBInfo()->GetDeleteStatus() == NZBInfo::dsDupe ? DupInfo::dsDupe : pHistoryInfo->GetNZBInfo()->GetDeleteStatus() == NZBInfo::dsManual || pHistoryInfo->GetNZBInfo()->GetDeleteStatus() == NZBInfo::dsGood || pHistoryInfo->GetNZBInfo()->GetDeleteStatus() == NZBInfo::dsCopy ? DupInfo::dsDeleted : pHistoryInfo->GetNZBInfo()->IsDupeSuccess() ? DupInfo::dsSuccess : DupInfo::dsFailed); HistoryInfo* pNewHistoryInfo = new HistoryInfo(pDupInfo); pNewHistoryInfo->SetTime(pHistoryInfo->GetTime()); (*pDownloadQueue->GetHistory())[pDownloadQueue->GetHistory()->size() - 1 - rindex] = pNewHistoryInfo; DeleteDiskFiles(pHistoryInfo->GetNZBInfo()); delete pHistoryInfo; info("Collection %s removed from history", szNiceName); }