void TrashProtocol::listRoot() { INIT_IMPL; const TrashedFileInfoList lst = impl.list(); totalSize(lst.count()); KIO::UDSEntry entry; createTopLevelDirEntry(entry); listEntry(entry, false); for(TrashedFileInfoList::ConstIterator it = lst.begin(); it != lst.end(); ++it) { const KURL url = TrashImpl::makeURL((*it).trashId, (*it).fileId, QString::null); KURL origURL; origURL.setPath((*it).origPath); entry.clear(); if(createUDSEntry((*it).physicalPath, origURL.fileName(), url.url(), entry, *it)) listEntry(entry, false); } entry.clear(); listEntry(entry, true); finished(); }
bool TrashImpl::emptyTrash() { kdDebug() << k_funcinfo << endl; // The naive implementation "delete info and files in every trash directory" // breaks when deleted directories contain files owned by other users. // We need to ensure that the .trashinfo file is only removed when the // corresponding files could indeed be removed. const TrashedFileInfoList fileInfoList = list(); TrashedFileInfoList::const_iterator it = fileInfoList.begin(); const TrashedFileInfoList::const_iterator end = fileInfoList.end(); for ( ; it != end ; ++it ) { const TrashedFileInfo& info = *it; const TQString filesPath = info.physicalPath; if ( synchronousDel( filesPath, true, true ) ) { TQFile::remove( infoPath( info.trashId, info.fileId ) ); } // else error code is set } fileRemoved(); return m_lastErrorCode == 0; }