Use only x-platform code.
This commit is contained in:
parent
c6c84ed528
commit
cfef4b025b
5 changed files with 130 additions and 45 deletions
|
@ -39,6 +39,12 @@
|
||||||
# Setup basic variables.
|
# Setup basic variables.
|
||||||
project(rssguard)
|
project(rssguard)
|
||||||
|
|
||||||
|
if(WIN32 OR OS2)
|
||||||
|
project(rssguard_updater)
|
||||||
|
|
||||||
|
set(UPDATER_EXE_NAME "rssguard_updater")
|
||||||
|
endif(WIN32 OR OS2)
|
||||||
|
|
||||||
set(APP_NAME "RSS Guard")
|
set(APP_NAME "RSS Guard")
|
||||||
set(APP_LOW_NAME "rssguard")
|
set(APP_LOW_NAME "rssguard")
|
||||||
set(APP_VERSION "1.9.9.8")
|
set(APP_VERSION "1.9.9.8")
|
||||||
|
@ -141,6 +147,11 @@ configure_file (
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/src/definitions/definitions.h
|
${CMAKE_CURRENT_BINARY_DIR}/src/definitions/definitions.h
|
||||||
)
|
)
|
||||||
|
|
||||||
|
configure_file (
|
||||||
|
${PROJECT_SOURCE_DIR}/src/updater/definitions.h.in
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/src/updater/definitions.h
|
||||||
|
)
|
||||||
|
|
||||||
# Define some useful DEBUG for, ehrm, debug build.
|
# Define some useful DEBUG for, ehrm, debug build.
|
||||||
if(CMAKE_BUILD_TYPE STREQUAL "release" OR CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "RELEASE")
|
if(CMAKE_BUILD_TYPE STREQUAL "release" OR CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "RELEASE")
|
||||||
message(STATUS "[${APP_LOW_NAME}] A release build (non-debug) is chosen. Debugging outputs are silently ignored.")
|
message(STATUS "[${APP_LOW_NAME}] A release build (non-debug) is chosen. Debugging outputs are silently ignored.")
|
||||||
|
@ -452,6 +463,26 @@ set(APP_TEXT
|
||||||
resources/text/AUTHORS
|
resources/text/AUTHORS
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Setup source & header files for "rssguard_updater".
|
||||||
|
if(WIN32 OR OS2)
|
||||||
|
set(UPDATER_SOURCES
|
||||||
|
# QTSINGLEAPPLICATION sources.
|
||||||
|
src/qtsingleapplication/qtlocalpeer.cpp
|
||||||
|
src/qtsingleapplication/qtsinglecoreapplication.cpp
|
||||||
|
|
||||||
|
src/updater/detector.cpp
|
||||||
|
src/updater/main.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
set(UPDATER_HEADERS
|
||||||
|
# QTSINGLEAPPLICATION headers.
|
||||||
|
src/qtsingleapplication/qtlocalpeer.h
|
||||||
|
src/qtsingleapplication/qtsinglecoreapplication.h
|
||||||
|
|
||||||
|
src/updater/detector.h
|
||||||
|
)
|
||||||
|
endif(WIN32 OR OS2)
|
||||||
|
|
||||||
# Add custom icon on Mac OS X.
|
# Add custom icon on Mac OS X.
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
SET (APP_SOURCES ${APP_SOURCES} resources/graphics/rssguard.icns)
|
SET (APP_SOURCES ${APP_SOURCES} resources/graphics/rssguard.icns)
|
||||||
|
@ -474,6 +505,11 @@ else(${USE_QT_5})
|
||||||
|
|
||||||
# Load translations.
|
# Load translations.
|
||||||
qt4_add_translation(APP_QM ${APP_TRANSLATIONS})
|
qt4_add_translation(APP_QM ${APP_TRANSLATIONS})
|
||||||
|
|
||||||
|
# Setup Qt for "rssguard_updater".
|
||||||
|
if(WIN32 OR OS2)
|
||||||
|
qt4_wrap_cpp(UPDATER_MOC ${UPDATER_HEADERS})
|
||||||
|
endif(WIN32 OR OS2)
|
||||||
endif(${USE_QT_5})
|
endif(${USE_QT_5})
|
||||||
|
|
||||||
# Include additional directory paths.
|
# Include additional directory paths.
|
||||||
|
@ -487,53 +523,35 @@ include_directories (
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/src
|
${CMAKE_CURRENT_BINARY_DIR}/src
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Compile "rssguard_updater" utility on supported platforms.
|
||||||
if(WIN32 OR OS2)
|
if(WIN32 OR OS2)
|
||||||
project(updater)
|
message(STATUS "[${APP_LOW_NAME}] RSS Guard updater will be compiled.")
|
||||||
|
|
||||||
set(UPDATER_SOURCES
|
|
||||||
# QTSINGLEAPPLICATION sources.
|
|
||||||
src/qtsingleapplication/qtlocalpeer.cpp
|
|
||||||
src/qtsingleapplication/qtsinglecoreapplication.cpp
|
|
||||||
|
|
||||||
src/updater/detector.cpp
|
|
||||||
src/updater/main.cpp
|
|
||||||
)
|
|
||||||
|
|
||||||
set(UPDATER_HEADERS
|
|
||||||
# QTSINGLEAPPLICATION headers.
|
|
||||||
src/qtsingleapplication/qtlocalpeer.h
|
|
||||||
src/qtsingleapplication/qtsinglecoreapplication.h
|
|
||||||
|
|
||||||
src/updater/detector.h
|
|
||||||
)
|
|
||||||
|
|
||||||
if(${USE_QT_5})
|
if(${USE_QT_5})
|
||||||
add_executable("updater"
|
add_executable(${UPDATER_EXE_NAME}
|
||||||
${UPDATER_SOURCES}
|
${UPDATER_SOURCES}
|
||||||
)
|
)
|
||||||
|
|
||||||
# Use modules from Qt.
|
# Use modules from Qt.
|
||||||
qt5_use_modules(updater
|
qt5_use_modules(rssguard_updater
|
||||||
Core
|
Core
|
||||||
Network
|
Network
|
||||||
)
|
)
|
||||||
else(${USE_QT_5})
|
else(${USE_QT_5})
|
||||||
qt4_wrap_cpp(UPDATER_MOC ${UPDATER_HEADERS})
|
add_executable(${UPDATER_EXE_NAME}
|
||||||
|
|
||||||
add_executable("updater"
|
|
||||||
${UPDATER_SOURCES}
|
${UPDATER_SOURCES}
|
||||||
${UPDATER_MOC}
|
${UPDATER_MOC}
|
||||||
)
|
)
|
||||||
|
|
||||||
# Link modules from Qt.
|
# Link modules from Qt.
|
||||||
target_link_libraries("updater"
|
target_link_libraries(${UPDATER_EXE_NAME}
|
||||||
${QT_QTCORE_LIBRARY}
|
${QT_QTCORE_LIBRARY}
|
||||||
${QT_QTNETWORK_LIBRARY}
|
${QT_QTNETWORK_LIBRARY}
|
||||||
)
|
)
|
||||||
endif(${USE_QT_5})
|
endif(${USE_QT_5})
|
||||||
endif(WIN32 OR OS2)
|
endif(WIN32 OR OS2)
|
||||||
|
|
||||||
# Setup compilation for Qt 5.
|
# Compile "rssguard"
|
||||||
if(${USE_QT_5})
|
if(${USE_QT_5})
|
||||||
add_executable(${EXE_NAME} WIN32 MACOSX_BUNDLE
|
add_executable(${EXE_NAME} WIN32 MACOSX_BUNDLE
|
||||||
${APP_SOURCES}
|
${APP_SOURCES}
|
||||||
|
@ -605,6 +623,10 @@ if(WIN32 OR OS2)
|
||||||
DESTINATION ./l10n)
|
DESTINATION ./l10n)
|
||||||
install(FILES ${APP_TEXT}
|
install(FILES ${APP_TEXT}
|
||||||
DESTINATION ./)
|
DESTINATION ./)
|
||||||
|
|
||||||
|
# Copy "7za" utility.
|
||||||
|
install(FILES resources/7za/7za.exe resources/7za/7za_license.txt
|
||||||
|
DESTINATION ./)
|
||||||
elseif(APPLE)
|
elseif(APPLE)
|
||||||
message(STATUS "[${APP_LOW_NAME}] You will probably install on Mac OS X.")
|
message(STATUS "[${APP_LOW_NAME}] You will probably install on Mac OS X.")
|
||||||
|
|
||||||
|
|
|
@ -174,6 +174,7 @@
|
||||||
#define APP_ICON_PATH APP_PREFIX + QString("/share/pixmaps/@APP_LOW_NAME@.png")
|
#define APP_ICON_PATH APP_PREFIX + QString("/share/pixmaps/@APP_LOW_NAME@.png")
|
||||||
#define APP_ICON_PLAIN_PATH APP_PREFIX + QString("/share/rssguard/icons/@APP_LOW_NAME@_plain.png")
|
#define APP_ICON_PLAIN_PATH APP_PREFIX + QString("/share/rssguard/icons/@APP_LOW_NAME@_plain.png")
|
||||||
#elif defined(Q_OS_WIN) || defined(Q_OS_OS2)
|
#elif defined(Q_OS_WIN) || defined(Q_OS_OS2)
|
||||||
|
#define APP_UPDATER_EXECUTABLE "rssguard_updater.exe"
|
||||||
#define APP_LANG_PATH QApplication::applicationDirPath() + QString("/l10n")
|
#define APP_LANG_PATH QApplication::applicationDirPath() + QString("/l10n")
|
||||||
#define APP_SKIN_PATH QApplication::applicationDirPath() + QString("/skins")
|
#define APP_SKIN_PATH QApplication::applicationDirPath() + QString("/skins")
|
||||||
#define APP_INFO_PATH QApplication::applicationDirPath()
|
#define APP_INFO_PATH QApplication::applicationDirPath()
|
||||||
|
|
|
@ -142,19 +142,18 @@ void FormUpdate::startUpdate() {
|
||||||
// ze je otevreny modalni okno.
|
// ze je otevreny modalni okno.
|
||||||
close();
|
close();
|
||||||
|
|
||||||
#if defined(Q_OS_WIN32)
|
QProcess::startDetached(APP_UPDATER_EXECUTABLE,
|
||||||
|
QStringList() << temp_directory <<qApp->applicationFilePath() << output_file.fileName());
|
||||||
|
/*
|
||||||
ShellExecute(0,
|
ShellExecute(0,
|
||||||
0,
|
0,
|
||||||
(wchar_t *) QString("updater.exe").utf16(),
|
(wchar_t *) QString(APP_UPDATER_EXECUTABLE).utf16(),
|
||||||
(wchar_t *) QString("\"%1\" \"%2\" \"%3\"").arg(temp_directory,
|
(wchar_t *) QString("\"%1\" \"%2\" \"%3\"").arg(temp_directory,
|
||||||
qApp->applicationFilePath(),
|
qApp->applicationFilePath(),
|
||||||
output_file.fileName()).utf16(),
|
output_file.fileName()).utf16(),
|
||||||
0,
|
0,
|
||||||
SW_SHOWNORMAL);
|
SW_SHOWNORMAL);
|
||||||
#elif defined(Q_OS_OS2)
|
*/
|
||||||
|
|
||||||
#endif
|
|
||||||
// TODO: vetev pro osn
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// TODO: chyba - nelze zapisovat do souboru
|
// TODO: chyba - nelze zapisovat do souboru
|
||||||
|
|
10
src/updater/definitions.h.in
Normal file
10
src/updater/definitions.h.in
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
#ifndef DEFINITIONS_H_IN
|
||||||
|
#define DEFINITIONS_H_IN
|
||||||
|
|
||||||
|
#define RSSGUARD_LOW_NAME "@APP_LOW_NAME@"
|
||||||
|
|
||||||
|
#define UPDATER_QUIT_INSTANCE "app_quit"
|
||||||
|
#define UPDATER_IS_RUNNING "app_is_running"
|
||||||
|
#define EXECUTABLE_7ZA "7za.exe"
|
||||||
|
|
||||||
|
#endif // DEFINITIONS_H_IN
|
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
#include "qtsingleapplication/qtsinglecoreapplication.h"
|
#include "qtsingleapplication/qtsinglecoreapplication.h"
|
||||||
#include "updater/detector.h"
|
#include "updater/detector.h"
|
||||||
|
#include "updater/definitions.h"
|
||||||
|
|
||||||
#include <QTranslator>
|
#include <QTranslator>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
@ -52,10 +53,10 @@ bool removeDir(const QString & dirName) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void copyPath(QString src, QString dst) {
|
bool copyPath(QString src, QString dst) {
|
||||||
QDir dir(src);
|
QDir dir(src);
|
||||||
if (! dir.exists()) {
|
if (! dir.exists()) {
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (QString d, dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot)) {
|
foreach (QString d, dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot)) {
|
||||||
|
@ -65,16 +66,35 @@ void copyPath(QString src, QString dst) {
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (QString f, dir.entryList(QDir::Files)) {
|
foreach (QString f, dir.entryList(QDir::Files)) {
|
||||||
QFile::copy(src + QDir::separator() + f, dst + QDir::separator() + f);
|
QString original_file = src + QDir::separator() + f;
|
||||||
|
QString destination_file = dst + QDir::separator() + f;
|
||||||
|
|
||||||
|
if (!QFile::exists(destination_file) || QFile::remove(destination_file)) {
|
||||||
|
if (QFile::copy(src + QDir::separator() + f, destination_file)) {
|
||||||
|
qDebug("Copied %s", qPrintable(f));
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
qDebug("Failed to copy file '%s'", qPrintable(original_file));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qDebug("Failed to remove file '%s'", qPrintable(original_file));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
// Instantiate base application object.
|
// Instantiate base application object.
|
||||||
QtSingleCoreApplication application("rssguard", argc, argv);
|
QtSingleCoreApplication application(RSSGUARD_LOW_NAME, argc, argv);
|
||||||
|
|
||||||
if (argc != 4) {
|
if (argc != 4) {
|
||||||
qDebug("Insufficient arguments passed. Quitting RSS Guard updater...");
|
qDebug("Insufficient arguments passed. Update process cannot proceed.");
|
||||||
|
qDebug("Press any key to exit updater...");
|
||||||
|
|
||||||
|
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
|
||||||
|
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,10 +112,19 @@ int main(int argc, char *argv[]) {
|
||||||
qDebug("\n===== directories & files =====\n");
|
qDebug("\n===== directories & files =====\n");
|
||||||
|
|
||||||
// Check if main RSS Guard instance is running.
|
// Check if main RSS Guard instance is running.
|
||||||
if (application.sendMessage("app_quit")) {
|
if (application.sendMessage(UPDATER_QUIT_INSTANCE)) {
|
||||||
qDebug("RSS Guard application is running. Quitting it.");
|
qDebug("RSS Guard application is running. Quitting it.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!QFile::exists(update_archive)) {
|
||||||
|
qDebug("Update file '%s' does not exist.", qPrintable(update_archive));
|
||||||
|
qDebug("Press any key to exit updater...");
|
||||||
|
|
||||||
|
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
|
||||||
|
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
Detector detector;
|
Detector detector;
|
||||||
|
|
||||||
qDebug().nospace() << "Running updater in thread: \'" <<
|
qDebug().nospace() << "Running updater in thread: \'" <<
|
||||||
|
@ -105,14 +134,24 @@ int main(int argc, char *argv[]) {
|
||||||
QObject::connect(&application, SIGNAL(messageReceived(QString)),
|
QObject::connect(&application, SIGNAL(messageReceived(QString)),
|
||||||
&detector, SLOT(handleMessage(QString)));
|
&detector, SLOT(handleMessage(QString)));
|
||||||
|
|
||||||
QString extractor_program("7za.exe");
|
QString extractor_program(EXECUTABLE_7ZA);
|
||||||
QStringList arguments;
|
QStringList arguments;
|
||||||
QString output_temp_directory = temp_directory + QDir::separator() + "rssguard";
|
QString output_temp_directory = temp_directory + QDir::separator() + RSSGUARD_LOW_NAME;
|
||||||
|
|
||||||
// Remove old folders.
|
// Remove old folders.
|
||||||
if (QDir(output_temp_directory).exists()) {
|
if (QDir(output_temp_directory).exists()) {
|
||||||
removeDir(output_temp_directory);
|
if (!removeDir(output_temp_directory)) {
|
||||||
|
qDebug("Cleanup of old temporary files failed. Press any key to exit updater...");
|
||||||
|
|
||||||
|
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
|
||||||
|
|
||||||
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
qDebug("Update files are ready. Press any key to proceed...");
|
||||||
|
|
||||||
|
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
|
||||||
|
|
||||||
arguments << "x" << update_archive << "-r" <<
|
arguments << "x" << update_archive << "-r" <<
|
||||||
"-y" << QString("-o%1").arg(output_temp_directory);
|
"-y" << QString("-o%1").arg(output_temp_directory);
|
||||||
|
@ -146,24 +185,38 @@ int main(int argc, char *argv[]) {
|
||||||
qDebug("\n===== copying =====\n");
|
qDebug("\n===== copying =====\n");
|
||||||
|
|
||||||
// Find "rssguard" subfolder path in
|
// Find "rssguard" subfolder path in
|
||||||
|
QFileInfoList rssguard_temp_root = QDir(output_temp_directory).entryInfoList(QDir::Dirs |
|
||||||
|
QDir::NoDotAndDotDot |
|
||||||
|
QDir::NoSymLinks);
|
||||||
|
|
||||||
|
if (rssguard_temp_root.size() != 1) {
|
||||||
|
qDebug("Could not find root of downloaded application data.");
|
||||||
|
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString rssguard_single_temp_root = rssguard_temp_root.at(0).absoluteFilePath();
|
||||||
|
|
||||||
|
|
||||||
// TODO: upravit copyPath aby prepisoval soubory kdyz je kopiruje
|
// TODO: upravit copyPath aby prepisoval soubory kdyz je kopiruje
|
||||||
// a to udelat tak ze se ten cilovej soubor pokusi smazat
|
// a to udelat tak ze se ten cilovej soubor pokusi smazat
|
||||||
// a az pak nakopiruje.
|
// a az pak nakopiruje.
|
||||||
copyPath(output_temp_directory, rssguard_path);
|
if (!copyPath(rssguard_single_temp_root, rssguard_path)) {
|
||||||
|
qDebug("Critical error appeared during copying of application files.");
|
||||||
|
}
|
||||||
|
|
||||||
qDebug("\n===== copying =====\n");
|
qDebug("\n===== copying =====\n");
|
||||||
|
|
||||||
qDebug("\n===== cleanup =====\n");
|
qDebug("\n===== cleanup =====\n");
|
||||||
|
|
||||||
removeDir(output_temp_directory);
|
removeDir(output_temp_directory);
|
||||||
|
QFile::remove(update_archive);
|
||||||
|
|
||||||
qDebug("\n===== cleanup =====\n\n\n");
|
qDebug("\n===== cleanup =====\n");
|
||||||
|
|
||||||
|
|
||||||
qDebug("Press any key to exit updater and start RSS Guard.");
|
qDebug("Press any key to exit updater and start RSS Guard.");
|
||||||
|
|
||||||
std::cin.ignore();
|
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
|
||||||
|
|
||||||
QProcess::startDetached(rssguard_executable);
|
QProcess::startDetached(rssguard_executable);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue