From 4ceabcd22d46544d5c0482c29e535eecc7532acc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D1=8B=D1=87=D0=BA=D0=BE=D0=B2=20=D0=90=D0=BD=D0=B4?= =?UTF-8?q?=D1=80=D0=B5=D0=B9?= Date: Fri, 19 Aug 2016 12:51:03 +0000 Subject: [PATCH] git-svn-id: svn://db.shs.com.ru/pip@231 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5 --- src/console/piscreen.cpp | 5 -- src/console/piscreentile.h | 1 + src/io/pibasetransfer.cpp | 4 +- src/io/pifiletransfer.cpp | 4 +- src/io/pipeer.cpp | 2 +- utils/system_daemon/daemon.cpp | 100 +++++++++++++++++++-------- utils/system_daemon/daemon.h | 40 ++++++----- utils/system_daemon/file_manager.cpp | 50 ++++++++++---- utils/system_daemon/file_manager.h | 9 ++- utils/system_daemon/main.cpp | 11 +-- 10 files changed, 147 insertions(+), 79 deletions(-) diff --git a/src/console/piscreen.cpp b/src/console/piscreen.cpp index 13da224b..1b92d86a 100644 --- a/src/console/piscreen.cpp +++ b/src/console/piscreen.cpp @@ -329,15 +329,10 @@ PIScreen::PIScreen(bool startNow, PIKbdListener::KBFunc slot): PIThread(), drawe PIScreen::~PIScreen() { - piCoutObj << "~PIScreen"; if (isRunning()) stop(); - piCoutObj << "stop PIScreen .. "; PIThread::waitForFinish(10); - piCoutObj << "stop PIScreen ok"; - piCoutObj << "stop listener .. "; listener->waitForFinish(10); - piCoutObj << "stop listener ok"; delete listener; } diff --git a/src/console/piscreentile.h b/src/console/piscreentile.h index b84ea065..f0b6a7b9 100644 --- a/src/console/piscreentile.h +++ b/src/console/piscreentile.h @@ -43,6 +43,7 @@ public: void show() {visible = true;} void hide() {visible = false;} void setFocus(); + bool hasFocus() const {return has_focus;} void setMargins(int m) {marginLeft = marginRight = marginTop = marginBottom = m;} void setMargins(int l, int r, int t, int b) {marginLeft = l; marginRight = r; marginTop = t; marginBottom = b;} diff --git a/src/io/pibasetransfer.cpp b/src/io/pibasetransfer.cpp index b6e8b60f..1ef8f66a 100644 --- a/src/io/pibasetransfer.cpp +++ b/src/io/pibasetransfer.cpp @@ -64,7 +64,7 @@ void PIBaseTransfer::received(PIByteArray data) { diag.received(data.size(), false); return; } else diag.received(data.size(), true); -// piCoutObj << "receive" << h.session_id << h.type << h.id; + //piCoutObj << "receive" << h.session_id << h.type << h.id; switch (pt) { case pt_Unknown: break; case pt_Data: @@ -446,7 +446,7 @@ bool PIBaseTransfer::getStartRequest() { mutex_session.lock(); if (replies[0] == pt_ReplySuccess) { state_string = "send permited!"; - piCoutObj << "ping " << tm.elapsed_m(); + //piCoutObj << "ping " << tm.elapsed_m(); mutex_session.unlock(); return true; } diff --git a/src/io/pifiletransfer.cpp b/src/io/pifiletransfer.cpp index 7d63420f..5decdd1e 100644 --- a/src/io/pifiletransfer.cpp +++ b/src/io/pifiletransfer.cpp @@ -81,7 +81,7 @@ bool PIFileTransfer::sendFiles(const PIVector &files) { srand(PISystemTime::current().toMilliseconds()); pftheader.session_id = rand(); sendFilesStarted(); - cur_file_string = "buil session"; + cur_file_string = "build session"; desc.clear(); desc << files_; pftheader.step = pft_Description; @@ -223,7 +223,7 @@ void PIFileTransfer::receivePart(PIBaseTransfer::Part fi, PIByteArray ba, PIByte StepType st = (StepType)h.step; pftheader.step = st; if (!h.check_sig()) { - cur_file_string = "ERROR File Transfer uncompatable! or invalid version"; + cur_file_string = "ERROR check signature: File Transfer incompatable or invalid version!"; piCoutObj << cur_file_string; stopReceive(); return; diff --git a/src/io/pipeer.cpp b/src/io/pipeer.cpp index 47c4b298..b925d104 100755 --- a/src/io/pipeer.cpp +++ b/src/io/pipeer.cpp @@ -486,7 +486,7 @@ bool PIPeer::dataRead(uchar * readed, int size) { cnt++; if (cnt > _PIPEER_MSG_TTL || from == dp->name) return true; sba << type << from << to << cnt << pba; - piCout << "translate packet" << from << "->" << to << ", ttl =" << cnt; + //piCout << "translate packet" << from << "->" << to << ", ttl =" << cnt; sendToNeighbour(dp, sba); } return true; diff --git a/utils/system_daemon/daemon.cpp b/utils/system_daemon/daemon.cpp index 8e6ac701..3b2ca85c 100644 --- a/utils/system_daemon/daemon.cpp +++ b/utils/system_daemon/daemon.cpp @@ -3,8 +3,9 @@ #include "pisysteminfo.h" const char pisd_prefix[] = "_pisd_"; +const char self_name[] = "__self__"; extern PIScreen screen; - +//bool Daemon::inited__ = false; Daemon::Remote::Remote(const PIString & n): PIThread() { setName(n); @@ -60,6 +61,8 @@ void Daemon::Remote::run() { void Daemon::Remote::updateDirEntries() { + //piCout << dir_my; + if (!dir_my.isExists()) dir_my = PIDir::current(); my_filelist = dir_my.entries(); piForeach (PIFile::FileInfo & f, my_filelist) f.path = f.name(); } @@ -194,7 +197,7 @@ void Daemon::TileFileProgress::tileEvent(PIScreenTile * t, TileEvent e) { -Daemon::Daemon(): PIPeer(pisd_prefix + PISystemInfo::instance()->hostname + "_" + PIString(rand() % 100)), fm(this) { +Daemon::Daemon(): inited__(false), PIPeer(pisd_prefix + PISystemInfo::instance()->hostname + "_" + PIString(rand() % 100)), fm(this) { setName("Daemon"); dtimer.setName("__S__Daemon_timer"); mode = offset = cur = height = 0; @@ -202,6 +205,12 @@ Daemon::Daemon(): PIPeer(pisd_prefix + PISystemInfo::instance()->hostname + "_" CONNECTU(&dtimer, tickEvent, this, timerEvent) CONNECTU(&fm, tileKey, this, fmKeyEvent) CONNECTU(&fm, actionRequest, this, fmActionRequest) + _self = new Remote(self_name); + CONNECTU(_self, sendRequest, this, localSend) + CONNECTU(_self, receiveFinished, this, closeFileDialog) + CONNECTU(_self, sendFinished, this, closeFileDialog) + localft.setName(self_name); + CONNECTU(&localft, sendRequest, _self, received) dtimer.addDelimiter(5); dtimer.start(200); @@ -227,7 +236,7 @@ Daemon::Daemon(): PIPeer(pisd_prefix + PISystemInfo::instance()->hostname + "_" tile_info = new TileSimple("daemon info"); tile_info->hide(); - fm.setRemote(true); + fm.setRemote(); tile_fm = fm.tile(); tile_fm->hide(); @@ -241,7 +250,7 @@ Daemon::Daemon(): PIPeer(pisd_prefix + PISystemInfo::instance()->hostname + "_" tile_root->addTile(tile_fm); CONNECTU(&screen, tileEvent, this, tileEvent) - + inited__ = true; } @@ -258,6 +267,15 @@ PIScreenTile * Daemon::tile() const { } +void Daemon::localSend(const PIString & p_name, const PIByteArray & data) { + //piCoutObj << "localSend" << localft.stateString(); + PIByteArray h; h << int(FileTransfer); + PIByteArray ba = data; + ba.remove(0, h.size()); + localft.received(ba); +} + + void Daemon::hideAll() { list_actions->hide(); tile_info->hide(); @@ -355,7 +373,7 @@ void Daemon::keyEvent(PIKbdListener::KeyEvent key) { void Daemon::fmKeyEvent(PIKbdListener::KeyEvent key) { PIMutexLocker ml(remote_mutex); //Remote * r = remotes.value(conn_name); - //piCout << key.key << key.modifiers; +// piCoutObj << key.key << key.modifiers; switch (key.key) { case PIKbdListener::Return: { @@ -375,7 +393,7 @@ 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; + if (!r && type != FileManager::LocalCopy) return; switch (type) { case FileManager::Copy: if (remote_tile) { @@ -406,6 +424,17 @@ void Daemon::fmActionRequest(bool remote_tile, FileManager::Action type, PIVaria send(conn_name, ba); } break; + case FileManager::LocalCopy: + //piCoutObj << "localCopy"; + if (remote_tile) { + localft.setDirectory(fm.localDir()); + _self->sendFiles(fm.remoteDir() + PIDir::separator, data.toStringList()); + } else { + localft.setDirectory(fm.remoteDir()); + _self->sendFiles(fm.localDir() + PIDir::separator, data.toStringList()); + } + tile_file_progress->rec = false; + tile_file_progress->show(&(_self->ft)); default: break; }; //piCout << remote_tile << type << data; @@ -459,67 +488,82 @@ PIString Daemon::connectedDaemon() const { } -void Daemon::peerConnected(const PIString & name) { +void Daemon::peerConnected(const PIString & p_name) { + while (!inited__) piMSleep(5); +// PIMutexLocker ml(peers_mutex); /*piCout << "connected" << name; mode = 2; conn_name = name;*/ - if (!name.startsWith(pisd_prefix)) return; - Remote * r = new Remote(name); + if (!p_name.startsWith(pisd_prefix)) return; + Remote * r = new Remote(p_name); + piCoutObj << "peer connected" << p_name; +// piCout << r->methodsEH() << this->methodsEH(); CONNECTU(r, sendRequest, this, sendRequest) - CONNECTU(r, receiveFinished, this, filesRreceived) + CONNECTU(r, receiveFinished, this, filesReceived) 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); + PIMutexLocker ml2(remote_mutex); + remotes.insert(p_name, r); } -void Daemon::peerDisconnected(const PIString & name) { - if (name == conn_name) { +void Daemon::peerDisconnected(const PIString & p_name) { + while (!inited__) piMSleep(5); + piCoutObj << "peer disconnect" << p_name; + if (p_name == conn_name) { disconnect(); } PIMutexLocker ml(remote_mutex); - Remote * dt = remotes.value(name, 0); + Remote * dt = remotes.value(p_name, 0); if (!dt) return; if (tile_file_progress->ft == &(dt->ft)) { tile_file_progress->close(false); } - remotes.remove(name); + remotes.remove(p_name); delete dt; } -void Daemon::filesReceived(const PIString & name, bool ok) { +void Daemon::filesReceived(const PIString & p_name, bool ok) { PIMutexLocker ml(remote_mutex); - Remote * r = remotes.value(name, 0); + Remote * r = remotes.value(p_name, 0); if (!r) return; r->updateDir(); } -void Daemon::dirChanged(const PIString & name, const PIString & dir) { +void Daemon::dirChanged(const PIString & p_name, const PIString & dir) { PIMutexLocker ml(remote_mutex); - Remote * r = remotes.value(name, 0); + Remote * r = remotes.value(p_name, 0); if (!r) return; if (r->dir_my.absolutePath() != dir) return; sendDirToRemote(r); } -void Daemon::filesRemoved(const PIString & name, const PIString & dir) { +void Daemon::filesRemoved(const PIString & p_name, const PIString & dir) { PIMutexLocker ml(remote_mutex); - Remote * r = remotes.value(name, 0); + Remote * r = remotes.value(p_name, 0); if (!r) return; if (r->dir_my.absolutePath() != dir) return; sendDirToRemote(r); } -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; +void Daemon::closeFileDialog(const PIString & p_name, bool ok) { +//piCout << "CLOSE" << tile_file_progress->conn_name << name << ok; + if (p_name == self_name) { + tile_file_progress->close(ok); + fm.clearSelectionLocal(); + fm.clearSelectionRemote(); + fm.updateLocalDir(); + fm.updateRemoteDir(); + return; + } + piCoutObj << "file transfer with" << p_name << (ok ? "success" : "failure"); + if (tile_file_progress->conn_name != p_name) return; tile_file_progress->close(ok); // if (ok) { if (tile_file_progress->rec) { @@ -543,7 +587,7 @@ void Daemon::dataReceived(const PIString & from, const PIByteArray & data) { Remote * r = remotes.value(from); PIString dir; int type; ba >> type; - //piCout << "rec from " << from << type; + //piCout << "rec from " << from << type << r; switch (type) { case RequestHostInfo: makeMyHostInfo(); @@ -555,7 +599,7 @@ 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(); - //piCout << "cd to" << dir << ", abs =" << r->dir_my.absolutePath(); + piCout << "cd to" << r->dir_my.absolutePath(); r->updateDir(); // sendDirToRemote(r); break; @@ -657,6 +701,7 @@ void Daemon::makeOtherHostInfo() { void Daemon::requestChDir(const PIString & d) { if (d.isEmpty()) return; Remote * r = remotes.value(conn_name, 0); + //piCout << "request chdir" << d << conn_name << r; if (d.isEmpty()) return; if (!r) return; fm.remoteSaveDir(); @@ -664,5 +709,4 @@ void Daemon::requestChDir(const PIString & d) { PIByteArray ba; ba << int(RequestChangeDir) << d; send(conn_name, ba); - //piCout << "request chdir" << d; } diff --git a/utils/system_daemon/daemon.h b/utils/system_daemon/daemon.h index 6d234e1a..5699ede3 100644 --- a/utils/system_daemon/daemon.h +++ b/utils/system_daemon/daemon.h @@ -42,6 +42,7 @@ public: void showMainList() {showTile(list_daemons, "Select daemon");} void showActionList() {showTile(list_actions, "Select action");} + void showLocalFilemanager() {mode = 3; showTile(tile_fm, "File manager");} PIStringList availableDaemons(); void connectToDaemon(const PIString & dn); @@ -57,7 +58,9 @@ public: bool lockedMBcasts() const {return mc_mutex.isLocked();} bool lockedSends() const {return send_mutex.isLocked();} bool lockedMCSends() const {return send_mc_mutex.isLocked();} - + + FileManager fm; + private: enum PacketType { RequestHostInfo = 10, @@ -76,7 +79,7 @@ private: class Remote: public PIThread { PIOBJECT_SUBCLASS(Remote, PIThread) public: - Remote(const PIString & n = PIString()); + explicit Remote(const PIString & n = PIString()); ~Remote(); void sendFiles(const PIString & dir, const PIStringList & fl) {startAction(Daemon::CopyFiles, dir, fl);} void removeFiles(const PIStringList & fl) {startAction(Daemon::RemoveFiles, PIString(), fl);} @@ -86,12 +89,12 @@ private: EVENT_HANDLER1(void, ftReceived, bool, ok) {receiveFinished(name(), ok);} EVENT_HANDLER1(void, ftSended, bool, ok) {sendFinished(name(), ok);} - EVENT2(sendRequest, const PIString & , name, const PIByteArray &, data) - 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);} + EVENT2(sendRequest, const PIString &, p_name, const PIByteArray &, data) + EVENT2(receiveFinished, const PIString & , p_name, bool, ok) + EVENT2(sendFinished, const PIString & , p_name, bool, ok) + EVENT2(removeFinished, const PIString & , p_name, const PIString & , dir) + EVENT2(changeDirFinished, const PIString & , p_name, const PIString & , dir) + EVENT_HANDLER1(void, received, PIByteArray & , data) {ft.received(data);} void startAction(PacketType a, const PIString & dir, const PIStringList & fl); void run(); @@ -127,20 +130,21 @@ private: EVENT_HANDLER2(void, tileEvent, PIScreenTile *, t, PIScreenTypes::TileEvent, e); EVENT_HANDLER1(void, keyEvent, PIKbdListener::KeyEvent, key); - EVENT_HANDLER2(void, sendRequest, const PIString & , name, const PIByteArray & , data) {send(name, data);} + EVENT_HANDLER2(void, sendRequest, const PIString &, p_name, const PIByteArray &, data) {send(p_name, data);} EVENT_HANDLER1(void, fmKeyEvent, PIKbdListener::KeyEvent, key); EVENT_HANDLER3(void, fmActionRequest, bool, remote_tile, FileManager::Action, type, PIVariant, data); 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_HANDLER2(void, filesReceived, const PIString & , p_name, bool, ok); + EVENT_HANDLER2(void, filesRemoved, const PIString & , p_name, const PIString & , dir); + EVENT_HANDLER2(void, dirChanged, const PIString & , p_name, const PIString & , dir); + EVENT_HANDLER2(void, closeFileDialog, const PIString & , p_name, bool, ok); + EVENT_HANDLER2(void, localSend, const PIString & , p_name, const PIByteArray &, data); EVENT(menuRequest) void hideAll(); void showTile(PIScreenTile * t, const PIString & header = PIString()); void fillInfoTile(const HostInfo & hi); - void peerConnected(const PIString & name); - void peerDisconnected(const PIString & name); + void peerConnected(const PIString & p_name); + void peerDisconnected(const PIString & p_name); void dataReceived(const PIString & from, const PIByteArray & data); void makeMyHostInfo(); void makeOtherHostInfo(); @@ -156,14 +160,14 @@ private: PIMap remotes; PISystemMonitor sys_mon_other; HostInfo info_my, info_other; - FileManager fm; PIScreenTile * tile_root, * tile_fm; TileSimple * tile_info, * tile_header; TileList * list_daemons, * list_actions; TileFileProgress * tile_file_progress; + PIFileTransfer localft; + Remote * _self; int mode, offset, cur, height; - - + bool inited__; }; inline PIByteArray & operator <<(PIByteArray & b, const Daemon::HostInfo & v) { diff --git a/utils/system_daemon/file_manager.cpp b/utils/system_daemon/file_manager.cpp index cfbb8ef0..6f78cc41 100644 --- a/utils/system_daemon/file_manager.cpp +++ b/utils/system_daemon/file_manager.cpp @@ -9,7 +9,7 @@ FileManager::TileDir::TileDir(): TileList() { label_path = 0; selection_mode = TileList::MultiSelection; dir = PIDir::current(); - resized = remote = remote_mode = false; + resized = is_right = remote_mode = false; } @@ -28,15 +28,15 @@ bool FileManager::TileDir::keyEvent(PIKbdListener::KeyEvent key) { bool pass = false; PIString nd; switch (key.key) { - case 'R': if (!remote) updateDir(); pass = true; break; + case 'R': if (!(is_right && remote_mode)) updateDir(); pass = true; break; case PIKbdListener::F5: - if (remote_mode) { - if (selected.isEmpty()) - selected << cur; - if (!askQuestion("Copy selected files?")) return true; - setFocus(); - actionRequest(remote, Copy, selectedNames()); - } + if (selected.isEmpty()) + selected << cur; + if (!askQuestion("Copy selected files?")) return true; + setFocus(); + //piCoutObj << "remote" << remote_mode; + if (remote_mode) actionRequest(is_right, Copy, selectedNames()); + else actionRequest(is_right, LocalCopy, selectedNames()); break; case PIKbdListener::F6: if (key.modifiers[PIKbdListener::Shift]) { @@ -47,8 +47,8 @@ bool FileManager::TileDir::keyEvent(PIKbdListener::KeyEvent key) { nd = askNewDir(); setFocus(); if (nd.isEmpty()) return true; - if (remote) - actionRequest(remote, MkDir, nd); + if (is_right && remote_mode) + actionRequest(is_right, MkDir, nd); else { PIDir::make(dir.absolutePath() + PIDir::separator + nd); updateDir(); @@ -63,8 +63,8 @@ bool FileManager::TileDir::keyEvent(PIKbdListener::KeyEvent key) { return false; } setFocus(); - if (remote) { - actionRequest(remote, Remove, selectedNames()); + if (is_right && remote_mode) { + actionRequest(is_right, Remove, selectedNames()); } else { removeFiles(dir, selectedNames()); selected.clear(); @@ -77,7 +77,7 @@ bool FileManager::TileDir::keyEvent(PIKbdListener::KeyEvent key) { e_mutex.lock(); bool ud = false; if (cur < entries.size_s() && cur >= 0) { - if (!remote) { + if (!(is_right && remote_mode)) { //piCout << entries[cur]; if (entries[cur].isDir()) { prev_pos[dir.path()] = PIPair(cur, offset); @@ -96,7 +96,8 @@ bool FileManager::TileDir::keyEvent(PIKbdListener::KeyEvent key) { } break; } - if (remote && pass) { +// piCout << is_right << remote_mode << pass; + if (is_right && remote_mode && pass) { ((void(*)(void*,PIKbdListener::KeyEvent))key_func)(fm, key); return true; } @@ -250,6 +251,7 @@ FileManager::FileManager(Daemon * d) { panels[i]->updateDir(); pt->addTile(panel); } + panels[1]->is_right = true; tile_root->addTile(pt); PIScreenTile * labels = new PIScreenTile(); @@ -275,6 +277,17 @@ PIScreenTile * FileManager::tile() const { } +void FileManager::setLocal() { + if (panels[1]->remote_mode) setRemoteDir(panels[0]->dir.absolutePath()); + panels[0]->remote_mode = panels[1]->remote_mode = false; +} + + +void FileManager::setRemote() { + panels[0]->remote_mode = panels[1]->remote_mode = true; +} + + void FileManager::setRemoteDir(const PIString & d) { panels[1]->dir.setDir(d); if (panels[1]->label_path) { @@ -290,6 +303,13 @@ void FileManager::setRemoteContent(const PIVector< PIFile::FileInfo > & el) { } +int FileManager::selectedPanel() const { + for (int i = 0; i < 2; i++) + if (panels[i]->hasFocus()) return i; + return -1; +} + + PIStringList FileManager::selectedRemote() const { PIStringList ret; panels[1]->lock(); diff --git a/utils/system_daemon/file_manager.h b/utils/system_daemon/file_manager.h index a1b7126e..765a7113 100644 --- a/utils/system_daemon/file_manager.h +++ b/utils/system_daemon/file_manager.h @@ -15,13 +15,15 @@ public: PIScreenTile * localTile() const {return panels[0];} PIScreenTile * remoteTile() const {return panels[1];} - enum Action {MkDir, Remove, Copy, Move}; + enum Action {MkDir, Remove, Copy, Move, LocalCopy}; - void setRemote(bool r) {panels[1]->remote = r; panels[0]->remote_mode = panels[1]->remote_mode = true;} + void setLocal(); + void setRemote(); void setRemoteDir(const PIString & d); void setRemoteContent(const PIVector & el); PIString remoteDir() const {return panels[1]->dir.absolutePath();} PIString localDir() const {return panels[0]->dir.absolutePath();} + int selectedPanel() const; PIStringList selectedRemote() const; PIFile::FileInfo currentRemoteEntry() const; PIFile::FileInfo selectedRemoteEntry(int index) const {return panels[1]->entries[index];} @@ -29,6 +31,7 @@ public: void remoteRestoreDir(); void readingRemote() const {panels[1]->showReading();} void updateLocalDir() {panels[0]->updateDir();} + void updateRemoteDir() {panels[1]->updateDir();} void clearSelectionLocal() {panels[0]->selected.clear();} void clearSelectionRemote() {panels[1]->selected.clear();} @@ -55,7 +58,7 @@ private: PIDir dir; PIMap > prev_pos; mutable PIMutex e_mutex; - bool resized, remote, remote_mode; + bool resized, is_right, remote_mode; void * fm, * key_func; EVENT3(actionRequest, bool, remote_tile, FileManager::Action, type, PIVariant, data) }; diff --git a/utils/system_daemon/main.cpp b/utils/system_daemon/main.cpp index 278eea14..5bea8985 100755 --- a/utils/system_daemon/main.cpp +++ b/utils/system_daemon/main.cpp @@ -33,7 +33,7 @@ _Init _pisd_init; PIScreen screen(false); PISystemMonitor sys_mon; Daemon daemon_; -FileManager file_manager; +//FileManager file_manager; class MainMenu: public PITimer { @@ -62,7 +62,7 @@ public: mt->hide(); mt->name() = "local info"; center->addTile(mt); mtiles << mt; - mt = tfm = file_manager.tile(); + //mt = tfm = daemon_.fm.tile(); mt->hide(); mt->name() = "file manager"; center->addTile(mt); mtiles << mt; @@ -84,7 +84,7 @@ public: CONNECTU(&screen, tileEvent, this, tileEvent) CONNECTU(&screen, keyPressed, this, keyEvent) - CONNECTU(&file_manager, menuRequest, this, menuRequest) + CONNECTU(&daemon_.fm, menuRequest, this, menuRequest) CONNECTU(&daemon_, menuRequest, this, menuRequest) start(10); } @@ -208,6 +208,7 @@ public: EVENT_HANDLER(void, menuRequest) { piForeach (PIScreenTile * t, mtiles) t->hide(); + daemon_.disconnect(); tmenu->show(); tmenu->setFocus(); } @@ -218,8 +219,8 @@ public: t->hide(); switch (e.data.toInt()) { case 0: tinfo->show(); break; - case 1: tfm->show(); break; - case 2: daemon_.showMainList(); tdaemon->show(); break; + case 1: daemon_.fm.setLocal(); daemon_.showLocalFilemanager(); tdaemon->show(); break; + case 2: daemon_.fm.setRemote(); daemon_.showMainList(); tdaemon->show(); break; case 3: tpeer->show(); peers_tl->setFocus(); break; case 4: daemon_.reinit(); tmenu->show(); break; case 5: tpeerdiag->show(); break;