Merge pull request #1

Version update 2.00
This commit is contained in:
Valentino Orlandi 2023-10-07 12:46:03 +00:00
commit df97bb9d36
13 changed files with 417 additions and 779 deletions

View File

@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.5)
project(LogDoctorInstaller VERSION 1.01 LANGUAGES CXX)
project(LogDoctorInstaller VERSION 2.00 LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
@ -8,12 +8,28 @@ set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets LinguistTools)
if(MSVC)
add_compile_options(/W2)
set(CMAKE_CXX_FLAGS_MINSIZEREL "/Os")
set(CMAKE_CXX_FLAGS_RELEASE "/O2")
else()
add_compile_options(-Wall -Wextra -Wpedantic)
set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os")
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
endif()
find_package(QT NAMES Qt6 REQUIRED COMPONENTS Widgets LinguistTools)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets LinguistTools)
if(${QT_VERSION_MAJOR} LESS 6)
message("Error: Qt6 or greater required")
return()
endif()
set(TS_FILES
translations/LogDoctorInstaller_en.ts
translations/LogDoctorInstaller_es.ts
@ -38,45 +54,28 @@ set(PROJECT_SOURCES
${TS_FILES}
)
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
qt_add_executable(LogDoctorInstaller
MANUAL_FINALIZATION
${PROJECT_SOURCES}
)
# Define target properties for Android with Qt 6 as:
# set_property(TARGET LogDoctorInstaller APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
# ${CMAKE_CURRENT_SOURCE_DIR}/android)
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
qt_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES})
else()
if(ANDROID)
add_library(LogDoctorInstaller SHARED
${PROJECT_SOURCES}
)
# Define properties for Android with Qt 5 after find_package() calls as:
# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
else()
add_executable(LogDoctorInstaller
${PROJECT_SOURCES}
)
endif()
qt5_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES})
endif()
qt_add_executable(LogDoctorInstaller
MANUAL_FINALIZATION
${PROJECT_SOURCES}
)
qt_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES})
if(WIN32)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-Bstatic -lgcc -lstdc++ -lwinpthread")
target_link_libraries(LogDoctorInstaller PRIVATE
-static Qt${QT_VERSION_MAJOR}::Widgets
)
else()
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pthread")
target_link_libraries(LogDoctorInstaller PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets
)
endif()
target_link_libraries(LogDoctorInstaller PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets)
if(WIN32)
set_target_properties(LogDoctorInstaller PROPERTIES
WIN32_EXECUTABLE TRUE)
endif()
if(QT_VERSION_MAJOR EQUAL 6)
qt_finalize_executable(LogDoctorInstaller)
endif()
qt_finalize_executable(LogDoctorInstaller)

View File

@ -1,8 +1,12 @@
#include "mainwindow.h"
#include <QApplication>
#if !(defined( Q_OS_LINUX ) || defined( Q_OS_BSD4 ) || defined( Q_OS_WINDOWS ) || defined( Q_OS_MACOS ))
# error "System not supported"
#endif
#include "mainwindow.h"
int main(int argc, char *argv[])
{

View File

@ -7,12 +7,22 @@
#include <QFontDatabase>
#if defined( Q_OS_LINUX ) || defined( Q_OS_BSD4 )// || defined( Q_OS_MACOS )
#include <unistd.h>
#include <pwd.h>
#endif
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->ui->setupUi(this);
#if defined( Q_OS_MACOS )
this->ui->checkBox_MenuEntry->setChecked(false);
this->ui->checkBox_MenuEntry->setCheckable(false);
this->ui->checkBox_MenuEntry->setEnabled(false);
#endif
// load the font
const QString font_family = QFontDatabase::applicationFontFamilies(
@ -66,11 +76,9 @@ MainWindow::MainWindow(QWidget *parent)
}
MainWindow::~MainWindow()
void MainWindow::on_button_Close_clicked()
{
delete this->ui;
delete this->waiter_timer;
delete this->installer_timer;
this->close();
}
@ -203,14 +211,12 @@ void MainWindow::on_checkBox_MenuEntry_toggled(bool checked)
void MainWindow::startInstalling()
{
this->installing = true;
delete this->waiter_timer;
this->waiter_timer = new QTimer(this);
connect(this->waiter_timer, SIGNAL(timeout()), this, SLOT(checkInstallProgress()));
this->waiter_timer.reset( new QTimer(this) );
connect(this->waiter_timer.get(), &QTimer::timeout, this, &MainWindow::checkInstallProgress);
// worker
delete this->installer_timer;
this->installer_timer = new QTimer(this);
this->installer_timer.reset( new QTimer(this) );
this->installer_timer->setSingleShot( true );
connect(this->installer_timer, SIGNAL(timeout()), this, SLOT(Install()));
connect(this->installer_timer.get(), &QTimer::timeout, this, &MainWindow::Install);
// run
this->waiter_timer->start(250);
this->installer_timer->start(250);
@ -226,7 +232,7 @@ void MainWindow::checkInstallProgress()
void MainWindow::Install()
{
bool ok = true;
bool ok{ true };
this->ui->progressBar_Install->setValue( 0 );
this->ui->label_Install_Info->setText( MainWindow::tr( "Checking the executable path ..." ) );
@ -274,27 +280,31 @@ void MainWindow::Install()
}
}
if ( ok && this->OS != 3 ) { // mac .app contains it
this->ui->progressBar_Install->setValue( 85 );
this->ui->label_Install_Info->setText( MainWindow::tr( "Copying the uninstaller ..." ) );
// move the uninstaller
ok = this->copyUninstaller();
}
#if !defined( Q_OS_MACOS ) && (defined( Q_OS_LINUX ) || defined( Q_OS_BSD4 ))
if ( ok ) { // OSX app bundle contains it, Windows copyed it already
this->ui->progressBar_Install->setValue( 85 );
this->ui->label_Install_Info->setText( MainWindow::tr( "Copying the uninstaller ..." ) );
// move the uninstaller
ok = this->copyUninstaller();
}
#endif
}
if ( ok && this->OS != 3 ) { // mac .app contains these
this->ui->progressBar_Install->setValue( 90 );
this->ui->label_Install_Info->setText( MainWindow::tr( "Copying the icon ..." ) );
// move the icon
ok = this->copyIcon();
#if !defined( Q_OS_MACOS )
if ( ok ) { // mac .app contains these
this->ui->progressBar_Install->setValue( 90 );
this->ui->label_Install_Info->setText( MainWindow::tr( "Copying the icon ..." ) );
// move the icon
ok = this->copyIcon();
// make the menu entry
if ( ok && this->make_menu_entry ) {
this->ui->progressBar_Install->setValue( 95 );
this->ui->label_Install_Info->setText( MainWindow::tr( "Creating the menu entry ..." ) );
ok = this->makeMenuEntry();
// make the menu entry
if ( ok && this->make_menu_entry ) {
this->ui->progressBar_Install->setValue( 95 );
this->ui->label_Install_Info->setText( MainWindow::tr( "Creating the menu entry ..." ) );
ok = this->makeMenuEntry();
}
}
}
#endif
// proocess finished
if ( ok ) {
@ -317,47 +327,30 @@ void MainWindow::Install()
///////////////////
bool MainWindow::checkExecutablePath()
{
bool ok = true;
bool ok{ true };
std::error_code err;
if ( ! std::filesystem::exists( this->exec_path ) ) {
this->ui->progressBar_Install->setValue( 10 );
// path does not exists
if ( this->OS != 2 ) {
// on unix/mac. path is (supposedly) always present
ok = false;
DialogMsg dialog = DialogMsg(
MainWindow::tr( "Installation failed" ),
QString("%1:\n%2").arg(
MainWindow::tr( "The path does not exist" ),
QString::fromStdString( this->exec_path.string() ) ),
QString::fromStdString( err.message() ), 2, nullptr );
std::ignore = dialog.exec();
} else {
// on windows. must create the new folder
ok = std::filesystem::create_directory( this->exec_path, err );
if ( !ok ) {
// failed to create
DialogMsg dialog = DialogMsg(
MainWindow::tr( "Installation failed" ),
QString("%1:\n%2").arg(
MainWindow::tr( "Failed to create the directory" ),
QString::fromStdString( this->exec_path.string() ) ),
QString::fromStdString( err.message() ), 2, nullptr );
std::ignore = dialog.exec();
}
}
// base executable path does not exists
ok = false;
DialogMsg dialog(
MainWindow::tr( "Installation failed" ),
QString("%1:\n%2").arg(
MainWindow::tr( "The path does not exist" ),
QString::fromStdString( this->exec_path.string() ) ),
QString::fromStdString( err.message() ), 2, nullptr );
std::ignore = dialog.exec();
} else {
this->ui->progressBar_Install->setValue( 5 );
// path exists
if ( this->OS == 1 ) {
// on unix. check if the executable already exists
const std::filesystem::path path = this->exec_path.string() + "/logdoctor";
#if !defined( Q_OS_MACOS ) && (defined( Q_OS_LINUX ) || defined( Q_OS_BSD4 ))
// check if the executable already exists
const std::filesystem::path path{ this->exec_path / "logdoctor" };
if ( std::filesystem::exists( path ) ) {
// an entry already exists, ask to overwrite it
{
DialogBool dialog = DialogBool(
DialogBool dialog(
MainWindow::tr( "Conflict" ),
QString("%1:\n%2\n\n%3").arg(
(std::filesystem::is_regular_file( path ))
@ -375,7 +368,7 @@ bool MainWindow::checkExecutablePath()
ok = ! std::filesystem::exists( path );
if ( !ok ) {
// failed to remove
DialogMsg dialog = DialogMsg(
DialogMsg dialog(
MainWindow::tr( "Installation failed" ),
QString("%1:\n%2").arg(
MainWindow::tr( "Failed to remove the entry" ),
@ -385,15 +378,15 @@ bool MainWindow::checkExecutablePath()
}
}
}
} else {
#else
// on windows/mac
if ( ! std::filesystem::is_directory( this->exec_path ) ) {
// not a directory, ask to overwrite it
{
DialogBool dialog = DialogBool(
DialogBool dialog(
MainWindow::tr( "Conflict" ),
QString("%1:\n%2\n\n%3").arg(
MainWindow::tr( "An entry with the same name already exists" ),
MainWindow::tr( "An entry with the same name already exists, but it's not a directory" ),
QString::fromStdString( this->exec_path.string() ),
MainWindow::tr( "If you choose to proceed, it will be overwritten\nContinue?" ) ),
nullptr );
@ -401,10 +394,11 @@ bool MainWindow::checkExecutablePath()
}
if ( ok ) {
// agreed on overwriting the entry
ok = std::filesystem::remove( this->exec_path, err );
std::ignore = std::filesystem::remove_all( this->exec_path, err );
ok = ! std::filesystem::exists( this->exec_path );
if ( !ok ) {
// failed to remove
DialogMsg dialog = DialogMsg(
DialogMsg dialog(
MainWindow::tr( "Installation failed" ),
QString("%1:\n%2").arg(
MainWindow::tr( "Failed to remove the entry" ),
@ -417,7 +411,7 @@ bool MainWindow::checkExecutablePath()
ok = std::filesystem::create_directory( this->exec_path, err );
if ( !ok ) {
// failed to create
DialogMsg dialog = DialogMsg(
DialogMsg dialog(
MainWindow::tr( "Installation failed" ),
QString("%1:\n%2").arg(
MainWindow::tr( "Failed to create the directory" ),
@ -430,47 +424,43 @@ bool MainWindow::checkExecutablePath()
} else {
this->ui->progressBar_Install->setValue( 5 );
// installation altready exists, check the executable
const std::string ext = (this->OS==2) ? ".exe" : ".app";
std::vector<std::string> names = {"/LogDoctor","/uninstall"};
if ( this->OS == 3 ) {
names.pop_back();
}
for ( const auto& name : names ) {
const std::filesystem::path path = this->exec_path.string() + name + ext;
if ( std::filesystem::exists( path ) ) {
// an entry already exists, ask to overwrite it
{
DialogBool dialog = DialogBool(
MainWindow::tr( "Conflict" ),
QString("%1:\n%2\n\n%3").arg(
(std::filesystem::is_regular_file( path ))
? MainWindow::tr( "An executable already exists" )
: MainWindow::tr( "An entry with the same name already exists" ),
QString::fromStdString( path.string() ),
MainWindow::tr( "If you choose to proceed, it will be overwritten\nContinue?" ) ),
nullptr );
ok = dialog.exec();
}
if ( ok ) {
// agreed on overwriting the entry
std::ignore = std::filesystem::remove_all( path, err );
ok = ! std::filesystem::exists( path );
if ( !ok ) {
// failed to remove
DialogMsg dialog = DialogMsg(
MainWindow::tr( "Installation failed" ),
QString("%1:\n%2").arg(
MainWindow::tr( "Failed to remove the entry" ),
QString::fromStdString( this->exec_path.string() ) ),
QString::fromStdString( err.message() ), 2, nullptr );
std::ignore = dialog.exec();
break;
}
#if defined( Q_OS_WINDOWS )
const std::filesystem::path path{ this->exec_path / "LogDoctor" };
#elif defined( Q_OS_MACOS )
const std::filesystem::path path{ this->exec_path / "LogDoctor.app" };
#endif
if ( std::filesystem::exists( path ) ) {
// an entry already exists, ask to overwrite it
{
DialogBool dialog(
MainWindow::tr( "Conflict" ),
QString("%1:\n%2\n\n%3").arg(
(std::filesystem::is_regular_file( path ))
? MainWindow::tr( "Installation path already exists" )
: MainWindow::tr( "An entry with the same name already exists" ),
QString::fromStdString( path.string() ),
MainWindow::tr( "If you choose to proceed, it will be overwritten\nContinue?" ) ),
nullptr );
ok = dialog.exec();
}
if ( ok ) {
// agreed on overwriting the entry
std::ignore = std::filesystem::remove_all( path, err );
ok = ! std::filesystem::exists( path );
if ( !ok ) {
// failed to remove
DialogMsg dialog(
MainWindow::tr( "Installation failed" ),
QString("%1:\n%2").arg(
MainWindow::tr( "Failed to remove the entry" ),
QString::fromStdString( path.string() ) ),
QString::fromStdString( err.message() ), 2, nullptr );
std::ignore = dialog.exec();
}
}
}
}
}
#endif
}
return ok;
}
@ -478,16 +468,19 @@ bool MainWindow::checkExecutablePath()
bool MainWindow::checkConfigsPath()
{
bool ok = true;
bool ok{ true };
std::error_code err;
if ( ! std::filesystem::exists( this->conf_path ) ) {
this->ui->progressBar_Install->setValue( 25 );
// path does not exists, create it
ok = std::filesystem::create_directory( this->conf_path, err );
if ( !ok ) {
if ( ok ) {
// will copy the new file
this->overwrite_conf_file = true;
} else {
// failed to create
DialogMsg dialog = DialogMsg(
DialogMsg dialog(
MainWindow::tr( "Installation failed" ),
QString("%1:\n%2").arg(
MainWindow::tr( "Failed to create the directory" ),
@ -501,7 +494,7 @@ bool MainWindow::checkConfigsPath()
if ( !std::filesystem::is_directory( this->conf_path ) ) {
// not a directory, ask to overwrite it
{
DialogBool dialog = DialogBool(
DialogBool dialog(
MainWindow::tr( "Conflict" ),
QString("%1:\n%2\n\n%3").arg(
MainWindow::tr( "An entry with the same name already exists" ),
@ -515,7 +508,7 @@ bool MainWindow::checkConfigsPath()
ok = std::filesystem::remove( this->conf_path, err );
if ( !ok ) {
// failed to remove
DialogMsg dialog = DialogMsg(
DialogMsg dialog(
MainWindow::tr( "Installation failed" ),
QString("%1:\n%2").arg(
MainWindow::tr( "Failed to remove the entry" ),
@ -528,7 +521,7 @@ bool MainWindow::checkConfigsPath()
ok = std::filesystem::create_directory( this->conf_path, err );
if ( !ok ) {
// failed to create
DialogMsg dialog = DialogMsg(
DialogMsg dialog(
MainWindow::tr( "Installation failed" ),
QString("%1:\n%2").arg(
MainWindow::tr( "Failed to create the directory" ),
@ -541,11 +534,11 @@ bool MainWindow::checkConfigsPath()
} else {
this->ui->progressBar_Install->setValue( 20 );
// is a directory: probably an installation already exists, check if a cofiguration file is present
const std::filesystem::path path = this->conf_path.string() + "/logdoctor.conf";
const std::filesystem::path path{ this->conf_path / "logdoctor.conf" };
if ( std::filesystem::exists( path ) ) {
// a configuration file already exists, ask to overwrite it or not
{
DialogBool dialog = DialogBool(
DialogBool dialog(
MainWindow::tr( "Conflict" ),
QString("%1:\n%2\n\n%3").arg(
(std::filesystem::is_regular_file( path ))
@ -554,10 +547,7 @@ bool MainWindow::checkConfigsPath()
QString::fromStdString( path.string() ),
MainWindow::tr( "It's suggested to renew it, but you can keep it by answering 'No'\nOverwrite the file?" ) ),
nullptr );
const bool choice = dialog.exec();
if ( choice ) {
this->overwrite_conf_file = true;
}
this->overwrite_conf_file = dialog.exec();
}
if ( this->overwrite_conf_file ) {
this->ui->progressBar_Install->setValue( 25 );
@ -566,7 +556,7 @@ bool MainWindow::checkConfigsPath()
ok = ! std::filesystem::exists( path );
if ( !ok ) {
// failed to remove
DialogMsg dialog = DialogMsg(
DialogMsg dialog(
MainWindow::tr( "Installation failed" ),
QString("%1:\n%2").arg(
MainWindow::tr( "Failed to remove the entry" ),
@ -587,7 +577,7 @@ bool MainWindow::checkConfigsPath()
bool MainWindow::checkAppdataPath()
{
bool ok = true;
bool ok{ true };
std::error_code err;
if ( !std::filesystem::exists( this->data_path ) ) {
@ -596,7 +586,7 @@ bool MainWindow::checkAppdataPath()
ok = std::filesystem::create_directory( this->data_path, err );
if ( !ok ) {
// failed to create
DialogMsg dialog = DialogMsg(
DialogMsg dialog(
MainWindow::tr( "Installation failed" ),
QString("%1:\n%2").arg(
MainWindow::tr( "Failed to create the directory" ),
@ -610,7 +600,7 @@ bool MainWindow::checkAppdataPath()
if ( !std::filesystem::is_directory( this->data_path ) ) {
// not a directory
{
DialogBool dialog = DialogBool(
DialogBool dialog(
MainWindow::tr( "Conflict" ),
QString("%1:\n%2\n\n%3").arg(
MainWindow::tr( "An entry with the same name already exists" ),
@ -625,7 +615,7 @@ bool MainWindow::checkAppdataPath()
ok = ! std::filesystem::exists( this->data_path );
if ( !ok ) {
// failed to remove
DialogMsg dialog = DialogMsg(
DialogMsg dialog(
MainWindow::tr( "Installation failed" ),
QString("%1:\n%2").arg(
MainWindow::tr( "Failed to remove the entry" ),
@ -638,7 +628,7 @@ bool MainWindow::checkAppdataPath()
ok = std::filesystem::create_directory( this->data_path, err );
if ( !ok ) {
// failed to create
DialogMsg dialog = DialogMsg(
DialogMsg dialog(
MainWindow::tr( "Installation failed" ),
QString("%1:\n%2").arg(
MainWindow::tr( "Failed to create the directory" ),
@ -650,8 +640,17 @@ bool MainWindow::checkAppdataPath()
}
} else {
// is a directory: probably an installation already exists
{
DialogBool dialog = DialogBool(
#if defined( Q_OS_MACOS )
const std::vector<std::filesystem::path> paths{
this->data_path / "help" };
#else
const std::vector<std::filesystem::path> paths{
this->data_path / "help",
this->data_path / "licenses" }; // OSX app bundle already contains it
#endif
// check if the data path contains any of the entries
if ( std::any_of( paths.cbegin(), paths.cend(), [](const auto& p){return std::filesystem::exists(p);} ) ) {
DialogBool dialog(
MainWindow::tr( "Conflict" ),
QString("%1:\n%2\n\n%3").arg(
MainWindow::tr( "A directory already exists for the application data" ),
@ -663,23 +662,18 @@ bool MainWindow::checkAppdataPath()
if ( ok ) {
this->ui->progressBar_Install->setValue( 40 );
// agreed on overwriting content, remove it
std::vector<std::filesystem::path> paths = {
this->data_path.string() + "/help" };
if ( this->OS != 3 ) { // mac .app already contains it
paths.push_back( this->data_path.string() + "/licenses" );
}
for ( const auto& path : paths ) {
// remove the entries
if ( !std::filesystem::exists( path ) ) {
if ( std::filesystem::exists( path ) ) {
std::ignore = std::filesystem::remove_all( path, err );
ok = ! std::filesystem::exists( path );
if ( !ok ) {
// failed to remove
DialogMsg dialog = DialogMsg(
DialogMsg dialog(
MainWindow::tr( "Installation failed" ),
QString("%1:\n%2").arg(
MainWindow::tr( "Failed to remove the entry" ),
QString::fromStdString( this->data_path.string() ) ),
QString::fromStdString( path.string() ) ),
QString::fromStdString( err.message() ), 2, nullptr );
std::ignore = dialog.exec();
break;
@ -695,39 +689,45 @@ bool MainWindow::checkAppdataPath()
bool MainWindow::copyExecutable()
{
bool ok = true;
bool ok{ true };
std::error_code err;
std::string exec_name;
switch ( this->OS ) {
case 1:
exec_name = "logdoctor"; break;
case 2:
exec_name = "LogDoctor.exe"; break;
case 3:
exec_name = "LogDoctor.app"; break;
default:
throw( "LogDoctor: copyExecutable(): Unexpected OS: "[this->OS] );
}
#if defined( Q_OS_MACOS )
const std::filesystem::path src_path{ std::filesystem::canonical("./LogDoctor.app") };
const std::filesystem::path dst_path{ this->exec_path / "LogDoctor.app" };
#elif defined( Q_OS_WINDOWS )
const std::filesystem::path src_path{ std::filesystem::canonical("../LogDoctor").make_preferred() };
const std::filesystem::path dst_path{ this->exec_path / "LogDoctor" };
#elif defined( Q_OS_LINUX ) || defined( Q_OS_BSD4 )
const std::filesystem::path src_path{ "logdoctor" };
const std::filesystem::path dst_path{ this->exec_path / "logdoctor" };
#endif
const std::filesystem::path src_path = "installation_stuff/"+exec_name;
const std::filesystem::path dst_path = this->exec_path.string()+"/"+exec_name;
if ( this->OS == 3 ) {
#if defined( Q_OS_MACOS ) || defined( Q_OS_WINDOWS )
std::filesystem::copy( src_path, dst_path, std::filesystem::copy_options::overwrite_existing | std::filesystem::copy_options::recursive, err );
if ( err.value() != 0 ) {
if ( err ) {
ok = false;
}
} else {
#if defined( Q_OS_WINDOWS )
else {
// remove the installer
std::error_code _;
const std::filesystem::path installer_path{ dst_path / "install.exe" };
std::ignore = std::filesystem::remove( installer_path, _ ); // no need to abort the installation in case of failure
}
#endif
#else
ok = std::filesystem::copy_file( src_path, dst_path, std::filesystem::copy_options::overwrite_existing, err );
}
#endif
if ( !ok ) {
// failed to copy
DialogMsg dialog = DialogMsg(
DialogMsg dialog(
MainWindow::tr( "Installation failed" ),
QString("%1:\n%2").arg(
QString("%1:\n%2\n\n%3:\n%4").arg(
MainWindow::tr( "Failed to copy the resource" ),
QString::fromStdString( src_path.string() ),
MainWindow::tr( "To destination path" ),
QString::fromStdString( dst_path.string() ) ),
QString::fromStdString( err.message() ), 2, nullptr );
std::ignore = dialog.exec();
@ -740,26 +740,23 @@ bool MainWindow::copyExecutable()
std::filesystem::permissions( dst_path, std::filesystem::perms::group_all, std::filesystem::perm_options::remove );
std::filesystem::permissions( dst_path, std::filesystem::perms::group_read, std::filesystem::perm_options::add );
std::filesystem::permissions( dst_path, std::filesystem::perms::others_all, std::filesystem::perm_options::remove );
switch ( this->OS ) {
case 1:
// 7 5 5
std::filesystem::permissions( dst_path, std::filesystem::perms::others_exec, std::filesystem::perm_options::add );
case 3:
// 7 5 4
std::filesystem::permissions( dst_path, std::filesystem::perms::group_exec, std::filesystem::perm_options::add );
std::filesystem::permissions( dst_path, std::filesystem::perms::others_read, std::filesystem::perm_options::add );
break;
case 2:
// rw r -
break;
default:
throw( "LogDoctor: copyExecutable(): Unexpected OS: "[this->OS] );
}
#if defined( Q_OS_MACOS )
// 7 5 4
std::filesystem::permissions( dst_path, std::filesystem::perms::group_exec, std::filesystem::perm_options::add );
std::filesystem::permissions( dst_path, std::filesystem::perms::others_read, std::filesystem::perm_options::add );
#elif defined( Q_OS_LINUX ) || defined( Q_OS_BSD4 )
// 7 5 5
std::filesystem::permissions( dst_path, std::filesystem::perms::group_exec, std::filesystem::perm_options::add );
std::filesystem::permissions( dst_path, std::filesystem::perms::others_read, std::filesystem::perm_options::add );
std::filesystem::permissions( dst_path, std::filesystem::perms::others_exec, std::filesystem::perm_options::add );
#elif defined( Q_OS_WINDOWS )
// rw r -
#endif
} catch (...) {
ok = false;
// failed set permissions
DialogMsg dialog = DialogMsg(
DialogMsg dialog(
MainWindow::tr( "Installation failed" ),
QString("%1:\n%2").arg(
MainWindow::tr( "Failed to assign permissions to the resource" ),
@ -774,48 +771,79 @@ bool MainWindow::copyExecutable()
bool MainWindow::copyConfigfile()
{
bool ok = true;
bool ok{ true };
std::error_code err;
const std::filesystem::path src_path = "installation_stuff/logdoctor.conf";
const std::filesystem::path dst_path = this->conf_path.string()+"/logdoctor.conf";
#if defined( Q_OS_WINDOWS )
const std::filesystem::path src_path{ std::filesystem::canonical("../logdoctor.conf").make_preferred() };
#else
const std::filesystem::path src_path{ std::filesystem::canonical("./logdoctor.conf") };
#endif
const std::filesystem::path dst_path{ this->conf_path / "logdoctor.conf" };
ok = std::filesystem::copy_file( src_path, dst_path, std::filesystem::copy_options::overwrite_existing, err );
if ( !ok ) {
// failed to move
DialogMsg dialog = DialogMsg(
DialogMsg dialog(
MainWindow::tr( "Installation failed" ),
QString("%1:\n%2").arg(
QString("%1:\n%2\n\n%3:\n%4").arg(
MainWindow::tr( "Failed to copy the resource" ),
QString::fromStdString( src_path.string() ),
MainWindow::tr( "To destination path" ),
QString::fromStdString( dst_path.string() ) ),
QString::fromStdString( err.message() ), 2, nullptr );
std::ignore = dialog.exec();
}
#if defined( Q_OS_LINUX ) || defined( Q_OS_BSD4 )// || defined( Q_OS_MACOS )
else {
const passwd* p{ getpwnam(this->user_name.c_str()) };
if ( chown( dst_path.c_str(), p->pw_uid, p->pw_gid ) != 0 ) {
ok = false;
DialogMsg dialog(
MainWindow::tr( "Installation failed" ),
QString("%1:\n%2").arg(
MainWindow::tr( "Failed to change the owner of the resource" ),
QString::fromStdString( dst_path.string() ) ),
QString::fromStdString( err.message() ), 2, nullptr );
std::ignore = dialog.exec();
}
}
#endif
return ok;
}
bool MainWindow::copyResources()
{
bool ok = true;
bool ok{ true };
std::error_code err;
std::vector<std::string> names = { "help" };
if ( this->OS != 3 ) { // mac .app already contains it
names.push_back( "licenses" );
}
#if defined( Q_OS_MACOS )
const std::vector<std::string> names{
"help" };
#else
const std::vector<std::string> names{
"help",
"licenses" }; // mac .app already contains it
#endif
for ( const auto& name : names ) {
// remove the entries
const std::filesystem::path src_path = "installation_stuff/logdocdata/"+name;
const std::filesystem::path dst_path = this->data_path.string()+"/"+name;
#if defined( Q_OS_WINDOWS )
const std::filesystem::path src_path{ std::filesystem::canonical("../logdocdata").make_preferred() / name };
#else
const std::filesystem::path src_path{ std::filesystem::canonical("logdocdata") / name };
#endif
const std::filesystem::path dst_path{ this->data_path / name };
std::filesystem::copy( src_path, dst_path, std::filesystem::copy_options::overwrite_existing | std::filesystem::copy_options::recursive, err );
if ( err.value() != 0 ) {
// failed to move
ok = false;
DialogMsg dialog = DialogMsg(
DialogMsg dialog(
MainWindow::tr( "Installation failed" ),
QString("%1:\n%2").arg(
QString("%1:\n%2\n\n%3:\n%4").arg(
MainWindow::tr( "Failed to copy the resource" ),
QString::fromStdString( src_path.string() ),
MainWindow::tr( "To destination path" ),
QString::fromStdString( dst_path.string() ) ),
QString::fromStdString( err.message() ), 2, nullptr );
std::ignore = dialog.exec();
@ -826,33 +854,25 @@ bool MainWindow::copyResources()
}
#if !defined( Q_OS_MACOS )
#if defined( Q_OS_LINUX ) || defined( Q_OS_BSD4 )
bool MainWindow::copyUninstaller()
{
bool ok = true;
bool ok{ true };
std::error_code err;
std::filesystem::path src_path;
std::filesystem::path dst_path;
switch ( this->OS ) {
case 1:
src_path = "installation_stuff/uninstall";
dst_path = this->data_path.string()+"/uninstall";
break;
case 2:
src_path = "installation_stuff/uninstall.exe";
dst_path = this->exec_path.string()+"/uninstall.exe";
break;
default:
throw( "LogDoctor: copyUninstaller(): Unexpected OS: "[this->OS] );
}
const std::filesystem::path src_path{ "uninstall" };
const std::filesystem::path dst_path{ this->data_path / "uninstall" };
ok = std::filesystem::copy_file( src_path, dst_path, std::filesystem::copy_options::overwrite_existing, err );
if ( !ok ) {
// failed to copy
DialogMsg dialog = DialogMsg(
DialogMsg dialog(
MainWindow::tr( "Installation failed" ),
QString("%1:\n%2").arg(
QString("%1:\n%2\n\n%3:\n%4").arg(
MainWindow::tr( "Failed to copy the resource" ),
QString::fromStdString( src_path.string() ),
MainWindow::tr( "To destination path" ),
QString::fromStdString( dst_path.string() ) ),
QString::fromStdString( err.message() ), 2, nullptr );
std::ignore = dialog.exec();
@ -860,27 +880,19 @@ bool MainWindow::copyUninstaller()
} else {
// set permissions
try {
// 7 5 5
std::filesystem::permissions( dst_path, std::filesystem::perms::owner_all, std::filesystem::perm_options::add );
std::filesystem::permissions( dst_path, std::filesystem::perms::group_all, std::filesystem::perm_options::remove );
std::filesystem::permissions( dst_path, std::filesystem::perms::group_read, std::filesystem::perm_options::add );
std::filesystem::permissions( dst_path, std::filesystem::perms::others_all, std::filesystem::perm_options::remove );
switch ( this->OS ) {
case 1:
// 7 5 4
std::filesystem::permissions( dst_path, std::filesystem::perms::group_exec, std::filesystem::perm_options::add );
std::filesystem::permissions( dst_path, std::filesystem::perms::others_read, std::filesystem::perm_options::add );
break;
case 2:
// rw r -
break;
default:
throw( "LogDoctor: copyUninstaller(): Unexpected OS: "[this->OS] );
}
std::filesystem::permissions( dst_path, std::filesystem::perms::group_exec, std::filesystem::perm_options::add );
std::filesystem::permissions( dst_path, std::filesystem::perms::others_read, std::filesystem::perm_options::add );
std::filesystem::permissions( dst_path, std::filesystem::perms::others_exec, std::filesystem::perm_options::add );
} catch (...) {
ok = false;
// failed set permissions
DialogMsg dialog = DialogMsg(
DialogMsg dialog(
MainWindow::tr( "Installation failed" ),
QString("%1:\n%2").arg(
MainWindow::tr( "Failed to assign permissions to the resource" ),
@ -891,35 +903,33 @@ bool MainWindow::copyUninstaller()
}
return ok;
}
#endif // defined( Q_OS_LINUX ) || defined( Q_OS_BSD4 )
bool MainWindow::copyIcon()
{
bool ok = true;
bool ok{ true };
std::error_code err;
const std::filesystem::path src_path = "installation_stuff/LogDoctor.svg";
std::filesystem::path dst_path;
switch ( this->OS ) {
case 1:
// unix
dst_path = "/usr/share/LogDoctor/LogDoctor.svg";
break;
case 2:
// windows
dst_path = this->exec_path.string() + "/LogDoctor.svg";
break;
default:
throw( "LogDoctor: copyIcon(): Unexpected OS: "[this->OS] );
}
#if defined( Q_OS_LINUX ) || defined( Q_OS_BSD4 )
const std::filesystem::path src_path{ std::filesystem::canonical("LogDoctor.svg") };
const std::filesystem::path dst_path{ "/usr/share/LogDoctor/LogDoctor.svg" };
#elif defined( Q_OS_WINDOWS )
const std::filesystem::path src_path{ std::filesystem::canonical("../LogDoctor.svg").make_preferred() };
const std::filesystem::path dst_path{ this->exec_path / "LogDoctor" / "LogDoctor.svg" };
#else
throw( "LogDoctor: copyIcon(): Unexpected OS" );
#endif
ok = std::filesystem::copy_file( src_path, dst_path, std::filesystem::copy_options::overwrite_existing, err );
if ( !ok ) {
// failed
DialogMsg dialog = DialogMsg(
DialogMsg dialog(
MainWindow::tr( "Installation failed" ),
QString("%1:\n%2").arg(
QString("%1:\n%2\n\n%3:\n%4").arg(
MainWindow::tr( "Failed to copy the resource" ),
QString::fromStdString( src_path.string() ),
MainWindow::tr( "To destination path" ),
QString::fromStdString( dst_path.string() ) ),
QString::fromStdString( err.message() ), 2, nullptr );
std::ignore = dialog.exec();
@ -930,44 +940,39 @@ bool MainWindow::copyIcon()
bool MainWindow::makeMenuEntry()
{
bool ok = true;
bool ok{ true };
std::error_code err;
std::filesystem::path src_path;
std::filesystem::path dst_path;
switch ( this->OS ) {
case 1:
// unix
src_path = "installation_stuff/LogDoctor.desktop";
dst_path = this->home_path+"/.local/share/applications/LogDoctor.desktop";
ok = std::filesystem::copy_file( src_path, dst_path, std::filesystem::copy_options::overwrite_existing, err );
break;
case 2:
// windows
src_path = this->exec_path.string()+"/LogDoctor.exe";
dst_path = this->home_path.substr(0,2) + "/ProgramData/Microsoft/Windows/Start Menu/Programs/LogDoctor.exe";
if ( std::filesystem::exists( dst_path ) ) {
// an old entry already exists, remove it
std::ignore = std::filesystem::remove( dst_path, err );
ok = ! std::filesystem::exists( dst_path );
#if defined( Q_OS_LINUX )
const std::filesystem::path src_path{ "LogDoctor.desktop" };
const std::filesystem::path dst_path{ "/usr/share/applications/LogDoctor.desktop" };
ok = std::filesystem::copy_file( src_path, dst_path, std::filesystem::copy_options::overwrite_existing, err );
#elif defined( Q_OS_BSD4 )
const std::filesystem::path src_path{ "LogDoctor.desktop" };
const std::filesystem::path dst_path{ "/usr/local/share/applications/LogDoctor.desktop" };
ok = std::filesystem::copy_file( src_path, dst_path, std::filesystem::copy_options::overwrite_existing, err );
#elif defined( Q_OS_WINDOWS )
const std::filesystem::path src_path{ this->exec_path / "LogDoctor" / "LogDoctor.exe" };
const std::filesystem::path dst_path{ std::filesystem::path{this->home_path.substr(0,2) + "/ProgramData/Microsoft/Windows/Start Menu/Programs/LogDoctor.exe"}.make_preferred() };
if ( std::filesystem::exists( dst_path ) ) {
// an old entry already exists, remove it
std::ignore = std::filesystem::remove( dst_path, err );
ok = ! std::filesystem::exists( dst_path );
}
if ( ok ) {
std::filesystem::create_symlink( src_path, dst_path, err );
if ( !std::filesystem::exists( dst_path ) ) {
// failed to create
ok = false;
}
if ( ok ) {
std::filesystem::create_symlink( src_path, dst_path, err );
if ( !std::filesystem::exists( dst_path ) ) {
// failed to create
ok = false;
}
}
break;
default:
throw( "LogDoctor: makeMenuEntry(): Unexpected OS: "[this->OS] );
}
}
#else
throw( "LogDoctor: makeMenuEntry(): Unexpected OS" );
#endif
if ( !ok ) {
// failed
DialogMsg dialog = DialogMsg(
DialogMsg dialog(
MainWindow::tr( "Error" ),
QString("%1:\n%2").arg(
MainWindow::tr( "Failed to create the menu entry" ),
@ -977,12 +982,4 @@ bool MainWindow::makeMenuEntry()
}
return ok;
}
void MainWindow::on_button_Close_clicked()
{
this->close();
}
#endif

View File

@ -20,8 +20,7 @@ class MainWindow : public QMainWindow
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
explicit MainWindow(QWidget *parent = nullptr);
private slots:
@ -53,37 +52,33 @@ private slots:
void on_button_Close_clicked();
private:
Ui::MainWindow *ui;
QSharedPointer<Ui::MainWindow> ui;
// operating system
const std::string cleanPath( const QString& path );
// 1: linux, 2:windows, 3:mac
const std::string home_path = this->cleanPath( QStandardPaths::locate( QStandardPaths::HomeLocation, "", QStandardPaths::LocateDirectory ) );
#if defined( Q_OS_DARWIN )
// Darwin-based systems: macOS, macOS, iOS, watchOS and tvOS.
const unsigned int OS = 3;
const std::filesystem::path exec_path = "/Applications";
const std::filesystem::path conf_path = home_path + "/Lybrary/Preferences/LogDoctor";
const std::filesystem::path data_path = home_path + "/Lybrary/Application Support/LogDoctor";
#elif defined( Q_OS_WIN )
// Microsoft Windows systems
const unsigned int OS = 2;
const std::filesystem::path exec_path = home_path.substr(0,2) + "/Program Files/LogDoctor";
const std::filesystem::path conf_path = home_path + "/AppData/Local/LogDoctor";
const std::filesystem::path data_path = home_path + "/AppData/Local/LogDoctor";
#elif defined( Q_OS_UNIX )
// Unix-like systems: Linux, BSD and SysV
const unsigned int OS = 1;
const std::filesystem::path exec_path = "/usr/bin";
const std::filesystem::path conf_path = home_path + "/.config/LogDoctor";
const std::filesystem::path data_path = "/usr/share/LogDoctor";
const std::string home_path{ this->cleanPath( QStandardPaths::locate( QStandardPaths::HomeLocation, "", QStandardPaths::LocateDirectory ) ) };
#if defined( Q_OS_MACOS )
const std::filesystem::path exec_path{ "/Applications" };
const std::filesystem::path conf_path{ home_path + "/Lybrary/Preferences/LogDoctor" };
const std::filesystem::path data_path{ home_path + "/Lybrary/Application Support/LogDoctor" };
const std::string user_name{ home_path.substr(7ul) };
#elif defined( Q_OS_WINDOWS )
const std::filesystem::path exec_path{ std::filesystem::path{home_path.substr(0,2) + "/Program Files"}.make_preferred() };
const std::filesystem::path conf_path{ std::filesystem::path{home_path + "/AppData/Local/LogDoctor"}.make_preferred() };
const std::filesystem::path data_path{ std::filesystem::path{home_path + "/AppData/Local/LogDoctor"}.make_preferred() };
#elif defined( Q_OS_LINUX ) || defined( Q_OS_BSD4 )
const std::filesystem::path exec_path{ "/usr/bin" };
const std::filesystem::path conf_path{ home_path + "/.config/LogDoctor" };
const std::filesystem::path data_path{ "/usr/share/LogDoctor" };
const std::string user_name{ home_path.substr(6ul) };
#else
#error "System not supported"
#endif
// language
QTranslator translator;
std::string language = "en";
std::string language{ "en" };
void updateUiLanguage();
// fonts
@ -97,12 +92,12 @@ private:
// work related
int step;
bool make_menu_entry = true;
bool make_menu_entry{ true };
// install
QTimer* waiter_timer = new QTimer();
QTimer* installer_timer = new QTimer();
QScopedPointer<QTimer> waiter_timer;
QScopedPointer<QTimer> installer_timer;
bool installing;
bool overwrite_conf_file = false;
bool overwrite_conf_file{ false };
void startInstalling();
bool checkExecutablePath();
@ -111,9 +106,13 @@ private:
bool copyExecutable();
bool copyConfigfile();
bool copyResources();
bool copyUninstaller();
bool copyIcon();
bool makeMenuEntry();
#if !defined( Q_OS_MACOS )
#if defined( Q_OS_LINUX ) || defined( Q_OS_BSD4 )
bool copyUninstaller();
#endif
bool copyIcon();
bool makeMenuEntry();
#endif
};
#endif // MAINWINDOW_H

View File

@ -1019,6 +1019,12 @@
<addaction name="menuLanguage"/>
</widget>
<action name="actionEnglish">
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="icon">
<iconset resource="resources/resources.qrc">
<normaloff>:/flags/flags/en.png</normaloff>:/flags/flags/en.png</iconset>
@ -1031,6 +1037,9 @@
</property>
</action>
<action name="actionEspanol">
<property name="checkable">
<bool>true</bool>
</property>
<property name="icon">
<iconset resource="resources/resources.qrc">
<normaloff>:/flags/flags/es.png</normaloff>:/flags/flags/es.png</iconset>
@ -1043,6 +1052,9 @@
</property>
</action>
<action name="actionFrancais">
<property name="checkable">
<bool>true</bool>
</property>
<property name="icon">
<iconset resource="resources/resources.qrc">
<normaloff>:/flags/flags/fr.png</normaloff>:/flags/flags/fr.png</iconset>
@ -1055,6 +1067,9 @@
</property>
</action>
<action name="actionItaliano">
<property name="checkable">
<bool>true</bool>
</property>
<property name="icon">
<iconset resource="resources/resources.qrc">
<normaloff>:/flags/flags/it.png</normaloff>:/flags/flags/it.png</iconset>

View File

@ -4,12 +4,10 @@
<context>
<name>DialogBool</name>
<message>
<location filename="../modules/dialogs/dialogbool.ui" line="178"/>
<source>Yes</source>
<translation>Yes</translation>
</message>
<message>
<location filename="../modules/dialogs/dialogbool.ui" line="197"/>
<source>No</source>
<translation>No</translation>
</message>
@ -17,7 +15,6 @@
<context>
<name>DialogMsg</name>
<message>
<location filename="../modules/dialogs/dialogmsg.ui" line="244"/>
<source>Ok</source>
<translation>Ok</translation>
</message>
@ -25,321 +22,214 @@
<context>
<name>MainWindow</name>
<message>
<location filename="../mainwindow.ui" line="14"/>
<source>LogDoctor - Installer</source>
<translation>LogDoctor - Installer</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="73"/>
<source>Application paths</source>
<translation>Application paths</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="100"/>
<source>Installation options</source>
<translation>Installation options</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="154"/>
<source>Standard paths will be used for the application&apos;s files. You&apos;ll be able to edit other paths while running the program after the installation.</source>
<translation>Standard paths will be used for the application&apos;s files. You&apos;ll be able to edit other paths while running the program after the installation.</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="206"/>
<location filename="../mainwindow.ui" line="550"/>
<source>The path where the executable file will be placed in</source>
<translation>The path where the executable file will be placed in</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="209"/>
<source>Executable</source>
<translation>Executable</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="313"/>
<source>The path where the configuration file will be saved and searched in</source>
<translation>The path where the configuration file will be saved and searched in</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="316"/>
<source>Configuration file</source>
<translation>Configuration file</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="420"/>
<source>The path where the application will search in for extra resources</source>
<translation>The path where the application will search in for extra resources</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="423"/>
<source>Application data</source>
<translation>Application data</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="553"/>
<source>Utilities</source>
<translation>Utilities</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="577"/>
<source>Create a menu entry</source>
<translation>Create a menu entry</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="657"/>
<source>Back</source>
<translation>Back</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="695"/>
<location filename="../mainwindow.cpp" line="182"/>
<source>Next</source>
<translation>Next</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="748"/>
<source>Installing</source>
<translation>Installing</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="778"/>
<source>Installation process details</source>
<translation>Installation process details</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="803"/>
<source>Installation progress</source>
<translation>Installation progress</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="969"/>
<source>Close</source>
<translation>Close</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="1012"/>
<source>Language</source>
<translation>Language</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="1030"/>
<source>Translate to English</source>
<translation>Translate to English</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="1042"/>
<source>Translate to Spanish</source>
<translation>Translate to Spanish</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="1054"/>
<source>Translate to French</source>
<translation>Translate to French</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="1066"/>
<source>Translate to Italian</source>
<translation>Translate to Italian</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="232"/>
<source>Checking the executable path ...</source>
<translation>Checking the executable path ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="238"/>
<source>Checking the configuration path ...</source>
<translation>Checking the configuration path ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="245"/>
<source>Checking the application data path ...</source>
<translation>Checking the application data path ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="294"/>
<source>Creating the menu entry ...</source>
<translation>Creating the menu entry ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="302"/>
<source>Final steps ...</source>
<translation>Final steps ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="158"/>
<source>Install</source>
<translation>Install</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="307"/>
<location filename="../mainwindow.cpp" line="330"/>
<location filename="../mainwindow.cpp" line="342"/>
<location filename="../mainwindow.cpp" line="379"/>
<location filename="../mainwindow.cpp" line="408"/>
<location filename="../mainwindow.cpp" line="421"/>
<location filename="../mainwindow.cpp" line="461"/>
<location filename="../mainwindow.cpp" line="491"/>
<location filename="../mainwindow.cpp" line="519"/>
<location filename="../mainwindow.cpp" line="532"/>
<location filename="../mainwindow.cpp" line="570"/>
<location filename="../mainwindow.cpp" line="600"/>
<location filename="../mainwindow.cpp" line="629"/>
<location filename="../mainwindow.cpp" line="642"/>
<location filename="../mainwindow.cpp" line="679"/>
<location filename="../mainwindow.cpp" line="728"/>
<location filename="../mainwindow.cpp" line="763"/>
<location filename="../mainwindow.cpp" line="787"/>
<location filename="../mainwindow.cpp" line="816"/>
<location filename="../mainwindow.cpp" line="853"/>
<location filename="../mainwindow.cpp" line="884"/>
<location filename="../mainwindow.cpp" line="920"/>
<source>Installation failed</source>
<translation>Installation failed</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="332"/>
<source>The path does not exist</source>
<translation>The path does not exist</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="361"/>
<location filename="../mainwindow.cpp" line="394"/>
<location filename="../mainwindow.cpp" line="444"/>
<location filename="../mainwindow.cpp" line="505"/>
<location filename="../mainwindow.cpp" line="549"/>
<location filename="../mainwindow.cpp" line="614"/>
<location filename="../mainwindow.cpp" line="655"/>
<source>Conflict</source>
<translation>Conflict</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="255"/>
<source>Copying the executable file ...</source>
<translation>Copying the executable file ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="730"/>
<location filename="../mainwindow.cpp" line="789"/>
<location filename="../mainwindow.cpp" line="818"/>
<location filename="../mainwindow.cpp" line="855"/>
<location filename="../mainwindow.cpp" line="922"/>
<source>Failed to copy the resource</source>
<translation>Failed to copy the resource</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="765"/>
<location filename="../mainwindow.cpp" line="886"/>
<source>Failed to assign permissions to the resource</source>
<translation>Failed to assign permissions to the resource</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="264"/>
<source>Copying the configuration file ...</source>
<translation>Copying the configuration file ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="271"/>
<source>Copying the application resources ...</source>
<translation>Copying the application resources ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="279"/>
<source>Copying the uninstaller ...</source>
<translation>Copying the uninstaller ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="287"/>
<source>Copying the icon ...</source>
<translation>Copying the icon ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="971"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="304"/>
<source>Installation successful</source>
<translation>Installation successful</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="308"/>
<source>An error occured while installing LogDoctor</source>
<translation>An error occured while installing LogDoctor</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="973"/>
<source>Failed to create the menu entry</source>
<translation>Failed to create the menu entry</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="364"/>
<location filename="../mainwindow.cpp" line="447"/>
<source>An executable already exists</source>
<translation>An executable already exists</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="365"/>
<location filename="../mainwindow.cpp" line="396"/>
<location filename="../mainwindow.cpp" line="448"/>
<location filename="../mainwindow.cpp" line="507"/>
<location filename="../mainwindow.cpp" line="553"/>
<location filename="../mainwindow.cpp" line="616"/>
<source>An entry with the same name already exists</source>
<translation>An entry with the same name already exists</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="381"/>
<location filename="../mainwindow.cpp" line="410"/>
<location filename="../mainwindow.cpp" line="463"/>
<location filename="../mainwindow.cpp" line="521"/>
<location filename="../mainwindow.cpp" line="572"/>
<location filename="../mainwindow.cpp" line="631"/>
<location filename="../mainwindow.cpp" line="681"/>
<source>Failed to remove the entry</source>
<translation>Failed to remove the entry</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="552"/>
<source>An old configuration file already exists</source>
<translation>An old configuration file already exists</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="657"/>
<source>A directory already exists for the application data</source>
<translation>A directory already exists for the application data</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="344"/>
<location filename="../mainwindow.cpp" line="423"/>
<location filename="../mainwindow.cpp" line="493"/>
<location filename="../mainwindow.cpp" line="534"/>
<location filename="../mainwindow.cpp" line="602"/>
<location filename="../mainwindow.cpp" line="644"/>
<source>Failed to create the directory</source>
<translation>Failed to create the directory</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="555"/>
<source>It&apos;s suggested to renew it, but you can keep it by answering &apos;No&apos;
Overwrite the file?</source>
<translation>It&apos;s suggested to renew it, but you can keep it by answering &apos;No&apos;
Overwrite the file?</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="367"/>
<location filename="../mainwindow.cpp" line="398"/>
<location filename="../mainwindow.cpp" line="450"/>
<location filename="../mainwindow.cpp" line="509"/>
<location filename="../mainwindow.cpp" line="618"/>
<source>If you choose to proceed, it will be overwritten
Continue?</source>
<translation>If you choose to proceed, it will be overwritten
Continue?</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="659"/>
<source>If you choose to proceed, the content will be overwritten,
exception made for databases, which won&apos;t be affected
Continue?</source>
@ -347,5 +237,21 @@ Continue?</source>
exception made for databases, which won&apos;t be affected
Continue?</translation>
</message>
<message>
<source>An entry with the same name already exists, but it&apos;s not a directory</source>
<translation>An entry with the same name already exists, but it&apos;s not a directory</translation>
</message>
<message>
<source>Installation path already exists</source>
<translation>Installation path already exists</translation>
</message>
<message>
<source>To destination path</source>
<translation>To destination path</translation>
</message>
<message>
<source>Failed to change the owner of the resource</source>
<translation>Failed to change the owner of the resource</translation>
</message>
</context>
</TS>

View File

@ -4,12 +4,10 @@
<context>
<name>DialogBool</name>
<message>
<location filename="../modules/dialogs/dialogbool.ui" line="178"/>
<source>Yes</source>
<translation></translation>
</message>
<message>
<location filename="../modules/dialogs/dialogbool.ui" line="197"/>
<source>No</source>
<translation>No</translation>
</message>
@ -17,7 +15,6 @@
<context>
<name>DialogMsg</name>
<message>
<location filename="../modules/dialogs/dialogmsg.ui" line="244"/>
<source>Ok</source>
<translation>Ok</translation>
</message>
@ -25,321 +22,214 @@
<context>
<name>MainWindow</name>
<message>
<location filename="../mainwindow.ui" line="14"/>
<source>LogDoctor - Installer</source>
<translation type="unfinished">LogDoctor - Instalador</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="73"/>
<source>Application paths</source>
<translation type="unfinished">Rutas de la aplicación</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="100"/>
<source>Installation options</source>
<translation type="unfinished">Opciones de instalación</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="154"/>
<source>Standard paths will be used for the application&apos;s files. You&apos;ll be able to edit other paths while running the program after the installation.</source>
<translation type="unfinished">Se utilizarán las rutas estándar para los archivos de la aplicación. Tu podrá editar las otras rutas mientras ejecuta el programa, después de la instalación.</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="206"/>
<location filename="../mainwindow.ui" line="550"/>
<source>The path where the executable file will be placed in</source>
<translation type="unfinished">La ruta donde se colocará el archivo ejecutable</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="209"/>
<source>Executable</source>
<translation type="unfinished">Ejecutable</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="313"/>
<source>The path where the configuration file will be saved and searched in</source>
<translation type="unfinished">La ruta donde se guardará y buscará el archivo de configuración</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="316"/>
<source>Configuration file</source>
<translation type="unfinished">Archivo de configuración</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="420"/>
<source>The path where the application will search in for extra resources</source>
<translation type="unfinished">La ruta donde la aplicación buscará los recursos adicionales</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="423"/>
<source>Application data</source>
<translation type="unfinished">Recursos de la aplicacion</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="553"/>
<source>Utilities</source>
<translation type="unfinished">Utilidades</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="577"/>
<source>Create a menu entry</source>
<translation type="unfinished">Crear una entrada en el menú</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="657"/>
<source>Back</source>
<translation type="unfinished">Atrás</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="695"/>
<location filename="../mainwindow.cpp" line="182"/>
<source>Next</source>
<translation type="unfinished">Próximo</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="748"/>
<source>Installing</source>
<translation type="unfinished">Instalando</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="778"/>
<source>Installation process details</source>
<translation type="unfinished">Detalles del proceso de instalación</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="803"/>
<source>Installation progress</source>
<translation type="unfinished">Progreso de la instalación</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="969"/>
<source>Close</source>
<translation type="unfinished">Cerrar</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="1012"/>
<source>Language</source>
<translation type="unfinished">Idioma</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="1030"/>
<source>Translate to English</source>
<translation type="unfinished">Traducir al Ingles</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="1042"/>
<source>Translate to Spanish</source>
<translation type="unfinished">Traducir al Español</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="1054"/>
<source>Translate to French</source>
<translation type="unfinished">Traducir al Francés</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="1066"/>
<source>Translate to Italian</source>
<translation type="unfinished">Traducir al Italiano</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="232"/>
<source>Checking the executable path ...</source>
<translation type="unfinished">Comprobando la ruta para el ejecutable ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="238"/>
<source>Checking the configuration path ...</source>
<translation type="unfinished">Comprobando la ruta para el archivo de configuración ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="245"/>
<source>Checking the application data path ...</source>
<translation type="unfinished">Comprobando la ruta para los recursos de la aplicación...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="294"/>
<source>Creating the menu entry ...</source>
<translation type="unfinished">Creando la entrada del menú ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="302"/>
<source>Final steps ...</source>
<translation type="unfinished">Pasos finales ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="158"/>
<source>Install</source>
<translation type="unfinished">Instalar</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="307"/>
<location filename="../mainwindow.cpp" line="330"/>
<location filename="../mainwindow.cpp" line="342"/>
<location filename="../mainwindow.cpp" line="379"/>
<location filename="../mainwindow.cpp" line="408"/>
<location filename="../mainwindow.cpp" line="421"/>
<location filename="../mainwindow.cpp" line="461"/>
<location filename="../mainwindow.cpp" line="491"/>
<location filename="../mainwindow.cpp" line="519"/>
<location filename="../mainwindow.cpp" line="532"/>
<location filename="../mainwindow.cpp" line="570"/>
<location filename="../mainwindow.cpp" line="600"/>
<location filename="../mainwindow.cpp" line="629"/>
<location filename="../mainwindow.cpp" line="642"/>
<location filename="../mainwindow.cpp" line="679"/>
<location filename="../mainwindow.cpp" line="728"/>
<location filename="../mainwindow.cpp" line="763"/>
<location filename="../mainwindow.cpp" line="787"/>
<location filename="../mainwindow.cpp" line="816"/>
<location filename="../mainwindow.cpp" line="853"/>
<location filename="../mainwindow.cpp" line="884"/>
<location filename="../mainwindow.cpp" line="920"/>
<source>Installation failed</source>
<translation type="unfinished">Instalación fallida</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="332"/>
<source>The path does not exist</source>
<translation type="unfinished">El camino no existe</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="361"/>
<location filename="../mainwindow.cpp" line="394"/>
<location filename="../mainwindow.cpp" line="444"/>
<location filename="../mainwindow.cpp" line="505"/>
<location filename="../mainwindow.cpp" line="549"/>
<location filename="../mainwindow.cpp" line="614"/>
<location filename="../mainwindow.cpp" line="655"/>
<source>Conflict</source>
<translation type="unfinished">Conflicto</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="255"/>
<source>Copying the executable file ...</source>
<translation type="unfinished">Copiando el archivo ejecutable ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="730"/>
<location filename="../mainwindow.cpp" line="789"/>
<location filename="../mainwindow.cpp" line="818"/>
<location filename="../mainwindow.cpp" line="855"/>
<location filename="../mainwindow.cpp" line="922"/>
<source>Failed to copy the resource</source>
<translation type="unfinished">Error al copiar el recurso</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="765"/>
<location filename="../mainwindow.cpp" line="886"/>
<source>Failed to assign permissions to the resource</source>
<translation type="unfinished">Error al asignar permisos al recurso</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="264"/>
<source>Copying the configuration file ...</source>
<translation type="unfinished">Copiando el archivo de configuración ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="271"/>
<source>Copying the application resources ...</source>
<translation type="unfinished">Copiando los recursos de la aplicación ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="279"/>
<source>Copying the uninstaller ...</source>
<translation type="unfinished">Copiando el desinstalador...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="287"/>
<source>Copying the icon ...</source>
<translation type="unfinished">Copiando el icono ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="971"/>
<source>Error</source>
<translation type="unfinished">Error</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="304"/>
<source>Installation successful</source>
<translation type="unfinished">Instalación exitosa</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="308"/>
<source>An error occured while installing LogDoctor</source>
<translation type="unfinished">Ocurrió un error durante la instalación de LogDoctor</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="973"/>
<source>Failed to create the menu entry</source>
<translation type="unfinished">Error al crear la entrada del menú</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="364"/>
<location filename="../mainwindow.cpp" line="447"/>
<source>An executable already exists</source>
<translation type="unfinished">Ya existe un ejecutable</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="365"/>
<location filename="../mainwindow.cpp" line="396"/>
<location filename="../mainwindow.cpp" line="448"/>
<location filename="../mainwindow.cpp" line="507"/>
<location filename="../mainwindow.cpp" line="553"/>
<location filename="../mainwindow.cpp" line="616"/>
<source>An entry with the same name already exists</source>
<translation type="unfinished">Ya existe una entrada con el mismo nombre</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="381"/>
<location filename="../mainwindow.cpp" line="410"/>
<location filename="../mainwindow.cpp" line="463"/>
<location filename="../mainwindow.cpp" line="521"/>
<location filename="../mainwindow.cpp" line="572"/>
<location filename="../mainwindow.cpp" line="631"/>
<location filename="../mainwindow.cpp" line="681"/>
<source>Failed to remove the entry</source>
<translation type="unfinished">Error al eliminar</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="552"/>
<source>An old configuration file already exists</source>
<translation type="unfinished">Ya existe un archivo de configuración antiguo</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="657"/>
<source>A directory already exists for the application data</source>
<translation type="unfinished">Ya existe un directorio para los recursos de la aplicación</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="344"/>
<location filename="../mainwindow.cpp" line="423"/>
<location filename="../mainwindow.cpp" line="493"/>
<location filename="../mainwindow.cpp" line="534"/>
<location filename="../mainwindow.cpp" line="602"/>
<location filename="../mainwindow.cpp" line="644"/>
<source>Failed to create the directory</source>
<translation type="unfinished">Error al crear el directorio</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="555"/>
<source>It&apos;s suggested to renew it, but you can keep it by answering &apos;No&apos;
Overwrite the file?</source>
<translation type="unfinished">Se sugiere renovarlo, pero puede conservarlo respondiendo &apos;No&apos;
¿Sobrescribir el archivo?</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="367"/>
<location filename="../mainwindow.cpp" line="398"/>
<location filename="../mainwindow.cpp" line="450"/>
<location filename="../mainwindow.cpp" line="509"/>
<location filename="../mainwindow.cpp" line="618"/>
<source>If you choose to proceed, it will be overwritten
Continue?</source>
<translation type="unfinished">Si elige continuar, se sobrescribirá
¿Continuar?</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="659"/>
<source>If you choose to proceed, the content will be overwritten,
exception made for databases, which won&apos;t be affected
Continue?</source>
@ -347,5 +237,21 @@ Continue?</source>
excepción hecha para databases, que no se verá afectada
¿Continuar?</translation>
</message>
<message>
<source>An entry with the same name already exists, but it&apos;s not a directory</source>
<translation type="unfinished">Ya existe una entrada con el mismo nombre, pero no es un directorio</translation>
</message>
<message>
<source>Installation path already exists</source>
<translation type="unfinished">La ruta de instalación ya existe</translation>
</message>
<message>
<source>To destination path</source>
<translation type="unfinished">En el camino de destinación</translation>
</message>
<message>
<source>Failed to change the owner of the resource</source>
<translation type="unfinished">Error al cambiar el propietario del recurso</translation>
</message>
</context>
</TS>

View File

@ -4,12 +4,10 @@
<context>
<name>DialogBool</name>
<message>
<location filename="../modules/dialogs/dialogbool.ui" line="178"/>
<source>Yes</source>
<translation>Oui</translation>
</message>
<message>
<location filename="../modules/dialogs/dialogbool.ui" line="197"/>
<source>No</source>
<translation>Non</translation>
</message>
@ -17,7 +15,6 @@
<context>
<name>DialogMsg</name>
<message>
<location filename="../modules/dialogs/dialogmsg.ui" line="244"/>
<source>Ok</source>
<translation>Ok</translation>
</message>
@ -25,321 +22,214 @@
<context>
<name>MainWindow</name>
<message>
<location filename="../mainwindow.ui" line="14"/>
<source>LogDoctor - Installer</source>
<translation type="unfinished">LogDoctor - Installateur</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="73"/>
<source>Application paths</source>
<translation type="unfinished">Chemins de l&apos;application</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="100"/>
<source>Installation options</source>
<translation type="unfinished">Choix d&apos;installation</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="154"/>
<source>Standard paths will be used for the application&apos;s files. You&apos;ll be able to edit other paths while running the program after the installation.</source>
<translation type="unfinished">Les chemins standard seront utilisés pour les fichiers de l&apos;application. Vous pourrez modifier d&apos;autres chemins lors de l&apos;exécution du programme, après l&apos;installation.</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="206"/>
<location filename="../mainwindow.ui" line="550"/>
<source>The path where the executable file will be placed in</source>
<translation type="unfinished">Le chemin sera placé le fichier exécutable</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="209"/>
<source>Executable</source>
<translation type="unfinished">Exécutable</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="313"/>
<source>The path where the configuration file will be saved and searched in</source>
<translation type="unfinished">Le chemin le fichier de configuration sera enregistré et recherché dans</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="316"/>
<source>Configuration file</source>
<translation type="unfinished">Fichier de configuration</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="420"/>
<source>The path where the application will search in for extra resources</source>
<translation type="unfinished">Le chemin l&apos;application recherchera des ressources supplémentaires</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="423"/>
<source>Application data</source>
<translation type="unfinished">Ressources de l&apos;application</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="553"/>
<source>Utilities</source>
<translation type="unfinished">Utilitaires</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="577"/>
<source>Create a menu entry</source>
<translation type="unfinished">Créer une entrée dans le menu</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="657"/>
<source>Back</source>
<translation type="unfinished">Retour</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="695"/>
<location filename="../mainwindow.cpp" line="182"/>
<source>Next</source>
<translation type="unfinished">Prochain</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="748"/>
<source>Installing</source>
<translation type="unfinished">Installation</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="778"/>
<source>Installation process details</source>
<translation type="unfinished">Détails du processus d&apos;installation</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="803"/>
<source>Installation progress</source>
<translation type="unfinished">Avancement de l&apos;installation</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="969"/>
<source>Close</source>
<translation type="unfinished">Conclure</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="1012"/>
<source>Language</source>
<translation type="unfinished">Langage</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="1030"/>
<source>Translate to English</source>
<translation type="unfinished">Traduire en Anglais</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="1042"/>
<source>Translate to Spanish</source>
<translation type="unfinished">Traduire en Espagnol</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="1054"/>
<source>Translate to French</source>
<translation type="unfinished">Traduire en Français</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="1066"/>
<source>Translate to Italian</source>
<translation type="unfinished">Traduire en Italien</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="232"/>
<source>Checking the executable path ...</source>
<translation type="unfinished">Vérification du chemin pour le l&apos;exécutable ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="238"/>
<source>Checking the configuration path ...</source>
<translation type="unfinished">Vérification du chemin pour le fichier de configuration ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="245"/>
<source>Checking the application data path ...</source>
<translation type="unfinished">Vérification du chemin pour les ressources d&apos;application...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="294"/>
<source>Creating the menu entry ...</source>
<translation type="unfinished">Création de l&apos;entrée de menu ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="302"/>
<source>Final steps ...</source>
<translation type="unfinished">Dernières étapes ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="158"/>
<source>Install</source>
<translation type="unfinished">Installer</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="307"/>
<location filename="../mainwindow.cpp" line="330"/>
<location filename="../mainwindow.cpp" line="342"/>
<location filename="../mainwindow.cpp" line="379"/>
<location filename="../mainwindow.cpp" line="408"/>
<location filename="../mainwindow.cpp" line="421"/>
<location filename="../mainwindow.cpp" line="461"/>
<location filename="../mainwindow.cpp" line="491"/>
<location filename="../mainwindow.cpp" line="519"/>
<location filename="../mainwindow.cpp" line="532"/>
<location filename="../mainwindow.cpp" line="570"/>
<location filename="../mainwindow.cpp" line="600"/>
<location filename="../mainwindow.cpp" line="629"/>
<location filename="../mainwindow.cpp" line="642"/>
<location filename="../mainwindow.cpp" line="679"/>
<location filename="../mainwindow.cpp" line="728"/>
<location filename="../mainwindow.cpp" line="763"/>
<location filename="../mainwindow.cpp" line="787"/>
<location filename="../mainwindow.cpp" line="816"/>
<location filename="../mainwindow.cpp" line="853"/>
<location filename="../mainwindow.cpp" line="884"/>
<location filename="../mainwindow.cpp" line="920"/>
<source>Installation failed</source>
<translation type="unfinished">L&apos;installation a échoué</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="332"/>
<source>The path does not exist</source>
<translation type="unfinished">Le chemin n&apos;existe</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="361"/>
<location filename="../mainwindow.cpp" line="394"/>
<location filename="../mainwindow.cpp" line="444"/>
<location filename="../mainwindow.cpp" line="505"/>
<location filename="../mainwindow.cpp" line="549"/>
<location filename="../mainwindow.cpp" line="614"/>
<location filename="../mainwindow.cpp" line="655"/>
<source>Conflict</source>
<translation type="unfinished">Conflit</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="255"/>
<source>Copying the executable file ...</source>
<translation type="unfinished">Copie du fichier exécutable ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="730"/>
<location filename="../mainwindow.cpp" line="789"/>
<location filename="../mainwindow.cpp" line="818"/>
<location filename="../mainwindow.cpp" line="855"/>
<location filename="../mainwindow.cpp" line="922"/>
<source>Failed to copy the resource</source>
<translation type="unfinished">Échec en la copie de la ressource</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="765"/>
<location filename="../mainwindow.cpp" line="886"/>
<source>Failed to assign permissions to the resource</source>
<translation type="unfinished">Échec en l&apos;attribution des autorisations à la ressource</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="264"/>
<source>Copying the configuration file ...</source>
<translation type="unfinished">Copie du fichier de configuration ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="271"/>
<source>Copying the application resources ...</source>
<translation type="unfinished">Copie des ressources de l&apos;application...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="279"/>
<source>Copying the uninstaller ...</source>
<translation type="unfinished">Copie du programme de désinstallation ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="287"/>
<source>Copying the icon ...</source>
<translation type="unfinished">Copie de l&apos;icône ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="971"/>
<source>Error</source>
<translation type="unfinished">Erreur</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="304"/>
<source>Installation successful</source>
<translation type="unfinished">Installation réussie</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="308"/>
<source>An error occured while installing LogDoctor</source>
<translation type="unfinished">Une erreur s&apos;est produite lors de l&apos;installation de LogDoctor</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="973"/>
<source>Failed to create the menu entry</source>
<translation type="unfinished">Impossible de créer l&apos;entrée de menu</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="364"/>
<location filename="../mainwindow.cpp" line="447"/>
<source>An executable already exists</source>
<translation type="unfinished">Un exécutable existe déjà</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="365"/>
<location filename="../mainwindow.cpp" line="396"/>
<location filename="../mainwindow.cpp" line="448"/>
<location filename="../mainwindow.cpp" line="507"/>
<location filename="../mainwindow.cpp" line="553"/>
<location filename="../mainwindow.cpp" line="616"/>
<source>An entry with the same name already exists</source>
<translation type="unfinished">Une entrée avec le même nom existe déjà</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="381"/>
<location filename="../mainwindow.cpp" line="410"/>
<location filename="../mainwindow.cpp" line="463"/>
<location filename="../mainwindow.cpp" line="521"/>
<location filename="../mainwindow.cpp" line="572"/>
<location filename="../mainwindow.cpp" line="631"/>
<location filename="../mainwindow.cpp" line="681"/>
<source>Failed to remove the entry</source>
<translation type="unfinished">Échec de la suppression</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="552"/>
<source>An old configuration file already exists</source>
<translation type="unfinished">Un ancien fichier de configuration existe déjà</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="657"/>
<source>A directory already exists for the application data</source>
<translation type="unfinished">Un répertoire existe déjà pour les ressources de l&apos;application</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="344"/>
<location filename="../mainwindow.cpp" line="423"/>
<location filename="../mainwindow.cpp" line="493"/>
<location filename="../mainwindow.cpp" line="534"/>
<location filename="../mainwindow.cpp" line="602"/>
<location filename="../mainwindow.cpp" line="644"/>
<source>Failed to create the directory</source>
<translation type="unfinished">Impossible de créer le répertoire</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="555"/>
<source>It&apos;s suggested to renew it, but you can keep it by answering &apos;No&apos;
Overwrite the file?</source>
<translation type="unfinished">Il est suggéré de le renouveler, mais vous pouvez le conserver en répondant &apos;Non&apos;
Ecraser le fichier?</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="367"/>
<location filename="../mainwindow.cpp" line="398"/>
<location filename="../mainwindow.cpp" line="450"/>
<location filename="../mainwindow.cpp" line="509"/>
<location filename="../mainwindow.cpp" line="618"/>
<source>If you choose to proceed, it will be overwritten
Continue?</source>
<translation type="unfinished">Si vous choisissez de continuer, il sera écrasé
Continuer?</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="659"/>
<source>If you choose to proceed, the content will be overwritten,
exception made for databases, which won&apos;t be affected
Continue?</source>
@ -347,5 +237,21 @@ Continue?</source>
exception faite pour les databases, qui ne seront pas affectées
Continuer?</translation>
</message>
<message>
<source>An entry with the same name already exists, but it&apos;s not a directory</source>
<translation type="unfinished">Une entrée avec le même nom existe déjà, mais ce n&apos;est pas un répertoire</translation>
</message>
<message>
<source>Installation path already exists</source>
<translation type="unfinished">Le chemin d&apos;installation existe déjà</translation>
</message>
<message>
<source>To destination path</source>
<translation type="unfinished">Vers le chemin de destination</translation>
</message>
<message>
<source>Failed to change the owner of the resource</source>
<translation type="unfinished">Échec du changement du propriétaire de la ressource</translation>
</message>
</context>
</TS>

View File

@ -4,12 +4,10 @@
<context>
<name>DialogBool</name>
<message>
<location filename="../modules/dialogs/dialogbool.ui" line="178"/>
<source>Yes</source>
<translation></translation>
</message>
<message>
<location filename="../modules/dialogs/dialogbool.ui" line="197"/>
<source>No</source>
<translation>No</translation>
</message>
@ -17,7 +15,6 @@
<context>
<name>DialogMsg</name>
<message>
<location filename="../modules/dialogs/dialogmsg.ui" line="244"/>
<source>Ok</source>
<translation>Ok</translation>
</message>
@ -25,321 +22,214 @@
<context>
<name>MainWindow</name>
<message>
<location filename="../mainwindow.ui" line="14"/>
<source>LogDoctor - Installer</source>
<translation>LogDoctor - Installazione</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="73"/>
<source>Application paths</source>
<translation>Percorso dell&apos;applicazione</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="100"/>
<source>Installation options</source>
<translation>Opzioni di installazione</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="154"/>
<source>Standard paths will be used for the application&apos;s files. You&apos;ll be able to edit other paths while running the program after the installation.</source>
<translation>Verranno usati i percorsi standard per i file dell&apos;applicazione. Potrai modificare gli altri percorsi dopo l&apos;installazione, durante l&apos;esecuzione del programma.</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="206"/>
<location filename="../mainwindow.ui" line="550"/>
<source>The path where the executable file will be placed in</source>
<translation>Il percorso in cui verrà posizionato l&apos;eseguibile</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="209"/>
<source>Executable</source>
<translation>Eseguibile</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="313"/>
<source>The path where the configuration file will be saved and searched in</source>
<translation>Il percorso in cui verrà salvato e cercato il file di configurazione</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="316"/>
<source>Configuration file</source>
<translation>File di configurazione</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="420"/>
<source>The path where the application will search in for extra resources</source>
<translation>Il percorso in cui l&apos;applicazione cercherà le risorse extra</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="423"/>
<source>Application data</source>
<translation>Risorse dell&apos;applicazione</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="553"/>
<source>Utilities</source>
<translation>Utilità</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="577"/>
<source>Create a menu entry</source>
<translation>Crea un collegamento nel menù</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="657"/>
<source>Back</source>
<translation>Indietro</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="695"/>
<location filename="../mainwindow.cpp" line="182"/>
<source>Next</source>
<translation>Avanti</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="748"/>
<source>Installing</source>
<translation>Installazione</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="778"/>
<source>Installation process details</source>
<translation>Dettagli del processo di installazione</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="803"/>
<source>Installation progress</source>
<translation>Progresso dell&apos;installazione</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="969"/>
<source>Close</source>
<translation>Chiudi</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="1012"/>
<source>Language</source>
<translation>Lingua</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="1030"/>
<source>Translate to English</source>
<translation>Traduci in Inglese</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="1042"/>
<source>Translate to Spanish</source>
<translation>Traduci in Spagnolo</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="1054"/>
<source>Translate to French</source>
<translation>Traduci in Francese</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="1066"/>
<source>Translate to Italian</source>
<translation>Traduci in Italiano</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="232"/>
<source>Checking the executable path ...</source>
<translation>Controllo del percorso dell&apos;eseguibile ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="238"/>
<source>Checking the configuration path ...</source>
<translation>Controllo del percorso del file di configurazione ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="245"/>
<source>Checking the application data path ...</source>
<translation>Controllo del percorso delle risorse dell&apos;applicazione ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="294"/>
<source>Creating the menu entry ...</source>
<translation>Creazione del collegamento al menù ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="302"/>
<source>Final steps ...</source>
<translation>Passi finali ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="158"/>
<source>Install</source>
<translation>Installa</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="307"/>
<location filename="../mainwindow.cpp" line="330"/>
<location filename="../mainwindow.cpp" line="342"/>
<location filename="../mainwindow.cpp" line="379"/>
<location filename="../mainwindow.cpp" line="408"/>
<location filename="../mainwindow.cpp" line="421"/>
<location filename="../mainwindow.cpp" line="461"/>
<location filename="../mainwindow.cpp" line="491"/>
<location filename="../mainwindow.cpp" line="519"/>
<location filename="../mainwindow.cpp" line="532"/>
<location filename="../mainwindow.cpp" line="570"/>
<location filename="../mainwindow.cpp" line="600"/>
<location filename="../mainwindow.cpp" line="629"/>
<location filename="../mainwindow.cpp" line="642"/>
<location filename="../mainwindow.cpp" line="679"/>
<location filename="../mainwindow.cpp" line="728"/>
<location filename="../mainwindow.cpp" line="763"/>
<location filename="../mainwindow.cpp" line="787"/>
<location filename="../mainwindow.cpp" line="816"/>
<location filename="../mainwindow.cpp" line="853"/>
<location filename="../mainwindow.cpp" line="884"/>
<location filename="../mainwindow.cpp" line="920"/>
<source>Installation failed</source>
<translation>Installazione fallita</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="332"/>
<source>The path does not exist</source>
<translation>Il percorso non esiste</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="361"/>
<location filename="../mainwindow.cpp" line="394"/>
<location filename="../mainwindow.cpp" line="444"/>
<location filename="../mainwindow.cpp" line="505"/>
<location filename="../mainwindow.cpp" line="549"/>
<location filename="../mainwindow.cpp" line="614"/>
<location filename="../mainwindow.cpp" line="655"/>
<source>Conflict</source>
<translation>Conflitto</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="255"/>
<source>Copying the executable file ...</source>
<translation>Copia del file eseguibile in corso ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="730"/>
<location filename="../mainwindow.cpp" line="789"/>
<location filename="../mainwindow.cpp" line="818"/>
<location filename="../mainwindow.cpp" line="855"/>
<location filename="../mainwindow.cpp" line="922"/>
<source>Failed to copy the resource</source>
<translation>Errore nel copiare le risorse</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="765"/>
<location filename="../mainwindow.cpp" line="886"/>
<source>Failed to assign permissions to the resource</source>
<translation>Errore nell&apos;assegnare i permessi alle risorse</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="264"/>
<source>Copying the configuration file ...</source>
<translation>Copia del file di configurazione in corso ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="271"/>
<source>Copying the application resources ...</source>
<translation>Copia delle risorse dell&apos;applicazione in corso ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="279"/>
<source>Copying the uninstaller ...</source>
<translation>Copia del disinstallatore in corso ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="287"/>
<source>Copying the icon ...</source>
<translation>Copia dell&apos;icona in corso ...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="971"/>
<source>Error</source>
<translation>Errore</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="304"/>
<source>Installation successful</source>
<translation>Installazione riuscita</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="308"/>
<source>An error occured while installing LogDoctor</source>
<translation>È avvenuto un errore durante l&apos;installazione di LogDoctor</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="973"/>
<source>Failed to create the menu entry</source>
<translation>Errore nel creare il collegamento al menù</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="364"/>
<location filename="../mainwindow.cpp" line="447"/>
<source>An executable already exists</source>
<translation>Esiste già un eseguibile</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="365"/>
<location filename="../mainwindow.cpp" line="396"/>
<location filename="../mainwindow.cpp" line="448"/>
<location filename="../mainwindow.cpp" line="507"/>
<location filename="../mainwindow.cpp" line="553"/>
<location filename="../mainwindow.cpp" line="616"/>
<source>An entry with the same name already exists</source>
<translation>Esiste già un oggetto con lo stesso nome</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="381"/>
<location filename="../mainwindow.cpp" line="410"/>
<location filename="../mainwindow.cpp" line="463"/>
<location filename="../mainwindow.cpp" line="521"/>
<location filename="../mainwindow.cpp" line="572"/>
<location filename="../mainwindow.cpp" line="631"/>
<location filename="../mainwindow.cpp" line="681"/>
<source>Failed to remove the entry</source>
<translation>Errore nella rimozione</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="552"/>
<source>An old configuration file already exists</source>
<translation>Un file di configurazione è già presente</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="657"/>
<source>A directory already exists for the application data</source>
<translation>Esiste già una directory per le risorse dell&apos;applicazione</translation>
<translation>Esiste già una cartella per le risorse dell&apos;applicazione</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="344"/>
<location filename="../mainwindow.cpp" line="423"/>
<location filename="../mainwindow.cpp" line="493"/>
<location filename="../mainwindow.cpp" line="534"/>
<location filename="../mainwindow.cpp" line="602"/>
<location filename="../mainwindow.cpp" line="644"/>
<source>Failed to create the directory</source>
<translation>Errore nella creazione della cartella</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="555"/>
<source>It&apos;s suggested to renew it, but you can keep it by answering &apos;No&apos;
Overwrite the file?</source>
<translation>Sarebbe meglio rinnovarlo, ma puoi decidere di tenerlo scegliendo &apos;No&apos;
Sovrascrivere il file?</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="367"/>
<location filename="../mainwindow.cpp" line="398"/>
<location filename="../mainwindow.cpp" line="450"/>
<location filename="../mainwindow.cpp" line="509"/>
<location filename="../mainwindow.cpp" line="618"/>
<source>If you choose to proceed, it will be overwritten
Continue?</source>
<translation>Se scegli di procedere, verrà sovrascritto
Continuare?</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="659"/>
<source>If you choose to proceed, the content will be overwritten,
exception made for databases, which won&apos;t be affected
Continue?</source>
@ -347,5 +237,21 @@ Continue?</source>
ad eccezione dei database, che non verranno toccati
Continuare?</translation>
</message>
<message>
<source>An entry with the same name already exists, but it&apos;s not a directory</source>
<translation>Esiste già un oggetto con lo stesso nome, ma non è una cartella</translation>
</message>
<message>
<source>Installation path already exists</source>
<translation>Il percorso di installazione esiste già</translation>
</message>
<message>
<source>To destination path</source>
<translation>Nella destinazione</translation>
</message>
<message>
<source>Failed to change the owner of the resource</source>
<translation>Errore nel modificare il proprietario della risorsa</translation>
</message>
</context>
</TS>