bool ProjectFile::SaveFile()
{
	FileModified();
	QString projectText = toString(5);
	QTextStream fileOut(&projectFile);
	fileOut << projectText;
	projectFile.close();
	return true;
}
bool ProjectFile::ReadFile()
{

	if (!setContent(&projectFile))
	{
		WarnFileError("Error setting project data");
		projectFile.close();
		return false;
	}

	FileModified();
	return true;
}
Beispiel #3
0
BOOL CCheckFileNotificationsThread::RunningProcNew()
{
	FnDebugMessage("FN: RunningProcNew started");
	
	// Delete this when this functions ends
	CAutoPtr<CCheckFileNotificationsThread> thisPtr=this;

	// Creating handles
	if (!CreateHandlesNew())
		return FALSE;
	
	
	DWORD dwOut;

	for (;;)
	{
		FnDebugMessage("FN goes to sleep");
		InterlockedExchange(&m_lState,sWaiting);
		DWORD nRet=WaitForMultipleObjects(m_nHandles,m_pEventHandles,FALSE,INFINITE);
		InterlockedExchange(&m_lState,sProcessing);
		FnDebugMessage1("FN waked nRet=%X",nRet);


		if (nRet==WAIT_OBJECT_0) 
		{
			// First event signalled, this event is for stopping
			// So do nothing here and exit
			FnDebugMessage("FN stopping event signalled, exiting");
			break;
		}
		else if (nRet>WAIT_OBJECT_0 && nRet<WAIT_OBJECT_0+m_nHandles)
		{
			CLocateDlg* pLocateDlg=GetLocateDlg();
			
            // Locate dialog is also closed, stopping this process
			if (pLocateDlg==NULL)
				break;

			
			DIRCHANGEDATA* pChangeData=m_pDirDatas[nRet-WAIT_OBJECT_0];
			
			// Asking changes
			if (!pLocateDlg->IsLocating()) // if locating in process, do nothing
			{
				if (GetOverlappedResult(pChangeData->hDirHandle,&pChangeData->ol,&dwOut,FALSE))
				{
					// If GetOverlappedResults took so long that Stop() has given during this time
					// stop right now
					if (m_lFlags&fwStopWhenPossible)
						break;
					
					while (pLocateDlg->m_pBackgroundUpdater!=NULL &&
						!pLocateDlg->m_pBackgroundUpdater->m_lIsWaiting)
						Sleep(200);
					
					
					if (dwOut==0)
						UpdateItemsInRoot(pChangeData->pRoot,pLocateDlg);
					else
					{
						FILE_NOTIFY_INFORMATION* pStruct=(FILE_NOTIFY_INFORMATION*)pChangeData->pBuffer;
						while (1)
						{
							// Check stop state again
							if (m_lFlags&fwStopWhenPossible)
								break;

							DWORD dwLength=pStruct->FileNameLength/2;

							// Skip log files
							BOOL bSkipThisFile=FALSE;
							int nFilePart;
							for (nFilePart=dwLength-1;nFilePart>=0 && pStruct->FileName[nFilePart]!=L'\\';nFilePart--);
							nFilePart++;

							// Skipping ntuser.dat.log file
							if (dwLength-nFilePart==14)
							{
								if (_wcsnicmp(pStruct->FileName+nFilePart,L"ntuser.dat.log",14)==0)
									bSkipThisFile=TRUE;
							}

#ifdef _DEBUG
							// Skipping HFCDebug.log
							if (dwLength-nFilePart==12)
							{
								if (_wcsnicmp(pStruct->FileName+nFilePart,L"HFCDebug.log",12)==0)
									bSkipThisFile=TRUE;
							}
#endif

							if (!bSkipThisFile)
							{
								m_pFile=new WCHAR[pChangeData->dwRootLength+dwLength+2];
								MemCopyW(m_pFile,pChangeData->pRoot,pChangeData->dwRootLength);
								MemCopyW(m_pFile+pChangeData->dwRootLength,pStruct->FileName,dwLength);
								dwLength+=pChangeData->dwRootLength;
								m_pFile[dwLength]='\0';
								MakeLower(m_pFile);

								
								//DebugFormatMessage("BN: file=%S action=%d",m_pFile,pStruct->Action);

								switch(pStruct->Action)
								{
								case FILE_ACTION_ADDED:
								case FILE_ACTION_RENAMED_NEW_NAME:
									FileCreated(m_pFile,dwLength,pLocateDlg);
									break;
								case FILE_ACTION_REMOVED:
								case FILE_ACTION_RENAMED_OLD_NAME:
									FileDeleted(m_pFile,dwLength,pLocateDlg);
									break;
								case FILE_ACTION_MODIFIED:
									FileModified(m_pFile,dwLength,pLocateDlg);
									break;
								}
								
								delete[] m_pFile;
								m_pFile=NULL;
							}

							if (pStruct->NextEntryOffset==0)
								break;
							*((char**)&pStruct)+=pStruct->NextEntryOffset;

							
						}		
					}
				}
			}
			
			// Check this again 
			if (m_lFlags&fwStopWhenPossible)
				break;

			
			// Coing to listen changes
			FnDebugMessage("FN: going to listen changes");
			BOOL bRet=m_pReadDirectoryChangesW(pChangeData->hDirHandle,pChangeData->pBuffer,CHANGE_BUFFER_LEN,TRUE,
				FILE_NOTIFY_CHANGE_FILE_NAME|FILE_NOTIFY_CHANGE_DIR_NAME|
				FILE_NOTIFY_CHANGE_ATTRIBUTES|FILE_NOTIFY_CHANGE_SIZE|FILE_NOTIFY_CHANGE_LAST_WRITE|
				FILE_NOTIFY_CHANGE_CREATION|FILE_NOTIFY_CHANGE_SECURITY,
				&dwOut,&pChangeData->ol,NULL);
			FnDebugMessage("FN: m_pReadDirectoryChangesW returned");
			

			if (!bRet)
			{
				// ReadDirectoryChangesW failed, reset event manually
				FnDebugMessage("FN: ReadDirectoryChangesW failed");
				ResetEvent(pChangeData->ol.hEvent);
			}


			// Finally, before going to sleep, check that shell we continue
			if (m_lFlags&fwStopWhenPossible)
				break;

		}
	}


	InterlockedExchange(&m_lState,sStopping);

	FnDebugMessage("FN RunningProcNew ends");
	return FALSE;
}
ProjectFile::ProjectFile()
{
	FileModified();
}