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() {
|
void Daemon::Remote::run() {
|
||||||
switch (action) {
|
|
||||||
case CopyFiles: ft.send(_fl); break;
|
|
||||||
case RemoveFiles:
|
|
||||||
{
|
|
||||||
PIDir d(dir_my);
|
PIDir d(dir_my);
|
||||||
|
switch (action) {
|
||||||
|
case CopyFiles:
|
||||||
|
ft.send(_fl);
|
||||||
|
break;
|
||||||
|
case RemoveFiles:
|
||||||
::removeFiles(d, _fl);
|
::removeFiles(d, _fl);
|
||||||
|
updateDirEntries();
|
||||||
removeFinished(name(), d.absolutePath());
|
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;
|
break;
|
||||||
default: 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() {
|
Daemon::TileFileProgress::TileFileProgress(): PIScreenTile() {
|
||||||
size_policy = PIScreenTypes::Fixed;
|
size_policy = PIScreenTypes::Fixed;
|
||||||
@@ -147,11 +163,13 @@ void Daemon::TileFileProgress::show(PIFileTransfer * f) {
|
|||||||
|
|
||||||
|
|
||||||
void Daemon::TileFileProgress::close(bool ok) {
|
void Daemon::TileFileProgress::close(bool ok) {
|
||||||
|
buttons->content[0].first = "Pause";
|
||||||
ft = 0;
|
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) {
|
void Daemon::fmKeyEvent(PIKbdListener::KeyEvent key) {
|
||||||
PIByteArray ba;
|
|
||||||
PIMutexLocker ml(remote_mutex);
|
PIMutexLocker ml(remote_mutex);
|
||||||
//Remote * r = remotes.value(conn_name);
|
//Remote * r = remotes.value(conn_name);
|
||||||
//piCout << key.key << key.modifiers;
|
//piCout << key.key << key.modifiers;
|
||||||
@@ -449,10 +466,11 @@ void Daemon::peerConnected(const PIString & name) {
|
|||||||
if (!name.startsWith(pisd_prefix)) return;
|
if (!name.startsWith(pisd_prefix)) return;
|
||||||
Remote * r = new Remote(name);
|
Remote * r = new Remote(name);
|
||||||
CONNECTU(r, sendRequest, this, sendRequest)
|
CONNECTU(r, sendRequest, this, sendRequest)
|
||||||
CONNECTU(r, receiveFinished, this, filesReceived)
|
CONNECTU(r, receiveFinished, this, filesRreceived)
|
||||||
CONNECTU(r, receiveFinished, this, closeFileDialog)
|
CONNECTU(r, receiveFinished, this, closeFileDialog)
|
||||||
CONNECTU(r, sendFinished, this, closeFileDialog)
|
CONNECTU(r, sendFinished, this, closeFileDialog)
|
||||||
CONNECTU(r, removeFinished, this, filesRemoved)
|
CONNECTU(r, removeFinished, this, filesRemoved)
|
||||||
|
CONNECTU(r, changeDirFinished, this, dirChanged)
|
||||||
PIMutexLocker ml(remote_mutex);
|
PIMutexLocker ml(remote_mutex);
|
||||||
remotes.insert(name, r);
|
remotes.insert(name, r);
|
||||||
}
|
}
|
||||||
@@ -474,7 +492,19 @@ void Daemon::peerDisconnected(const PIString & name) {
|
|||||||
|
|
||||||
|
|
||||||
void Daemon::filesReceived(const PIString & name, bool ok) {
|
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;
|
//piCout << "CLOSE" << tile_file_progress->conn_name << name << ok;
|
||||||
if (tile_file_progress->conn_name != name) return;
|
if (tile_file_progress->conn_name != name) return;
|
||||||
tile_file_progress->close(ok);
|
tile_file_progress->close(ok);
|
||||||
if (ok) {
|
// if (ok) {
|
||||||
if (tile_file_progress->rec) {
|
if (tile_file_progress->rec) {
|
||||||
fm.remoteTile()->setFocus();
|
fm.remoteTile()->setFocus();
|
||||||
fm.clearSelectionRemote();
|
fm.clearSelectionRemote();
|
||||||
@@ -501,7 +531,7 @@ void Daemon::closeFileDialog(const PIString & name, bool ok) {
|
|||||||
fm.clearSelectionLocal();
|
fm.clearSelectionLocal();
|
||||||
requestChDir(".");
|
requestChDir(".");
|
||||||
}
|
}
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -526,7 +556,8 @@ void Daemon::dataReceived(const PIString & from, const PIByteArray & data) {
|
|||||||
r->ft.setDirectory(r->dir_my);
|
r->ft.setDirectory(r->dir_my);
|
||||||
//piCout << "store to" << r->dir_my.absolutePath();
|
//piCout << "store to" << r->dir_my.absolutePath();
|
||||||
//piCout << "cd to" << dir << ", abs =" << r->dir_my.absolutePath();
|
//piCout << "cd to" << dir << ", abs =" << r->dir_my.absolutePath();
|
||||||
sendDirToRemote(r);
|
r->updateDir();
|
||||||
|
// sendDirToRemote(r);
|
||||||
break;
|
break;
|
||||||
case ReplyHostInfo:
|
case ReplyHostInfo:
|
||||||
ba >> info_other;
|
ba >> info_other;
|
||||||
@@ -538,7 +569,7 @@ void Daemon::dataReceived(const PIString & from, const PIByteArray & data) {
|
|||||||
{
|
{
|
||||||
PIVector<PIFile::FileInfo> fil;
|
PIVector<PIFile::FileInfo> fil;
|
||||||
ba >> dir >> fil;
|
ba >> dir >> fil;
|
||||||
r->dir_remote.setDir(dir);
|
// r->dir_remote.setDir(dir);
|
||||||
fm.setRemoteDir(dir);
|
fm.setRemoteDir(dir);
|
||||||
fm.setRemoteContent(fil);
|
fm.setRemoteContent(fil);
|
||||||
fm.remoteRestoreDir();
|
fm.remoteRestoreDir();
|
||||||
@@ -571,8 +602,7 @@ void Daemon::dataReceived(const PIString & from, const PIByteArray & data) {
|
|||||||
PIString dn;
|
PIString dn;
|
||||||
ba >> dn;
|
ba >> dn;
|
||||||
//piCout << "send" << files << "from" << r->dir_my.absolutePath();
|
//piCout << "send" << files << "from" << r->dir_my.absolutePath();
|
||||||
PIDir::make(r->dir_my.absolutePath() + PIDir::separator + dn);
|
r->makeDir(dn);
|
||||||
sendDirToRemote(r);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case FileTransfer:
|
case FileTransfer:
|
||||||
@@ -585,9 +615,7 @@ void Daemon::dataReceived(const PIString & from, const PIByteArray & data) {
|
|||||||
|
|
||||||
void Daemon::sendDirToRemote(Remote * r) {
|
void Daemon::sendDirToRemote(Remote * r) {
|
||||||
if (!r) return;
|
if (!r) return;
|
||||||
PIVector<PIFile::FileInfo> fil = r->dir_my.entries();
|
PIVector<PIFile::FileInfo> fil = r->my_filelist;
|
||||||
piForeach (PIFile::FileInfo & f, fil)
|
|
||||||
f.path = f.name();
|
|
||||||
PIByteArray ba;
|
PIByteArray ba;
|
||||||
ba << int(ReplyChangeDir) << r->dir_my.absolutePath() << fil;
|
ba << int(ReplyChangeDir) << r->dir_my.absolutePath() << fil;
|
||||||
send(r->name(), ba);
|
send(r->name(), ba);
|
||||||
|
|||||||
@@ -80,6 +80,8 @@ private:
|
|||||||
~Remote();
|
~Remote();
|
||||||
void sendFiles(const PIString & dir, const PIStringList & fl) {startAction(Daemon::CopyFiles, dir, fl);}
|
void sendFiles(const PIString & dir, const PIStringList & fl) {startAction(Daemon::CopyFiles, dir, fl);}
|
||||||
void removeFiles(const PIStringList & fl) {startAction(Daemon::RemoveFiles, PIString(), 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, 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, ftReceived, bool, ok) {receiveFinished(name(), ok);}
|
||||||
EVENT_HANDLER1(void, ftSended, bool, ok) {sendFinished(name(), ok);}
|
EVENT_HANDLER1(void, ftSended, bool, ok) {sendFinished(name(), ok);}
|
||||||
@@ -88,15 +90,20 @@ private:
|
|||||||
EVENT2(receiveFinished, const PIString & , name, bool, ok)
|
EVENT2(receiveFinished, const PIString & , name, bool, ok)
|
||||||
EVENT2(sendFinished, const PIString & , name, bool, ok)
|
EVENT2(sendFinished, const PIString & , name, bool, ok)
|
||||||
EVENT2(removeFinished, const PIString & , name, const PIString & , dir)
|
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);}
|
EVENT_HANDLER1(void, received, const PIByteArray & , data) {ft.received(data);}
|
||||||
|
|
||||||
void startAction(PacketType a, const PIString & dir, const PIStringList & fl);
|
void startAction(PacketType a, const PIString & dir, const PIStringList & fl);
|
||||||
void run();
|
void run();
|
||||||
|
|
||||||
PIDir dir_my, dir_remote;
|
PIDir dir_my;
|
||||||
|
PIVector<PIFile::FileInfo> my_filelist;
|
||||||
PIFileTransfer ft;
|
PIFileTransfer ft;
|
||||||
PIStringList _fl;
|
PIStringList _fl;
|
||||||
PacketType action;
|
PacketType action;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void updateDirEntries();
|
||||||
};
|
};
|
||||||
|
|
||||||
class TileFileProgress: public PIScreenTile {
|
class TileFileProgress: public PIScreenTile {
|
||||||
@@ -126,6 +133,7 @@ private:
|
|||||||
EVENT_HANDLER2(void, timerEvent, void * , _d, int, delim);
|
EVENT_HANDLER2(void, timerEvent, void * , _d, int, delim);
|
||||||
EVENT_HANDLER2(void, filesReceived, const PIString & , name, bool, ok);
|
EVENT_HANDLER2(void, filesReceived, const PIString & , name, bool, ok);
|
||||||
EVENT_HANDLER2(void, filesRemoved, const PIString & , name, const PIString & , dir);
|
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_HANDLER2(void, closeFileDialog, const PIString & , name, bool, ok);
|
||||||
EVENT(menuRequest)
|
EVENT(menuRequest)
|
||||||
void hideAll();
|
void hideAll();
|
||||||
|
|||||||
@@ -38,6 +38,11 @@ bool FileManager::TileDir::keyEvent(PIKbdListener::KeyEvent key) {
|
|||||||
actionRequest(remote, Copy, selectedNames());
|
actionRequest(remote, Copy, selectedNames());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case PIKbdListener::F6:
|
||||||
|
if (key.modifiers[PIKbdListener::Shift]) {
|
||||||
|
askQuestion("Crypt selected files?");
|
||||||
|
}
|
||||||
|
break;
|
||||||
case PIKbdListener::F7:
|
case PIKbdListener::F7:
|
||||||
nd = askNewDir();
|
nd = askNewDir();
|
||||||
setFocus();
|
setFocus();
|
||||||
@@ -121,7 +126,7 @@ void FileManager::TileDir::showReading() {
|
|||||||
|
|
||||||
void FileManager::TileDir::setContent(const PIVector<PIFile::FileInfo> & l) {
|
void FileManager::TileDir::setContent(const PIVector<PIFile::FileInfo> & l) {
|
||||||
PIMutexLocker ml(e_mutex);
|
PIMutexLocker ml(e_mutex);
|
||||||
PIVector<PIFile::FileInfo> el = dir.entries(), fl, dl;
|
PIVector<PIFile::FileInfo> fl, dl;
|
||||||
entries.clear();
|
entries.clear();
|
||||||
if (l.isEmpty()) {
|
if (l.isEmpty()) {
|
||||||
PIFile::FileInfo fi;
|
PIFile::FileInfo fi;
|
||||||
@@ -326,108 +331,5 @@ void FileManager::keyEvent(PIKbdListener::KeyEvent key) {
|
|||||||
break;
|
break;
|
||||||
default: 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);
|
EVENT_HANDLER1(void, keyEvent, PIKbdListener::KeyEvent, key);
|
||||||
EVENT1(tileKey, PIKbdListener::KeyEvent, key)
|
EVENT1(tileKey, PIKbdListener::KeyEvent, key)
|
||||||
static void tileKey_s(void * fm, PIKbdListener::KeyEvent key) {((FileManager*)fm)->tileKey(key);}
|
static void tileKey_s(void * fm, PIKbdListener::KeyEvent key) {((FileManager*)fm)->tileKey(key);}
|
||||||
void updateConsole();
|
|
||||||
|
|
||||||
bool del_commit;
|
bool del_commit;
|
||||||
TileDir * panels[2];
|
TileDir * panels[2];
|
||||||
|
|||||||
@@ -237,6 +237,10 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
EVENT_HANDLER1(void, keyEvent, PIKbdListener::KeyEvent, e) {
|
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 (screen.dialogTile()) return;
|
||||||
if (tpeer->visible || tinfo->visible || tpeerdiag->visible)
|
if (tpeer->visible || tinfo->visible || tpeerdiag->visible)
|
||||||
if (e.key == PIKbdListener::Esc) menuRequest();
|
if (e.key == PIKbdListener::Esc) menuRequest();
|
||||||
|
|||||||
Reference in New Issue
Block a user