version 0.5.0_alpha

git-svn-id: svn://db.shs.com.ru/pip@8 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
2015-03-10 10:13:18 +00:00
parent b1f651ab62
commit c11bc3b3b8
697 changed files with 18150 additions and 18839 deletions

View File

@@ -8,7 +8,7 @@ PIFileTransfer::PIFileTransfer(): crc(standardCRC_16()) {
header.version = PIFILETRANSFER_VERSION;
header.session_id = 0;
dir = PIDir::current();
fileinfo_size = sizeof(EntryInfo) + sizeof(PIByteArray) + 100;
fileinfo_size = sizeof(EntryInfo) + sizeof(FilePart) + 100;
min_packet_size = sizeof(PacketHeader) + sizeof(uint) + fileinfo_size;
is_sending = is_receiving = false;
bytes_file_all = bytes_file_cur = bytes_total_all = bytes_total_cur = 0;
@@ -26,16 +26,33 @@ PIFileTransfer::~PIFileTransfer() {
bool PIFileTransfer::send(const PIString & file) {
return sendFiles(PIVector<PIFile::FileInfo>() << PIFile::fileInfo(file));
PIVector<PIFile::FileInfo> ce = dir.entries();
PIFile::FileInfo e;
e.path = "";
for (int i = 0; i < ce.size_s(); i++) {
if (ce[i].path == file) e = ce[i];
}
if (e.path != "") return sendFiles(PIVector<PIFile::FileInfo>() << e);
return false;
}
bool PIFileTransfer::send(PIVector<PIFile::FileInfo> entries) {
PIVector<PIFile::FileInfo> allEntries;
PIVector<PIFile::FileInfo> ce;
PISet<PIString> names;
for (int i = 0; i < entries.size_s(); i++) {
allEntries << entries[i];
ce.clear();
if (entries[i].isDir())
allEntries << PIDir::allEntries(dir.absolutePath() + dir.separator + entries[i].path);
ce = PIDir::allEntries(dir.absolutePath() + dir.separator + entries[i].path);
for (int k = 0; k < ce.size_s(); k++) ce[k].path = entries[i].path + dir.separator + ce[k].path;
ce.push_front(entries[i]);
for (int j = 0; j < ce.size_s(); j++) {
if (names.contains(ce[j].path)) continue;
allEntries << ce[j];
//piCout << ce[j].path;
names << ce[j].path;
}
}
return sendFiles(allEntries);
}
@@ -146,12 +163,6 @@ void PIFileTransfer::received(PIByteArray & ba) {
bool PIFileTransfer::sendFiles(PIVector<PIFile::FileInfo> files) {
PIStringList names;
for(int i=0; i<files.size_s(); i++) {
files[i].path = dir.relative(files[i].path);
if (names.contains(files[i].path)) {files.remove(i); i--;}
else names << files[i].path;
}
// piCoutObj << "prepare to send" << files.size() << "files";
break_ = false;
is_sending = true;
@@ -247,7 +258,7 @@ void PIFileTransfer::buildSession(PIVector<PIFile::FileInfo> files) {
fi.fstart = fs;
fi.fsize = piMinll(fi.entry.size - fs, max_packet_size - min_packet_size);
lfi << fi;
cur_size += fi.fsize + sizeof(PIByteArray);
cur_size += fi.fsize + sizeof(FilePart);
if (fi.part_index != fi.parts) {
session << lfi;
lfi.clear();