#include <QFtp>
#include <QStatusBar>
#include <QTemporaryFile>
#include "FtpBrowser.h"
FtpBrowser::FtpBrowser(QStatusBar *status){
	ftp=0;
	file=0;
	this->status=status;
}
FtpBrowser::~FtpBrowser(){
	delete ftp;
}
void FtpBrowser::open(QString server, QString user, QString passwd, QString dir){
	status->showMessage(tr("Avan ühendust serverisse %1").arg(server));
	ftp = new QFtp(this);
	ftp->connectToHost(server);
	ftp->login(user, passwd);
	ftp->cd(dir);
	ftp->list();
	connect(ftp, SIGNAL(commandFinished(int, bool)),this, SLOT(command(int, bool)));
}
void FtpBrowser::command(int command, bool error){
	QFtp::Command c=ftp->currentCommand();
	if (c==QFtp::ConnectToHost) {
		if (error) {
			status->showMessage(tr("Serverisse ei saa ühenduda. Kontrolli serveri aadressi õigsust"));
			return;
		}
		status->showMessage(tr("Ühendatud serverisse"));
		return;
	}
	if (c==QFtp::Login){
		if (error){
			status->showMessage(tr("Serverisse logimine ebaõnnestus. Kontrolli kasutajanime ja salasõna õigsust"));
			return;
		}
		emit connected();
	}
	if (c==QFtp::Cd){
		if (error){
			status->showMessage(tr("Kataloogi vahetamine ebaõnnestus. Kontrolli kataloogi õigsust"));
			return;
		}
	}
	if (c==QFtp::Get) {
		if (error) {
			status->showMessage(tr("Faili tõmbamine katkestati: %1").arg(ftp->errorString()));
			file->close();
			file->remove();
		} else {
			status->showMessage(tr("Fail tõmmati töökataloogi"));
			file->close();
			emit(downloaded(file->fileName()));
		}
	}
	if (c==QFtp::Put) {
		if (error) {
			status->showMessage(tr("Faili saatmine katkestati"));
		} else {
			status->showMessage(tr("Fail saadeti serverisse"));
		}
	}
	if (c==QFtp::Remove) {
		if (error) {
			status->showMessage(tr("Faili eemaldamine katkestati: %1").arg(ftp->errorString()));
			emit removeStatus(false);
		} else {
			status->showMessage(tr("Fail eemaldati"));
			emit removeStatus(true);
		}
	}
}
void FtpBrowser::download(QString fileName){
	delete file;
	file = new QTemporaryFile();
	((QTemporaryFile*)file)->setAutoRemove(false);
	if (!file->open(QIODevice::WriteOnly)) {
		status->showMessage(tr("Ei saa salvestada faili %1: %2.").arg(fileName).arg(file->errorString()));
		delete file;
		return;
	}
	ftp->get(fileName, file);
	status->showMessage(tr("Tõmban faili %1").arg(fileName));
}
void FtpBrowser::upload(QString data, QString remoteFileName){
	ftp->put(data.toAscii(), remoteFileName);
	status->showMessage(tr("Saadan faili %1").arg(remoteFileName));
	ftp->list();
}
void FtpBrowser::remove(QString fileName){
	ftp->remove(fileName);
	status->showMessage(tr("Eemaldan faili %1...").arg(fileName));
	ftp->list();
}