bool CFileOperationJob::DoWork() { FileOperationList ops; double totalTime = 0.0; if (m_displayProgress && GetProgressDialog() == NULL) { CGUIDialogExtendedProgressBar* dialog = (CGUIDialogExtendedProgressBar*)g_windowManager.GetWindow(WINDOW_DIALOG_EXT_PROGRESS); SetProgressBar(dialog->GetHandle(GetActionString(m_action))); } bool success = DoProcess(m_action, m_items, m_strDestFile, ops, totalTime); unsigned int size = ops.size(); double opWeight = 100.0 / totalTime; double current = 0.0; for (unsigned int i = 0; i < size && success; i++) success &= ops[i].ExecuteOperation(this, current, opWeight); MarkFinished(); return success; }
bool CFileOperationJob::DoProcessFolder(FileAction action, const CStdString& strPath, const CStdString& strDestFile, FileOperationList &fileOperations, double &totalTime) { // check whether this folder is a filedirectory - if so, we don't process it's contents CFileItem item(strPath, false); IFileDirectory *file = CFactoryFileDirectory::Create(strPath, &item); if (file) { delete file; return true; } CLog::Log(LOGDEBUG,"FileManager, processing folder: %s",strPath.c_str()); CFileItemList items; //m_rootDir.GetDirectory(strPath, items); CDirectory::GetDirectory(strPath, items, "", false, false, DIR_CACHE_ONCE, true, false, true); for (int i = 0; i < items.Size(); i++) { CFileItemPtr pItem = items[i]; pItem->Select(true); CLog::Log(LOGDEBUG," -- %s",pItem->m_strPath.c_str()); } if (!DoProcess(action, items, strDestFile, fileOperations, totalTime)) return false; if (action == ActionMove) { fileOperations.push_back(CFileOperation(ActionDeleteFolder, strPath, "", 1)); totalTime += 1.0; } return true; }
bool CFileOperationJob::DoWork() { FileOperationList ops; double totalTime = 0.0; bool success = DoProcess(m_action, m_items, m_strDestFile, ops, totalTime); unsigned int size = ops.size(); double opWeight = 100.0 / totalTime; double current = 0.0; for (unsigned int i = 0; i < size && success; i++) success &= ops[i].ExecuteOperation(this, current, opWeight); return success; }
bool CFileOperationJob::DoProcessFolder(FileAction action, const std::string& strPath, const std::string& strDestFile, FileOperationList &fileOperations, double &totalTime) { // check whether this folder is a filedirectory - if so, we don't process it's contents CFileItem item(strPath, false); IFileDirectory *file = CFileDirectoryFactory::Create(item.GetURL(), &item); if (file) { delete file; return true; } CFileItemList items; CDirectory::GetDirectory(strPath, items, "", DIR_FLAG_NO_FILE_DIRS | DIR_FLAG_GET_HIDDEN); for (int i = 0; i < items.Size(); i++) { CFileItemPtr pItem = items[i]; pItem->Select(true); } if (!DoProcess(action, items, strDestFile, fileOperations, totalTime)) { CLog::Log(LOGERROR,"FileManager: error while processing folder: %s", strPath.c_str()); return false; } if (action == ActionMove) { fileOperations.push_back(CFileOperation(ActionDeleteFolder, strPath, "", 1)); totalTime += 1.0; } return true; }
bool CFileOperationJob::DoProcessFile(FileAction action, const CStdString& strFileA, const CStdString& strFileB, FileOperationList &fileOperations, double &totalTime) { int64_t time = 1; if (action == ActionCopy || action == ActionReplace || (action == ActionMove && !CanBeRenamed(strFileA, strFileB))) { struct __stat64 data; if(CFile::Stat(strFileA, &data) == 0) time += data.st_size; } fileOperations.push_back(CFileOperation(action, strFileA, strFileB, time)); totalTime += time; return true; }