TimerPool fixoutManipulator

git-svn-id: svn://db.shs.com.ru/pip@78 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
2015-04-07 16:26:59 +00:00
parent 6575b7e074
commit 6c987ee1ae
10 changed files with 220 additions and 72 deletions

View File

@@ -912,9 +912,9 @@ inline PIByteArray & operator >>(PIByteArray & s, PIStringList & v) {int sz; s >
//! \relatesalso PIStringList \brief Output operator to std::ostream (cout)
inline std::ostream & operator <<(std::ostream & s, const PIStringList & v) {s << "{"; for (uint i = 0; i < v.size(); ++i) {s << '\"' << v[i] << '\"'; if (i < v.size() - 1) s << ", ";} s << "}"; return s;}
inline std::ostream & operator <<(std::ostream & s, const PIStringList & v) {s << "{"; for (uint i = 0; i < v.size(); ++i) {s << "\"" << v[i] << "\""; if (i < v.size() - 1) s << ", ";} s << "}"; return s;}
//! \relatesalso PIStringList \relatesalso PICout \brief Output operator to PICout
inline PICout operator <<(PICout s, const PIStringList & v) {s.space(); s.setControl(0, true); s << "{"; for (uint i = 0; i < v.size(); ++i) {s << '\"' << v[i] << '\"'; if (i < v.size() - 1) s << ", ";} s << "}"; s.restoreControl(); return s;}
inline PICout operator <<(PICout s, const PIStringList & v) {s.space(); s.setControl(0, true); s << "{"; for (uint i = 0; i < v.size(); ++i) {s << "\"" << v[i] << "\""; if (i < v.size() - 1) s << ", ";} s << "}"; s.restoreControl(); return s;}
#endif // PISTRING_H

View File

@@ -229,7 +229,7 @@ int PIBaseTransfer::checkSession() {
void PIBaseTransfer::buildSession(PIVector<Part> parts) {
state_string = "calculating files... ";
state_string = "calculating parts ... ";
session.clear();
header.session_id = rand();
bytes_all = 0;
@@ -239,7 +239,7 @@ void PIBaseTransfer::buildSession(PIVector<Part> parts) {
int min_size = packet_header_size + part_header_size;
int cur_size = min_size;
for (int i = 0; i < parts.size_s(); i++) {
state_string = "calculating files... " + PIString::fromNumber(i) + " of " + PIString::fromNumber(parts.size());
state_string = "calculating parts ... " + PIString::fromNumber(i) + " of " + PIString::fromNumber(parts.size());
fi.id = parts[i].id;
// piCout << fi.id << state_string;
bytes_all += parts[i].size;

View File

@@ -282,7 +282,29 @@ PIVector<PIFile::FileInfo> PIDir::entries() {
PIVector<PIFile::FileInfo> PIDir::allEntries() {
return allEntries(absolutePath());
PIVector<PIFile::FileInfo> ret;
PIVector<PIFile::FileInfo> dirs;
PIStringList cdirs, ndirs;
cdirs << path();
while (!cdirs.isEmpty()) {
piForeachC (PIString & d, cdirs) {
scan_ = d;
PIVector<PIFile::FileInfo> el = PIDir(d).entries();
piForeachC (PIFile::FileInfo & de, el) {
if (de.name() == "." || de.name() == "..") continue;
if (de.isSymbolicLink()) continue; /// TODO: resolve symlinks
if (de.isDir()) {
dirs.push_front(de);
ndirs << de.path;
} else ret << de;
}
}
cdirs = ndirs;
ndirs.clear();
}
ret.insert(0, dirs);
scan_.clear();
return ret;
}
@@ -363,26 +385,7 @@ PIDir PIDir::temporary() {
PIVector<PIFile::FileInfo> PIDir::allEntries(const PIString &path) {
PIVector<PIFile::FileInfo> ret;
PIVector<PIFile::FileInfo> dirs;
PIDir root;
root.setDir(path);
PIVector<PIFile::FileInfo> cds = root.entries();
piForeachC (PIFile::FileInfo & de, cds) {
//piCout << " open" << de.name();
if (de.name() == "." || de.name() == "..") continue;
if (de.isSymbolicLink()) continue; /// TODO: resolve symlinks
if (de.isDir()) {
dirs.push_front(de);
PIVector<PIFile::FileInfo> td = PIDir(de.path).allEntries();
for (int i = 0; i < td.size_s(); i++) {
if (td[i].isDir()) dirs.push_front(td[i]);
else ret << td[i];
}
} else ret << de;
}
ret.insert(0, dirs);
return ret;
return PIDir(path).allEntries();
}

View File

@@ -46,6 +46,10 @@ public:
//! Returns if path of this directory is relative
bool isRelative() const {return !isAbsolute();}
//! Returns path of current reading directory. This path
//! valid only while \a allEntries functions
const PIString & scanDir() const {return scan_;}
//! Returns path of this directory
PIString path() const;
@@ -116,7 +120,7 @@ private:
static bool removeDir(const PIString & path);
static bool renameDir(const PIString & path, const PIString & new_name);
PIString path_;
PIString path_, scan_;
};

View File

@@ -9,7 +9,7 @@ PIFileTransfer::PIFileTransfer() {
pftheader.session_id = 0;
pftheader.step = pft_None;
dir = PIDir::current();
started_ = false;
started_ = scanning = false;
bytes_file_all = bytes_file_cur = 0;
// CONNECT(void, this, sendStarted, this, send_started);
CONNECT(void, this, receiveStarted, this, receive_started);
@@ -49,12 +49,13 @@ bool PIFileTransfer::send(PIVector<PIFile::FileInfo> entries) {
allEntries << PFTFileInfo(entries[i]);
allEntries.back().dest_path = entries[i].name();
if (entries[i].isDir()) {
cur_file_string = "scaning " + entries[i].name() + " (" + PIString::fromNumber(i) + "/" + PIString::fromNumber(entries.size()) + ")";
PIDir d(entries[i].path);
cur_file_string = "scanning ... ";
d.setDir(entries[i].path);
scanning = true;
PIVector<PIFile::FileInfo> fls = d.allEntries();
scanning = false;
d.up();
for (int j=0; j<fls.size(); j++) {
cur_file_string = "scaning " + entries[i].name() + " (" + PIString::fromNumber(j) + "/" + PIString::fromNumber(fls.size()) + ")";
allEntries << PFTFileInfo(fls[j]);
allEntries.back().dest_path = d.relative(fls[j].path);
}
@@ -237,6 +238,13 @@ void PIFileTransfer::receivePart(PIBaseTransfer::Part fi, PIByteArray ba, PIByte
}
PIString PIFileTransfer::curFile() const {
if (scanning)
return cur_file_string + d.scanDir();
return cur_file_string;
}
PIByteArray PIFileTransfer::customHeader() {
PIByteArray ba;
ba << pftheader;

View File

@@ -49,7 +49,7 @@ public:
bool isStarted() const {return started_;}
const PIString & curFile() const {return cur_file_string;}
PIString curFile() const;
llong bytesFileAll() const {return bytes_file_all;}
llong bytesFileCur() const {return bytes_file_cur;}
const PIString * curFile_ptr() const {return &cur_file_string;}
@@ -71,7 +71,8 @@ private:
PIDir dir;
PIFile work_file;
PIByteArray desc;
bool started_;
PIDir d;
bool started_, scanning;
bool sendFiles(const PIVector<PFTFileInfo> &files);
void processFile(int id, ullong start, PIByteArray &data);