Compare commits
1 Commits
5530aff2f3
...
5b62f9461b
| Author | SHA1 | Date | |
|---|---|---|---|
| 5b62f9461b |
@ -45,6 +45,7 @@ QList<ModelItemValues> FileHandler::getItemValuesFromCSVFile(const QString& file
|
|||||||
QFile file;
|
QFile file;
|
||||||
file.setFileName(filePath);
|
file.setFileName(filePath);
|
||||||
if (file.exists()) {
|
if (file.exists()) {
|
||||||
|
// TODO inform UI on CSV import errors
|
||||||
result = CsvParser::getItemsFromCSVFile(filePath);
|
result = CsvParser::getItemsFromCSVFile(filePath);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@ -52,7 +52,11 @@ bool CsvParser::isCsvCompatible(const rapidcsv::Document& doc) {
|
|||||||
qInfo() << "Checking CSV document for compatiblity...";
|
qInfo() << "Checking CSV document for compatiblity...";
|
||||||
const std::vector<std::string> columnNames = doc.GetColumnNames();
|
const std::vector<std::string> columnNames = doc.GetColumnNames();
|
||||||
for (const QString& headerName : GET_HEADER_NAMES()) {
|
for (const QString& headerName : GET_HEADER_NAMES()) {
|
||||||
bool isHeaderNameFound = false;
|
if (OPTIONAL_CSV_HEADERS.contains(headerName)) {
|
||||||
|
/// no need to have a column for the optional values
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
/// these column must be found in CSV document
|
||||||
if (std::find(columnNames.begin(), columnNames.end(), headerName) != columnNames.end()) {
|
if (std::find(columnNames.begin(), columnNames.end(), headerName) != columnNames.end()) {
|
||||||
qDebug() << QString("Header found in column names: %1").arg(headerName);
|
qDebug() << QString("Header found in column names: %1").arg(headerName);
|
||||||
} else {
|
} else {
|
||||||
@ -86,14 +90,13 @@ QHash<QString, std::vector<std::string>> CsvParser::extractColumnValues(
|
|||||||
const rapidcsv::Document& doc) {
|
const rapidcsv::Document& doc) {
|
||||||
QHash<QString, std::vector<std::string>> columnValueMap;
|
QHash<QString, std::vector<std::string>> columnValueMap;
|
||||||
for (const QString& columnName : headerNames) {
|
for (const QString& columnName : headerNames) {
|
||||||
// TODO add support for optional columns
|
if (OPTIONAL_CSV_HEADERS.contains(columnName)) {
|
||||||
// if (optionalCsvHeaderNames.contains(columnName)) {
|
const std::vector<std::string> columnNames = doc.GetColumnNames();
|
||||||
// const std::vector<std::string> columnNames = doc.GetColumnNames();
|
int columnIdx = doc.GetColumnIdx(columnName.toStdString());
|
||||||
// int columnIdx = doc.GetColumnIdx(columnName.toStdString());
|
if (columnIdx == -1) {
|
||||||
// if (columnIdx == -1) {
|
continue;
|
||||||
// continue;
|
}
|
||||||
// }
|
}
|
||||||
// }
|
|
||||||
const std::vector<std::string> columnValues =
|
const std::vector<std::string> columnValues =
|
||||||
doc.GetColumn<std::string>(columnName.toStdString());
|
doc.GetColumn<std::string>(columnName.toStdString());
|
||||||
columnValueMap.insert(columnName, columnValues);
|
columnValueMap.insert(columnName, columnValues);
|
||||||
|
|||||||
@ -119,13 +119,16 @@ void GenericCore::importCSVFile(const QString& filePath) {
|
|||||||
qInfo() << "importing items from CSV...";
|
qInfo() << "importing items from CSV...";
|
||||||
qDebug() << "filePath:" << filePath;
|
qDebug() << "filePath:" << filePath;
|
||||||
const QList<ModelItemValues> itemValuesList = FileHandler::getItemValuesFromCSVFile(filePath);
|
const QList<ModelItemValues> itemValuesList = FileHandler::getItemValuesFromCSVFile(filePath);
|
||||||
// TODO inform UI on errors
|
|
||||||
if (itemValuesList.isEmpty()) {
|
if (itemValuesList.isEmpty()) {
|
||||||
qDebug() << "No items found. Doing nothing...";
|
qDebug() << "No items found. Doing nothing...";
|
||||||
|
displayStatusMessage("No items found in CSV file. Either empty or not compatible.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// qDebug() << "CSV file content:" << itemValuesList;
|
// qDebug() << "CSV file content:" << itemValuesList;
|
||||||
m_mainModel->insertItems(m_mainModel->rowCount(), itemValuesList);
|
m_mainModel->insertItems(m_mainModel->rowCount(), itemValuesList);
|
||||||
|
const QString messageString =
|
||||||
|
QString(tr("Imported %1 item(s) from CSV file.")).arg(itemValuesList.size());
|
||||||
|
displayStatusMessage(messageString);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GenericCore::exportCSVFile(const QString& filePath) {
|
bool GenericCore::exportCSVFile(const QString& filePath) {
|
||||||
|
|||||||
@ -41,6 +41,8 @@ static QList<UserRoles> DOUBLE_ROLES = {FactorRole};
|
|||||||
static const QList<UserRoles> TYPE_ROLES = {TypeRole};
|
static const QList<UserRoles> TYPE_ROLES = {TypeRole};
|
||||||
static const QList<QString> TYPES = {"A", "B", "C", ""};
|
static const QList<QString> TYPES = {"A", "B", "C", ""};
|
||||||
|
|
||||||
|
static const QStringList OPTIONAL_CSV_HEADERS = {"description", "info"};
|
||||||
|
|
||||||
/// JSON keys
|
/// JSON keys
|
||||||
static const QString ITEMS_KEY_STRING = "items";
|
static const QString ITEMS_KEY_STRING = "items";
|
||||||
static const QString ITEM_KEY_STRING = "item";
|
static const QString ITEM_KEY_STRING = "item";
|
||||||
|
|||||||
Reference in New Issue
Block a user