void SftpSession::handleLsOutput(SftpJobId jobId, const QByteArray &output) { QList<SftpFileInfo> allFileInfo; for (const QByteArray &line : output.split('\n')) { if (line.startsWith("ls") || line.isEmpty()) continue; const QByteArrayList components = line.simplified().split(' '); if (components.size() < 9) { qCWarning(sshLog) << "Don't know how to parse sftp ls output:" << line; continue; } const QByteArray typeAndPermissions = components.first(); if (typeAndPermissions.size() != 10) { qCWarning(sshLog) << "Don't know how to parse sftp ls output:" << line; continue; } SftpFileInfo fileInfo; fileInfo.type = typeFromLsOutput(typeAndPermissions.at(0)); fileInfo.permissions = permissionsFromLsOutput(QByteArray::fromRawData( typeAndPermissions.constData() + 1, typeAndPermissions.size() - 1)); bool isNumber; fileInfo.size = components.at(4).toULongLong(&isNumber); if (!isNumber) { qCWarning(sshLog) << "Don't know how to parse sftp ls output:" << line; continue; } // TODO: This will not work for file names with weird whitespace combinations fileInfo.name = QFileInfo(QString::fromUtf8(components.mid(8).join(' '))).fileName(); allFileInfo << fileInfo; } emit fileInfoAvailable(jobId, allFileInfo); }
void QScxmlcGenerator::parseIssues(const QByteArray &processStderr) { QList<ProjectExplorer::Task> issues; foreach (const QByteArray &line, processStderr.split('\n')) { QByteArrayList tokens = line.split(':'); if (tokens.length() > 4) { Utils::FileName file = Utils::FileName::fromUtf8(tokens[0]); int line = tokens[1].toInt(); // int column = tokens[2].toInt(); <- nice, but not needed for now. ProjectExplorer::Task::TaskType type = tokens[3].trimmed() == "error" ? ProjectExplorer::Task::Error : ProjectExplorer::Task::Warning; QString message = QString::fromUtf8(tokens.mid(4).join(':').trimmed()); issues.append(ProjectExplorer::Task(type, message, file, line, TaskCategory)); } } setCompileIssues(issues); }