void CQueueViewFailed::OnRemoveAll(wxCommandEvent& event) { #ifndef __WXMSW__ // GetNextItem is O(n) if nothing is selected, GetSelectedItemCount() is O(1) if (GetSelectedItemCount()) #endif { // First, clear all selections int item; while ((item = GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED)) != -1) SetItemState(item, 0, wxLIST_STATE_SELECTED); } CEditHandler* pEditHandler = CEditHandler::Get(); if (pEditHandler) pEditHandler->RemoveAll(CEditHandler::upload_and_remove_failed); for (std::vector<CServerItem*>::iterator iter = m_serverList.begin(); iter != m_serverList.end(); iter++) delete *iter; m_serverList.clear(); m_itemCount = 0; SaveSetItemCount(0); m_fileCount = 0; m_folderScanCount = 0; DisplayNumberQueuedFiles(); RefreshListOnly(); if (!m_itemCount && m_pQueue->GetQueueView()->GetItemCount()) m_pQueue->SetSelection(0); }
void CQueueViewFailed::OnRemoveSelected(wxCommandEvent& event) { #ifndef __WXMSW__ // GetNextItem is O(n) if nothing is selected, GetSelectedItemCount() is O(1) if (!GetSelectedItemCount()) return; #endif std::list<CQueueItem*> selectedItems; long item = -1; while (true) { item = GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); if (item == -1) break; selectedItems.push_front(GetQueueItem(item)); SetItemState(item, 0, wxLIST_STATE_SELECTED); } CEditHandler* pEditHandler = CEditHandler::Get(); while (!selectedItems.empty()) { CQueueItem* pItem = selectedItems.front(); selectedItems.pop_front(); CQueueItem* pTopLevelItem = pItem->GetTopLevelItem(); if (pItem->GetType() == QueueItemType_Server) { CServerItem* pServerItem = (CServerItem*)pItem; if (pEditHandler && pEditHandler->GetFileCount(CEditHandler::remote, CEditHandler::upload_and_remove_failed, &pServerItem->GetServer())) pEditHandler->RemoveAll(CEditHandler::upload_and_remove_failed, &pServerItem->GetServer()); } else if (pItem->GetType() == QueueItemType_File) { CFileItem* pFileItem = (CFileItem*)pItem; if (pFileItem->m_edit == CEditHandler::remote && pEditHandler) { wxFileName fn(pFileItem->GetLocalFile()); if (pFileItem->m_edit == CEditHandler::local) { enum CEditHandler::fileState state = pEditHandler->GetFileState(pFileItem->GetLocalFile()); if (state == CEditHandler::upload_and_remove_failed) pEditHandler->Remove(pFileItem->GetLocalFile()); } else { CServerItem* pServerItem = (CServerItem*)pFileItem->GetTopLevelItem(); enum CEditHandler::fileState state = pEditHandler->GetFileState(pFileItem->GetRemoteFile(), pFileItem->GetRemotePath(), pServerItem->GetServer()); if (state == CEditHandler::upload_and_remove_failed) pEditHandler->Remove(pFileItem->GetRemoteFile(), pFileItem->GetRemotePath(), pServerItem->GetServer()); } } } if (!pTopLevelItem->GetChild(1)) { // Parent will get deleted // If next selected item is parent, remove it from list if (!selectedItems.empty() && selectedItems.front() == pTopLevelItem) selectedItems.pop_front(); } RemoveItem(pItem, true, false, false); } DisplayNumberQueuedFiles(); SaveSetItemCount(m_itemCount); RefreshListOnly(); if (!m_itemCount && m_pQueue->GetQueueView()->GetItemCount()) m_pQueue->SetSelection(0); }