git-svn-id: svn://db.shs.com.ru/pip@228 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5

This commit is contained in:
2016-08-18 08:12:43 +00:00
parent 9480d209b4
commit 2ff58602fe
5 changed files with 71 additions and 130 deletions

View File

@@ -35,20 +35,36 @@ void Daemon::Remote::startAction(Daemon::PacketType a, const PIString & dir, con
void Daemon::Remote::run() {
PIDir d(dir_my);
switch (action) {
case CopyFiles: ft.send(_fl); break;
case RemoveFiles:
{
PIDir d(dir_my);
::removeFiles(d, _fl);
removeFinished(name(), d.absolutePath());
}
case CopyFiles:
ft.send(_fl);
break;
default: break;
case RemoveFiles:
::removeFiles(d, _fl);
updateDirEntries();
removeFinished(name(), d.absolutePath());
break;
case RequestChangeDir:
updateDirEntries();
changeDirFinished(name(), d.absolutePath());
break;
case MkDir:
if (!_fl.isEmpty()) PIDir::make(d.absolutePath() + PIDir::separator + _fl.at(0));
updateDirEntries();
changeDirFinished(name(), d.absolutePath());
break;
default: break;
};
}
void Daemon::Remote::updateDirEntries() {
my_filelist = dir_my.entries();
piForeach (PIFile::FileInfo & f, my_filelist) f.path = f.name();
}
Daemon::TileFileProgress::TileFileProgress(): PIScreenTile() {
size_policy = PIScreenTypes::Fixed;
@@ -147,11 +163,13 @@ void Daemon::TileFileProgress::show(PIFileTransfer * f) {
void Daemon::TileFileProgress::close(bool ok) {
buttons->content[0].first = "Pause";
ft = 0;
if (!ok)
showInfo("Achtung! Alarm!! Error!!!");
else
::screen.setDialogTile(0);
::screen.setDialogTile(0);
if (!ok) {
piCout << "Achtung! Alarm!! Error!!!";
showInfo("Error while files transfer...");
}
}
@@ -335,7 +353,6 @@ void Daemon::keyEvent(PIKbdListener::KeyEvent key) {
void Daemon::fmKeyEvent(PIKbdListener::KeyEvent key) {
PIByteArray ba;
PIMutexLocker ml(remote_mutex);
//Remote * r = remotes.value(conn_name);
//piCout << key.key << key.modifiers;
@@ -449,10 +466,11 @@ void Daemon::peerConnected(const PIString & name) {
if (!name.startsWith(pisd_prefix)) return;
Remote * r = new Remote(name);
CONNECTU(r, sendRequest, this, sendRequest)
CONNECTU(r, receiveFinished, this, filesReceived)
CONNECTU(r, receiveFinished, this, filesRreceived)
CONNECTU(r, receiveFinished, this, closeFileDialog)
CONNECTU(r, sendFinished, this, closeFileDialog)
CONNECTU(r, removeFinished, this, filesRemoved)
CONNECTU(r, changeDirFinished, this, dirChanged)
PIMutexLocker ml(remote_mutex);
remotes.insert(name, r);
}
@@ -474,7 +492,19 @@ void Daemon::peerDisconnected(const PIString & name) {
void Daemon::filesReceived(const PIString & name, bool ok) {
PIMutexLocker ml(remote_mutex);
Remote * r = remotes.value(name, 0);
if (!r) return;
r->updateDir();
}
void Daemon::dirChanged(const PIString & name, const PIString & dir) {
PIMutexLocker ml(remote_mutex);
Remote * r = remotes.value(name, 0);
if (!r) return;
if (r->dir_my.absolutePath() != dir) return;
sendDirToRemote(r);
}
@@ -491,7 +521,7 @@ void Daemon::closeFileDialog(const PIString & name, bool ok) {
//piCout << "CLOSE" << tile_file_progress->conn_name << name << ok;
if (tile_file_progress->conn_name != name) return;
tile_file_progress->close(ok);
if (ok) {
// if (ok) {
if (tile_file_progress->rec) {
fm.remoteTile()->setFocus();
fm.clearSelectionRemote();
@@ -501,7 +531,7 @@ void Daemon::closeFileDialog(const PIString & name, bool ok) {
fm.clearSelectionLocal();
requestChDir(".");
}
}
// }
}
@@ -526,7 +556,8 @@ void Daemon::dataReceived(const PIString & from, const PIByteArray & data) {
r->ft.setDirectory(r->dir_my);
//piCout << "store to" << r->dir_my.absolutePath();
//piCout << "cd to" << dir << ", abs =" << r->dir_my.absolutePath();
sendDirToRemote(r);
r->updateDir();
// sendDirToRemote(r);
break;
case ReplyHostInfo:
ba >> info_other;
@@ -538,7 +569,7 @@ void Daemon::dataReceived(const PIString & from, const PIByteArray & data) {
{
PIVector<PIFile::FileInfo> fil;
ba >> dir >> fil;
r->dir_remote.setDir(dir);
// r->dir_remote.setDir(dir);
fm.setRemoteDir(dir);
fm.setRemoteContent(fil);
fm.remoteRestoreDir();
@@ -571,8 +602,7 @@ void Daemon::dataReceived(const PIString & from, const PIByteArray & data) {
PIString dn;
ba >> dn;
//piCout << "send" << files << "from" << r->dir_my.absolutePath();
PIDir::make(r->dir_my.absolutePath() + PIDir::separator + dn);
sendDirToRemote(r);
r->makeDir(dn);
}
break;
case FileTransfer:
@@ -585,9 +615,7 @@ void Daemon::dataReceived(const PIString & from, const PIByteArray & data) {
void Daemon::sendDirToRemote(Remote * r) {
if (!r) return;
PIVector<PIFile::FileInfo> fil = r->dir_my.entries();
piForeach (PIFile::FileInfo & f, fil)
f.path = f.name();
PIVector<PIFile::FileInfo> fil = r->my_filelist;
PIByteArray ba;
ba << int(ReplyChangeDir) << r->dir_my.absolutePath() << fil;
send(r->name(), ba);