Files
x3-backup/src/main_window.h
T
x3 240071166e fix: Backup-Snapshots werden jetzt mit sudo erstellt fuer korrekte Berechtigungen
Problem:
  Backups wurden ohne Root-Rechte erstellt. Dadurch wurden Datei-
  berechtigungen (UID/GID, rwx, ACLs, xattrs) nicht korrekt uebernommen.
  Root-Dateien konnten nicht gelesen werden. Backups waren unvollstaendig.

Loesung:
  - rsync_manager: create_snapshot() nutzt jetzt sudo fuer rsync
  - rsync_manager: --numeric-ids Flag hinzugefuegt fuer korrekte UID/GID
  - snapshot_manager: mkdir mit sudo fuer Root-Besitz der Snapshots
  - snapshot_manager: delete_snapshot mit sudo (Snapshots sind Root-owned)
  - main_window: Sudo-Passwort-Dialog vor jedem Backup
  - main_window: Dialog-Text erweitert (Backup erfordert sudo)
  - main.cpp: --sudo-password Argument fuer CLI/Cron-Modus
  - main.cpp: Interaktive Passwort-Eingabe im CLI-Modus
  - README.md: Build-Abhaengigkeiten fuer alle Distros hinzugefuegt
  - README.md: Rechte-Tabelle aktualisiert
  - README.md: Cronjob-Beispiel mit Passwort-Speicherung aktualisiert

Betroffene Dateien:
  src/rsync_manager.h, src/rsync_manager.cpp
  src/snapshot_manager.h, src/snapshot_manager.cpp
  src/main_window.h, src/main_window.cpp
  src/main.cpp
  README.md
2026-09-08 08:17:39 +00:00

107 lines
3.3 KiB
C++

#pragma once
#include <gtk/gtk.h>
#include <string>
#include <vector>
#include <fstream>
#include "config.h"
#include "rsync_manager.h"
#include "snapshot_manager.h"
#include "system_tray.h"
#include "settings_dialog.h"
class MainWindow {
public:
MainWindow(Config& config);
~MainWindow();
GtkWidget* widget() const { return window_; }
void run();
void show();
void hide();
bool is_visible() const;
void start_quick_backup();
SystemTray& tray() { return tray_; }
private:
void build_ui();
void build_menu();
void build_toolbar();
void build_statusbar();
void refresh_snapshot_list();
void browse_path(const std::string& snapshot, const std::string& path);
void navigate_up();
void show_sudo_dialog(std::function<void(const std::string&)> callback);
void open_backup_window(const std::string& description = "");
void close_backup_window();
void append_backup_line(const std::string& line, const char* tag = nullptr);
void install_cronjob();
void remove_cronjob();
void show_log_window();
void append_live_log(const std::string& line, const char* tag = nullptr);
void load_log_history();
static void on_backup(GtkWidget* w, gpointer d);
static void on_restore(GtkWidget* w, gpointer d);
static void on_delete_snapshot(GtkWidget* w, gpointer d);
static void on_new_backup(GtkWidget* w, gpointer d);
static void on_settings(GtkWidget* w, gpointer d);
static void on_quit(GtkWidget* w, gpointer d);
static void on_about(GtkWidget* w, gpointer d);
static void on_show_log(GtkWidget* w, gpointer d);
static void on_snapshot_selected(GtkListBox* box, GtkListBoxRow* row, gpointer d);
static void on_file_row_activated(GtkTreeView* tree, GtkTreePath* path, GtkTreeViewColumn* col, gpointer d);
static gboolean on_file_button_press(GtkWidget* widget, GdkEventButton* event, gpointer d);
static void on_navigate_up(GtkWidget* w, gpointer d);
static void on_system_backup(GtkWidget* w, gpointer d);
static void on_system_restore(GtkWidget* w, gpointer d);
static void on_install_cron(GtkWidget* w, gpointer d);
static void on_remove_cron(GtkWidget* w, gpointer d);
static gboolean on_tray_close(GtkWidget* widget, GdkEvent* event, gpointer d);
Config& config_;
RsyncManager rsync_;
SnapshotManager snapshots_;
SystemTray tray_;
GtkWidget* window_ = nullptr;
GtkWidget* notebook_ = nullptr;
GtkWidget* snapshot_listbox_ = nullptr;
GtkWidget* file_tree_ = nullptr;
GtkWidget* path_entry_ = nullptr;
GtkWidget* statusbar_ = nullptr;
GtkWidget* nav_label_ = nullptr;
GtkListStore* file_store_ = nullptr;
GtkWidget* toolbar_ = nullptr;
GtkWidget* live_log_textview_ = nullptr;
GtkWidget* live_log_label_ = nullptr;
GtkWidget* backlog_textview_ = nullptr;
GtkWidget* backlog_scrolled_ = nullptr;
/* Backup progress window */
GtkWidget* backup_win_ = nullptr;
GtkWidget* backup_cmd_label_ = nullptr;
GtkWidget* backup_output_view_ = nullptr;
GtkWidget* backup_progress_ = nullptr;
GtkWidget* backup_status_label_ = nullptr;
GtkWidget* backup_time_label_ = nullptr;
GtkWidget* backup_size_label_ = nullptr;
GtkWidget* backup_cancel_btn_ = nullptr;
GtkWidget* backup_close_btn_ = nullptr;
std::string log_path_;
std::string current_snapshot_;
std::string current_path_;
std::string current_sudo_password_;
std::vector<std::string> path_stack_;
int col_name = 0, col_size = 1, col_type = 2, col_permissions = 3, col_mtime = 4;
};