Commit c7ebfd47 authored by Christian Kandeler's avatar Christian Kandeler

RemoteLinux: Remove dependency on Qt4ProjectManager.

Instead use the newly added abstractions from ProjectExplorer.
This makes the plugin qmake-independent in principle; any build system
can be used as long as the respective QtCreator plugin provides a way to
set up the required deployment information.
As a side effect of this patch, two features are lost:
    (1) The ability to add a remote directory automatically for a
RemoteLinux based target. This was rarely ever useful, because any non-
trivial project requires more files to be deployed than just one binary.
    (2) The ability to add Desktop files and icons for Fremantle and
Harmattan projects. Similar points as above apply here as well; such
projects should be set up via QtCreator's wizards or manually by users
who know what they are doing.

Change-Id: I2d7e621256f01143aafe3b191b04a120f053e672
Reviewed-by: default avatarTobias Hunger <tobias.hunger@nokia.com>
parent b80205c5
......@@ -15,5 +15,6 @@ Alternatively, this plugin may be used under the terms of the GNU Lesser General
<url>http://www.qt-project.org</url>
<dependencyList>
<dependency name=\"RemoteLinux\" version=\"$$QTCREATOR_VERSION\"/>
<dependency name=\"Qt4ProjectManager\" version=\"$$QTCREATOR_VERSION\"/>
</dependencyList>
</plugin>
......@@ -36,7 +36,6 @@ HEADERS += \
maemoqemusettings.h \
qt4maemodeployconfiguration.h \
maemodeviceconfigwizard.h \
maemodeployconfigurationwidget.h \
maemoinstalltosysrootstep.h \
maemodeploymentmounter.h \
maemopackageinstaller.h \
......@@ -79,7 +78,6 @@ SOURCES += \
maemoqemusettings.cpp \
qt4maemodeployconfiguration.cpp \
maemodeviceconfigwizard.cpp \
maemodeployconfigurationwidget.cpp \
maemoinstalltosysrootstep.cpp \
maemodeploymentmounter.cpp \
maemopackageinstaller.cpp \
......@@ -105,8 +103,7 @@ FORMS += \
maemodeviceconfigwizardpreviouskeysetupcheckpage.ui \
maemodeviceconfigwizardreusekeyscheckpage.ui \
maemodeviceconfigwizardkeycreationpage.ui \
maemodeviceconfigwizardkeydeploymentpage.ui \
maemodeployconfigurationwidget.ui
maemodeviceconfigwizardkeydeploymentpage.ui
RESOURCES += qt-maemo.qrc
DEFINES += QT_NO_CAST_TO_ASCII
......
......@@ -33,9 +33,6 @@ QtcPlugin {
"maemoconstants.h",
"maemodeploybymountsteps.cpp",
"maemodeploybymountsteps.h",
"maemodeployconfigurationwidget.cpp",
"maemodeployconfigurationwidget.h",
"maemodeployconfigurationwidget.ui",
"maemodeploymentmounter.cpp",
"maemodeploymentmounter.h",
"maemodeploystepfactory.cpp",
......
include(../../plugins/qt4projectmanager/qt4projectmanager.pri)
include(../../plugins/remotelinux/remotelinux.pri)
......@@ -37,14 +37,13 @@
#include "maemoremotecopyfacility.h"
#include "qt4maemodeployconfiguration.h"
#include <projectexplorer/deploymentdata.h>
#include <projectexplorer/project.h>
#include <projectexplorer/target.h>
#include <qt4projectmanager/qt4buildconfiguration.h>
#include <qtsupport/baseqtversion.h>
#include <qtsupport/qtprofileinformation.h>
#include <remotelinux/abstractremotelinuxdeployservice.h>
#include <remotelinux/deployablefile.h>
#include <remotelinux/deploymentinfo.h>
#include <remotelinux/linuxdevice.h>
#include <utils/qtcassert.h>
#include <ssh/sshconnection.h>
......@@ -131,7 +130,7 @@ private:
void cancelInstallation();
void handleInstallationSuccess();
Q_SLOT void handleFileCopied(const RemoteLinux::DeployableFile&deployable);
Q_SLOT void handleFileCopied(const ProjectExplorer::DeployableFile &deployable);
MaemoRemoteCopyFacility * const m_copyFacility;
mutable QList<DeployableFile> m_filesToCopy;
......@@ -327,8 +326,8 @@ MaemoMountAndCopyFilesService::MaemoMountAndCopyFilesService(QObject *parent)
connect(m_copyFacility, SIGNAL(stdoutData(QString)), SIGNAL(stdOutData(QString)));
connect(m_copyFacility, SIGNAL(stderrData(QString)), SIGNAL(stdErrData(QString)));
connect(m_copyFacility, SIGNAL(progress(QString)), SIGNAL(progressMessage(QString)));
connect(m_copyFacility, SIGNAL(fileCopied(RemoteLinux::DeployableFile)),
SLOT(handleFileCopied(RemoteLinux::DeployableFile)));
connect(m_copyFacility, SIGNAL(fileCopied(ProjectExplorer::DeployableFile)),
SLOT(handleFileCopied(ProjectExplorer::DeployableFile)));
connect(m_copyFacility, SIGNAL(finished(QString)), SLOT(handleInstallationFinished(QString)));
}
......@@ -337,7 +336,7 @@ bool MaemoMountAndCopyFilesService::isDeploymentNecessary() const
m_filesToCopy.clear();
for (int i = 0; i < m_deployableFiles.count(); ++i) {
const DeployableFile &d = m_deployableFiles.at(i);
if (hasChangedSinceLastDeployment(d) || QFileInfo(d.localFilePath).isDir())
if (hasChangedSinceLastDeployment(d) || d.localFilePath().toFileInfo().isDir())
m_filesToCopy << d;
}
return !m_filesToCopy.isEmpty();
......@@ -350,7 +349,7 @@ QList<MaemoMountSpecification> MaemoMountAndCopyFilesService::mountSpecification
bool drivesToMount[26];
qFill(drivesToMount, drivesToMount + sizeof drivesToMount / sizeof drivesToMount[0], false);
for (int i = 0; i < m_filesToCopy.count(); ++i) {
const QString localDir = QFileInfo(m_filesToCopy.at(i).localFilePath).canonicalPath();
const QString localDir = m_filesToCopy.at(i).localFilePath().toFileInfo().canonicalPath();
const char driveLetter = localDir.at(0).toLower().toLatin1();
if (driveLetter < 'a' || driveLetter > 'z') {
qWarning("Weird: drive letter is '%c'.", driveLetter);
......@@ -467,12 +466,7 @@ AbstractRemoteLinuxDeployService *MaemoCopyFilesViaMountStep::deployService() co
bool MaemoCopyFilesViaMountStep::initInternal(QString *error)
{
QList<DeployableFile> deployableFiles;
const DeploymentInfo * const deploymentInfo = deployConfiguration()->deploymentInfo();
const int deployableCount = deploymentInfo->deployableCount();
for (int i = 0; i < deployableCount; ++i)
deployableFiles << deploymentInfo->deployableAt(i);
m_deployService->setDeployableFiles(deployableFiles);
m_deployService->setDeployableFiles(target()->deploymentData().allFiles());
return deployService()->isDeploymentPossible(error);
}
......
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2012 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: http://www.qt-project.org/
**
**
** GNU Lesser General Public License Usage
**
** This file may be used under the terms of the GNU Lesser General Public
** License version 2.1 as published by the Free Software Foundation and
** appearing in the file LICENSE.LGPL included in the packaging of this file.
** Please review the following information to ensure the GNU Lesser General
** Public License version 2.1 requirements will be met:
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** Other Usage
**
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
**
**************************************************************************/
#include "maemodeployconfigurationwidget.h"
#include "ui_maemodeployconfigurationwidget.h"
#include "maemoglobal.h"
#include "maemoconstants.h"
#include "qt4maemodeployconfiguration.h"
#include <projectexplorer/profileinformation.h>
#include <projectexplorer/target.h>
#include <qt4projectmanager/qt4nodes.h>
#include <remotelinux/deployablefile.h>
#include <remotelinux/deployablefilesperprofile.h>
#include <remotelinux/deploymentinfo.h>
#include <remotelinux/deploymentsettingsassistant.h>
#include <remotelinux/remotelinuxdeployconfigurationwidget.h>
#include <utils/fileutils.h>
#include <utils/qtcassert.h>
#include <QFileInfo>
#include <QFileDialog>
#include <QMessageBox>
#include <QPixmap>
#include <QVBoxLayout>
using namespace ProjectExplorer;
using namespace Qt4ProjectManager;
using namespace RemoteLinux;
namespace Madde {
namespace Internal {
MaemoDeployConfigurationWidget::MaemoDeployConfigurationWidget(QWidget *parent)
: DeployConfigurationWidget(parent),
ui(new Ui::MaemoDeployConfigurationWidget),
m_remoteLinuxWidget(new RemoteLinuxDeployConfigurationWidget)
{
QVBoxLayout *mainLayout = new QVBoxLayout(this);
mainLayout->setSpacing(0);
mainLayout->addWidget(m_remoteLinuxWidget);
QWidget * const subWidget = new QWidget;
ui->setupUi(subWidget);
mainLayout->addWidget(subWidget);
mainLayout->addStretch(1);
connect(m_remoteLinuxWidget,
SIGNAL(currentModelChanged(const RemoteLinux::DeployableFilesPerProFile*)),
SLOT(handleCurrentModelChanged(const RemoteLinux::DeployableFilesPerProFile*)));
handleCurrentModelChanged(m_remoteLinuxWidget->currentModel());
}
MaemoDeployConfigurationWidget::~MaemoDeployConfigurationWidget()
{
delete ui;
}
void MaemoDeployConfigurationWidget::init(DeployConfiguration *dc)
{
m_remoteLinuxWidget->init(dc);
connect(ui->addDesktopFileButton, SIGNAL(clicked()), SLOT(addDesktopFile()));
connect(ui->addIconButton, SIGNAL(clicked()), SLOT(addIcon()));
connect(deployConfiguration()->deploymentInfo(), SIGNAL(modelAboutToBeReset()),
SLOT(handleDeploymentInfoToBeReset()));
}
Qt4MaemoDeployConfiguration *MaemoDeployConfigurationWidget::deployConfiguration() const
{
return qobject_cast<Qt4MaemoDeployConfiguration *>(m_remoteLinuxWidget->deployConfiguration());
}
void MaemoDeployConfigurationWidget::handleDeploymentInfoToBeReset()
{
ui->addDesktopFileButton->setEnabled(false);
ui->addIconButton->setEnabled(false);
}
void MaemoDeployConfigurationWidget::handleCurrentModelChanged(const DeployableFilesPerProFile *proFileInfo)
{
ui->addDesktopFileButton->setEnabled(canAddDesktopFile(proFileInfo));
ui->addIconButton->setEnabled(canAddIcon(proFileInfo));
}
void MaemoDeployConfigurationWidget::addDesktopFile()
{
DeployableFilesPerProFile * const proFileInfo = m_remoteLinuxWidget->currentModel();
QTC_ASSERT(canAddDesktopFile(proFileInfo), return);
const QString desktopFilePath = QFileInfo(proFileInfo->proFilePath()).path()
+ QLatin1Char('/') + proFileInfo->projectName() + QLatin1String(".desktop");
if (!QFile::exists(desktopFilePath)) {
const QString desktopTemplate = QLatin1String("[Desktop Entry]\nEncoding=UTF-8\n"
"Version=1.0\nType=Application\nTerminal=false\nName=%1\nExec=%2\n"
"Icon=%1\nX-Window-Icon=\nX-HildonDesk-ShowInToolbar=true\n"
"X-Osso-Type=application/x-executable\n");
Utils::FileSaver saver(desktopFilePath);
saver.write(desktopTemplate.arg(proFileInfo->projectName(),
proFileInfo->remoteExecutableFilePath()).toUtf8());
if (!saver.finalize(this))
return;
}
DeployableFile d;
d.remoteDir = QLatin1String("/usr/share/applications");
Core::Id deviceType
= ProjectExplorer::DeviceTypeProfileInformation::deviceTypeId(deployConfiguration()->target()->profile());
if (deviceType == Maemo5OsType)
d.remoteDir += QLatin1String("/hildon");
d.localFilePath = desktopFilePath;
if (!deployConfiguration()->deploymentSettingsAssistant()
->addDeployableToProFile(deployConfiguration()->qmakeScope(), proFileInfo,
QLatin1String("desktopfile"), d)) {
QMessageBox::critical(this, tr("Project File Update Failed"),
tr("Could not update the project file."));
} else {
ui->addDesktopFileButton->setEnabled(false);
}
}
void MaemoDeployConfigurationWidget::addIcon()
{
DeployableFilesPerProFile * const proFileInfo = m_remoteLinuxWidget->currentModel();
const int iconDim
= MaemoGlobal::applicationIconSize(deployConfiguration()->target());
const QString origFilePath = QFileDialog::getOpenFileName(this,
tr("Choose Icon (will be scaled to %1x%1 pixels, if necessary)").arg(iconDim),
proFileInfo->projectDir(), QLatin1String("(*.png)"));
if (origFilePath.isEmpty())
return;
QPixmap pixmap(origFilePath);
if (pixmap.isNull()) {
QMessageBox::critical(this, tr("Invalid Icon"),
tr("Unable to read image"));
return;
}
const QSize iconSize(iconDim, iconDim);
if (pixmap.size() != iconSize)
pixmap = pixmap.scaled(iconSize);
const QString newFileName = proFileInfo->projectName() + QLatin1Char('.')
+ QFileInfo(origFilePath).suffix();
const QString newFilePath = proFileInfo->projectDir() + QLatin1Char('/') + newFileName;
if (!pixmap.save(newFilePath)) {
QMessageBox::critical(this, tr("Failed to Save Icon"),
tr("Could not save icon to '%1'.").arg(newFilePath));
return;
}
if (!deployConfiguration()->deploymentSettingsAssistant()
->addDeployableToProFile(deployConfiguration()->qmakeScope(), proFileInfo,
QLatin1String("icon"), DeployableFile(newFilePath, remoteIconDir()))) {
QMessageBox::critical(this, tr("Project File Update Failed"),
tr("Could not update the project file."));
} else {
ui->addIconButton->setEnabled(false);
}
}
bool MaemoDeployConfigurationWidget::canAddDesktopFile(const DeployableFilesPerProFile *proFileInfo) const
{
return proFileInfo && proFileInfo->isApplicationProject()
&& deployConfiguration()->localDesktopFilePath(proFileInfo).isEmpty();
}
bool MaemoDeployConfigurationWidget::canAddIcon(const DeployableFilesPerProFile *proFileInfo) const
{
return proFileInfo && proFileInfo->isApplicationProject()
&& remoteIconFilePath(proFileInfo).isEmpty();
}
QString MaemoDeployConfigurationWidget::remoteIconFilePath(const DeployableFilesPerProFile *proFileInfo) const
{
QTC_ASSERT(proFileInfo->projectType() == ApplicationTemplate, return QString());
const QStringList imageTypes = QStringList() << QLatin1String("jpg") << QLatin1String("png")
<< QLatin1String("svg");
for (int i = 0; i < proFileInfo->rowCount(); ++i) {
const DeployableFile &d = proFileInfo->deployableAt(i);
const QString extension = QFileInfo(d.localFilePath).suffix();
if (d.remoteDir.startsWith(remoteIconDir()) && imageTypes.contains(extension))
return d.remoteDir + QLatin1Char('/') + QFileInfo(d.localFilePath).fileName();
}
return QString();
}
QString MaemoDeployConfigurationWidget::remoteIconDir() const
{
return QString::fromLatin1("/usr/share/icons/hicolor/%1x%1/apps")
.arg(MaemoGlobal::applicationIconSize(deployConfiguration()->target()));
}
} // namespace Internal
} // namespace Madde
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2012 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: http://www.qt-project.org/
**
**
** GNU Lesser General Public License Usage
**
** This file may be used under the terms of the GNU Lesser General Public
** License version 2.1 as published by the Free Software Foundation and
** appearing in the file LICENSE.LGPL included in the packaging of this file.
** Please review the following information to ensure the GNU Lesser General
** Public License version 2.1 requirements will be met:
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** Other Usage
**
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
**
**************************************************************************/
#ifndef MAEMODEPLOYCONFIGURATIONWIDGET_H
#define MAEMODEPLOYCONFIGURATIONWIDGET_H
#include <projectexplorer/deployconfiguration.h>
namespace RemoteLinux {
class DeployableFilesPerProFile;
class RemoteLinuxDeployConfigurationWidget;
}
namespace Madde {
namespace Internal {
class Qt4MaemoDeployConfiguration;
namespace Ui { class MaemoDeployConfigurationWidget; }
class MaemoDeployConfigurationWidget : public ProjectExplorer::DeployConfigurationWidget
{
Q_OBJECT
public:
explicit MaemoDeployConfigurationWidget(QWidget *parent = 0);
~MaemoDeployConfigurationWidget();
void init(ProjectExplorer::DeployConfiguration *dc);
Qt4MaemoDeployConfiguration *deployConfiguration() const;
private slots:
void addDesktopFile();
void addIcon();
void handleDeploymentInfoToBeReset();
void handleCurrentModelChanged(const RemoteLinux::DeployableFilesPerProFile *proFileInfo);
private:
bool canAddDesktopFile(const RemoteLinux::DeployableFilesPerProFile *proFileInfo) const;
bool canAddIcon(const RemoteLinux::DeployableFilesPerProFile *proFileInfo) const;
QString remoteIconFilePath(const RemoteLinux::DeployableFilesPerProFile *proFileInfo) const;
QString remoteIconDir() const;
Ui::MaemoDeployConfigurationWidget *ui;
RemoteLinux::RemoteLinuxDeployConfigurationWidget * const m_remoteLinuxWidget;
};
} // namespace Internal
} // namespace Madde
#endif // MAEMODEPLOYCONFIGURATIONWIDGET_H
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Madde::Internal::MaemoDeployConfigurationWidget</class>
<widget class="QWidget" name="Madde::Internal::MaemoDeployConfigurationWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>276</width>
<height>45</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QPushButton" name="addDesktopFileButton">
<property name="text">
<string>Add Desktop File</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="addIconButton">
<property name="text">
<string>Add Launcher Icon...</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
......@@ -35,13 +35,13 @@
#include "maemopackagecreationstep.h"
#include "maemoqtversion.h"
#include <utils/fileutils.h>
#include <projectexplorer/deploymentdata.h>
#include <projectexplorer/target.h>
#include <qt4projectmanager/qt4buildconfiguration.h>
#include <qtsupport/baseqtversion.h>
#include <qtsupport/qtprofileinformation.h>
#include <remotelinux/deploymentinfo.h>
#include <remotelinux/remotelinuxdeployconfiguration.h>
#include <utils/fileutils.h>
#include <QDir>
#include <QFileInfo>
......@@ -282,11 +282,7 @@ bool MaemoCopyToSysrootStep::init()
}
m_systemRoot = ProjectExplorer::SysRootProfileInformation::sysRoot(target()->profile()).toString();
const DeploymentInfo * const deploymentInfo
= static_cast<RemoteLinuxDeployConfiguration *>(deployConfiguration())->deploymentInfo();
m_files.clear();
for (int i = 0; i < deploymentInfo->deployableCount(); ++i)
m_files << deploymentInfo->deployableAt(i);
m_files = target()->deploymentData().allFiles();
return true;
}
......@@ -298,13 +294,13 @@ void MaemoCopyToSysrootStep::run(QFutureInterface<bool> &fi)
const QChar sep = QLatin1Char('/');
foreach (const DeployableFile &deployable, m_files) {
const QFileInfo localFileInfo(deployable.localFilePath);
const QFileInfo localFileInfo = deployable.localFilePath().toFileInfo();
const QString targetFilePath = m_systemRoot + sep
+ deployable.remoteDir + sep + localFileInfo.fileName();
sysrootDir.mkpath(deployable.remoteDir.mid(1));
+ deployable.remoteDirectory() + sep + localFileInfo.fileName();
sysrootDir.mkpath(deployable.remoteDirectory().mid(1));
QString errorMsg;
Utils::FileUtils::removeRecursively(targetFilePath, &errorMsg);
if (!Utils::FileUtils::copyRecursively(deployable.localFilePath,
if (!Utils::FileUtils::copyRecursively(deployable.localFilePath().toString(),
targetFilePath, &errorMsg)) {
emit addOutput(tr("Sysroot installation failed: %1\n"
" Continuing anyway.").arg(errorMsg), ErrorMessageOutput);
......
......@@ -33,7 +33,7 @@
#include <projectexplorer/abstractprocessstep.h>
#include <projectexplorer/buildstep.h>
#include <remotelinux/deployablefile.h>
#include <projectexplorer/deployablefile.h>
#include <QStringList>
......@@ -105,7 +105,7 @@ public:
static QString displayName();
private:
QString m_systemRoot;
QList<RemoteLinux::DeployableFile> m_files;
QList<ProjectExplorer::DeployableFile> m_files;
};
class MaemoMakeInstallToSysrootStep : public ProjectExplorer::AbstractProcessStep
......
......@@ -43,8 +43,6 @@
#include <qt4projectmanager/qt4buildconfiguration.h>
#include <qtsupport/baseqtversion.h>
#include <qtsupport/qtprofileinformation.h>
#include <remotelinux/deployablefilesperprofile.h>
#include <remotelinux/deploymentinfo.h>
#include <utils/fileutils.h>
#include <utils/qtcassert.h>
#include <ssh/sshremoteprocessrunner.h>
......@@ -153,13 +151,6 @@ void MaemoPublisherFremantleFree::createPackage()
return;
}
QString error;
if (!updateDesktopFiles(&error)) {
finishWithFailure(error,
tr("Publishing failed: Could not create package."));
return;
}
emit progressReport(tr("Cleaning up temporary directory..."));
AbstractMaemoPackageCreationStep::preparePackagingProcess(m_process,
m_buildConfig, m_tmpProjectDir);
......@@ -542,65 +533,6 @@ void MaemoPublisherFremantleFree::finishWithFailure(const QString &progressMsg,
setState(Inactive);
}
bool MaemoPublisherFremantleFree::updateDesktopFiles(QString *error) const
{
bool success = true;
const Qt4MaemoDeployConfiguration *const deployConfig
= qobject_cast<Qt4MaemoDeployConfiguration *>(m_buildConfig->target()->activeDeployConfiguration());
QTC_ASSERT(deployConfig, return false);
const DeploymentInfo *const deploymentInfo = deployConfig->deploymentInfo();
for (int i = 0; i < deploymentInfo->modelCount(); ++i) {
const DeployableFilesPerProFile * const model = deploymentInfo->modelAt(i);
QString desktopFilePath = deployConfig->localDesktopFilePath(model);
if (desktopFilePath.isEmpty())
continue;
desktopFilePath.replace(model->projectDir(), m_tmpProjectDir);
const QString executableFilePath = model->remoteExecutableFilePath();
if (executableFilePath.isEmpty()) {
qDebug("%s: Skipping subproject %s with missing deployment information.",
Q_FUNC_INFO, qPrintable(model->proFilePath()));
continue;
}
Utils::FileReader reader;