TimerPool fixoutManipulator
git-svn-id: svn://db.shs.com.ru/pip@78 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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_;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user