void MegaUploader::upload(QFileInfo info, MegaNode *parent) { QApplication::processEvents(); MegaNodeList *children = megaApi->getChildren(parent); QByteArray utf8name = info.fileName().toUtf8(); QString currentPath = QDir::toNativeSeparators(info.absoluteFilePath()); MegaNode *dupplicate = NULL; for (int i = 0; i < children->size(); i++) { MegaNode *child = children->get(i); if (!strcmp(utf8name.constData(), child->getName()) && ((info.isDir() && (child->getType() == MegaNode::TYPE_FOLDER)) || (info.isFile() && (child->getType() == MegaNode::TYPE_FILE) && (info.size() == child->getSize())))) { dupplicate = child->copy(); break; } } delete children; if (dupplicate) { if (dupplicate->getType() == MegaNode::TYPE_FILE) { emit dupplicateUpload(info.absoluteFilePath(), info.fileName(), dupplicate->getHandle()); } if (dupplicate->getType() == MegaNode::TYPE_FOLDER) { QDir dir(info.absoluteFilePath()); QFileInfoList entries = dir.entryInfoList(QDir::AllEntries | QDir::NoDotAndDotDot); for (int i = 0; i < entries.size(); i++) { upload(entries[i], dupplicate); } } delete dupplicate; return; } string localPath = megaApi->getLocalPath(parent); if (localPath.size() && megaApi->isSyncable(info.fileName().toUtf8().constData())) { #ifdef WIN32 QString destPath = QDir::toNativeSeparators(QString::fromWCharArray((const wchar_t *)localPath.data()) + QDir::separator() + info.fileName()); if (destPath.startsWith(QString::fromAscii("\\\\?\\"))) { destPath = destPath.mid(4); } #else QString destPath = QDir::toNativeSeparators(QString::fromUtf8(localPath.data()) + QDir::separator() + info.fileName()); #endif megaApi->moveToLocalDebris(destPath.toUtf8().constData()); QtConcurrent::run(Utilities::copyRecursively, currentPath, destPath); } else if (info.isFile()) { megaApi->startUpload(currentPath.toUtf8().constData(), parent); } else if (info.isDir()) { folders.enqueue(info); megaApi->createFolder(info.fileName().toUtf8().constData(), parent, delegateListener); } }