Version update 2.00 #1

Merged
elB4RTO merged 14 commits from devel into main 2023-10-07 14:46:04 +02:00
13 changed files with 417 additions and 779 deletions

View File

@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.5) 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) set(CMAKE_INCLUDE_CURRENT_DIR ON)
@ -8,12 +8,28 @@ set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON) set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON) 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) 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 set(TS_FILES
translations/LogDoctorInstaller_en.ts translations/LogDoctorInstaller_en.ts
translations/LogDoctorInstaller_es.ts translations/LogDoctorInstaller_es.ts
@ -38,45 +54,28 @@ set(PROJECT_SOURCES
${TS_FILES} ${TS_FILES}
) )
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) qt_add_executable(LogDoctorInstaller
qt_add_executable(LogDoctorInstaller MANUAL_FINALIZATION
MANUAL_FINALIZATION ${PROJECT_SOURCES}
${PROJECT_SOURCES} )
) qt_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES})
# 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()
if(WIN32) if(WIN32)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-Bstatic -lgcc -lstdc++ -lwinpthread") 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() endif()
target_link_libraries(LogDoctorInstaller PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets)
if(WIN32) if(WIN32)
set_target_properties(LogDoctorInstaller PROPERTIES set_target_properties(LogDoctorInstaller PROPERTIES
WIN32_EXECUTABLE TRUE) WIN32_EXECUTABLE TRUE)
endif() endif()
if(QT_VERSION_MAJOR EQUAL 6) qt_finalize_executable(LogDoctorInstaller)
qt_finalize_executable(LogDoctorInstaller)
endif()

View File

@ -1,8 +1,12 @@
#include "mainwindow.h"
#include <QApplication> #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[]) int main(int argc, char *argv[])
{ {

View File

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

View File

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

View File

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

View File

@ -4,12 +4,10 @@
<context> <context>
<name>DialogBool</name> <name>DialogBool</name>
<message> <message>
<location filename="../modules/dialogs/dialogbool.ui" line="178"/>
<source>Yes</source> <source>Yes</source>
<translation>Yes</translation> <translation>Yes</translation>
</message> </message>
<message> <message>
<location filename="../modules/dialogs/dialogbool.ui" line="197"/>
<source>No</source> <source>No</source>
<translation>No</translation> <translation>No</translation>
</message> </message>
@ -17,7 +15,6 @@
<context> <context>
<name>DialogMsg</name> <name>DialogMsg</name>
<message> <message>
<location filename="../modules/dialogs/dialogmsg.ui" line="244"/>
<source>Ok</source> <source>Ok</source>
<translation>Ok</translation> <translation>Ok</translation>
</message> </message>
@ -25,321 +22,214 @@
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../mainwindow.ui" line="14"/>
<source>LogDoctor - Installer</source> <source>LogDoctor - Installer</source>
<translation>LogDoctor - Installer</translation> <translation>LogDoctor - Installer</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="73"/>
<source>Application paths</source> <source>Application paths</source>
<translation>Application paths</translation> <translation>Application paths</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="100"/>
<source>Installation options</source> <source>Installation options</source>
<translation>Installation options</translation> <translation>Installation options</translation>
</message> </message>
<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> <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> <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>
<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> <source>The path where the executable file will be placed in</source>
<translation>The path where the executable file will be placed in</translation> <translation>The path where the executable file will be placed in</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="209"/>
<source>Executable</source> <source>Executable</source>
<translation>Executable</translation> <translation>Executable</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="313"/>
<source>The path where the configuration file will be saved and searched in</source> <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> <translation>The path where the configuration file will be saved and searched in</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="316"/>
<source>Configuration file</source> <source>Configuration file</source>
<translation>Configuration file</translation> <translation>Configuration file</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="420"/>
<source>The path where the application will search in for extra resources</source> <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> <translation>The path where the application will search in for extra resources</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="423"/>
<source>Application data</source> <source>Application data</source>
<translation>Application data</translation> <translation>Application data</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="553"/>
<source>Utilities</source> <source>Utilities</source>
<translation>Utilities</translation> <translation>Utilities</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="577"/>
<source>Create a menu entry</source> <source>Create a menu entry</source>
<translation>Create a menu entry</translation> <translation>Create a menu entry</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="657"/>
<source>Back</source> <source>Back</source>
<translation>Back</translation> <translation>Back</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="695"/>
<location filename="../mainwindow.cpp" line="182"/>
<source>Next</source> <source>Next</source>
<translation>Next</translation> <translation>Next</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="748"/>
<source>Installing</source> <source>Installing</source>
<translation>Installing</translation> <translation>Installing</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="778"/>
<source>Installation process details</source> <source>Installation process details</source>
<translation>Installation process details</translation> <translation>Installation process details</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="803"/>
<source>Installation progress</source> <source>Installation progress</source>
<translation>Installation progress</translation> <translation>Installation progress</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="969"/>
<source>Close</source> <source>Close</source>
<translation>Close</translation> <translation>Close</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="1012"/>
<source>Language</source> <source>Language</source>
<translation>Language</translation> <translation>Language</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="1030"/>
<source>Translate to English</source> <source>Translate to English</source>
<translation>Translate to English</translation> <translation>Translate to English</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="1042"/>
<source>Translate to Spanish</source> <source>Translate to Spanish</source>
<translation>Translate to Spanish</translation> <translation>Translate to Spanish</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="1054"/>
<source>Translate to French</source> <source>Translate to French</source>
<translation>Translate to French</translation> <translation>Translate to French</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="1066"/>
<source>Translate to Italian</source> <source>Translate to Italian</source>
<translation>Translate to Italian</translation> <translation>Translate to Italian</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="232"/>
<source>Checking the executable path ...</source> <source>Checking the executable path ...</source>
<translation>Checking the executable path ...</translation> <translation>Checking the executable path ...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="238"/>
<source>Checking the configuration path ...</source> <source>Checking the configuration path ...</source>
<translation>Checking the configuration path ...</translation> <translation>Checking the configuration path ...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="245"/>
<source>Checking the application data path ...</source> <source>Checking the application data path ...</source>
<translation>Checking the application data path ...</translation> <translation>Checking the application data path ...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="294"/>
<source>Creating the menu entry ...</source> <source>Creating the menu entry ...</source>
<translation>Creating the menu entry ...</translation> <translation>Creating the menu entry ...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="302"/>
<source>Final steps ...</source> <source>Final steps ...</source>
<translation>Final steps ...</translation> <translation>Final steps ...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="158"/>
<source>Install</source> <source>Install</source>
<translation>Install</translation> <translation>Install</translation>
</message> </message>
<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> <source>Installation failed</source>
<translation>Installation failed</translation> <translation>Installation failed</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="332"/>
<source>The path does not exist</source> <source>The path does not exist</source>
<translation>The path does not exist</translation> <translation>The path does not exist</translation>
</message> </message>
<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> <source>Conflict</source>
<translation>Conflict</translation> <translation>Conflict</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="255"/>
<source>Copying the executable file ...</source> <source>Copying the executable file ...</source>
<translation>Copying the executable file ...</translation> <translation>Copying the executable file ...</translation>
</message> </message>
<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> <source>Failed to copy the resource</source>
<translation>Failed to copy the resource</translation> <translation>Failed to copy the resource</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="765"/>
<location filename="../mainwindow.cpp" line="886"/>
<source>Failed to assign permissions to the resource</source> <source>Failed to assign permissions to the resource</source>
<translation>Failed to assign permissions to the resource</translation> <translation>Failed to assign permissions to the resource</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="264"/>
<source>Copying the configuration file ...</source> <source>Copying the configuration file ...</source>
<translation>Copying the configuration file ...</translation> <translation>Copying the configuration file ...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="271"/>
<source>Copying the application resources ...</source> <source>Copying the application resources ...</source>
<translation>Copying the application resources ...</translation> <translation>Copying the application resources ...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="279"/>
<source>Copying the uninstaller ...</source> <source>Copying the uninstaller ...</source>
<translation>Copying the uninstaller ...</translation> <translation>Copying the uninstaller ...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="287"/>
<source>Copying the icon ...</source> <source>Copying the icon ...</source>
<translation>Copying the icon ...</translation> <translation>Copying the icon ...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="971"/>
<source>Error</source> <source>Error</source>
<translation>Error</translation> <translation>Error</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="304"/>
<source>Installation successful</source> <source>Installation successful</source>
<translation>Installation successful</translation> <translation>Installation successful</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="308"/>
<source>An error occured while installing LogDoctor</source> <source>An error occured while installing LogDoctor</source>
<translation>An error occured while installing LogDoctor</translation> <translation>An error occured while installing LogDoctor</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="973"/>
<source>Failed to create the menu entry</source> <source>Failed to create the menu entry</source>
<translation>Failed to create the menu entry</translation> <translation>Failed to create the menu entry</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="364"/>
<location filename="../mainwindow.cpp" line="447"/>
<source>An executable already exists</source> <source>An executable already exists</source>
<translation>An executable already exists</translation> <translation>An executable already exists</translation>
</message> </message>
<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> <source>An entry with the same name already exists</source>
<translation>An entry with the same name already exists</translation> <translation>An entry with the same name already exists</translation>
</message> </message>
<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> <source>Failed to remove the entry</source>
<translation>Failed to remove the entry</translation> <translation>Failed to remove the entry</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="552"/>
<source>An old configuration file already exists</source> <source>An old configuration file already exists</source>
<translation>An old configuration file already exists</translation> <translation>An old configuration file already exists</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="657"/>
<source>A directory already exists for the application data</source> <source>A directory already exists for the application data</source>
<translation>A directory already exists for the application data</translation> <translation>A directory already exists for the application data</translation>
</message> </message>
<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> <source>Failed to create the directory</source>
<translation>Failed to create the directory</translation> <translation>Failed to create the directory</translation>
</message> </message>
<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; <source>It&apos;s suggested to renew it, but you can keep it by answering &apos;No&apos;
Overwrite the file?</source> Overwrite the file?</source>
<translation>It&apos;s suggested to renew it, but you can keep it by answering &apos;No&apos; <translation>It&apos;s suggested to renew it, but you can keep it by answering &apos;No&apos;
Overwrite the file?</translation> Overwrite the file?</translation>
</message> </message>
<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 <source>If you choose to proceed, it will be overwritten
Continue?</source> Continue?</source>
<translation>If you choose to proceed, it will be overwritten <translation>If you choose to proceed, it will be overwritten
Continue?</translation> Continue?</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="659"/>
<source>If you choose to proceed, the content will be overwritten, <source>If you choose to proceed, the content will be overwritten,
exception made for databases, which won&apos;t be affected exception made for databases, which won&apos;t be affected
Continue?</source> Continue?</source>
@ -347,5 +237,21 @@ Continue?</source>
exception made for databases, which won&apos;t be affected exception made for databases, which won&apos;t be affected
Continue?</translation> Continue?</translation>
</message> </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> </context>
</TS> </TS>

View File

@ -4,12 +4,10 @@
<context> <context>
<name>DialogBool</name> <name>DialogBool</name>
<message> <message>
<location filename="../modules/dialogs/dialogbool.ui" line="178"/>
<source>Yes</source> <source>Yes</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../modules/dialogs/dialogbool.ui" line="197"/>
<source>No</source> <source>No</source>
<translation>No</translation> <translation>No</translation>
</message> </message>
@ -17,7 +15,6 @@
<context> <context>
<name>DialogMsg</name> <name>DialogMsg</name>
<message> <message>
<location filename="../modules/dialogs/dialogmsg.ui" line="244"/>
<source>Ok</source> <source>Ok</source>
<translation>Ok</translation> <translation>Ok</translation>
</message> </message>
@ -25,321 +22,214 @@
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../mainwindow.ui" line="14"/>
<source>LogDoctor - Installer</source> <source>LogDoctor - Installer</source>
<translation type="unfinished">LogDoctor - Instalador</translation> <translation type="unfinished">LogDoctor - Instalador</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="73"/>
<source>Application paths</source> <source>Application paths</source>
<translation type="unfinished">Rutas de la aplicación</translation> <translation type="unfinished">Rutas de la aplicación</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="100"/>
<source>Installation options</source> <source>Installation options</source>
<translation type="unfinished">Opciones de instalación</translation> <translation type="unfinished">Opciones de instalación</translation>
</message> </message>
<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> <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> <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>
<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> <source>The path where the executable file will be placed in</source>
<translation type="unfinished">La ruta donde se colocará el archivo ejecutable</translation> <translation type="unfinished">La ruta donde se colocará el archivo ejecutable</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="209"/>
<source>Executable</source> <source>Executable</source>
<translation type="unfinished">Ejecutable</translation> <translation type="unfinished">Ejecutable</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="313"/>
<source>The path where the configuration file will be saved and searched in</source> <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> <translation type="unfinished">La ruta donde se guardará y buscará el archivo de configuración</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="316"/>
<source>Configuration file</source> <source>Configuration file</source>
<translation type="unfinished">Archivo de configuración</translation> <translation type="unfinished">Archivo de configuración</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="420"/>
<source>The path where the application will search in for extra resources</source> <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> <translation type="unfinished">La ruta donde la aplicación buscará los recursos adicionales</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="423"/>
<source>Application data</source> <source>Application data</source>
<translation type="unfinished">Recursos de la aplicacion</translation> <translation type="unfinished">Recursos de la aplicacion</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="553"/>
<source>Utilities</source> <source>Utilities</source>
<translation type="unfinished">Utilidades</translation> <translation type="unfinished">Utilidades</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="577"/>
<source>Create a menu entry</source> <source>Create a menu entry</source>
<translation type="unfinished">Crear una entrada en el menú</translation> <translation type="unfinished">Crear una entrada en el menú</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="657"/>
<source>Back</source> <source>Back</source>
<translation type="unfinished">Atrás</translation> <translation type="unfinished">Atrás</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="695"/>
<location filename="../mainwindow.cpp" line="182"/>
<source>Next</source> <source>Next</source>
<translation type="unfinished">Próximo</translation> <translation type="unfinished">Próximo</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="748"/>
<source>Installing</source> <source>Installing</source>
<translation type="unfinished">Instalando</translation> <translation type="unfinished">Instalando</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="778"/>
<source>Installation process details</source> <source>Installation process details</source>
<translation type="unfinished">Detalles del proceso de instalación</translation> <translation type="unfinished">Detalles del proceso de instalación</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="803"/>
<source>Installation progress</source> <source>Installation progress</source>
<translation type="unfinished">Progreso de la instalación</translation> <translation type="unfinished">Progreso de la instalación</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="969"/>
<source>Close</source> <source>Close</source>
<translation type="unfinished">Cerrar</translation> <translation type="unfinished">Cerrar</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="1012"/>
<source>Language</source> <source>Language</source>
<translation type="unfinished">Idioma</translation> <translation type="unfinished">Idioma</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="1030"/>
<source>Translate to English</source> <source>Translate to English</source>
<translation type="unfinished">Traducir al Ingles</translation> <translation type="unfinished">Traducir al Ingles</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="1042"/>
<source>Translate to Spanish</source> <source>Translate to Spanish</source>
<translation type="unfinished">Traducir al Español</translation> <translation type="unfinished">Traducir al Español</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="1054"/>
<source>Translate to French</source> <source>Translate to French</source>
<translation type="unfinished">Traducir al Francés</translation> <translation type="unfinished">Traducir al Francés</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="1066"/>
<source>Translate to Italian</source> <source>Translate to Italian</source>
<translation type="unfinished">Traducir al Italiano</translation> <translation type="unfinished">Traducir al Italiano</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="232"/>
<source>Checking the executable path ...</source> <source>Checking the executable path ...</source>
<translation type="unfinished">Comprobando la ruta para el ejecutable ...</translation> <translation type="unfinished">Comprobando la ruta para el ejecutable ...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="238"/>
<source>Checking the configuration path ...</source> <source>Checking the configuration path ...</source>
<translation type="unfinished">Comprobando la ruta para el archivo de configuración ...</translation> <translation type="unfinished">Comprobando la ruta para el archivo de configuración ...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="245"/>
<source>Checking the application data path ...</source> <source>Checking the application data path ...</source>
<translation type="unfinished">Comprobando la ruta para los recursos de la aplicación...</translation> <translation type="unfinished">Comprobando la ruta para los recursos de la aplicación...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="294"/>
<source>Creating the menu entry ...</source> <source>Creating the menu entry ...</source>
<translation type="unfinished">Creando la entrada del menú ...</translation> <translation type="unfinished">Creando la entrada del menú ...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="302"/>
<source>Final steps ...</source> <source>Final steps ...</source>
<translation type="unfinished">Pasos finales ...</translation> <translation type="unfinished">Pasos finales ...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="158"/>
<source>Install</source> <source>Install</source>
<translation type="unfinished">Instalar</translation> <translation type="unfinished">Instalar</translation>
</message> </message>
<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> <source>Installation failed</source>
<translation type="unfinished">Instalación fallida</translation> <translation type="unfinished">Instalación fallida</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="332"/>
<source>The path does not exist</source> <source>The path does not exist</source>
<translation type="unfinished">El camino no existe</translation> <translation type="unfinished">El camino no existe</translation>
</message> </message>
<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> <source>Conflict</source>
<translation type="unfinished">Conflicto</translation> <translation type="unfinished">Conflicto</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="255"/>
<source>Copying the executable file ...</source> <source>Copying the executable file ...</source>
<translation type="unfinished">Copiando el archivo ejecutable ...</translation> <translation type="unfinished">Copiando el archivo ejecutable ...</translation>
</message> </message>
<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> <source>Failed to copy the resource</source>
<translation type="unfinished">Error al copiar el recurso</translation> <translation type="unfinished">Error al copiar el recurso</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="765"/>
<location filename="../mainwindow.cpp" line="886"/>
<source>Failed to assign permissions to the resource</source> <source>Failed to assign permissions to the resource</source>
<translation type="unfinished">Error al asignar permisos al recurso</translation> <translation type="unfinished">Error al asignar permisos al recurso</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="264"/>
<source>Copying the configuration file ...</source> <source>Copying the configuration file ...</source>
<translation type="unfinished">Copiando el archivo de configuración ...</translation> <translation type="unfinished">Copiando el archivo de configuración ...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="271"/>
<source>Copying the application resources ...</source> <source>Copying the application resources ...</source>
<translation type="unfinished">Copiando los recursos de la aplicación ...</translation> <translation type="unfinished">Copiando los recursos de la aplicación ...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="279"/>
<source>Copying the uninstaller ...</source> <source>Copying the uninstaller ...</source>
<translation type="unfinished">Copiando el desinstalador...</translation> <translation type="unfinished">Copiando el desinstalador...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="287"/>
<source>Copying the icon ...</source> <source>Copying the icon ...</source>
<translation type="unfinished">Copiando el icono ...</translation> <translation type="unfinished">Copiando el icono ...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="971"/>
<source>Error</source> <source>Error</source>
<translation type="unfinished">Error</translation> <translation type="unfinished">Error</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="304"/>
<source>Installation successful</source> <source>Installation successful</source>
<translation type="unfinished">Instalación exitosa</translation> <translation type="unfinished">Instalación exitosa</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="308"/>
<source>An error occured while installing LogDoctor</source> <source>An error occured while installing LogDoctor</source>
<translation type="unfinished">Ocurrió un error durante la instalación de LogDoctor</translation> <translation type="unfinished">Ocurrió un error durante la instalación de LogDoctor</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="973"/>
<source>Failed to create the menu entry</source> <source>Failed to create the menu entry</source>
<translation type="unfinished">Error al crear la entrada del menú</translation> <translation type="unfinished">Error al crear la entrada del menú</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="364"/>
<location filename="../mainwindow.cpp" line="447"/>
<source>An executable already exists</source> <source>An executable already exists</source>
<translation type="unfinished">Ya existe un ejecutable</translation> <translation type="unfinished">Ya existe un ejecutable</translation>
</message> </message>
<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> <source>An entry with the same name already exists</source>
<translation type="unfinished">Ya existe una entrada con el mismo nombre</translation> <translation type="unfinished">Ya existe una entrada con el mismo nombre</translation>
</message> </message>
<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> <source>Failed to remove the entry</source>
<translation type="unfinished">Error al eliminar</translation> <translation type="unfinished">Error al eliminar</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="552"/>
<source>An old configuration file already exists</source> <source>An old configuration file already exists</source>
<translation type="unfinished">Ya existe un archivo de configuración antiguo</translation> <translation type="unfinished">Ya existe un archivo de configuración antiguo</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="657"/>
<source>A directory already exists for the application data</source> <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> <translation type="unfinished">Ya existe un directorio para los recursos de la aplicación</translation>
</message> </message>
<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> <source>Failed to create the directory</source>
<translation type="unfinished">Error al crear el directorio</translation> <translation type="unfinished">Error al crear el directorio</translation>
</message> </message>
<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; <source>It&apos;s suggested to renew it, but you can keep it by answering &apos;No&apos;
Overwrite the file?</source> Overwrite the file?</source>
<translation type="unfinished">Se sugiere renovarlo, pero puede conservarlo respondiendo &apos;No&apos; <translation type="unfinished">Se sugiere renovarlo, pero puede conservarlo respondiendo &apos;No&apos;
¿Sobrescribir el archivo?</translation> ¿Sobrescribir el archivo?</translation>
</message> </message>
<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 <source>If you choose to proceed, it will be overwritten
Continue?</source> Continue?</source>
<translation type="unfinished">Si elige continuar, se sobrescribirá <translation type="unfinished">Si elige continuar, se sobrescribirá
¿Continuar?</translation> ¿Continuar?</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="659"/>
<source>If you choose to proceed, the content will be overwritten, <source>If you choose to proceed, the content will be overwritten,
exception made for databases, which won&apos;t be affected exception made for databases, which won&apos;t be affected
Continue?</source> Continue?</source>
@ -347,5 +237,21 @@ Continue?</source>
excepción hecha para databases, que no se verá afectada excepción hecha para databases, que no se verá afectada
¿Continuar?</translation> ¿Continuar?</translation>
</message> </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> </context>
</TS> </TS>

View File

@ -4,12 +4,10 @@
<context> <context>
<name>DialogBool</name> <name>DialogBool</name>
<message> <message>
<location filename="../modules/dialogs/dialogbool.ui" line="178"/>
<source>Yes</source> <source>Yes</source>
<translation>Oui</translation> <translation>Oui</translation>
</message> </message>
<message> <message>
<location filename="../modules/dialogs/dialogbool.ui" line="197"/>
<source>No</source> <source>No</source>
<translation>Non</translation> <translation>Non</translation>
</message> </message>
@ -17,7 +15,6 @@
<context> <context>
<name>DialogMsg</name> <name>DialogMsg</name>
<message> <message>
<location filename="../modules/dialogs/dialogmsg.ui" line="244"/>
<source>Ok</source> <source>Ok</source>
<translation>Ok</translation> <translation>Ok</translation>
</message> </message>
@ -25,321 +22,214 @@
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../mainwindow.ui" line="14"/>
<source>LogDoctor - Installer</source> <source>LogDoctor - Installer</source>
<translation type="unfinished">LogDoctor - Installateur</translation> <translation type="unfinished">LogDoctor - Installateur</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="73"/>
<source>Application paths</source> <source>Application paths</source>
<translation type="unfinished">Chemins de l&apos;application</translation> <translation type="unfinished">Chemins de l&apos;application</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="100"/>
<source>Installation options</source> <source>Installation options</source>
<translation type="unfinished">Choix d&apos;installation</translation> <translation type="unfinished">Choix d&apos;installation</translation>
</message> </message>
<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> <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> <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>
<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> <source>The path where the executable file will be placed in</source>
<translation type="unfinished">Le chemin sera placé le fichier exécutable</translation> <translation type="unfinished">Le chemin sera placé le fichier exécutable</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="209"/>
<source>Executable</source> <source>Executable</source>
<translation type="unfinished">Exécutable</translation> <translation type="unfinished">Exécutable</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="313"/>
<source>The path where the configuration file will be saved and searched in</source> <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> <translation type="unfinished">Le chemin le fichier de configuration sera enregistré et recherché dans</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="316"/>
<source>Configuration file</source> <source>Configuration file</source>
<translation type="unfinished">Fichier de configuration</translation> <translation type="unfinished">Fichier de configuration</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="420"/>
<source>The path where the application will search in for extra resources</source> <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> <translation type="unfinished">Le chemin l&apos;application recherchera des ressources supplémentaires</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="423"/>
<source>Application data</source> <source>Application data</source>
<translation type="unfinished">Ressources de l&apos;application</translation> <translation type="unfinished">Ressources de l&apos;application</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="553"/>
<source>Utilities</source> <source>Utilities</source>
<translation type="unfinished">Utilitaires</translation> <translation type="unfinished">Utilitaires</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="577"/>
<source>Create a menu entry</source> <source>Create a menu entry</source>
<translation type="unfinished">Créer une entrée dans le menu</translation> <translation type="unfinished">Créer une entrée dans le menu</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="657"/>
<source>Back</source> <source>Back</source>
<translation type="unfinished">Retour</translation> <translation type="unfinished">Retour</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="695"/>
<location filename="../mainwindow.cpp" line="182"/>
<source>Next</source> <source>Next</source>
<translation type="unfinished">Prochain</translation> <translation type="unfinished">Prochain</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="748"/>
<source>Installing</source> <source>Installing</source>
<translation type="unfinished">Installation</translation> <translation type="unfinished">Installation</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="778"/>
<source>Installation process details</source> <source>Installation process details</source>
<translation type="unfinished">Détails du processus d&apos;installation</translation> <translation type="unfinished">Détails du processus d&apos;installation</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="803"/>
<source>Installation progress</source> <source>Installation progress</source>
<translation type="unfinished">Avancement de l&apos;installation</translation> <translation type="unfinished">Avancement de l&apos;installation</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="969"/>
<source>Close</source> <source>Close</source>
<translation type="unfinished">Conclure</translation> <translation type="unfinished">Conclure</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="1012"/>
<source>Language</source> <source>Language</source>
<translation type="unfinished">Langage</translation> <translation type="unfinished">Langage</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="1030"/>
<source>Translate to English</source> <source>Translate to English</source>
<translation type="unfinished">Traduire en Anglais</translation> <translation type="unfinished">Traduire en Anglais</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="1042"/>
<source>Translate to Spanish</source> <source>Translate to Spanish</source>
<translation type="unfinished">Traduire en Espagnol</translation> <translation type="unfinished">Traduire en Espagnol</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="1054"/>
<source>Translate to French</source> <source>Translate to French</source>
<translation type="unfinished">Traduire en Français</translation> <translation type="unfinished">Traduire en Français</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="1066"/>
<source>Translate to Italian</source> <source>Translate to Italian</source>
<translation type="unfinished">Traduire en Italien</translation> <translation type="unfinished">Traduire en Italien</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="232"/>
<source>Checking the executable path ...</source> <source>Checking the executable path ...</source>
<translation type="unfinished">Vérification du chemin pour le l&apos;exécutable ...</translation> <translation type="unfinished">Vérification du chemin pour le l&apos;exécutable ...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="238"/>
<source>Checking the configuration path ...</source> <source>Checking the configuration path ...</source>
<translation type="unfinished">Vérification du chemin pour le fichier de configuration ...</translation> <translation type="unfinished">Vérification du chemin pour le fichier de configuration ...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="245"/>
<source>Checking the application data path ...</source> <source>Checking the application data path ...</source>
<translation type="unfinished">Vérification du chemin pour les ressources d&apos;application...</translation> <translation type="unfinished">Vérification du chemin pour les ressources d&apos;application...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="294"/>
<source>Creating the menu entry ...</source> <source>Creating the menu entry ...</source>
<translation type="unfinished">Création de l&apos;entrée de menu ...</translation> <translation type="unfinished">Création de l&apos;entrée de menu ...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="302"/>
<source>Final steps ...</source> <source>Final steps ...</source>
<translation type="unfinished">Dernières étapes ...</translation> <translation type="unfinished">Dernières étapes ...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="158"/>
<source>Install</source> <source>Install</source>
<translation type="unfinished">Installer</translation> <translation type="unfinished">Installer</translation>
</message> </message>
<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> <source>Installation failed</source>
<translation type="unfinished">L&apos;installation a échoué</translation> <translation type="unfinished">L&apos;installation a échoué</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="332"/>
<source>The path does not exist</source> <source>The path does not exist</source>
<translation type="unfinished">Le chemin n&apos;existe</translation> <translation type="unfinished">Le chemin n&apos;existe</translation>
</message> </message>
<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> <source>Conflict</source>
<translation type="unfinished">Conflit</translation> <translation type="unfinished">Conflit</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="255"/>
<source>Copying the executable file ...</source> <source>Copying the executable file ...</source>
<translation type="unfinished">Copie du fichier exécutable ...</translation> <translation type="unfinished">Copie du fichier exécutable ...</translation>
</message> </message>
<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> <source>Failed to copy the resource</source>
<translation type="unfinished">Échec en la copie de la ressource</translation> <translation type="unfinished">Échec en la copie de la ressource</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="765"/>
<location filename="../mainwindow.cpp" line="886"/>
<source>Failed to assign permissions to the resource</source> <source>Failed to assign permissions to the resource</source>
<translation type="unfinished">Échec en l&apos;attribution des autorisations à la ressource</translation> <translation type="unfinished">Échec en l&apos;attribution des autorisations à la ressource</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="264"/>
<source>Copying the configuration file ...</source> <source>Copying the configuration file ...</source>
<translation type="unfinished">Copie du fichier de configuration ...</translation> <translation type="unfinished">Copie du fichier de configuration ...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="271"/>
<source>Copying the application resources ...</source> <source>Copying the application resources ...</source>
<translation type="unfinished">Copie des ressources de l&apos;application...</translation> <translation type="unfinished">Copie des ressources de l&apos;application...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="279"/>
<source>Copying the uninstaller ...</source> <source>Copying the uninstaller ...</source>
<translation type="unfinished">Copie du programme de désinstallation ...</translation> <translation type="unfinished">Copie du programme de désinstallation ...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="287"/>
<source>Copying the icon ...</source> <source>Copying the icon ...</source>
<translation type="unfinished">Copie de l&apos;icône ...</translation> <translation type="unfinished">Copie de l&apos;icône ...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="971"/>
<source>Error</source> <source>Error</source>
<translation type="unfinished">Erreur</translation> <translation type="unfinished">Erreur</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="304"/>
<source>Installation successful</source> <source>Installation successful</source>
<translation type="unfinished">Installation réussie</translation> <translation type="unfinished">Installation réussie</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="308"/>
<source>An error occured while installing LogDoctor</source> <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> <translation type="unfinished">Une erreur s&apos;est produite lors de l&apos;installation de LogDoctor</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="973"/>
<source>Failed to create the menu entry</source> <source>Failed to create the menu entry</source>
<translation type="unfinished">Impossible de créer l&apos;entrée de menu</translation> <translation type="unfinished">Impossible de créer l&apos;entrée de menu</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="364"/>
<location filename="../mainwindow.cpp" line="447"/>
<source>An executable already exists</source> <source>An executable already exists</source>
<translation type="unfinished">Un exécutable existe déjà</translation> <translation type="unfinished">Un exécutable existe déjà</translation>
</message> </message>
<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> <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> <translation type="unfinished">Une entrée avec le même nom existe déjà</translation>
</message> </message>
<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> <source>Failed to remove the entry</source>
<translation type="unfinished">Échec de la suppression</translation> <translation type="unfinished">Échec de la suppression</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="552"/>
<source>An old configuration file already exists</source> <source>An old configuration file already exists</source>
<translation type="unfinished">Un ancien fichier de configuration existe déjà</translation> <translation type="unfinished">Un ancien fichier de configuration existe déjà</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="657"/>
<source>A directory already exists for the application data</source> <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> <translation type="unfinished">Un répertoire existe déjà pour les ressources de l&apos;application</translation>
</message> </message>
<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> <source>Failed to create the directory</source>
<translation type="unfinished">Impossible de créer le répertoire</translation> <translation type="unfinished">Impossible de créer le répertoire</translation>
</message> </message>
<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; <source>It&apos;s suggested to renew it, but you can keep it by answering &apos;No&apos;
Overwrite the file?</source> 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; <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> Ecraser le fichier?</translation>
</message> </message>
<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 <source>If you choose to proceed, it will be overwritten
Continue?</source> Continue?</source>
<translation type="unfinished">Si vous choisissez de continuer, il sera écrasé <translation type="unfinished">Si vous choisissez de continuer, il sera écrasé
Continuer?</translation> Continuer?</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="659"/>
<source>If you choose to proceed, the content will be overwritten, <source>If you choose to proceed, the content will be overwritten,
exception made for databases, which won&apos;t be affected exception made for databases, which won&apos;t be affected
Continue?</source> Continue?</source>
@ -347,5 +237,21 @@ Continue?</source>
exception faite pour les databases, qui ne seront pas affectées exception faite pour les databases, qui ne seront pas affectées
Continuer?</translation> Continuer?</translation>
</message> </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> </context>
</TS> </TS>

View File

@ -4,12 +4,10 @@
<context> <context>
<name>DialogBool</name> <name>DialogBool</name>
<message> <message>
<location filename="../modules/dialogs/dialogbool.ui" line="178"/>
<source>Yes</source> <source>Yes</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../modules/dialogs/dialogbool.ui" line="197"/>
<source>No</source> <source>No</source>
<translation>No</translation> <translation>No</translation>
</message> </message>
@ -17,7 +15,6 @@
<context> <context>
<name>DialogMsg</name> <name>DialogMsg</name>
<message> <message>
<location filename="../modules/dialogs/dialogmsg.ui" line="244"/>
<source>Ok</source> <source>Ok</source>
<translation>Ok</translation> <translation>Ok</translation>
</message> </message>
@ -25,321 +22,214 @@
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../mainwindow.ui" line="14"/>
<source>LogDoctor - Installer</source> <source>LogDoctor - Installer</source>
<translation>LogDoctor - Installazione</translation> <translation>LogDoctor - Installazione</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="73"/>
<source>Application paths</source> <source>Application paths</source>
<translation>Percorso dell&apos;applicazione</translation> <translation>Percorso dell&apos;applicazione</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="100"/>
<source>Installation options</source> <source>Installation options</source>
<translation>Opzioni di installazione</translation> <translation>Opzioni di installazione</translation>
</message> </message>
<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> <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> <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>
<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> <source>The path where the executable file will be placed in</source>
<translation>Il percorso in cui verrà posizionato l&apos;eseguibile</translation> <translation>Il percorso in cui verrà posizionato l&apos;eseguibile</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="209"/>
<source>Executable</source> <source>Executable</source>
<translation>Eseguibile</translation> <translation>Eseguibile</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="313"/>
<source>The path where the configuration file will be saved and searched in</source> <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> <translation>Il percorso in cui verrà salvato e cercato il file di configurazione</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="316"/>
<source>Configuration file</source> <source>Configuration file</source>
<translation>File di configurazione</translation> <translation>File di configurazione</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="420"/>
<source>The path where the application will search in for extra resources</source> <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> <translation>Il percorso in cui l&apos;applicazione cercherà le risorse extra</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="423"/>
<source>Application data</source> <source>Application data</source>
<translation>Risorse dell&apos;applicazione</translation> <translation>Risorse dell&apos;applicazione</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="553"/>
<source>Utilities</source> <source>Utilities</source>
<translation>Utilità</translation> <translation>Utilità</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="577"/>
<source>Create a menu entry</source> <source>Create a menu entry</source>
<translation>Crea un collegamento nel menù</translation> <translation>Crea un collegamento nel menù</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="657"/>
<source>Back</source> <source>Back</source>
<translation>Indietro</translation> <translation>Indietro</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="695"/>
<location filename="../mainwindow.cpp" line="182"/>
<source>Next</source> <source>Next</source>
<translation>Avanti</translation> <translation>Avanti</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="748"/>
<source>Installing</source> <source>Installing</source>
<translation>Installazione</translation> <translation>Installazione</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="778"/>
<source>Installation process details</source> <source>Installation process details</source>
<translation>Dettagli del processo di installazione</translation> <translation>Dettagli del processo di installazione</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="803"/>
<source>Installation progress</source> <source>Installation progress</source>
<translation>Progresso dell&apos;installazione</translation> <translation>Progresso dell&apos;installazione</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="969"/>
<source>Close</source> <source>Close</source>
<translation>Chiudi</translation> <translation>Chiudi</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="1012"/>
<source>Language</source> <source>Language</source>
<translation>Lingua</translation> <translation>Lingua</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="1030"/>
<source>Translate to English</source> <source>Translate to English</source>
<translation>Traduci in Inglese</translation> <translation>Traduci in Inglese</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="1042"/>
<source>Translate to Spanish</source> <source>Translate to Spanish</source>
<translation>Traduci in Spagnolo</translation> <translation>Traduci in Spagnolo</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="1054"/>
<source>Translate to French</source> <source>Translate to French</source>
<translation>Traduci in Francese</translation> <translation>Traduci in Francese</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.ui" line="1066"/>
<source>Translate to Italian</source> <source>Translate to Italian</source>
<translation>Traduci in Italiano</translation> <translation>Traduci in Italiano</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="232"/>
<source>Checking the executable path ...</source> <source>Checking the executable path ...</source>
<translation>Controllo del percorso dell&apos;eseguibile ...</translation> <translation>Controllo del percorso dell&apos;eseguibile ...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="238"/>
<source>Checking the configuration path ...</source> <source>Checking the configuration path ...</source>
<translation>Controllo del percorso del file di configurazione ...</translation> <translation>Controllo del percorso del file di configurazione ...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="245"/>
<source>Checking the application data path ...</source> <source>Checking the application data path ...</source>
<translation>Controllo del percorso delle risorse dell&apos;applicazione ...</translation> <translation>Controllo del percorso delle risorse dell&apos;applicazione ...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="294"/>
<source>Creating the menu entry ...</source> <source>Creating the menu entry ...</source>
<translation>Creazione del collegamento al menù ...</translation> <translation>Creazione del collegamento al menù ...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="302"/>
<source>Final steps ...</source> <source>Final steps ...</source>
<translation>Passi finali ...</translation> <translation>Passi finali ...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="158"/>
<source>Install</source> <source>Install</source>
<translation>Installa</translation> <translation>Installa</translation>
</message> </message>
<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> <source>Installation failed</source>
<translation>Installazione fallita</translation> <translation>Installazione fallita</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="332"/>
<source>The path does not exist</source> <source>The path does not exist</source>
<translation>Il percorso non esiste</translation> <translation>Il percorso non esiste</translation>
</message> </message>
<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> <source>Conflict</source>
<translation>Conflitto</translation> <translation>Conflitto</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="255"/>
<source>Copying the executable file ...</source> <source>Copying the executable file ...</source>
<translation>Copia del file eseguibile in corso ...</translation> <translation>Copia del file eseguibile in corso ...</translation>
</message> </message>
<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> <source>Failed to copy the resource</source>
<translation>Errore nel copiare le risorse</translation> <translation>Errore nel copiare le risorse</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="765"/>
<location filename="../mainwindow.cpp" line="886"/>
<source>Failed to assign permissions to the resource</source> <source>Failed to assign permissions to the resource</source>
<translation>Errore nell&apos;assegnare i permessi alle risorse</translation> <translation>Errore nell&apos;assegnare i permessi alle risorse</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="264"/>
<source>Copying the configuration file ...</source> <source>Copying the configuration file ...</source>
<translation>Copia del file di configurazione in corso ...</translation> <translation>Copia del file di configurazione in corso ...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="271"/>
<source>Copying the application resources ...</source> <source>Copying the application resources ...</source>
<translation>Copia delle risorse dell&apos;applicazione in corso ...</translation> <translation>Copia delle risorse dell&apos;applicazione in corso ...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="279"/>
<source>Copying the uninstaller ...</source> <source>Copying the uninstaller ...</source>
<translation>Copia del disinstallatore in corso ...</translation> <translation>Copia del disinstallatore in corso ...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="287"/>
<source>Copying the icon ...</source> <source>Copying the icon ...</source>
<translation>Copia dell&apos;icona in corso ...</translation> <translation>Copia dell&apos;icona in corso ...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="971"/>
<source>Error</source> <source>Error</source>
<translation>Errore</translation> <translation>Errore</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="304"/>
<source>Installation successful</source> <source>Installation successful</source>
<translation>Installazione riuscita</translation> <translation>Installazione riuscita</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="308"/>
<source>An error occured while installing LogDoctor</source> <source>An error occured while installing LogDoctor</source>
<translation>È avvenuto un errore durante l&apos;installazione di LogDoctor</translation> <translation>È avvenuto un errore durante l&apos;installazione di LogDoctor</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="973"/>
<source>Failed to create the menu entry</source> <source>Failed to create the menu entry</source>
<translation>Errore nel creare il collegamento al menù</translation> <translation>Errore nel creare il collegamento al menù</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="364"/>
<location filename="../mainwindow.cpp" line="447"/>
<source>An executable already exists</source> <source>An executable already exists</source>
<translation>Esiste già un eseguibile</translation> <translation>Esiste già un eseguibile</translation>
</message> </message>
<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> <source>An entry with the same name already exists</source>
<translation>Esiste già un oggetto con lo stesso nome</translation> <translation>Esiste già un oggetto con lo stesso nome</translation>
</message> </message>
<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> <source>Failed to remove the entry</source>
<translation>Errore nella rimozione</translation> <translation>Errore nella rimozione</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="552"/>
<source>An old configuration file already exists</source> <source>An old configuration file already exists</source>
<translation>Un file di configurazione è già presente</translation> <translation>Un file di configurazione è già presente</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="657"/>
<source>A directory already exists for the application data</source> <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>
<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> <source>Failed to create the directory</source>
<translation>Errore nella creazione della cartella</translation> <translation>Errore nella creazione della cartella</translation>
</message> </message>
<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; <source>It&apos;s suggested to renew it, but you can keep it by answering &apos;No&apos;
Overwrite the file?</source> Overwrite the file?</source>
<translation>Sarebbe meglio rinnovarlo, ma puoi decidere di tenerlo scegliendo &apos;No&apos; <translation>Sarebbe meglio rinnovarlo, ma puoi decidere di tenerlo scegliendo &apos;No&apos;
Sovrascrivere il file?</translation> Sovrascrivere il file?</translation>
</message> </message>
<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 <source>If you choose to proceed, it will be overwritten
Continue?</source> Continue?</source>
<translation>Se scegli di procedere, verrà sovrascritto <translation>Se scegli di procedere, verrà sovrascritto
Continuare?</translation> Continuare?</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="659"/>
<source>If you choose to proceed, the content will be overwritten, <source>If you choose to proceed, the content will be overwritten,
exception made for databases, which won&apos;t be affected exception made for databases, which won&apos;t be affected
Continue?</source> Continue?</source>
@ -347,5 +237,21 @@ Continue?</source>
ad eccezione dei database, che non verranno toccati ad eccezione dei database, che non verranno toccati
Continuare?</translation> Continuare?</translation>
</message> </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> </context>
</TS> </TS>