void FoldersReply::parseData(const QByteArray& data)
{
    emit folderListing(mParser.parseFolderList(data), false);
}
void FoldersReply::networkError()
{
    emit folderListing(QPair<QList<Folder>, QList<Recording> >(), true);
}
Example #3
0
/**
* GetFtpDirectory
*
* Description: 1) Conect to ftp server, change directory. 
*	2) Get dir listing.
*	3) Read existing listing file, 
*	4) If listing has changed, write new dir listing file.
*
* Parameters:	CConnection - describes ftp connection info, user, host etc.
*				dir - ftp remote directory
*				ftpClient - optional ftpclient. if null, will create, connect and close.
* Return:
*				bool - success
* ??? was it updated?
*/
bool CFtpManager::GetFtpDirectory(CConnection * con, CString &directory, CRealFtpClient * ftpClient)
{
	bool result = false;
	//TRACE1(" con %s \n ", con->name);

	//Connect(con, m_ftpClient);
	//if(!m_ftpClient.IsConnected()) // Not connected
	//{
	//	return;
	//}
	bool closeConnection = false;
	if(!ftpClient)
	{
		ftpClient = new CRealFtpClient();
		closeConnection = true;
	}
	if(!ftpClient->IsConnected()) // Not connected
	{
		int retcode = 11;
		retcode = ftpClient->FTPConnect(con->host, con->user, con->password, _T(""));
		if(retcode == UTE_SUCCESS)
		{
			ftpClient->SetFireWallMode(TRUE);
		}
	}

	//m_ftpClient.SetFireWallMode(TRUE);
	//ftpClient->SetFireWallMode(TRUE);

	CString localStorePath;
	GetLocalStorePath(con, localStorePath);
	localStorePath = localStorePath + directory + CString(_T(""));
	localStorePath.Replace('/', '\\');

	CString dirContentListing(_T(""));
	CString fileListing(_T(""));
	CString folderListing(_T(""));

	CUT_DIRINFO di;
	_TCHAR entry[HISTORY_ENTRY_SIZE];
	_TCHAR dir[MAX_PATH];
	int valRet;
	{
		valRet = ftpClient->ChDir( directory );
		if (valRet != UTE_SUCCESS){
			//m_history.AddLine(CUT_ERR::GetErrorString (valRet));
			TRACE1(" chdir failed: %s \n ", CUT_ERR::GetErrorString(valRet) );
		}
		else 
		{
			int dirInfo = ftpClient->GetDirInfo();

			int count = ftpClient->GetDirInfoCount();
			for(int t=0;t<count;t++){
				ftpClient->GetDirEntry(t, &di);
				// v4.2 dir info now has _TCHAR
				// Format: Name,size,time, time display
				_sntprintf(entry, 
					sizeof(entry)/sizeof(_TCHAR), 
					_T("<n>%s</n><s>%ld</s><d>%2.2d/%2.2d/%2.2d %2.2d:%2.2d</d><p>%d</p><o>%s</o><g>%s</g>"),
					di.fileName, di.fileSize,
					di.year, di.month, di.day, di.hour, di.minute, di.permissions, di.owner, di.group);
					
				//m_history.AddLine(entry);

				if(di.isDir)
				{
					CString folderPath(localStorePath + _T("") + di.fileName );
					if(GetFileAttributes(folderPath) == INVALID_FILE_ATTRIBUTES){
						CreateDirectory(folderPath, NULL);
					}

					CString fileInfo(_T(""));
					fileInfo = fileInfo + CString(_T("<t>d</t>")) + CString(entry) + _T("\n");
					folderListing = folderListing + fileInfo;
				} else {
					// File
					CString fileInfo(_T(""));
					fileInfo = fileInfo + CString(_T("<t>f</t>")) + CString(entry) + _T("\n");
					fileListing = fileListing + fileInfo;
				}
			}
			dirContentListing = CString(folderListing + fileListing);

			
			// write dir descriptor
			// dirContentListing
			CString dirContentFile(localStorePath + _T(".files.rftp"));


			// Check existing files.rftp. Don't rewrite if its the same. SSD safety.
			CString existingListing(_T(""));
			CFileStatus status;
			if(CFile::GetStatus(dirContentFile, status))
			{
				CStdioFile file (dirContentFile, CStdioFile::modeRead | CFile::shareDenyNone);
				CString buffer;
				while (file.ReadString(buffer))
				{
					existingListing = existingListing + buffer + _T("\n");
				}
			}

			
			if(existingListing.Compare(dirContentListing) != 0)
			{
				CFile theFile(dirContentFile, CFile::modeReadWrite | CFile::modeCreate);
				
				char buffer[200000];
				sprintf(buffer, "%S", dirContentListing); // CString to char *
				int len = strlen(buffer);
				//theFile.Write( (LPCTSTR) dirContentListing, dirContentListing.GetLength() * sizeof(TCHAR));
				
				//
				// Error here ***********
				//
				CString buffy(dirContentFile);
				if(buffy.Find(CString(_T("newsletter-form"))) != 1){
					int i  = 0;
				}

				theFile.Write(buffer, len);

				TRACE0(" GetFtpDirectory Updated \n");
				m_directoryUpdated = true;  
			} else {
				//TRACE0(" GetFtpDirectory Allready up to date \n");
				m_directoryUpdated = false;
			}

			//TRACE1(" file: %s \n", entry);
			result = true;
		} // chdir success		
	}
	if(closeConnection){
		ftpClient->Close();
		delete ftpClient;
	}
	return result;
}