mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-11-07 18:43:26 -08:00
* [Installer][Client] Back up user data before old uninstallers can delete it * [Installer][Client] Fix stale backup resurrection, batch session backups, extend coverage NSIS: clear stale %TEMP% backup and only arm restore when something was copied, directory-existence checks, back up loose .dec decks, drop downloaded pics but keep pics\CUSTOM. Helper: single session dir per run (ms timestamps), same-basename disambiguation, partial copies still report their location. * [Installer][Client] Fix review findings: throttle backups, NSIS old dir, portable messaging * [Installer][Client] Fix review findings: backup markers, NSIS relocate, size cap * [Installer][Client] Fix review findings: sounds, session coverage, NSIS wording Client: back up data/sounds in portable mode and mention it in the warning; reuse a recent session only when complete and covering the current sources (source manifest), estimate size only for fresh copies, normalize dedup via isInsideDir. Helper: source manifest per session with sessionCoversSources(), clear out-params on all failure paths. NSIS: document defensive portable branch, merge backup over surviving data/ to repair partial deletes, copy (not move) wording in relocate, note .txt exclusion in deck notice. * [Installer][Client] Fix review findings: stale backup, empty reuse, relocate, portable warning NSIS: wipe TEMP backup once per run to avoid resurrecting deleted files, check data dir existence in relocate so dir-only trees are moved. Client: never reuse a recent session for an empty source set, only fall back to a covering session on copy failure, warn fresh portable installs instead of staying silent. * [Installer][Client] Fix review findings: usable session reuse, loose decks, NSIS pics, symlinks * [Installer][Client] Fix portable backup exclusions in offender merge * [Client] Split at-risk data warning into focused helpers Ricky's nit on the 200+ line warnAboutDataPathsInProgramDir: extract collection (portable/installed), backup, message building and dialog into named helpers. No behavior change, all tr() strings untouched. * [Client] Read path settings inside isPortableBackupExcluded * [Client] Make stateless at-risk helpers static * [Client] Extract at-risk data warning out of MainWindow * [Installer][Client] Fix review findings: subdir backup, portable warning, backup API NSIS: - Back up unknown top-level install subdirs (e.g. <installdir>\decks), not just loose deck files, so the 3.1.1 -> new upgrade no longer loses data folders the old RMDir /r deletes before the client ever runs. Payload dirs (plugins/translations/sounds/themes) stay in place to avoid restoring stale DLLs; restore + relocate handle the new backup set and the one-time notice covers both decks and folders. - Restart the %TEMP% backup when the 32/64-bit passes point at different dirs instead of merging (which restored one dir's files into the other); document that only the last pass relocates and the %TEMP% copy is not a durable second copy. Client: - Drop the portable at-risk warning: portable installs never shipped an uninstaller and portable updates preserve data/, so every portable user got a spurious dialog plus daily host-machine copies. - AtRiskDataWarning is now a plain class with Q_DECLARE_TR_FUNCTIONS instead of QObject+Q_OBJECT; logging category renamed to at_risk_data_warning; MainWindow wrapper inlined into startupConfigCheck. - Lower the synchronous startup backup cap 500 -> 200 MB. Utility/tests: - Remove test-only backupAtRiskPath()/findRecentBackupSession() and the no-marker/no-manifest legacy paths; isBackupSessionComplete() now requires the complete marker; tests updated to the plural API. * [Client] Restore collectInstalledAtRiskPaths per reviewa23e02b5removed the definition along with the portable helpers, breaking the build (undefined reference at link time, and isInsideAnyDir unused under -Werror on Arch/Debian 13). Restores the202c0d65version (pathsInsideDir plus loose top-level deck files) as suggested. --------- Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
50 lines
2 KiB
C++
50 lines
2 KiB
C++
#ifndef AT_RISK_DATA_WARNING_H
|
|
#define AT_RISK_DATA_WARNING_H
|
|
|
|
#include <QCoreApplication>
|
|
#include <QString>
|
|
#include <QStringList>
|
|
#include <QtGlobal>
|
|
|
|
class QWidget;
|
|
|
|
/**
|
|
* @brief Warns when user data lives inside the program directory and backs it up first.
|
|
*
|
|
* The uninstallers shipped in Cockatrice 3.1.0/3.1.1 delete the whole install
|
|
* tree, so data paths configured inside the program directory get a safety
|
|
* backup outside the install directory before the warning is shown.
|
|
* Portable installs keep their data inside the program directory by design but
|
|
* never shipped an uninstaller, so they are skipped.
|
|
*/
|
|
class AtRiskDataWarning
|
|
{
|
|
Q_DECLARE_TR_FUNCTIONS(AtRiskDataWarning)
|
|
|
|
public:
|
|
struct AtRiskBackupOutcome
|
|
{
|
|
QStringList locations; ///< backup targets created for this check
|
|
QString sessionDir; ///< session directory holding the backup
|
|
bool complete = true; ///< false when only a partial/fallback backup exists
|
|
bool reused = false; ///< true when a recent session was reused instead of copying
|
|
bool skippedDueToSize = false; ///< true when the automatic copy was skipped for size
|
|
qint64 bytes = 0; ///< estimated bytes, only set when a fresh copy was attempted
|
|
};
|
|
|
|
/**
|
|
* @brief Backs up at-risk data paths and warns about them.
|
|
* @param parent Parent widget for the warning dialog
|
|
*/
|
|
static void warnAboutDataPathsInProgramDir(QWidget *parent);
|
|
|
|
private:
|
|
static QStringList collectInstalledAtRiskPaths(const QString &appDir);
|
|
static AtRiskBackupOutcome backUpAtRiskPaths(const QStringList &sources, const QString &appDir);
|
|
static QString buildInstalledAtRiskMessage(const QStringList &offenders,
|
|
const QStringList &sources,
|
|
const AtRiskBackupOutcome &outcome);
|
|
static void showAtRiskDataWarning(QWidget *parent, const QString &title, const QString &message);
|
|
};
|
|
|
|
#endif // AT_RISK_DATA_WARNING_H
|