git-svn-id: svn://db.shs.com.ru/pip@228 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -80,6 +80,8 @@ private:
|
||||
~Remote();
|
||||
void sendFiles(const PIString & dir, const PIStringList & fl) {startAction(Daemon::CopyFiles, dir, fl);}
|
||||
void removeFiles(const PIStringList & fl) {startAction(Daemon::RemoveFiles, PIString(), fl);}
|
||||
void updateDir() {startAction(Daemon::RequestChangeDir, PIString(), PIStringList());}
|
||||
void makeDir(const PIString & dir) {startAction(Daemon::MkDir, dir, PIStringList() << "");}
|
||||
EVENT_HANDLER1(void, ftSendRequest, PIByteArray &, data) {PIByteArray h; h << int(FileTransfer); data.insert(0, h); sendRequest(name(), data);}
|
||||
EVENT_HANDLER1(void, ftReceived, bool, ok) {receiveFinished(name(), ok);}
|
||||
EVENT_HANDLER1(void, ftSended, bool, ok) {sendFinished(name(), ok);}
|
||||
@@ -88,15 +90,20 @@ private:
|
||||
EVENT2(receiveFinished, const PIString & , name, bool, ok)
|
||||
EVENT2(sendFinished, const PIString & , name, bool, ok)
|
||||
EVENT2(removeFinished, const PIString & , name, const PIString & , dir)
|
||||
EVENT2(changeDirFinished, const PIString & , name, const PIString & , dir)
|
||||
EVENT_HANDLER1(void, received, const PIByteArray & , data) {ft.received(data);}
|
||||
|
||||
void startAction(PacketType a, const PIString & dir, const PIStringList & fl);
|
||||
void run();
|
||||
|
||||
PIDir dir_my, dir_remote;
|
||||
PIDir dir_my;
|
||||
PIVector<PIFile::FileInfo> my_filelist;
|
||||
PIFileTransfer ft;
|
||||
PIStringList _fl;
|
||||
PacketType action;
|
||||
|
||||
private:
|
||||
void updateDirEntries();
|
||||
};
|
||||
|
||||
class TileFileProgress: public PIScreenTile {
|
||||
@@ -126,6 +133,7 @@ private:
|
||||
EVENT_HANDLER2(void, timerEvent, void * , _d, int, delim);
|
||||
EVENT_HANDLER2(void, filesReceived, const PIString & , name, bool, ok);
|
||||
EVENT_HANDLER2(void, filesRemoved, const PIString & , name, const PIString & , dir);
|
||||
EVENT_HANDLER2(void, dirChanged, const PIString & , name, const PIString & , dir);
|
||||
EVENT_HANDLER2(void, closeFileDialog, const PIString & , name, bool, ok);
|
||||
EVENT(menuRequest)
|
||||
void hideAll();
|
||||
|
||||
@@ -38,6 +38,11 @@ bool FileManager::TileDir::keyEvent(PIKbdListener::KeyEvent key) {
|
||||
actionRequest(remote, Copy, selectedNames());
|
||||
}
|
||||
break;
|
||||
case PIKbdListener::F6:
|
||||
if (key.modifiers[PIKbdListener::Shift]) {
|
||||
askQuestion("Crypt selected files?");
|
||||
}
|
||||
break;
|
||||
case PIKbdListener::F7:
|
||||
nd = askNewDir();
|
||||
setFocus();
|
||||
@@ -121,7 +126,7 @@ void FileManager::TileDir::showReading() {
|
||||
|
||||
void FileManager::TileDir::setContent(const PIVector<PIFile::FileInfo> & l) {
|
||||
PIMutexLocker ml(e_mutex);
|
||||
PIVector<PIFile::FileInfo> el = dir.entries(), fl, dl;
|
||||
PIVector<PIFile::FileInfo> fl, dl;
|
||||
entries.clear();
|
||||
if (l.isEmpty()) {
|
||||
PIFile::FileInfo fi;
|
||||
@@ -326,108 +331,5 @@ void FileManager::keyEvent(PIKbdListener::KeyEvent key) {
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
/*if (!enabled) return;
|
||||
if (key.key == 'D') {
|
||||
if (cur >= files.size_s() || cur < 0) return;
|
||||
if (del_commit) {
|
||||
piForeachC (PIString & f, selected) {
|
||||
PIFile::remove(dir.absolutePath() + PIDir::separator + f);
|
||||
//piCout << "remove" << (dir.absolutePath() + PIDir::separator + f);
|
||||
}
|
||||
selected.clear();
|
||||
updateDir();
|
||||
console.clearCustomStatus();
|
||||
del_commit = false;
|
||||
} else {
|
||||
if (selected.isEmpty()) selected << files[cur].path;
|
||||
console.addCustomStatus("Delete " + PIString(selected.size_s()) + " file, are you sure? D as yes");
|
||||
del_commit = true;
|
||||
}
|
||||
updateConsole();
|
||||
return;
|
||||
}
|
||||
console.clearCustomStatus();
|
||||
del_commit = false;
|
||||
PIStringList nsel;
|
||||
switch (key.key) {
|
||||
case PIKbdListener::UpArrow:
|
||||
cur--;
|
||||
if (cur < 0) cur = 0;
|
||||
if (cur - offset < 3) offset--;
|
||||
if (offset < 0) offset = 0;
|
||||
updateConsole();
|
||||
break;
|
||||
case PIKbdListener::Space:
|
||||
if (cur < 0 || cur >= files.size_s()) return;
|
||||
if (selected.contains(files[cur].path)) selected.removeOne(files[cur].path);
|
||||
else selected << files[cur].path;
|
||||
case PIKbdListener::DownArrow:
|
||||
cur++;
|
||||
if (cur >= files.size_s()) cur = files.size_s() - 1;
|
||||
if (cur - offset >= height - 3) offset++;
|
||||
if (offset >= files.size_s() - height) offset = files.size_s() - height;
|
||||
updateConsole();
|
||||
//piCout << offset << files.size_s() << height;
|
||||
break;
|
||||
case PIKbdListener::Home:
|
||||
cur = offset = 0;
|
||||
updateConsole();
|
||||
break;
|
||||
case PIKbdListener::End:
|
||||
cur = files.size_s() - 1;
|
||||
offset = files.size_s() - height;
|
||||
updateConsole();
|
||||
//piCout << offset << files.size_s() << height;
|
||||
break;
|
||||
case PIKbdListener::Return:
|
||||
if (cur < files.size_s() && cur >= 0) {
|
||||
piCout << files[cur];
|
||||
if (files[cur].isDir()) {
|
||||
prev_pos[dir.path()] = cur;
|
||||
prev_off[dir.path()] = offset;
|
||||
dir.cd(files[cur].name());
|
||||
cur = prev_pos.value(dir.path(), 0);
|
||||
offset = prev_off.value(dir.path(), 0);
|
||||
selected.clear();
|
||||
updateDir();
|
||||
updateConsole();
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'A':
|
||||
selected.clear();
|
||||
piForeach (PIFile::FileInfo & e, files)
|
||||
selected << e.path;
|
||||
updateConsole();
|
||||
break;
|
||||
case 'R':
|
||||
updateDir();
|
||||
piForeach (PIFile::FileInfo & e, files)
|
||||
if (selected.contains(e.path))
|
||||
nsel << e.path;
|
||||
selected = nsel;
|
||||
updateConsole();
|
||||
break;
|
||||
case PIKbdListener::Esc:
|
||||
//selected.clear();
|
||||
//updateConsole();
|
||||
menuRequest();
|
||||
break;
|
||||
default: break;
|
||||
}*/
|
||||
}
|
||||
|
||||
|
||||
void FileManager::updateConsole() {
|
||||
/*if (!enabled) return;
|
||||
startTab(2);
|
||||
console.addString("File manager", 1, Yellow | Inverse);
|
||||
console.addString("Path: " + dir.absolutePath(), 1, Green | Inverse | Bold);
|
||||
console.addString("Name", 1, Green | Inverse | Bold);
|
||||
console.addString(" ", 2, Yellow | Inverse);
|
||||
console.addString(" ", 2, Green | Inverse);
|
||||
console.addString(" ", 2, Green | Inverse);
|
||||
buildNames();
|
||||
console.addString("A - select all, D - remove, R - refresh, Esc - exit", 1, Green | Inverse | Bold);
|
||||
finishTab();*/
|
||||
}
|
||||
|
||||
@@ -63,7 +63,6 @@ private:
|
||||
EVENT_HANDLER1(void, keyEvent, PIKbdListener::KeyEvent, key);
|
||||
EVENT1(tileKey, PIKbdListener::KeyEvent, key)
|
||||
static void tileKey_s(void * fm, PIKbdListener::KeyEvent key) {((FileManager*)fm)->tileKey(key);}
|
||||
void updateConsole();
|
||||
|
||||
bool del_commit;
|
||||
TileDir * panels[2];
|
||||
|
||||
@@ -237,6 +237,10 @@ public:
|
||||
}
|
||||
}
|
||||
EVENT_HANDLER1(void, keyEvent, PIKbdListener::KeyEvent, e) {
|
||||
if (e.key == PIKbdListener::Esc && e.modifiers[PIKbdListener::Shift]) {
|
||||
PIKbdListener::exiting = true;
|
||||
return;
|
||||
}
|
||||
if (screen.dialogTile()) return;
|
||||
if (tpeer->visible || tinfo->visible || tpeerdiag->visible)
|
||||
if (e.key == PIKbdListener::Esc) menuRequest();
|
||||
|
||||
Reference in New Issue
Block a user