From b82453d8451907282de0cb4d317af5bcf86640b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D0=B5=D0=BB=D0=B8=D0=BF=D0=B5=D0=BD=D0=BA=D0=BE=20?= =?UTF-8?q?=D0=98=D0=B2=D0=B0=D0=BD?= Date: Thu, 9 Apr 2015 12:28:26 +0000 Subject: [PATCH] PISD - mkdir, remove, copy to/from remote git-svn-id: svn://db.shs.com.ru/pip@89 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5 --- src/io/pidir.cpp | 2 +- utils/system_daemon/daemon.cpp | 60 +++++++++++++++++++++++----- utils/system_daemon/daemon.h | 2 + utils/system_daemon/file_manager.cpp | 5 ++- 4 files changed, 56 insertions(+), 13 deletions(-) diff --git a/src/io/pidir.cpp b/src/io/pidir.cpp index 97055328..bd01265e 100755 --- a/src/io/pidir.cpp +++ b/src/io/pidir.cpp @@ -294,7 +294,7 @@ PIVector PIDir::allEntries() { if (de.name() == "." || de.name() == "..") continue; if (de.isSymbolicLink()) continue; /// TODO: resolve symlinks if (de.isDir()) { - dirs.push_front(de); + dirs << de; ndirs << de.path; } else ret << de; } diff --git a/utils/system_daemon/daemon.cpp b/utils/system_daemon/daemon.cpp index d6160747..029bd207 100644 --- a/utils/system_daemon/daemon.cpp +++ b/utils/system_daemon/daemon.cpp @@ -297,7 +297,7 @@ void Daemon::keyEvent(PIKbdListener::KeyEvent key) { void Daemon::fmKeyEvent(PIKbdListener::KeyEvent key) { PIByteArray ba; //Remote * r = remotes.value(conn_name); - piCout << key.key << key.modifiers; + //piCout << key.key << key.modifiers; switch (key.key) { case PIKbdListener::Return: { @@ -316,10 +316,10 @@ void Daemon::fmKeyEvent(PIKbdListener::KeyEvent key) { void Daemon::fmActionRequest(bool remote_tile, FileManager::Action type, PIVariant data) { Remote * r = 0; + r = remotes.value(conn_name, 0); + if (!r) return; switch (type) { case FileManager::Copy: - r = remotes.value(conn_name, 0); - if (!r) return; if (remote_tile) { PIByteArray ba; 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)); } 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; }; - 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) { - 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; tile_file_progress->close(ok); if (ok) { @@ -444,6 +458,7 @@ void Daemon::dataReceived(const PIString & from, const PIByteArray & data) { Remote * r(0); PIString dir; int type; ba >> type; + bool answer_dirs = false; //piCout << "rec from " << from << type; switch (type) { case RequestHostInfo: @@ -457,13 +472,8 @@ void Daemon::dataReceived(const PIString & from, const PIByteArray & data) { r->dir_my.cd(dir); r->ft.setDirectory(r->dir_my); piCout << "store to" << r->dir_my.absolutePath(); - { - PIVector fil = r->dir_my.entries(); - piForeach (PIFile::FileInfo & f, fil) - f.path = f.name(); - rba << int(ReplyChangeDir) << r->dir_my.absolutePath() << fil; + answer_dirs = true; piCout << "cd to" << dir << ", abs =" << r->dir_my.absolutePath(); - } break; case ReplyHostInfo: 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); } 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: r = remotes.value(from); if (r) r->received(ba); break; }; + if (answer_dirs) { + PIVector 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); } diff --git a/utils/system_daemon/daemon.h b/utils/system_daemon/daemon.h index 77e0f5d8..ca9e9c56 100644 --- a/utils/system_daemon/daemon.h +++ b/utils/system_daemon/daemon.h @@ -60,6 +60,8 @@ private: ReplyHostInfo = 20, ReplyChangeDir, CopyFiles, + RemoveFiles, + MkDir, FileTransfer = 30 diff --git a/utils/system_daemon/file_manager.cpp b/utils/system_daemon/file_manager.cpp index dcf2006c..3910ba69 100644 --- a/utils/system_daemon/file_manager.cpp +++ b/utils/system_daemon/file_manager.cpp @@ -18,6 +18,7 @@ PIStringList FileManager::TileDir::selectedNames() const { PIVector sind = selected.toVector(); piForeachC (int i, sind) ret << entries[i].name(); + ret.removeOne(".."); return ret; } @@ -56,7 +57,9 @@ bool FileManager::TileDir::keyEvent(PIKbdListener::KeyEvent key) { return false; } setFocus(); - if (!remote) { + if (remote) { + actionRequest(remote, Remove, selectedNames()); + } else { removeFiles(dir, selectedNames()); selected.clear(); updateDir();