PISD - mkdir, remove, copy to/from remote

git-svn-id: svn://db.shs.com.ru/pip@89 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
2015-04-09 12:28:26 +00:00
parent c567be27ff
commit b82453d845
4 changed files with 56 additions and 13 deletions

View File

@@ -294,7 +294,7 @@ PIVector<PIFile::FileInfo> PIDir::allEntries() {
if (de.name() == "." || de.name() == "..") continue; if (de.name() == "." || de.name() == "..") continue;
if (de.isSymbolicLink()) continue; /// TODO: resolve symlinks if (de.isSymbolicLink()) continue; /// TODO: resolve symlinks
if (de.isDir()) { if (de.isDir()) {
dirs.push_front(de); dirs << de;
ndirs << de.path; ndirs << de.path;
} else ret << de; } else ret << de;
} }

View File

@@ -297,7 +297,7 @@ void Daemon::keyEvent(PIKbdListener::KeyEvent key) {
void Daemon::fmKeyEvent(PIKbdListener::KeyEvent key) { void Daemon::fmKeyEvent(PIKbdListener::KeyEvent key) {
PIByteArray ba; PIByteArray ba;
//Remote * r = remotes.value(conn_name); //Remote * r = remotes.value(conn_name);
piCout << key.key << key.modifiers; //piCout << key.key << key.modifiers;
switch (key.key) { switch (key.key) {
case PIKbdListener::Return: case PIKbdListener::Return:
{ {
@@ -316,10 +316,10 @@ void Daemon::fmKeyEvent(PIKbdListener::KeyEvent key) {
void Daemon::fmActionRequest(bool remote_tile, FileManager::Action type, PIVariant data) { void Daemon::fmActionRequest(bool remote_tile, FileManager::Action type, PIVariant data) {
Remote * r = 0; Remote * r = 0;
switch (type) {
case FileManager::Copy:
r = remotes.value(conn_name, 0); r = remotes.value(conn_name, 0);
if (!r) return; if (!r) return;
switch (type) {
case FileManager::Copy:
if (remote_tile) { if (remote_tile) {
PIByteArray ba; PIByteArray ba;
ba << int(CopyFiles) << fm.selectedRemote(); ba << int(CopyFiles) << fm.selectedRemote();
@@ -333,9 +333,23 @@ void Daemon::fmActionRequest(bool remote_tile, FileManager::Action type, PIVaria
tile_file_progress->show(&(r->ft)); tile_file_progress->show(&(r->ft));
} }
break; break;
case FileManager::Remove:
if (remote_tile) {
PIByteArray ba;
ba << int(RemoveFiles) << fm.selectedRemote();
send(conn_name, ba);
}
break;
case FileManager::MkDir:
if (remote_tile) {
PIByteArray ba;
ba << int(MkDir) << data.toString();
send(conn_name, ba);
}
break;
default: break; default: break;
}; };
piCout << remote_tile << type << data; //piCout << remote_tile << type << data;
} }
@@ -420,7 +434,7 @@ void Daemon::filesReceived(const PIString & name, bool ok) {
void Daemon::closeFileDialog(const PIString & name, bool ok) { 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) {
@@ -444,6 +458,7 @@ void Daemon::dataReceived(const PIString & from, const PIByteArray & data) {
Remote * r(0); Remote * r(0);
PIString dir; PIString dir;
int type; ba >> type; int type; ba >> type;
bool answer_dirs = false;
//piCout << "rec from " << from << type; //piCout << "rec from " << from << type;
switch (type) { switch (type) {
case RequestHostInfo: case RequestHostInfo:
@@ -457,13 +472,8 @@ void Daemon::dataReceived(const PIString & from, const PIByteArray & data) {
r->dir_my.cd(dir); r->dir_my.cd(dir);
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();
{ answer_dirs = true;
PIVector<PIFile::FileInfo> fil = r->dir_my.entries();
piForeach (PIFile::FileInfo & f, fil)
f.path = f.name();
rba << int(ReplyChangeDir) << r->dir_my.absolutePath() << fil;
piCout << "cd to" << dir << ", abs =" << r->dir_my.absolutePath(); piCout << "cd to" << dir << ", abs =" << r->dir_my.absolutePath();
}
break; break;
case ReplyHostInfo: case ReplyHostInfo:
ba >> info_other; ba >> info_other;
@@ -492,11 +502,39 @@ void Daemon::dataReceived(const PIString & from, const PIByteArray & data) {
r->sendFiles(r->dir_my.absolutePath() + PIDir::separator, files); r->sendFiles(r->dir_my.absolutePath() + PIDir::separator, files);
} }
break; break;
case RemoveFiles:
r = remotes.value(from);
if (!r) return;
{
PIStringList files;
ba >> files;
//piCout << "send" << files << "from" << r->dir_my.absolutePath();
removeFiles(r->dir_my, files);
answer_dirs = true;
}
break;
case MkDir:
r = remotes.value(from);
if (!r) return;
{
PIString dn;
ba >> dn;
//piCout << "send" << files << "from" << r->dir_my.absolutePath();
PIDir::make(r->dir_my.absolutePath() + PIDir::separator + dn);
answer_dirs = true;
}
break;
case FileTransfer: case FileTransfer:
r = remotes.value(from); r = remotes.value(from);
if (r) r->received(ba); if (r) r->received(ba);
break; break;
}; };
if (answer_dirs) {
PIVector<PIFile::FileInfo> fil = r->dir_my.entries();
piForeach (PIFile::FileInfo & f, fil)
f.path = f.name();
rba << int(ReplyChangeDir) << r->dir_my.absolutePath() << fil;
}
if (!rba.isEmpty()) send(from, rba); if (!rba.isEmpty()) send(from, rba);
} }

View File

@@ -60,6 +60,8 @@ private:
ReplyHostInfo = 20, ReplyHostInfo = 20,
ReplyChangeDir, ReplyChangeDir,
CopyFiles, CopyFiles,
RemoveFiles,
MkDir,
FileTransfer = 30 FileTransfer = 30

View File

@@ -18,6 +18,7 @@ PIStringList FileManager::TileDir::selectedNames() const {
PIVector<int> sind = selected.toVector(); PIVector<int> sind = selected.toVector();
piForeachC (int i, sind) piForeachC (int i, sind)
ret << entries[i].name(); ret << entries[i].name();
ret.removeOne("..");
return ret; return ret;
} }
@@ -56,7 +57,9 @@ bool FileManager::TileDir::keyEvent(PIKbdListener::KeyEvent key) {
return false; return false;
} }
setFocus(); setFocus();
if (!remote) { if (remote) {
actionRequest(remote, Remove, selectedNames());
} else {
removeFiles(dir, selectedNames()); removeFiles(dir, selectedNames());
selected.clear(); selected.clear();
updateDir(); updateDir();