Add --db and let the user choose where the database lives
- `kareer --db <path>` works for the GUI and every subcommand, before or after the subcommand name, and creates the file if missing. main() strips it from argv before CLI/GUI routing; every parser declares it so it shows in --help. - Path precedence: --db > KAREER_DB_PATH > the location chosen in the GUI (kareerrc [Database] Path, read at startup for GUI and CLI alike) > $XDG_DATA_HOME/kareer/kareer.sqlite. - First GUI run (nothing forced, no file yet, or the configured file has gone missing): DatabaseSetupDialog offers the default location, a folder of the user's choice, or an existing database used in place. Until then JobsDatabase opens nothing. - Preferences gains a Database section: Move to... (copies, leaves the original), Open Existing..., Use Default Location. Refuses foreign SQLite files and unwritable ones. - Models call JobsDatabase::reopenIfPathChanged() on refresh, so switching databases needs no restart. - Link KF6::ConfigCore; add a QuickDialogs2 configure-time guard; add kconfig to the Arch dependencies and a note to the Flatpak manifest. - README documents --db, the precedence, and the first-run choice, and gains Fedora 44 build dependencies; CONTRIBUTING gets a dev recipe. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_01BxDf7HqD1xPnsZP8wt3NTk
This commit is contained in:
+36
-2
@@ -31,10 +31,42 @@ public:
|
||||
JobsDatabase(const JobsDatabase &) = delete;
|
||||
JobsDatabase &operator=(const JobsDatabase &) = delete;
|
||||
|
||||
/// Default location: $XDG_DATA_HOME/kareer/kareer.sqlite, overridable
|
||||
/// with the KAREER_DB_PATH environment variable (used by autotests).
|
||||
/// The database file a default-constructed instance opens. Resolved in
|
||||
/// order: the --db override, the KAREER_DB_PATH environment variable
|
||||
/// (used by autotests), the path configured in kareerrc, and finally
|
||||
/// $XDG_DATA_HOME/kareer/kareer.sqlite.
|
||||
static QString defaultPath();
|
||||
|
||||
/// $XDG_DATA_HOME/kareer/kareer.sqlite, ignoring every override.
|
||||
static QString standardPath();
|
||||
|
||||
/// Set from the --db command-line option; wins over everything else.
|
||||
static void setPathOverride(const QString &path);
|
||||
|
||||
/// The user's chosen location (kareerrc); empty means standardPath().
|
||||
static void setConfiguredPath(const QString &path);
|
||||
static QString configuredPath();
|
||||
|
||||
/// True when --db or KAREER_DB_PATH decides the path, so the configured
|
||||
/// location has no effect.
|
||||
static bool hasForcedPath();
|
||||
|
||||
/// While true (GUI first run, before the user has picked a location), a
|
||||
/// default-constructed instance opens nothing and reports an error.
|
||||
static void setSelectionPending(bool pending);
|
||||
static bool selectionPending();
|
||||
|
||||
/// The file this instance opened, or empty if it opened nothing.
|
||||
QString path() const;
|
||||
|
||||
/// Reopens against defaultPath() if that no longer matches path() (the
|
||||
/// user picked another location). Returns true if it reopened.
|
||||
bool reopenIfPathChanged();
|
||||
|
||||
/// Performs a harmless write (rewrites the header's user_version), so
|
||||
/// callers can tell a read-only file apart from a usable one.
|
||||
bool checkWritable();
|
||||
|
||||
bool isOpen() const;
|
||||
QString lastError() const;
|
||||
|
||||
@@ -59,9 +91,11 @@ public:
|
||||
|
||||
private:
|
||||
void init(const QString &path);
|
||||
void close();
|
||||
bool migrate();
|
||||
Job jobFromQuery(class QSqlQuery &query) const;
|
||||
|
||||
QString m_connectionName;
|
||||
QString m_path;
|
||||
QString m_lastError;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user