예제 #1
0
void SFTWorker::finishFile()
{
	m_hFh.close();

	std::string file = m_pCurFile->getFullPath();
	gcString str("{0}", m_pCurFile->getTimeStamp());

	try
	{
		ptime t(from_iso_string(str));
		bfs::path spath(file);

		tm pt_tm = to_tm(t);
		last_write_time(spath, mktime(&pt_tm));
	}
	catch (...)
	{
		Warning(gcString("Failed to change {0} time stamp to {1}.\n", m_pCurFile->getName(), str));
	}

	safe_delete(m_pBzs);

	std::string hash = "Failed to generate hash";

#ifdef NIX
	//struct stat s;
	bool isWinExe = false;
	
	if (file.size() > 4)
	{
		std::string lastFour(file.end() - 4, file.end());
		std::transform(lastFour.begin(), lastFour.end(), lastFour.begin(), ::toupper);
		if (lastFour == ".EXE")
			isWinExe = true;
	}
	
	//( && stat(file.c_str(), &s) == 0) 
	
	bool isExecutable = HasAnyFlags(m_pCurFile->getFlags(), MCFCore::MCFFileI::FLAG_XECUTABLE);

	if (isExecutable || isWinExe)
		chmod(file.c_str(), (S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH));
#endif

	if (m_pCurFile->isZeroSize() || m_pCurFile->hashCheckFile(&hash))
	{
		m_pCT->endTask(m_uiId, BaseMCFThread::SF_STATUS_COMPLETE);
	}
	else
	{
		Warning(gcString("Hash check failed for file [{0}]: Cur: {1} !=  Should: {2}\n", m_pCurFile->getName(), hash, m_pCurFile->getCsum()));
		m_pCT->endTask(m_uiId, BaseMCFThread::SF_STATUS_HASHMISSMATCH);
	}
}
Task TestSupportLibrary::createTask(string taskName, 
									string taskStart, 
									string taskEnd, 
									string taskDeadline, 
									vector<string> taskTags, 
									bool isDone) {
	Task newTask;
	newTask.setTaskName(taskName);

	if (taskStart != "not-a-date-time") {
		newTask.setTaskStartTime(from_iso_string(taskStart));
	}
	else {
		newTask.setTaskStartTime(not_a_date_time);
	}

	if (taskEnd != "not-a-date-time") {
		newTask.setTaskEndTime(from_iso_string(taskEnd));
	}
	else {
		newTask.setTaskEndTime(not_a_date_time);
	}

	if (taskDeadline != "not-a-date-time") {
		newTask.setTaskDeadline(from_iso_string(taskDeadline));
	}
	else {
		newTask.setTaskDeadline(not_a_date_time);
	}
		
	newTask.setTaskTags(taskTags);

	if (isDone) {
		newTask.setTaskIsDone();
	}

	return newTask;
}
//similar to convertStringToPtime, introduced for SLAP
void StorageConverter::convertStringEndDatetimeToTask(Task& convertedTask){
	try{
		if (_taskDatetimeString == NOT_A_DATETIME){
			convertedTask.setTaskEndTime(not_a_date_time); 
		} else {
			ptime taskEndTime(from_iso_string(_taskDatetimeString));
			convertedTask.setTaskEndTime(taskEndTime);
		}
	}
	catch(const out_of_range&){
		compileErrorMessage(STORAGE_FUNCTION_CONVERT_PTIME_END,STORAGE_MSG_PTIME_END_ERROR);
		logErrorMessage(_logErrorMessage);
		throw;
	}
	
}
//similar to convertStringToPtime, introduced for SLAP
void StorageConverter::convertStringDeadlineToTask(Task& convertedTask){
	try{
		if (_taskDatetimeString == NOT_A_DATETIME){
			convertedTask.setTaskDeadline(not_a_date_time); 
		} else {
			ptime taskDeadline(from_iso_string(_taskDatetimeString));
			convertedTask.setTaskDeadline(taskDeadline);
		}
		return;
	} catch(...){
		compileErrorMessage(STORAGE_FUNCTION_CONVERT_PTIME_DEADLINE,STORAGE_MSG_PTIME_DEADLINE_ERROR);
		logErrorMessage(_logErrorMessage);
		throw;
	}
	
}
//converts a Datetime string into a ptime object
//function throws exception if conversion is not successful
void StorageConverter::convertStringStartDatetimeToTask(Task& convertedTask){

	try{
		if (_taskDatetimeString == NOT_A_DATETIME){
			convertedTask.setTaskStartTime(not_a_date_time); 
		} else {
			ptime taskStartTime(from_iso_string(_taskDatetimeString));
			convertedTask.setTaskStartTime(taskStartTime);
		}
	}
	catch(exception&){
		compileErrorMessage(STORAGE_FUNCTION_CONVERT_PTIME_START, STORAGE_MSG_PTIME_START_ERROR);
		logErrorMessage(_logErrorMessage);
		throw;
	}
	return; 
}